AES加密算法FPGA实现
2022-08-28甘志超
甘志超
(中国刑事警察学院 公安信息技术与情报学院,辽宁 沈阳 110168)
0 引 言
近年来,科技的飞速发展极大地改变了人们的生产和生活方式,也使我们个人或集体的信息越来越公开化。几乎生活中的每一个环节都面临着信息数据安全性的重大挑战,在确保信息数据安全这一要求不断提高的背景下,对信息数据进行加密和解密的技术及算法正在迅猛发展。
加密的实现可以通过不同的方式来完成,硬件和软件皆可实现加密算法,而通过硬件来实现加密同样能够保证信息的处理速度和安全性。基于FPGA 平台的AES 加密算法的实现得益于FPGA 具有消耗内存空间小、方便灵活、可重新配置资源等特点,通过算法可以实现加密,通过硬件亦可实现加密,并且相较于基于软件的AES 加密算法实现,基于硬件的AES加密算法实现也不失为一种可行且高效的方式。
本AES 加密算法的设计采用FPGA 黑金ALINX 开发板,使用ModelSim-SE 64-10.1c 软件对该系统的顶层模块进行了RTL 功能仿真,得到了功能波形图以验证其正确性,利用Quartus II 17.1 软件对整个系统进行逻辑综合后将sof 文件下载到FPGA 开发板上,并使用串口调试助手通过串口通信实现该系统的功能,通过将PC 串口调试助手显示屏上显示的数据与测试数据做比较,以此来验证该系统设计的可行性。
1 相关研究工作
当前,对AES 算法的研究主要体现在对其安全性、灵活性、高效性这三方面的研究。
自Rijndael 算法提出以来,世界各国为数众多的密码机构和专家便对其展开持续不断的猛烈攻击,其中,最著名的当属该算法设计者(比利时密码专家Vincent Rijmen 和Joan Daemen)所提出的Square 攻击。但是,对Rijndael 算法的攻击截至目前都没有成功。
早在AES 加密算法还未着手设计的时候,方便灵活、安全可靠便已被设定为其设计的基础与目标,最后结果也证明,Rijndael算法在通用处理器上能够实现很好的性能。但是,后面的研究渐渐表明,AES 算法在FPGA 上能够获得更加优越的性能。
2 AES 加密系统的开发过程
在熟悉开发环境之后,开始构思系统的结构设计,采用Verilog 硬件描述语言结合逻辑电路的方式完成系统构建。在完成系统的构建之后,运用ModelSim SE-64 10.1c 仿真对其核心的加密功能进行仿真,对波形进行验证之后,我们运用Quartus II 17.1 软件对工程代码进行编译和逻辑综合,再将生成的.sof 文件下载到FPGA 开发板上,通过串口调试助手对其进行功能验证。
2.1 AES 加密算法结构
密钥和明文的位数不同,AES 加密算法迭代的轮数也不同。本文采用128 比特的加密方案,下文将具体介绍128 位的AES 加密算法,最后的实现结果是输入128 b 的密钥和明文,一共经历10 轮的迭代加密计算,输出经过加密的128 bit 密文。
AES 加密的过程包括加密核(包括各种转换)和密钥扩展过程,加密核的各种转换计算包含S 盒变换、行变换、列变换和密钥异或的变换过程,在128 比特的AES 加密过程中一共需要经过10 轮的循环,下一轮的循环则是在上一轮循环的基础上进行迭代。循环往复地对上一轮的输出进行字节替换(采用一个S 盒进行替换)、行移位变换、列混合变换以及密钥异或等变换,以产生本轮的输出。密钥扩展过程为每一轮的轮变换供给变换所需的128 比特轮密钥。128 比特的AES 加密算法进行一次完整的计算需要经过10 轮的变换,最终产生我们所需的密文。AES 加密算法的流程如图1所示。
图1 算法流程图
该算法的字节替换用一个S 盒的变换来表示,128 比特的AES 加密算法需要将明文排列组合成一个4×4 的矩阵。AES 加密算法的字节替换是用一个S 盒实现的,其变换过程就是一个4×4 的矩阵经过字节替换(S 盒变换)之后产生一个新的4×4 矩阵。其本质是实现一个数学上的代数转化。S 盒的原理是:S 盒是一个16×16 的矩阵,用明文所生成矩阵的每一个元素来指定S 盒的地址,一个字节是八位长度的二进制,S 盒的行用一个字节的前四位表示,列用一个字节的后四位表示(一个字节有8 个数据位),将四位数据所代表的十六进制数据作为S 盒元素的行列具体所在位置,由行和列构成S 盒位置的元素取代了原明文生成的矩阵中相应位置上的元素。本设计采用组合逻辑电路的方式来实现S 盒变换,并采用16 个S 盒变换函数对字节替换进行并行操作。
在进行完S 盒变换操作之后,接下来的操作便是行移位变换。具体的操作就是:对于一个经过S 盒变换操作之后的4×4 矩阵来说,首行的数据保持不动,对次行的数据整体向左移动一位,将第三行的数据整体向左移动两位,将第四行(最后一行)的数据整体向左移动三位。例如进行行移位操作之前矩阵的第四行为(1,2,3,4),移动三位之后的数据为(2,3,4,1)。
完成行移位变换之后需要进行列混合变换,具体的操作就是以矩阵中的列为单位与固定的矩阵(用十六进制表示)相乘,具体的变换为:
用数学的多项式表示是:()=‘03'+‘01'+ ‘01'+‘02'
经过列混合变换之后,矩阵中的所有字节基本上都得到了充分的混合。列混合变换通过组合逻辑中的移位与异或的操作来实现,同时加强了加密的安全性。
2.2 AES 加密算法系统结构
本设计采用的是基于FPGA 的128 比特AES 加密算法,可以同时对多个数据块进行计算,一个时钟周期只完成一轮加密,该设计总共需要1 轮的初始密钥扩展、10 轮的运算和另外一个时钟周期输出最后得到的密文,由于采用的是内部流水线结构,所以一个完整的AES 加密过程所需的时钟周期更长,总共需要12个时钟周期(从开始到最后输出密文),我们可以通过提高时钟频率的方式来弥补现阶段的不足。
本文设计的AES 加密系统包括以下两个模块:
(1)串口通信输入模块。通过串口通信接收PC 端输入的128 位密钥和明文,并对所接收的128 位数据进行串行数据向并行数据的转换。
(2)AES 加密模块。该模块的功能是实现密钥的扩展过程和加密运算。
(3)串口通信输出模块。用于暂存加密单元产生的密文,进行并行数据向串行数据的转换并通过串口通信传输到PC 端。
AES 加密系统RTL 逻辑模块结构图如图2所示。
图2 AES 加密系统RTL 逻辑模块结构图
顶层模块输入输出端口的定义如表1所示。
表1 输入输出端定义
该系统功能实现的过程为:定义好时钟、复位、控制信号,运用串口调试工具通过串口通信在电脑PC 端口输入128 位待加密的明文和初始密钥,设计了一个标志信号表示输入完成的状态,标志信号有效时,串口通信输入模块读取电脑PC 端传送过来的明文和初始密钥,AES 加密核模块开始进行密钥扩展和加密的工作,经过10 轮循环(一个完整的循环变换)完成加密之后,经过加密的密文数据将通过串口通信输出模块(通过串口通信)返回到电脑PC 端上的串口调试工具进行显示。整个设计的核心便是AES 加密核的设计,同时FPGA 与PC 的串口通信也是整个设计中至关重要的一部分,决定着数据在PC 与FPGA 之间能否正常通信。
该系统设计的算法代码分为顶层模块和子模块,顶层模块为整个系统的架构,子模块为实现各个分支功能的模块,AES 加密系统顶层模块代码程序存放于AES_top,串口通信输入模块代码程序存放于UART_RX,串口通信输出模块代码程序存放于UART_TX,加密核模块存放于aes_cipher_top,加密模块调用了S 盒变换、列异或变换和密钥扩展等子模块,被调用的各种变换的代码程序另外储存。
3 结果
在进行加密模块功能仿真的时候,采用的测试数据为:明文为9798c4640bad75c7c3227db910174e72;密钥为00000 000000000000000000000000000;输出的密文为a9a1631bf49 96954ebc093957b234589。(该数据由AES 高级加密标准的资料所提供)
AES 系统加密核的功能仿真波形如图3所示。
图3 加密核的功能仿真波形图
得到输出结果之后,为了验证输出结果的正确性,我们需要获取经过AES 加密计算出的数据,于是采用AES 加密的软件Rijindael.exe 得到所需的数据进行数据比对,以验证本文设计算法的正确性与可行性,如图4所示。
图4 实测数据验证图
通过对比输出结果和测试数据,得出所设计的AES 加密系统得出的数据与测试数据相一致,基于FPGA 的AES加密算法的功能实现准确无误。
4 结 论
本文主要介绍了基于FPGA 平台的AES 加密算法的实现,运用Verilog 硬件描述语言结合逻辑电路的方式来完成系统构建。信息技术的进步和发展超乎人们的想象,而信息的安全性和秘密性自然也受到人们的高度重视,应用范围不仅仅局限于民生领域,更与国家的政治、经济和军事安全联系紧密。而对于信息加密,自20世纪以来诸多学者已经提出不少加密方法,AES 加密算法一直以来都表现突出,受到反复的攻击仍然屹立不倒。AES 加密算法的实际应用场景十分广阔,为信息安全提供了重大保障,为信息安全的发展奠定了坚实的基础。