Bootstrap

AES MixColumns 列混淆.md

转载自我的笔记: http://caf99af3.wiz03.com/share/s/3a-pHP3y4ABk2SLM5t03faoi0l_0X73Ex4342GXNjU2XHnrH

  1. S-box s盒替换
  2. shiftRows行变换
  3. MixColumns 列混淆

这个部分会接受4个字节的输入,并输出4个字节
在这里插入图片描述

AES 所用的加法和乘法是基于数学(译者注:近世代数)的域论。尤其是 AES 基于有限域GF(28)。加法是异或操作
b ∗ 0 x 03 = b ∗ ( 0 x 02 + 0 x 01 ) = ( b ∗ 0 x 02 ) + ( b ∗ 0 x 01 ) b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01) b0x03=b(0x02+0x01)=(b0x02)+(b0x01)
b ∗ 0 x 0 d = b ∗ ( 0 x 08 + 0 x 04 + 0 x 01 ) = ( b ∗ 0 x 08 ) + ( b ∗ 0 x 04 ) + ( b ∗ 0 x 01 ) = ( b ∗ 0 x 02 ∗ 0 x 02 ∗ 0 x 02 ) + ( b ∗ 0 x 02 ∗ 0 x 02 ) + ( b ∗ 0 x 01 ) b * 0x0d = b * (0x08 + 0x04 + 0x01) = (b * 0x08) + (b * 0x04) + (b * 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01) b0x0d=b(0x08+0x04+0x01)=(b0x08)+(b0x04)+(b0x01)=(b0x020x020x02)+(b0x020x02)+(b0x01)
这步中与输入矩阵相乘的矩阵中的值来自 0x01、0x02、0x03、0x09、0x0b、0x0d 0x0e, 顺序如何确定提问中… ,已有前辈解答,该矩阵是固定死的。

这下来看左上方的 04 是怎么得来的:

0xd4 * 0x02 ⊕ 0xbf * 0x03 ⊕ 0x5d * 0x01 ⊕ 0x30 * 0x01
= 0xd4 * 0x02 ⊕ xbf * 0x02 ⊕ 0xbf * 0x01 ⊕ 0x5d * 0x01 ⊕ 0x30 * 0x01
=0xd4*0x02 ⊕ xbf*0x02 ⊕ 0xbf ⊕ 0x5d ⊕ 0x30   (注意这里的0xd4*02就是0xd4左移一位,然后异或0x1b (0001 1011)哦,加法就是求异或)
=1010 1000 ⊕ 0001 1011 ⊕ 0111 1110 ⊕ 0001 1011 ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 00110000
=0000 0100
=0x04
;