БЛЕЙК (хеш-функция)
Общий | |
---|---|
Дизайнеры | Жан-Филипп Омассон, Лука Хенцен, Вилли Мейер, Рафаэль К.-В. Фан |
Преемники | БЛЕЙК2 |
Сертификация | Финалист SHA-3 |
Деталь | |
Размеры дайджеста | 224, 256, 384 или 512 бит |
Структура | ХАЙФА строительство |
Раунды | 14 или 16 |
Скорость | 8,4 cpb на Core 2 для BLAKE-256; 7,8 cpb для BLAKE-512 |
BLAKE — это криптографическая хэш-функция , основанная на Дэниела Дж. Бернстайна , 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 дошел до финального раунда, состоящего из пяти кандидатов, но проиграл в 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
, который сочетается с двумя словами сообщения m[]
и два постоянных слова n[]
. Выполняется 8 раз за полный раунд:
j ← σ[r%10][2×i] // Index computations k ← σ[r%10][2×i+1] a ← a + b + (m[j] ⊕ n[k]) // Step 1 (with input) d ← (d ⊕ a) >>> 16 c ← c + d // Step 2 (no input) b ← (b ⊕ c) >>> 12 a ← a + b + (m[k] ⊕ n[j]) // Step 3 (with input) d ← (d ⊕ a) >>> 8 c ← c + d // Step 4 (no input) b ← (b ⊕ c) >>> 7
В приведенном выше r
- круглое число (0–13), а i
варьируется от 0 до 7.
Отличия от функции четверти раунда ChaCha:
- Добавлено добавление слов сообщения.
- Направление вращения изменилось.
«BLAKE повторно использует перестановку потокового шифра ChaCha с вращениями, выполняемыми в противоположных направлениях. Некоторые подозревали, что это продвинутая оптимизация, но на самом деле она возникла из-за опечатки в исходных спецификациях BLAKE», — объясняет Жан-Филипп Омассон в своем «Криптословаре». ". [1]
64-битная версия (которой нет в ChaCha) идентична, но количество ротаций составляет 32, 25, 16 и 11 соответственно, а количество раундов увеличено до 16.
Твики [ править ]
На протяжении всего конкурса хеш-функций NIST участникам разрешается «настраивать» свои алгоритмы для решения обнаруженных проблем. Изменения, внесенные в BLAKE: количество раундов увеличено с 10/14 до 14/16. Это сделано для того, чтобы быть более консервативным в отношении безопасности, но при этом оставаться быстрым.
Примеры дайджестов [ править ]
Хэш-значения пустой строки:
BLAKE-224("") = 7dc5313b1c04512a174bd6503b89607aecbee0903d40a8a569c94eed BLAKE-256("") = 716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7a BLAKE-384("") = c6cbd89c926ab525c242e6621f2f5fa73aa4afe3d9e24aed727faaadd6af38b620bdb623dd2b4788b1c8086984af8706 BLAKE-512("") = a8cfbbd73726062df0c6864dda65defe58ef0cc52a5625090fa17601e1eecd1b628e94f396ae402a00acc9eab77b4d4c2e852aaaa25a636d80af3fc7913ef5b8
Изменение одного бита приводит к изменению каждого бита выходных данных с вероятностью 50%, демонстрируя лавинный эффект :
BLAKE-512("The quick brown fox jumps over the lazy dog") = 1f7e26f63b6ad25a0896fd978fd050a1766391d2fd0471a77afb975e5034b7ad2d9ccf8dfb47abbbe656e1b82fbc634ba42ce186e8dc5e1ce09a885d41f43451 BLAKE-512("The quick brown fox jumps over the lazy dof") = a701c2a1f9baabd8b1db6b75aee096900276f0b86dc15d247ecc03937b370324a16a4ffc0c3a85cd63229cfa15c15f4ba6d46ae2e849ed6335e9ff43b764198a
(В этом примере 266 совпадающих бит из 512 составляют около 52% из-за случайного характера лавины.)
БЛЕЙК2 [ править ]
Общий | |
---|---|
Дизайнеры | Жан-Филипп Омассон, Сэмюэл Невес, Зуко Уилкокс-О’Хирн , Кристиан Виннерляйн |
Получено из | БЛЕЙК |
Деталь | |
Размеры дайджеста | до 64 байт (BLAKE2b); до 32 байт (BLAKE2); произвольный (BLAKE2X) |
Раунды | 10 или 12 |
Скорость | 3,5 cpb на Core i5 (Ivy Bridge) для BLAKE2b [2] |
BLAKE2 — это криптографическая хэш-функция, основанная на BLAKE, созданная Жаном-Филиппом Омассоном, Сэмюэлем Невесом, Зуко Уилкокс-О'Хирном и Кристианом Виннерляйном. Целью разработки было заменить широко используемые, но сломанные алгоритмы MD5 и SHA-1 в приложениях, требующих высокой производительности программного обеспечения. BLAKE2 был анонсирован 21 декабря 2012 года. [3] Эталонная реализация доступна по лицензии CC0 , лицензии OpenSSL и лицензии Apache 2.0 . [4] [5]
BLAKE2b работает быстрее, чем MD5, SHA-1, SHA-2 и SHA-3, на 64-битных архитектурах x86-64 и ARM. [4] BLAKE2 обеспечивает лучшую безопасность, чем SHA-2, и аналогичен безопасности SHA-3: невосприимчивость к увеличению длины , неотличимость от случайного оракула и т. д. [6]
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 МБ , отсюда и название такого экземпляра). [7]
BLAKE2b и BLAKE2 указаны в RFC 7693. Дополнительные функции, использующие блок параметров (соление, персонализированные хэши, хеширование деревьев и т. д.), не указаны, и, следовательно, не поддерживается поддержка BLAKE2bp, BLAKE2sp или BLAKE2X. [8]
Вектор инициализации [ править ]
BLAKE2b использует вектор инициализации, аналогичный IV, используемому SHA-512. Эти значения получаются прозрачным образом путем взятия первых 64 бит дробных частей положительных квадратных корней первых восьми простых чисел.
IV0 = 0x6a09e667f3bcc908 // Frac(sqrt(2)) IV1 = 0xbb67ae8584caa73b // Frac(sqrt(3)) IV2 = 0x3c6ef372fe94f82b // Frac(sqrt(5)) IV3 = 0xa54ff53a5f1d36f1 // Frac(sqrt(7)) IV4 = 0x510e527fade682d1 // Frac(sqrt(11)) IV5 = 0x9b05688c2b3e6c1f // Frac(sqrt(13)) IV6 = 0x1f83d9abfb41bd6b // Frac(sqrt(17)) IV7 = 0x5be0cd19137e2179 // Frac(sqrt(19))
Алгоритм BLAKE2b [ править ]
Псевдокод для алгоритма BLAKE2b. Алгоритм BLAKE2b использует 8-байтовые (UInt64) слова и 128-байтовые фрагменты.
Algorithm BLAKE2b Input: M Message to be hashed cbMessageLen: Number, (0..2128) Length of the message in bytes Key Optional 0..64 byte key cbKeyLen: Number, (0..64) Length of optional key in bytes cbHashLen: Number, (1..64) Desired hash length in bytes Output: Hash Hash of cbHashLen bytes Initialize State vector h with IV h0..7 ← IV0..7 Mix key size (cbKeyLen) and desired hash length (cbHashLen) into h0 h0 ← h0 xor 0x0101kknn where kk is Key Length (in bytes) nn is Desired Hash Length (in bytes) Each time we Compress we record how many bytes have been compressed cBytesCompressed ← 0 cBytesRemaining ← cbMessageLen If there was a key supplied (i.e. cbKeyLen > 0) then pad with trailing zeros to make it 128-bytes (i.e. 16 words) and prepend it to the message M if (cbKeyLen > 0) then M ← Pad(Key, 128) || M cBytesRemaining ← cBytesRemaining + 128 end if Compress whole 128-byte chunks of the message, except the last chunk while (cBytesRemaining > 128) do chunk ← get next 128 bytes of message M cBytesCompressed ← cBytesCompressed + 128 increase count of bytes that have been compressed cBytesRemaining ← cBytesRemaining - 128 decrease count of bytes in M remaining to be processed h ← Compress(h, chunk, cBytesCompressed, false) false ⇒ this is not the last chunk end while Compress the final bytes from M chunk ← get next 128 bytes of message M We will get cBytesRemaining bytes (i.e. 0..128 bytes) cBytesCompressed ← cBytesCompressed+cBytesRemaining The actual number of bytes leftover in M chunk ← Pad(chunk, 128) If M was empty, then we will still compress a final chunk of zeros h ← Compress(h, chunk, cBytesCompressed, true) true ⇒ this is the last chunk Result ← first cbHashLen bytes of little endian state vector h End Algorithm BLAKE2b
Сжать [ править ]
Функция Compress берет полный 128-байтовый фрагмент входного сообщения и смешивает его с текущим массивом состояний:
Function Compress Input: h Persistent state vector chunk 128-byte (16 double word) chunk of message to compress t: Number, 0..2128 Count of bytes that have been fed into the Compression IsLastBlock: Boolean Indicates if this is the final round of compression Output: h Updated persistent state vector Setup local work vector V V0..7 ← h0..7 First eight items are copied from persistent state vector h V8..15 ← IV0..7 Remaining eight items are initialized from the IV Mix the 128-bit counter t into V12:V13 V12 ← V12 xor Lo(t) Lo 64-bits of UInt128 t V13 ← V13 xor Hi(t) Hi 64-bits of UInt128 t If this is the last block then invert all the bits in V14 if IsLastBlock then V14 ← V14 xor 0xFFFFFFFFFFFFFFFF Treat each 128-byte message chunk as sixteen 8-byte (64-bit) words m m0..15 ← chunk Twelve rounds of cryptographic message mixing for i from 0 to 11 do Select message mixing schedule for this round. BLAKE2b uses 12 rounds, while SIGMA has only 10 entries. S0..15 ← SIGMA[i mod 10] Rounds 10 and 11 use SIGMA[0] and SIGMA[1] respectively Mix(V0, V4, V8, V12, m[S0], m[S1]) Mix(V1, V5, V9, V13, m[S2], m[S3]) Mix(V2, V6, V10, V14, m[S4], m[S5]) Mix(V3, V7, V11, V15, m[S6], m[S7]) Mix(V0, V5, V10, V15, m[S8], m[S9]) Mix(V1, V6, V11, V12, m[S10], m[S11]) Mix(V2, V7, V8, V13, m[S12], m[S13]) Mix(V3, V4, V9, V14, m[S14], m[S15]) end for Mix the upper and lower halves of V into ongoing state vector h h0..7 ← h0..7 xor V0..7 h0..7 ← h0..7 xor V8..15 Result ← h End Function Compress
Микс [ править ]
Функция Mix вызывается функцией Compress и смешивает два 8-байтовых слова из сообщения в хеш-состояние. В большинстве реализаций эта функция будет написана как встроенная функция.
Function Mix Inputs: Va, Vb, Vc, Vd four 8-byte word entries from the work vector V x, y two 8-byte word entries from padded message m Output: Va, Vb, Vc, Vd the modified versions of Va, Vb, Vc, Vd Va ← Va + Vb + x with input Vd ← (Vd xor Va) rotateright 32 Vc ← Vc + Vd no input Vb ← (Vb xor Vc) rotateright 24 Va ← Va + Vb + y with input Vd ← (Vd xor Va) rotateright 16 Vc ← Vc + Vd no input Vb ← (Vb xor Vc) rotateright 63 Result ← Va, Vb, Vc, Vd End Function Mix
Примеры дайджестов [ править ]
Хэш-значения пустой строки:
BLAKE2s-224("") = 1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4 BLAKE2s-256("") = 69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9 BLAKE2b-384("") = b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100 BLAKE2b-512("") = 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce
Изменение одного бита приводит к изменению каждого бита выходных данных с вероятностью 50%, демонстрируя лавинный эффект :
BLAKE2b-512("The quick brown fox jumps over the lazy dog") = a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 BLAKE2b-512("The quick brown fox jumps over the lazy dof") = ab6b007747d8068c02e25a6008db8a77c218d94f3b40d2291a7dc8a62090a744c082ea27af01521a102e42f480a31e9844053f456b4b41e8aa78bbe5c12957bb
Пользователи BLAKE2 [ править ]
- Argon2 , победитель конкурса хеширования паролей , использует BLAKE2b.
- Система развертывания Chef 's Habitat использует BLAKE2b для подписи пакетов. [9]
- портов FreeBSD использует BLAKE2b. Инструмент управления пакетами
- GNU Core Utilities реализует BLAKE2b в своей команде b2sum. [10]
- IPFS позволяет использовать BLAKE2b для хеширования деревьев.
- librsync использует BLAKE2b [11]
- Шум (криптографический протокол) , который используется в WhatsApp, включает в себя BLAKE2 в качестве опции. [12] [ нужна ссылка ]
- Формат архива RAR версии 5 поддерживает дополнительную 256-битную контрольную сумму файла BLAKE2sp вместо 32-битного CRC32 по умолчанию ; это было реализовано в WinRAR v5+ [13]
- 7-Zip (для поддержки формата архива RAR версии 5). [14] ) может генерировать подпись BLAKE2sp для каждого файла в оболочке Explorer через контекстное меню «CRC SHA» и выбрав «*»
- rmlint использует BLAKE2b для обнаружения дубликатов файлов [15]
- WireGuard использует BLAKE2 для хеширования [16]
- Zcash Криптовалюта Equihash использует BLAKE2b в доказательстве работы и в качестве функции получения ключей.
- NANO Криптовалюта использует BLAKE2b для доказательства работы, для хеширования цифровых подписей и в качестве функции получения ключей. [17] [18] [19]
- Polkadot , многоцепочный блокчейн, использует BLAKE2b в качестве алгоритма хеширования.
- PCI Vault использует BLAKE2b в качестве алгоритма хеширования для целей токенизации PCD, совместимой с PCI.
- Ergo использует BLAKE2b256 в качестве подпрограммы своего алгоритма хеширования под названием Autolykos. Криптовалюта [20]
- Ядро Linux версии 5.17 заменило SHA-1 на BLAKE2 для хеширования энтропийного пула в генераторе случайных чисел . [21]
- Открытая сеть для цифровой коммерции , инициатива правительства Индии, использует BLAKE-512 для подписи запросов API. [22]
- контрольная сумма , программа хеширования файлов Windows использует Blake2s в качестве одного из своих алгоритмов. [23]
Реализации [ править ]
В дополнение к эталонной реализации, [5] следующие библиотеки шифрования предоставляют реализации BLAKE2:
БЛЕЙК3 [ править ]
Общий | |
---|---|
Дизайнеры | Джек О’Коннор, Сэмюэл Невес, Жан-Филипп Омассон, Зуко Уилкокс-О’Хирн |
Впервые опубликовано | 9 января 2020 г |
Получено из | Бао, БЛЕЙК2 |
Деталь | |
Размеры дайджеста | 256 бит, произвольно расширяемая |
Структура | Дерево Меркла |
Раунды | 7 |
Скорость | 0,49 cpb на Cascade Lake-SP с AVX-512 [24] |
BLAKE3 — это криптографическая хеш-функция, основанная на Bao и BLAKE2, созданная Джеком О’Коннором, Жаном-Филиппом Омассоном, Сэмюэлем Невесом и Зуко Уилкокс-О’Хирном . [25] Об этом было объявлено 9 января 2020 года на Real World Crypto . [26]
BLAKE3 — это единый алгоритм со многими желательными функциями (параллелизм, XOF, KDF, PRF и MAC), в отличие от BLAKE и BLAKE2, которые представляют собой семейства алгоритмов с несколькими вариантами. BLAKE3 имеет двоичную древовидную структуру, поэтому он поддерживает практически неограниченную степень параллелизма (как SIMD, так и многопоточность) при достаточно длинном вводе. Официальные Rust и C реализации [27] имеют двойную лицензию : общественное достояние ( CC0 ) и лицензию Apache . [28]
BLAKE3 создан для максимально быстрой работы. Он стабильно в несколько раз быстрее, чем BLAKE2. Функция сжатия BLAKE3 во многом основана на функции сжатия BLAKE2, с самым большим отличием в том, что количество раундов уменьшено с 10 до 7, изменение основано на предположении, что текущая криптография слишком консервативна. [29] Помимо обеспечения параллелизма, формат дерева Меркла также позволяет осуществлять проверенную потоковую передачу (проверку «на лету») и инкрементальные обновления. [27]
Ссылки [ править ]
- ^ Омассон, Жан-Филипп (2021). Криптословарь: 500 вкусных кусочков для любознательного криптографа . Нет крахмального пресса. ISBN 9781718501409 .
- ^ «BLAKE2 – альтернатива MD5/SHA-1» .
- ^ О'Уилакрокс, Зуко (21 декабря 2012 г.). «Представляем BLAKE2 — альтернативу SHA-3, SHA-2 и MD5» . Архивировано из оригинала 5 октября 2016 года . Проверено 27 января 2016 г.
- ↑ Перейти обратно: Перейти обратно: а б «БЛЕЙК2» . blake2.net .
- ↑ Перейти обратно: Перейти обратно: а б «Официальные реализации BLAKE2» . Гитхаб . Проверено 7 июля 2019 г.
- ^ Омассон, Жан-Филипп; Невес, Самуэль; Уилкокс-О'Хирн, Зуко; Виннерляйн, Кристиан (2013). «BLAKE2: проще, меньше, быстрее, чем MD5» (PDF) . Архив электронной печати по криптологии . МАКР.
- ^ «БЛЕЙК2Х» (PDF) .
- ^ Сааринен, МЮ; Аумассон, JP (ноябрь 2015 г.). Криптографический хеш BLAKE2 и код аутентификации сообщения (MAC) . IETF . дои : 10.17487/RFC7693 . РФК 7693 . Проверено 4 декабря 2015 г.
- ^ «О шеф-поваре Хабитат» . docs.chef.io.
- ^ "coreutils/src/blake2/" . github.com .
- ^ "librsync/src/blake2/" . github.com .
- ^ «Информационный документ по безопасности WhatsApp» (PDF) .
- ^ «Архиватор WinRAR, мощный инструмент для обработки файлов RAR и ZIP» . rarsoft.com .
- ^ «Ответ Игоря Павлова на запрос пользователя о поддержке BLAKE3 в 7-Zip» . sourceforge.net .
- ^ «rmlint — документация по rmlint (2.8.0 Maidenly Moose)» . rmlint.readthedocs.io .
- ^ «WireGuard: сетевой туннель ядра следующего поколения» (PDF) .
- ^ "работа" . docs.nano.org .
- ^ «подписи» . docs.nano.org .
- ^ «вывод ключа» . docs.nano.org .
- ^ «Autolykos: головоломка PoW Ergo Platform» (PDF) . ergoplatform.org .
- ^ «Генератор случайных чисел Linux 5.17 видит ускорение и переключается с SHA1 на BLAKE2» . www.phoronix.com .
- ^ «Подписание подписчика — Бекн» .
- ^ «контрольная сумма для Windows» . Corz.org .
- ^ «BLAKE3 – одна функция, быстрая везде» (PDF) . Гитхаб .
- ^ «В более ранней версии Bao был свой собственный режим дерева, который в конечном итоге превратился в BLAKE3» . Гитхаб .
- ^ «Мы с JPA анонсировали BLAKE3 на молниеносных переговорах RWC…» Hacker News .
- ↑ Перейти обратно: Перейти обратно: а б «Официальные реализации BLAKE3» . Гитхаб . Проверено 12 января 2020 г.
- ^ «Эта работа передана в общественное достояние с CC0 1.0. Альтернативно она лицензируется по лицензии Apache 2.0» . Гитхаб .
- ^ Омассон, Жан-Филипп (2020). Слишком много криптовалют (PDF) . Крипто-симпозиум реального мира.