1. 项目背景与核心问题
KLJN(基尔霍夫-洛-约翰逊噪声)安全密钥交换协议是一种基于热噪声物理特性的量子安全通信方案。它通过传输线两端的电阻热噪声实现密钥交换,理论上具有信息论安全性。但在实际系统中,统计随机数生成器(TRNG)的质量直接影响协议安全性。
我在研究物理层安全通信时发现,当TRNG存在统计缺陷时,攻击者可以通过噪声特征分析提取密钥信息。这个Matlab项目实现了对KLJN协议的TRNG漏洞攻击仿真,揭示了实际工程中容易被忽视的安全隐患。
2. KLJN协议原理与TRNG作用
2.1 标准KLJN协议流程
- 通信双方Alice和Bob各自生成随机电阻值(R_L或R_H)
- 通过传输线交换热噪声电压信号
- 根据接收信号功率判断对方电阻值
- 最终生成共享密钥序列
2.2 TRNG的关键地位
协议安全性依赖于:
- 电阻选择的完全随机性
- 热噪声信号的理想高斯特性
- 采样时刻的精确随机性
实际系统中,这三者都依赖TRNG的质量。我们的攻击正是针对TRNG缺陷展开。
3. 攻击模型构建
3.1 系统建模
matlab复制% 信道参数
R_L = 100; % 低阻值(Ω)
R_H = 10000; % 高阻值(Ω)
T = 300; % 温度(K)
B = 1e6; % 带宽(Hz)
% 不完美TRNG参数
bias = 0.2; % 随机数偏差系数
3.2 攻击实施步骤
- 收集N次密钥交换的噪声样本
- 计算电阻选择序列的自相关函数
- 通过Welch功率谱估计检测周期性
- 构建马尔可夫模型预测密钥位
关键点:当TRNG存在偏差时,电阻选择序列会呈现可检测的统计特征
4. Matlab实现详解
4.1 噪声信号生成
matlab复制function [V_A, V_B] = generate_noise(R_A, R_B, N)
k = 1.38e-23; % 玻尔兹曼常数
V_rms = sqrt(4*k*T*B*min(R_A,R_B));
V_A = V_rms * randn(1,N);
V_B = V_rms * randn(1,N);
end
4.2 有偏TRNG模拟
matlab复制function R = biased_rng(bias, N)
% bias=0时为理想随机,bias>0时产生可预测性
p = 0.5*(1+bias);
R = (rand(1,N) < p)*R_H + (rand(1,N) >= p)*R_L;
end
4.3 攻击核心算法
matlab复制function key = attack(samples, order)
% 构建转移概率矩阵
trans_mat = zeros(2^order,2);
for i = 1:length(samples)-order
state = bi2de(samples(i:i+order-1),'left-msb')+1;
next_bit = samples(i+order);
trans_mat(state,next_bit+1) = trans_mat(state,next_bit+1)+1;
end
trans_mat = trans_mat./sum(trans_mat,2);
% 预测密钥
current_state = samples(1:order);
for i = 1:length(samples)-order
state_idx = bi2de(current_state,'left-msb')+1;
[~,pred] = max(trans_mat(state_idx,:));
key(i) = pred-1;
current_state = [current_state(2:end), key(i)];
end
end
5. 实验结果与分析
5.1 攻击成功率测试
| TRNG偏差系数 | 样本数量 | 预测准确率 |
|---|---|---|
| 0.05 | 1000 | 53.2% |
| 0.10 | 1000 | 58.7% |
| 0.20 | 1000 | 67.3% |
| 0.30 | 5000 | 82.1% |
5.2 关键发现
- 当偏差系数>0.15时,攻击成功率显著上升
- 样本数量增加能有效提升低偏差时的攻击效果
- 二阶马尔可夫模型比一阶模型准确率高12-15%
6. 防御建议与工程实践
6.1 TRNG质量检测方法
- NIST SP800-22测试套件验证
- 自相关函数检测(lag=1时绝对值应<0.01)
- 频域均匀性测试
6.2 系统级加固方案
matlab复制% 防御性TRNG增强实现
function R = secure_rng(seed, N)
persistent hmac_key;
if isempty(hmac_key)
hmac_key = randi([0 255],1,32);
end
R = zeros(1,N);
for i = 1:N
hash = HMAC(hmac_key, [seed i]);
R(i) = (mod(hash(1),2)<1)*R_H + (mod(hash(1),2)>=1)*R_L;
end
end
7. 实际应用中的经验教训
-
硬件TRNG比软件实现更可靠,但需注意:
- 避免电源噪声耦合
- 定期校准采样电路
- 实施在线健康检测
-
在资源受限设备上,可以采用:
- 物理熵源混合
- 后处理哈希强化
- 周期性重播种机制
-
我们实际测试发现,某些MCU内置TRNG在高温环境下偏差系数会从0.03升至0.18,这直接导致KLJN协议被攻破。因此关键系统必须包含环境适应性设计。