etotheipi / BitcoinArmory

Python-Based Bitcoin Software
Other
826 stars 621 forks source link

Custom entropy #162

Open TheMastor opened 10 years ago

TheMastor commented 10 years ago

With the NSA's shenanigans and also this fatal weakness in android there is cause to doubt the entropy sources on many systems.

How about allowing users to simply input their own entropy much like how TrueCrypt allows?

etotheipi commented 10 years ago

It's a long story, but the gist of it is: I encourage responsible use of custom entropy, but will have to think about how to allow it without letting users shoot themselves in the foot. For now, suggesting they do it manually is enough of a barrier, while still giving advanced users the ability to do it.

You can simply open a python shell in the base Bitcoin directory, "from armoryengine import *" (or armoryengine.ALL in 0.90.1+), and then use the makeSixteenBytesEasy() method to convert your custom entropy to into data that can be plugged into the wallet-restore dialog.

Personally, I like maaku's suggestion of shuffling a deck of cards thoroughly, then typing the order of the cards into the hash256() function. Send both halves through the makeSixteenBytesEasy() method and you have a true, analog-entropy root key that can be imported into Armory as a 1.35c backup.

bardiharborow commented 10 years ago

Am I correct in saying that if you mix user-provided entropy in the random stream it can't decrease the total random-ness? For example:

sha256(128_bits_of_entropy + 0_bits_dumb_user_input_that_they_posted_on_the_internet) still has 128bits of entropy. As such, it shouldn't matter if the user input is bad as long as the normal random works.

AndyOfiesh commented 10 years ago

I am certain that whatever unrelated data you add to 128_bits_of_entropy will have at least as much entropy as 128_bits_of_entropy.

The problem is that we would still be giving users enough rope to hang themselves with. If I'm a "dumb" user, I might think to myself, "Nobody will ever guess the root of my entropy, if I just get rid of 128_bits_of_entropy, I can reproduce my root key in case all of the other backups fail." I might have been that "dumb" user myself if etotheipi hadn't schooled me in the importance of good entropy.