首页 > 范文大全 > 正文

SHA1的FPGA高速实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇SHA1的FPGA高速实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:信息安全领域中,单向散列函数SHA-1是常用的认证算法之一。本设计的目的是要用fpga高速实现SHA-1。设计主要分为控制模块和运算模块。控制模块部分采用计数器集中控制方式,占用资源少,时效性好。运算模块的部分延时最大的是52连加器部分,它设计的好坏直接影响到整个芯片的速度。对此,本设计采用了进位保存加法器(CSA),大大提高了芯片速度。本设计是在Quatus_4.2运行环境下采用VHDL语言编程实现。

关键词:hash函数 现场可编程门阵列(FPGA) SHA-1

中图分类号:TP39文献标识码:A 文章编号:1007-3973(2010)06-060-02

在信息安全领域中,对信息数据进行加密是一个常用且行之有效的安全措施。在IPSec协议中认证使用SHA-1和MD5单向散列函数算法实现。目前SHA-1算法已成为国际商用密码的标准算法。

传统的硬件数据加密方法主要有两种。一种是基于可编程体系结构的芯片(DSP)采用软件编程方式实现密码算法的方法;另外一种是设计专用的硬件逻辑芯片(ASIC)完成加密算法的方法。从安全的角度来讲,上述两种加密方法都存在极大的安全隐患:就专用密码芯片而言,一旦芯片生产出来以后,其实现的密码算法是不可改变的。对软件可编程体系结构密码芯片,则存在着代码易读和易分析的弱点,成为不可逾越的安全障碍。而FPGA的出现可以很好的解决以上两个问题。

1 芯片整体架构

本设计主要分为运算模块和控制模块。其中运算模块包括消息扩展模块w_creat和轮运算模块。

2运算模块设计

2.1消息扩展wt生成模块w_creat的设计

每个生成的wj在轮运算模块中只用到一次,本设计采用16 个32位的寄存器(m0……mf )来存储每一步中可能用到的162bit数据,每一步的wj使用完以后便让出空间,而不是用一个8062bit的存储器来存储80个wj,节约了大量的资源同时也提高了速度。

2.2轮运算模块

该运算一共四轮,每轮运算的大体框架相同,只是常数kt和逻辑函数FUN不同。所以四轮是共用同一模块。轮运算模块主要包括连加电路、存储模块、移位电路(5位和30 位)、逻辑函数(4 轮)、多路选择器。下面就各模块的设计做简要说明。

(1)移位电路

在硬件设计中,移位是通过交叉连线实现的,它只占用连线资源不占用逻辑资源,且实现语句简单。

(2)存储电路

本设计中的存储模块包括A、B、C、D、E初始值寄存器和a、b、c、d、e中间值寄存器。而a、b、c、d、e中间值寄存器采用了输入为并行输入,输出可以同时为并行输出和串行输出。并行输入、输出主要是为了让每步运算结束时快速更新其值,串行输出是当所有明文杂凑完成,该寄存器组作为串行输出口时使用。

(3)连加电路

在整个芯片中,此处的连加电路是延时最大的一块,也是整个芯片速度的瓶颈,它设计的好坏,直接关系到芯片最高工作频率。对于32的连加器,在这里采用了CSA(保存加法器)方式来快速实现。一个CSA可以实现一个3 到2 的转换,此处要实现5 连加,共用了3 个CAS和一个32 位全加器。

(4)逻辑函数

逻辑函数部分的设计较为简单,主要由四组逻辑器件一个四选一多路选择器组成。当b、c、d的值输入时组合逻辑器件进行运算,然后由四选一多路选择器根据控制信号选择输出值。

2.3数据路径设计

数据路径设计中使用到的主要器件为:32位寄存器组、32的连加器、32位加法器、多路选择器。

当芯片复位(rest=0或init=0)时先把16位输入数据缓冲器中的初始值装入A、B、C、D、E寄存器组和a、b、c、d、e中间值寄存器组中。控制信号en跳变为高时开始第一轮运算。在总共四轮80步的运算中每一步的a、c、d直接移入到b、d、e中作为下一轮值使用。b循环左移30位后存入c中。

3控制模块

控制信号比较简单且有规律,所以在本设计中采用了计数器控制方式。由于每处理512bit明文用要81个时钟周期,所以计数器采用7位。下面就每个控制信号的产生作介绍。

3.1readyout信号的生成

组合逻辑使计数器的值为80时产生一个正脉冲(即80作二进制译码),连上一个触发器便可实现设计要求。

3.2 w_en信号的生成

w_en一但检测到wen由低跳变到高,即产生一个正脉冲,就自动跳变为有效状态直到四轮运算完成。所以它的产生与上面两个信号相似,可以用触发器实现。

(1)sel_w的生成

当输入16组明文(即计数器的值为0-15)时其值为低,其后16-79周期其值一直为高。本设计采用一组合逻辑实现上述功能。

sel_w是在计数器的值为15时跳变的,15的二进制表示为0001111,sel_w在16-80时为高,也就是说我们设计的组合逻辑要在计数器的值取到比15大时输出值为高。比15大即高3位只要任意一位不为零,若计数器的7位输出端口由高位到低位依次设为c(6) 、c(5) 、c(4) 、c(3) 、c(2)、 c(1)、 c(0)则其组合逻辑为表达示为:

sel_w = c(6) or c(5) or c(4)

(2)sel_kt[1..0]的生成

先看sel_kt[1..0]的高位sel_kt[1]在0-39时其值为低,40-79时其值为高,39的二进制表示为0010111,由上面的方法可知:

sel_kt[1]= c(6) or c(5) or (c(4) and c(3));

对于sel_kt[1..0]的低位sel_kt[0]其值的变化性要大一些,跳变不止一次,不能简单的套用上面的方法。但是我们可以用三个值的异或来实现。设三中间函数a、b、c

则sel_kt[0] = abc;

对于a、b、c的实现方法同上

a= c(6) or c(5) or ( c(4) and ( c(3) or c(2) ) );

b= c(6) or c(5) or ( c(4) and c(3) );

c= c(6) or ( c(5) and c(4) and c(3) and c(2) )。

4 仿真波形图

5结语

本设计选用Altera公司的Cyclone 系列器件EP1C6Q240C6,耗费LE 1019个(占用LE资源总量的17%),管脚73个(占用管脚资源总量的39%)。经编译综合后,报告时钟频率达120.92MHz,但是从前面的设计可以看出其时钟频率不可能达到如此高,估计其值最多到65 MHz。在计算机仿真测试中,时钟频率加到50 MHz结果正确。

参考文献:

[1]薛之昕.数字签名算法SHA-1的FPGA高速实现.2004-12-8.

[2]马云.基于可重组逻辑体系结构的信息安全技术.

[3]Halevi, S. Krawczyk, H.,Public key cryptography andpassword protocols[J]. Proceedings of 5th ACM Conference on Computer and Communications Security, 1998.

[4]Botting, J.Security on the Internet:Authenticating the User[J]. Telecommunications, 1997.