AES算法的快速硬件设计与实现
时间:11-09
来源:互联网
点击:
信息安全是计算机科学技术的热点研究领域,数据加密则是信息安全的重要手段。随着可编程技术的飞速发展及高速集成电路的不断出现,采用FPGA实现加密算法已受到越来越广泛的关注和重视。与传统的软件加密方法相比,硬件加密的优点是:(1)安全性好,不易被攻击;(2)计算速度快,效率高;(3)成本低,性能可靠。加密系统中体现数据传输速度的一个重要性能指标是数据吞吐量,计算公式为:(数据长度M/时钟个数N)×时钟频率F。提高数据吞吐量是改善加密系统性能的关键,也是加密算法硬件实现技术的重要内容。
AES算法作为DES算法的替代者应用非常广泛,其硬件实现方法已有不少讨论,主要是通过提高算法频率来提高吞吐量。但是在实际运行中,为了保证整个加密系统的稳定性,通常全局时钟频率较低,不可能达到算法的仿真频率,如PCI接口电路时钟频率只有33MHz,因此实际数据吞吐量仍然较低。本文根据AES算法的结构特点及硬件系统的特点,提出一种快速的AES算法IP核设计方法。该方法采用优化设计轮函数和流水线技术,在较低的系统时钟频率下,通过减少分组运算时钟数目来获得更高的吞吐量和更快的传输速度。
1 AES算法
AES是美国国家标准与技术研究所(NIST)提出的高级加密标准。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算法的详细描述请参见参考文献。
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)上的四次多项式矩阵乘法,输入列向量(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}});
经过整理,简化了Mix Column实现过程,节约了硬件资源。Add Round Key只是简单的异或,占用资源较少。优化设计后轮函数的最大延时仅8.6ns,为提高整个设计的时钟频率提供了保障。
AES算法作为DES算法的替代者应用非常广泛,其硬件实现方法已有不少讨论,主要是通过提高算法频率来提高吞吐量。但是在实际运行中,为了保证整个加密系统的稳定性,通常全局时钟频率较低,不可能达到算法的仿真频率,如PCI接口电路时钟频率只有33MHz,因此实际数据吞吐量仍然较低。本文根据AES算法的结构特点及硬件系统的特点,提出一种快速的AES算法IP核设计方法。该方法采用优化设计轮函数和流水线技术,在较低的系统时钟频率下,通过减少分组运算时钟数目来获得更高的吞吐量和更快的传输速度。
1 AES算法
AES是美国国家标准与技术研究所(NIST)提出的高级加密标准。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算法的详细描述请参见参考文献。
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)上的四次多项式矩阵乘法,输入列向量(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}});
经过整理,简化了Mix Column实现过程,节约了硬件资源。Add Round Key只是简单的异或,占用资源较少。优化设计后轮函数的最大延时仅8.6ns,为提高整个设计的时钟频率提供了保障。
集成电路 FPGA 仿真 电路 Altera Quartus Verilog 总线 相关文章:
- 周立功:如何兼顾学习ARM与FPGA(05-23)
- 初学者如何学习FPGA(08-06)
- 为何、如何学习FPGA(05-23)
- FPGA 重复配置和测试的实现(08-14)
- 适用于消费性市场的nano FPGA技术(09-27)
- 赛灵思“授之以渔”理论:危机中如何巧降成本(06-04)