Комментарии 20
Круто! Если не секрет, какие получились характеристики: сколько оно заняло по ресурсам (ПЛИС), на какой частоте, какую производительность в МБ/с имеет?
И ещё бы хорошо в сравнении с более традиционными хешами, например sha256/sha512, ну и например sha3, skein, blake.
Имплементировал его во времена лихорадки.
Если вам нужен результат каждый такт (конвейер), то хэша хуже Стрибога придумать сложно.
Процитирую себя самого же с Электроникса:
Sboxes на BRAM (утилизация BRAM свыше 3000 шт).
Интересная инфа, спасибо!
Лично я не знаю традиционного криптохеша, который мог бы принимать данные каждый такт. Ну кроме читов вроде буферизации по 1 байтику или всяких распараллеливаний по 4к или деревом. А вот штуки, пригодные только для MACа, типа того, что в aes-gcm или chacha20-poly1305 -- теоретически (и зачастую практически) могут. Но они не полноценные хеши.
Лично я не знаю традиционного криптохеша, который мог бы принимать данные каждый такт.
В примере из Электроникса, насколько понимаю, ограниченная постановка: хэшируют блоки фиксированной длины 64 байта, а не произвольной.
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 этих последовательностей."
В 2013 на Delphi дипломную работу делал, Стрибог, подпись на тестовых эллиптических кривых (512-битная), сейчас флешбек словил.
Здорово!
Единственное, что пока вызывает вопросы - верификация. Наверное, 4х примеров из госта, как в ващем тестбенче, не хватит чтобы полноценно верифицировать блок.
Но тогда наверное придётся подумать как нагенерировать еще валидных примеров (есть ли код, например на C, в правильности которого уже никто не станет сомневаться)?
Автору успехов)
Согласен. Здесь речь идет не о верификации, а лишь о первичной проверки работоспособности. Для верификации необходима, так называемая, gold model (например на C или на несинтезируемых конструкция system verilog), с которой можно сранивать результаты. Причем правильно если написанием rtl и верификацией занимаются разные люди.
Интересно, для чего потребовалось реализовывать Стрибог в FPGA, неужели сделали криптовалюту с консенсусом на ней?
upd. Сделал в статье уточнение для случая, если последний кусочек сообщения равен 512 битам. Также поправил исходники.
Хеш-функция Стрибог. Особенности аппаратной реализации на System Verilog