AES(高级加密标准)是一种对称密钥加密算法,它以Rijndael加密法为技术基础,被NIST在2002年选为分组加密标准,用以替代旧的DES加密技术。
AES算法的分组长度固定为128位,它支持不同长度的密钥,包括128位、192位和256位。密钥长度不同,加密的计算轮数也会相应地变化。在通信过程中,双方使用同一个密钥进行加密,且该密钥不对外公开。
在AES算法中,密钥是通信双方提前约定的。密钥的长度越长,其计算复杂度就越高,的难度也就越大。明文在加密前会进行分组处理,每个分组的尺寸为128位。如果明文长度不足128位,会采用如PKCS5Padding和ISO10126Padding等填充模式进行填充。
针对大于128位的明文,AES算法提供了多种分组和增强的操作模式,包括ECB、CBC、CFB、OFB和CTR等。算法采用SPN结构(代换-置换网络),通过多轮的代换和置换操作来产生密文块。
- 以AES-128为例,其加密过程包含多个步骤。首先是对明文进行填充,使其长度符合128位的倍数要求。随后进行密钥扩展,将128位的主密钥扩展为11个用于轮密钥加的子密钥。
- 明文被分成多个128位的分组,并按照特定的分组模式进行处理。接下来的多轮加密涉及四种操作:字节替代、行移位、列混淆和轮密钥加。首轮和最终轮的操作与其他轮有所不同。
- 在密钥扩展过程中,初始密钥被表示为一个4x4字节的矩阵,并从中提取出W[0],W[1],W[2],W[3]作为初始子密钥。然后通过密钥编排函数将密钥矩阵扩展为一个包含44个字的序列。
- 后续的40个字被分为10组,每组4个字节,形成10个子密钥供轮密钥加使用。
在多轮加密中,每个明文分组都经过一系列的变换操作:首先是与初始子密钥进行异或运算进行初始轮计算;接着是N-1轮包括字节替代、行移位、列混淆和轮密钥加的变换计算;最后是最终轮的计算,涉及字节替代、行移位和与扩展子密钥的异或运算,最终得到密文。
AES算法的核心操作包括:字节替代(SubBytes),使用S盒完成明文字节的代换;行移位(ShiftRows),将明文矩阵的行进行位移;列混淆(MixColumns),对每列数据进行线性变换以增加安全性;以及轮密钥加(AddRoundKey),将明文与子密钥进行异或运算。
解密过程是加密过程的逆操作。由于一个数进行两次异或运算能恢复原值,所以解密时轮计算逆向进行,核心操作也以相反的方向执行。例如,行移位是向右旋转移动,列混淆使用逆矩阵进行恢复。
AES以其强大的安全性和灵活性成为了广泛使用的对称加密算法。