I am about to start the process of transferring my ETH to paper wallets for safe keeping. Currently the funds are stored on an online exchange. History shows that this is a very bad idea. It is not much, but my threat-model is only on loosing the ETH. The questions relate to the creation of secure paper wallets.
For convenience I would like to use web wallet creation tools, such as MyEtherWallet and/or EthAddress. I analysed their source code and in none of them I could find a possible backdoor. (I couldn’t find - that doesn’t mean there isn’t)
What I did was:
- Verified the TLS certificate chain of github.com
- Download the code from the GitHub repos
- Reviewed all the code, especially the JavaScript functions
- Checked and compared if they used the same unmodified Ethereum JavaScript classes from the official repo
- Analyzed the wallet creation code
- Debugged each step with the dev tools in the browser
- Generated 1000 wallets for a very short collision test
I now know that it uses window.crypto.getRandomValues
for its PRNG, which is currently the best way in a web-browser, without using a third-party library. And they don’t use broken hashing algorithms.
Possible issues:
- Collisions of wallet address public key (less likely with a cryptographically secure entropy/randomness source and the length of 40 characters - compared to Bitcoin’s 34-1 chars)
- Bug in the code of the website and/or bug in the EthereumJS libs and/or the crypto implementations (It wouldn't be the first time it would contain a heavy bug in ethereumJS-utils)
- Probably less tested in production than the official desktop wallet software
Precausions:
- Creating the wallets on an air-gapped computer
- Encrypting and storing the information in multiple physical locations
- Wipe browser cache
Questions that need answering:
- Will the wallets created at this moment in time be backwards compatible in the future? (Metropolis, Serenity, ...)
- How do I verify if the wallets have been created correctly (private key), without first sending a small amount in and out of the wallet?
- Is there anything else I have to consider and I am correct with my assumptions?
- Why are there only third-party web wallet creation pages on the internet and no official ones (yet)? (Maybe because of: Ethereum: "We are making tools for tool-makers“?)
Thank you very much