Software random generators (PRNG): Software RNGs use mathematical algorithms to generate random numbers, initializing the algorithm with a "seed" value derived from some repetitive operation in the computer, such as keystrokes, running processes, the computer's clock, or mouse movements. However, it is extremely difficult to come up with a completely random seed value, since most such operations only provide seeds with a small range of values.
The challenge of software RNGs is that the sequence of numbers based on the seed value is completely deterministic, since their creation is accomplished with a software algorithm. So even if the seed value is truly random, the numbers the RNG creates are predictable if someone can figure out the algorithm used to produce them. Thus the numbers generated by software RNGs are not considered truly random, but pseudo-random, and the software RNGs that generate them are known as Pseudo-Random Number Generators (PRNGs).
Hardware random generators (TRNG): Hardware RNGs do not require seeds because hardware random numbers are not computed values or derived through a repeatable algorithm. Instead, hardware-generated random numbers are digitized snapshots of naturally occurring noise. Because there is no algorithm and no repeating sequences of numbers, even if a hacker could determine one number, he would not be able to use it to predict any future numbers. For this reason, hardware RNGs are known as Truly Random Number Generators, or TRNGs