kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 业界动态> 基于FPGA的DES加密算法的实现

基于FPGA的DES加密算法的实现

2009-01-14
作者:赵莲清,王亚美

摘 要:介绍了DES算法的基本原理与加密过程,给出了基于FPGA的DES算法的硬件实现,并且用Quartus II 实现了模块仿真,验证了DES加密算法。

关键词:DES算法; FPGA; 仿真

随着网络通信技术的发展,如何保护数据传输过程的安全已成为一项急迫的要求。政府部门、金融行业、通信行业、情报等系统都非常重视信息的安全。密码安全技术则是所有安全服务的基础。数据加密是信息安全的重要手段,DES密码算法是最有代表性的分组加密算法,1976年被美国政府采用,随后又被美国国家标准局和美国国家标准学会承认,发展至今已成为工业界的标准密码算法,目前广泛应用于保密通信中。DES算法用64位的密钥对64位的明文加密,64位密钥中每8位就有一奇偶校验位,不参与运算,因此有效密钥只有56位。此外,由于该算法的对称性,其加密和解密运算过程完全相同,只是在迭代运算时子密钥的使用顺序不同[1]。DES加密算法有各种实现方案,本文提出一种DES加密算法的硬件实现方法

DES算法主要包括:初始置换、16轮迭代的乘积变换、初始逆置换以及16个子密钥产生器[2]。DES 加密过程如图1所示。

初始置换主要用于对明文中的各位进行换位,目的在于打乱明文中各位的排列次序,输出结果按奇偶分为左右两路送入乘积变换部分。在这个过程中不使用密钥,仅仅对64位码进行移位操作。而进行逆初始置换是为了使加解密统一使用同一种算法。初始置换与初始逆置换只是将64位输入的数据按位进行重新排列,只需要一些输入输出端口,按照置换规则把输入与输出对应关联即可[3]。下面只介绍密钥的产生与16轮迭代乘积变换模块的设计。

1 子密钥生成模块

DES算法每一轮次迭代都需要一个子密钥,要实现DES算法就需要提前生成子密钥,并且按照时序准确地传递给迭代过程。

子密钥产生模块由选择控制、循环移位控制等部分构成。该模块的输入是64位初始密钥,输出为参加每次迭代运算的子密钥,另外还有一个控制信号(time),用来控制在不同迭代过程中移位的次数。本设计采用硬件描述语言(VHDL)按照子密钥产生的过程,通过置换选择1、循环移位、置换选择2,一步一步得到子密钥的。循环移位仿真结果如图2所示。图中,c0、d0是经过置换选择1后得到的前后28位,Time为控制移位次数的控制信号,k1为移位后的结果,再经过置换选择2即可得子密钥。

因为每轮移位的次数不同,所以每轮子密钥产生的时间也不相同,所以会给迭代运算带来延迟,这也是采用VHDL设计存在的不足。从VHDL设计结果可以看出,原密钥与每轮子密钥之间有固定的关系,因此,可以通过软件分析,建立子密钥相对于原始密钥的关系表,在硬件实现时直接使用此关系表即可,这样也可以有效地节省硬件资源。

2 迭代变换

DES算法是典型的迭代分组密码算法,实现过程的核心是16轮次相同的迭代运算。输入的64位明文先执行初始置换对明文进行换位处理;然后通过子密钥k1~k16对明文进行16轮乘积变换,即进行16次迭代处理;最后经过逆初始置换的处理,得到64位的密文输出。16次迭代的目的是使明文增加混乱性和扩散性,避免输出密文残留统计规律,使破译者无法反向推算出密钥。

轮迭代运算中的f函数是非线性的,它是每轮实现混乱和扩散的最关键的模块,也是整个加密算法的核心,它包括E盒扩展置换、S盒置换和P盒置换,其基本过程如图3[4]所示。其中,E盒扩展置换、P盒置换的原理和实现方法与初始置换以及逆初始置换类似,运算过程都是线性的,而S盒是一个复杂的非线性函数,正是经过了S盒的非线性变换,才使算法达到很好的“混乱”效果,从而具有较强的安全性。因此,S盒的设计是DES算法的关键部分,S盒设计的优劣将影响整个算法的性能。

基于S盒的表现形式是矩阵形式,因此在使用VHDL语言建立S盒模型时,一般都会想到直接用多重选择CASE语句[5]。在这里即采用CASE语句实现。用CASE选择语句实现S盒有两种方式:一种是直接使用S盒的6位输入为6个变量的CASE语句方式,另一种方式是使用双重CASE嵌套语句,即外层使用2个输入控制S盒的横向选择;内层使用4个输入控制S盒的纵向选择。采用双重CASE语句可以直接定位输出结果。这两种方式下占用资源的情况如表1所示。

根据表1比较的结果可以看出,选择双重CASE语句建立S盒模型可以大大节省资源,其仿真结果如图4所示。s0为S盒的输入,s2为S盒的输出,这样就完成了非线性的变换。图5为通过Quartus II实现的基于FPGA的DES加密算法的硬件仿真线路图。

本文通过对各个模块特别是S盒与子密钥生成模块的详细分析,给出了DES加密的一种实现方法,并在此基础上对部分模块进行了验证仿真,给出了硬件仿真线路图。这种设计方法是根据功能模块分层进行的,因此可以节省设计时间,减少设计输入的错误,简化验证的过程。

参考文献

[1] STALLINGS W. Cryptography and network security principles and practices[M]. prentice Hall, 1996.

[2] 胡向东,魏琴芳.应用密码学[M].北京:电子工业出版社,2006.

[3] 高献伟,周玉坤,路而红,等.DES算法硬件实现的研究[J]. 北京电子科技学院学报, 2001,(1):11-15.

[4] 张福泰.密码学教程[M].武汉:武汉大学出版社,2006.

[5] 李永彬,雷 菁.DES加密算法的高速FPGA实现[J].电子工程师,2005,(7):39-40.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map