论文部分内容阅读
中图分类号:TN918.4 文献标识码:A
摘要:在逻辑资源少的现场可编程门阵列(FPGA)上实现高级数据加密标准(AES) 算法设计。
关键词:高级加密标准;现场可编程逻辑阵列;低成本;并行总线接口
引言
密码学是保障信息安全的核心技术,应用涉及军事、国防、商贸及人们日常生活的各个方面。2001年美国标准技术研究所决定用AES算法逐渐取代日益不安全的56 bit密钥长度的 数据加密标准(DES)算法。AES 算法是迭代分组密码算法,分组长度为128 bit,而密钥长度可为128 bit、192 bit、256 bit,其对应不同的密钥长度相应的迭代循环次数为 10轮、12轮、14 轮。现在实现的是128 bit的AES算法。
一种AES算法实现是采用轮展开的流水线结构,吞吐量很大可达到 10 Gb/s 量级,但消耗大量的逻辑面积。考虑在资源少的FPGA上实现AES算法,能满足低端应用的加、解密速度一般不超过100 Mb/s的需求。现设计采用顺序结构,多轮加密共用一个轮运算结构,加密模块和解密模块共用一个密钥扩展模块,能保持较高加解密速率,同时节省了逻辑面积,在50 MHz时钟下加解密速率可达530 Mb/s。
1、AES 算法描述
AES算法中的字节表示为有限域 GF (28)上的元素,并在有限域上定义加法和乘法两种运算,运算的基本单位是字节和双字(4个字节)。AES算法将128位的中间结果和密钥都分成16个字节,构成4×4以字节为元素的状态矩阵,AES在加解密过程中就是以状态矩阵为操作对象的。加密算法中每一次轮操作都由字节替换、行移位、列混淆和轮密钥加这四个函数组成,最后一次轮操作不含列混淆操作。
2、在 FPGA 上实现 AES 算法
2.1 顶层结构
该设计的顶层结构由控制模块、加密模块、解密模块、密钥扩展模块、随机存储器(RAM)和FIFO组成。接口采用16位并行数据总线结构。加密数据流向为:明文数据通过数据总线写入16位入128位出的FIFO缓存;由控制模块启动AES加密模块进行一次加密运算; 运算完成输出128bit密文存入128位入16位出的 FIFO中。解密过程与之相同。加密模块和解密模块完全独立,保证模块能同时进行加密和解密运算,以满足快速双向保密通信的需求。
2.2 加解密部分设计
2.2.1 加密模块
由于输入8次16位数据才能提供一个128 bit明文,这一过程至少需要8个时钟,因此采用逻辑面积较大的多轮展开流水线结构方式意义不大。该设计采用多轮运算复用一个轮操作结构的顺序方式。
轮运算包括轮密钥加、字节替换、行移位和列混淆 4 个部分。其中,轮密钥加只是轮数据与轮密钥进行异或运算,结构比较简单;行移位也只是简单的逻辑连线,几乎不产生时延并且几乎不耗逻辑资源。
字节替换如果采用 GF(28 )模乘求逆运算[4]实现,则逻辑延时较长,速度较慢。为加快速度,采用时延小的基于只读存储器(ROM)查找方式的S盒结构,即输入8bit数据作为地址而相应数据输出则为字节替换后的8 bit数据。S盒结构若采用基于块存储的查找表(LUT)来实现,一个轮运算中16个 S盒将占用16×128个 LUT,占用逻辑资源较大。可采用FPGA内部集成的块 RAM来实现 S 盒。
列混淆是系数在有限域 GF(28)上的四次多项式矩阵乘法,输入列向量(X0, X1, X2, X3),输出列向量(Y0, Y1, Y2, Y3),加密过程是在GF(28)上乘以01、02、03、01,解密过程是乘以 09、0E、0B、0D。为了优化用 FPGA 逻辑实现,采用一个xtime函数来实现GF(28)上的乘02运算,对输入的一个字节b做以下变换:xtime = { b[6:0], 1'b0 } ^ ( 8'h1b &{ 8{ b[7]} } )。则列混淆在GF(28)上所有矩阵乘法就可以通过分解成有限个xtime运算和异或运算来实现。
轮密钥加、行移位和列混淆三步运算实现的逻辑资源较少并且逻辑时延较小,可以合并在一个寄存器传输层间实现。
2.2.2 密钥扩展模块
密钥扩展模块设计比较简单,只需要4 个 S盒和一个轮常数字计算模块,外加一些异或运算和逻辑连线即可完成。密钥扩展模块也是一个迭代运算的结构,与加密模块的轮运算同步,即每个时钟计算出一轮加密的密钥。当解密密钥更新时,密钥扩展模块计算出的各轮密钥作为解密的轮密钥,需要按每个时钟存储在 RAM 中,解密运算时从RAM中读取。
2.3 接口设计
模块的外部接口采用了 16 位数据总线的接口。由于输入的加密密钥和解密密钥各 128位,占用地址为128×2/16=16 个。另外,加密需要一个输入明文寄存器和一个输出密文寄存器,解密需要一个输入密文寄存器和一个输出明文寄存器。因此芯片地址数总共 20,即需要 5 位地址线。接口读写时序的设计以 TMS320C5509 型号数字信号处理器(DSP)总线读写时序作为标准。16 位数据线采用双向三态设计。16 位三态口由片选信号 CS 和读使能信号RDE 控制,当 CS 和 RDE 均有效时三态口数值为输出数据寄存器的值以输出数据,否则三态口数值为高阻将数据输入。 3、测试与分析
3.1 加密模块和解密模块功能仿真
用Xilinx ISE Simulator分别对加密模块和解密模块进行信号仿真,仿真图如图1和图2所示。
两图中 text_in[127:0]为输入数据,key[127:0]为密钥,text_in[127:0]为输出数据。在图4和图 5中,明文均为(3243, F6A8, 885A, 308D, 3131, 98A2, E037, 0734 H),密钥均为(2B7E, 1516, 28AE, D2A6, ABF7, 1588, 09CF, 4F3C H),密文均为(3925, 841D, 02DC, 09FB, DC11, 8597, 196A, 0B32 H),证明其加密和解密正确。
图1加密结果信号仿真
图2解密结果信号仿真
3.2 功能测试
将设计的FPGA模块连接到TI的5509的DSP开发板的总线扩展口,FPGA 模块通过 JTAG 线与计算机连接,DSP开发板通过仿真器与计算机连接。通过 C 程序将明文和密钥写入FPGA 模块,加密后读出密文,解密过程与之类似。通过 DSP 测试,结果与 3.1 仿真结果完全一致,证明 AES算法在FPGA 上准确实现。
使用在线调试逻辑分析软件通过JTAG口对FPGA总线接口的信号波形进行采样并显示,地址、数据和控制信号正确。通过加密或解密时连续输出128 bit结果间隔的时钟数可以计算出,在50 MHz时,数据处理能力可达530 Mb/s。
4、结语
所采用的AES算法设计采用16位并行总线接口,能方便的与上层处理器扩展。在算法实现上,采用多轮运算共用一个轮结构的迭代结构,适用于在较少逻辑资源的 FPGA 芯片上实现,满足了较高吞吐率和较小的芯片面积的应用需求,能满足当前各种数据流的加密。算法的实现采用ROM来实现字节替换,同时优化实现列混淆运算。该设计在赛灵思(Xilinx) 公司的xc3s500e芯片上实现,仅占用4230个Slice,其中7222个LUT和1758个触发器,消耗的逻辑资源较少。
作者简介:
蔡亮(1982-)江西南昌人,江西科技学院计算机中心,助教,本科,研究方法:计算机应用。
摘要:在逻辑资源少的现场可编程门阵列(FPGA)上实现高级数据加密标准(AES) 算法设计。
关键词:高级加密标准;现场可编程逻辑阵列;低成本;并行总线接口
引言
密码学是保障信息安全的核心技术,应用涉及军事、国防、商贸及人们日常生活的各个方面。2001年美国标准技术研究所决定用AES算法逐渐取代日益不安全的56 bit密钥长度的 数据加密标准(DES)算法。AES 算法是迭代分组密码算法,分组长度为128 bit,而密钥长度可为128 bit、192 bit、256 bit,其对应不同的密钥长度相应的迭代循环次数为 10轮、12轮、14 轮。现在实现的是128 bit的AES算法。
一种AES算法实现是采用轮展开的流水线结构,吞吐量很大可达到 10 Gb/s 量级,但消耗大量的逻辑面积。考虑在资源少的FPGA上实现AES算法,能满足低端应用的加、解密速度一般不超过100 Mb/s的需求。现设计采用顺序结构,多轮加密共用一个轮运算结构,加密模块和解密模块共用一个密钥扩展模块,能保持较高加解密速率,同时节省了逻辑面积,在50 MHz时钟下加解密速率可达530 Mb/s。
1、AES 算法描述
AES算法中的字节表示为有限域 GF (28)上的元素,并在有限域上定义加法和乘法两种运算,运算的基本单位是字节和双字(4个字节)。AES算法将128位的中间结果和密钥都分成16个字节,构成4×4以字节为元素的状态矩阵,AES在加解密过程中就是以状态矩阵为操作对象的。加密算法中每一次轮操作都由字节替换、行移位、列混淆和轮密钥加这四个函数组成,最后一次轮操作不含列混淆操作。
2、在 FPGA 上实现 AES 算法
2.1 顶层结构
该设计的顶层结构由控制模块、加密模块、解密模块、密钥扩展模块、随机存储器(RAM)和FIFO组成。接口采用16位并行数据总线结构。加密数据流向为:明文数据通过数据总线写入16位入128位出的FIFO缓存;由控制模块启动AES加密模块进行一次加密运算; 运算完成输出128bit密文存入128位入16位出的 FIFO中。解密过程与之相同。加密模块和解密模块完全独立,保证模块能同时进行加密和解密运算,以满足快速双向保密通信的需求。
2.2 加解密部分设计
2.2.1 加密模块
由于输入8次16位数据才能提供一个128 bit明文,这一过程至少需要8个时钟,因此采用逻辑面积较大的多轮展开流水线结构方式意义不大。该设计采用多轮运算复用一个轮操作结构的顺序方式。
轮运算包括轮密钥加、字节替换、行移位和列混淆 4 个部分。其中,轮密钥加只是轮数据与轮密钥进行异或运算,结构比较简单;行移位也只是简单的逻辑连线,几乎不产生时延并且几乎不耗逻辑资源。
字节替换如果采用 GF(28 )模乘求逆运算[4]实现,则逻辑延时较长,速度较慢。为加快速度,采用时延小的基于只读存储器(ROM)查找方式的S盒结构,即输入8bit数据作为地址而相应数据输出则为字节替换后的8 bit数据。S盒结构若采用基于块存储的查找表(LUT)来实现,一个轮运算中16个 S盒将占用16×128个 LUT,占用逻辑资源较大。可采用FPGA内部集成的块 RAM来实现 S 盒。
列混淆是系数在有限域 GF(28)上的四次多项式矩阵乘法,输入列向量(X0, X1, X2, X3),输出列向量(Y0, Y1, Y2, Y3),加密过程是在GF(28)上乘以01、02、03、01,解密过程是乘以 09、0E、0B、0D。为了优化用 FPGA 逻辑实现,采用一个xtime函数来实现GF(28)上的乘02运算,对输入的一个字节b做以下变换:xtime = { b[6:0], 1'b0 } ^ ( 8'h1b &{ 8{ b[7]} } )。则列混淆在GF(28)上所有矩阵乘法就可以通过分解成有限个xtime运算和异或运算来实现。
轮密钥加、行移位和列混淆三步运算实现的逻辑资源较少并且逻辑时延较小,可以合并在一个寄存器传输层间实现。
2.2.2 密钥扩展模块
密钥扩展模块设计比较简单,只需要4 个 S盒和一个轮常数字计算模块,外加一些异或运算和逻辑连线即可完成。密钥扩展模块也是一个迭代运算的结构,与加密模块的轮运算同步,即每个时钟计算出一轮加密的密钥。当解密密钥更新时,密钥扩展模块计算出的各轮密钥作为解密的轮密钥,需要按每个时钟存储在 RAM 中,解密运算时从RAM中读取。
2.3 接口设计
模块的外部接口采用了 16 位数据总线的接口。由于输入的加密密钥和解密密钥各 128位,占用地址为128×2/16=16 个。另外,加密需要一个输入明文寄存器和一个输出密文寄存器,解密需要一个输入密文寄存器和一个输出明文寄存器。因此芯片地址数总共 20,即需要 5 位地址线。接口读写时序的设计以 TMS320C5509 型号数字信号处理器(DSP)总线读写时序作为标准。16 位数据线采用双向三态设计。16 位三态口由片选信号 CS 和读使能信号RDE 控制,当 CS 和 RDE 均有效时三态口数值为输出数据寄存器的值以输出数据,否则三态口数值为高阻将数据输入。 3、测试与分析
3.1 加密模块和解密模块功能仿真
用Xilinx ISE Simulator分别对加密模块和解密模块进行信号仿真,仿真图如图1和图2所示。
两图中 text_in[127:0]为输入数据,key[127:0]为密钥,text_in[127:0]为输出数据。在图4和图 5中,明文均为(3243, F6A8, 885A, 308D, 3131, 98A2, E037, 0734 H),密钥均为(2B7E, 1516, 28AE, D2A6, ABF7, 1588, 09CF, 4F3C H),密文均为(3925, 841D, 02DC, 09FB, DC11, 8597, 196A, 0B32 H),证明其加密和解密正确。
图1加密结果信号仿真
图2解密结果信号仿真
3.2 功能测试
将设计的FPGA模块连接到TI的5509的DSP开发板的总线扩展口,FPGA 模块通过 JTAG 线与计算机连接,DSP开发板通过仿真器与计算机连接。通过 C 程序将明文和密钥写入FPGA 模块,加密后读出密文,解密过程与之类似。通过 DSP 测试,结果与 3.1 仿真结果完全一致,证明 AES算法在FPGA 上准确实现。
使用在线调试逻辑分析软件通过JTAG口对FPGA总线接口的信号波形进行采样并显示,地址、数据和控制信号正确。通过加密或解密时连续输出128 bit结果间隔的时钟数可以计算出,在50 MHz时,数据处理能力可达530 Mb/s。
4、结语
所采用的AES算法设计采用16位并行总线接口,能方便的与上层处理器扩展。在算法实现上,采用多轮运算共用一个轮结构的迭代结构,适用于在较少逻辑资源的 FPGA 芯片上实现,满足了较高吞吐率和较小的芯片面积的应用需求,能满足当前各种数据流的加密。算法的实现采用ROM来实现字节替换,同时优化实现列混淆运算。该设计在赛灵思(Xilinx) 公司的xc3s500e芯片上实现,仅占用4230个Slice,其中7222个LUT和1758个触发器,消耗的逻辑资源较少。
作者简介:
蔡亮(1982-)江西南昌人,江西科技学院计算机中心,助教,本科,研究方法:计算机应用。