对序列密码线性滤波模型的攻击:https://www.cnblogs.com/luminescence/p/19204373
一、问题描述
1. 非线性滤波模型结构
L 级本原 LFSR
↓
状态序列 \(S^{(i)} = (s_0^{(i)}, s_1^{(i)}, ..., s_{L-1}^{(i)})\)
↓
非线性变换 \(g: \mathbb{Z}_2^n \rightarrow \mathbb{Z}_2\)
↓
乱数输出 \(d_i = g(s_{j_1}^{(i)}, s_{j_2}^{(i)}, ..., s_{j_n}^{(i)})\)
2. 攻击者已知信息
- 公开:LFSR结构(反馈多项式)、非线性函数\(g(x)\)、滤波位置\((j_1,...,j_n)\)
- 保密:LFSR的初始状态 \(Key = (k_{L-1}, k_{L-2}, ..., k_0)\)
- 可观测:乱数序列 \(d_0, d_1, d_2, ...\)
3. 攻击目标
从乱数序列恢复LFSR的初始状态
二、线性逼近的核心思想
1. 基本
即使\(g(x)\)是非线性的,也可能存在线性函数\(L(x) = \alpha \cdot x\),使得:
\(P(g(x) = L(x)) = p \neq 0.5\)
即\(g(x)\)与某个线性函数以偏离1/2的概率相等。
2. 数学表述
寻找\(\alpha \in \mathbb{Z}_2^n, \beta \in \mathbb{Z}_2\),使得:
\(P(\beta \cdot d_i = \alpha \cdot x^{(i)}) = p = \frac{1}{2} + \frac{1}{2}\rho\)
其中\(\rho\)称为优势,\(|\rho|\)越大,逼近效果越好。
三、Walsh谱分析
寻找最佳线性逼近
1. Walsh循环谱定义
对于多输出函数\(g: \mathbb{Z}_2^n \rightarrow \mathbb{Z}_2\),定义:
\(W_g(\alpha \rightarrow \beta) = \frac{1}{2^n} \sum_{x \in \mathbb{Z}_2^n} (-1)^{\beta \cdot g(x) \oplus \alpha \cdot x}\)
2. 物理意义
- \(W_g(\alpha \rightarrow \beta)\) 衡量了线性函数\(\alpha \cdot x\)与\(\beta \cdot g(x)\)的相关性
- 优势\(\rho\)与Walsh谱的关系:
\(\rho_{\alpha,\beta} = W_g(\alpha \rightarrow \beta)\)
\(p = \frac{1}{2} + \frac{1}{2}W_g(\alpha \rightarrow \beta)\)
3. 寻找最佳逼近
遍历所有非零的\(\alpha \in \mathbb{Z}_2^n, \beta \in \mathbb{Z}_2\),找到使\(|W_g(\alpha \rightarrow \beta)|\)最大的对\((\alpha, \beta)\)。
最佳线性逼近:
\(\beta \cdot d_i \approx \alpha \cdot x^{(i)} \quad \text{以概率 } p = \frac{1}{2} + \frac{1}{2}\rho_{max}\)
四、建立含错方程组
1. 状态序列的线性表示
LFSR状态转移:\(S^{(i)} = A^i \cdot Key\)
其中\(A\)是LFSR的状态转移矩阵。
滤波输入:\(x^{(i)} = (s_{j_1}^{(i)}, s_{j_2}^{(i)}, ..., s_{j_n}^{(i)})\)
2. 线性逼近的系数计算
\(\alpha \cdot x^{(i)} = (\alpha_1, \alpha_2, ..., \alpha_n) \cdot (s_{j_1}^{(i)}, s_{j_2}^{(i)}, ..., s_{j_n}^{(i)})\)
每个\(s_{j_k}^{(i)}\)都可以表示为\(A^i Key\)的线性组合。
定义向量\(b^{(i)}\),使得:
\(\alpha \cdot x^{(i)} = b^{(i)} \cdot Key\)
其中\(b^{(i)}\)是已知的\(L\)维向量。
3. 含错方程组
根据线性逼近,对于\(i = i_1, i_2, ..., i_{n+\varepsilon}\):
五、求解含错方程组
1. 问题重述
已知:
- 系数矩阵:\(B = [b^{(i_1)}; b^{(i_2)}; ...; b^{(i_{n+\varepsilon})}]\) (大小为\((N+\varepsilon) \times L\))
- 观测值:\(b_1, b_2, ..., b_{N+\varepsilon}\),其中\(b_i = \beta \cdot d_{i_i}\)
- 概率:\(P(b^{(i)} \cdot Key = b_i) = p\)
求解:\(Key \in \mathbb{Z}_2^L\)
2. 求解方法
方法一:穷举搜索
for candidate in all_possible_keys:match_count = 0for i in range(N):if B[i]·candidate == b[i]:match_count += 1if match_count > threshold:return candidate
- 复杂度:\(O(2^L \cdot N)\)
- 成功条件:\(N \approx c/\rho^2\),其中\(c\)为常数
方法二:快速相关攻击
利用LFSR的线性递推关系,将问题转化为译码问题:
- 将LFSR状态看作信息位
- 将非线性变换+噪声看作信道
- 使用迭代译码算法
优势:复杂度可降至\(O(2^{\alpha L})\),其中\(\alpha < 1\)
攻击实例分析
场景设置
- LFSR:级数\(L=40\),本原多项式已知
- 滤波函数:\(g: \mathbb{Z}_2^4 \rightarrow \mathbb{Z}_2\),从4个固定位置抽取比特
- 观测:获得10,000个乱数比特
攻击步骤
步骤1:Walsh谱分析
计算\(g(x)\)的Walsh谱,发现:
\(W_g(\alpha=(1,0,1,1) \rightarrow \beta=1) = 0.1\)
⇒ 优势\(\rho = 0.1\),正确概率\(p = 0.55\)
步骤2:建立方程组
收集\(N = L + 1000 = 1040\)个方程:
步骤3:求解
使用穷举法:
- 期望匹配数:正确密钥\(\approx 1040 \times 0.55 = 572\),错误密钥\(\approx 1040 \times 0.5 = 520\)
- 设置阈值:550
- 搜索空间:\(2^{40} \approx 10^{12}\),在现代计算机上可行
对抗线性逼近攻击的设计策略
1. 选用抗逼近的非线性函数
目标:使\(\max|W_g(\alpha \rightarrow \beta)|\)最小
理想选择:bent函数
- 性质:\(\forall \alpha,\beta\),\(|W_g(\alpha \rightarrow \beta)| = 2^{-n/2}\)
- 效果:优势\(\rho\)最小化,攻击所需方程数最大化
2. 增加滤波输入维度
- 增大\(n\),使得Walsh谱分析计算量指数增长
- 但需注意实现复杂度
3. 使用稠密反馈多项式
防止快速相关攻击利用稀疏性简化计算。
4. 引入钟控机制
打乱乱数与LFSR状态的时序对应关系,使攻击者无法建立准确的方程组。
线性逼近攻击的完整流程
非线性滤波模型↓
Walsh谱分析 → 寻找最佳(α,β),计算优势ρ↓
建立含错方程组:b⁽ⁱ⁾·Key ≈ β·dᵢ↓
选择求解方法:
├── 穷举法(L较小)
└── 快速相关攻击(L较大)↓
恢复LFSR初始状态
关键参数关系
- 优势:\(\rho = |W_g(\alpha \rightarrow \beta)|\)
- 正确概率:\(p = \frac{1}{2} + \frac{\rho}{2}\)
- 所需方程数:\(N \propto \frac{1}{\rho^2}\)
- 攻击复杂度:\(O(2^L \cdot N)\) 或 \(O(2^{\alpha L})\)
设计
密码设计者应确保:
- 非线性函数的Walsh谱绝对值均匀且小
- LFSR级数足够大
- 反馈多项式稠密
- 考虑引入钟控等额外保护机制