介绍:比利时两位非常著名的密码学家Joan DaemenVincent Rijmen设计
一。 Rijndael 与AES区别
Rijndael 算法首先是一个密钥分组加密的算法,通过置换(permutations )和替换(substitutions)迭代加密,进过多轮操作形成密文。
AES算是Rijndael算法的一种特殊实现,选的分组为128bit(16字节),密钥可以使用128、192 和 256bit三种,而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
Rijndael是一个分组密码算法族,其分组长度包括128比特、160比特、192比特、224比特、256比特,密钥长度也包括这五种长度,但是最终AES只选取了分组长度为128比特,密钥长度为128比特、192比特和256比特的三个版本
AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“状态(state)”,
初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)
二。算法流程
AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)
从下图可看到:
1)解密算法的每一步分别对应加密算法的逆操作
2)加解密所有操作的顺序正好是相反的.
算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。
2.1 字节替代
     字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射
加密用的S盒
以下图可以看到:
 S和S-1分别为16x16的矩阵,完成一个8比特输入到8比特输出的映射,输入的高4-bit对应的值作为行标,低4-bit对应的值作为列标。假设输入字节的值为a=a7a6a5a4a3a2a1a0,则输出值为S[a7a6a5a4][a3a2a1a0],S-1的变换也同理。
      例如:字节00000000B替换后的值为(S[0][0]=)63H,再通过S-1即可得到替换前的值,(S-1 [6][3]=)00H。
解密用的S-1盒
=========
2.2 行移位
  行移位是一个4x4的矩阵内部字节之间的置换,用于提供算法的扩散性。
1) 正向行移位
      正向行移位用于加密,其原理图如下。其中:第一行保持不变,第二行循环左移8比特,第三行循环左移16比特,第四行循环左移24比特。
      假设矩阵的名字为state,用公式表示如下:state’[i][j] = state[i][(j+i)%4];其中i、j属于[0,3]。
注意:8比特表示矩阵中的一个元素。一个字节
     2) 逆向行移位
      逆向行移位即是相反的操作,即:第一行保持不变,第二行循环右移8比特,第三行循环右移16比特,第四行循环右移24比特。
      用公式表示如下:state’[i][j] = state[i][(4+j-i)%4];其中i、j属于[0,3]。
2、3 列混淆
列混淆:利用GF(28)域上算术特性的一个代替,同样用于提供算法的扩散性。
   1) 正向列混淆
      正向列混淆的原理图如下:
根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法都是定义在GF(28)上的,需要注意如下几点:
      1) 将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果原始值的最高位为1,则还需要将移位后的结果异或00011011;[1]
      英文原文描述如下:In particular, multiplication of a value by x (i.e., by {02}) can be implemented as a 1-bit left shift followed by a conditional bitwise XOR with (0001 1011) if the leftmost bit of the original value (prior to the shift) is 1.
      2) 乘法对加法满足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)
      3) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模28加法(异或运算)。
      下面举一个例子,假设某一列的值如下图,运算过程如下:
在计算02与C9的乘积时,由于C9对应最左边的比特为1,因此需要将C9左移一位后的值与(0001 1011)求异或。同理可以求出另外几个值。
      2) 逆向列混淆
      逆向列混淆的原理图如下:
轮密钥加
      这个操作相对简单,其依据的原理是“任何数和自身的异或结果为0”。加密过程中,每轮的输入与轮子密钥异或一次;因此,解密时再异或上该轮的轮子密钥即可恢复


本文由 hcb 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论