AES算法流程以及4种工作模式流程图

上传人:yh****1 文档编号:126207717 上传时间:2020-03-23 格式:DOC 页数:9 大小:649KB
返回 下载 相关 举报
AES算法流程以及4种工作模式流程图_第1页
第1页 / 共9页
AES算法流程以及4种工作模式流程图_第2页
第2页 / 共9页
AES算法流程以及4种工作模式流程图_第3页
第3页 / 共9页
AES算法流程以及4种工作模式流程图_第4页
第4页 / 共9页
AES算法流程以及4种工作模式流程图_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《AES算法流程以及4种工作模式流程图》由会员分享,可在线阅读,更多相关《AES算法流程以及4种工作模式流程图(9页珍藏版)》请在金锄头文库上搜索。

1、1、 AES加密算法基本流程AES算法的数据分组长度为128比特、密钥长度为128/192/256比特。AES加解密包括Nr,前面Nr-1包含S盒变换、行移位、列混淆、密钥加4个阶段,最后一则少了列混淆这个阶段。Rijnadel(State, CipherKey)/初始化KeyExpansion( CipherKey, ExpandedKey );/生成子密钥AddRoundKey( State, ExpandedKey );/与子密钥位与/ 前Nr-1for(i =1; i Nr; i+) ByteSub(State);/ S-盒ShiftRow(State);/ 行被移位MixColumn

2、(State);/ 列被混叠AddRoundKey (State, ExpandedKey ); /与子密钥位与/最后一ByteSub(State);ShiftRow(State);AddRoundKey (State, ExpandedKey );2、AES加密算法2.1、状态、密钥、数状态: 解密过程中的中间数据。以字节为元素的矩阵,或二维数组。所有的操作都在状态上进行。状态可以用以字节为元素的矩阵阵列表示,如上图所示该阵列有 4 行,列数记为Nb,Nb等于分组长度除以4。符号说明:Nb 明密文所含的数据字数。Nk 密钥所含的数据字数。Nr 迭代数。2.1、S盒变换S盒变换其实是一个查表的

3、过程,分别取一个字节的高4位和低4位作为行值和列值(因此是),然后在S盒中找到对应的字节替换之。该变换是一个非线性变换。这个非线性就体现在S盒的构造上。S盒变换是AES的唯一非线性变换,是AES安全的关键。关于S盒是按如下方式构造:1)初始化S盒,按行升序排列的字节初始化。行x列y的字节是xy,行号和列号从0开始计数。2)求出每一个元素在GF(28)中的逆。00被映射为它自身。3)仿射变换。对上一步中的每一个字节的每一位作如下变换yi=xi + x(i+4)mod8 + x(i+5)mod8 + x(i+6)mod8 + x(i+7)mod8 + ci,Ci是字节0x63的第i位。该变换用矩阵

4、表示如下所示:2.2、行移位变换在行移位变换中,状态的第一行没有任何变化,第二行循环移位 C1 字节,第三行循环移位 C2 字节,第四行循环移位 C3 字节。位移量 C1、C2 和 C3 与分组长度 Nb 有关,如下表:行移位举例如下所示:2.3、列混合变换列混淆即是用一个常矩阵乘以第二步变换后的矩阵,以达到矩阵中每一个元素都是该元素原所在列所有元素的加权和。2.4、密钥加变换状态与密钥(16byte)异或相加。密钥由种子密钥通过密钥调度算法产生得到,密钥长度等于分组长度Nb。3、密钥调度算法 密钥是通过密钥调度算法从密钥中产生的,这其中包括两个部分:密钥扩展和密钥选取。基本原理如下: 1、所

5、有密钥比特的总数等于数加1乘以分组长度(如 128 比特的分组长度和10迭代,共需要1408比特的密钥); 2、将密钥扩展成一个扩展密钥; 3、密钥按下述方式从扩展密钥中选取:第一个密钥由一开始的Nb个字组成,第二个密钥由接下来的Nb个字组成,如此继续下去。3.1密钥扩展扩展密钥用数组 WNb*(Nr+l)表示,前 Nk 个字是种子密钥,其它的密钥字通过递归定义生成。由于密钥扩展函数取决于 Nk 的值,我们分了 Nk6 和 Nk6 两种情况。对于密钥扩展,用类 C 语言描述如下:KeyExpansion(byte key4*Nk, word wNb*(Nr+1), Nk) begin word

6、 temp i = 0 while (i Nk) wi = word(key4*i, key4*i+1, key4*i+2, key4*i+3) i = i+1 end whilei = Nk while (i 6 and i mod Nk = 4) temp = SubWord(temp) end if wi = wi-Nk xor temp i = i + 1 end while end扩展算法如下:最前面的 Nk 个字是由种子密钥填充的。之后的每一个字 Wj 等于前面的字 Wj-1 的与 Nk 个位置之前的字 Wj-Nk的异或。而且对于 Nk 的整数倍的位置处的字,在异或之前,对 Wj-

7、1 的进行如下变换:1、字节的循环移位 RotByte, 即当输入字为 (a,b,c,d) 时,输出字为 (b , c, d, a )2、用 S 盒进行变换字中的每个字节3、异或常数 Rconi/Nk常量是一个字,这个字最右边三个字节总是0。每的常量均不同,其定义为Rconj = (RCj,0,0,0), 其中RC1 = 1, RCj = 2*RCj-1,且乘法定义在域GF(28)上。j12345678910RCj(HEX)01020408102040801B363.2 密钥的选择在进行密钥加时,密钥长必须与分组长相等,所以第 i 的密钥与分组长度有关,并且由扩展密钥的字 wNb*i, wNb

8、*i+1, , wNb*(i+1)构成。如下图所示给出了 Nb=4,Nk=4 时的密钥选择情况。4、AES四种模式:ECB、CBC、CFB、OFB4.1 ECBECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。ECB模式由于每块数据的加密是独立的因此加密和解密都可以并行计算,ECB模式最大的缺点是相同的明文块会被加密成相同的密文块,这种方法在某些环境下不能提供严格的数据保密性。4.2 CBCCBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块

9、异或。CBC模式相比ECB有更高的保密性,但由于对每个数据块的加密依赖与前一个数据块的加密所以加密无法并行。与ECB一样在加密前需要对数据进行填充,不是很适合对流数据进行加密。Openssl中的AES_cbc_encrypt允许length不是16(128位)的整数倍,不足的部分会用0填充,输出总是16的整数倍。完成加密或解密后会更新初始化向量IV。4.3 CFB与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。CFB的加密工作分为两部分:1、 将一前段加密得到的密文再加密2、 将第1步加密得到的数据与当前段的明文异或。由于加密流程和解密流程中被块加密器加密的数据是前一段密文,因此即使明文数据的长度不是加密块大小的整数倍也是不需要填充的,这保证了数据长度在加密前后是相同的。4.4 OFBOFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。. 资料

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号