Кубехэш
Кубехэш [1] — это криптографическая хэш-функция , представленная на конкурс хеш-функций NIST Дэниелом Дж. Бернштейном . CubeHash имеет состояние размером 128 байт, использует конструкцию широкого канала и основан на ARX . Блоки сообщений подвергаются операции XOR преобразованию r с начальными битами 128-байтового состояния, которые затем подвергаются биективному между блоками. Первоначальное предложение 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 i + r / b + f – h .
- я - количество начальных раундов
- r — количество раундов на блок
- b — размер блока в байтах, определенный для {1, 2, 3,... 128}
- f - количество финальных раундов
- h — размер вывода хэша в битах, определенный для {8, 16, 24, 32, ... 512}
В исходном документе NIST i и f были зафиксированы на уровне 10 r . Устаревшее обозначение CubeHash r / b - h указывает, что i и f неявно равны 10 r .
Внутреннее состояние определяется как пятимерный массив слов (четырехбайтовые целые числа), от 0 до 1 в обоих измерениях. Слова обозначаются координатами от [00000] до [11111]. Слова обрабатываются с прямым порядком байтов.
Внутреннее состояние инициализируется установкой первых трех слов ([00000], [00001], [00010]) в h /8, b и r соответственно, а для всех остальных слов — в ноль. Затем состояние выполняется через i раундов, и этап инициализации завершается. Состояние теперь является вектором инициализации (IV). IV можно сохранить и повторно использовать для заданной комбинации h , b , r .
Сообщение дополняется и разбивается на двухбайтовые блоки. Заполнение добавляет бит 1, за которым следует столько битов 0, сколько необходимо для создания полного блока.
Каждый блок вводится посредством операции XOR к первым b байтам состояния, а затем выполняется r раундов преобразования.
Наконец, 1 подвергается операции XOR со словом состояния [11111], а затем f выполняется раундов преобразования.
Выходной хэш теперь содержится в первых h /8 байтах этого конечного состояния.
Функция округления [ править ]

Функция раунда CubeHash состоит из следующих десяти шагов:
- Сложите x[ 0 jklm] в x[ 1 jklm] по модулю 2. 32 , для каждого (j,k,l,m).
- Поверните x[ 0 jklm] вверх на 7 бит для каждого (j,k,l,m).
- Поменяйте местами x[ 00 klm] на x[ 01 klm] для каждого (k,l,m).
- Xor x[ 1 jklm] в x[ 0 jklm] для каждого (j,k,l,m).
- Поменяйте местами x[ 1 jk 0 m] на x[ 1 jk 1 m] для каждого (j,k,m).
- Сложите x[ 0 jklm] в x[ 1 jklm] по модулю 2. 32 , для каждого (j,k,l,m).
- Поверните x[ 0 jklm] вверх на 11 бит для каждого (j,k,l,m).
- Поменяйте местами x[ 0 j 0 lm] на x[ 0 j 1 lm] для каждого (j,l,m).
- Xor x[ 1 jklm] в x[ 0 jklm] для каждого (j,k,l,m).
- Поменяйте местами x[ 1 jkl 0 ] на x[ 1 jkl 1 ] для каждого (j,k,l).
Пример хэшей [ править ]
В этом примере используется CubeHash80+8/1+80-512. Вектор инициализации одинаков для всех хэшей 80+8/1+ f -512 и выглядит следующим образом:
6998f35dfb0930c760948910e626160f36077cf3b58b0d0c57cf193d3341e7b8\ a334805b2089f9ef31ffc4142aef3850fe121839e940a4527d5293a27045ca12\ 9358096e81bf70349a90a44a93c33edb14c3e9844a87dbd0bc451df25212b3ac\ 6aabe51c5df0f63bddbb8ae8fad3cf0fd52582fbad2e2446094025a521a23d5c
Для хеширования сообщения ASCII «Hello» (шестнадцатеричные: 0x48, 0x65, 0x6c, 0x6c, 0x6f) используется 6 блоков сообщений. В сообщении 5 блоков, и поскольку это входные данные с выравниванием по байтам, для заполнения остается 1 блок. 512-битное хеш-значение:
7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\ 8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b
Небольшое изменение в сообщении, например переворот одного бита, сильно изменит вывод хеш-функции из-за лавинного эффекта . Хеширование сообщения «Привет» (которое отличается от «Привет» только на 1 битовую позицию) дает следующее значение хеш-функции:
01ee7f4eb0e0ebfdb8bf77460f64993faf13afce01b55b0d3d2a63690d25010f\ 7127109455a7c143ef12254183e762b15575e0fcc49c79a0471a970ba8a66638
Изменения параметров [ править ]
CubeHash позволяет использовать множество различных параметров для определения вывода хэша. Пользователь сам решает, какие параметры он хочет использовать. Вот несколько примеров хэшей разных сообщений с разными параметрами. Все сообщения находятся в формате ASCII.
message: "" (the zero-length string) CubeHash160+16/32+160-512: 4a1d00bbcfcb5a9562fb981e7f7db3350fe2658639d948b9d57452c22328bb32\ f468b072208450bad5ee178271408be0b16e5633ac8a1e3cf9864cfbfc8e043a CubeHash80+8/1+80-512: 90bc3f2948f7374065a811f1e47a208a53b1a2f3be1c0072759ed49c9c6c7f28\ f26eb30d5b0658c563077d599da23f97df0c2c0ac6cce734ffe87b2e76ff7294 CubeHash10+1/1+10-512: 3f917707df9acd9b94244681b3812880e267d204f1fdf795d398799b584fa8f1\ f4a0b2dbd52fd1c4b6c5e020dc7a96192397dd1bce9b6d16484049f85bb71f2f CubeHash160+16/32+160-256: 44c6de3ac6c73c391bf0906cb7482600ec06b216c7c54a2a8688a6a42676577d CubeHash80+8/1+80-256: 38d1e8a22d7baac6fd5262d83de89cacf784a02caa866335299987722aeabc59 CubeHash10+1/1+10-256: 80f72e07d04ddadb44a78823e0af2ea9f72ef3bf366fd773aa1fa33fc030e5cb
message: "Hello" CubeHash160+16/32+160-512: dcc0503aae279a3c8c95fa1181d37c418783204e2e3048a081392fd61bace883\ a1f7c4c96b16b4060c42104f1ce45a622f1a9abaeb994beb107fed53a78f588c CubeHash80+8/1+80-512: 7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\ 8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b CubeHash10+1/1+10-512: 13cf99c1a71e40b135f5535bee02e151eb4897e4de410b9cb6d7179c677074eb\ 6ef1ae9a9e685ef2d2807509541f484d39559525179d53838eda95eb3f6a401d CubeHash160+16/32+160-256: e712139e3b892f2f5fe52d0f30d78a0cb16b51b217da0e4acb103dd0856f2db0 CubeHash80+8/1+80-256: 692638db57760867326f851bd2376533f37b640bd47a0ddc607a9456b692f70f CubeHash10+1/1+10-256: f63041a946aa98bd47f3175e6009dcb2ccf597b2718617ba46d56f27ffe35d49
message: "The quick brown fox jumps over the lazy dog" CubeHash160+16/32+160-512: bdba44a28cd16b774bdf3c9511def1a2baf39d4ef98b92c27cf5e37beb8990b7\ cdb6575dae1a548330780810618b8a5c351c1368904db7ebdf8857d596083a86 CubeHash80+8/1+80-512: ca942b088ed9103726af1fa87b4deb59e50cf3b5c6dcfbcebf5bba22fb39a6be\ 9936c87bfdd7c52fc5e71700993958fa4e7b5e6e2a3672122475c40f9ec816ba CubeHash10+1/1+10-512: eb7f5f80706e8668c61186c3c710ce57f9094fbfa1dbdc7554842cdbb4d10ce4\ 2fce72736d10b152f6216f23fc648bce810a7af4d58e571ec1b852fa514a0a8e CubeHash160+16/32+160-256: 5151e251e348cbbfee46538651c06b138b10eeb71cf6ea6054d7ca5fec82eb79 CubeHash80+8/1+80-256: 94e0c958d85cdfaf554919980f0f50b945b88ad08413e0762d6ff0219aff3e55 CubeHash10+1/1+10-256: 217a4876f2b24cec489c9171f85d53395cc979156ea0254938c4c2c59dfdf8a4
Векторы инициализации для четырех показанных вариантов также различны. Например, вектор инициализации для CubeHash80+8/1+80-512 можно увидеть выше, а IV для CubeHash80+8/1+80-256:
830b2bd5273d616fd785876a4a500218a5388963eeb702fb47547842459f8d89\ 8727a1c8ba40bd48cef47fe82543c2735c033052ae9fcd632d4541bde6b6cb0d\ cb8a9cdf579f5b67b2ae00968180af6e51ebdf0ca597cd2bf91f981f7ab29a62\ 01ad72d946e6c075c6d1337e0a293d6f90c438ac38be153f32aa288ffc5eca8a
Безопасность [ править ]
Сила этой функции увеличивается по мере уменьшения b до 1 и увеличения r . Таким образом, CubeHash 8/1-512 сильнее (более безопасен), чем CubeHash 1/1-512, а CubeHash 1/1-512 сильнее, чем CubeHash 1/2-512. Самая слабая версия этого алгоритма — CubeHash 1/128- h . Однако существует компромисс между безопасностью и временем. Более безопасной версии потребуется больше времени для вычисления хэш-значения, чем ослабленной версии.
Ссылки [ править ]
- ^ Дэниел Дж. Бернштейн (14 сентября 2009 г.). «Спецификация CubeHash (2.B.1)» (PDF) .
- ^ Дэниел Дж. Бернштейн (28 октября 2008 г.). «Оценки эффективности CubeHash (2.B.2)» (PDF) .
- ^ Дэниел Дж. Бернштейн (15 июля 2009 г.). «Настройка параметров CubeHash: в 16 раз быстрее» (PDF) .
- ^ Jump up to: Перейти обратно: а б Дэниел Дж. Бернштейн. «Введение в CubeHash» .