密码分析技术 - 复杂度分析
差分分析
对CipherFour的4+1差分分析。4轮区分器: P r ( d i n → 4 r d o u t ) > 1 / 2 4 Pr(din \stackrel{4r}{\rightarrow} dout) > 1/2^{4} Pr(din→4rdout)>1/24
S/N:
m:明密文对个数
p:差分概率,81/1024
α \alpha α:去噪后,每个方程的解数,4
β \beta β:去噪比例,7387 / 216
k:密钥长度,4
S / N = m p m β α 2 k = p 2 k α β = 2.56 S/N = \dfrac{mp}{m\beta\frac{\alpha}{2^k}} = \dfrac{p2^k}{\alpha\beta} = 2.56 S/N=mβ2kαmp=αβp2k=2.56
D:
c:正确对个数
1 ≤ S / N ≤ 2 1 \le S/N \le 2 1≤S/N≤2时,c = 20~40
S / N ≥ 100 S/N \ge 100 S/N≥100时,c = 3~4
D = c p \dfrac{c}{p} pc
T:
选取t个明密文对,过滤出 t’ = t β t\beta tβ 对
每一对明密文,对一个4-bits密钥分组计数
共计4个分组
T = 4 × t ′ × 2 4 4 \times t' \times 2^4 4×t′×24
M:
存储明密文对:t
密钥计数器: 4 × 2 4 4 \times 2^4 4×24
截断差分
对 Cipherfour 的1+3+1截断差分分析。3轮区分器: P r ( S d i n → 3 r S d o u t ) = 1 Pr( S_{din} \stackrel{3r}{\rightarrow} S_{dout} ) = 1 Pr(Sdin→3rSdout)=1
S/N:
s:结构体个数
p:截断差分概率,等于1
β \beta β:去噪比例,等于1
k:密钥长度,第1轮4-bits,第5轮4-bits
一个结构体,提供 ( 2 2 4 ) = 2 7 ({}_2^{2^4}) = 2^7 (224)=27对明密文
猜定第一轮密钥,平均得到 2 7 / 2 4 = 2 3 2^7/2^4 = 2^3 27/24=23对明密文
因此,S = 23 s
共计27s个8-bits方程,共计4+4*4 = 20-bits密钥
一个方程可以得到: 2 20 / 2 8 = 2 12 2^{20}/2^8 = 2^{12} 220/28=212个解
共计: 2 7 s × 2 12 2^7s \times 2^{12} 27s×212个解
共计:220个密钥,平均计数:N = 2 19 s / 2 20 = s / 2 2^{19}s / 2^{20} = s/2 219s/220=s/2次
S / N = S N = 2 4 S/N = \dfrac{S}{N} = 2^4 S/N=NS=24
D:
c:正确对个数
1 ≤ S / N ≤ 2 1 \le S/N \le 2 1≤S/N≤2时,c = 20~40
S / N ≥ 100 S/N \ge 100 S/N≥100时,c = 3~4
D = c p = c \dfrac{c}{p} = c pc=c
T:
第一轮选定一个4-bits密钥,对结构体进行“过滤”,
2 7 s 2^7s 27s次S-box,得到约 2 3 s 2^3s 23s对明密文
最后一轮对密文解密,4组密钥,每组有24个密钥
4 × ( 2 3 s × 2 4 ) 4 \times (2^3s \times 2^4) 4×(23s×24)次S-box
T = 27s + 29s
M:
存储明密文对:24s
密钥计数器: ( 4 + 1 ) × 2 4 (4+1) \times 2^4 (4+1)×24
不可能差分
对 Fesitel 结构的5+1不可能差分分析。5轮区分器: P r ( ( α , 0 ) → 5 r ( 0 , α ) ) = 0 Pr( (\alpha,0) \stackrel{5r}{\rightarrow} (0,\alpha) ) = 0 Pr((α,0)→5r(0,α))=0
数学工具
x → 0 , ( 1 + 1 x ) x = 1 x \rightarrow 0,(1+\frac{1}{x})^x = 1 x→0,(1+x1)x=1
x → o o , ( 1 + 1 x ) x = e x \rightarrow oo,(1+\frac{1}{x})^x = e x→oo,(1+x1)x=e
x → 0 , ( 1 + x + x 2 + . . . ) = 1 1 − x x \rightarrow 0, (1+x+x^2+...) = \dfrac{1}{1-x} x→0,(1+x+x2+...)=1−x1
D:
b:明密文分组长度
s:结构体个数
每个结构体有 2 b / 2 2^{b/2} 2b/2个明文
t:密钥长度
2 b / 2 2^{b/2} 2b/2个明文可以组成 ( 2 2 b / 2 ) = 2 b − 1 ({}_2^{2^{b/2}}) = 2^{b-1} (22b/2)=2b−1对
去噪,要满足明文差分与密文差分都为 α \alpha α,若密文差分均匀分布,得到: 2 b − 1 / 2 b / 2 = 2 b / 2 − 1 2^{b-1} / 2^{b/2} = 2^{b/2-1} 2b−1/2b/2=2b/2−1对
一个b/2-bits方程,得到 $\dfrac{2t}{2{b/2}} $个解,不可能是正确密钥,排除掉
令: ( 2 t − 1 ) ( 1 − 2 t − 2 b / 2 2 t ) 2 b / 2 − 1 s = ( 2 t − 1 ) e − 0.5 s = ( 2 t − 1 ) 0.6 1 s < 1 (2^t-1)(1-\dfrac{2^{t-2^{b/2}}}{2^t})^{2^{b/2-1}s} = (2^t-1)e^{-0.5s} = (2^t-1)0.61^s< 1 (2t−1)(1−2t2t−2b/2)2b/2−1s=(2t−1)e−0.5s=(2t−1)0.61s<1
s > 2 t × l n 2 s > 2t \times ln2 s>2t×ln2
D = 2 b / 2 s 2^{b/2}s 2b/2s
T:
采样: s 2 b / 2 s2^{b/2} s2b/2次加密
去噪: 2 × s 2 b / 2 2 \times s2^{b/2} 2×s2b/2次差分
恢复密钥,每个结构体可以排除一些密钥,剩余e-0.5:
2 b / 2 Σ i = 1 s 2 t e − 0.5 i = 2 t 2 b / 2 / ( 1 − e − 0.5 ) = 2 t + b / 2 + 1.34 2^{b/2}\Sigma_{i=1}^{s}2^te^{-0.5i} = 2^t2^{b/2} / (1-e^{-0.5}) = 2^{t+b/2+1.34} 2b/2Σi=1s2te−0.5i=2t2b/2/(1−e−0.5)=2t+b/2+1.34
M:
一共2t个密钥,各对应一个1-bit计数器
回飞棒攻击
原型 选择明文(m1,m2),选择密文(c3,c4),统计(m3,m4)差分为 α \alpha α的频率:
增强型 选择明文(m1,m2)与(m3,m4):
矩形攻击 与增强型类似,不要求 β = β ′ \beta = \beta' β=β′,考虑所有的 α \alpha α 经 ENC1 可以到达的 β , β ′ \beta,\beta' β,β′
- 选择(m1,m2)与(m3,m4),满足差分为 α \alpha α
- 统计(c1,c3)与(c2,c4)差分同时为 γ \gamma γ的频率
线性分析
对 CipherD 的4+1线性分析。4轮区分器: P r ( α → 4 r β ) = 0.5 + ϵ Pr( \alpha \stackrel{4r}{\rightarrow} \beta ) = 0.5+\epsilon Pr(α→4rβ)=0.5+ϵ
D:
Ps:成功率
l l l:待破解密钥的长度
r:选取计数器前2r高的密钥
ϵ \epsilon ϵ:线性壳的偏差
N = ( ϕ − 1 ( P s ) + ϕ − 1 ( 1 − 2 − l + r − 1 ) 2 ) 2 × 1 ϵ 2 N = (\dfrac{\phi^{-1}(Ps) + \phi^{-1}(1-2^{-l+r-1})}{2})^2 \times \frac{1}{\epsilon^2} N=(2ϕ−1(Ps)+ϕ−1(1−2−l+r−1))2×ϵ21
T:
最后一轮对密文解密,4组密钥,每组有24个密钥
T = 4 × ( N × 2 4 ) 4 \times (N \times 2^4) 4×(N×24)次S-box
M:
存储明密文对:N
密钥计数器: 4 × 2 4 4 \times 2^4 4×24
零相关线性分析
对 AES-192 的1+4+1零相关线性分析。4轮区分器: C o r ( α → 4 r β ) = 0 Cor( \alpha \stackrel{4r}{\rightarrow} \beta ) = 0 Cor(α→4rβ)=0
D:
选取一半的明文
D = 2n-1
T:
第一轮猜测4字节密钥,最后一轮猜测4字节密钥,共8字节
D × 2 8 ∗ 8 D \times 2^{8*8} D×28∗8次S-box运算
然后,换区分器,计算最后一轮的另外4字节密钥
D × 2 4 ∗ 8 D \times 2^{4*8} D×24∗8次S-box运算
再换区分器,计算最后一轮的另外4字节密钥
D × 2 4 ∗ 8 D \times 2^{4*8} D×24∗8次S-box运算
穷举最后一轮剩余4字节密钥,只需要2个明密文对
2 × 2 192 − 64 − 32 − 32 = 2 65 2 \times 2^{192-64-32-32} = 2^{65} 2×2192−64−32−32=265次加密
6轮加密,每一轮有16个S盒运算;每次破解,要计算8次S-box
T = D × ( 2 64 + 2 32 + 2 32 ( 6 ∗ 16 / 8 ) + 2 65 T = \dfrac{D \times (2^{64} + 2^{32} + 2^{32}}{(6*16/8)} + 2^{65} T=(6∗16/8)D×(264+232+232+265 次6轮加密
M:
存储明密文对:D
密钥计数器: ( 4 + 16 ) × 2 8 (4+16) \times 2^8 (4+16)×28 可忽略
积分攻击
对 AES-192 的3+2积分攻击。区分器: P r ( [ A , C , C , . . . ] → 3 r [ B , B , B , . . . ] ) = 1 Pr([A,C,C,...] \stackrel{3r}{\rightarrow} [B,B,B,...]) = 1 Pr([A,C,C,...]→3r[B,B,B,...])=1
D:
要恢复5字节密钥,40-bits
一个结构体,若区分器尾部的积分以均匀概率到达s=0,
那么一个结构体包含8-bits信息
需要6个结构体,可以确定唯一解
D = 6 × 2 8 6\times2^{8} 6×28
T:
可以通过更换区分器,分4次,恢复最后一轮的全部16字节密钥。
每次计算,需要计算5次S-box。
T = 4 × 5 × ( 2 8 × 2 40 + 2 8 × 2 32 + . . . + 2 8 × 2 ) = 2 50 4 \times 5 \times (2^8 \times 2^{40} + 2^8 \times 2^{32} + ... + 2^8 \times 2 ) = 2^{50} 4×5×(28×240+28×232+...+28×2)=250 次S-box
M:
存储明密文:D
存储(处理完第一个结构体后的)密钥:232
中间相遇攻击
对 AES 的1+4+2中间相遇攻击。
区分器: P r ( [ a 11 , C , C , . . . ] → 3 r [ c 11 , C , C , . . . ] ) = 1 Pr([a_{11},C,C,...] \stackrel{3r}{\rightarrow} [c_{11},C,C,...]) = 1 Pr([a11,C,C,...]→3r[c11,C,C,...])=1
其中 a 11 a_{11} a11到 c 11 c_{11} c11有映射表,映射表与25个字节有关,矩阵大小为: 256 × 2 25 × 8 256 \times 2^{25 \times 8} 256×225×8
D:
a 11 a_{11} a11是活跃字节,猜定K(1),然后再猜Kinit,选择明文。
为了恢复Kinit,最终需要全部的4字节的活跃集。
D = 2 4 × 8 2^{4 \times 8} 24×8
T:
可以更换区分器,恢复全部的最后一轮的16字节密钥。
预计算4个映射表: 4 × 256 × 2 25 × 8 = 2 210 4 \times 256 \times 2^{25 \times 8} = 2^{210} 4×256×225×8=2210
在线阶段,分4次每次恢复4+1+1+4=10字节的密钥:
4 × 10 × 2 80 × 256 = 10 × 2 90 4 \times 10 \times 2^{80} \times 256 = 10 \times 2^{90} 4×10×280×256=10×290 次 S-box 运算
M:
存储4个映射表: 4 × 256 × 2 25 × 8 = 2 210 4 \times 256 \times 2^{25 \times 8} = 2^{210} 4×256×225×8=2210
存储明密文:D
生日攻击
对 k-SUM 问题的碰撞
D:
为了找到一个碰撞,选取k个大小 2 n / k 2^{n/k} 2n/k的随机集合。
当然,也可以是同一个集合。
D = k 2 n / k k2^{n/k} k2n/k
T:
理论下界:2n/k
要保证最顶上的集合至少有一个元素,
且每次两两 l − b i t s l-bits l−bits部分碰撞的耗时尽可能少
k-SUM算法的复杂度给出了上界: k 2 n / ( 1 + l o g 2 ( k ) ) k2^{n/(1+log_2(k))} k2n/(1+log2(k))
当k= 2 n 2^{\sqrt{n}} 2n时,为 2 2 n 2^{2\sqrt{n}} 22n,亚指数级
M:
要保证最顶上的集合至少有一个元素,
且每次两两 l − b i t s l-bits l−bits部分碰撞的耗时尽可能少
存储各个集合,最底层的占主体: k 2 n / ( 1 + l o g 2 ( k ) ) k2^{n/(1+log_2(k))} k2n/(1+log2(k))