Chapter5高级加密标准《密码编码学与网络安全》2020/3/1西安电子科技大学计算机学院2AdvancedEncryptionStandard(AES)2001年由美国国家标准技术局(NIST)发布对称分组密码算法,用以取代DES2020/3/1西安电子科技大学计算机学院3§5.1高级加密标准的评估准则§5.1.1高级加密标准的起源1997年4月15日,NIST发起征集高级加密标准的活动,活动目的是确定一个非保密的、可以公开技术细节的、全球免费使用的分组密码算法,作为新的数据加密标准。1997年9月12日,美国联邦登记处公布了正式征集AES候选算法的通告。作为进入AES候选过程的一个条件,开发者承诺放弃被选中算法的知识产权。对AES的基本要求是:比三重DES快、至少与三重DES一样安全、数据分组长度为128比特、密钥长度为128/192/256比特。1998年8月12日,在首届AES会议上指定了15个候选算法。1999年3月22日第二次AES会议上,将候选名单减少为5个,这5个算法是RC6,Rijndael,SERPENT,Twofish和MARS。2000年4月13日,第三次AES会议上,对这5个候选算法的各种分析结果进行了讨论。2000年10月2日,NIST宣布了获胜者—Rijndael算法,2001年11月出版了最终标准FIPSPUB197。§5.1.2AES的评估2020/3/1西安电子科技大学计算机学院5AESRequirementsprivatekeysymmetricblockcipher128-bitdata,128/192/256-bitkeysstronger&fasterthanTriple-DESactivelifeof20-30years(+archivaluse)providefullspecification&designdetailsbothC&Javaimplementations2020/3/1西安电子科技大学计算机学院6§5.2AES密码AES的参数AES-128AES-192AES-256密钥长度(字/字节/位)4/16/1286/24/1928/32/256明文分组长度(字/字节/位)4/16/1284/16/1284/16/128轮数101214每轮的密钥长度(字/字节/位)4/16/1284/16/1284/16/128扩展密钥长度(字/字节)44/7652/20860/2402020/3/1西安电子科技大学计算机学院7§5.2AES密码AES的特性所有的已知攻击具有免疫性在各种平台上执行速度快,代码紧凑设计简单2020/3/1西安电子科技大学计算机学院8§5.2AES密码数据结构以字节为单位的方阵描述:输入分组in、中间数组State、输出、密钥排列顺序:方阵中从上到下,从左到右2020/3/1西安电子科技大学计算机学院9§5.2AES密码SP网络结构在这种密码的每一轮中,轮输入首先被一个由子密钥控制的可逆函数S作用,然后再对所得结果用置换(或可逆线性变换)P作用。S和P分别被称为混乱层和扩散层,主要起混乱和扩散作用。2020/3/1西安电子科技大学计算机学院10§5.2AES密码AES算法结构AES算法的轮变换中没有Feistel结构,轮变换是由三个不同的可逆一致变换组成,称之为层。线性混合层:确保多轮之上的高度扩散。非线性层:具有最优最差-情形非线性的S-盒的并行应用。密钥加层:轮密钥简单地异或到中间状态上。2020/3/1西安电子科技大学计算机学院11§5.2AES密码AES算法结构2020/3/1西安电子科技大学计算机学院12AES-128加解密过程Rijndael2020/3/1西安电子科技大学计算机学院132020/3/1西安电子科技大学计算机学院14§5.2AES密码AES算法描述假设:State表示数据以及每一轮的中间结果,RoundKey表示每一轮对应的子密钥算法如下:第一轮之前执行AddRoundKey(State,RoundKey)Round(State,RoundKey){ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,RoundKey);}FinalRound(State,RoundKey){ByteSub(State);ShiftRow(State);AddRoundKey(State,RoundKey);}2020/3/1西安电子科技大学计算机学院15§5.2AES密码数据结构:状态、密钥、输出的矩阵表示2020/3/1西安电子科技大学计算机学院16§5.2.1字节代换(SubstituteBytes)变换正向和逆向变换字节代替是一个非线性的字节代替,独立地在每个状态字节上进行运算。代替表(S-盒)是可逆的,是一个16×16的矩阵。2020/3/1西安电子科技大学计算机学院172020/3/1西安电子科技大学计算机学院18§5.2.1字节代换(SubstituteBytes)变换S-盒代替表(S-盒)是可逆的,是一个16×16的矩阵。2020/3/1西安电子科技大学计算机学院192020/3/1西安电子科技大学计算机学院20§5.2.1字节代换(SubstituteBytes)变换例子2020/3/1西安电子科技大学计算机学院21S盒的构造初始化元素求逆:在GF中求逆元素置换,,,067bbb,,,067bbbiiiiiiicbbbbbb8mod78mod68mod58mod4其中:0110001111111000111100017070bbbb,,,067ccc=(01100011)22020/3/1西安电子科技大学计算机学院22§5.2.2行移位(shiftRow)变换正向和逆向变换2020/3/1西安电子科技大学计算机学院23§5.2.2行移位(shiftRow)变换例子2020/3/1西安电子科技大学计算机学院24§5.2.3列混淆(MixColumn)变换正向和逆向变换代替操作,将状态的列看作有限域GF(28)上的4维向量并被有限域GF(28)上的一个固定可逆方阵A乘乘法是GF(28)定义中定义的,素多项式为:m(x)=x8+x4+x3+x+12020/3/1西安电子科技大学计算机学院252020/3/1西安电子科技大学计算机学院26§5.2.3列混淆(MixColumn)变换例子2020/3/1西安电子科技大学计算机学院27§5.2.4轮密钥加(AddRoundKey)变换一个简单地按位异或的操作2020/3/1西安电子科技大学计算机学院28内部函数的功能小结SubBytes的目的是为了得到一个非线性的代换密码。对于分析密码抗差分分析来说,非线性是一个重要的性质。ShiftRows和MixColumns的目的是获得明文消息分组在不同位置上的字节混合。AddRoundKey给出了消息分布所需的秘密随机性。2020/3/1西安电子科技大学计算机学院29§5.2.5AES的密钥扩展轮密钥是通过密钥调度算法从密钥中产生,包括两个组成部分:密钥扩展和轮密钥选取。基本原理如下:所有轮密钥比特的总数等于分组长度乘轮数加1。(如128比特的分组长度和10轮迭代,共需要1408比特的密钥)。将密钥扩展成一个扩展密钥。轮密钥按下述方式从扩展密钥中选取:第一个轮密钥由开始Nb个字组成,第二个轮密钥由接下来的Nb个字组成,如此继续下去。2020/3/1西安电子科技大学计算机学院30§5.2.5AES的密钥扩展密钥扩展扩展过程2020/3/1西安电子科技大学计算机学院312020/3/1西安电子科技大学计算机学院32§5.2.5AES的密钥扩展密钥扩展伪代码2020/3/1西安电子科技大学计算机学院33§5.2.5AES的密钥扩展密钥扩展伪代码2020/3/1西安电子科技大学计算机学院34§5.2.5AES的密钥扩展函数gRotWord执行一字节循环左移[b0,b1,b2,b3][b1,b2,b3,b0]SubWord执行使用S-盒实行字节替换前两步的结果XOR与轮常数Rcon[j]2020/3/1西安电子科技大学计算机学院35j12345678910RC[j]01020408102040801B36§5.2.5AES的密钥扩展轮常量2020/3/1西安电子科技大学计算机学院36§5.2.5AES的密钥扩展例子2020/3/1西安电子科技大学计算机学院37§5.2.6对应的逆运算2020/3/1西安电子科技大学计算机学院38§5.2.6实现可以在8-bitCPU上有效实现bytesubstitutionworksonbytesusingatableof256entriesshiftrowsissimplebyteshiftaddroundkeyworksonbyteXOR’smixcolumnsrequiresmatrixmultiplyinGF(28)whichworksonbytevalues,canbesimplifiedtousetablelookups&byteXOR’s2020/3/1西安电子科技大学计算机学院39§5.2.6实现可以在32-bitCPU上有效实现重新定义步骤以适应32-bit的字长可以预先计算256个字的四个表theneachcolumnineachroundcanbecomputedusing4tablelookups+4XORs4Kb用于存储表设计者认为在AES大选中有效实现是一个关键因素2020/3/1西安电子科技大学计算机学院40小结AES的选择过程AES密码-Rijndael的细节每轮中的步骤密钥的扩展实现