The design of the UNIX operating system
The design of the UNIX operating system
A universal statistical test for random bit generators
Journal of Cryptology
Applied cryptography (2nd ed.): protocols, algorithms, and source code in C
Applied cryptography (2nd ed.): protocols, algorithms, and source code in C
The design and implementation of the 4.4BSD operating system
The design and implementation of the 4.4BSD operating system
A computer package for measuring the strength of encryption algorithms
Computers and Security
Handbook of Applied Cryptography
Handbook of Applied Cryptography
Cryptographic Randomness from Air Turbulence in Disk Drives
CRYPTO '94 Proceedings of the 14th Annual International Cryptology Conference on Advances in Cryptology
Software generation of practically strong random numbers
SSYM'98 Proceedings of the 7th conference on USENIX Security Symposium - Volume 7
Hi-index | 0.00 |
This document presents an efficient, high quality random number generator for multi-programmed environments, in particular for UNIX/Linux and Windows systems. The algorithm uses a system's notion of the time, given by a high-precision real-time counter, to obtain random bits, and a combination of system calls to reduce the correlation between consecutive random bits. The combination of system calls introduces variable and unpredictable real-time gaps in the execution of the generator. We present a rationale for such variation and unpredictability, and we show that in fact they exist even when the generator runs in an adverse scenario, i.e., a lightly loaded system. We also show how the generator resists several attacks attempting to guess or control the values it produces. The quality of the generator is evaluated both in terms of its performance and the randomness of the byte sequences it produces. Comparing against other similar generators, CryptoLib and librand, our generator produces equally good random byte sequences, but its performance increases with the speed of the processor, while the performance of CryptoLib and librand is rather constant for each operating system, independently of the processor were it runs.