分组密码算法与AES算法

目录

1 关于AES算法的数学基础

 2 主要内容

2.1 AES形成过程 

2.2 分组密码的要求

2.3 AES分组长度、密钥长度、轮数的关系

 2.4 AES算法加解密框架

 ​

2.5 AES的分组

 2.6 AES的S盒(字节代换ByteSub)

2.7 行位移

2.7.1 行位移操作 

 2.7.1 行移位评价

2.8 列混淆

 2.9 轮密钥加

  2.9 AES的密钥生成

2.10 AES加解密的流程图 

 2.11 交换轮密钥和逆向列混合

2.12 AES设计上的考虑

 2.13 AES的安全性

3 AES快速实现

4 AES算法与DES算法的对比


1 关于AES算法的数学基础

有限域有时也称为伽罗瓦域,它指的是拥有有限个元素的集合。大致来讲,伽罗瓦域是一个有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆操作。

  • 群的概念:群值得是元素集合G及G内任意两个元素的联合操作的集合。群具有以下特性:
  • 群操作是封闭的,即对所有的a,b,c∈G, a·6 = c∈G 始终成立
  • 群操作是可结合的,即对所有的 a,b,c∈G 都有 a·(b·c)=(a·b)·c
  • 存在一个元素l∈G对所有 a∈G 都满足 a·l =l·a 此元素l称为单位元+
  • 对每个 a∈G 都存在一个元素 使得 a^{-1} ∈G ,使得a·a^{-1}= a^{-1}·a=1, 而a^{-1}就称为 a 的逆元。
  • 在上面的特性的基础上, 如果对所有的 a, b∈G 都有 a·b=b·a 则称此群为阿 贝尔群(或交换群)
  • 域的概念:域F是拥有一下特性的元素的集合。
  • F中的所有元素形成一个加法群,对应的群操作为“+”,单位元为0.
  • F中除0外的所有元素构成了一个乘法群,对应的群操作为“x”,单位元为1.
  • 当混合使用这两种群操作时,分配定理始终成立,即对所有的 a,b,c∈F, 都有 a(b+c)=(ab)+(ac)

有限域中的元素可以用多种不同的方式表示,对于任意素数的方幂,都有唯一的一个有限域,通常用GF(2^{8})表示多项式次数为8的多项式有限域。

分组密码算法与AES算法_第1张图片

分组密码算法与AES算法_第2张图片

 2 主要内容

2.1 AES形成过程 

  • 1997年4月15日,美国ANSI向全球发起征集AES(advanced encryption standard)的活动,并为此成立了AES工作小组。
  • 1997年9月12日,美国联邦登记处公布了正式征集AES候选算法的通告。对 AES的基本要求是: 比三重DES快、至少与三重DES一样安全、数据分组长度为128比特、密钥长度为128/192/256比特。
  • 1998年8月12日,在首届AES候选会议(first AES candidate conference)上 公布了AES的15个候选算法,任由全世界各机构和个人攻击和评论。
  • 1999年3月,在第2届AES候选会议(second AES candidate conference)上 经过对全球各密码机构和个人对候选算法分析结果的讨论,从15个候选算法中选出了5个。分别是RC6、Rijndael、SERPENT、Twofish和MARS。
  • 2000年4月13日至14日,召开了第3届AES候选会议(third AES candidate conference),继续对最后5个候选算法进行讨论。
  • 2000年10月2日,NIST宣布Rijndael作为新的AES。经过3年多的公开讨论, Rijndael终于脱颖而出。Rijndael由比利时的Joan Daemen和Vincent Rijmen 设计。算法的原型是Square算法,它的设计策略是宽轨迹策略(wide trail
    strategy)。算法有很好的抵抗差分密码分析及线性密码分析的能力。

2.2 分组密码的要求

  • 安全性:稳定的数学基础,没有算法弱点、算法抗密码分析强度高等。
  • 性能:能在多个平台上以较快的速度实现。
  • 大小:不占用大量的存储空间和内存。
  • 易实现:灵活性、硬件和软件适应性、算法的简单性等。

2.3 AES分组长度、密钥长度、轮数的关系

分组密码算法与AES算法_第3张图片

 2.4 AES算法加解密框架

 分组密码算法与AES算法_第4张图片

 

2.5 AES的分组

分组密码算法与AES算法_第5张图片

 2.6 AES的S盒(字节代换ByteSub)

  • S盒的替换表

分组密码算法与AES算法_第6张图片

 字节代换逆操作的逆S盒:

分组密码算法与AES算法_第7张图片

  • S盒的替换操作 

列的每个元素作为输入用来指定S盒的地址:前四位指定S盒的行,后4位指定S盒的列。由行和列所确定的S盒位置的元素取代了明文矩阵中相应位置的元素。

分组密码算法与AES算法_第8张图片

  • S盒评价 

S盒被设计成能防止已有的各种密码分析攻击。Rijndael 的开发者特别寻求在输入位和输出位之间几乎没有相关性的 设计,且输出值不能通过利用一个简单的数学函数变换输入 值所得到。另外,在代码变换中所选择的常量使得在S盒中 没有不动点[S盒(a)=a],也没有“反不动点”[S盒(a)=逆a]。 当然,S盒必须是可逆的,即逆S盒[S盒(a)]=a。然而, S盒(a)=逆S盒(a)不成立,在这个意义上S盒不是自逆的。例如,S盒({95})={2A},但逆S盒({95})={AD}。 

2.7 行位移

2.7.1 行位移操作 

 行位移是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3 行左移3字节,如下图所示。从该图中可以看出,这使得列完全进 行了重排,即在移位后的每列中,都包含有未移位前每个列的一个 字节。接下来就可以进行列内混合了。(逆向行移位变换将中间态数据的后三行执行相反方向的移位操作):

分组密码算法与AES算法_第9张图片

 2.7.1 行移位评价

由于中间态数据和算法的输入输出数据一样,也是由4 列所组成的数组,在加密过程中,明文逐列被复制到中间 态数据上,且后面的轮密钥也是逐列应用到中间态数据上, 因此,行位移将某个字节从一列移到另一列中,这个变换确保了某列中的4字节被扩展到了4个不同的列。

2.8 列混淆

列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵,如下图的公式所示: 

col

 状态矩阵中的第j列(0 ≤j≤3)的列混合可以表示为下图所示: 

col2分组密码算法与AES算法_第10张图片

  •  列混淆评价:

列混淆变换的矩阵系数是基于在码字间有最大距离的 线性编码,这使得在每列的所有字节中有良好的混淆性。 列混淆变换和行移位变换使得在经过二轮变换后,所有的 输出位均与所有的输入位相关。 此外,列混淆变换的系数,即{01},{02},{03}是基于算法执行效率考虑的,而逆向列混淆变换中的系数并不是出于效率的考虑,加密被视为比解密更重要

 2.9 轮密钥加

  •  轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作,如下图所示。其中,密钥Ki中每个字W[4i],W[4i+1],W[4i+2],W[4i+3]为32位比特字,包含4个字节,他们的生成算法下面在下面介绍。轮密钥加过程可以看成是字逐位异或的结果,也可以看成字节级别或者位级别的操作。也就是说,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算。 

分组密码算法与AES算法_第11张图片

  2.9 AES的密钥生成

 密钥是按矩阵的列进行分组的,然后添加40个新列来进 行扩充。如果前4列(即由密钥给定的那些列)W(0) ,W(1) , W(2)和W(3),那么新列以递归方式产生:

如果i不是4的倍数,那么第i列由如下等式确定:

W(i)=W(i一4) XOR W(i一1)
如果i是4的倍数,那么第i列由如下等式确定:
W(i)=W(i一4) XOR T[W(i一1)]

分组密码算法与AES算法_第12张图片

  •  T[W(i-1)]的实现方式
  1. 循环地将W(i-1)的元素移位,每次一个字节,也就是说, abcd变成了bcda。
  2. 将这4个字节作为S盒的输入,输出新的4个字节efgh。
  3. 轮常量Rcon[i]见下表。
  4. 这样生成转换后的列:efghXOR Rcon[i]。

分组密码算法与AES算法_第13张图片

  •  密钥扩展评价
  1.  知道密钥或轮密钥的部分位不能计算出轮密钥的其它位, 但知道扩展密钥中任何连续的Nk个字能够重新产生整个扩展密钥。.
  2. 使用轮常量来排除对称性。
  3. 密钥的每一位快速且均等地影响到轮密钥的位。
  4. 足够的非线性以防止轮密钥的差异完全由密钥的差异所决定。

2.10 AES加解密的流程图 

分组密码算法与AES算法_第14张图片

 2.11 交换轮密钥和逆向列混合

分组密码算法与AES算法_第15张图片

2.12 AES设计上的考虑

  •  与DES相比,扩散的效果更快,即两轮可达到完全扩散。
  • S盒使用清晰而简单的代数方法构造,避免任何对算法留 有后门的怀疑。
  • 密钥扩展方案实现对密钥位的非线性混合,既实现了均 等效应,也实现了非对称性。
  • 比穷举攻击更好的攻击进行到6轮,多出4轮可以提供足 够多的安全性。(注:针对AES-128)。

分组密码算法与AES算法_第16张图片

 2.13 AES的安全性

  • 弱密钥 :AES在设计上不是对称的,其加密和解密过程不一致,
    这也避免弱密钥的存在。
  • 差分分析和线性分析 由于在设计时考虑了这两种攻击的方法,因此AES具有较好的抗击其攻击的能力。
  • 密钥穷举攻击 平均需要2127次AES运算,按目前的计算能力是不可能完
    成的。

3 AES快速实现

 分组密码算法与AES算法_第17张图片

4 AES算法与DES算法的对比

  •  相似之处
  1.  二者的轮函数都是由四层构成,非线性层、移位层、线 性混合层、子密钥异或,只是顺序不同。
  2. AES的非线性运算是字节代替(ByteSub),对应于DES中 的非线性运算S盒。
  3. 行移位运算保证了每一行的字节不仅仅影响其它行对应 的字节,而且影响其它行所有的字节,这与DES中置换P相似。
  4. AES的列混淆运算的目的是让不同的字节相互影响,而 DES中F函数的输出与左边一半数据相加也有类似的效果。.
  5. AES的子密钥异或对应于DES中S盒之前的子密钥异或 
  • 不同之处
  1. AES的密钥长度(128位、192位、256位)是可变的,而 DES的密钥长度固定为56位。
  2. DES是面向比特的运算,AES是面向字节的运算。
  3. AES的加密运算和解密运算不一致,因而加密器不能同 时用作解密器,而DES的加密器可用作解密器,只是子密钥的顺序不同。

你可能感兴趣的:(算法,密码学)