1
AES算法加密原理
AES算法的数据分组长度为128位,密钥长度可指定为128位、192位或256位,不同的密钥长度分别对应不同的加密轮数:10、12、14轮。本文以密钥长度128位,加密10轮为例展开介绍。图1为AES算法的加密流程图。
图1 AES算法加密流程图
AES每一轮加密包含4个操作:字节代换(SubBytes,SB)、行移位(ShiftRows, SR)、列混淆(MixColumns, MC)和轮密钥加(AddRoundKey)。最后一轮同其它轮变换基本相同,唯一的不同是移除了列混淆变换。解密过程为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥由初始密钥扩展得到。
AES的一个特性是将称为状态(state)的密码中间结果用一个具有四行四列的二维字节数组来表示。图2为AES算法加密一轮的流程图。
图2 AES算法加密一轮流程图
1.1字节代换
字节代换是一个非线性函数(S盒、逆S盒),用查找表的方式将中间状态的每个字节替换成对应的字节。S盒用于加密操作,逆S盒用于解密操作。它们都是由16*16字节组成的矩阵,即矩阵共有256个元素。每个元素的内容是1个字节(8bit)的值,且每个元素各不相同。状态矩阵中的元素映射为一个新字节的规则为:把该字节的高4位作为行值,低四位作为列值,取出S盒或者逆S盒中对应行列的元素作为输出。表1为S盒查找表,表2为逆S盒查找表。
表1 S盒查找表
表2 逆S盒查找表
1.2行移位