ABSTRACT

Randomness is of importance in many fields such as scientific simulations or cryptography. Random numbers can mainly be generated by either a deterministic and reproducible algorithm called a pseudorandom number generator (PRNG), or by a physical nondeterministic process having all the characteristics of a random noise, called a truly random number generator (TRNG). In this chapter, we focus on reproducible generators, useful for instance in Monte Carlo-based simulators. These domains need PRNGs that are statistically irreproachable. In some fields such as in numerical simulations, speed is a strong requirement that is usually attained by using parallel architectures. In that case, a recurrent problem is that a deflation of the statistical qualities is often reported, when the parallelization of a good PRNG is realized. This is why

ad hoc PRNGs for each possible architecture must be found to achieve both speed and randomness. On the other hand, speed is not the main requirement in cryptography: the most important point is to define secure generators able to withstand malicious attacks. Roughly speaking, an attacker should not be able in practice to make the distinction between numbers obtained with the secure generator and a true random sequence. Or, in an equivalent formulation, he or she should not be able (in practice) to predict the next bit of the generator, having the knowledge of all the binary digits that have been already released [9]. “Being able in practice” refers here to the possibility to achieve this attack in polynomial time and to the exponential growth of the difficulty of this challenge when the size of the parameters of the PRNG increases.