The use of bitcoin requires that either users store their private data in a ‘wallet file’ in clear text or encrypted, this wallet file still needs protection.
However, there is only one sort of information within the wallet file that is important… the private keys.
Currently the private keys are generated from random data. However, there is nothing stopping us creating these same keys deterministically.
This is what I propose:
Bitcoin should have the option to ‘load a deterministic wallet.’
Creating the Deterministic Wallet:
1. User enters a new password (of good quality) into the ‘load/create a deterministic wallet’ dialogue:
A = sha256 ( password )
B(x) = sha256 ( x )
C(x) = sha256 ( A + B(x) )
Find x, where C(x) < 0x00000000FFFF0000000000000000000000000000000000000000000000000000
(x starts from 0, and increases)
2. Bitcoin then supplies the user with a nonce, base58(x), that the user can supply to both:
a. save time in finding the nonce again
b. check if the password – nonce combo is correct
3. Bitcoin then generates 1000 (or more at the users option) addresses:
D = C(x) , where x = nonce
Key1 made from sha256(D)
Key2 made from sha256(sha256(D))
…
4. The bitcoin client then rescans the block chain for any transactions based upon the newly generated keys.
5. Upon close, the bitcoin client forgets everything, including the password. (optionally we have a setting for the software to store the nonce for convenience)
This system means that if the user keeps the password secret (and, optionally, nonce to save time/check correct entry). The there is NO RECORD or DIGITAL DATA that needs to be kept on any computer (other than the block chain).
This is far more secure than the current system… It is also resistant to brute-force attack, as there is a fair effort required to check through various password.
Edit: The Goal of this system is so that anyone can use their wallet on any computer
no need to backup anything.