summaryrefslogtreecommitdiff
path: root/wiki/NoisyDiode.trac
blob: d20709b19170daa431050c3992c46b5b1799892a (plain) (blame)
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
== Noisy Diode entropy source ==

The Cryptech project is using Avalanche Noise as a physical entropy source connected to the FPGA.

Avalanche breakdown is a physical process that occurs when current is forced backwards through a diode until it cannot hold back anymore. The diode will then begin conducting for a brief time until the voltage drops to a point where the diode recovers. The breakdown and recovery points are not deterministic, and can thus be used as a source of real physical entropy.

The unamplified noise looks like this:

[[Image(noise1.jpg)]]

After amplification, details are lost but the signal is now 3.3V (blue is noise before amplification, yellow is amplified)

[[Image(noise2.jpg)]]

Many implementations on the Internet feed a similar signal into an ADC (Analog Digital converter) and use the resulting data value at the time of the sampling as entropy. The Cryptech project believes a more robust way of extracting entropy is to instead feed the noise to a Schmitt trigger and then measure the time between rising edges. This would be more robust since any analog reading of the noise (such as with an ADC) will be sensitive to changes in temperature, supplied voltage and component aging.

After beeing fed through a Schmitt trigger, the noise looks like this (yellow signal, blue is just a 4 MHz clock):

[[Image(noise-schmitt.jpg)]]

The Cryptech project has to date made a couple of different hardware entropy source boards, but they all share the same design for the avalanche noise source. The core parts of the circuit are shown below. Git repository with full schematics and source code is linked at the bottom of this page.

[[Image(noise-schematics.png)]]

Links:

[[GitRepositories/user/ft/stm32-avalanche-noise| Raspberry-Pi / USB entropy source]]