AES加密 密钥(一个字节(1b)=8个比特位(bit))(1kb=1024b)

AES加密
AES是一个对称密码,旨在取代DES成为广泛使用的标准。


image.png

二、AES的数据结构
加密解密算法的输入是一个128位分组。这些分组被描述成4×4的字节方阵,这个分组被复制到state数组中,并在加密和解密的每一阶段都被修改。在字节方阵中,每一格都是一个字,包含了4字节。在矩阵中字是按列排序的。


image.png

三、加密解密的详细结构
AES未使用Feistel结构。其前N-1轮由4个不同的变换组成:字节代替、行移位、列混淆和轮密钥加。最后一轮仅包含三个变换。而在第一轮前面有一个起始的单变换(轮密钥加),可以视为0轮。
  字节代替(SubBytes):用一个S盒完成分组的字节到字节的代替。

  行移位(ShiftRows):一个简单的置换。
  列混淆(MixColumns):利用域GF(28)上的算术特性的一个代替。
  轮密钥加(AddRoundKey):当前分组和扩展密钥的一部分进行按位异或XOR。


image.png

首尾使用轮密钥加的理由:若将其他不需要密钥的阶段放在首尾,在不知道密钥的情况下就能计算其逆,这就不能增加算法的安全性。
加密原理:轮密钥加实际是一种Vernam密码形式,其本身不难被破解。另外三个阶段一起提供了混淆、扩散和非线性功能。这三个阶段没有涉及密钥,就它们自身而言,并未提供算法的安全性。然而,该算法经历一个分组的XOR加密(轮密钥加),再对该分组混淆扩散(其他三个阶段),再接着又是XOR加密,如此交替进行,这种方式非常有效非常安全。
可逆原理:每个阶段均可逆。对字节代替、行移位和列混淆,在解密算法中用它们相对应的逆函数。轮密钥加的逆就是用同样的轮密钥和分组相异或,其原理就是A⊕B⊕B = A。和大多数分组密码一样,AES解密算法按逆序利用扩展密钥,然而其解密算法和加密算法并不一样,这是由AES的特定结构决定的。图5.3中加密和解密流程在纵向上是相反的,在每个水平点上,state数组在加密和解密函数中都是一样的。
image.png

四、AES的变换函数
1、字节代替变换
image.png

字节代替变换是一个简单的查表操作。AES定义了一个S盒,它是由16×16个字节组成是矩阵,包含了8位所能表示的256个数的一个置换。State中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,以这些数值为索引从S盒的对应位置取出元素作为输出。如,十六进制数{95}所对应的S盒行值是9,列值是5。S盒中在此位置的值是{2A},相应的,{95}被映射为{2A}。
S盒的构造
(1)按字节值的升序逐行初始化S盒(相当于每个值都代表了坐标)

(2)把S盒的每个字节映射为它在有限域GF(28)中的逆
(3)把S盒中的每个字节的8个构成位记为(b7,b6,b5,b4,b3,b2,b1,b0)。对S盒的每个字节的每个位作如下变换:


image.png

逆S盒的构造
(1)按字节值的升序逐行初始化S盒
(2)利用式5.1的逆变换,该逆变换如下:
image.png

可逆证明:
令字节代替变换和逆字节代替变换中的矩阵分别为X和Y,常量c和d的向量表示分别为C和D。对于某个8位的向量B,式5.2变成了B’=XB⊕C。我们需证明Y(XB⊕C)⊕D=B
image.png

与DES加密的S盒的区别:
  1、AES的S盒的原理是运用了GF(28)的乘法逆和矩阵的可逆运算来保证加密与解密过程的可逆性。DES的S盒设计主要是为了确保非线性关系,并不需要可逆。因而在设计理念上有极大的不同。
  2、AES的S盒与DES的S盒形式上差别也很大,AES的S盒输入和输出的位数相同,均为128位,大小为16×16的字节矩阵,且只有1组;而DES的S盒输入6位,输出只有4位,大小是4×16的位矩阵,并且有8组。在输入的坐标选择规定上亦有不同。

2、行移位变换
操作本身很简单,将state数组的第一行保持不变,第二行循环左移一个字节,第三行循环左移两个字节,第四行循环左移三个字节。


image.png

其逆变换则将移位的几行执行相反方向的移位操作即可。
基本原理
由于轮密钥加、字节代替变换都是逐列地作用在state数组上,每一轮的行移位变换将会打乱列排列,使得保密性得到很大的提升。
3、列混淆变换
列混淆变换实际上是使用乘法矩阵(注意:其运算中涉及的加法和乘法都是定义在GF(28)上的加法和乘法,目的就是为了确保运算结果不会溢出定义域),可用以下式子描述。

image.png

其可逆性可以简单运算得到证明
基本原理
式5.3中矩阵的系数是基于码字间有最大距离的线性编码,这使得在每列的所有字节中有良好的混淆性。列混淆变换和行移位变换使得经过几轮变换后,所有的输入位和所有的输出位相关。
此外,列混淆变换的系数,即{01}{02}{03}是基于算法实现角度考虑的。不过,逆向列混淆变换的系数则更加难以实现,然而加密被视为比解密更重要,因为:
  1、对于CFB和OFB密码模式,仅用到加密算法
  2、和任何其他分组密码一样,AES能用于构造消息验证码,这仅仅用到了加密过程。

4、轮密钥加变换
这个比较简单,没有太多好说的,密钥扩展的复杂性是确保算法安全性的重要部分。

以下是描述单轮AES的另一个视角,强调各变换的机制和输入。

image.png

五、AES的密钥扩展
AES密钥扩展算法的输入值是4个字(16字节),输出值是一个由44个字组成(176字节)的一维线性数组。以下伪码描述了这个扩展:
  KeyExpansion(byte key[16], word w[44]){
    word temp
    for(i=0; i<4; i++) //将输入的密钥直接复制到扩展密钥数组的前四个字
      w[i]=word(key[4i],key[4i+1],key[4i+2],key[4i+3]);
    temp = w[i-1];
    if(i mod 4 == 0) //对w数组下标为4的倍数的元素采用更复杂的函数来计算
      temp = SubWord(RotWord(temp))⊕Rcon[i/4];
    w[i] = w[i-4] + temp; //每一个新增的字w[i]依赖于w[i-1] 和w[i-4]
  }
  RotWord的功能是字循环,即使一个字的4个字节循环左移1个字节。
  SubWord是利用S盒对输入字的每个字节进行字节代替。
  Rcon[i]是轮常量,代表一个字,这个字最右边三个字节总是0,因此字与Rcon异或,其结果只是与该字最左边的那个字节相异或。每一轮的轮常量都不相同,其定义为
  Rcon[i] = (RC[i],0,0,0),其中RC[1] = 1,RC[i] = 2•RC[i-1] 乘法是定义在域GF(28)上的。
  RC[i]的值按照十六进制表示为

image.png

轮常量取不同值就是为了消除不同轮密钥产生方式上的对称性或相似性。

密钥扩展算法的设计规范:
1、找到密钥或轮密钥的部分位不足以计算出轮密钥的其他位;
2、它是一个可逆的变换(即知道扩展密钥中任何连续的Nk个字能够重新产生整个扩展密钥,Nk是构成密钥所需的字数);
3、能够在各种处理器上有效地执行;
4、使用轮常量消除对称性;
5、将密钥差异性扩散到轮密钥中的能力,即密钥的每个位能影响轮密钥的许多位;
6、足够的非线性以防止轮密钥的差异完全由密钥的差异所决定。

改进--等价的逆算法
上文所述的标准解密流程与标准加密流程并不完全一致,加密每一轮的流程是:字节代替-->行移位-->列混淆-->轮密加。而解密每一轮的流程是:逆向行移位-->逆向字节代替-->轮密加-->逆向列混淆。
可以对解密构成进行改进,使得解密流程与加密流程等效。
1、交换逆向行移位和逆向字节代替:
由于逆向行移位并不影响state数组中字节的内容,而逆向字节代替也不会影响state数组中字节的位置,因而两者可以交换顺序而不影响解密。
2、交换轮密钥加和逆向列混淆:
这两种操作均不会改变state中字节的顺序,给定状态Si和给定轮密钥wi,可证明
逆向列混淆(Si⊕wi)= [逆向列混淆(Si)]⊕[逆向列混淆(wi)]
这个等式显然是正确的,因而如果要改变这两种操作的顺序,则必须改进逆向列混淆的操作,即先对轮密钥应用逆向列混淆(注意,无需对首尾的轮密钥应用逆向列混淆)。最终,改进后的解密流程如下图:


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容