2。3。2 透明加密算法AES
AES(The Advanced Encryption Standard)是美国国家标准与技术研究所研制的一种加密算法。具体来定义的话,AES 是一个迭代的、有对称密钥分组的密码,它的密钥可以有128、192 和 256 位,用 128 位进行加密和解密数据。分组是指对明文数据库中一组比特同时进行加密,而非一个比特。与公共密钥的密码需要明确定义不一样,对称密钥密码使用相同的密钥加密和解密数据。但是通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构[16]。
下面来解释这种本文用到的算法。AES 用192位密钥对一个16位字节数据块进行加密和解密的情形如图2-2所示。
图2-2 AES加解密过程
下面是128位值以及它们对应的索引数组:
00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
192位密钥的值是:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23
图2-3 S-盒( Sbox )
当 AES 的构造函数被调用时,用于加密的表被初始化。第一个表是取代盒称为S-盒。它是一个16×16的矩阵。S-盒的前五行和前五列如图2-3所示。在幕后,加密例程获该密钥数组并用它来生成一个名为w[]的密钥调度表,如图2-4所示[17]。
图2-4 密钥调度表(Key Sched)
w[] 最初的 Nk (6) 行被作为种子,用原始密钥值(0x00 到0x17)。剩余行从种子密钥来产生。关键是这里现在有不止一个密钥在用。新的密钥被称为轮密钥(round keys),用来把它们与原始种子密钥区分出来。
图2-5 State (态)数组
AES加密开始是复制输入数组到一个名为State (态)的 4×4 字节矩阵中。如上图2-5所示。加密算法实现的一个预处理步骤被称为 AddRoundKey(轮密钥加)。AddRoundKey 用密钥调度表中的前四行对 State 矩阵实行异或操作,并用轮密钥表 w[c,r] 异或输入 State[r,c]。AES 算法对 State 矩阵执行四种操作,分别被称为SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和 AddRoundKey(轮密钥加)。SubBytes 是一个代替操作,将 State 矩阵中的每个字节替换成由 Sbox 决定的新字节。继而你用 x 和 y 进到 Sbox 表中寻找代替值。ShiftRows 是一个置换操作,它将 State 矩阵中的字节向左循环。 ShiftRows 如何操作 State[]如图2-6所示。State 的第0行被向左旋转0位,同理State 的第1行被向左平移1位,State 的第2行被向左平移2位,而 State 的第3行被向左平移3位[17]。
图2-6 ShiftRows 操作 State[]
字节替换、行位移变换、列混合变换和轮密钥加四个操作在一个执行 Nr 次的循环里被调用,为给定密钥的轮数减 。轮数是10,12或者14,对应于种子长度128、192 或者256 位。迭代完成后,在拷贝State 矩阵到输出参数前,加密算法用 SubBytes、ShiftRows 和 AddRoundKey 后完成[17]。文献综述
所以大致说来,AES加密算法的核心有四个操作。总结来说就是AddRoundKey使用从种子密钥值中生成的轮密钥代替 4 组字节;SubBytes 替换用一个代替表替换单个字节;ShiftRows 旋转4 组字节进行序列置换;MixColumns用域加和域乘的组合来代替[10、15]。
AES其实广泛在各种应用中,从很小的智能卡到大型的多处理器主机系统。可以说AES加密算法是在已经开发出的加密算法中的安全性排名最前列。理想来说,假设密钥长度为256 位,应该没有已知的反加密能在一个存在的时间内破解AES(在最快的系统上,少说也要数十年的时间)。