Комбинационная реализация алгоритмов хеширования - PullRequest
2 голосов
/ 21 октября 2011

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

Ответы [ 3 ]

3 голосов
/ 21 октября 2011

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

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

1 голос
/ 21 октября 2011

Это очень странное требование!

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

Писать не должно быть слишком сложно:

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

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

...