收藏 分销(赏)

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

上传人:a199****6536 文档编号:3033462 上传时间:2024-06-13 格式:DOC 页数:10 大小:643.54KB 下载积分:8 金币
下载 相关 举报
AES算法作业流程以及4种工作模式作业流程图.doc_第1页
第1页 / 共10页
AES算法作业流程以及4种工作模式作业流程图.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
1、 AES加密算法基本流程 AES算法数据分组长度为128比特、密钥长度为128/192/256比特。 AES加解密涉及Nr轮,前面Nr-1轮包括S盒变换、行移位、列混淆、轮密钥加4个阶段,最后一轮则少了列混淆这个阶段。 Rijnadel(State,CipherKey) { //初始化 KeyExpansion( CipherKey,ExpandedKey );//生成子密钥 AddRoundKey( State,ExpandedKey );//与子密钥位与 // 前Nr-1轮 for(i =1;i < Nr;i++) { ByteSub(State);// S-盒 ShiftRow(State);// 行被移位 MixColumn(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盒变换其实是一种查表过程,分别取一种字节高4位和低4位作为行值和列值(因而是),然后在S盒中找到相应字节替代之。该变换是一种非线性变换。这个非线性就体当前S盒构造上。S 盒变换是 AES 唯一非线性变换,是 AES 安全核心。 关于S盒是按如下方式构造: 1)初始化S盒,按行升序排列字节初始化。行x列y字节是xy,行号和列号从0开始计数。 2)求出每一种元素在GF(2^8)中逆。00被映射为它自身。 3)仿射变换。对上一步中每一种字节每一位作如下变换 yi=xi + x(i+4)mod8 + x(i+5)mod8 + x(i+6)mod8 + x(i+7)mod8 + ci,Ci是字节0x63第i位。 该变换用矩阵表达如下所示: 2.2、行移位变换 在行移位变换中,状态第一行没有任何变化,第二行循环移位 C1 字节,第三行循环移位 C2 字节,第四行循环移位 C3 字节。位移量 C1、C2 和 C3 与分组长度 Nb 关于,如下表: 行移位举例如下所示: 2.3、列混合变换 列混淆即是用一种常矩阵乘以第二步变换后矩阵,以达到矩阵中每一种元素都是该元素原所在列所有元素加权和。 2.4、轮密钥加变换 状态与轮密钥(16 byte)异或相加。轮密钥由种子密钥通过密钥调度算法产生得到,轮密钥长度等于分组长度 Nb 。 3、密钥调度算法 轮密钥是通过密钥调度算法从密钥中产生,这其中涉及两个某些:密钥扩展和轮密钥选用。基本原理如下: 1、所有轮密钥比特总数等于轮数加1乘以分组长度(如 128 比特分组长度 和10轮迭代,共需要1408比特密钥); 2、将密钥扩展成一种扩展密钥; 3、轮密钥按下述方式从扩展密钥中选用:第一种轮密钥由一开始Nb个字组 成,第二个轮密钥由接下来Nb个字构成,如此继续下去。 3.1密钥扩展 扩展密钥用数组 W[Nb*(Nr+l)]表达,前 Nk 个字是种子密钥,其他密钥字通过递归定义生成。由于密钥扩展函数取决于 Nk 值,咱们分了 Nk≤6 和 Nk>6 两种状况。对于密钥扩展,用类 C 语言描述如下: KeyExpansion(byte key[4*Nk],word w[Nb*(Nr+1)],Nk) begin word temp i = 0 while (i < Nk) w[i] = word(key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]) i = i+1 end while i = Nk while (i < Nb * (Nr+1)] temp = w[i-1] if (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i/Nk] else if (Nk > 6 and i mod Nk = 4) temp = SubWord(temp) end if w[i] = w[i-Nk] xor temp i = i + 1 end while end 扩展算法如下: ①最前面 Nk 个字是由种子密钥填充。 ②之后每一种字 W[j] 等于前面字 W[j-1] 与 Nk 个位置之前字 W[j-Nk]异或。 ③并且对于 Nk 整数倍位置处字,在异或之前,对 W[j-1] 进行如下变换: 1、字节循环移位 RotByte,即当输入字为 (a,b,c,d) 时,输出字为 (b ,c,d,a ) 2、用 S 盒进行变换字中每个字节 3、异或轮常数 Rcon[i/Nk] 轮常量是一种字,这个字最右边三个字节总是0。每轮轮常量均不同,其定义为Rcon[j] = (RC[j],0,0,0),其中RC[1] = 1, RC[j] = 2*RC[j-1],且乘法定义在域GF(2^8)上。 j 1 2 3 4 5 6 7 8 9 10 RC[j](HEX) 01 02 04 08 10 20 40 80 1B 36 3.2 轮密钥选取 在进行密钥加时,密钥长必要与分组长相等,因此第 i 轮密钥与分组长度关于,并且由扩展密钥字 w[Nb*i],w[Nb*i+1],…,w[Nb*(i+1)]构成。如下图所示给出了 Nb=4,Nk=4 时轮密钥选取状况。 4、AES四种模式:ECB、CBC、CFB、OFB 4.1 ECB ECB是最简朴块密码加密模式,加密前依照加密块大小(如AES为128位)提成若干块,之后将每块使用相似密钥单独加密,解密同理。 ECB模式由于每块数据加密是独立因而加密和解密都可以并行计算,ECB模式最大缺陷是相似明文块会被加密成相似密文块,这种办法在某些环境下不能提供严格数据保密性。 4.2 CBC CBC模式对于每个待加密密码块在加密前会先与前一种密码块密文异或然后再用加密器加密。第一种明文块与一种叫初始化向量数据块异或。 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 OFB OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作对称性因此加密和解密流程是完全同样。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服