This article will describe how to improve your security using a multi-signature wallet. There are two broad ways to do this. One is to have multiple third parties that you share control of a wallet with, and the other is where you control all of the keys of a wallet, and store them in different locations. The former sacrifices convenience to prevent an attacker extracting your keys through threats of violence. It is also more expensive. The latter is what this article will describe.
This method will provide a solution that improves on the previous article (Single Signature Storage) which was to simply store your own bitcoin with a single private key. Having multiple keys however, which you possess physically, and optionally in your memory as well, increases your security by orders of magnitude — as long as those keys are not stored together in the same place.
It also increases the difficulty of setting this up and is not for everyone.
The greatest risk with this method is making a mistake and losing access to your coins – so you should get good at this process before moving significant funds to the multisignature wallet. The second biggest risk is that an attacker might force you to give up your keys by threatening you. This is why you don’t tell people that you own bitcoin, and you don’t tell them how much you have. Ever.
Preparation – Make Mnemonic Seeds
Make the Wallet.
For a multi-signature wallet, I recommend Electrum Desktop Wallet (Mac or Linux, try to avoid Windows if you can).
NEVER ENTER YOUR SEEDS INTO THE KEYBOARD ON AN INTERNET CONNECTED COMPUTER.
This is supposed to be a super-secure way to store your bitcoin – for your largest stash. You should have a small amount for spending day to day in a more convenient wallet. This wallet is not for convenience, it is for security.
Make an Air-gapped computer. I recommend a $6 Raspberry Pi Zero (which has no internet or bluetooth capability. Total cost with all parts is about $50) It is tricky to install software on a computer with no internet connection. Follow this guide to set it up.
Once it is set up, load Electrum. The following window will appear. Choose next.
This will be the next pop-up. Select multi-signature wallet. Then click Next.
This window will come up allowing you to format how you set up the wallet. I recommend you set up a wallet with 5 cosigners and 3 signatures required. (A 2 of 3 is also good, but I prefer the 3 of 5 as it allows greater flexibility for inheritance planning)
This means that to spend bitcoin, you will need:
- The public keys of 5 seeds
- The private keys of 3 seeds
Note: having 3 seeds is not enough to spend. You need 5 public keys as well. Public keys should be recorded, but they do not need to be kept secure. Anyone can know your public keys and all people could potentially do is see your balance, but not spend your coins.
Also note, each mnemonic seed creates a public AND private key. If you have a seed, you technically have both private and public keys FOR THAT SEED. If you have 4 seeds, and lost the 5th, and have no copy of all the 5th public key stored somewhere, you have lost your bitcoin. Beware. If you don’t understand this, read again carefully, learn more, and don’t proceed until you do.
Next, choose that you have a seed:
Put in your 12 words. But it won’t work unless you click “options” and select “BIP39”.
Feel free to copy all the seeds that I use in this article as a test, but DO NOT send bitcoin to this wallet, otherwise it will be stolen.
You should have created a passphrase (“thirteenth word”) as well, so in the pop-up window, select that you have a passphrase (not shown), and BIP39 Seed (shown) Click Next.
Another window (not shown) will appear asking for your passphrase. Enter it in carefully, there is no confirmation. Note it is case sensitive.
Select native segwit, and click next.
You will be given a Master Public Key. Copy this into a computer file somewhere. It does not need to be very secure, but it should not be lost. Multiple copies in different locations is ok. The seed can always generate this public key, but the seed also creates a private key, so keep the seed secret!
For an unknown reason, master public key #1 is given to you during the setup phase, but the other 4 are not. Not a problem, the public keys can also be retrieved later once the wallet is setup, from the menu (wallet –> information –> keystore).
Click next, and then select “Enter cosigner seed” to enter your second memorised seed. Do not confuse “seed” with “key”
Next, set a password. This is only securing the wallet file that exists on the computer. It does not contribute to the uniqueness of your wallet and the addresses/keys it contains.
The wallet is now created:
Next, click on the “wallet” menu and select “information”
Copy the public key for each cosigner and store it in a computer file. You will need this to generate this wallet later on.
Entering all public keys will create a “watching only” wallet that you cannot spend from. Replacing three of the 5 public keys with private keys (or seeds) will make the same wallet spendable. If you only have 3 seeds, and lost all the public keys, you have lost your bitcoin. Do not confuse the meaning of a 3 of 5 wallet – it is 3 private keys minimum, and ALL 5 public keys.
Before putting bitcoin in this wallet, go to the address tab and copy the first address down, and then delete the wallet. Why? This wallet has 5 private keys. It’s as safe as a single signature wallet. We want to keep the seeds separated, not all together. This wallet was made like this to generate the public keys and addresses.
Now, recreate the wallet on an internet connected computer with 5 PUBLIC keys, to create an unspendable wallet, and test that the same addresses are created. If the addresses are different, you have done something wrong.
This 3 of 5 combination must be as before, otherwise it won’t work, even if you use the correct seeds or public keys.
For all 5 co-signers, select “use a master key”. Make sure there is no space at the end of the public key when you paste it in.
Once your wallet is created, go to the address tab and confirm the addresses are the same. Ideally, you should enter these public keys in a different wallet (public keys, not private or seeds). For example, Specter desktop allows you to enter public keys to generate your addresses.
If two different wallets have created the same addresses, you can now send a test amount of bitcoin to this wallet. Send it to address 1, and then spend the whole amount to address 2. Then spend it back to the wallet it came from as a test.
To spend bitcoin from a “watching only” wallet, you go through the normal process of spending, but in the final step, you save the transaction to a file. Save the file to a USB and take it to a different computer, which has the private keys – it should be an air-gapped computer. On this other computer, use a seed you didn’t use for the first wallet, and 4 other public keys. When loaded, you should see the same addresses (but no balances because there is no connection to the internet). Go to the “tools” menu and “load transaction” from file. Once loaded you can click to sign the transaction. Then you can save the transaction and take it to another computer with a different private key. Any computer, on its own, should not hold sufficient keys to spend. The original wallet you created, with 5 seeds, ideally, you should delete that, start again, and enter only 1 seed, and 4 public keys. You can then not be concerned if that device goes missing.
Once you have generated your watching addresses on two different wallet programs, made a test transaction, stored your seeds safely in different locations, you can now transfer your entire bitcoin balance to this secure wallet. I recommend you do not merge your UTXOs. Move them across individually, each one to a new address.
Ideally, this new wallet should NEVER ask a public node for a balance. This just reveals all your current and future bitcoin addresses, and balances now and future, to surveillance companies. Run your own node, and make your wallet talk to that. Learn why and how (Mac, Raspberry Pi).