+4  A: 

Ask the user to hit the spacebar a few times. Use the time in microseconds between keystrokes to seed your random number generator.

(or better, use the remainder of the time in microseconds mod 256 microseconds to eliminate any human periodicity. So each keypress gives you 1 random byte, use the appropriate number of strokes to seed your generator)

Marc
@Anders: Please don't use tinyurl in SO.
MAK
Anders
I wiggle a mouse to generate an RSA key and it doesn't really bother me. I guess it depends on how many numbers and how often. Humans are actually really good at generating randomness because we can't repeat anything precisely. This is why people still polish telescope mirrors by hand. Anyway, given that OP provides no information on his system, I'm not sure where else you get randomness from, generically.
Marc
To address the specific point in your book excerpt, obviously you shouldn't ask the user to input a random seed, which is not what I'm suggesting here. But if it makes you happy, unless the application you are writing doesn't take any user input at all, use the time between keystrokes, mouse wiggles, etc. in other parts of the UI to initialize the RNG, rather than specifically asking for a number of key presses.
Marc
+2  A: 

You could use the System.Security.Cryptography.RNGCryptoServiceProvider.

GregS
+4  A: 

Most programming random functions are based on mathematical algorithms. There are random numbers generators, that use wave noises in air (from space radiation), but they're hardware based.

kMike
+5  A: 

you could use a service such as random.org

jk
+15  A: 

Put a cat in a box with a bottle of poison, which will be released when a single atom of a radioactive material decays. Come back in one hour and open the box. If the cat is dead, use 0 as a random bit in your program. If it is alive, use 1.

Repeat with as many cats and boxes as is necessary.

AndrewF
+3  A: 

For that, you would need a hardware random number generater.

A good-enough-for-most-cases substitute for this is measuring the timing of "hardware events" such as user input or network activity.

On Linux, the /dev/random device produces bytes based on this method.

Michael Borgwardt
+2  A: 

I would recommend you:

True Random Number Generators (TRNGs)

http://www.random.org/randomness/

That will point you in the right direction!

Trufa
+1  A: 

It's very difficult to get really random numbers. PRNGs are, after all, in some sense predictable. But it's much more difficult to correctly build a random number generator based on a physical source; most random sources don't produce real random bits all that fast, and it's hard to tell whether you've made a bad blunder. A good PRNG is better for virtually all intents and purposes.

(Only use a high-quality PRNG if you need one, as they're much slower, and make sure you use the right kind if you do: a PRNG designed for crypto is not the same as one designed for Monte Carlo simulation – crypto PRNGs make sure every bit is hard to guess, whereas MCSim PRNGs make sure that spectral properties are good – and most other uses for PRNGs just want them to not be cruddy and to be fast; the standard library one is usually good enough there.)

Donal Fellows
+1  A: 

http://www.entropykey.co.uk/

Daniel Mošmondor
Isn't SO supposed to provide software solutions? (recognizing that there isn't a good purely software solution here)
Marc
sorry, but I'm so fascinated by this dongle that I had to share...
Daniel Mošmondor