AES加密算法说明

AES加密算法说明,第1张

AES加密算法说明, AES加密算法说明,第2张

1 引 言

AES加密算法的一种优化的FPGA实现方法

随着密码分析水平,芯片处理能力和计算技术的不断进步,des的安全强度已经难以适应新的安全需要,其实现速度、代码大小和跨平台性均难以继续满足应用需求。因此,nist(美国国家标准与技术研究所)筹划aes(高级数据加密标准)算法,旨在取代des,以保护21世纪敏感政府信息的新型加密标准。rijndael算法以其简洁、高效、安全和原则性的设计被接纳为aes,并于2001年11月26日正式公布在fips(federal informaTIon processingstandards)出版的fips-pub 197中。作为des的继承者,aes自从被接纳为标准之日起就已经被工业界、银行业和行政部门作为事实上的密码标准。

随着网络传输速度提升为gigabits数量级,业界对算法的执行速度的要求也越来越高,基于软件的密码算法便显得性能不足,需要采用硬件加密的方式,他采用一些特殊的优化技术(如流水线和查找表等),可极大地提高数据的流量并减少密钥的生成时间。另外,用硬件实现加密算法及与之相关的密钥生成过程,并且封装到芯片中,因为他们不易被外部攻击者读取或更改,会有较高的物理安全性。因此,基于硬件的密码算法就受到业界的普遍关注。以fpga为代表的可重构硬件以其自身所固有的特点既具有硬件的安全性和高速性又有软件的灵活性和易维护性,已经成为分组密码算法硬件实现的热点研究方向。

本文介绍aes加密算法的一种fpga实现的方法以及对其加密速度的优化处理技巧。

2 aes加密算法简介

aes是一种迭代分组密码,采用的是代替/置换网络(spn)。他将明文分组长度固定为128 b,而且仅支持128,196或256 b的密钥长度,本文仅对密钥长度为128 b的情况进行讨论。

aes加密算法的实现包括密钥扩展过程和加密过程。加密过程又包括一个作为初始轮的初始密钥加法(addroundkey),接着进行9次轮变换(round),最后再使用一个轮变换(finalround),如图1所示。

每一次round均由subbytes,shiftrows,mixcolumns和addroundkey共4个步骤构成,finalround包含除mixcolumns这一步外的其他3个步骤,round结构如图2所示。

轮变换及其每一步均作用在中间结果上,将该中间结果称为状态,可以形象地表示为一个4*4 治疗大三阳去哪家治好b的矩阵。

3 aes加密算法的优化

3.1 字节代换(subbytes)

步骤subbytes是rijndael密码中惟一的非线形变换。他是一个砖匠置换,该置换包含一个作用在状态字节上的s-盒,用srd表示,他是由字节在gf(28)域中求其乘法逆并外加一个仿射变换(仿射变换的作用是复杂化s-盒的代数表达式)实现,假设该步的输入为a,输出为b,即b=srd(a)。由于该步骤是一种非线形面向字节的变换,是将一个8位二进制数据转换为另一个不同的8位二进制数据,这里要求一一对应,并且替换结果不能超出8位,可以通过构造可逆的s-盒来实现。

根据字节代换的要求和特点,具体实现时,可以将s-盒用一个16*16 b的置换表来表示,通过查表即可实现该步变换,避免了复杂的乘法运算。

3.2 行移变换(shiftrows)

shiftrows是线形变换,他和列混合运算相互影响,在多轮变换后,使密码信息达到充分的混乱,提高非线形度。

行变换是在状态的每个行间进行的,是状态中的行按照不同的偏移量进行循环左移运算,在明文分组长度为128 b,密钥长度为128 b时,shiftrows对状态的每行作用如下列表达式所示:

显而易见,可以通过对每个字节的移位简单实现该步变换。

3.3 列混合变换(mixcolumns)

mixcolumns是线形变换,是以状态的列为单位进行的 *** 作。假设该步的一列的输入为a,输出为b,mixcolumns对状态的每列作用如下列表达式:

上述矩阵乘法为gf(28)有限域中的乘法运算,并且有一个因子为常数。由于gf(28)有限域中的每一个元素都能够写成02的不同幂次的和(例如:15=01○+022 ○+024),因此,乘以任何常数的乘法都可以通过反复的乘以02和异或运算来实现。可将矩阵乘法中的常数因子分解为02的不同幂次和,矩阵乘法转换为与02的乘法和异或运算。将gf(28)域中的每一个元素与02的乘积存储在一张16*16 b查找表中,记作xTIme(?)(例如:02*a=xTIme(a))。所以,该步骤可以通过查表和异或运算实现,表达式如下(假设该步的一列的输入为a,输出为b):

3.4 密钥加法(addroundkey)

addroundkey是将轮密钥中的各个字节与状态中的各个字节逐位异或,实现密码和密钥的混合。轮密钥是由初始密钥通过密钥扩展得到的。

3.5 密钥扩展(expandedkey)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/dianzi/2590360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-08-08
下一篇2022-08-08

发表评论

登录后才能评论

评论列表(0条)

    保存