基于FPGA的Twofish加/解密芯片设计
推荐给好友
打印
加入收藏
更新于2009-07-15 15:13:28

摘要:针对安全的数据传输及个人隐私权的保护等问题,研究基于FPGA的改进型Twofish加/解密芯片的设计。采用16组Rijndael-likeS-boxes设计Twofish算法,提高算法的安全性,加入伪随机数器决定每回合使用的S-boxes,增加攻击者破解的难度。以Altera公司的StratixEP1S20验证该芯片的功能,结果证明其能达到高安全性的要求。
关键词:改进型Twofish算法;加/解密芯片;现场可编程门阵列;伪随机数发生器

DES算法是最早为人们采用的密码标准。然而其密钥长度仅为56 bit,已经不能满足安全性的要求。为此,美国国家标准技术局(NIST)于1997年公开征求新一代的高级加密标准AES算法以取代DES算法。1999年,NIST公布了第2回合的评选结果,共有5种候选算法,分别是MARS,RC6,Rijndael,Serpent和Twofish。2000年,NIST公布Rijndael成为AES,但这并不代表其他4种算法的安全性不足。就Twofish而言,它的安全度在5种算法中位居第2名[1],在硬件实现上所占用的晶片面积是最小的,所以,市场上仍有许多产品在使用Twofish算法,它依然是优秀且安全的加密系统。本文主要对基于FPGA的改进型Twofish加/解密芯片的设计进行了研究,并由ModelSim进行了仿真分析,最后对实际的硬件系统进行了效能分析。

1 改进Twofish的原理

传统Twofish算法的分组长度为128 bit,密钥长度可以为128 bit,192 bit或256 bit。128 bit的明文首先被分成4个32 bit字,与4个子密钥进行异或,构成算法的前白步化,然后进行F函数变换。F函数主要由2个h-function、PHT以及232加法器构成。h-function包含了4个宽度为8 bit的key-dependent S-boxes和一个MDS矩阵。最后经过16轮处理,再与4个子密钥异或,完成算法的后白步化。由于Twofish算法是Feistel结构,因此解密过程与加密过程的不同之处只在于F函数的微调以及子密钥的逆序使用。

改进的Twofish与原型最大的差异在于每轮中S-boxes的使用不再是固定不变的,设计中选择了像Rijndael这样高非线性与均匀差异分布的S-boxes,从中任意挑选16组使用。并且加入一个基于线性反馈移位寄存器的伪随机数发生器来决定每轮中所使用的S-boxes。

1.1类Rijndael S-boxes的选择

Rijndael算法的字节代替是输入字节做乘法逆运算,再进行仿射变换,最后得到输出字节[2]。S-boxes的选择准则有:0-1均衡,高度非线性,均匀差异分布,严格雪崩效应,低自相关以及线性结构等。根据这些准则,本文选定类Rijndael的S-boxes,通过改变其不可约多项式、线性转移多项式和平移多项式随机产生8×8的S-boxes,再从中任选16组使用。
1.2伪随机数发生器

在传统的Twofish中,h-function中的4组S-box是与密钥相关的,它通过在运算过程中加入子密钥S达到打乱输出字节的效果。但是在加/解密的16轮运算中,由于子密钥S是一个固定的值,因此S-box的结构对同一个使用者而言是固定不变的。在改进的Twofish算法中加入伪随机数发生器的目的是通过产生一连串随机数序列来挑选每轮所使用的S-box。它由Z序列生成器和A序列生成器组成,并由它们共同作用生成伪随机数。

每轮加/解密运算所需要的S-box数量为8,而S-box总数为16,因此,需要4位决定一个S-box的值。一轮运算需要使用的码元为4×8=32,16轮运算所需要的码元为512 bit。这种新型密钥相关系统的安全性建立在伪随机数序列的选取上。破解者无法猜测加密时所选用的S-box,在伪随机数的条件下推测一个S-box的几率为1/24,完全猜中一轮运算中所使用的S-box的几率为1/232,而完整破解16轮加密过程的几率为1/2512

详情点击下载>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.