Комбинационная реализация алгоритмов хеширования

#hash #vhdl #verilog

#хэш #vhdl #verilog

Вопрос:

Я работаю над проектом, который требует использования комбинационных реализаций алгоритмов хеширования. VHDL / Verilog являются целевыми языками, поскольку я надеюсь работать на FPGA. Я провел некоторый поиск и наткнулся на спецификации RFC для MD5 и SHA1, но, похоже, я нигде не могу найти комбинационную (избегайте часов, пожалуйста) реализацию в VHDL / Verilog. Знаете ли вы о каких-либо? Сам алгоритм хеширования не имеет значения, если он по крайней мере такой же сильный, как MD1.

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

1. Должно ли это быть чисто комбинационным, потому что у вас асинхронный дизайн?

2. Это должно быть чисто комбинационным, потому что я хотел бы, чтобы в реализации были только таблицы поиска в синтезированной версии кода.

Ответ №1:

Начните с реализации MD5 или SHA1, написанной на C. Затем вручную преобразуйте каждый шаг алгоритма в шаг в блок-схеме. Каждая арифметическая или логическая операция в коде C становится комбинационной логической операцией (гейтами). Исходные и целевые переменные в коде C становятся входными и выходными портами в вашей аппаратной конструкции. Временные переменные в коде C становятся именами внутренних сетей, соединяющих ваши комбинационные логические блоки.

Теоретически должно быть возможно создать чисто комбинационную реализацию этих алгоритмов. На практике вы можете обнаружить, что для этого требуется слишком много аппаратных ресурсов (сумматоров, множителей и т. Д.) И Что вам потребуется повторно использовать ресурсы. Как только вам нужно повторно использовать ресурсы, вам нужно ввести некоторые промежуточные регистры, и тогда ваш вывод не будет действительным в течение определенного количества тактов.

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

1. Я думаю, что видел проект в Интернете, который реализует SHA1 таким образом. Это хорошая идея… Я попробую. Спасибо!

Ответ №2:

Это интересно дурацкое требование!

Я думаю, вам будет сложно найти его там — обычно требуется, чтобы хеширование было высокопроизводительным, что, как правило, означает много конвейерной обработки и быстрые часы и, следовательно, регистры.

Это не должно быть слишком сложно написать, хотя:

  • напишите модули / объекты для различных этапов «смешивания», используемых в алгоритме
  • создайте круглую сущность, которая помещает объекты смешивания в правильном порядке
  • используйте for generate цикл .. (или его эквивалент Verilog) для создания всех необходимых раундов.

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

1. Верно… Я думаю, что я буду преобразовывать некоторый код C в VHDL / Verilog непосредственно из кода. Спасибо!

Ответ №3:

Проверка www.opencores.org/projects
Доступно множество криптографических ядер с исходным кодом для изучения.