利用 EmoePulse 晶体管雪崩快沿发生器生成真随机数

密码学在当今时代已然成为大多数数字设施的基石,而私钥生成的随机性是现代密码学的重要前提。最近从朋友处获赠了一个 EmoePulse (https://rd.emoe.xyz/projects/EmoePulse/emoepulse.html)晶体管雪崩快沿发生器,虽然该发生器设计上是利用快速雪崩边沿做上升速度测试或 TDR 测试的,但这类晶体管本征噪声源同样适合用来产生密码学安全的真随机数。下文将基于该产品实现无后处理的真随机数发生器。

将发生器连接到示波器后,打开开关,以 500MSa/s 的速度采集 100Mpts,保存为 Matlab文件。通过如下脚本进行 1、提取脉冲事件时间间隔 2、做低通滤波 3、直接取奇偶做输出。

Fs = 2e9;
Ts = 1 / Fs;

idx = find(C1_data > 10);
intervals = diff(idx) * Ts;

cutoff = 500e3; 
Wn = cutoff / (fs_evt/2);
N = 200;
b = fir1(N, Wn, 'low');

intervals_lp = filtfilt(b, 1, intervals);

window = max(floor(length(intervals_lp)/4), 32);
noverlap = floor(window/2);
nfft = max(256, 2^nextpow2(length(intervals_lp)));
[PSD, f] = pwelch(intervals_lp, window, noverlap, nfft, fs_evt);
figure;
plot(f/1e6, 10*log10(PSD));
xlabel('Frequency (MHz)');
ylabel('PSD (dB/Hz)');
title('PSD of Pulse Intervals (Low-passed @ 500 kHz)');
grid on;

data = intervals_lp(:); 
N = length(data);
scale = 1e9;
bits_raw = bitand(int64(round(data*scale)),1);

结果:在 100Mpts 中产生了 794,624 个雪崩事件。统计学最小熵为 0.990649,折合数据率1.6Mbps,并简要通过了所有的 NIST SP800-90 测试套件。然而,因为采集超过1000000 bits 才能进行完整的熵估计,而这需要通过示波器采集约 100GiB 的数据而不太可行,所以需要考虑制作一张专门的 PCB 来进行采集和传输熵源。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注