基于FPGA的HMAC_SHA1_96算法设计与实现
时间:06-28
来源:互联网
点击:
1 概述
随着信息社会的发展,数据交换,网上交易等活动日益频繁,从而网络安全成为人们关注的重要问题。随着信息技术的发展与应用,信息安全的内涵也在不断延伸,从最初的信息保密性发展到信息完整性、可用性、可控性和不可否认性,进而又发展为攻(攻击)、防(防范)、测(检测)、控(控制)、管(管理)、评(评估)等多方面的基础理论和实施技术[1]。目前对于安全性有以下三个指标:身份验证、数据完整性和机密性。
HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。然而大多数应用通过软件实现,但其安全性很难得到真正的保障,于是研究安全算法的硬件实现已成为热点。本文通过对算法和现场可编程芯片特点的分析,优化设计和实现了硬件系统的HMAC_SHA1_96算法应用方案。
2 SHA1函数
SHA1函数[2,3,5]是由美国国家标准和技术局和美国国家安全局设计的与DSS一起使用的安全散列算法SHA,并作为安全散列标准(SHS)的联邦信息处理标准(FIPS)而公布,SHA1是SHA的修订版。当输入长度小于2 64bit消息时,输出160bit的摘要,其算法步骤如下:
步骤一:填充附加位。一般经过填充使报文长度512取模余64bit。该步骤通常是需要的,即使报文长度已经是所希望的长度。因此填充长度范围为1到512,最高位为1,其余为0。
步骤二:附加报文长度值。即把一个64bit的报文长度数附加在上述报文之后(高字节优先),从而达到512bit的倍数。
步骤三:初始化变量。可以使用160bit的缓存(即160bit寄存器)来存放该散列函数的初始变量、中间摘要及最终摘要,但首先必须初始化, 给初始变量赋值,即:
A=0x67452301,B=0xefcdab98, C=0x98badcfe,D=0x10325476,E=0xc3d2e1f0
步骤四:处理512bit报文分组。在该步骤中包括四个循环,每个循环有20个处理步骤,而每个循环对 B﹑C﹑D所用的非线性函数不同,并且所用的常数也不同:
对于t=0~19,
ft (B,C,D)=(B∧C )∨((¬B)∧D),
Kt=0x5a827999
对于t=20~39,
ft (B,C,D)=B⊕C ⊕D,
Kt=0x6ed9eba1
对于t=40~59,
ft (B,C,D)=(B∧C )∨(B∧D)∨(C∧D),
Kt=0x8f1bbcdc
对于t=60~79,
ft (B,C,D)=B⊕C ⊕D,
Kt=0xca62c1d6
注:∧表示“与”;∨表示“或”;⊕表示“异或”;¬表示“取反”。
在每一步骤中都将执行如下的算法过程(图1)。
归纳为以下形式﹐其中 <<< 表示循环左移: A’, B’, C’, D’, E’← ((A<<<5) + ft (B,C,D)+Et +Wt +Kt ), A, (B<<<30), C, D 由于我们输入的是16个32bit消息,而SHA1运算需要80个32bit数据,所以存在一个由512bit 消息生成2560bit数据的转换过程(即生成W运算) ,其转换机制如下:
对于t=0~15, W t=Mt;
对于t=16~79,
Wt=(M t-3⊕Mt-8⊕Mt-14 ⊕Mt-16)<<<1。
步骤五:结果输出。512bit报文运算完就输出 160bit的报文摘要。
3HMAC_SHA1_96算法
HMAC_SHA1_96算法[2,3,6] 是基于单向散列函数SHA1和以密钥为基础的完整性检查验证机制,它是从生成的160bit摘要中选择从高到低的96bit作为最终输出。在该算法中主要就是SHA1函数和HMAC算法。它的作用在于生成摘要放在消息后面以验证消息在传输时是否受到修改或变动,保证消息的完整性。根据HMAC的定义,本设计的HMAC_SHA1_96算法原理图如图2。
图2算法的几点说明:① _ipad表示补位后的密钥与ipad 异或的结果,K_opad表示补位后的密钥与opad异或的结果;② 次SHA1运算包括生成W运算;③ 由SHA1运算输出的结果是经过加法处理的结果;④ 虚线部分表示图上忽略的信息分组和相应的SHA1运算部分;⑤ 如果只有512bit消息,则第一轮只需进行两次SAH1运算,就转到第二轮。图2又可写成如下的表达式:
SHA1( K XOR opad, SHA1(K XOR ipad, M) )
其中 K是密钥补位后的新值,即在密钥后补0使之为512bit;ipad是0×36重复16次的一个数组;opad是0×5c重复16次的一个数组;M是消息;XOR表示异或运算;SHA1是安全散列函数。
4 硬件设计
针对以上算法分析和实现流程特点,结合 FPGA芯片的硬件结构,进行如下的硬件系统设计和优化。
4.1使用RAM结构[4]
在HMAC_SHA1_96算法体系中,有大位数的数据存储,如果要用寄存器来实现,需要大约7000左右的寄存器,占用大量的FPGA芯片资源,这是因为FPGA芯片上,每个LE(逻辑单元)单元只有一个寄存器,这样每个LE单元上其它硬件资源将会浪费。然而FPGA芯片上大量的ESB(嵌入式系统块)资源没有充分利用,而ESB可以用来实现各种类型的存储模块,如RAM、ROM、FIFO和CAM等,在这种情况下,可以采用ESB实现RAM来代替寄存器,从而节省LE硬件资源,并且RAM存储数据,控制起来比寄存器方便很多。
随着信息社会的发展,数据交换,网上交易等活动日益频繁,从而网络安全成为人们关注的重要问题。随着信息技术的发展与应用,信息安全的内涵也在不断延伸,从最初的信息保密性发展到信息完整性、可用性、可控性和不可否认性,进而又发展为攻(攻击)、防(防范)、测(检测)、控(控制)、管(管理)、评(评估)等多方面的基础理论和实施技术[1]。目前对于安全性有以下三个指标:身份验证、数据完整性和机密性。
HMAC_SHA1算法在身份验证和数据完整性方面可以得到很好的应用,在目前网络安全也得到较好的实现。然而大多数应用通过软件实现,但其安全性很难得到真正的保障,于是研究安全算法的硬件实现已成为热点。本文通过对算法和现场可编程芯片特点的分析,优化设计和实现了硬件系统的HMAC_SHA1_96算法应用方案。
2 SHA1函数
SHA1函数[2,3,5]是由美国国家标准和技术局和美国国家安全局设计的与DSS一起使用的安全散列算法SHA,并作为安全散列标准(SHS)的联邦信息处理标准(FIPS)而公布,SHA1是SHA的修订版。当输入长度小于2 64bit消息时,输出160bit的摘要,其算法步骤如下:
步骤一:填充附加位。一般经过填充使报文长度512取模余64bit。该步骤通常是需要的,即使报文长度已经是所希望的长度。因此填充长度范围为1到512,最高位为1,其余为0。
步骤二:附加报文长度值。即把一个64bit的报文长度数附加在上述报文之后(高字节优先),从而达到512bit的倍数。
步骤三:初始化变量。可以使用160bit的缓存(即160bit寄存器)来存放该散列函数的初始变量、中间摘要及最终摘要,但首先必须初始化, 给初始变量赋值,即:
A=0x67452301,B=0xefcdab98, C=0x98badcfe,D=0x10325476,E=0xc3d2e1f0
步骤四:处理512bit报文分组。在该步骤中包括四个循环,每个循环有20个处理步骤,而每个循环对 B﹑C﹑D所用的非线性函数不同,并且所用的常数也不同:
对于t=0~19,
ft (B,C,D)=(B∧C )∨((¬B)∧D),
Kt=0x5a827999
对于t=20~39,
ft (B,C,D)=B⊕C ⊕D,
Kt=0x6ed9eba1
对于t=40~59,
ft (B,C,D)=(B∧C )∨(B∧D)∨(C∧D),
Kt=0x8f1bbcdc
对于t=60~79,
ft (B,C,D)=B⊕C ⊕D,
Kt=0xca62c1d6
注:∧表示“与”;∨表示“或”;⊕表示“异或”;¬表示“取反”。
在每一步骤中都将执行如下的算法过程(图1)。
归纳为以下形式﹐其中 <<< 表示循环左移: A’, B’, C’, D’, E’← ((A<<<5) + ft (B,C,D)+Et +Wt +Kt ), A, (B<<<30), C, D 由于我们输入的是16个32bit消息,而SHA1运算需要80个32bit数据,所以存在一个由512bit 消息生成2560bit数据的转换过程(即生成W运算) ,其转换机制如下:
对于t=0~15, W t=Mt;
对于t=16~79,
Wt=(M t-3⊕Mt-8⊕Mt-14 ⊕Mt-16)<<<1。
步骤五:结果输出。512bit报文运算完就输出 160bit的报文摘要。
3HMAC_SHA1_96算法
HMAC_SHA1_96算法[2,3,6] 是基于单向散列函数SHA1和以密钥为基础的完整性检查验证机制,它是从生成的160bit摘要中选择从高到低的96bit作为最终输出。在该算法中主要就是SHA1函数和HMAC算法。它的作用在于生成摘要放在消息后面以验证消息在传输时是否受到修改或变动,保证消息的完整性。根据HMAC的定义,本设计的HMAC_SHA1_96算法原理图如图2。
图2算法的几点说明:① _ipad表示补位后的密钥与ipad 异或的结果,K_opad表示补位后的密钥与opad异或的结果;② 次SHA1运算包括生成W运算;③ 由SHA1运算输出的结果是经过加法处理的结果;④ 虚线部分表示图上忽略的信息分组和相应的SHA1运算部分;⑤ 如果只有512bit消息,则第一轮只需进行两次SAH1运算,就转到第二轮。图2又可写成如下的表达式:
SHA1( K XOR opad, SHA1(K XOR ipad, M) )
其中 K是密钥补位后的新值,即在密钥后补0使之为512bit;ipad是0×36重复16次的一个数组;opad是0×5c重复16次的一个数组;M是消息;XOR表示异或运算;SHA1是安全散列函数。
4 硬件设计
针对以上算法分析和实现流程特点,结合 FPGA芯片的硬件结构,进行如下的硬件系统设计和优化。
4.1使用RAM结构[4]
在HMAC_SHA1_96算法体系中,有大位数的数据存储,如果要用寄存器来实现,需要大约7000左右的寄存器,占用大量的FPGA芯片资源,这是因为FPGA芯片上,每个LE(逻辑单元)单元只有一个寄存器,这样每个LE单元上其它硬件资源将会浪费。然而FPGA芯片上大量的ESB(嵌入式系统块)资源没有充分利用,而ESB可以用来实现各种类型的存储模块,如RAM、ROM、FIFO和CAM等,在这种情况下,可以采用ESB实现RAM来代替寄存器,从而节省LE硬件资源,并且RAM存储数据,控制起来比寄存器方便很多。
FPGA 嵌入式 电路 Altera Quartus 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)