信息安全是计算机科学技术的热点研究领域,数据加密则是信息安全的重要手段。随着可编程技术的飞速发展及高速集成电路的不断出现,采用FPGA实现加密算法已受到越来越广泛的关注和重视[1][2]。与传统的软件加密方法相比,硬件加密的优点是:(1)安全性好,不易被攻击;(2)计算速度快,效率高;(3)成本低,性能可靠。加密系统中体现数据传输速度的一个重要性能指标是数据吞吐量,计算公式为:(数据长度M/时钟个数N)×时钟频率F。提高数据吞吐量是改善加密系统性能的关键,也是加密算法硬件实现技术的重要内容。
AES算法作为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个寄存器资源,但这样做更易于实现算法的流水线操作,对提高整体性能有很大帮助。
2.3 轮函数优化设计
优化轮函数设计,减少轮函数的延时,是提高算法时钟频率的关键。本文通过对轮函数中Substitute Byte、Shift Row和Mix Column变换进行优化来提高 算法的时钟频率。
轮函数中Substitute Byte(S-Box)是对一个字节的非线性操作。使用Verilog HDL描述S-Box通常有两种方法:(1)使用case语句进行行为描述,综合后占用LE资源;(2)使用FPGA中的存储器资源。AES算法的S- Box是一个8入8出的查找表,如果用LE实现,则在Cyclone芯片中每个S-Box需要208个LE,AES算法的并行运算需要32个S-Box,共6656个LE,不但占用大量的硬件资源,而且使结构复杂,增加了延时。而用存储器资源实现S-Box,不需占用其他硬件资源,并且可以减少延时,是个很好的选择。本文即采用这种方法,并充分利用器件资源:Cyclone器件中每个memory block可以设计为一个256×16bit的ROM,将加/解密过程的S-Box设计在同一个ROM内,加密S-Box内容置于ROM的前8bit,解密S-Box内容置于ROM的后8bit,这样可以使memory block的数目比分别使用ROM设计时减少一半,大幅提高了资源利用率。Shift Row的硬件实现非常简单,只是连线操作。为了进一步降低由于连线引起的延时,将Substitute Byte与Shift Row合为一体,使两部分延时仅取决于S-Box的ROM。Mix Column变换被定义为系数在有限域GF(28)上的四次多项式矩阵乘法[4],输入列向量(X0,X1,X2,X3),输出列向量(Y0,Y1,Y2,Y3),加密过程是在GF(28)上乘以01、02、03,解密过程相对复杂,是在GF(28)上乘以09、0E、0B、0D。为了简化设计以便于FPGA实现,可将矩阵乘法展开并整理,得到以下结果:
加密Mix Column:
解密Mix Column:
式中a是对一个字节的变换函数,其Verilog HDL描述为:
a={b[6:0],1′b0}^(8′h1b&{8{b[7]}});
经过整理,简化了Mix Column实现过程,节约了硬件资源。Add Round Key只是简单的异或,占用资源较少。优化设计后轮函数的最大延时仅8.6ns,为提高整个设计的时钟频率提供了保障。
3 AES算法的快速实现
3.1 AES算法的硬件实现方式
AES算法的轮操作特点使得其硬件实现可以有多种方式[3]:(1) 串行运算:轮函数用组合逻辑实现,10轮迭代过程直接相连,前一轮结果直接作为下一轮的输入,1个时钟周期内完成一个分组运算,吞吐量可以达到最佳状态。 (2)基本迭代:采用反馈模式,所有迭代只用一个轮函数,10个时钟周期完成一个分组运算。(3)轮内流水线:在每一个轮函数中插入寄存器,将一轮运算分成多个操作段,每个时钟完成一个操作段,这种方式被很多人讨论并使用,其优点是可以提高算法运行的时钟频率。
在以上几种AES算法实现方式中,方式(1)由于10个轮函数同时工作,不但需要大量的寄存器资源和组合逻辑资源的支持,而且还增加了延时,一般的FPGA芯片难以满足容量的要求,时钟频率也非常低,所以这种方法不适合加密算法的硬件实现。方式(2)实现简单,资源占用较少,但每个分组运算时间比较长,吞吐量仍然相对较低。在方式 (3)中,由于加密算法的轮操作特点使得轮内各级流水部件不能同时执行,增加了算法运行的时钟数目。轮内流水线级数越多,时钟数目也越多。虽然算法仿真频率可以达到很高,但由于受硬件加密系统全局时钟的影响,吞吐量并没有明显提高。
在对以上算法的几种实现方式进行分析后,本文基于流水线技术,提出一种更快速的AES算法的FPGA实现方案。该方案即使在全局时钟频率较低的情况下,也能获得很高的吞吐量。
3.2 流水线设计
AES算法结构简单,只需要逻辑运算和查找表运算。笔者通过优化设计轮函数,使得基本迭代方式下的时钟频率远高于PCI接口的时钟频率33MHz。本文在满足算法时钟频率的基础上,通过降低算法分组数据的处理时间来提高吞吐量。具体做法是:采用两级轮外流水线,将AES算法的10轮迭代过程分为前后两个操作段,每个操作段可作为一级流水线,在操作段内部,每轮之间以反馈(FB)方式完成5轮基本迭代,前一个操作段结束后,将结果直接送入第二个操作段,同时去处理下一个分组数据,两个操作段互不影响,并行执行。考虑到实际应用中数据总线宽度(如PCI总线)通常为32位,这里将AES算法IP核的数据宽度设置为32位,4个时钟输入/输出一个分组数据。为了与每一级流水线5轮迭代过程相匹配,在输入/输出分组数据的第5n个时钟内执行一轮空操作,使得输入明文数据、输出密文结果、第一级流水线和第二级流水线四步操作同时执行,从而实现图3所示的流水线过程。在得到第一个分组结果后 ,每5个时钟就会产生一个分组结果,从外部看起来,完成一个分组仅需要5个时钟。
3.3 实验结果与性能分析
将设计在QuartusⅡ4.2软件中综合,仿真最高频率为78.38MHz,完全可以满足较低全局时钟频率的要求。整个系统设计采用33MHz时钟,实验测试结果表明,吞吐量已达到810Mbps。如果提高全局时钟频率,则吞吐量会超过1Gbps。
根据AES算法的特点及硬件加密系统的特点,给出了AES算法IP核的快速硬件设计方案。采用流水线技术和优化设计,在较低频率下,可以获得很高数据吞吐量,使加密算法的FPGA实现过程不再是传输速度的瓶颈。整个设计具有很强的实用性,运行稳定,且效果良好。对于AES算法分组长度和密钥长度为 192bit和256bit的情况,由于分组长度不同,执行轮数有所增加。要实现流水线操作并在资源使用和吞吐量方面达到较好的效果,还需要进一步优化设计,这也是今后研究的方向。