聊聊 AES 算法
AES 简介
鉴于 DES算法 密钥空间小、容易被暴力破解、加密效率低等缺陷。美国的 NIST(National Institute of Standards and Technology,国家标准技术研究所)经过五年的甄选流程,从多个候选算法中确认了 Rijndael 算法为最新的 AES 算法。
该算法为比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计,结合两位作者的名字,以 Rijdael 之名命之。
AES 加密解密
严格地说,AES 和 Rijndael 加密法并不完全一样(虽然在实际应用中二者可以互换),因为 Rijndael 加密法可以支持更大范围的区块和密钥长度:AES 的区块长度固定为128位,密钥长度则可以是 128,192或256位;而 Rijndael 使用的密钥和区块长度可以是 32 位的整数倍,以 128 位为下限,256 位为上限。加密过程中使用的密钥是由 Rijndael 密钥生成方案产生。
AES 加密
AES 加密过程是在一个 4×4 的字节矩阵(128bits 就是 16 字节)上运作。跟 DES 一样,Rijndael 也是由多轮运算组成的。加密时,各轮 AES 加密循环(除最后一轮外)均包含4个步骤:
SubBytes
在 AES 算法中,Rijindael 的区块长度固定为 128bits,密钥长度有 128,192和256bits 三种。128bit 就是 16 字节,即一个 4×4 的字节矩阵,一个字节可以表示 0~255 的任意值。而 SubBytes 就是根据其值在一个拥有 256 个值的替换表中查找出对应的值进行处理。
ShiftRows
此步骤将将 4×4 的字节矩阵中的每行进行循环式移位,即每一行都向左循环移位某个偏移,每一行的平移字节数是不同的。
MixColumns
为了充分混合矩阵,在 4 字节的列上面进行一定的线性转换运算,将其变为另外的 4 字节列。
最后一个加密循环中省略 MixColumns 步骤,而以AddRoundKey取代。
AddRoundKey
4×4 矩阵中的每一个字节都与子密钥做 XOR 运算,每个子密钥由密钥生成方案产生,通常重复进行 10-14 轮运算。
AES解密
Rijndael 加密过程:
SubBytes -> shiftRows -> MixColumns -> AddRoundKey
Rijndael 解密过程:
AddRoundKey -> MixColumns -> shiftRows -> SubBytes
注意,除了 AddRoundKey 是 XOR 运算不需要逆运算之外,其他的步骤都需要进行逆运算。
AES特点
优点
1、运算速度快,同 DES算法 相比,AES 的加密效率更加高效,是一种密码强度很高的对称加密算法。
2、 对内存的需求非常低,适合于受限环境。
3、分组长度和密钥长度设计灵活。
4、 AES 标准支持可变分组长度,分组长度可设定为 32 比特的任意倍数,最小值为 128 比特,最大值为 256 比特。
5、 AES的密钥长度比 DES算法 大,它也可设定为 32 比特的任意倍数,最小值为 128 比特,最大值为 256 比特,所以用穷举法是不可能破解的。
6、很好的抵抗差分密码分析及线性密码分析的能力。
缺点
目前尚未存在对 AES 算法完整版的成功攻击,但已经提出对其简化算法的攻击,除此无明显缺点。