安全PRESENT加密算法的硬件实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安全PRESENT加密算法的硬件实现
摘要分组密码是现代密码学的重要分支,具有易于标准化、易于软硬件实现和速度快的特点。
PRESENT作为典型的分组密码算法,目前已经被广泛应用在各个安全领域,同时PRESENT也成为各种攻击方式的主要攻击对象。
本论文主要内容为PRESENT加密电路的实现,涉及的知识主要包括密码学和电路设计两方面。
关键词PRESENT算法;分组密码学;电路设计
本世纪IT领域一个前景趋势将会是广泛应用微小尺寸的计算设备。
但是人们察觉到,这种趋势会在一定范围内带来特定的安全风险,与此同时我们现有的加密算法解决方案不能在资源极其有限的环境下令人满意。
分组密码算法PRESENT,是在精心考虑面积和功耗限制的前提下设计出来的,并在安全性上同样有着优良表现。
1 PRESENT算法的原理概述
PRESENT算法是一种对SP结构的应用,计算过程中将通过31次相应的SP 结构。
明文和密文的长度都是64位,有80位和128位两种密钥长度供选择。
其中80位的密钥长度更适合于对硬件密集度要求较高的情况,同时更便于与其他算法进行比较,故本课题中介绍以及实现的是80位密钥的情况。
对于前31轮运算,每轮首先由当前明文和当前密钥进行一次逐位的异或运算。
运算的结果保存为新的明文后,先后通过一个非线性层和一个线性层。
其中非线性层通过S盒实现,将明文分割成16个4位的子明文,之后平行同步通过16个相同的S盒,再将所得16段结果拼在一起,共同通过一个P置换层,从而完成明文的一轮运算。
在明文进行运算的同时,密钥也同步地按照一定规则进行更新,以保证每轮的明文运算时应用的密钥是更新过的。
另外值得注意的是,在前31轮运算完成之后,将进行第32轮的运算,这最后一轮的运算只进行一次明文与密钥的逐位异或,而无需再通过S盒和P置换层了。
2 PRESENT算法编码实现
2.1PRESENT算法的顶层模块架构
PRESENT算法的顶层架构中,主要由两个模块组成,即密钥生成模块和轮函数运算模块,这两个模快采用时钟同步控制,相互配合工作。
密钥生成模块的输入为时钟信号,复位信号以及初始用户输入密钥,并将更新后的密钥送至轮函数运算模块。
对于轮函数运算模块其输入包括时钟信号,复位信号,用户初始明文密钥输入以及更新后的密钥,其输出即为每轮运算后的密文。
2.2密钥生成模块
密钥生成模块采用与轮函数运算模块相同的时钟信号控制,其目的在于使两个模块的数据能够有时序关系,从而保证每次运算都是在时序控制下进行的,使密钥生成模块产生的密钥能准确的传给轮函数运算模块进行密文的运算。
首先,密钥生成模块会等待RST信号的到来进行初始化工作。
将用户输入的初始密钥储存到key register 中,同时将模块内置的名为rc的寄存器设置为1。
完成初始化之后,等待下一个时钟上升沿,模块就开始了运算过程。
第一步,设置变量T1,利用assign语句让T1保存key register中密钥进行移位后的值。
具体移位过程是将原密钥的最后19位提前到密钥的最开始。
第二步,将T1的前4位通过S盒进行转换,将得到的结果和T1剩下的各位拼接成另一个中间密钥,保存在另一个wire类型的变量T2中。
第三步,将T2的下标为19-15的5位与当前的用来保存轮数的rc寄存器中的5位数字进行逐位的异或运算,将结果和T2剩下的各位拼成80位的密钥,保存在wire类型的变量T3中。
至此,一轮的运算结束,这些运算都是通过组合逻辑实现的。
2.3轮函数运算模块
轮函数运算模块是PRESENT算法的核心运算模块,该模块将用户输入的明文,用户输入的密钥以及密钥生成模块更新生成的密钥一起,在时钟信号和复位信号的控制下,进行运算生成每轮的密钥输出。
首先,该模块会等待复位信号的到来,以进行复位操作,把模块内置的用来记录计算轮数的寄存器rc清零,同时将控制运算开始与结束的寄存器onoff设置为关闭状态,将用户输入密钥存入模块内置的key register中,将用户输入的初始明文存入模块内的text register。
在完成了初始化工作后,模块等待下一个时钟上升沿开始运算工作。
第一步,将text register中储存的64位数字与key register中的80位密钥的前64位进行逐位异或运算,运算的结果储存在wire类型的变量T1中。
第二步,将T1保存的64位数值分为16段4位的数字,将这16段数字同时通过16个相同的S盒进行转换,转换后的16段新数字拼接成新的64位数字,保存在wire类型的变量T2中。
第三步,将T2的内容通过P置换层,这一步是通过assign语句直接进行的移位操作,结果保存在变量T3中。
当进行了32轮运算后,模块将自动将onoff 信号从开启设置为关闭,这样可以保证模块运算32轮后运算结束,输出结果保持为最终所需的结果。
2.4 S盒模块
S盒是密钥更新和轮函数运算中的重要组成模块,进行非线性转换。
它能将4位的输入转换为不同的4位输出。
在S盒中进行的转换操作就是通过verilog 语言中的case语句,将4位输入对应的不同16进制值转换为其他值。
至此,我们已经实现了PRESENT算法的主要的各个模块,将这些模块连接到相应的输入输出上,便完成了PRESENT算法的编码实现阶段。
3 PRESENT算法的仿真验证
在完成了PRESENT算法各模块的代码编写之后,编写相应的test bench文件来进行功能的仿真验证。
在test bench文件中,首先定义各个端口,之后设置时钟信号的翻转命令。
然后进行算法顶层模块的实例化。
最后设置给顶层模块的各种输入。
为了进行更具说服力的功能验证,本课题参考了PRESENT算法提出的初始文献,在该文献中提供了4个不同的测试向量,本课题对应这4个不同的测试向量更换测试test bench文件中的用户密钥输入和初始明文输入,从而得到了对应的功能验证波形图像。
最终密文输出与文献中提供的测试向量结果完全一致,电路功能正确实现。
4 结论
本文主要叙述了本课题整个PRESENT算法硬件实现的过程。
从各模块角度阐述PRESENT算法的编码过程;对VHDL代码进行了VCS仿真以及DC综合等完备功能验证以说明该算法成功实现。
参考文献
[1]冯登国.国内外密码学研究现状及发展趋势.通信学报,2002(5).
[2]PRESENT: An Ultra-Lightweight Block Cipher, A.Bogdanov, L.R.Knudsen,
G.Leander, C.Paar, A.Poschmann,M.J.B.Robshaw, Y.Seurin, and C.Vikkelsoe.Technical University Denmark, DK-2800 Kgs.Lyngby, Denmark.。