资源描述:
《AES加密算法原理(图文).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、......word文档.....范文范例、供学习参考AES加密算法原理(图文) 随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。经过三轮的筛选,比利时JoanDaeman和VincentRijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加
2、密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍[2]。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。 AES是一个新的可以用于保护电子数据的加密算法。明确地说,AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位
3、数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。Figure1显示了AES用192位密钥对一个16位字节数据块进行加密和解密的情形。......专业资料、内容齐全、可分享、下载......word文档.....范文范例、供学习参考Figure1部分数据 AES算法概述 AES算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES使用了几种不同的技术来实现置换和替换。为了阐明这些技术,让我
4、们用Figure1所示的数据讨论一个具体的AES加密例子。下面是你要加密的128位值以及它们对应的索引数组: 00112233445566778899aabbccddeeff0123456789101112131415 192位密钥的值是: 000102030405060708090a0b0c0d0e0f101112131415161701234567891011121314151617181920212223 Figure2S-盒(Sbox) 当AES的构造函数(constructor)被
5、调用时,用于加密方法的两个表被初始化。第一个表是代替盒称为S-盒。它是一个16×16的矩阵。S-盒的前五行和前五列如Figure2所示。在幕后,加密例程获取该密钥数组并用它来生成一个名为w[]的密钥调度表,Figure3所示。......专业资料、内容齐全、可分享、下载......word文档.....范文范例、供学习参考 Figure3密钥调度表(KeySched) w[]最初的Nk(6)行被作为种子,用原始密钥值(0x00到0x17)。剩余行从种子密钥来产生。变量Nk代表以32位字为单位的种子密钥长
6、度。稍后我分析AES实现时你将清楚地看到w[]是怎样产生的。关键是这里现在有许多密钥使用而不只是一个。这些新的密钥被称为轮密钥(roundkeys)以将它们与原始种子密钥区别开来。 Figure4State(态)数组 AES加密例程开始是拷贝16字节的输入数组到一个名为 State(态)的4×4字节矩阵中。(参见Figure4)。AES加密算法取名为Cipher,它操作State[],其过程描述的伪代码参见Figure5。 在规范中,加密算法实现的一个预备的处理步骤被称为AddRoundKey(轮密钥
7、加)。AddRoundKey用密钥调度表中的前四行对State矩阵实行一个字节一个字节的异或(XOR)操作,并用轮密钥表w[c,r]异或输入State[r,c]。 举个例子,如果State矩阵的第一行保存的字节是{00,44,88,cc......专业资料、内容齐全、可分享、下载......word文档.....范文范例、供学习参考},第一列密钥调度表是{00,04,08,0c},那么新的State[0,2]值是用w[2,0](0x08或0x80)异或State[0,2](0x88)的结果: 100010
8、0000001000XOR10000000 AES算法的主循环对State矩阵执行四个不同的操作,在规范中被称为SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换)和AddRoundKey。除了每次循环AddRoundKey都被调用并使用密钥调度表的下面四行外,AddRoundKey与预备处理步骤中的AddRoundKey相同。Sub