【问题标题】:Combinational implementation of hashing algorithms哈希算法的组合实现
【发布时间】:2011-10-20 20:50:35
【问题描述】:

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

【问题讨论】:

  • 是否需要纯粹的组合,因为您有异步设计?
  • 它必须是纯组合的,因为我希望实现在代码的综合版本中只有查找表。

标签: hash vhdl verilog


【解决方案1】:

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

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

【讨论】:

  • 我想我在互联网上看到了一个以这种方式实现 SHA1 的项目。这是个好主意...我会试一试。谢谢!
【解决方案2】:

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

我认为您很难在其中找到一个 - 散列通常需要高吞吐量,这往往意味着大量流水线和快速时钟以及寄存器。

不过写起来应该不会太难:

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

【讨论】:

  • True... 我想我会直接从代码中将一些 C 代码转换为 VHDL/Verilog。谢谢!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2018-05-20
    • 2016-06-23
    相关资源
    最近更新 更多