You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FPGA的SHA1哈希性能探究及算法核心步骤解析

探究FPGA在SHA1哈希运算中的性能表现

我来聊聊FPGA在SHA1哈希运算里的性能表现,先从SHA1的运算逻辑说起——SHA1整个流程包含80个基于32位整数的运算步骤,这里有4个中间阶段的代表性步骤(C语言实现):

x0 = rol(x13 ^ x8 ^ x2 ^ x0, 1);
e += rol(a,5) + (b^c^d) + x0 + 0x6ED9EBA1L;
b = rol(b,30);
x1 = rol(x14 ^ x9 ^ x3 ^ x1, 1);
c += rol(d,5) + (e^a^b) + x1 + 0x6ED9EBA1L;
e = rol(e,30);
x2 = rol(x13 ^ x10 ^ x4 ^ x2, 1);
b += rol(c,5) + (d^e^a) + x2 + 0x6ED9EBA1L;
d = rol(d,30);

从这些代码能看出来,SHA1的核心运算都是位操作(异或)、循环移位、整数加法,这些恰好是FPGA硬件逻辑的强项,相比CPU,FPGA在SHA1运算上的性能优势主要体现在这几点:

  • 并行化执行突破串行瓶颈:CPU执行这些步骤是串行按序进行的,但FPGA可以把多个独立的运算分支同时调度执行——比如计算x0的移位异或、x1的移位异或、x2的移位异或这三个操作,完全能在同一个时钟周期内并行完成,不用等待前一个任务结束。
  • 定制化硬件单元降低延迟:像rol()循环移位,FPGA可以直接用寄存器组+多路选择器搭建,单周期就能完成;异或操作是FPGA基本逻辑单元(LUT)原生支持的,延迟极低;加法器还能采用超前进位加法器(CLA)实现,比CPU通用加法器的运算速度更快。
  • 流水线设计提升吞吐量:把SHA1的80个步骤拆分成多个流水线阶段,每个阶段负责一部分运算,这样每个时钟周期都能输出一个中间结果,连续处理哈希任务时,吞吐量能比串行执行提升几十倍甚至上百倍。
  • 常量固化节省访问开销:代码里的0x6ED9EBA1L是SHA1的固定常量,FPGA可以直接把这个值固化在硬件逻辑里,不用像CPU那样从内存读取,彻底消除了常量的访问延迟。

内容的提问来源于stack exchange,提问作者Eugene Smith

火山引擎 最新活动