原则:
- 所有变换基于4x4的状态矩阵完成,16字节转状态矩阵按照从上到下、从左到右填充。
- 乘法在上,并且模上多项式:
约 605 字大约 2 分钟
2025-11-05
原则:
密钥拓展:
初始密钥直接填充为状态矩阵,并每一列四字节视为一个字(记有n个字w[0]到w[n-1])。之后进行拓展,当密钥字的序号(i)是初始字的整数倍的下一个(i = 0 mod n)时,对前一字(w[i-1])进行行移位、字节替换、轮密钥辅助参数异或操作后再与前第n个字(w[i-n])进行异或得到当前字(w[i]),同时当密钥长度为256位,在i = 4 mod 8时,需要对前一字(w[i-1])进行一次字节替换再异或;其余情况直接前一字(w[i-1])与前第n字(w[i-n])异或。最终每四个字形成一个轮密钥。
字节替换:使用256个值的S盒直接按照数值索引替换。
行移位:
第一行不动,后续行依次左移1、2、3位:
a0a1a2a3b0b1b2b3c0c1c2c3d0d1d2d3=>a0b1c2d3b0c1d2a3c0d1a2b3d0a1b2c3
逆行移位:反向替换,依次右移对应位数。
列混淆:
状态矩阵左乘矩阵:
0x020x010x010x030x030x020x010x010x010x030x020x010x010x010x030x02∗state=statenew
逆列混淆:
0x0e0x090x0d0x0b0x0b0x0e0x090x0d0x0d0x0b0x0e0x090x090x0d0x0b0x0e∗state=stateorigin
轮密钥加:两个4x4矩阵,对应位置异或
加密:
密文先经过初始处理(异或等),进行一次轮密钥加,然后进行密钥对应多轮次的字节替换、行移位、列混淆、轮密钥加,最后再一次字节替换、行移位、轮密钥加得到密文。
解密:
和加密相反,密文先轮密钥加,然后进行密钥对应多轮次的行移位、字节替换、轮密钥加、列混淆,最后再一次行移位、字节替换、轮密钥加。其中轮密钥的顺序与加密相反。经过处理(异或等)得到明文。