BLAKE (хеш-функция)

редактировать
Криптографическая хеш-функция
BLAKE
Общие
ДизайнерыЖан-Филипп Аумассон, Лука Хензен, Вилли Мейер, Рафаэль К.-В. Фан
ПреемникиBLAKE2
СертификацияФиналист SHA-3
Деталь
Размеры дайджеста 224, 256, 384 или 512 бит
СтруктураКонструкция HAIFA
Раунды14 или 16
Скорость8,4 cpb на Core 2 для BLAKE-256; 7,8 cpb для BLAKE-512

BLAKE - это криптографическая хэш-функция, основанная на потоковом шифровании ChaCha Дэна Бернштейна.>, но перед каждым циклом ChaCha добавляется переставленная копия входного блока XOR с округленными константами. Как и 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 году.

Содержание

  • 1 История
  • 2 Алгоритм
  • 3 Настройки
  • 4 Пример дайджеста
  • 5 BLAKE2
    • 5.1 Вектор инициализации
    • 5.2 Алгоритм BLAKE2b
      • 5.2.1 Сжатие
      • 5.2. 2 Mix
    • 5.3 Примеры дайджестов
    • 5.4 Пользователи BLAKE2
    • 5.5 Реализации
  • 6 BLAKE3
  • 7 Ссылки
  • 8 Внешние ссылки

История

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 слов или диагональю abcd, которая комбинируется с 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)>>>16 c ← c + d // Шаг 2 (без ввода) b ← (b ⊕ c)>>>12 a ← a + b + (m [k] ⊕ n [j]) // Шаг 3 (с вводом) d ← (d ⊕ a)>>>8 c ← 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%, демонстрируя лавинный эффект :

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

BLAKE2

BLAKE2
Генерал
ДизайнерыЖан-Филипп Аумассон, Сэмюэль Невес, Зуко Уилкокс-О'Хирн, Кристиан Виннерлейн
Получено изBLAKE
Деталь
Размеры дайджеста до 64 байтов (BLAKE2b); до 32 байт (BLAKE2s); произвольно (BLAKE2X)
Раунды10 или 12
Скорость3,5 cpb на Core i5 (Ivy Bridge) для BLAKE2b

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

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

BLAKE2 удаляет добавление констант к словам сообщения из функции раунда BLAKE, изменяется две константы вращения, упрощает заполнение, добавляет блок параметров, который объединяется с помощью XOR с векторами инициализации, и уменьшает количество раундов с 16 до 12 для BLAKE2b (преемник BLAKE-512) и с 14 до 10 для BLAKE2s (преемник 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 MiB, отсюда и название такого экземпляра).

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

Вектор инициализации

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

IV0= 0x6a09e667f3bcc908 // Frac (sqrt (2)) IV 1 = 0xbb67ae8584caa73b // Frac (sqrt (3)) IV 2 = 0x3c6ef372fe94f82b // Frac (sqrt (5)) IV 3 = 0xa54ff53a5f1d36f1 // Frac (sqrt (7)) IV 4 = 0x510e527fade682d1 // Frac (sqrt (11)) IV 5 = 0x9b05688c2b3e6c1f // Frac (sqrt (13)) IV 6 = 0x1f83d9abfb41bd6b // Frac (sqrt (17)) IV 7 = 0x5be0cd19137e2179 // Frac (sqrt (19))

Алгоритм BLAKE2b

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

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

Сжатие

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

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

Mix

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

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

Пример дайджеста

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

BLAKE2s-224 ( "") = 1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4 BLAKE2s-256 ( "") = 69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9 BLAKE2b-384 ( "") = b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d 7978c6fd3244a6caf0498812673c5e05ef583825100 BLAKE2b-512 ( "") = 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce

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

BLAKE2b-512 ( "Кратком коричневая лиса перепрыгивает через ленивую собаку ") = a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 BLAKE2b-512 (" быстрая коричневая лиса прыгает через ленивые степени свободу ") = ab6b007747d8068c02e25a6008db8a77c218d94f3b40d2291a7dc8a62090a744c082ea27af01521a102e42f480a31e9844053f456b4b41e8aa78bbe5c12957bb

Пользователи BLAKE2

Реализации

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

BLAKE3

BLAKE3
General
DesignersJack O ' Коннор, Сэмюэл Невес, Жан-Филипп Аумассон, Зуко Уилкокс-О'Хирн
Впервые опубликовано9 января 2020 г.; 9 месяцев назад (2020-01-09)
Получено изBao, BLAKE2
Деталь
Размеры дайджеста 256 бит, произвольно расширяемые
СтруктураДерево Меркла
Раунды7
Скорость0,49 cpb на Cascade Lake-SP с AVX-512

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

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

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

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-11 03:35:09
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте