Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

БЛЕЙК является криптографической хэш - функции на основе Dan Bernstein «ы ChaCha потокового шифра , но переставляются копию входного блока, операции XOR с круглыми константами, добавляют перед каждым раундом ChaCha. Как и SHA-2 , есть два варианта, различающиеся размером слова . ChaCha оперирует массивом слов 4 × 4. BLAKE многократно комбинирует хеш-значение из 8 слов с 16 словами сообщения, усекая результат ChaCha для получения следующего хеш-значения. BLAKE-256 и BLAKE-224 используют 32-битные слова и производят дайджест размером 256 бит и 224 бит соответственно, в то время как BLAKE-512 и BLAKE-384 использовать 64-битные слова и производить дайджест размером 512 и 384 бит соответственно.

BLAKE2 хэш - функция, основанная на BLAKE, было объявлено в 2012 году BLAKE3 хэш - функции, основанные на BLAKE2, было объявлено в 2020 году.

История [ править ]

BLAKE был представлен на конкурс хэш-функций NIST Жан-Филиппом Аумассоном, Лукой Хензеном, Вилли Мейером и Рафаэлем К.-В. Фан. В 2008 году было 51 запись. BLAKE прошли в финальный раунд, состоящий из пяти кандидатов, но проиграли Keccak в 2012 году, который был выбран для алгоритма SHA-3 .

Алгоритм [ править ]

Как и SHA-2 , BLAKE существует в двух вариантах: в одном используются 32-битные слова, используемые для вычисления хэшей длиной до 256 бит, а в другом - 64-битные слова, используемые для вычисления хэшей длиной до 512 бит. Преобразование основного блока объединяет 16 слов ввода с 16 рабочими переменными, но только 8 слов (256 или 512 бит) сохраняются между блоками.

Он использует таблицу из 16 постоянных слов (ведущие 512 или 1024 бит дробной части π ) и таблицу из 10 16-элементных перестановок:

σ [0] = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15σ [1] = 14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3σ [2] = 11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4σ [3] = 7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8σ [4] = 9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13σ [5] = 2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9σ [6] = 12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11σ [7] = 13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10σ [8] = 6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5σ [9] = 10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0

Основная операция, эквивалентная четверть-раунду ChaCha, работает с столбцом или диагональю из 4 слов a b c d, которые объединены с 2 словами сообщения m[]и двумя постоянными словами n[]. Выполняется 8 раз за полный раунд:

j ← σ [r% 10] [2 × i] // Вычисления индексаk ← σ [r% 10] [2 × i + 1]a ← a + b + (m [j] ⊕ n [k]) // Шаг 1 (с вводом)d ← (d ⊕ a) >>> 16c ← c + d // Шаг 2 (без ввода)b ← (b ⊕ c) >>> 12a ← a + b + (m [k] ⊕ n [j]) // Шаг 3 (с вводом)d ← (d ⊕ a) >>> 8c ← c + d // Шаг 4 (без ввода)b ← (b ⊕ c) >>> 7

В приведенном выше rпримере это круглое число (0–13), которое iизменяется от 0 до 7.

Отличия от четверть-раундовой функции ChaCha:

  • Добавлено добавление слов сообщения.
  • Направление вращения было обратным.

64-битная версия (которой нет в ChaCha) идентична, но значения вращения составляют 32, 25, 16 и 11 соответственно, а количество раундов увеличено до 16.

Твики [ править ]

На протяжении всего конкурса хэш-функций NIST участникам разрешается «настраивать» свои алгоритмы для решения обнаруженных проблем. В BLAKE внесены следующие изменения: количество раундов увеличено с 10/14 до 14/16. Это должно быть более консервативным в отношении безопасности, но при этом быть быстрым.

Примеры дайджестов [ править ]

Хеш-значения пустой строки:

БЛЕЙК-224 ("") =7dc5313b1c04512a174bd6503b89607aecbee0903d40a8a569c94eedБЛЕЙК-256 ("") =716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7aБЛЕЙК-384 ("") =c6cbd89c926ab525c242e6621f2f5fa73aa4afe3d9e24aed727faaadd6af38b620bdb623dd2b4788b1c8086984af8706БЛЕЙК-512 ("") =a8cfbbd73726062df0c6864dda65defe58ef0cc52a5625090fa17601e1eecd1b628e94f396ae402a00acc9eab77b4d4c2e852aaaa25a636d80af3fc7913ef5b8

Изменение одного бита приводит к тому, что каждый бит на выходе изменяется с вероятностью 50%, демонстрируя лавинный эффект :

БЛЕЙК-512 («Быстрая коричневая лисица перепрыгивает через ленивого пса») =1f7e26f63b6ad25a0896fd978fd050a1766391d2fd0471a77afb975e5034b7ad2d9ccf8dfb47abbbe656e1b82fbc634ba42ce186e8dc5e1ce09a885d41f43451БЛЕЙК-512 («Быстрая коричневая лиса перепрыгивает через ленивого до ф ») =a701c2a1f9baabd8b1db6b75aee096900276f0b86dc15d247ecc03937b370324a16a4ffc0c3a85cd63229cfa15c15f4ba6d46ae2e849ed6335e9ff43b764198a

BLAKE2 [ править ]

BLAKE2 - это криптографическая хеш-функция, основанная на BLAKE, созданная Жан-Филиппом Аумассоном, Сэмюэлем Невесом , Зуко Уилкокс-О'Хирном и Кристианом Виннерлейном. Целью разработки было заменить широко используемые, но неработающие алгоритмы MD5 и SHA-1 в приложениях, требующих высокой производительности программного обеспечения. BLAKE2 было объявлено 21 декабря 2012 года [2] реализация ссылка доступна в CC0 , то OpenSSL License и Apache Public License 2.0 . [3] [4]

BLAKE2b быстрее, чем MD5, SHA-1, SHA-2 и SHA-3, на 64-битных архитектурах x86-64 и ARM. [3] BLAKE2 обеспечивает лучшую безопасность, чем SHA-2, и аналогичную SHA-3: невосприимчивость к увеличению длины , неотличимость от случайного оракула и т. Д. [5]

BLAKE2 удаляет добавление констант к словам сообщения из функции раунда BLAKE, изменяет две константы вращения, упрощает заполнение, добавляет блок параметров, который подвергается операции XOR с векторами инициализации, и уменьшает количество раундов с 16 до 12 для BLAKE2b (преемник BLAKE- 512) и с 14 до 10 для BLAKE2 (преемника BLAKE-256).

BLAKE2 поддерживает режимы ключей, обработки, персонализации и хэш-дерева и может выводить дайджесты от 1 до 64 байтов для BLAKE2b или до 32 байтов для BLAKE2. Существуют также параллельные версии, предназначенные для повышения производительности на многоядерных процессорах ; BLAKE2bp (4- сторонняя параллель) и BLAKE2sp (8- сторонняя параллель).

BLAKE2X - это семейство функций расширяемого вывода (XOF). В то время как BLAKE2 ограничен 64-байтовыми дайджестами, BLAKE2X позволяет дайджесты до 256 ГиБ. BLAKE2X сам по себе не является экземпляром хэш-функции и должен быть основан на фактическом экземпляре BLAKE2. Примером экземпляра BLAKE2X может быть BLAKE2Xb16MiB , который будет версией BLAKE2X, основанной на BLAKE2b, производящей дайджесты размером 16 777 216 байт (или ровно 16 МБ , отсюда и название такого экземпляра). [6]

BLAKE2b и BLAKE2 указаны в RFC 7693 . Дополнительные функции, использующие блок параметров (солирование, персонализированные хэши, хеширование дерева и т. Д.), Не указаны, и, следовательно, также не поддерживается BLAKE2bp, BLAKE2sp или BLAKE2X. [7]

Вектор инициализации [ править ]

BLAKE2b использует вектор инициализации, который совпадает с IV, используемым SHA-512. Эти значения прозрачно получаются путем взятия первых 64 бита дробных частей положительных квадратных корней из первых восьми простых чисел.

IV 0 = 0x6a09e667f3bcc908 // Frac (sqrt (2))
IV 1 = 0xbb67ae8584caa73b // Frac (sqrt (3))
IV 2 = 0x3c6ef372fe94f82b // Frac (sqrt (5))
IV 3 = 0xa54ff53a5f1d36f1 (7 Frac ))
IV 4 = 0x510e527fade682d1 // гидроразрыва (SQRT (11))
IV 5 = 0x9b05688c2b3e6c1f // гидроразрыва (SQRT (13))
И.В. 6 = 0x1f83d9abfb41bd6b // гидроразрыва (SQRT (17))
И.В. 7 = 0x5be0cd19137e2179 // гидроразрыва (SQRT (19))

Алгоритм BLAKE2b [ править ]

Псевдокод для алгоритма BLAKE2b. Алгоритм BLAKE2b использует 8-байтовые (UInt64) слова и 128-байтовые блоки.

Алгоритм BLAKE2b  Вход: M  Сообщение для хеширования cbMessageLen: Number, (0..2 128 )  Длина сообщения в байтах Ключ  Необязательный 0..64-байтовый ключ cbKeyLen: Number, (0..64)  Длина необязательного ключа в байтах cbHashLen: Число, (1..64) Требуемая длина хеш- кода  в байтах. Вывод: Хеш-  хэш байтов cbHashLen. Инициализировать вектор состояния h с помощью IV h 0..7 ← IV 0..7 Смешайте размер ключа (cbKeyLen) и желаемую длину хэша (cbHashLen) в h 0 h 0 ← h 0 xor 0x0101kknn,  где kk - длина ключа (в байтах),  nn  - это желаемая длина хеша (в байтах) Каждый раз, когда мы сжимаем, мы записываем, сколько байтов было сжато cBytesCompressed ← 0 cBytesRemaining ← cbMessageLen Если был предоставлен ключ (например, cbKeyLen> 0), добавьте  завершающие нули, чтобы сделать его 128-байтовым (т.е. 16 слов),  и добавьте его к сообщению M  if (cbKeyLen> 0), тогда M ← Pad (Key, 128) || M cBytesRemaining ← cBytesRemaining + 128 конец, если Сжать целые 128-байтовые фрагменты сообщения, кроме последнего фрагмента, в  то время как (cBytesRemaining> 128) do chunk ← получить следующие 128 байтов сообщения M cBytesCompressed ← cBytesCompressed + 128  увеличить количество сжатых байтов cBytesRemaining ← cBytesRemaining - 128  уменьшить количество байтов в M, оставшихся для обработки h ← Compress (h, chunk, cBytesCompressed, false) false ⇒ это не последний  конец фрагмента, пока Сжать последние байты из блока M ← получить следующие 128 байтов сообщения M  Мы получим cBytesRemaining байтов (т.е. 0..128 байтов) cBytesCompressed ← cBytesCompressed + cBytesRemaining Фактическое количество байтов, оставшихся в блоке  M ← Pad (chunk, 128)  Если M было пусто, тогда мы все равно сжимаем последний кусок нулей h ← Compress (h, chunk, cBytesCompressed, true) true ⇒ это последний фрагмент Результат ← первые байты cbHashLen вектора состояния с прямым порядком байтов h Конечный алгоритм BLAKE2b

Сжать [ править ]

Функция Compress берет полный 128-байтовый фрагмент входного сообщения и смешивает его с текущим массивом состояний:

Функция Сжать  Входной сигнал: ч  Стойкие вектор состояния кусок  128 байт (16 двойное слово) кусок сообщения для сжатия т: Количество, 0..2 128  графа байтов , которые были поданы в компрессионной IsLastBlock: Boolean  Указывает , если это окончательный раунд сжатия  Выход: h  Обновленный постоянный вектор состояния Установить локальный рабочий вектор V V 0..7 ← h 0..7  Первые восемь элементов копируются из постоянного вектора состояния h V 8..15 ← IV 0..7  Остальные восемь элементов инициализируются из IV Смешайте 128-битный счетчик t с V 12 : V 13 V 12 ← V 12  xor Lo (t)  Lo 64-битный UInt128 t V 13 ← V 13  xor Hi (t)  Hi 64-битный UInt128 t  Если это последний блок, то инвертируйте все биты в V 14,  если IsLastBlock, то V 14 ← V 14  xor 0xFFFFFFFFFFFFFFFF  Рассматривать каждый 128-байтовый блок сообщения как шестнадцать 8-байтовых (64-битных) слов m m 0..15 ← chunk Двенадцать раундов криптографического микширования сообщений  для i от 0 до 11 do  Выберите расписание микширования сообщений для этого раунда.  BLAKE2b использует 12 раундов, в то время как SIGMA имеет только 10 записей.  S 0..15 ← SIGMA [i mod 10]  Раунды 10 и 11 используют SIGMA [0] и SIGMA [1] соответственно Смешайте (V 0 , V 4 , V 8 , V 12 , m [S 0 ], m [S 1 ]) Смешайте (V 1 , V 5 , V 9 , V 13 , m [S 2 ], m [S 3 ]) Смешайте (V 2 , V 6 , V 10 , V 14 , m [S 4 ], m [S 5 ]) Смешайте (V 3 , V 7 , V 11 , V 15 , m [S 6 ], m [S 7 ]) Смешайте (V 0 , V 5 , V 10 , V 15 , m [S 8 ], m [S 9 ]) Смешайте (V 1 , V 6 , V 11 , V 12 , m [S 10 ], m [S 11 ]) Смешайте (V 2 , V 7 , V 8 , V 13 , m [S 12 ], m [S 13 ]) Смешайте (V 3 , V 4 , V 9 , V 14 , m [S 14 ], m [S 15 ]) до конца для Смешайте верхнюю и нижнюю половины V в текущий вектор состояния h h 0..7 ← h 0..7  xor V 0..7 h 0..7 ← h 0..7  xor V 8..15 Результат ← h Конечная функция Сжатие

Смешайте [ править ]

Функция Mix вызывается функцией Compress и смешивает два 8-байтовых слова из сообщения в состояние хеширования. В большинстве реализаций эта функция может быть написана встроенной или встроенной функцией.

Функции Mix  Входы: V a , V b , V c , V d  четыре записи 8-байтового слова из рабочего вектора V x, y  две записи 8-байтового слова из дополненного сообщения m  Выход: V a , V b , V c , V d  модифицированные версии V a , V b , V c , V d V a ← V a + V b + x со входом V d ← (V d  xor V a ) вращение влево 32 V c ← V c + V d  нет входа V b ← (V b  xor V c ) поворотный свет 24 V a ← V a + V b + y с входом V d ← (V d  xor V a ) вращение влево 16 V c ← V c + V d  нет ввода V b ← (V b  xor V c ) вращение, ночь 63 Результат ← V a , V b , V c , V d Конечная функция Mix

Примеры дайджестов [ править ]

Хеш-значения пустой строки:

BLAKE2s-224 ("") =1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4BLAKE2s-256 ("") =69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9BLAKE2b-384 ("") =b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100BLAKE2b-512 ("") =786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce

Изменение одного бита приводит к тому, что каждый бит на выходе изменяется с вероятностью 50%, демонстрируя лавинный эффект :

BLAKE2b-512 («Быстрая коричневая лиса перепрыгивает через ленивого пса») =a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918BLAKE2b-512 («Быстрая коричневая лиса перепрыгивает через ленивого до ф ») =ab6b007747d8068c02e25a6008db8a77c218d94f3b40d2291a7dc8a62090a744c082ea27af01521a102e42f480a31e9844053f456b4b41e8aa78bbe5c12957bb

Пользователи BLAKE2 [ править ]

  • Argon2 , победитель конкурса по хешированию паролей, использует BLAKE2b
  • Система развертывания Chef 's Habitat использует BLAKE2b для подписи пакетов [8]
  • Инструмент управления пакетами портов FreeBSD использует BLAKE2b
  • GNU Core Utilities реализует BLAKE2b в своей команде b2sum [9]
  • IPFS позволяет использовать BLAKE2b для хеширования дерева
  • librsync использует BLAKE2b [10]
  • Шум (криптографический протокол) , который используется в WhatsApp, включает BLAKE2 в качестве опции. [11] [ необходима ссылка ]
  • Формат файлового архива RAR версии 5 поддерживает необязательную 256-битную контрольную сумму файла BLAKE2sp вместо 32-битной CRC32 по умолчанию ; это было реализовано в WinRAR v5 + [12]
  • rmlint использует BLAKE2b для обнаружения повторяющихся файлов [13]
  • WireGuard использует BLAKE2 для хеширования [14]
  • Zcash , криптовалюта, использует BLAKE2b в доказательстве работы Equihash и в качестве функции вывода ключей.
  • NANO , криптовалюта, использует BLAKE2b в доказательстве работы, для хеширования цифровых подписей и в качестве функции получения ключа [15] [16] [17]

Реализации [ править ]

В дополнение к эталонной реализации [4] следующие криптографические библиотеки предоставляют реализации BLAKE2:

  • Ботан
  • Надувной Замок
  • Крипто ++
  • Libgcrypt
  • libsodium
  • OpenSSL
  • wolfSSL

BLAKE3 [ править ]

BLAKE3 - это криптографическая хеш-функция, основанная на Bao и BLAKE2, созданная Джеком О'Коннором, Жан-Филиппом Аумассоном, Сэмюэлем Невесом и Зуко Уилкокс-О'Хирном . Об этом было объявлено 9 января 2020 года на сайте Real World Crypto . [19]

BLAKE3 - это единый алгоритм со многими желательными функциями (параллелизм, XOF, KDF, PRF и MAC), в отличие от BLAKE и BLAKE2, которые представляют собой семейства алгоритмов с несколькими вариантами. BLAKE3 - это дерево Меркла , поэтому оно поддерживает практически неограниченную степень параллелизма (как SIMD, так и многопоточность) для больших файлов. Официальная Ржавчина и C реализация [20] является две лицензиями , как общественное достояние ( cc0 ) и лицензия Apache . [21]

BLAKE3 разработан, чтобы быть максимально быстрым. Он постоянно в несколько раз быстрее, чем BLAKE2. Функция сжатия BLAKE3 в значительной степени основана на функции сжатия BLAKE2, с самой большой разницей в том, что количество раундов сокращено с 10 до 7, изменение основано на предположении, что текущая криптография слишком консервативна. [22] Помимо обеспечения параллелизма, формат дерева Меркла также позволяет проверять потоковую передачу (проверка на лету) и инкрементные обновления. [20]

Ссылки [ править ]

  1. ^ «BLAKE2 - альтернатива MD5 / SHA-1» .
  2. ^ O'Whielacronx, Zooko (21 декабря 2012). «Представляем BLAKE2 - альтернативу SHA-3, SHA-2 и MD5» .
  3. ^ а б "БЛЕЙК2" . blake2.net .
  4. ^ a b "Официальные реализации BLAKE2" . Дата обращения 7 июля 2019 .
  5. ^ Aumasson, Жан-Филипп; Невес, Самуэль; Уилкокс-О'Хирн, Зуко; Виннерлейн, Кристиан (2013). «BLAKE2: проще, меньше, быстрее, как MD5» (PDF) . Cryptology ePrint Archive . МАКР.
  6. ^ "BLAKE2X" (PDF) .
  7. ^ Сааринен, MJ; Оумассон, JP (ноябрь 2015 г.). Криптографический хэш-код BLAKE2 и код аутентификации сообщения (MAC) . IETF . DOI : 10,17487 / RFC7693 . RFC 7693 . Дата обращения 4 декабря 2015 .
  8. ^ Habitat Internals: криптография
  9. ^ "coreutils / src / blake2 /" . github.com .
  10. ^ "librsync / src / blake2 /" . github.com .
  11. ^ «Технический документ по безопасности WhatsApp» (PDF) .
  12. ^ «Архиватор WinRAR, мощный инструмент для обработки файлов RAR и ZIP» . rarsoft.com .
  13. ^ "rmlint - документация rmlint" .
  14. ^ «WireGuard: сетевой туннель ядра нового поколения» (PDF) .
  15. ^ "работа" . docs.nano.org .
  16. ^ "подписи" . docs.nano.org .
  17. ^ "ключевой вывод" . docs.nano.org .
  18. ^ «BLAKE3 - одна функция, быстрая везде» (PDF) .
  19. ^ «Более ранняя версия Bao указала свой собственный режим дерева, который в конечном итоге превратился в BLAKE3» .
  20. ^ a b "Официальные реализации BLAKE3" . Проверено 12 января 2020 года .
  21. ^ «Эта работа выпущена в общественное достояние с CC0 1.0. В качестве альтернативы, она находится под лицензией Apache License 2.0» .
  22. ^ Aumasson, Жан-Филипп (2020). Слишком много криптографии (PDF) . Симпозиум по криптографии в реальном мире.

Внешние ссылки [ править ]

  • Веб-сайт BLAKE
  • Веб-сайт BLAKE2
  • Веб-сайт BLAKE3
  • Внедрение BLAKE на VHDL , разработанное исследовательской группой Cryptographic Engineering Research Group (CERG) в Университете Джорджа Мейсона