The product uses a Pseudo-Random Number Generator (PRNG) in a
security context, but the PRNG is not cryptographically
strong.
Time of Introduction
Architecture and Design
Implementation
Applicable Platforms
Languages
All
Common Consequences
Scope
Effect
Authentication
Potentially a weak source of random numbers could weaken the
encryption method used for authentication of users. In this case, a
password could potentially be discovered.
Likelihood of Exploit
Medium
Demonstrative Examples
Example 1
(Bad Code)
C and C++
srand(time()) int randNum = rand();
(Bad Code)
Java
Random r = new Random()
For a given seed, these "random number" generators will produce a
reliable stream of numbers. Therefore, if an attacker knows the seed or
can guess it easily, he will be able to reliably guess your random
numbers.
Potential Mitigations
Phase
Description
Design through Implementation: Use functions or hardware which use a
hardware-based random number generation for all crypto. This is the
recommended solution. Use CyptGenRandom on Windows, or hw_rand() on
Linux.
Other Notes
Often a pseudo-random number generator (PRNG) is not designed for
cryptography. Sometimes a mediocre source of randomness is sufficient or
preferable for algorithms which use random numbers. Weak generators
generally take less processing power and/or do not use the precious, finite,
entropy sources on a system.