基于A结E构S 共享和多级流水线的加密算法的研究
2012-08-22王群
王 群
(青岛科技大学信息学院 山东 青岛 266061)
2000年10月,美国国家标准技术局(NIST)选择了两位比利时研究者Daemen和Rijmen提出的Rijndael算法,即AES(高级加密标准)。它具有128bits的分组长度,三种可选的密钥长度,即128bits、196bits和 256bits。
AES可以抵抗所有设计中已知的攻击方法,具有较高的安全强度。文中阐述了AES算法的原理,并对其加解密模块进行优化,提出了一种基于结构共享和多级流水线的AES算法实现方案,并重点阐述了实现过程。
1 AES算法介绍
AES算法是一种迭代分组算法,采用128bits的分组长度,三种可选密钥长度128bits,192bits和256bits。对于不同的密钥长度,所需的加解密轮数不同。本文主要讨论分组长度和密钥长度128bits的情况。
整个加密过程包括11轮迭代。其中Round0只有Add Round Key操作。Round1-Round9具有完全相同的操作, 依次经过 SubBytes、Shift Rows、Mix Columns和Add Round Key四种操作。Round10只包括 SubBytes、Shift Rows和 Add Round Key 三种操作。解密过程是加密过程的逆过程。关于AES算法的详细描述见参考文献[1]。
2 加解密模块的结构共享
2.1 字节变换(SubBytes)
当前实现字节变化的方法有两种:一是有限域运算的方法;一是查找表的方法。前者运算复杂,后者容易实现,并且运行速度更快,但是硬件开销较大。考虑到可以利用FPGA自带的Block RAM资源,在设计中采用了查找表的实现方式。
如果将用于加密的Sbox表和用于解密的Inverse Sbox表同时存放在FPGA的Block RAM中,会造成RAM资源的大量消耗。为降低硬件资源的消耗,设计中采用重新配置的方法。加密时一次性加载16个Sbox表,而在解密时,对存放这些Sbox表的RAM重新写入Inverse Sbox表的数据。
2.2 行移位(Shift Rows)
本文采用128bits并行算法,行移位变换可按照移位的方向和字节数连线,几乎不占用硬件资源和产生延时,然后通过选通器选择正向或逆向行移位变换。……
