AES算法的快速硬件设计与实现
信息安全是计算机科学技术的热点研究领域,数据加密则是信息安全的重要手段。随着可编程技术的飞速发展及高速集成电路的不断出现,采用FPGA实现加密算法已受到越来越广泛的关注和重视[1][2]。与传统的软件加密方法相比,硬件加密的优点是:(1)安全性好,不易被攻击;(2)计算速度快,效率高;(3)成本低,性能可靠。加密系统中体现数据传输速度的一个重要性能指标是数据吞吐量,计算公式为:(数据长度M/时钟个数N)×时钟频率F。提高数据吞吐量是改善加密系统性能的关键,也是加密算法硬件实现技术的重要内容。
本文引用地址:http://www.amcfsurvey.com/article/85545.htmAES算法作为DES算法的替代者应用非常广泛,其硬件实现方法已有不少讨论,主要是通过提高算法频率来提高吞吐量。但是在实际运行中,为了保证整个加密系统的稳定性,通常全局时钟频率较低,不可能达到算法的仿真频率,如PCI接口电路时钟频率只有33MHz,因此实际数据吞吐量仍然较低。本文根据AES算法的结构特点及硬件系统的特点,提出一种快速的AES算法IP核设计方法。该方法采用优化设计轮函数和流水线技术,在较低的系统时钟频率下,通过减少分组运算时钟数目来获得更高的吞吐量和更快的传输速度。
1 AES算法
AES是美国国家标准与技术研究所(NIST)提出的高级加密标准[4]。2000 年10月,NIST宣布将比利时人Joan Daemen和Vicent Rijinen提交的Rijndael算法作为高级加密标准(AES)。该算法设计简单,与公钥密码算法不同,没有复杂的乘法运算,易于实现,灵活性强,轮函数良好的并行特性有利于硬件设计与实现。AES算法是一种迭代型分组密码,其分组长度和密钥长度均可变,各自可以独立指定为128bit、 192bit、256bit。本文主要讨论分组长度和密钥长度为128bit的情况。
AES算法是将输入的明文(或密文)分成16个字节,在第一个Add Round Keys变换后进入10轮迭代。前9轮完全相同,依次经过字节代替(Substitute Bytes)、行移位(Shift Rows)、列混合(Mix Columns)、轮密钥加(Add Round Keys),最后一轮则跳过了Mix Column。解密过程与加密过程类似,但执行顺序与描述内容有所不同,因此AES算法的加解密过程需要分别实现。图1给出了AES算法的加解密过程。关于AES算法的详细描述请参见参考文献[4]。
2 AES算法优化设计
2.1 硬件选择
Cyclone器件是Altera公司推出的成本最低的SRAM工艺FPGA,容量为2 910~20 060个逻辑单元(LE)和多达288kbit的M4K memory block。每个LE都有一个四输入的LUT查找表、可编程寄存器和具有进位选择能力的进位链,可实现任何四输入变量的函数,能够进行大量逻辑运算,非常适合作为加密算法的硬件载体。设计中所使用的开发工具是QuartusII4.2,FPGA芯片选择Cyclone器件的EP1C12Q240C8,基于 Verilog HDL语言实现。
2.2 密钥扩展单元优化设计
密钥扩展是将初始密钥作为种子密钥,经过字节代换、字节移位、轮常数计算、字异或等过程,计算产生10轮迭代子密钥。有文献提出计算密钥时密钥扩展和加密过程同步执行,这样做会节约 FPGA的存储器资源。但笔者认为在算法运行过程中,扩展密钥进程始终运行会增加FPGA芯片的动态功耗。另外,AES算法解密运算是从最后一轮子密钥开始,只有扩展出所有子密钥才能启动解密运算,因此制约了解密过程的实现。通常情况下初始密钥不会频繁改变,加/解密多包数据时可共享密钥扩展结果,同时由于Cyclone器件存储器资源丰富,为存放子密钥提供了足够的空间。因此本文采用更普遍的做法,将所有子密钥扩展后保存在RAM中,使用时依次从RAM 中读取。这种方式不受加解密实现过程的限制,灵活性强,非常适合于加密算法的FPGA实现。
从RAM中读取子密钥需要时间,为了避免算法第一个Add Round Key过程带来的延时,可以将第一组子密钥(初始密钥)和最后一组子密钥(解密过程第一组子密钥)在写入RAM的同时,分别保存在两组寄存器中。如图2所示,加/解密时直接利用寄存器结果进入算法第一轮迭代,保证算法在10个时钟内完成10轮迭代,从而减少Add Round Key的时间。
保存密钥虽然多占用了约256个寄存器资源,但这样做更易于实现算法的流水线操作,对提高整体性能有很大帮助。
评论