正文
[加密解密] 加密/解密之AES (2018/9/30 14:51:56 ) 阅读 (2194)
AES AES
AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。Rijdael的发音近于 "Rhinedoll,两位设计者的名字,参考荷兰语原发音可译为尤安·达蒙、文森特·莱蒙。(Joan不能译为女性化的名字“琼”。另外,西欧的姓名很多是有相同拉丁文或希腊文源头的,故译成中文是可能相同)
1997年4月15日,美国ANSI发起征集AES(advanced encryption standard)的活动,并为此成立了AES工作小组。
1997年9月12日,美国联邦登记处公布了正式征集AES候选算法的通告。对AES的基本要求是: 比三重DES快、至少与三重DES一样安全、数据分组长度为128比特、密钥长度为128/192/256比特。
1998年8月12日,在首届AES候选会议(first AES candidate conference)上公布了AES的15个候选算法,任由全世界各机构和个人攻击和评论。
1999年3月,在第2届AES候选会议(second AES candidate conference)上经过对全球各密码机构和个人对候选算法分析结果的讨论,从15个候选算法中选出了5个。分别是RC6、Rijndael、SERPENT、Twofish和MARS。
2000年4月13日至14日,召开了第3届AES候选会议(third AES candidate conference),继续对最后5个候选算法进行讨论。
2000年10月2日,NIST宣布Rijndael作为新的AES。经过3年多的讨论,Rijndael终于脱颖而出。
Rijndael由比利时的Joan Daemen和Vincent Rijmen设计。算法的原型是Square算法,它的设计策略是宽轨迹策略(wide trail strategy)。算法有很好的抵抗差分密码分析及线性密码分析的能力。
Rijndael密码的设计力求满足以下3条标准:
① 抵抗所有已知的攻击。
② 在多个平台上速度快,编码紧凑。
③ 设计简单。
当前的大多数分组密码,其轮函数是Feistel结构。
Rijndael没有这种结构。
Rijndael轮函数是由3个不同的可逆均匀变换
Rijndael (State, ExpandedKey)
{
AddRoundKey (State, ExpandedKey);
for (i=1; i <Nr; i ++)
Round (State, ExpandedKey+Nb* i);
FinalRound (State, ExpandedKey+Nb*Nr)
}
Round (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
MixColumn (State);
AddRoundKey (State, RoundKey)
}
FinalRound (State, RoundKey)
{
ByteSub (State);
ShiftRow (State);
AddRoundKey (State, RoundKey)
}