Jump to content

БЛЕЙК (хеш-функция)

(Перенаправлено с BLAKE3 )
БЛЕЙК
Общий
Дизайнеры Жан-Филипп Омассон, Лука Хенцен, Вилли Мейер, Рафаэль К.-В. Фан
Преемники БЛЕЙК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 [ править ]

БЛЕЙК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 [ править ]

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

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

БЛЕЙК3 [ править ]

БЛЕЙК3
Общий
Дизайнеры Джек О’Коннор, Сэмюэл Невес, Жан-Филипп Омассон, Зуко Уилкокс-О’Хирн
Впервые опубликовано 9 января 2020 г .; 4 года назад ( 09.01.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]

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

  1. ^ Омассон, Жан-Филипп (2021). Криптословарь: 500 вкусных кусочков для любознательного криптографа . Нет крахмального пресса. ISBN  9781718501409 .
  2. ^ «BLAKE2 – альтернатива MD5/SHA-1» .
  3. ^ О'Уилакрокс, Зуко (21 декабря 2012 г.). «Представляем BLAKE2 — альтернативу SHA-3, SHA-2 и MD5» . Архивировано из оригинала 5 октября 2016 года . Проверено 27 января 2016 г.
  4. Перейти обратно: Перейти обратно: а б «БЛЕЙК2» . blake2.net .
  5. Перейти обратно: Перейти обратно: а б «Официальные реализации BLAKE2» . Гитхаб . Проверено 7 июля 2019 г.
  6. ^ Омассон, Жан-Филипп; Невес, Самуэль; Уилкокс-О'Хирн, Зуко; Виннерляйн, Кристиан (2013). «BLAKE2: проще, меньше, быстрее, чем MD5» (PDF) . Архив электронной печати по криптологии . МАКР.
  7. ^ «БЛЕЙК2Х» (PDF) .
  8. ^ Сааринен, МЮ; Аумассон, JP (ноябрь 2015 г.). Криптографический хеш BLAKE2 и код аутентификации сообщения (MAC) . IETF . дои : 10.17487/RFC7693 . РФК 7693 . Проверено 4 декабря 2015 г.
  9. ^ «О шеф-поваре Хабитат» . docs.chef.io.
  10. ^ "coreutils/src/blake2/" . github.com .
  11. ^ "librsync/src/blake2/" . github.com .
  12. ^ «Информационный документ по безопасности WhatsApp» (PDF) .
  13. ^ «Архиватор WinRAR, мощный инструмент для обработки файлов RAR и ZIP» . rarsoft.com .
  14. ^ «Ответ Игоря Павлова на запрос пользователя о поддержке BLAKE3 в 7-Zip» . sourceforge.net .
  15. ^ «rmlint — документация по rmlint (2.8.0 Maidenly Moose)» . rmlint.readthedocs.io .
  16. ^ «WireGuard: сетевой туннель ядра следующего поколения» (PDF) .
  17. ^ "работа" . docs.nano.org .
  18. ^ «подписи» . docs.nano.org .
  19. ^ «вывод ключа» . docs.nano.org .
  20. ^ «Autolykos: головоломка PoW Ergo Platform» (PDF) . ergoplatform.org .
  21. ^ «Генератор случайных чисел Linux 5.17 видит ускорение и переключается с SHA1 на BLAKE2» . www.phoronix.com .
  22. ^ «Подписание подписчика — Бекн» .
  23. ^ «контрольная сумма для Windows» . Corz.org .
  24. ^ «BLAKE3 – одна функция, быстрая везде» (PDF) . Гитхаб .
  25. ^ «В более ранней версии Bao был свой собственный режим дерева, который в конечном итоге превратился в BLAKE3» . Гитхаб .
  26. ^ «Мы с JPA анонсировали BLAKE3 на молниеносных переговорах RWC…» Hacker News .
  27. Перейти обратно: Перейти обратно: а б «Официальные реализации BLAKE3» . Гитхаб . Проверено 12 января 2020 г.
  28. ^ «Эта работа передана в общественное достояние с CC0 1.0. Альтернативно она лицензируется по лицензии Apache 2.0» . Гитхаб .
  29. ^ Омассон, Жан-Филипп (2020). Слишком много криптовалют (PDF) . Крипто-симпозиум реального мира.

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 011b9f4932f40501f9f50187cf741ac3__1716008400
URL1:https://arc.ask3.ru/arc/aa/01/c3/011b9f4932f40501f9f50187cf741ac3.html
Заголовок, (Title) документа по адресу, URL1:
BLAKE (hash function) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)