差分密码分析

本文深入探讨差分密码分析技术,重点讲解针对SPN结构S盒的分析方法,通过探测结构来破解异或密钥k。文章详细阐述了差分分析的准备工作、主要流程及实现过程,包括确定差分输入、计算密文对异或值及筛选最大匹配项等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

差分密码分析是针对SPN结构中的S盒(通过测试可以探测出结构)进行分析的方法,最后目标是破解出异或密钥k.

准备工作

对于一个4位一组的S盒的输入xxx输出yyy输入x∗x^*x输出y∗y^*y,
计差分为x′=x⊕x∗x'=x\oplus x^*x=xx,y′=y⊕y∗y'=y\oplus y^*y=yy.
则4位下x′x'xy′y'y各有242^424种.差分分析就基于x⊕x∗x\oplus x^*xx相等的明文对的集合对应的密文对y⊕y∗y\oplus y^*yy242^424下的不均匀分布有关.
定义Δ(x′)\Delta (x')Δ(x)为包含所有异或为x′x'x的明文对的集合.y亦然.
在本篇文章种如果没有特殊说明,明文指S盒加密前的比特,密文指加密后的.

主要流程

确定x′x'x
计算该集合下的每一对的y′y'y
定义ND(x′,y′)N_D(x',y')ND(x,y)为明文异或为x’.密文异或为y’的对数.
计算每一个可能的x’的情况,打表如下
在这里插入图片描述
a’为明文的异或,b’为密文的异或.

注意到,对于SPN的加密规则,下一轮S的输入等于上一轮P盒的输出异或子密钥.
x⊕x∗=w⊕w∗x\oplus x^*=w\oplus w^*xx=ww,因为作为同一位置上的输入,密钥被抵消.
在这里插入图片描述
但y’仍然和密钥有关.
定义扩散率为x’=a下y’=b的概率.即
Rp(a′,b′)=ND(a′,b′)2m R_p(a',b')=\frac{N_D(a',b')}{2^m} Rp(a,b)=2mND(a,b)
和线性分析一样,要找到一个差分链使得下一轮的差分输入异或是上一轮的输出异或置换之后的结果,这样就能得到整个差分链的扩散率.
注意:这要求了明文的差分应该是固定的.这一条链中x’应该是0000 1011 0000 0000.
差分链示例

实现

差分分析和线性分析类似,当输出的异或满足差分链要求时counter+1,然后筛选出最大的.
比如上面的差分链,简单的代码思路如下:

generate_plain_chiper_pairs(T);
if pairs is Correct:
for each possible key:
	generate v_4_2
	generate v_4_4
	generate u_4_2
	generate u_4_4#v is output,u is input.4_2 means 4th rounds and 2nd part.
	
	'''
	part2
	'''
	generate v*_4_2
	generate v*_4_4
	generate u*_4_2
	generate u*_4_4
	calculate u'_4_2
	calculate u'_4_4
	if u'_4_2 is 0110 and u'_4_4 is 0110:
		counter+1
Select the max

Correct

也就是为了排除噪音的干扰并加强效率,一个可用的明文对应该满足
(u&lt;1&gt;4)′=(u&lt;3&gt;4)′=0 (u^4_{&lt;1&gt;})&#x27;=(u^4_{&lt;3&gt;})&#x27;=0 (u<1>4)=(u<3>4)=0

y&lt;1&gt;=y&lt;1&gt;∗y&lt;3&gt;=y&lt;3&gt;∗ y_{&lt;1&gt;}=y^*_{&lt;1&gt;}\\y_{&lt;3&gt;}=y^*_{&lt;3&gt;} y<1>=y<1>y<3>=y<3>
否则就要丢弃.

T

一般取T=50-100.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值