Post
Topic
Board Development & Technical Discussion
Re: easyseed(1) secure BIP 39 mnemonic seed phrase generator
by
nullius
on 31/12/2017, 10:55:16 UTC
I like this idea you have.

Personally I am a believer in the entropic properties of dice.

Thanks.  I also like dice, especially via hardcoded output from a fair die roll of 4.  But after you have already gathered some random numbers, consider this food for thought:

Quote from: blog.cr.yp.to
If you’ve somehow managed to generate one secure 256-bit key then from that key you can derive all the ‘random’ numbers you’ll ever need for every cryptographic protocol...  (If you haven’t managed to generate one secure 256-bit key then you have much bigger problems.)

On the same principle, any kind of seed system and/or HD wallet will use a KDF to derive your actual private keys, anyway.  So if your kernel’s PRNG (or your dice) gathers at least 256 bits of “real” randomness, then think of it as if it runs that through a KDF to give you the seed which you will run through a KDF to generate your keys.  That is more or less what happens.

On the other hand, if you really like the idea of hardware randomness, then you may be interested in Turbid.  It generates high-entropy symbols using electrical noise (not acoustical noise) caused by thermodynamic processes in the analogue electronics of an ordinary computer sound card.  It still uses a hash to process its input.  As far as I can see, its main advantage is that it keeps no state; but then, if you can’t trust your computer to keep secret the state of your PRNG, then how can you trust it for whatever crypto you are doing with the output of your True Random Number Generator?

(Side note:  If you use dice, I hope that you know how to extract binary random numbers without the “modulo bias” which unthinking people tend to suffer in such situations.  Or that you have hexadecimal dice.)

Also your comments lead me to point out a serious flaw in the use of off line web pages.

Namely, shouldn't such a web page (a computer program) not operate unless it was off line?

But why would you trust a web page to verify that it was offline?  If you could trust it with that, then you could trust it to operate while you are online, also.

Part of why I wrote easyseed was to have code which can be easily read and compiled offline.  Then, you only need to worry about your compiler.  See, “On Trusting Trust”.