Previous: Prime-Number-Generator Subsystem Architecture, Up: Architecture

14.6 Random-Number Subsystem Architecture

Libgcrypt provides 3 levels or random quality: The level GCRY_VERY_STRONG_RANDOM usually used for key generation, the level GCRY_STRONG_RANDOM for all other strong random requirements and the function gcry_create_nonce which is used for weaker usages like nonces. There is also a level GCRY_WEAK_RANDOM which in general maps to GCRY_STRONG_RANDOM except when used with the function gcry_mpi_randomize, where it randomizes an multi-precision-integer using the gcry_create_nonce function.

There are two distinct random generators available:

Both generators make use of so-called entropy gathering modules:

Uses the operating system provided /dev/random and /dev/urandom devices.
Runs several operating system commands to collect entropy from sources like virtual machine and process statistics. It is a kind of poor-man's /dev/random implementation. It is not available in FIPS mode.
Uses the operating system provided Entropy Gathering Daemon (EGD). The EGD basically uses the same algorithms as rndunix does. However as a system daemon it keeps on running and thus can serve several processes requiring entropy input and does not waste collected entropy if the application does not need all the collected entropy. It is not available in FIPS mode.
Targeted for the Microsoft Windows OS. It uses certain properties of that system and is the only gathering module available for that OS.
Extra module to collect additional entropy by utilizing a hardware random number generator. As of now the only supported hardware RNG is the Padlock engine of VIA (Centaur) CPUs. It is not available in FIPS mode.