Entropy provider core for an external avalanche noise based entropy source.
This core samples noise provided on an input pin. The noise is expected
to be 'digital' that is fairly rapidly move from voltage levels
matching ones and zeros as handled by the digital process used to
implement the core.
The noise is sampled with double registers. Then phase detection is
applied to find positive flanks. The core contains a free running clock
(clocked at the provided core clock frequency). When a positive flank in
the noise is detected, the LSB of the clock is sampled and added to a
shift registers. When at least 32 bits has been collected, the result is
presented as entropy available to any entropy consumer connected to the
core.
The core also includes a delta time counter. This counter is used for
testing of the core and is available via the API.
The fact that the core uses the flank of the to drive the entropy bit
generation, but that the timing between the flanks means that if
the noise source have a bias for zero or one state does not affect which
entropy bits are generated.
The core has been tested with several revisions of the Cryptech
avalanche noise board. The core has been implemented in Altera
Cyclone-IV and Cyclone-V devices as well as in Xilinx Spartan-6
devices. The core clock frequency used has been 25 MHz, 33 MHz and 50
MHz.
The generated entropy has been extensively tested (using the ent tool as
well as other custom tools) and found to be generating entropy with good
quality.