WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
Grøstl
Разработчики Сорен Стефан Томпсон, Ларс Кнудсен, Мартин Шлэффер, Кристиан Речбергер, Флориан Мендель, Кристиан Матюсевич, Праавен Гаураварам
Размер хеша 224, 256, 384, 512 (переменный, 8-512 бит)
Число раундов 9 (рекомендовано)
Тип хеш-функция

Grøstl (Groestl) — итеративная криптографическая хеш-функция. Одна из пяти финалистов конкурса SHA-3, организованного NIST. Сжимающая функция Grøstl состоит из двух фиксированных 2n-битных перестановок P и Q, структура которых заимствована у шифра AES. В частности, используется такой же S-блок. Результат работы хеш-функции может иметь длину от 8 до 512 бит с шагом 8 бит. Вариант, возвращающий n бит, называется Grøstl-n.

История

Алгоритм Grøstl был специально разработан для участия в конкурсе криптографических функций SHA-3 командой криптографов[1] из Датского технического университета. Первоначально функция называлась Grøstl-0. Однако для участия в финале были увеличены структурные различия между перестановками. Были изменены значения ShiftBytes в перестановке Q. Также изменениям подверглись раундовые константы в P и Q. Обновленная хеш-функция получила название Grøstl. Однако, показав хорошую криптостойкость, по ряду показателей она уступала другим участникам финального раунда и не смогла стать победителем.

Происхождение названия

Грёстль — блюдо австрийской кухни. По рецепту очень близко к блюду, которое в США называют «Hash». Буква «ö» в названии функции была заменена на букву «ø» из датского алфавита, которое имеет такое же произношение.

Особенности

Grøstl — байт-ориентированная SP-сеть. По своему строению она значительно отличается от алгоритмов семейства SHA. Многие компоненты хеш-функции заимствованы у шифра AES. Так же как и у AES, перестановки разработаны с использованием метода Wide Trail design strategy, главными принципами которого являются наличие у блочного шифра:

  • Нелинейных замен (то есть наличие хорошего S-блока)
  • Линейных преобразований (для того, чтобы обеспечить хорошую диффузию и нелинейность S-блока)
  • Сложения ключей (обычно с помощью XOR)

Размер внутреннего состояния функции значительно больше, чем размер выходных данных. Это так называемый «wide-pipe construction».

Алгоритм

Сначала сообщение разбивается на блоков , ,…, по бит каждый. Для вариантов функции, возвращающих до 256 бит = 512. Для вариантов, возвращающих большие значения, = 1024.

Далее, строится хеш-функция, используя рекуррентный способ вычисления. Каждый блок обрабатывается последовательно сжимающей функцией по формуле , .

, ,…,  — так называемый chaining input.

Начальное значение = .

После обработки последнего блока, -битовое значение подается на вход функции преобразования Ω , которая возвращает сообщение длиной , такой, что .

Таким образом результат выполнения хеш-функции Ω

Начальное значение

Начальному значению функции Grøstl-n присваивается -битовое представление числа n. В таблице показаны начальные значения для разных вариантов хеш-функции.

22400…00 00 e0
25600…00 01 00
38400…00 01 80
51200…00 02 00

Функция pad

Для работы с сообщениями произвольной длины, используется функция . Она преобразует сообщение произвольной длины в сообщение с длиной, кратной . Для этого к сообщению сначала добавляется бит со значением 1. Далее добавляется нулевых бит, где . И наконец, добавляется 64х битовое представление числа . Это же число определяет количество блоков, на которые будет разбито сообщение.

Сжимающая функция

Сжимающая функция или функция компрессии состоит из двух -битовых перестановок и и определяется как .

Выходное преобразование

Функция выходного преобразования определяется как Ω , где  — функция, которая возвращает последние бит входного значения .

Перестановки P и Q

Функция сжатия Grøstl может работать с короткими сообщениями (512 бит) и с длинными (1024 бит). Соответственно всего существует 4 перестановки , и , .

Каждая перестановка выполняется раундов, в каждом из которых производятся 4 раундовых преобразования:

  • AddRoundConstant
  • SubBytes
  • ShiftBytes(или ShiftBytesWide для длинных дайджестов)
  • MixBytes

Эти преобразования управляют состоянием, которое представляется матрицей А, содержащей в каждой ячейке 1 байт информации. Для работы с короткими дайджестами сообщений матрица имеет размер 8Х8, для длинных дайджестов — 8Х16.

Сначала матрица A заполняется последовательностью байт . Например для последовательности 00 01 02 … 3f матрица A выглядит следующим образом.

Аналогичным образом заполняется матрица 8 X 16.

Далее выполняются раундовые преобразования над матрицей А.

AddRoundConstant

Это преобразование выполняет операцию XOR между матрицей состояния и константой, зависящей от раунда: A←A , где  — константа, зависящая от раунда. Эти константы различны для каждой перестановки P и Q:

512

1024

512

1024

где - номер раунда, представленный 8 битным значением.

SubBytes

Это преобразование заменяет каждый байт матрицы состояния значением, взятым из S-блока. В хеш функции Grøstl используется такой же S-блок, как и в шифре AES. Следовательно преобразование выглядит следующим образом: , где  — элемент матрицы A. А S-блок имеет вид:


000102030405060708090a0b0c0d0e0f
00637c777bf26b6fc53001672bfed7ab76
10ca82c97dfa5947f0add4a2af9ca472c0
20b7fd9326363ff7cc34a5e5f171d83115
3004c723c31896059a071280e2eb27b275
4009832c1a1b6e5aa0523bd6b329e32f84
5053d100ed20fcb15b6acbbe394a4c58cf
60d0efaafb434d338545f9027f503c9fa8
7051a3408f929d38f5bcb6da2110fff3d2
80cd0c13ec5f974417c4a77e3d645d1973
9060814fdc222a908846eeb814de5e0bdb
a0e0323a0a4906245cc2d3ac629195e479
b0e7c8376d8dd54ea96c56f4ea657aae08
c0ba78252e1ca6b4c6e8dd741f4bbd8b8a
d0703eb5664803f60e613557b986c11d9e
e0e1f8981169d98e949b1e87e9ce5528df
f08ca1890dbfe6426841992d0fb054bb16


Преобразование ищет элементы в первой колонке, и элемент в первой строке.(  — логическое «или»). На выход идет элемент, находящийся на их пересечении.


ShiftBytes(ShiftBytesWide)

Пусть α=[α1, α2,…, α7 ] — набор целых чисел от 1 до 7. Преобразование ShiftBytes циклически сдвигает все байты в строке i матрицы состояния A на αi позиций влево. Для перестановок P и Q эти наборы чисел различны:

  • P512: α=[0,1,2,3,4,5,6,7]
  • Q512: α=[1,3,5,7,0,2,4,6]

Соответственно для функции ShiftBytesWide:

  • P1024: α=[0,1,2,3,4,5,6,11]
  • Q1024: α=[1,3,5,11,0,2,4,6]


MixBytes

При этом преобразовании каждая колонка матрицы А умножается на константную матрицу B в конечном поле . Матрица B определяется как

Преобразование MixBytes можно обозначить как: A←B A.

Криптостойкость

Надежность хеш-функции напрямую зависит от количества раундов. В результате криптоанализа удалось произвести только на первые 3 раунда. В таблице приведены некоторые результаты криптоанализа, проведенного во время финального раунда конкурса на хеш-функцию SHA-3:

Цель атакиТип атакиКоличество бит на выходеколичество раундовКоличество операций
Хеш-функциянахождение коллизий224, 2563264
Хеш-функциянахождение коллизий51232192
Функция сжатиянахождение частичных коллизий25662120
Функция сжатиянахождение частичных коллизий38462180
Функция сжатиянахождение частичных коллизий51262180
ПерестановкаДифференциальное свойство25692368
ПерестановкаДифференциальное свойство51282280
ПерестановкаДифференциальное свойство51292328
ПерестановкаДифференциальное свойство512102392
Выходное преобразованиеНахождение прообраза25662251
Выходное преобразованиеНахождение прообраза25652206
Выходное преобразованиеНахождение прообраза51282495
Хеш-функциянахождение псевдо-прообраза25652245
Хеш-функциянахождение псевдо-прообраза51282507

Производительность

Программная реализация Grøstl рассчитана в основном на 64-битный процессор, однако возможна также работа и на 32-битных процессорах. В ходе тестов, проведенных в финале конкурса NIST, производительность хеш-функции оказалась самой низкой, относительно других участников конкурса. Однако при выполнении алгоритма на микроконтроллере, скорость его работы оказалась гораздо выше, чем у конкурентов. В таблице представлена скорость работы программных реализаций разных вариантов функции.

ПроцессорВариант функцииСкорость (цикл/байт)
Intel Core i7 M620Grøstl-224/25612,45
Intel Core i7 M620Grøstl-384/51217,85


В следующей таблице приводится 8-битная реализация на микроконтроллере ATmega163.

Хеш-функцияпроцессорПамятьСкорость (цикл/байт)
Grøstl-256ATmega163994469
Grøstl-256ATmega163226531
Grøstl-256ATmega163164760

Примеры хешей Grøstl

Значения разных вариантов хеша от пустой строки.

Grøstl-224("")
0x f2e180fb5947be964cd584e22e496242c6a329c577fc4ce8c36d34c3
Grøstl-256("")
0x 1a52d11d550039be16107f9c58db9ebcc417f16f736adb2502567119f0083467
Grøstl-384("")
0x ac353c1095ace21439251007862d6c62f829ddbe6de4f78e68d310a9205a736d8b11d99bffe448f57a1cfa2934f044a5
Grøstl-512("")
0x 6d3ad29d279110eef3adbd66de2a0345a77baede1557f5d099fce0c03d6dc2ba8e6d4a6633dfbd66053c20faa87d1a11f39a7fbe4a6c2f009801370308fc4ad8

Малое изменение сообщения с большой вероятностью приводит к значительным изменениям в значении хеш-функции благодаря лавинному эффекту, как показано в следующем примере:

Grøstl-256("The quick brown fox jumps over the lazy dog")
0x 8c7ad62eb26a21297bc39c2d7293b4bd4d3399fa8afab29e970471739e28b301
Grøstl-256("The quick brown fox jumps over the lazy dog.")
0x f48290b1bcacee406a0429b993adb8fb3d065f4b09cbcdb464a631d4a0080aaf

Grøstl-512("The quick brown fox jumps over the lazy dog")
0x badc1f70ccd69e0cf3760c3f93884289da84ec13c70b3d12a53a7a8a4a513f99715d46288f55e1dbf926e6d084a0538e4eebfc91cf2b21452921ccde9131718d
Grøstl-512("The quick brown fox jumps over the lazy dog.")
0x 518a55cc274fc887d8dcbd0bb24000395f6d3be62445d84cc9e85d419161a968268e490f7537e475e57d8c009b0957caa05882bc8c20ce22d50caa2106d0dcfd

Примечания

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии