1、AES算法原理及实现2015.4.20AES算法简介 AES( The Advanced Encryption Standard),又称 Rijndael加密法,该演算法为比利时密码学家 Joan Daemen和 Vincent Rijmen所设计,结合两位作者的名字,以 Rijdael命名。是美国联邦政府采用的一种分块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 ( NIST)于 2001年 11月 26日发布于 FIPS PUB 197,并在 2002年 5月 26日成为有效的标准。 2006年,高级
2、加密标准已然成为对称密钥加密中最流行的演算法之一。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。美国国家标准与技术研究所(NIST)在 2002年 5月 26日建立了新的高级数据加密标准 (AES)规范。 AES 是一个新的可以用于保护电子数据的加密算法。明确地说, AES 是一个迭代的、对称密钥分组的密码,它可以使用 128、 192 和 256 位密钥,并且用 128 位( 16字节)分组加密和解密数据 。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(
3、 permutations )和替换 (substitutions)输入数据。 AES算法描述 AES 算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。 AES 使用了几种不同的技术来实现置换和替换 ,包括 : 字节代换 (SubBytes),行循环移位 (ShiftRows),列混合 (MixColumn)运算,密钥加(AddRoundKey)。表 1-1 AES的密钥长度和加密轮数列表密钥长度 (32bit)(Nk)分组长度 (Nb) 加密轮数 (Nr)AES - 128 4 4 10AES 192 6 4 12AES - 256 8 4 14图 1-1 A
4、ES的加密 /解密流程图密 文输出轮密钥加明文输入 密钥扩展密钥第 1轮第 9轮第 10轮第 10轮第 9轮第 1轮4,736,3940,430,3字节代换行移位列混合列混合行移位字节代换字节代换轮密钥加轮密钥加行移位轮密钥加 密 文输入明 文输出轮密钥加逆字节代换逆 列混合逆行移位逆字节代换逆字节代换逆行移位轮密钥加逆行移位逆列混合轮密钥加轮密钥加1.字节代换 (byteSub) 字节代换是非线性变换,独立地岁状态的每个字节进行。代换表 (即 S-盒 )是可逆的,由以下两个变换得到: 首先,将字节看作 GF(28)上的元素,映射到自己的乘法逆元, 00映射到自己。 其次,对字节做如下的 (G
5、F(2)上的,可逆的 )仿射变换:y0y1y2y3y4y5y6y71 0 0 0 1 1 1 11 1 0 0 0 1 1 11 1 1 0 0 0 1 11 1 1 1 0 0 0 11 1 1 1 1 0 0 00 1 1 1 1 1 0 00 0 1 1 1 1 1 00 0 0 1 1 1 1 1x0x1x2x3x4x5x6x711000110= x 字节代换 状态矩阵按照下面的方式映射成为一个新的字节: 把该字节的高 4位作为行值,低 4位作为列值,得到 S盒或逆 S盒的对应元素作为输出。 例如输入字节 0x12,取 S盒的第 0x01行盒 0x02列,得到 0xC9。字节代换 (B
6、yteSub)a00 a01 a02 a03 a04 a05a10 a11 a12 a13 a14 a15a20 a21 a22 a23 a24 a25a30 a31 a32 a33 a34 a35b00 b01 b02 b03 b04 b05b10 B11 b12 b13 b14 b15b20 b21 b22 b23 b24 b25b30 b31 b32 b33 b34 b35S盒aij bij2.行移位 (ShiftRow) 在行 循环移位变换 中,状态阵列的后 3行循环移位不同的偏移量 。第 0行不移动。第 1行循环移位 C1字节,第 2行循环移位 C2字节,第 3行循环移位 C3字节。 偏移量 C1、 C2、 C3与分组长度 Nb有关 ,如下表所示: Nb C1 C2 C34 1 2 36 1 2 38 1 3 4行移位示意图a00 a01 a02 a03 a04 a05a10 a11 a12 a13 a14 a15a20 a21 a22 a23 a24 a25a30 a31 a32 a33 a34 a35a00 a01 a02 a03 a04 a05a11 a12 a13 a14 a15 a10a22 a23 a24 a25 a20 a21a33 a34 a35 a30 a31 a32左移 0位左移 1位左移 2位左移 3位