Keccak


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

Комментарии
— Корд (21/10/2014 14:16)   
Насколько я понял по записям(поправьте,если я не прав) Есть блок размера 1600=r+c берем кусок сообщения размера r) матрица и по ней происходит 24 раунда перестановки. Дальше берется второй блок сообщения и т.д. Пока сообщение не кончиться.
— unknown (21/10/2014 14:38, исправлен 21/10/2014 14:39)   

Keccak работает по принципу губки (Sponge).


Бесключевая перестановка f-Keccak, действительно 24 раунда, маскимальным размером 1600 бит (предусмотрено и меньше). На вход сначала поступает нулевой вектор, к нему заксоривается в r входящее сообщение p, дополняется паддингом; что не влезло — заксоривается в часть r к состоянию f-Keccak после 24 раундов; и так для всего сообщения (заксоривается с дополнением часть r, перемежаясь 24 раундами f-Keccak), после чего ещё раз 24-раунда f-Keccak. Это фаза поглощения губкой.


На выходе выводится z от части размером r; если не хватает, то ещё 24 раунда перестановки f-Keccak и очередной блок z размером r. Это фаза отжатия губки.


Так выглядит основной режим работы губки. Есть масса других, какие-то ещё продолжают изобретать и исследовать.

Гость (21/10/2014 15:18)   
1) имеем начальный нулевой вектор размера 1600
2) входящее сообщение р ксорим с r частью вектора
Тут же вопрос каков будет размер сообщения p которое мы ксорим.
И как определить размер r.
3) Дальше происходит 24 раунда f-Keccak.
Что конкретно из себя эта функция представляет.
Т.е на вход этой функции подается вектор после нашего (p xor r) соединенный с нулевым вектором размера с.
И что происходит с этим вектором дальше?
— unknown (21/10/2014 15:54, исправлен 21/10/2014 15:57)   

1) Хорошо, выбрали именно такой битрейт внутреннего состояния b = r + c = 1600.
2) Сообщение ксорится блоками, размером r, или дополненными до r с округлением до байта. В случае, если всегда брать b = 1600, а c — размер выхода (т.е., 256, 512 или 1024; всё, что больше 1024 считается как 1024), то r = bc.
3) Функция представляет собой бесключевую перестановку. Конкретно смотрите работу, код, даже фрагмент псевдокода в новости[link3]. С вектором дальше ничего не происходит, он ушёл во внутреннее состояние. Если нужно ещё добавить блоки на вход губки в фазе поглощения, то они ксорятся не с начальным вектором, а с результатом выхода предыдущей 24-раундовой перестановки.

— Корд (21/10/2014 20:05)   
Смотрел в новостях. Проблема в том, что там идет работа с какой-то матрицей, что за матрица? Откуда она взялась или имеет какой-то определенный вид?
— SATtva (22/10/2014 08:29)   
работу не читай @ вопросы задавай
— unknown (22/10/2014 09:53, исправлен 22/10/2014 10:14)   

Во внутренней функции для двумерных объектов есть plane, slice и sheet по терминологии авторов (naming conventions for parts of the Keccak-f state). В официальной Keccak specifications[link4] слово «матрица» нигде не встречается. Что из этого кто-то где-то мог назвать матрицей — неизвестно.


Есть ещё Keccak implementation overview[link5] — там описаны матрицы, которые вас интересуют. Они как раз формируются из стандартных наименований частей Keccak уже для различных особенностей реализации.


Ссылки
[link1] http://www.pgpru.com/biblioteka/statji/keccaksponge

[link2] http://www.pgpru.com/biblioteka/statji/spongeencryption

[link3] http://www.pgpru.com/novosti/2014/nizkajaalgebraicheskajaslozhnostjkeccakkeyakoblegchaetkubicheskieataki

[link4] http://www.keccak.noekeon.org/Keccak-specifications.pdf

[link5] http://keccak.noekeon.org/Keccak-implementation-3.2.pdf