Interested Article - Luffa (хеш-функция)
- 2021-03-04
- 1
Lúffa (хеш-функция, произносится как «люффа») — криптографический алгоритм (семейство алгоритмов) хеширования переменной разрядности, разработанный Даи Ватанабэ ( англ. Dai Watanabe ), Хисайоши Сато ( англ. Hisayoshi Sato ) из Hitachi и Кристофом Де Канньере ( нидерл. Christophe De Cannière ) из исследовательской группы COSIC ( ) Лёвенского католического университета для участия в конкурсе , Национального института стандартов и технологий США ( NIST ). Lúffa является вариантом функции губки , предложенной Гвидо Бертони ( англ. Guido Bertoni ) и соавторами, криптостойкость которой основана только на случайности основной перестановки. В отличие от оригинальной функции губки , Lúffa использует множественное число параллельных перестановок и функции инжекции сообщений.
История участия в конкурсе NIST SHA-3
- 9 декабря 2008 года Luffa в числе 51 кандидата прошла в первый раунд конкурса SHA-3 .
- 25-28 февраля 2009 года хеш-функция была представлена на конференция NIST .
- 24 июля 2009 года был опубликован список из 14 кандидатов прошедших во второй раунд, в который вошла Luffa.
- 23-24 августа 2010 года состоялась конференция , на которой были рассмотрены кандидаты , прошедшие во второй раунд.
- 10 декабря 2010 года произошло объявление 5 кандидатов последнего тура конкурса SHA-3 , Luffa выбыла из соревнования из-за низкой криптостойкости функции сжатия .
Алгоритм Lúffa
Обработка сообщения производится цепочкой раундовых функций смешивания с фиксированной входной и выходной длиной, которая представляет собой функцию губку . Цепочка состоит из блоков промежуточного смешивания C’ (раундовых функций) и блока завершения C’’. Раундовые функции образованы семейством нелинейных перестановок, так называемых шаговых функций. На вход функции первого раунда подается : первый блок сообщения и инициализирующие значения , где — количество перестановок. Входными параметрами -го раунда является : выход предыдущего раунда и -й блок сообщения .
Дополнение сообщения
Дополнение сообщения длины до кратности 256 битам производится строкой , где число нулей определяется из сравнения
Инициализация
Кроме первого блока сообщения на вход функции первого раунда в качестве инициализурующих значений подаются векторы .
i | j | |||||||
---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
0 |
0x
6d251e69
|
0x
44b051e0
|
0x
4eaa6fb4
|
0x
dbf78465
|
0x
6e292011
|
0x
90152df4
|
0x
ee058139
|
0x
def610bb
|
1 |
0x
c3b44b95
|
0x
d9d2f256
|
0x
70eee9a0
|
0x
de099fa3
|
0x
5d9b0557
|
0x
8fc944b3
|
0x
cf1ccf0e
|
0x
746cd581
|
2 |
0x
f7efc89d
|
0x
5dba5781
|
0x
04016ce5
|
0x
ad659c05
|
0x
0306194f
|
0x
666d1836
|
0x
24aa230a
|
0x
8b264ae7
|
3 |
0x
858075d5
|
0x
36d79cce
|
0x
e571f7d7
|
0x
204b1f67
|
0x
35870c6a
|
0x
57e9e923
|
0x
14bcb808
|
0x
7cde72ce
|
4 |
0x
6c68e9be
|
0x
5ec41e22
|
0x
c825b7c7
|
0x
affb4363
|
0x
f5df3999
|
0x
0fc688f1
|
0x
b07224cc
|
0x
03e86cea
|
Раундовая функция
Раундовая функция является последовательным применением функции инжекции сообщения MI и перестановочной функции P.
Функции инжекции сообщения
Функция инжекции сообщения может быть представлена в виде матрицы преобразования над кольцом . Порождающий полином поля .
Функции инжекции сообщения
где числа соответственно обозначают полиномы
Функции инжекции сообщения
Функции инжекции сообщения
Функция перестановки
Нелинейная функция перестановки имеет битовый вход, длина суб-перестановки — фиксирована в спецификации Lúffa , ; количество — перестановок зависит от размера хеша и приведено в таблице.
Длина хеша | Количество перестановок |
---|---|
224 | 3 |
256 | 3 |
384 | 4 |
512 | 5 |
Функция перестановки является восьмикратным повторением шаговой функции над блоком , полученным из функции инжекции сообщения . Блок представляется в виде 8 32-битных слов: . Шаговая функция состоит из 3 функций: SubCrumb, MixWord, AddConstant.
Permute(a[8], j){ //Permutation Q_j for (r = 0; r < 8; r++){ SubCrumb(a[0],a[1],a[2],a[3]); SubCrumb(a[5],a[6],a[7],a[4]); for (k = 0; k < 4; k++) MixWord(a[k],a[k+4]); AddConstant(a, j, r); } }
SubCrumb
SubCrumb — функция замены l-х битов в или по S-блоку , результатом выполнения является замена , индекс S-блока получается в результате конкатенации соответствующих битов : , биты заменяются на соответствующие биты из по следующей схеме:
MixWord
MixWord — линейная функция перестановки, на вход принимает и , ; выходом являются и , полученные по алгоритму:
- , (<<< 2 — циклический сдвиг влево на 2 бита)
AddConstant
AddConstant — функция добавления константы к
Таблица констант приведена в дополнении B к спецификации Lúffa .
Блок завершения
Завершающий этап формирования дайджеста сообщения состоит из последовательных итераций функции выхода и раундовой функции с нулевым блоком сообщения 0x00 0 на входе. Функция выхода представляет собой XOR всех промежуточных значений, а в качестве результата представляет 256-битное слово . На i -й итерации значение выходной функции определяется как
, где , если , иначе
Через обозначим 32-битные слова в , тогда выходом Lúffa являются составленные последовательно . Символ "||" обозначает конкатенацию.
Длина хеша | Значение хеша |
---|---|
224 | |
256 | |
384 | |
512 |
Хеш Lúffa-224 фактически представляет собой хеш Lúffa-256 без последнего 32-битного слова.
Тестовые векторы
Дайджесты сообщения «abc» при различном размере хеша .
224 | 256 | 384 | 512 | |
---|---|---|---|---|
Z 0,0 |
0x
f29311b8
|
0x
f29311b8
|
0x
9a7abb79
|
0x
f4024597
|
Z 0,1 |
0x
7e9e40de
|
0x
7e9e40de
|
0x
7a840e2d
|
0x
3e80d79d
|
Z 0,2 |
0x
7699be23
|
0x
7699be23
|
0x
423c34c9
|
0x
0f4b9b20
|
Z 0,3 |
0x
fbeb5a47
|
0x
fbeb5a47
|
0x
1f559f68
|
0x
2ddd4505
|
Z 0,4 |
0x
cb16ea4f
|
0x
cb16ea4f
|
0x
09bdb291
|
0x
b81b8830
|
Z 0,5 |
0x
5556d47c
|
0x
5556d47c
|
0x
6fb2e9ef
|
0x
501bea31
|
Z 0,6 |
0x
a40c12ad
|
0x
a40c12ad
|
0x
fec2fa0a
|
0x
612b5817
|
Z 0,7 |
0x
764a73bd
|
0x
7a69881b
|
0x
aae38792
|
|
Z 1,0 |
0x
e9872480
|
0x
1dcefd80
|
||
Z 1,1 |
0x
c635d20d
|
0x
8ca2c780
|
||
Z 1,2 |
0x
2fd6e95d
|
0x
20aff593
|
||
Z 1,3 |
0x
046601a7
|
0x
45d6f91f
|
||
Z 1,4 |
0x
0ee6b2ee
|
|||
Z 1,5 |
0x
e113f0cb
|
|||
Z 1,6 |
0x
cf22b643
|
|||
Z 1,7 |
0x
81387e8a
|
Криптоанализ
В ходе второго тура конкурса SHA-3 Luffa-224 и Luffa-256 в первоначальном варианте показали низкую криптостойкость, для успешной атаки потребовалось сообщений. После чего, алгоритм был модифицирован Даи Ватанабэ и получил название Luffa v.2. Изменения Luffa v.2 :
- добавлен пустой раунд функции завершения для всех размеров хеша
- изменен S-блок
- увеличено количество повторений шаговой функции с 7 до 8
Барт Пренель (Bart Preneel) представил успешную атаку по поиску коллизий для 4 раундов шаговой функции Luffa за операций хеширования и для 5-раундовой, показав тем самым границу стойкости дизайна к диференциальному поиску коллизий.
Производительность
В 2010 году Томас Оливиера и Джулио Лопез провели успешные исследования возможности увеличения производительности оригинальной реализации Luffa. Оптимизированная реализация алгоритма имеет 20 % увеличение производительности вычисления хеша Luffa-512 при исполнении в 1 потоке, для Luffa-256/384 прирост производительности однопоточной реализации в различных тестах составляет не более 5 %. Результаты тестов приведены в таблице в :
- На 64-битных платформах без SSE:
Реализация алгоритма | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Оригинальная реализация 2009 год | |||
Однопоточная реализация | 27 | 42 | 58 |
Томас Оливиера 2010 год | |||
Однопоточная реализация | 24 | 42 | 46 |
Многопоточная реализация | 20 | 24 | 36 |
- С использованием SSE:
Реализация алгоритма | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Оригинальная реализация 2009 год | |||
Однопоточная реализация | 17 | 19 | 30 |
Томас Оливиера 2010 год | |||
Однопоточная реализация | 15 | 16 | 24 |
Многопоточная реализация | 15 | 18 | 25 |
Для сравнения, реализация Keccak (победитель конкурса SHA-3 ) в тестах на аналогичном процессоре c использованием SSE показала следующие результаты: Keccak-256 — 15 c/b, Keccak-512 — 12 c/b.
Примечания
- . Дата обращения: 22 ноября 2013. 28 декабря 2013 года.
- ↑ . Дата обращения: 22 ноября 2013. 9 июля 2011 года.
- ↑ . Дата обращения: 28 декабря 2013. 10 апреля 2012 года.
- . Дата обращения: 28 декабря 2013. 12 января 2014 года.
- ↑ . Дата обращения: 28 декабря 2013. 14 марта 2011 года.
- ↑ . Дата обращения: 29 ноября 2013. 20 февраля 2013 года.
- . Дата обращения: 4 января 2014. 20 февраля 2013 года.
- . Дата обращения: 28 декабря 2013. 21 марта 2014 года.
- . Дата обращения: 4 января 2014. 4 января 2014 года.
Литература
- Hisayoshi Sato, Dai Watanabe, Christophe De Canni`ere. .
- . — С. 19-20 .
- Bart Preneel, Hirotaka Yoshida, Dai Watanabe. .
- Thomaz Oliveira, Julio Lopez. .
Ссылки
- 2021-03-04
- 1