1By their very definition, a random number is unpredictable, whereas the output of a computer algorithm is predictable. Therefore, a computer algorithm cannot generate random results. A PRNG program uses internal sources of pseudo randomness, such as environmental noise from device drivers, and generates only pseudo random numbers. For many applications that do not need high levels of security, pseudo random numbers are suitable; however, critical cryptographic applications should use external sources of real randomness, such as radioactive decay, cosmic rays, or thermal noise in electric circuits [51].