Wallet Security

This week we’ve continued with merging in changes for the 1.8.1 client, which now is down to a handful of more complex patches to test and apply. For those asking, I’ve started looking at the Toshi node that Coinbase released last weekend and feasibility of adding Dogecoin support. I have a version which syncs to around block 6k on test and live Dogecoin networks, however without AuxPoW support it grinds to a halt once the later blocks are relayed to it (and blocks are not delivered in-order, for reasons I’m not entirely sure about to be honest).

With help from /u/kindoge and AndyMeows I’ve patched Bitcoin-ruby to support Dogecoin, which is pre-requisite for supporting the network in Toshi. That patch has been submitted to Bitcoin-ruby’s developers for them to review and hopefully merge. Once that’s done I can then start pushing changes into Toshi so the work in progress is readily visible. Also, if you’re wanting a summary of the parameters used in Dogecoin, Bitcoin-ruby will be a really good source of those values.

Earlier this week there was a post from a user who lost their personal stash of coins from an unencrypted wallet, and I wanted to take this opportunity to talk not just about security best practices, but also why these are best practices. It’s easy to tell you to back up often, encrypt your wallet, not backup into the cloud (or at least, not Dropbox), but we forget it’s why we say these things. Without the rationale being clear, we’re essentially asking you to just believe us.

Firstly, backups. We tell you to back up because of two types of risk:

  • Files being damaged (i.e. power failure while the wallet is being saved)
  • Media the files are on being damaged (i.e. hard drive crash, house fire) or stolen.

The second is important to understand, because we want you to back up somewhere independent to your own PC. I use a hardware encrypted thumbdrive stored at another location. For funds that aren’t needed frequently, or large sums, it’s a good idea to move them to a a paper wallet, or metal wallet such as Cryptocards, stored securely at another location (such as in a bank vault). Paper/metal wallets should be generated offline (as in, on a system that’s never connected to the Internet), eliminating risk of the keys being stolen remotely. Having multiple copies of such physical wallets is also a good idea, especially if using paper which can be easily destroyed by flooding or fire.

The next part to understand is how often; if you backed up once, why do you have to back up again? It’s important to realise that the wallet file doesn’t actually contain your funds, it contains the keys which unlock your funds. When you make a payment, in most cases a new key is taken from a pool within the wallet and any change from the payment is sent to that new key, while a new key is added to the pool. This process is an important part of how anonymisation works in Dogecoin, by making it harder to guess which part of a payment is going to another, and which is being retained by the sender.

Each backup contains that pool as it was when the backup was created. If all keys within the pool are used, and new keys used, they won’t be part of the backup. Fortunately that pool is (by default) 100 keys, so it takes a while to exhaust, but it’s still good practice to make new backups on a regular basis.

The other part of keeping your funds safe is encryption; if you’re making copies of your wallet and leaving it elsewhere, what happens if someone else gets to it? We saw a number of cases early on in Dogecoin’s life where people back up unencrypted wallets to Dropbox and the balances were promptly stolen. Encrypting the wallet protects against someone with the file being able to use it to steal your funds; how well it does this depends on how strong your password is, so pick a good password. Also, obviously don’t tell anyone the password!

Lastly, as I mentioned we’ve seen issues with files being stolen from cloud storage such as Dropbox. As a general rule I’d advise against backing up to such services. The recent issue of celebrity’s personal pictures being stolen from iCloud should reinforce that storing sensitive material online isn’t a good idea, which is why I’d recommend encrypted thumb drives and physical wallets.

For those with very large amounts (especially funds held on behalf of others), we have a security researcher working on a best practices guide, which I’m told is still coming. More on that as I know.

Looking to the week ahead, next steps are finishing patches for the 1.8.1 client, and continued testing of 1.8.1. Live network tests have started for 1.8.1, and the Bitcoin Core 0.9.3 client it is based on has been released (reflecting a high degree of confidence in the code from the Bitcoin team), so hopefully we’ll have a beta of that in the next week or two. I’m going to try taking a look at AuxPoW support for Toshi this afternoon, but that’s likely to stretch over to next weekend as the changes are more involved.

Have a great week everyone!