异或性质:
在 % 2 空间下可以提取,
相当于选取了某一些行,让所有元素异或,提取出来一样正确。
(B * A) ⊕ {\oplus} ⊕ (B * C) = B ∗ {*} ∗ (A ⊕ {\oplus} ⊕ C)
首先这个式子在mod 2下成立,所以对所有矩阵先mod 2
得到只含0 1的矩阵,B * A所作的,B第 i 行非零元素,非零元素所在的列记作C ,选取A的某一列 j
若 k 属于 C,且 sum_ XOR ( A k j {A_{kj}} Akj ) == 1 ,若 sum_ XOR ( A k j {A_{kj}} Akj ) == 1 ,则 C i j {C_{ij}} Cij = 1,else = 0
所以本质上就是统计A矩阵在某一列的属于C的行的非零元个数。奇数为1,偶数为0,相当于作异或。
所有运算都转化为异或,再稍加推导,不难看出性质成立。
如何通过 120 对输入输出,破解密码
B * D = C
B是上述矩阵,D是我们的输入向量,C是密文。
首先明确一个问题,轮密钥是线性的,所以每一位是原来密钥的位置转换。
D[M , K]
D向量由m和原密钥组成,其实如果S盒线性,那么密文的每一位不过是M的某些位和K的某些位做了异或操作得来的,
那么D共 m + k 行,即64 + 56 = 120 行,分别取某一行为1,其余行为0,进行加密,得到密文,如果密文某位为1,则证明B矩阵必然存在1,这个1的位置行对应 C中为1的行,列对应D矩阵设置为1的列。通过一次设置密钥,就可以还原B的某一列,经过120次操作即可换元B矩阵,B矩阵还原出,作逆运算即可得到D矩阵。