Как стать автором
Обновить

Хеш-функция Стрибог. Особенности аппаратной реализации на System Verilog

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров5.2K
Всего голосов 29: ↑28 и ↓1+38
Комментарии20

Комментарии 20

Круто! Если не секрет, какие получились характеристики: сколько оно заняло по ресурсам (ПЛИС), на какой частоте, какую производительность в МБ/с имеет?

И ещё бы хорошо в сравнении с более традиционными хешами, например sha256/sha512, ну и например sha3, skein, blake.

Имплементировал его во времена лихорадки.

Если вам нужен результат каждый такт (конвейер), то хэша хуже Стрибога придумать сложно.

Процитирую себя самого же с Электроникса:

Sboxes на BRAM (утилизация BRAM свыше 3000 шт).

Интересная инфа, спасибо!

Лично я не знаю традиционного криптохеша, который мог бы принимать данные каждый такт. Ну кроме читов вроде буферизации по 1 байтику или всяких распараллеливаний по 4к или деревом. А вот штуки, пригодные только для MACа, типа того, что в aes-gcm или chacha20-poly1305 -- теоретически (и зачастую практически) могут. Но они не полноценные хеши.

Лично я не знаю традиционного криптохеша, который мог бы принимать данные каждый такт.

В примере из Электроникса, насколько понимаю, ограниченная постановка: хэшируют блоки фиксированной длины 64 байта, а не произвольной.

Ну, если хешировать куски данных размером в 1 блок хеша, тогда конечно можно. Но это бессмысленно, т.к. обычно хешируются всё же сообщения в несколько блоков хеша. Иногда в очень много.

Sboxes на BRAM (утилизация BRAM свыше 3000 шт).

А если логикой?

Синтезизировал данный модуль в вивадо для ПЛИС xcvu19p-fsva3824-2-e, по ресурсам получилась следующая картинка.

По частоте синтез проходит на 400 МГц. Но в принципе можно и выше поднять у меня пока кольцевое суммирование идет за 1 такт, но там есть запас в 29 тактов на выполнение g - функции, и соответвенно суммирование можно конвейеризировать. В целом на вычисление хеша для одного 512 битного слова нужно 29 тактов в варианте с предвычислениями. По поводу производительности - это сильно зависит в целом от архитектуры системы - откуда, куда и как передаем данных.

Полезная инфа, спасибо!

smod2(a,b) -- это разве не xor?

В данном случае это операция сложения в кольце, если брать формулировку из ГОСТ. Но в целом вы правы суммирование по модулю 2 это XOR. Я поправил статью, теперь более корректное название функции. Спасибо за замечание.

вроде как и в стрибоге это xor -- по вашей ссылке на c++ реализацию...

"X-преобразование. На вход функции X подаются две последовательности длиной 512 бит каждая, выходом функции является XOR этих последовательностей."

X преобразование входит в LPSX функцию (рис. 3). У меня это обозначено как XOR(a,b). А кольцевое суммирование идёт на верхнем уровне (рис. 1) . В статье на которую ссылаетесь это ... "

5.Вычислить N = (N + |M|) mod 2 512

6.Вычислить Σ = (Σ + m) mod 2 512 "

В 2013 на Delphi дипломную работу делал, Стрибог, подпись на тестовых эллиптических кривых (512-битная), сейчас флешбек словил.

Здорово!

Единственное, что пока вызывает вопросы - верификация. Наверное, 4х примеров из госта, как в ващем тестбенче, не хватит чтобы полноценно верифицировать блок.

Но тогда наверное придётся подумать как нагенерировать еще валидных примеров (есть ли код, например на C, в правильности которого уже никто не станет сомневаться)?

Автору успехов)

Согласен. Здесь речь идет не о верификации, а лишь о первичной проверки работоспособности. Для верификации необходима, так называемая, gold model (например на C или на несинтезируемых конструкция system verilog), с которой можно сранивать результаты. Причем правильно если написанием rtl и верификацией занимаются разные люди.

Интересно, для чего потребовалось реализовывать Стрибог в FPGA, неужели сделали криптовалюту с консенсусом на ней?

В моем случае это кусочек ip блока для ASIC. Сценарии применения еще прорабатываются.

upd. Сделал в статье уточнение для случая, если последний кусочек сообщения равен 512 битам. Также поправил исходники.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации