All real crypto keys come from PRNGs (if they don't, you have bigger problems). If your PRNG sucks, you're in trouble. You aren't as secure as AES; you're as secure as your RNG. Bernstein used a similar visualization to show diffusion in his stream cipher over multiple rounds: http://cr.yp.to/snuffle/diffusion.html
Well ... the last time I had to generate real crypto keys for an application I used a 300 US$ (in 1996) TRNG pod that used thermal noise to provide truly random data. We can be rather sure that TRNGs are used to make one time pads for the intelligence community ... although strangely enough the Venona decrypts are based on the Soviets having reused pages of random numbers, probably due to the high demand that develop…
I'm sure PRNGs have been used to make "one time pads"[1]. And as you know, those aren't actually one time pads. They're stream ciphers based on PRNGs, and are as secure as the underlying PRNG --- meaning, probably not secure at all. Calling them OTP's perpetuates a misconception about the applicability of OTPs to real crypto.
People have been saying "don't worry about the cipher, think about the whole system" for two decades now, but that message has been attenuated down to "use AES, don't try to design your own block cipher". Frankly? At this point? I think you'd do better if you started by actually designing a simple Fiestel cipher. At least then you'd be assured some basic understanding of what these algorithms actually do.
If you want to think scary thoughts about crypto and cloud computing, remember that I can now spend a couple bucks to get access to a machine that has nanosecond timing resolution to your secure app by nature of it being a single switched gigE hop away.
Sorry about tit-for-tatting your reply, which was interesting, but I think I had at least 2 worthwhile things to add to the discussion there. Thanks for giving me the vector to do that.
[1] (By way of backstory for the rest of you: one time pads are "theoretically unbreakable" cryptosystems where you and your counterparty somehow securely exchange blocks of truly random data, and encrypt/decrypt by combining that random key matter with data on a 1:1 basis. They have no relevance to real-world crypto, since they depend on you having a way to reliably and securely exchange and retain key material that is as long as the messages you're actually sending).