AlanSite

Neo Site, New Content

Using the EmoePulse Avalanche Fast-Edge Generator to Generate True Random Numbers

AlanCui's Avatar 2025-11-30 Cryptography

In today’s world, cryptography has become the foundation of most digital infrastructure. The randomness in private key generation is a crucial prerequisite for modern cryptographic systems. Recently, I was gifted an EmoePulse transistor avalanche fast-edge generator by friend. Although this generator is designed primarily for rise-time testing or TDR (Time Domain Reflectometry) measurements, the intrinsic noise from such transistors can also be effectively used to generate cryptographically secure true random numbers. The following describes how we can build a true random number generator with no post-processing based on this device.

After connecting the generator to an oscilloscope, turn it on and acquire 100 million data points at a sampling rate of 500 MSa/s, saving them as a .mat file in MATLAB. The following script performs three main steps

  • Extracting pulse event time intervals
  • Applying low-pass filtering
  • Directly taking the parity (even/odd) of these intervals as the output.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);

Results: In the 100Mpts dataset, we observed 794,624 avalanche events. The statistical minimum entropy was calculated as 0.990649, equivalent to a data rate of approximately 1.6 Mbps, and it passed all the NIST SP800-90 test suites in a brief manner.

However, due to the fact that more than 1 million bits are required for accurate entropy estimation — which would involve collecting about 100 GiB of data via an oscilloscope — this approach is not practical for real-world applications. Therefore, it’s necessary to consider designing a dedicated PCB board specifically for the collection and transmission of the entropy source.

Author : AlanCui
This blog is under a CC BY-NC-SA 4.0 International License
Link to this article : https://alancui.cc/2025/11/30/using-the-emoepulse-avalanche-fedge-gen-to-trng/

This article was last updated on days ago, and the information described in the article may have changed.