微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 基于FPGA的HMAC_SHA1_96算法设计与实现

基于FPGA的HMAC_SHA1_96算法设计与实现

时间:06-28 来源:互联网 点击:
4.2 重复利用相同模块

正如前面算法所述,SHA1算法是由80次运算组成的,而每次运算的结构又是一样的,如果采用水线形式的运算模式,利用80个同样的模块,会占用很多的硬件资源,不符合优化设计的要求,因此可以先优化设计出一个模块,再对该模块复用80 次,每一次运算的结果需存入寄存器,以便送入下一次运算,这样可极大地优化利用FPGA硬件资源。

4.3 模块划分

HMAC_SHA1_96算法体系的硬件实现,必会存在与外围电路的数据握手传输。由于外围电路(8255或CPU)的工作时钟频率与所设计的芯片工作时钟频率不一样,要让设计芯片与外围电路协调工作,就必须专门设计输入输出接口电路,再设计出核心处理模块,从而不受外界电路工作环境影响。由此,可以将本设计分为三个部分:输入模块、算法实现模块和输出模块。

4.3.1 输入模块

由于输入模块会跟外围电路(如8255)连接进行信号或数据传输,根据握手信号ACK和OBF,每次输入8bit数据写到64×8bit的RAM,需要64 次,而外围电路什么时候输入数据由内部信号sha_end控制,该模块的输出一次为32bit,所以相当于一次读4×8bit数据。

4.3.2 算法实现模块

该模块主要进行HAMC_SHA运算,输出160bit摘要,其数据处理流程图见图3(图中 M_RAM用来存储消息),其中又可以分为以下几个主要部分:


① 密钥输入处理部分。处理密钥时需要先对其进行异或运算,然后把其写入两个32×16bit的 RAM,假设分别为I_RAM和O_RAM。I_RAM里数据在第一轮SHA1算法首先运算,而O_RAM 里的数据要到第二轮才开始运算。

② 生成W处理部分。 由于SHA1函数中要进行80次运算,每次运算采用不同的32bit W值,而输入的只有16个32bit数据,于是该算法采用四个不同的W值进行异或运算生成新的W值。这四个W值是从80×32bit的W_RAM读出的,而生成新的 W值再依次写入该RAM中没有使用的位置。

③ SHA1运算部分。是设计的核心部分,需要完成80次运算,每次从32×80bit RAM读出一个32bit W值,最终生成160bit摘要。

④ 摘要处理部分。主要对每一次SHA1运算后生成的摘要与本次的初始密钥进行加法运算,作为下次SHA1运算的初始密钥,或者作为最终输出摘要,或者作为下一轮SHA1运算的消息输入。

⑤ 摘要补位部分[6] 。对第一轮生成的160bit摘要进行补位,方法为:[160]~[190] 0[191] 1 [192]~[479] 0 [480]~[511]=1010100000,将此值写入一个16×32bit的FILL_RAM。

4.3.3 输出模块

同输入模块一样,由于同外围电路进行信号或数据传输,根据握手信号STB和IBF,每次输出8bit数据到外围电路,但该部分主要是一个8×12bit RAM,可以一次写入96bit数据。

4.4 硬件系统总体结构

在数据输出端加锁存器是为了保证输出数据被外围电路采样之前始终有效,从而达到本设计与外围电路协调工作的目的。结构图如图4。


5 FPGA实现

我们知道,FPGA芯片内部结构是由逻辑阵列块(LAB)、嵌入式系统块(ESB)、快速通道互联和输入输出单元(IOE)组成。LAB是由10个LE、LE 间关联的进位链﹑级连链﹑LAB控制信号和LAB局部互连构成,可以实现快速运算通道,特别适合本设计算术运算单元的硬件实现[4]。ESB如前所说,可以用来实现不同的存储模块,特别适合于大位数的数据存储。快速通道是用来实现LE之间,ESB 与I/O之间的快速互连,并且具有高扇出能力,它是一系列纵横交错的连续式分布通道,能够得到高性能和快速的信号传输,提高本设计运算效率和信号的稳定性。I/O单元由一个双向缓冲器和一个寄存器组成,含有可编程延时,可确保零保持时间或最小的时钟到输出时间,减少设计数据输出的毛刺现象。另外FPGA可以重复使用,以方便修改代码或参数时再重新配置FPGA。

本设计采用Altera的APEX20KE160EQC240_1X 芯片实现,其功能模块及PC接口原理图见图5。


图中FPGA编程器采用QuartusⅡ2.0软件, HMAC_SHA1_96应用环境设置主要配置软件控制HMAC_SHA1_96的运行机制,PCI控制器用来控制FPGA芯片与PCI BUS的通讯。先通过QuartusⅡ2.0软件对代码布局布线生成pof文件或sof文件, pof文件可直接用来配置FPGA,但每次使用时必须重新配置;而sof文件可以先存入EEPROM,再由 EEPROM对FPGA配置,每次上电前由EEPROM配置,这样可以直接应用于信息安全硬件系统中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top