> If you use the async event every time, you should get > "real" random numbers. The importance of this property of course dependes on > the application. Using related async events for random numbers will usually result in the numbers themselves being related. While the time between system startup and the first keypress may be fairly random, sampling the time between consecutive keypresses will often yield similar numbers over and over again. No matter how precisely you try to time such things, it is just about impossible to make even the LSB's of a 1MHz counter really "random". Correlational tendencies frequently leak through, but cannot be reliably measured or modeled. A common workaround to this is to try to, e.g., XOR the seed of a PRNG with the "random" physical input periodically and hope that will produce random numbers. While this will often work, it is usually possible for such systems to get into a bad state where the non-randomness of the PRNG interacts badly with the non-randomness of the physical source and the result is a really horrible random number generator. Therefore, a common recommendation is to use a physical process to seed a PRNG, but not to use it at all thereafter. Instead, just choose a PRNG which has suitable characteristics and use it.