尝试推导AES的列混合操作转化为矩阵乘法 b(x)=a(x)*c(x) mod x4+1, c(x)= 03x3+01x2+01x+02
时间: 2024-01-02 21:01:55 浏览: 231
在AES的列混淆操作中,输入状态矩阵的每一列都需要与一个固定矩阵G进行矩阵乘法运算,得到一个新的列。这个固定矩阵G可以通过一个特定的矩阵C进行计算,即G=C×S,其中S是一个固定的矩阵,其元素的值是固定的。
具体来说,矩阵C的每一列都是一个多项式,可以表示为:
c(x) = 03x^3 + 01x^2 + 01x + 02
对于输入状态矩阵的每一列,可以将其看作一个4次多项式,即:
a(x) = a3x^3 + a2x^2 + a1x + a0
将a(x)表示为一个列向量:
a(x) = [a3, a2, a1, a0]T
同样,将c(x)表示为一个列向量:
c(x) = [03, 01, 01, 02]T
则输入状态矩阵的每一列与固定矩阵G之间的矩阵乘法可以表示为:
b(x) = a(x) × G = a(x) × (C × S) = (a(x) × C) × S
将a(x) × C表示为一个列向量:
d(x) = [d3, d2, d1, d0]T = a(x) × C
则有:
b(x) = d(x) × S
其中S是一个固定的矩阵,可以表示为:
S = [02, 03, 01, 01;
01, 02, 03, 01;
01, 01, 02, 03;
03, 01, 01, 02]
将d(x)表示为一个列向量:
d(x) = [d3, d2, d1, d0]T
则有:
b(x) = [02d3 + 03d2 + 01d1 + 01d0,
01d3 + 02d2 + 03d1 + 01d0,
01d3 + 01d2 + 02d1 + 03d0,
03d3 + 01d2 + 01d1 + 02d0]T
将b(x)表示为一个列向量:
b(x) = [b3, b2, b1, b0]T
则有:
b(x) = [b3, b2, b1, b0]T = [02d3 + 03d2 + 01d1 + 01d0,
01d3 + 02d2 + 03d1 + 01d0,
01d3 + 01d2 + 02d1 + 03d0,
03d3 + 01d2 + 01d1 + 02d0]T
即:
b3 = 02d3 + 03d2 + 01d1 + 01d0
b2 = 01d3 + 02d2 + 03d1 + 01d0
b1 = 01d3 + 01d2 + 02d1 + 03d0
b0 = 03d3 + 01d2 + 01d1 + 02d0
将c(x)表示为一个列向量:
c(x) = [03, 01, 01, 02]T
将输入状态矩阵的每一列表示为一个列向量:
a(x) = [a3, a2, a1, a0]T
则可以将d(x)表示为一个列向量:
d(x) = [d3, d2, d1, d0]T = [02a3 + 01a2 + 01a1 + 03a0,
03a3 + 02a2 + 01a1 + 01a0,
01a3 + 03a2 + 02a1 + 01a0,
01a3 + 01a2 + 03a1 + 02a0]T
即:
d3 = 02a3 + 01a2 + 01a1 + 03a0
d2 = 03a3 + 02a2 + 01a1 + 01a0
d1 = 01a3 + 03a2 + 02a1 + 01a0
d0 = 01a3 + 01a2 + 03a1 + 02a0
因此,输入状态矩阵的每一列与固定矩阵G之间的矩阵乘法可以表示为:
b(x) = [b3, b2, b1, b0]T = [02d3 + 03d2 + 01d1 + 01d0,
01d3 + 02d2 + 03d1 + 01d0,
01d3 + 01d2 + 02d1 + 03d0,
03d3 + 01d2 + 01d1 + 02d0]T
= [02a3 + 01a2 + 01a1 + 03a0, 03a3 + 02a2 + 01a1 + 01a0,
01a3 + 03a2 + 02a1 + 01a0, 01a3 + 01a2 + 03a1 + 02a0]T
× [03, 01, 01, 02]T
即:
b(x) = a(x) × c(x) mod x^4 + 1
其中,c(x) = 03x^3 + 01x^2 + 01x + 02,表示列混淆操作中的固定矩阵。
阅读全文