哈希算法的组合实现

时间:2011-10-20 20:50:36

标签: hash vhdl verilog

我正在开发一个需要使用散列算法的组合实现的项目。 VHDL / Verilog是目标语言,因为我希望能够在FPGA上工作。我已经做了一些搜索,我遇到了MD5和SHA1的RFC规范,但我似乎无法在VHDL / Verilog的任何地方找到一个组合(避免使用时钟)。你知道吗?散列算法本身并不重要,只要它至少与MD1一样强。

3 个答案:

答案 0 :(得分:3)

从用C编写的MD5或SHA1的实现开始。然后手动将算法中的每个步骤转换为流程图中的步骤。 C代码中的每个算术或逻辑运算都成为组合逻辑运算(门)。 C代码中的源和目标变量成为硬件设计上的输入和输出端口。 C代码中的临时变量成为连接组合逻辑块的内部网络的名称。

理论上,应该可以创建这些算法的纯粹组合实现。实际上,您可能会发现它需要太多的硬件资源(加法器,乘法器等),并且您需要重用资源。一旦需要重用资源,就需要引入一些中间寄存器,然后输出在一定的时钟周期内无效。

答案 1 :(得分:1)

这是一个有趣的古怪要求!

我认为你很难找到一个 - 散列通常需要高吞吐量,这往往意味着大量的流水线操作和快速的时钟,因此寄存器。

写起来应该不会太难:

  • 为算法中使用的各种“混合”阶段编写模块/实体
  • 创建一个圆形实体,将混合实体按正确顺序排列
  • 使用for .. generate循环(或其等效的Verilog)来创建所需的所有轮次。

答案 2 :(得分:0)

检查www.opencores.org/projects
它有许多可用的加密核心,有研究来源。