I am in the process of writing up a set of “Best Practices” guidelines in regards to Bitcoin’s for the use internally within the company that I work for.
There is one hole in my test plans that I would like to fill in regards to Encrypted Wallets. I have a plan for unencrypted wallets that goes something like this;-
* New private key generated
* Wallet corrupted (note: before backup, bdb file is corrupted)
* pywallet fails to extract new key
* wallet-recover fails to extract new key (see this for what I mean) https://bitcointalk.org/index.php?topic=25091.0;all
* Hex editor fails to extract new key (tested, but not documented as yet. See https://bitcointalksearch.org/topic/help-with-walletdat-8274 )
* Bitcoin’s lost! (not the ideal end for a test plan, but it is a valid one)
Now I want to replicate the plan above with Encrypted wallets but I am at a bit of a loss as how to achieve this.
I think I have identified the keys in an encrypted wallet ( they start with “63 6B 65 79 21”, or “cKey!”) but I now need pointers on how to extract the correct amounts of bytes and decrypt them (assuming I have the pass phrase).
Once I achieve this I will gladly report my findings back here, I might even dust off my very rusty programming skills and backport it to one of the above tool’s (most likely wallet-recover)
Thanks.
(Disclosure: I am biased, since I wrote Armory) This is one very good reason to be using deterministic wallets like Armory uses (and other alternative clients). You create an encrypted wallet, and before you use it the first time, you create paper backups (which are unencrypted, but you can encrypt the information manually before printing, if you want). Put it in a safe-deposit box or any other means you consider secure.
Now you can generate an infinite number of addresses, and never have to worry about permanent loss. Ever. If the wallet is corrupted or HDD fails, just get a new computer, and restore the wallet from the paper backup. All money is recovered.
And of course, Armory additionally lets you maintain the private keys offline but still use a watching-only wallet to generate/distribute addresses and monitor payments, but without risk of compromise. If you need to move the coins, use a USB key to get the offline computer to sign the transaction. Of course, the offline computer should have limited access, but you can still keep the keys encrypted on it in case someone does get access to it. I designed this feature with businesses in mind (and regular users, but businesses really require this level of robustness and security)