密码学是保障信息安全的核心技术,应用涉及军事、国防、商贸及人们日常生活的各个方面。2001 年美国标准技术研究所决定用AES 算法逐渐取代日益不安全的56 bit 密钥长度的 数据加密标准(DES)算法。AES算法是迭代分组密码算法,分组长度为128 bit,而密钥长度可为128 bit、192 bit、256 bit,其对应不同的密钥长度相应的迭代循环次数为10轮、12轮、14 轮。现实现的是128 bit 的AES算法[1-2]。
一种AES 算法实现是采用轮展开的流水线结构[3],吞吐量很大可达到10 Gb/s 量级,但消耗大量的逻辑面积。考虑在资源少的FPGA 上实现AES 算法,能满足低端应用的加、解密速度一般不超过100 Mb/s 的需求。现设计采用顺序结构[3],多轮加密共用一个轮运算结构,加密模块和解密模块共用一个密钥扩展模块,能保持较高加解密速率,同时节省了逻辑面积,在50 MHz 时钟下加解密速率可达530 Mb/s。
1 AES 算法描述AES 算法中的字节表示为有限域上的元素,并在有限域上定义加法和乘法两种运算,运算的基本单位是字节和双字(4 个字节)。AES 算法将128 位的中间结果和密钥都分成16 个字节,构成4×4 以字节为元素的状态矩阵,AES在加解密过程中就是以状态矩阵为 *** 作对象的。加密算法中每一次轮 *** 作都由字节替换、行移位、列混淆和轮密钥加这四个函数组成,最后一次轮 *** 作不含列混淆 *** 作。
2 在FPGA 上实现AES 算法 2.1 顶层结构图该设计的顶层结构图如图1 所示,由控制模块、加密模块、解密模块、密钥扩展模块、随机存储器(RAM)和FIFO组成。接口采用16 位并行数据总线结构。加密数据流向为:明文数据通过数据总线写入16 位入128 位出的FIFO 缓存;由控制模块启动AES 加密模块进行一次加密运算;运算完成输出128bit 密文存入128 位入16 位出的FIFO 中。解密过程与之相同。加密模块和解密模块完全独立,保证模块能同时进行加密和解密运算,以满足快速双向保密通信的需求。
2.2 加解密部分设计
2.2.1 加密模块
由于输入8 次16 位数据才能提供一个128 bit 明文,这一过程至少需要8 个时钟,因此采用逻辑面积较大的多轮展开流水线结构方式意义不大。该设计采用多轮运算复用一个轮 *** 作结构的顺序方式,设计原理图如图2 所示。
轮运算包括轮密钥加、字节替换、行移位和列混淆4 个部分。其中,轮密钥加只是轮数据与轮密钥进行异或运算,结构比较简单;行移位也只是简单的逻辑连线,几乎不产生时延并且几乎不耗逻辑资源。
字节替换如果采用模乘求逆运算[4]实现,则逻辑延时较长,速度较慢。为加快速度,采用时延小的基于只读存储器(ROM)查找方式的S 盒结构,即输入8bit 数据作为地址而相应数据输出则为字节替换后的8 bit 数据。S 盒结构若采用基于块存储的查找表(LUT)来实现,一个轮运算中16 个S 盒将占用16×128 个LUT,占用逻辑资源较大。可采用FPGA 内部集成的块 RAM 来实现S 盒。
列混淆是系数在有限域上的四次多项式矩阵乘法,输入列向量(X0, X1, X2, X3),输出列向量(Y0, Y1, Y2, Y3),加密过程是在上乘以01、02、03、01,解密过程是乘以09、0E、0B、0D。为了优化用FPGA 逻辑实现,采用一个xTIme 函数来实现上的乘02 运算,对输入的一个字节b 做以下变换[5]:xTIme = { b[6:0], 1'b0 } ^ ( 8'h1b &{ 8{ b[7]} } )。则列混淆在上所有矩阵乘法就可以通过分解成有限个xTIme 运算和异或运算来实现。
轮密钥加、行移位和列混淆三步运算实现的逻辑资源较少并且逻辑时延较小,可以合并在一个寄存器传输层间实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)