Bitwala: Why we're still using Bitgo, despite the Bitfinex hack!

in #bitcoin8 years ago (edited)

Bitwala Bitcoin Wallet Bitgo

You're moving to Ghana?

Ebola had reached its peak and the whole world was freaking out.

I'd just accepted a volunteering job teaching code in Accra and to the average news-reader, moving to West-Africa was dangerous.

Guess what? Ebola never made it to Ghana.

ebola_-_Explore_-_Google_Trends

bitgo_-_Explore_-_Google_Trends

BitGo was not hacked


Just like with Ebola, my peers were shocked that we choose to launch a wallet services using a provider that was recently "hacked".

BitGo was the wallet software used by Bitfinex who lost $60m of its customers' funds.

The bitcoins were stolen from a BitGo wallet, so it's their fault, right? Wrong.

The problem arose not from the BitGo software, but how it was implemented.

Multisig wallets can still be hot wallets


Multisignature wallets are great for bitcoin businesses. It refers to a setup where more than one private key is needed to move bitcoin.

Jan, Jörg and I are 3 co-founders. If we ever need to manage bitcoin for our customers, we'd probably set up a cold wallet requiring 2-of-3 keys to access the funds. This means that if one of us goes rogue, or is about to be sexually assaulted by a group of skinheads (watch Mr. Robot), it still wouldn't be enough.

Before multisig, we probably would have each had a copy of the same key, meaning that only one of us has to be compromised to steal user funds.

This is still on Bitfinex's frontpage

The Bitfinex setup allowed the attackers to gain access to at least two keys. If two-of-three keys were on the server or stored in a database, an attacker would have everything they need.

Ok, it's a little more complicated


BitGo offers an API to create multi-sig wallets. For each wallet, there are 3 keys:

The user key

  • Generated on the user's machine
  • Encrypted with a password on the user's machine
  • Sent to BitGo.

The backup key

  • Generated on the user's machine
  • Encrypted with a password on the user's machine

BitGo key

  • This is generated and stored by BitGo
  • BitGo will co-sign any transaction sent to it via an authenticated API request

Let's ask some questions

BitGo has two keys? Can't they steal my bitcoins?

Yes. No. They do have two keys, (user and BitGo keys) but the user key is encrypted, and without the password they can't use it to access your Bitcoins.

What if BitGo gets hacked?

No problem. When you created a wallet, you downloaded your backup card and made a note of your password to allow for recovery of funds.

What if Bitwala goes bankrupt or just wants to have a really expensive party?

We appreciate your faith in us. See previous answer ^^.

Could what happen to Bitfinex happen to Bitwala?

To the best of our knowledge, this is impossible. Bitfinex is an exchange which needs to be able to move its users funds around without them authorising every transaction. We offer a wallet and don't need to make transactions on your behalf.

We don't have access to your Bitcoins. Your private keys are generated and encrypted in your browser. The information needed to access your bitcoins is never stored in our database or passes through our servers.

Is BitGo completely innocent?


BitGo have had a real rough time and their reputation will never fully recover, but do they deserve this?

They received signed transactions and properly authorised requests. They were simply 'following orders'.

As someone who's implemented their software, they could've done a few things better:

They should've noticed something was going on


BitGo lets you set wallet policies, but regardless of whether Bitfinex implemented this or not, there should've been some kind of alarm with such abnormal behaviour.

Their API documentation points you to an insecure implementation


tl;dr It's way easier and faster to do things insecurely and the API seems to encourage this.

BitGo_API_Reference

The BitGo documentation encourages you to use the simpler methods to create a wallet.

To be allowed to communicate with BitGo's API, you need to authenticate yourself. You can either:

  • Wallet per BitGo User - Have users create their own account via the BitGo website (one wallet per BitGo user)
  • Segregated wallets - Create an authentication token (one BitGo user with many wallets)
The first option is a complete no-go for startups. We want users to stay on our page and feel connected with our brand. How unsexy is it to ask users to go visit another site and come back when they've created a wallet?

Therefore, the authentication token is the only way to go. It's less secure, as you can use that single token to authenticate all of the wallets for the user.

If you want to ensure that you never store or have access to the data needed to access your customers' bitcoin, it's actually quite complicated. This is what we do:

CLIENT

  • Generate user key
  • Generate backup key
  • Encrypt both keys with password
SERVER
  • Request BitGo create a new key
  • Send public key to client
CLIENT
  • Put the three public keys together
SERVER
  • Use 3 public keys to create a wallet
All these steps can be replaced by one line of code create wallet with keychain. This method should be run on the client, but this is impossible unless you authenticate in (inappropriate for nearly all companies) Wallet per BitGo User model, as otherwise authentication has to be done on the server.

Are they the right choice for Bitwala?

Yes. BitGo is an extremely convenient and secure system when properly implemented.

What do you think of BitGo and multisignature wallets? Let us know in the comments.

Create your wallet

Sort:  

I did think the demonization of BitGo was a bit reflexive after the hack.

Hey you know, #BitGo to Build Its First Qualified Custodian for #Cryptocurrency Assets
Just go through this reference: https://goo.gl/xJ3Bi4