DES利用56位密钥对64位分组数据进屑用埽??997年被采纳为美国联邦信息处理标准。1999年,美国国家标准与技术协会(NIST)发布了3DES,3DES采用两套或三套不同密钥(112位或168位),三次重复DES算法将明文加密为密文,安全性比DES有了提高。
DES和3DES的主要缺点是实现速度较慢。由于最初的DES没有提供高效率的软件代码,因而加密速度很慢,相比之下,重复三遍DES加密操作的3DES速度更慢。DES和3DES的另一个缺点是安全性较差。加密的效率和安全性与分组长度密切相关,更高等级的安全性和效率通常需要更长的分组长度,DES和3DES采用64位的分组长度,显然不满足安全和效率的要求。
2001年,NIST发布了AES,即FIPS 197。AES采用128位的分组长度,支持长度为128位、192位和256位的密钥长度。128位密钥长度的AES可能是最常采用的版本了。128位的密钥长度能够提供足够的安全性,而且比更长的密钥需要较少的处理时间。到目前为止,AES还没有出现任何致命缺陷。由此看来,AES取代DES和3DES以增强安全性和效率已是大势所趋。
AES加密和脱密算法的输入都是一个128位的分组。这个分组被编排为一个称做状态阵列(state array)的4×4字节矩阵,这个状态阵列在每一层加密或脱密时都进行修改。在加密或脱密的最后阶段后,这个状态阵列被变回为128位的线性串。128位密钥类似地被变为字节方矩阵。
密钥经过10层处理后,扩展为10组不同的密钥。一层典型的加密和脱密处理都是由四个阶段组成:ByteSub(字节代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(加层密钥)。ByteSub阶段使用一张表(即所谓的S盒)来执行对分组的字节进行代替。也就是说,每一个输入字节被映射到惟一的一个输出字节。在RowShift阶段中,状态阵列的第一行保持不动,算法对第二行执行1字节循环左移,对第三行执行2字节循环左移,对第四行执行3字节循环左移。在MixColumns阶段中,代替算法作为作用于一列中所有字节的函数,改变列中的每个字节。在AddRoundKey阶段中,使用扩展密钥中的一块4× 4字节部分。扩展密钥的每一个字节利用“异或”(XOR)函数与状态阵列的对应字节结合。
不论是加密还是脱密,AES密码总是以AddRoundKey阶段开始,然后进行9层运算,每一层都包括所有四个阶段,最后进行只有三个阶段组成的第10层操作,第10层操作没有MixColumns阶段。
只有AddRoundKey阶段使用密钥。因此,AES密码都是以AddRoundKey阶段开始和结束。AES密码利用四种阶段交替对数据分组进行处理:首先是利用XOR函数进行AddRoundKey操作,接着在其他三个阶段对分组进行错乱处理,然后再利用XOR函数加密,如此反复。这种方案既高效又高度安全。同大多数分组密钥一样,AES的脱密算法逆序使用扩展密钥。不过,脱密算法并不与加密算法完全一样。
目前AES采用软件实现,随着这种加密方案更广泛地应用,用户将会看到AES硬件的实现方式。