CubeHash - CubeHash

CubeHash[1] это криптографическая хеш-функция представлен в Конкурс хеш-функций NIST к Дэниел Дж. Бернштейн. CubeHash имеет 128-байтовое состояние, использует широкая конструкция трубы, и является На основе ARX. Блоки сообщений XORed в начальные биты 128-байтового состояния, которое затем проходит r-раунд биективный преобразование между блоками. Первоначальное предложение NIST ("Cubehash8 / 1") требовало около 200 циклов на байт.[2] После разъяснений от NIST автор изменил предложение на Cubehash16 / 32, который «примерно в 16 раз быстрее, чем CubeHash8 / 1, легко догоняя как SHA-256, так и SHA-512 на эталонной платформе», сохраняя при этом «удобный маржа безопасности ».[3]

CubeHash прошел во второй тур конкурса, но не был выбран в числе 5 финалистов. С тех пор Бернштейн дополнительно настроил параметры, и его основная рекомендация - CubeHash512, определяемый как CubeHash16 + 16/32 + 32–512.[4]

Как это устроено

Это описание относится к последней спецификации, а не к представлению NIST.[4]

CubeHash имеет 5 параметров, конкретный экземпляр обозначается CubeHashя+р/б+ж-час.

  • я количество начальных раундов
  • р количество раундов в блоке
  • б размер блока в байтах, определенный для {1, 2, 3, ... 128}
  • ж это количество финальных раундов
  • час - размер хеш-вывода в битах, определенный для {8, 16, 24, 32, ... 512}

В исходном представлении NIST, я и ж был установлен на 10р. Устаревшее обозначение CubeHashр/б-час указывает я и ж неявно 10р.

Внутреннее состояние определяется как пятимерный массив слов (четырехбайтовых целых чисел), 0-1 в обоих измерениях. Слова обозначаются их координатами от [00000] до [11111]. Слова обрабатываются с прямым порядком байтов.

Внутреннее состояние инициализируется установкой первых трех слов ([00000], [00001], [00010]) на час/8, б, и р соответственно все остальные слова на ноль. Затем состояние проходит через я раундов, и этап инициализации завершен. Состояние теперь является вектором инициализации (IV). IV может быть сохранен и повторно использован для данной комбинации час, б, р.

Сообщение дополняется и разбивается на б-байтовые блоки. Заполнение добавляет 1 бит, за которым следует столько 0 битов, сколько необходимо для создания полного блока.

Каждый блок вводится XORing к первому б байтов состояния, а затем выполнение р раунды трансформации.

Наконец, 1 подвергается операции XOR со словом состояния [11111], а затем ж раунды трансформации выполняются.

Выходной хеш теперь содержится в первом час/ 8 байтов этого конечного состояния.

Круглая функция

Иллюстрация функции смешивания
Десять шагов функции микширования. Раскрыты два из пяти измерений.

Функция раунда CubeHash состоит из следующих десяти шагов:

  1. Добавить x [0jklm] в x [1jklm] по модулю 232, для каждого (j, k, l, m).
  2. Повернуть x [0jklm] вверх на 7 бит для каждого (j, k, l, m).
  3. Поменять местами x [00klm] с x [01klm] для каждого (k, l, m).
  4. Xor x [1jklm] в x [0jklm] для каждого (j, k, l, m).
  5. Поменять местами x [1jk0m] с x [1jk1m] для каждого (j, k, m).
  6. Добавить x [0jklm] в x [1jklm] по модулю 232, для каждого (j, k, l, m).
  7. Повернуть x [0jklm] вверх на 11 бит для каждого (j, k, l, m).
  8. Поменять местами x [0j0lm] с x [0j1lm] для каждого (j, l, m).
  9. Xor x [1jklm] в x [0jklm] для каждого (j, k, l, m).
  10. Поменять местами x [1jkl0] с x [1jkl1] для каждого (j, k, l).

Примеры хешей

В этом примере используется CubeHash80 + 8/1 + 80-512. Вектор инициализации одинаков для всех 80 + 8/1 +ж-512 хешей и выглядит следующим образом:

5df39869c73009fb108994600f1626e6f37c07360c0d8bb53d19cf57b8e74133  5b8034a3eff9892014c4ff315038ef2a391812fe52a440e9a293527d12ca4570  6e0958933470bf814aa4909adb3ec39384e9c314d0db874af21d45bcacb31252  1ce5ab6a3bf6f05de88abbdd0fcfd3fafb8225d546242eada52540095c3da221 

Хеширование ASCII сообщение «Hello» (шестнадцатеричное: 0x48, 0x65, 0x6c, 0x6c, 0x6f) использует 6 блоков сообщений. Сообщение состоит из 5 блоков, и, поскольку это ввод с выравниванием по байтам, имеется 1 блок для заполнения. 512-битное хеш-значение:

7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444  8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

Небольшое изменение в сообщении, например переворот одного бита, резко изменит хеш-вывод из-за лавинный эффект. Хеширование сообщения "hello" (которое отличается от "Hello" только 1 битовой позицией) дает следующее значение хеш-функции:

01ee7f4eb0e0ebfdb8bf77460f64993faf13afce01b55b0d3d2a63690d25010f  7127109455a7c143ef12254183e762b15575e0fcc49c79a0471a970ba8a66638

Изменения параметров

CubeHash позволяет использовать множество различных параметров для определения хеш-вывода. Пользователь сам решает, какие параметры он хочет использовать. Вот несколько примеров хэшей разных сообщений с разными параметрами. Все сообщения в формате ASCII.

сообщение: "" (нулевая длина строки) CubeHash160 + 16/32 + 160-512: 4a1d00bbcfcb5a9562fb981e7f7db3350fe2658639d948b9d57452c22328bb32  f468b072208450bad5ee178271408be0b16e5633ac8a1e3cf9864cfbfc8e043aCubeHash80 + 8/1 + 80-512: 90bc3f2948f7374065a811f1e47a208a53b1a2f3be1c0072759ed49c9c6c7f28  f26eb30d5b0658c563077d599da23f97df0c2c0ac6cce734ffe87b2e76ff7294CubeHash10 + 1/1 + 10-512: 3f917707df9acd9b94244681b3812880e267d204f1fdf795d398799b584fa8f1  f4a0b2dbd52fd1c4b6c5e020dc7a96192397dd1bce9b6d16484049f85bb71f2fCubeHash160 + 16 / 32 + 160-256: 44c6de3ac6c73c391bf0906cb7482600ec06b216c7c54a2a8688a6a42676577dCubeHash80 + 8/1 + 80-256: 38d1e8a22d7baac6fd5262d83de89cacf784a02caa866335299987722aeabc59CubeHash10 + 1/1 + 10-256: 80f72e07d04ddadb44a78823e0af2ea9f72ef3bf366fd773aa1fa33fc030e5cb
сообщение: "Привет" CubeHash160 + 16/32 + 160-512: dcc0503aae279a3c8c95fa1181d37c418783204e2e3048a081392fd61bace883  a1f7c4c96b16b4060c42104f1ce45a622f1a9abaeb994beb107fed53a78f588cCubeHash80 + 8/1 + 80-512: 7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444  8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39bCubeHash10 + 1/1 + 10-512: 13cf99c1a71e40b135f5535bee02e151eb4897e4de410b9cb6d7179c677074eb  6ef1ae9a9e685ef2d2807509541f484d39559525179d53838eda95eb3f6a401dCubeHash160 + 16/32 + 160-256 : e712139e3b892f2f5fe52d0f30d78a0cb16b51b217da0e4acb103dd0856f2db0CubeHash80 + 8/1 + 80-256: 692638db57760867326f851bd2376533f37b640bd47a0ddc607a9456b692f70fCubeHash10 + 1/1 + 10-256: f63041a946aa98bd47f3175e6009dcb2ccf597b2718617ba46d56f27ffe35d49
сообщение: "Быстрая коричневая лиса прыгает через ленивую собаку" CubeHash160 + 16/32 + 160-512: bdba44a28cd16b774bdf3c9511def1a2baf39d4ef98b92c27cf5e37beb8990b7  cdb6575dae1a548330780810618b8a5c351c1368904db7ebdf8857d596083a86CubeHash80 + 8/1 + 80-512: ca942b088ed9103726af1fa87b4deb59e50cf3b5c6dcfbcebf5bba22fb39a6be  9936c87bfdd7c52fc5e71700993958fa4e7b5e6e2a3672122475c40f9ec816baCubeHash10 + 1/1 + 10-512: eb7f5f80706e8668c61186c3c710ce57f9094fbfa1dbdc7554842cdbb4d10ce4  2fce72736d10b152f6216f23fc648bce810a7af4d58e571ec1b852fa514a0a8eCubeHash160 + 16/32 + 160-256: 5151e251e348cbbfee46538651c06b138b10eeb71cf6ea6054d7ca5fec82eb79CubeHash80 + 8/1 + 80-256: 94e0c958d85cdfaf554919980f0f50b945b88ad08413e0762d6ff0219aff3e55CubeHash10 + 1/1 + 10-256: 217a4876f2b24cec489c9171f85d53395cc979156ea0254938c4c2c59dfdf8a4

Векторы инициализации для четырех показанных вариантов также различны. Например, вектор инициализации для CubeHash80 + 8/1 + 80-512 можно увидеть выше, а IV для CubeHash80 + 8/1 + 80-256:

830b2bd5273d616fd785876a4a500218a5388963eeb702fb47547842459f8d89  8727a1c8ba40bd48cef47fe82543c2735c033052ae9fcd632d4541bde6b6cb0d  cb8a9cdf579f5b67b2ae00968180af6e51ebdf0ca597cd2bf91f981f7ab29a62  01ad72d946e6c075c6d1337e0a293d6f90c438ac38be153f32aa288ffc5eca8a

Безопасность

Сила этой функции увеличивается, когда б уменьшается в сторону 1, а при р увеличивается. Таким образом, CubeHash 8 / 1-512 сильнее (безопаснее), чем CubeHash 1 / 1-512, а CubeHash 1 / 1-512 сильнее, чем CubeHash 1 / 2-512. Самая слабая из возможных версий этого алгоритма - CubeHash 1 / 128-час. Однако есть компромисс между безопасностью и временем. Более безопасная версия требует больше времени для вычисления хеш-значения, чем ослабленная версия.

Рекомендации

  1. ^ Дэниел Дж. Бернштейн (14 сентября 2009 г.). «Спецификация CubeHash (2.B.1)» (PDF ). Цитировать журнал требует | журнал = (помощь)
  2. ^ Дэниел Дж. Бернштейн (2008-10-28). «Оценка эффективности CubeHash (2.B.2)» (PDF ). Цитировать журнал требует | журнал = (помощь)
  3. ^ Дэниел Дж. Бернштейн (15 июля 2009 г.). «Настройка параметра CubeHash: в 16 раз быстрее» (PDF ). Цитировать журнал требует | журнал = (помощь)
  4. ^ а б Дэниел Дж. Бернштейн. «Введение в CubeHash».

внешняя ссылка