摘要:介绍AES 算法的原理以及基于FPGA 的高速实现。结合算法和FPGA 的特点,采用查表法优化处理了字节代换运算、列混合运算。同时,为了提高系统工作速度,在设计中应用了内外结合的流水线技术,并应用Altera 公司的开发工具及芯片进行实际开发。
1 引言
随着信息技术的迅速发展,信息已成为当今社会的一种重要资源。但当人们享受信息资源带来的巨大便利的同时,也承受着信息被篡改、泄漏、伪造的威胁,安全问题日益严重。安全风险制约着信息的有效使用,信息安全对现代社会健康有序的发展,保障国家安全和社会稳定有着重要作用。加密技术是信息安全技术的,是保证信息资源安全的关键。
加密标准(Advanced Encryption STandard, AES)作为传统对称加密算法标准DES 的替代者,由美国国家标准与技术研究所(NIST)于1997 年提出征集该算法的公告,2000 年终选定了Rijndael 算法,并于2001 年正式发布了AES标准[1]。Rijndael 算法本质上是一种对称分组密码体制,该算法汇聚了安全性能、效率、可实现性和灵活性等优点,已经成为工业界、银行业、政府部门的事实上的密码标准[2]。
随着网络传输速度的快速提升,业界对算法的执行速度的要求也越来越高,基于软件的密码算法便显得性能不足,需要采用硬件加密的方式。另外,用硬件实现加密算法具有较更高的物理安全性。而FPGA 芯片兼有硬件的安全性和高速性以及软件的灵活性和易维护性,从而成为研究和实现AES 算法的理想硬件平台。
2 AES 加密算法简介
AES 是一种分组迭代密码,明文分组长度固定为128 b,而且仅支持128,196 或256b 的密钥长度,本文着重对密钥长度为128 b 的情况进行讨论。AES 加密算法的实现流程如图1 所示,将输入的明文填入一个4X4 的矩阵(16 进制),并将其称为状态矩阵。算法的前round-1 轮包含四种变换,分别是:字节替换、轮密钥加、行移位、列混合。对于每一轮,都有对应的子密钥。子密钥由初始密钥通过密钥扩展得到。一轮由字节替换、行移位和轮密钥加组成。AES 解密过程为上述过程的逆过程。
字节替换:字节替换(SubBytes)是一个基于S 盒的非线性置换,它通过一个简单的查表操作将输入或中间状态的每一个字节映射为另一个字节。查表的方法为:将输入字节的高4 位作为S 盒的行值,低4 位作为列值,然后取出S 盒中对应行和列的元素作为输出。
行移位:行移位(ShiftRows)完成基于行的循环移位操作。具体的操作为:第0 行不动,第1 行循环左移1 个字节,第2 行循环左移2 个字节,第3 行循环左移3 个字节。
列混合:列混合(MixColumns)是对状态矩阵中的列做线性变换,进行四字节乘运算。具体定义如下:将状态矩阵的列看作有限域G(28)上的多项式,并在模x4+1 下与一个给定的多项式c(x)相乘,其中c(x)=03x3+01x2+01x+02。假设该步变换状态的一列输入为a,输出为b,即b(x)=c(x)·a(x)mod(x4+1)。
密钥加:密钥加(AddRoundKey)是将轮密钥的各字节和状态矩阵中相应位置的字节分别模2 加,实现状态和密钥的混合。轮密钥的长度和状态的长度是一样的。该步骤的逆变换是其自身[3]。
3 算法实现的优化
3.1 对算法本身的优化
用查找表和组合逻辑的方式代替了复杂的乘法运算[3],大大减少了芯片资源的占用,提高了加、解密步骤的执行速度。字节替换是 Rijndael 密码中的非线性变换。该步骤是一种非线性面向字节的变换,是将一个8 位二进制数据转换为另一个不同的8 位二进制数据,这里要求一一对应,并且替换结果不能超出8 位,可以通过构造可逆的S-盒来实现。
由于有限域GF(2)中总共有256 个元素,则可预先通过一定的算法计算出每个元素的逆元,再进行对应的仿射变换求出有限域GF(28)中每个元素经过字节代换后所对应的值,并将这个计算出的替代值写入一个16×16 字节的置换表中相应的位置作为步骤SubBytes 的S-盒。具体实现时,根据状态的每一个字节的数值检索出S-盒中对应的替代值,即通过查表即可实现该步变换,避免复杂的乘法运算[4]。
对于列混合变换,由于GF(28)有限域中的每一个元素都能够写成02 的不同幂次的和,因此,乘以任何常数的乘法都可以通过反复的乘以02 和异或运算来实现。可将矩阵乘法中的常数因子分解为 02 的不同幂次和,矩阵乘法转换为与02 的乘法和异或运算。将GF(28)域中的每一个元素与02 的乘积存储在一张16×16 字节查找表中,记作xtime(·)。所以,该步骤可以通过查表和异或运算实现。
3.2 加密模块结构的优化
加密模块结构直接影响 AES 算法的加解密速度,AES 算法加解密系统的速度是指单位时间内完成的加密(解密)的比特数,也称为吞吐量(throughput),单位为兆比特每秒(Mbit/s)。其基本结构可分为以下三种:外部流水线结构、内部流水线结构和循环展开结构[5]。其中循环展开结构的速度是以芯片面积增加为代价的,而外部流水线结构和内部流水线结构在反馈模式中速度受到限制,面积的增加并不能增加速度,所以这两种结构只适用于非反馈模式。内部流水线结构的速度在非反馈模式下随着内部流水线站数的增加而增加,但面积的相应增长极小,具有很好的速度面积比。但在反馈模式下其速度面积比不具优势。因此,在外部应用流水线结构设计的同时,在内部划分流水线站,可以在外部流水线结构的速度基础上进一步提高速度,而面积的增长极小,从而提高吞吐量和速度面积比。基于以上分析,在本设计中采取了非反馈模式和内外混合的流水线结构。
4 硬件测试及应用
本设计采用 ALTERA 公司的开发工具QuartusII,以VerilogHDL 为实现语言,在综合仿真并测试无误后,至ALTERA 公司的Cyclone 系列芯片上。该系列芯片具有相当的性价比,非常适合于大批量、低成本的应用本设计方案。本设计既可以作为单独的专用加密芯片完成加密任务,也可以嵌入到复杂的数字系统中。具有非常广阔的应用市场。
[1]. NIST datasheet https://www.dzsc.com/datasheet/NIST_2562226.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。