Подписываем данные: hmac на практике в api и web-формах

Алан-э-Дейл       14.05.2023 г.

Общее описание алгоритма SHA-2

На рисунке ниже приведена схема 1 итерации алгоритма SHA-2.

В основе хеш-функции лежит структура Меркла-Дамгарда, согласно которой исходное значение после дополнения разбивается на блоки, а каждый блок в свою очередь на 16 слов.

Каждый блок сообщения пропускается алгоритмом через цикл с 80 или 64 интерациями, или раундами. На каждом раунде задается функция преобразования из входящих в состав блока слов. Два слова из сообщения преобразуются этой функцией. Полученные результаты суммируются, а в результате получается значение хеш-функции. Для обработки следующего блока используются результаты обработки предыдущего блока. Независимо друг от друга блоки обрабатывать нельзя.

В работе алгоритма SHA-2 используются битовые операции:

  • || — конкатенация — операция склеивания объектов линейной структуры, строк
  • + — операция сложение
  • and (&, &&) — побитовая операция «И»
  • xor — операция, исключающая «ИЛИ»
  • shr (shift right) — логический сдвиг вправо
  • rots (rotate right) — циклический сдвиг вправо

5. Застосування та сертифікація

SHA-224, SHA-256, SHA-384 і SHA-512 законом США допускаються до використання в деяких урядових додатках, включаючи використання в рамках інших криптографічних алгоритмів і протоколів, для захисту інформації, що не має грифу таємності. Стандарт також допускає використання SHA-2 приватними і комерційними організаціями.

Хеш-функції SHA-2 використовуються для перевірки цілісності даних і в різних криптографічних схемах. На сімейство хеш-функцій SHA-2 не має такого широкого розповсюдження, як MD5 і SHA-1 , незважаючи на виявлені в останніх недоліки.

Деякі приклади застосування SHA-2 вказані в таблиці:

Область застосування Деталі
S / MIME SHA-224, SHA-256, SHA-384 або SHA-512 дайджести повідомлень
OpenLDAP SHA-256, SHA-384 або SHA-512 хеш-кодування паролів
DNSSEC SHA-256 дайджести DNSKEY в протоколі DNSSEC
X.509 SHA-224, SHA-256, SHA-384 і SHA-512 використовуються для створення електронного цифрового підпису сертифіката
PGP SHA-256, SHA-384, SHA-512 використовуються для створення електронного цифрового підпису
IPSec Деякі реалізації підтримують SHA-256 в протоколах ESP і IKE
DSA Сімейство SHA-2 використовується для створення електронного цифрового підпису
SHACAL-2 Блоковий алгоритм шифрування SHACAL-2 побудований на основі хеш-функції SHA-256
Передача файлів Для надійності передачі файлів по мережі іноді вказуються їх SHA-2 дайджести

Як показали дослідження , алгоритми SHA-2 працюють в 2-3 рази повільніше інших популярних хеш-алгоритмів MD5, SHA-1, Tiger і RIPEMD-160.

5.1. Сертифікація

На 5 листопада 2008 року було сертифіковано понад 250-ти реалізацій SHA-2, чотири з яких могли оперувати повідомленнями з довжиною в бітах некратності восьми.

Bitcoin Hasher

Bitcoin Hasher представляет собой небольшое приложение для поиска коллизий в алгоритме шифрования SHA-256.

Осуществление поиска производится путем создания так называемого «двойного шифрования» цифровых отпечатков. То бишь из уже ранее зашифрованной информации полученной из Blockchain, приложение генерировало подобный отпечаток для каждой из транзакций посредством применения SHA-256.

Алгоритм работы сводился к следующему:

  1. На клиенте JavaScript делал новый XHR-запрос к Blockchain API следующего вида: https://blockchain.info/rawblock/ (уникальный идентификатор блока вводимый в input приложения).

  2. После отправки запроса к Blockchain серверам, в ответе Bitcoin Hasher получал детальную информацию о блоке, пример которой я уже описывал.

  3. Из поля «tx» приложение «забирало» массив дайджестов подтвержденных транзакций в конкретном блоке и на их основе Node.js генерировал точно такой же цифровой отпечаток каждой из транзакций.

  4. Параллельно работы генерации из поля «prev_block» (в которое входит значение идентификатора предыдущего блока) на клиенте JavaScript создавал новый XHR-запрос следующего вида: https://blockchain.info/rawblock/ (уникальный идентификатор предыдущего блока). Данный процесс был зациклен до тех пор пока все блоки и транзакции не будут обработаны.

  5. При параллельной работе клиент-серверного приложения все INPUT-OUTPUT данные записываются в папку db_blocks/block-NUMBER_BLOCK.txt

  6. Итоговой задачей остается найти INPUT дайджест, который является ключом к интересующему вас OUTPUT отпечатку.

Полезные материалы для ознакомления с приложением:

Процесс работы Bitcoin Hasher:

Что такое Python SHA256?

SHA расшифровывается как Безопасные хэш-алгоритмы. Это набор криптографических хэш-функций. Эти функции могут быть использованы для различных приложений, таких как пароли и т. Д. Модуль hashlib Python используется для реализации общего интерфейса для многих различных алгоритмов безопасного хэширования и дайджеста сообщений. Хэш-алгоритмы, включенные в этот модуль, являются:

  • SHA1: 160-битная хэш-функция, похожая на хэш MD5
  • SHA224: внутренний размер блока 32 бита (усеченная версия)
  • SHA256: внутренний размер блока 32 бита
  • SHA384: внутренний размер блока 32 бита (усеченная версия)
  • SHA512: внутренний размер блока 64 бита
  • Алгоритм MD5

Особенности протокола SHA-256

Первоначальная версия алгоритма SHA-256 была создана Агентством национальной безопасности США весной 2002 года. Спустя несколько месяцев Национальный метрологический университет опубликовал новоявленный протокол шифрования в принятом на федеральном уровне стандарте безопасной обработки данных FIPS PUB 180-2. Зимой 2004 года он пополнился второй версией алгоритма.

В течение следующих 3 лет АНБ выпустила патент на SHA второго поколения под лицензией Royalty-free. Именно это дало старт применению технологии в гражданских сферах.

Данный протокол работает с информацией, раздробленный на части по 512 бит (или другими словами 64 байта). Он производит ее криптографическое «смешивание», а затем выдаёт 256-битный хеш-код. В состав алгоритма входит сравнительно простой раунд, который повторяется 64 раза.

Кроме того, SHA-256 имеет довольно неплохие технические параметры:

  • Показатель размера блока (байт) – 64.
  • Предельно допустимая длина сообщения (байт) – 33.
  • Характеристика размера дайджеста сообщения (байт) – 32.
  • Стандартный размер слова (байт) – 4.
  • Параметр длины внутреннего положения (байт) – 32.
  • Число итераций в одном цикле – всего 64.
  • Достигаемая протоколом скорость (MiB/s) – примерно 140.

Работа алгоритма SHA-256 базируется на методе построения Меркла-Дамгарда, в соответствии с которым начальный показатель сразу после внесенного изменения разделяется на блоки, а те, в свою очередь, на 16 слов.

Набор данных проходит сквозь цикл, насчитывающий 80 или 64 итерации. Каждый этап характеризуется запуском хеширования из составляющих блок слов. Пара из них обрабатываются инструментарием функции. Далее результаты преобразования складываются, выдав в итоге верный показатель хеш-кода. Для генерации очередного блока используется значение предыдущего. Преобразовывать их отдельно друг от друга не получится.

Также стоит упомянуть 6 битовых операций, на основе которых функционирует протокол:

  • «and» — побитовая операция «И»;
  • «shr» — перемещает значение на требуемое количество бит вправо;
  • «rots» — команда аналогичная по действию предыдущий, с той лишь разницей, что осуществляется циклический сдвиг;
  • «||» или конкатенация — операция соединения частей линейной структуры, чаще всего строк;
  • «xor» — команда, убирающая «ИЛИ»;
  • «+» — обыкновенная операция сложения.

Как можно заметить, довольно типичный для любого алгоритма шифрования набор операций.

Сравнение функций SHA

В таблице ниже внутреннее состояние означает «внутреннюю хеш-сумму» после каждого сжатия блока данных.

Сравнение функций SHA
Алгоритм и вариант Размер вывода (бит) Размер внутреннего состояния (биты) Размер блока (бит) Раундов Операции Защита от коллизионных атак (биты) Защита от атак с увеличением длины (в битах) Производительность на Skylake (средняя цена за клик ) Впервые опубликовано
Длинные сообщения 8 байт
MD5 (как ссылка) 128 128 (4 × 32) 512 64 And, Xor, Rot, Add (mod 2 32 ), Или ≤ 18 (обнаружены коллизии) 4,99 55.00 1992 г.
SHA-0 160 160 (5 × 32) 512 80 And, Xor, Rot, Add (mod 2 32 ), Или <34 (обнаружены коллизии) ≈ SHA-1 ≈ SHA-1 1993 г.
SHA-1 <63 (обнаружены коллизии) 3,47 52,00 1995 г.
SHA-2 SHA-224 SHA-256 224 256 256 (8 × 32) 512 64 And, Xor, Rot, Add (mod 2 32 ), Or, Shr 112 128 32 0 7,62 7,63 84,50 85,25 2004 2001
SHA-384 SHA-512 384 512 512 (8 × 64) 1024 80 And, Xor, Rot, Add (mod 2 64 ), Or, Shr 192 256 128 (≤ 384) 0 5,12 5,06 135,75 135,50 2001 г.
SHA-512/224 SHA-512/256 224 256 112 128 288 256 ≈ SHA-384 ≈ SHA-384 2012 г.
SHA-3 SHA3-224 SHA3-256 SHA3-384 SHA3-512 224 256 384 512 1600 (5 × 5 × 64) 1152 1088 832 576 24 И, Xor, Rot, Not 112 128 192 256 448 512 768 1024 8,12 8,59 11,06 15,88 154,25 155,50 164,00 164,00 2015 г.
SHAKE128 SHAKE256 d (произвольно) d (произвольно) 1344 1088 мин ( д / 2, 128) мин ( д / 2, 256) 256 512 7,08 8,59 155,25 155,50

В столбце поразрядных операций «Rot» обозначает , а «Shr» обозначает . Все эти алгоритмы тем или иным образом используют за исключением SHA-3.

Более подробные измерения производительности на современных архитектурах процессоров приведены в таблице ниже.

Архитектура процессора Частота Алгоритм Размер слова (бит) Циклов / байт x86 МиБ / с x86 Циклов / байт x86-64 МиБ / с x86-64
Intel Ivy Bridge 3,5 ГГц SHA-256 32 16,80 199 13.05 256
SHA-512 64 43,66 76 8,48 394
AMD Piledriver APU 3,8 ГГц SHA-256 32 22,87 158 18,47 196
SHA-512 64 88,36 41 год 12,43 292

Номера производительности с пометкой «x86» выполнялись с использованием 32-битного кода на 64-битных процессорах, тогда как номера «x86-64» — это собственный 64-битный код. Хотя SHA-256 предназначен для 32-битных вычислений, он действительно выигрывает от кода, оптимизированного для 64-битных процессоров на архитектуре x86. 32-битные реализации SHA-512 значительно медленнее своих 64-битных аналогов. Варианты обоих алгоритмов с разными размерами вывода будут работать одинаково, так как функции расширения и сжатия сообщений идентичны, и различаются только начальные значения хеш-функции и размеры вывода. Лучшие реализации MD5 и SHA-1 выполняют от 4,5 до 6 циклов на байт на современных процессорах.

Тестирование было проведено Иллинойским университетом в Чикаго на их системе Hydra8, работающей на Intel Xeon E3-1275 V2 с тактовой частотой 3,5 ГГц, и на их системе Hydra9 с APU AMD A10-5800K с тактовой частотой 3,8 ГГц. Указанные выше скорости циклов на байт являются средней производительностью алгоритма, обрабатывающего сообщение размером 4096 байт с использованием программного обеспечения для криптографического тестирования SUPERCOP. Производительность в мегабайтах в секунду экстраполируется из тактовой частоты процессора на одном ядре; реальная производительность будет зависеть от множества факторов.

SHA-3-Encryption—The Next Big Leap

Cyberattacks are expected to increase as computer processing power becomes cheaper to obtain, and this means that as time goes on, digital signatures that are considered adequate today won’t be as secure in the face of increased future threats. The likes of the SHA-2 algorithm will be obsolete.That’s why choosing the right algorithm will be so critical. Relying on workarounds won’t be enough. The truth is that these days no hashing algorithm has a shelf life of more than 10 years, which is why cryptographers have already completed work on SHA-3, the replacement for the SHA-2 algorithm. When it comes time to move to a safer standard, SHA-3 will be there and ready to take up the fight.Creating new cryptographic standards takes many years of research and testing. Only then can work begin on developing software that supports them. It’s only by moving ahead of the threats that we are able to talk about the effectiveness of new levels of security.

Check the iso file

Ubuntu distributes the SHA-256 checksum hashes in a file called SHA256SUMS in the same directory listing as the download page for your release http://releases.ubuntu.com.

Manual method

First open a terminal and go to the correct directory to check a downloaded iso file:

cd download_directory

Then run the following command from within the download directory.

sha256sum ubuntu-9.10-dvd-i386.iso

sha256sum should then print out a single line after calculating the hash:

c01b39c7a35ccc3b081a3e83d2c71fa9a767ebfeb45c69f08e17dfe3ef375a7b *ubuntu-9.10-dvd-i386.iso

Compare the hash (the alphanumeric string on left) that your machine calculated with the corresponding hash in the SHA256SUMS file.

When both hashes match exactly then the downloaded file is almost certainly intact. If the hashes do not match, then there was a problem with either the download or a problem with the server. You should download the file again from either the same mirror, or from a different mirror if you suspect a server error. If you continuously receive an erroneous file from a server, please be kind and notify the web-master of that mirror so they can investigate the issue.

Semi-automatic method

First download the SHA256SUMS and SHA256SUMS.gpg files to the same directory as the iso. Then run the following commands in a terminal.

cd download_directory
sha256sum -c SHA256SUMS 2>&1 | grep OK

The sha256sum line should output a line such as:

ubuntu-9.10-dvd-i386.iso: OK

If the OK for your file appears, that indicates the hash matches.

Слабые и сильные стороны алгоритма хэширования Биткоина

Несмотря на ряд положительных качеств, алгоритм хэширования Bitcoin имеет ряд слабых мест:

Контроль со стороны участников добычи BTC. Здесь работает идентичный принцип, как и в акционерных обществах (АО), когда участники компании имеют определенное число акций. Чем большие мощности сосредоточены в руках майнеров криптосети, тем сильнее их воздействие на общую систему. Кроме того, из-за растущей сложности добычи в 2018 году заметна тенденция перехода майнинга из рук частных майнеров под контроль крупных организаций, занимающихся созданием оборудования для добычи виртуальных монет. Для получения Биткоинов частный майнер должен тратить крупные суммы на покупку асиков, подключаться к одному из пулов и платить за электроэнергию. Если экономить на оборудовании, добыча теряет рентабельность.
Следствием рассмотренной выше ситуации является тот факт, что «львиная» доля Биткоинов концентрируется в руках собственников крупных майнинговых компаний

Если взять во внимание, что не все полученные Bitcoin попадают в продажу, такие организации превращаются в инвесторов и хранителей монет. В результате число коинов в обороте снижается

Кроме того, накопление криптовалюты позволяет влиять на децентрализацию, а также курсовую стоимость BTC в процессе торгов.
Алгоритм SHA-256 из-за имеющихся недостатков постепенно отходит в прошлое, а на его место приходят более совершенные проекты. К примеру, популярность набирают Scrypt, Ethash, Blake-256, Equihash и другие. Новые алгоритмы имеют лучшую защиту и уровень безопасности, что вынудило создателей многих криптовалют отказываться от устаревшего SHA-256 в пользу более совершенных технологий.
Несмотря на исправление главных ошибок, которые были выявлены разработчиками, некоторые уязвимости убрать не удалось (в 2008 году было найдены коллизии для 22 итераций). Вот почему разработка SHA продолжилась, а на смену второй версии пришел SHA-3.

Сатоши Накамото

Преимущества Недостатки
Широкое распространение (в том числе в криптовалютном секторе). Протокол SHA активно применяется в повседневной сфере для защиты информации. Потеря децентрализации. Мощности концентрируются в руках майнинговых компаний.
Надежная защита от взлома. Итерация в SHA имеет простую структуру, что со временем привело к росту сложности добычи. На август 2018-го для майнинга Биткоинов можно использовать только асики с высокой производительностью.
Удобство в вопросах добычи коинов, универсальность в вопросе выбора техники для майнинга. Появляются новые алгоритмы, которые имеют более совершенную структуру.
Во втором варианте (SHA-2) создателям удалось устранить ряд недоработок, негативно влияющих на надежность системы. Несмотря на активную работу над ошибками, удалить многие недостатки так и не удалось. Не удивительно, что разработчики создали новую версию SHA-3.
Протокол принят на законодательном уровне в США.

алгоритм шифрования БиткоинаВидео о криптографических функциях и алгоритмах:

Криптоанализ и проверка

Для хеш-функции, для которой L — количество битов в дайджесте сообщения , поиск сообщения, которое соответствует заданному дайджесту сообщения, всегда можно выполнить с помощью поиска методом грубой силы в 2L оценках. Это называется атакой по прообразу и может быть практичным или непрактичным в зависимости от L и конкретной вычислительной среды. Второй критерий, обнаружение двух разных сообщений, которые производят один и тот же дайджест сообщения, известный как коллизия , требует в среднем только 2 оценок L / 2 с использованием атаки дня рождения .

Некоторые приложения, использующие криптографические хэши, такие как хранилище паролей, лишь минимально подвержены атаке коллизии . Создание пароля, который работает для данной учетной записи, требует атаки с использованием прообраза, а также доступа к хешу исходного пароля (обычно в файле), что может быть или не быть тривиальным. Обратное шифрование пароля (например, для получения пароля для попытки взломать учетную запись пользователя в другом месте) из-за атак невозможно. (Однако даже безопасный хэш пароля не может предотвратить атаки методом перебора слабых паролей .)

В случае подписания документа злоумышленник не может просто подделать подпись существующего документа — злоумышленник должен будет предоставить пару документов, один безобидный и один опасный, и заставить держателя закрытого ключа подписать безобидный документ. Существуют практические обстоятельства, при которых это возможно; до конца 2008 года можно было создавать поддельные сертификаты SSL с использованием коллизии MD5, которые принимались широко используемыми веб-браузерами.

Повышенный интерес к криптографическому анализу хешей во время соревнований SHA-3 привел к появлению нескольких новых атак на семейство SHA-2, лучшие из которых приведены в таблице ниже. Только атаки столкновения имеют практическую сложность; ни одна из атак не распространяется на хеш-функцию полного раунда.

На FSE 2012 исследователи Sony выступили с презентацией, в которой предлагалось расширить возможности псевдоколлизионных атак до 52 раундов на SHA-256 и 57 раундов на SHA-512, опираясь на атаку biclique псевдо-прообразом.

Опубликовано в Год Метод атаки Атака Вариант Раундов Сложность
Новые коллизионные атаки против 24-шагового SHA-2 2008 г. Детерминированный Столкновение SHA-256 24/64 2 28,5
SHA-512 24/80 2 32,5
Прообразы для ступенчато-уменьшенного SHA-2 2009 г. Встреча посередине Прообраз SHA-256 42/64 2 251,7
43/64 2 254,9
SHA-512 42/80 2 502,3
46/80 2 511,5
Продвинутые атаки с использованием прообраза » встреча посередине» 2010 г. Встреча посередине Прообраз SHA-256 42/64 2 248,4
SHA-512 42/80 2 494,6
Дифференциальная атака высшего порядка на сокращенный SHA-256 2011 г. Дифференциальный Псевдо-коллизия SHA-256 46/64 2 178
33/64 2 46
Bicliques для прообразов: атаки на Skein-512 и семейство SHA-2 2011 г. Biclique Прообраз SHA-256 45/64 2 255,5
SHA-512 50/80 2 511,5
Псевдо-прообраз SHA-256 52/64 2 255
SHA-512 57/80 2 511
Улучшение локальных коллизий: новые атаки на сокращенный SHA-256 2013 Дифференциальный Столкновение SHA-256 31/64 2 65,5
Псевдо-коллизия SHA-256 38/64 2 37
Эвристика ветвления в дифференциальном поиске коллизий с приложениями к SHA-512 2014 г. Эвристический дифференциал Псевдо-коллизия SHA-512 38/80 2 40,5
Анализ SHA-512/224 и SHA-512/256 2016 г. Дифференциальный Столкновение SHA-256 28/64 практичный
SHA-512 27/80 практичный
Псевдо-коллизия SHA-512 39/80 практичный

Официальная проверка

Реализация всех функций безопасности, утвержденных FIPS, может быть официально подтверждена с помощью программы CMVP , совместно управляемой Национальным институтом стандартов и технологий (NIST) и организацией по обеспечению безопасности связи (CSE). Для неформальной проверки пакет для генерации большого количества тестовых векторов доступен для загрузки на сайте NIST; Однако полученная проверка не заменяет формальную проверку CMVP, которая требуется по закону для определенных приложений.

По состоянию на декабрь 2013 года существует более 1300 проверенных реализаций SHA-256 и более 900 SHA-512, при этом только 5 из них способны обрабатывать сообщения с длиной в битах, не кратной восьми, при поддержке обоих вариантов.

Класс MessageDigest в Java

Java предоставляет встроенный MessageDigest класс для хеширования SHA-256:

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(
  originalString.getBytes(StandardCharsets.UTF_8));

Однако здесь мы должны использовать пользовательский преобразователь байт в шестнадцатеричный, чтобы получить хэшированное значение в шестнадцатеричном формате:

private static String bytesToHex(byte[] hash) {
    StringBuilder hexString = new StringBuilder(2 * hash.length);
    for (int i = 0; i < hash.length; i++) {
        String hex = Integer.toHexString(0xff & hash);
        if(hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }
    return hexString.toString();
}

Мы должны знать, что дайджест сообщения не является потокобезопасным . Следовательно, мы должны использовать новый экземпляр для каждого потока.

Обзор

SHA (Secure Hash Algorithm) – одна из популярных криптографических хэш-функций. Криптографический хэш можно использовать для создания подписи для текста или файла данных. В этом уроке давайте рассмотрим, как мы можем выполнять операции хэширования SHA-256 и SHA 3-256 с использованием различных библиотек Java.

Алгоритм SHA256 генерирует почти уникальный 256-битный (32-байтовый) хэш фиксированного размера. Это односторонняя функция, поэтому результат не может быть расшифрован обратно к исходному значению.

В настоящее время хеширование SHA-2 широко используется, поскольку оно считается наиболее безопасным алгоритмом хеширования в криптографической сфере.

SHA-3 является последним стандартом безопасного хэширования после SHA-2. По сравнению с SHA-2, SHA-3 обеспечивает другой подход для создания уникального одностороннего хэша, и он может быть намного быстрее в некоторых аппаратных реализациях. Подобно SHA-256, SHA 3-256-это 256-битный алгоритм фиксированной длины в SHA-3.

NIST выпустила SHA-3 в 2015 году, поэтому на данный момент существует не так много библиотек SHA-3, как SHA-2. Только в JDK9 алгоритмы SHA-3 были доступны во встроенных поставщиках по умолчанию.

Теперь давайте начнем с SHA-256.

Майнинг криптовалюты на алгоритме SHA-256

Начнем с того, что добывать монеты, системы которых работают по данному протоколу, можно тремя способами:

  • CPU;
  • GPU;
  • ASIC.

Сложность майнинга напрямую зависит от того, о какой криптовалюте идет речь. Однако в любом случае наибольшей эффективностью характеризуются именно ASIC-устройства, главным недостатком которых является чрезмерно высокая стоимость.

В среднем ASIC-майнер стоит около 100 тысяч рублей (Asic Майнер AVALON 821), но также можно приобрести и более дорогие модели, цена которых достигает полмиллиона рублей (Asic Майнер BITFURY B8 16NM 50 TH/S).

Что касается добычи криптовалюты на процессорах, то такой способ считается наименее эффективным. В особенности, если говорить о цифровой валюте Bitcoin.

Наиболее адекватное решение – ферма из видеокарт. В среднем, стоимость прибыльной фермы колеблется в диапазоне 1000-2000$. Какую видеокарту выбрать для добычи криптовалюты на алгоритме SHA-256?

Если говорить о компании Nvidia, то наилучшим решением станет видеокарта GTX 1080 Ti (1400 MH/s). Естественно, непосредственный конкурент в лице AMD также не отстает, для майнинга подойдут абсолютно все карты серии Vega. Видеоадаптер Radeon RX Vega обеспечивает майнинг со скоростью 1200 MH/S. Именно такому оборудованию следует отдать предпочтение.

Если вы ищите вариант подешевле, в таком случае можно приобрести Radeon 7970, такое оборудование способно выдавать до 800 MH/s. Не забывайте, что помимо видеокарт для запуска фермы требуется и другое оборудование, например, радиаторы охлаждения, блок питания, оперативная память и т. д.

Часть 2. HKDF

HKDF (HMAC Key Derivation Function) является одной из реализаций механизма KDF. В алгоритме KDF в качестве псевдослучайной функции (обозначенной выше как PRF*), а также экстрактора псевдослучайной ключа, используется механизм HMAC.

Алгоритм HKDFПредставим схему HMAC в виде функции от двух аргументов, где первый из них — это всегда ключ, а второй — данные, которые будут хэшироваться вместе с ключом. Также обозначим как HashLen размер выходных данных (в октетах), используемый в данном алгоритме. Символом || обозначается конкатенация («склеивание») строк. То есть под записью HMAC(key, a || b) подразумевается, что хэш-функция с заданным ключом key действует на конкатенацию a и b.

Зная это, алгоритм HKDF можно записать в виде:

где XTS, SKM и CTXInfo обозначают то же, что и в общем принципе работы KDF, а значения K(i), i = 1,…,t определяются согласно правилу:

PRK = HMAC-Hash(XTS, SKM) — первый шаг алгоритма, на котором из исходных данных ключа (SKM) генерируется псевдослучайный ключ (PRK). При этом длина PRK определяется функцией, используемой в конкретной схеме HMAC (HMAC-Hash) и составляет HashLen октетов

Обратите внимание, что ключом для этой хэш-функции является соль, а «сообщением» — наш исходный ключ. В случае, когда энтропия SKM достаточно велика, PRK будет не отличим от случайного.
K(1) = HMAC-Hash(PRK, CTXinfo || 0), K(i+1) = HMAC-Hash(PRK, K(i) || CTXinfo || i), 1 ≤ i

где t = L/HashLen — количество «блоков», необходимых для получения конечного ключа длины L. Число i в формуле для второго и последующих шагов представляется в шестнадцатеричном виде. В случае, когда требуемая длина ключа не кратна HashLen, выходным значением алгоритма являются L первых октетов K. При этом существует ограничение на L: L ≤ 255 * HashLen.

Рис 2. Схема работы HKDF

Как было отмечено в описании общего алгоритма KDF, соль — опциональное поле; при отсутствии предоставленного значения, на вход подается строка нулей длины HashLen. Но ее использование существенно увеличивает безопасность всей схемы, уменьшает зависимость выходного ключа от главного, и гарантирует независимость результатов работы хэш-функций, ведь значение XTSalt является ее ключом на шаге создания PRK.

@nusr_et via Instagram

Еще одним необязательным аргументом является контекстная информация. Однако для некоторых приложений она является необходимым условием работы. Дело в том, что контекст позволяет связать получившийся в результате работы алгоритма «длинный» ключ с информацией, специфичной для приложений и пользователей. Такой информацией может служить, например, номера протоколов, идентификаторы алгоритмов и т.д. Это становится особенно важным, когда разные приложения используют HKDF с одним и тем же входным главным ключом, потому что в этом случае контекст позволяет генерировать различные выходные данные. Единственным и крайне важным условием для контекстной информации является ее независимость от входного ключа SKM.

Гость форума
От: admin

Эта тема закрыта для публикации ответов.