Dan分组密码,线性S盒如何破译

异或性质:

在 % 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矩阵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值