Chapter 11. Random Numbers
Security-critical applications often
require well-chosen random numbers, for purposes ranging from
cryptographic key generation to shuffling a virtual deck of cards.
Even though problems with random numbers seem as if they should be
few and far between, such problems are disturbingly common. Part of
the problem is that computers are fundamentally deterministic and
therefore are not very good at doing anything unpredictable. However,
input from a user can introduce real randomness into a system.
This chapter discusses how to get secure random numbers for your
application. We describe how to take a single, secure, random number
(a seed), and stretch it into a big stream
of random numbers using a secure pseudo-random number generator. We
talk about how to get random data in lots of different
representations (e.g., an integer in a particular range or a
printable string). We also discuss how to get real randomness in an
environment that is fundamentally deterministic, and we give advice
on figuring out how to estimate how much randomness exists in a piece
of data.
|