Last Modification: July 3, 2002
HAVEGE (HArdware Volatile Entropy Gathering and Expansion) is a user-level software unpredictable random number generator for general-purpose computers that exploits these modifications of the internal volatile hardware states as a source of uncertainty.
During an initialization phase, the hardware clock cycle counter of the processor is used to gather part of this entropy: tens of thousands of unpredictable bits can be gathered per operating system call in average.
HAVEGE combines on-the-fly hardware volatile entropy gathering with pseudo-random number generation.
The internal state of HAVEGE includes thousands of internal volatile hardware states and is merely unmonitorable. Therefore HAVEGE features a very high security level. HAVEGE also reaches an unprecedented throughput for a software unpredictable random number generator: several hundreds of megabits per second on current workstations and PCs.
Large files HAVEGE(ARCH).s is also part of the package, since compilation time for getting it from HAVEGE.c may be quite long (a few minutes for UltraSparc III and Athlon).
Caution: recompilation for getting HAVEGE(ARCH).s should be done using the same compiler and compiler options as for getting the original HAVEGE(ARCH).s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
- if choice != 0 then choice
Mbytes are generated and analyzed online. tests)
if choice = 0 then 32 Mbytes are dumped
in a file.
-FILENAME is the name of the result file:
32 Mbytes of random numbers are dumped in this file. This is a
binary file.
In the absence of FILENAME as parameters, resbin
is the result file.
However some users may want to combine HAVEGE with their favorite pseudo-random
number generators (PRNG) to get an extra level of confidence on the unpredictability
of the sequences. The HAVEGE packages allows a simple implementation of
such combinations with pseudo-random number generators (PRNG) in the two
following ways.
Examples of PRNGIN() and PRNGout() are provided respectively in
PRNGIN+HardClock.c and PRNGOUT.c. The current functions are toy functions
that can be easily inverted (just need 16 Gigabytes :-). The user
is supposed to edit these functions and replace the toy PRNGs by its own
PRNGs.
To build such combined HAVEGE + PRNG generators,
Online analysis implementing the
NIST statiscal suite is proposed as an option . An example of the output
of such an analysis is available
here.
restriction: to use online analysis on
Windows systems, you must use the CygWin environment.
A lot of interesting pointers to web sites on random numbers can be found here
The software has been registered at the Agency for the Protection of Programmes (APP) under the number IDDN.FR.001.500017.00.S.P.2001.000.10000. This Software is ã copyright INRIA - 2001. INRIA holds all the ownership rights on the Software.
The scientific community is asked to use the SOFTWARE in order to test and evaluate it. INRIA freely grants the right to use the Software. Any use or reproduction of this Software to obtain profit or for commercial ends being subject to obtaining the prior express authorization of INRIA.
INRIA authorizes any reproduction of this Software
- in limits defined in clauses 9 and 10 of the Berne agreement for
the protection of literary and artistic works respectively specify in their
paragraphs 2 and 3 authorizing only the reproduction and quoting of works
on the condition that :
The Software being currently developed, INRIA is assuming no liability,
and should not be responsible, in any manner or any case, for any direct
or indirect damages sustained by the user.