Skip to content

COLDCARD Paranoid Guide

Tutorial and images by econoalchemist.

A paranoid guide for advanced users with a focus on security, privacy, and verification to ensure their self-custodied cold storage wallet is ready for adversarial environments. By following this guide, you will be prepared for storing your keys on a COLDCARD® that shall never — in its entire life — be connected to a computer of any kind. It will always get power from COLDPOWER or similar. Sneakernet via microSD shall be used for firmware upgrades and PSBT transfers.

This guide covers: - Checking the tamper-evident bag - Verifying and updating firmware - Setting up a PIN - Verifying the dice roll math - Generating seed words with 256 bits of entropy by dice rolls - Creating a passphrase - Verifying the Sparrow Wallet download - Air-gapped communication and transacting between COLDCARD and Sparrow Wallet - Steel plate backup demonstration

Checking the tamper-evident bag#

Upon receiving your COLDCARD, ensure that the tamper-evident bag has not been compromised. If anything seems amiss or if you have any problems contact [email protected]. Visually inspect the surfaces and edges of the bag for indications of tampering, openings, or damage. The concern is being victim of a supply chain attack in which your COLDCARD gets intercepted in transit and modified in a way that puts your funds at risk. Ensuring the integrity of the tamper-evident bag is the first step in mitigating this type of sophisticated attack.

You will see the tamper-evident words "VOID" appear when the seal is opened. Inside you will find your new COLDCARD, the Wallet Recovery Backup Card, sticker(s), and an additional copy of the bag number which should match the bag number printed on the outside of the bag.

If everything looks good, then you are ready to power on your new COLDCARD and get it setup. Here is a diagram you can reference to learn the COLDCARD's navigation:

Verifying and updating firmware#

Stay up to date on firmware releases, follow the Twitter account @COLDCARDwallet, or bookmark the Coinkite Blog. Firmware upgrades provide new features, enhancements, bug fixes, and the latest security updates to your COLDCARD. Firmware upgrade files have a .dfu file extension and should be approximately 690 kB in size. The abbreviation should be 20...-coldcard.dfu to represent the full firmware file name. Make sure to use the full file name in your commands. COLDCARDs will only load and run files signed by a Coinkite approved key.

A great security feature of the COLDCARD is that it can be used completely air-gapped. Meaning that you never have to connect it to a computer, although the option to is there if you choose to use it. You can use a standard USB outlet transformer or even a 9-volt battery with the COLDPOWER adaptor, which Coinkite offers here. To power on the COLDCARD simply connect a USB to micro USB cable to the port on top of the COLDCARD and the other end to the USB port on your COLDPOWER adaptor and 9-volt battery and flip the switch on the side of the COLDPOWER adaptor.

Once powered on, first read and accept the terms of sale and use. Then you will be asked to confirm the bag number. If there are any discrepancies, contact [email protected].

Next, figure out which firmware version the COLDCARD currently has on it by selecting Advanced and then scroll down to Upgrade Firmware and finally Show Version. If your displayed firmware version is older than the most recent version available on the Coinkite website here, then follow the next steps to upgrade.

Even the firmware can be upgraded air-gapped by utilizing the microSD card. These steps will show you how to do that and verify the integrity of the firmware file on a Windows desktop using Kleopatra OpenPGP from the GPG4win bundle. If you are using a Linux distribution, you will want to use GnuPG. Or if you are using a Mac, you will want to use GPGtools. You can also watch this video tutorial. The basic process here is to save the PGP signed hash value of the .dfu firmware file and verify it with Doc Hex's PGP public key and then calculate your own hash value on the firmware file to confirm.

From the Coinkite website, click on the link for the latest firmware version at the top of the page. This will automatically download a .dfu file.

From that same web page, scroll down towards the bottom to the advanced section and then click on the "this clear-signed text file" link. That link will open a PGP signed message containing the SHA256 hash values of various firmware versions.

You want to save this PGP signed message as an .asc file, you can just hit ctrl + S from your web browser and you should be presented with a pop-up window like the one below. Make sure you have the All Files (*.*) option selected from the Save as type: drop-down menu. And then save the file with the .asc extension. You can leave it named signatures.

Next, you need to get Doc Hex's public PGP key and import it to your Kleopatra keychain so you can certify it. Doc Hex's public key can be copied from this keyserver here.

Once you copy his public key to your clipboard, then in Kleopatra navigate to Tools then Clipboard then Certificate Import. You will then be asked for your PGP password to certify Doc Hex's public key. Once certified, this public key will be added to your keychain.

You can confirm that the finger print of the public key you just imported for Doc Hex matches the fingerprint of the Doc Hex account from KeyBase here.

Now that you have Doc Hex's key imported and certified, you can verify that the signed message with the firmware hash values was actually signed by Doc Hex. Open the folder containing the signed message .asc file and right click on it, then select More GpgEX options then Verify.

Kleopatra will start calculating the veracity of the signature and after a moment, you should receive a dialog box confirming that the signature matches the public key you certified.

At this point, you have verified that the PGP signed message containing the hash values for the firmware files was in fact signed by Doc Hex. But you now need to verify that the .dfu firmware file does in fact return the same hash value as the one in the signed message.

To do this, a freeware hex editing program called HxD is a user-friendly tool. Once the application is downloaded and launched, simply navigate to File then select Open and navigate to the file path where you have the firmware .dfu file is saved. Once opened, then navigate to Analysis then Checksums then scroll down to SHA-256 and hit OK. Then the software will return the calculated Sha256 hash value on the firmware file you downloaded. Visually compare this returned hash value with the hash value that you can look at in the signed message by opening it with a text editor.

Now you know that the firmware file you downloaded is an exact match to the file that Coinkite intended you receive and that it is safe to install on your new COLDCARD.

Using a microSD card (up to 32 GB capacity, FAT32 or FAT12 format) and a USB adaptor, insert them into your desktop. Once recognized, just drag and drop the firmware .dfu file onto the microSD card. Then safely eject the microSD card.

Turn the COLDCARD over and insert the microSD card into the slot until it clicks in place.

You should still be in the Advanced menu, then scroll down to Upgrade Firmware > From MicroSD then select the firmware file. This will take a moment to automatically load, verify and upgrade.

With the firmware now upgraded, you're ready to move on and set your PIN number.

Setting up a PIN#

Make careful considerations with your PIN number. You don't want to use one that is easy to guess. Your PIN will have two parts, a prefix and suffix. The way the PIN works after you set it all up is that once you enter the prefix, you will be presented with two anti-phishing words. If the words are the same as the original words presented to you at initial setup, then you know that your COLDCARD has not been tampered with since the last time you accessed it. After confirming the anti-phishing words, you then enter the PIN suffix and if all is correct you will be permitted access to the COLDCARD.

First, select Choose PIN Code, then you will see a brief description of how the PIN code works. Each part of your PIN code can be between 2 and 6 digits. There is absolutely no way to access a forgotten or lost PIN. Also, if you enter a PIN incorrectly too many times, it will brick your COLDCARD as a security feature.

After hitting OK (✔) you will get one more warning about the risk of losing or forgetting your PIN. After reading that, you can enter your PIN prefix. Use the included notecard to write down your PIN prefix then hit OK (✔).

Next you will be presented with your two anti-phishing words. Write these down on your notecard.

Next, enter your PIN suffix, then write it down on the notecard and hit OK (✔).

Then you will be asked to re-enter your PIN prefix, confirm the two anti-phishing words, and enter your PIN suffix. The COLDCARD will save that information and then open up the wallet where you can generate your test seed words for verifying the dice roll math before generating your real seed words. Anyone who gains access to your PIN number will be able to login to your COLDCARD so ensure that this information is secured.

Verifying the dice roll math#

In this section you will see how to verify that the COLDCARD dice roll math is doing what it purports to be doing. Understanding that it is not advisable to use your actual dice rolls to validate the dice roll math is important. Meaning that a user only should enter a few dice rolls, write them down, and generate the list of 24 words and then verify that information. This is only to satisfy one's curiosity that the COLDCARD is producing a list of seed words that accurately represent the random dice rolls that the user entered. Once that curiosity has been satisfied, then the process should be repeated without typing the dice rolls into a computer. By typing into a computer the actual entropy used in calculating seed words that will be funded, the user risks potential loss of funds if the computer has been compromised. Additionally, this would diminish the benefits of having an air-gapped cold storage wallet since the computer is a network connected device. Typing seed words or dice rolls for an actual wallet that the user plans to fund is a bad idea. Simply use this information as a guide to understand that the COLDCARD is doing what it purports to be doing and then do the actual wallet creation with information that is never typed into the computer. Another resource for the dice roll math verification can be found here.

First, navigate to Import Existing then Dice Rolls.

Once there, the "0 rolls" screen will always be displayed with the hash value, e3b0c... 27ae4... b855 since that is SHA-256 over an empty string. The keys 1-6 on the COLDCARD can be used to enter the values that correspond to the results of each dice roll.

Write down each dice roll as it is entered into the COLDCARD. Do as many rolls as it takes to satisfy your curiosity. In this example, 100 dice rolls.

With a pen and notepad, start rolling the dice, writing down the number 1-6, and entering the number on the COLDCARD as you go along.

Now that the dice rolls have been copied to the notebook and entered into the COLDCARD, see what 24 seed words the COLDCARD comes up with by selecting OK (✔) on the COLDCARD, the list of 24-words should then be presented. Also write these down in order along with the dice rolls.

I did the following on a Raspberry Pi in the CLI shell. The idea with the following command is to verify the SHA-256 hash value of the entered dice roll. In my example, my dice roll was 100 numbers in length and the resulting hash value was a match compared to the one displayed on the COLDCARD when I reached 100 rolls. So enter the following command in your terminal replacing 123456 with the dice rolls your wrote down.

$ echo -n 123456 | sha256sum

Now it has been verified that the resulting hash value displayed on the COLDCARD does indeed represent the numbers from the entered dice rolls. But how do we know the hash value really generates the same 24 words?

The ideal environment to perform this verification is a computer running Tails - The Amnesic Incognito Live System, preferable without any network connection and no hard drives. Do not use your actual dice rolls on a normal desktop system as that will completely compromise the security of your COLDCARD!

Simply navigate to: https://coldcard.com/docs/rolls.py and save the script. From the command line terminal, change directories to where you saved it. Once there, run the following command with the same dice rolls used on the first command, again replacing '123456' with the dice rolls you wrote down.

$ echo 123456 | python3 rolls.py

If you need 12 word seed navigate to: https://coldcard.com/docs/rolls.py and save the script.

$ echo 123456 | python3 rolls12.py

The returned data will be a list of 24 words that should match the ones written in the notebook.

Now the 24 seed words have been independently verified and the COLDCARD can be trusted to be doing what it purports to be doing. Once your curiosity has been satisfied that everything is working as expected and advertised, now repeat the process with you actual dice rolls on the COLDCARD and do not enter them into the computer when you're done.

Generating seed words with 256 bits of entropy by dice rolls#

There are a couple considerations you may want to make when creating seed words. For example, COLDCARD will generate 24 seed words for you by default, as demonstrated in the Ultra Quick guide. However, maybe you don't trust the True Random Number Generator (TRNG) in your COLDCARD, you can introduce some of your own randomness using a six sided dice and combine that with the COLDCARD's TRNG entropy as demonstrated in the Ultra Quick guide. In this guide though, you'll see how to generate a full 256 bits of entropy with dice rolls now that you have verified the dice roll math is doing what it purports to be doing.

Starting at the COLDCARD main menu. Select New Wallet and after a moment you will be presented with 24 words. However, to use your own dice roll randomness, scroll down to the bottom of the word list and press 4 to add at least 99 dice rolls.

Entropy is calculated by using: log2(6) = 2.58. Where the 6 is the number of sides on the dice. For reference, it would take the world's most powerful super computer trillions of years to brute force a 256 bit key. Start rolling the dice and enter the corresponding number for each roll. Repeat this process at least 99 times for the full 256 bits of entropy.

Once you are satisfied with the number of rolls hit OK (✔). Now you will be presented with a new list of 24 words. Write these words down in order on your notecard. Then double check your work.

Next, you will be asked to take a test to prove you wrote the words down correctly.

After passing the test, you will be at the COLDCARD's main menu, and that's it, you have generated a random 256 bit key that was used to calculate your 24 seed words. Best practice at this point is to test your backup information before depositing any Bitcoin. The basic idea is to use only your written backup information in an attempt to restore your wallet. If all of your backup information is correct and you successfully restore your wallet then you know that you can recover any Bitcoin deposited to that wallet with that backup information. First you need a way to identify your wallet. Your newly generated wallet has a unique fingerprint which you can find from the main menu by navigating to Advanced > View Identity. You will find a unique 8-character fingerprint such as 99E870EF. Write that fingerprint down. Now you can destroy the seed on your COLDCARD by again navigating to Advanced then Danger Zone > Seed Functions > Destroy Seed. Then you will be presented with a couple of warnings, after confirming, your seed will be destroyed and you will be brought back to the login page where you enter your PIN. Log back into your COLDCARD and from the main menu navigate to Import Existing > 24 words and then start entering your seed words in order from your backup card. Start by scrolling down until you see the first letter of your word, then scroll down to the next nearest part of the word, and keep narrowing down the search until you arrive at the word you need. For example, t > th > thr > throw then hit OK (✔) and repeat the process for the next word. If you make a mistake, you can hit X to go back and reselect a word. After you enter the 23rd word, COLDCARD will compute a list of 8 possible options for your 24th word. Select your 24th word from that list. If you do not see your 24th word on that list then you either made a mistake entering the first 23 words or you wrote down your backup information incorrectly. After selecting the 24th word and hitting OK (✔) the seed will be applied and then you can navigate back to Advanced > View Identity and confirm the fingerprint is correct.

Once you are confident in your backup information, you can add a passphrase to your 24 seed words for additional security.

Creating a passphrase#

A passphrase can be thought of as a "25th word" that only you know. The passphrase can be anything you want it to be and is not restricted to the BIP-39 word list like the other 24 seed words. Passphrases can include upper case letters, lower case letters, numbers, or any ASCII characters. Passphrases on a COLDCARD can be up to 100 characters in length. By adding a passphrase to your 24 seed words, you ensure that two pieces of information are required to gain access to your Bitcoin. Which is why I recommend using high-entropy passphrases, because if someone gains access to your 24 seed words then the only thing protecting your Bitcoin is the strength of your passphrase. These two pieces of information can be stored in separate geographic locations and stamped into metal for added security and safeguard against environmental hazards. Using multiple passphrases on the same 24 seed words can open up some interesting duress possibilities where the user can keep a small amount of honeypot funds while still protecting the majority stash.

Important to note is that any passphrase entered will generate a fully functional and valid wallet, whether this wallet contains the keys to your Bitcoin depends on your ability to enter the exact same passphrase again. Ensure that you write down your passphrase correctly. There is absolutely no way for the COLDCARD to know what your passphrase is. There is no way to recover a lost or forgotten passphrase.

When you add a passphrase to the 24 seed words, the new wallet will have its own fingerprint. This fingerprint can be used to verify that you have entered your passphrase correctly. You can start to see how this adds some complexity to securing your Bitcoin. Keep this in mind and what your threat model is. Ask yourself how you will secure your recovery information, and how your loved ones would recover your Bitcoin if you were gone.

From the main menu, select Passphrase, then you will see a short explanation that warns you about how passphrases are not recoverable so if you lose your passphrase then you will lose access to your funds. It also warns you that any passphrase you enter will generate a completely separate wallet. After reading through the warning select OK (✔) to continue, then select Edit Phrase and you have a few options of passphrases you can enter:

  • Choose any assortment of characters, for example: &BBq*$@R^!%nu6Y5
  • Choose from lowercase words, for example: alarm wool culture nothing exercise
  • Choose from uppercase words, for example: NOVEL RITUAL BOOK INDICATE VOLCANO
  • Choose any assortment of numbers, for example: 582328549321278677354
  • Choose any combination of any of the above, for example: &BBqNOVELalarmRITUALwool5823

You can make your passphrase whatever you want. Just keep in mind that if you lose it, you lose your Bitcoin. Keep in mind too that it may not be you recovering your funds, it might be your spouse or child or someone else, so think about how complex your security model is and if they will be able to use it if you were gone.

Once you have entered the passphrase you want, select APPLY then you will be presented with the new wallet fingerprint. It is important to write this fingerprint down so that you can always verify that your passphrase was entered correctly. Then hit OK (✔) to enter this new wallet.

At this point, it is best practice to double check your work by trying to regenerate this fingerprint. If you have properly documented everything, then you should be able to log out of the COLDCARD, power it down, power it back on, log in again, re-apply the passphrase and get the same fingerprint from the wallet. If everything checks out then make sure you secure your passphrase and your 24 seed words in a way that satisfies your unique threat model.

Next, you will see how to download and verify Sparrow Wallet.

Verifying the Sparrow Wallet Download#

Sparrow Wallet is a Bitcoin wallet designed to be connected with your own node and ran from your desktop or laptop computer. This is a user-friendly wallet with an intuitive interface and many advanced features for a range of capabilities. To learn more about Sparrow Wallet and for installation instructions, visit the Sparrow Wallet website.

In this section you will see how to verify the integrity of the Sparrow Wallet download on a Windows desktop using Kleopatra OpenPGP from the GPG4win bundle. If you are using a Linux distribution, you will want to use GnuPG. Or if you are using a Mac, you will want to use GPGtools. The basic process here is to save the PGP signed hash values of the releases and verify them with Craig Raw's PGP public key and then calculate your own hash value on the firmware file to confirm.

The first step is to add Craig's PGP public key to your keychain. You can download his public key from KeyBase here. If you are using Kleopatra, you can just copy the PGP public key to your clipboard and then navigate to Tools > Clipboard > Certificate Import. Then you can certify the PGP public key.

Once you have the certificate import complete, navigate to the Sparrow Wallet download page where you will want to download the appropriate Sparrow Wallet file for your operating system as well as the Manifest and Manifest Signature files.

With those files saved in the same file directory, right-click on the Sparrow-x.x.x-Manifest.txt file then More GpgEX options > Verify.

Then Kleopatra will verify the signature of the Manifest file against the certified PGP public key you imported and produce a valid result.

Now you know that the contents of the Manifest.txt file are valid and signed by Craig's PGP key. What you want to do at this point is verify that the Sparrow Wallet file you downloaded computes the same hash value as the one contained in the Manifest.txt file. To do this, a freeware hex editing program called HxD is a user-friendly tool. Once the application is downloaded and launched, simply navigate to File then select Open and navigate to the file path where you have the Sparrow Wallet file is saved. Once opened, then navigate to Analysis then Checksums then scroll down to SHA-256 and hit OK. Then the software will return the calculated Sha256 hash value on the firmware file you downloaded. Visually compare this returned hash value with the hash value that you can look at in the signed message by opening it with a text editor.

Now you can double-click on the Sparrow Wallet .exe file and launch the installation wizard that will guide you through installing Sparrow Wallet.

Next we'll get the COLDCARD configured as a "watch-only" wallet in Sparrow Wallet and demonstrate how to transact in an air-gapped fashion.

Connecting COLDCARD to Sparrow Wallet#

In this section you will see how to connect your COLDCARD to Sparrow Wallet using a your own Electrum Rust Server connected over Tor. If you don't have your own Electrum Rust Server, you can use Bitcoin Core as a backend as demonstrated in the Middle Ground guide. However, Bitcoin Core stores your wallet balances and XPUB unencrypted on your desktop. Or if you don't have your own Bitcoin node, you can use reputable public Electrum servers as demonstrated in the Middle Ground guide. However, there are privacy tradeoffs that come with using the convenience of a public Electrum server. Luckily there are a number of resources available to help you spin up your own Bitcoin node, to learn more check out:

In this guide, RaspiBlitz will be demonstrated as the provider of the Electrum Rust server. Not because this has anything to do with Lightning, only because RaspiBlitz is an easy to install and stable Bitcoin node that features Electrum Rust server capabilities that are really easy to configure with Sparrow Wallet. Unlike Bitcoin Core though, RaspiBlitz is designed to be run on the ARM64 architecture as you would find in single-board computers such as a Raspberry Pi. Here is a guide on building a RaspiBlitz if you need it. Once you have your Bitcoin node ready, there are a couple steps needed to configure it to work with Sparrow Wallet.

Since RaspiBlitz is running on a remote computer, you need to SSH into the Raspberry Pi and gather some information. First, you need to initiate Electrum Rust Server which can take several hours as it indexes the entire blockchain. From your RaspiBlitz main menu, scroll down to and select SERVICES > BTC Electrum Rust Server. Then follow the prompts to initiate the indexing and give the operation plenty of time to run.

After Electrum Rust Server is initialized and indexed, you will notice that there is a new ELECTRS option on your RaspiBlitz main menu. Select that menu option.

Next you will see the option to CONNECT, select that option and you will be presented with the necessary information that is needed to enter into the Sparrow Wallet server configuration. You want to copy the entire .onion URL and observe the port number, typically 50002. This is the information you will put in the Sparrow Wallet server configuration. The .onion URL has been censored for privacy reasons in the photos below, this is information you want to keep private.

Ensure that you have your Tor browser open and connected. Also launch Sparrow Wallet and then navigate to File > Preferences then click on the Server tab on the left-hand side. Click on the Private Electrum tab for the Server Type then paste the .onion URL and enter the port number. Test the network connection from Sparrow Wallet. If it’s good, you should see the green check mark next to Test Connection and some information populated in the dialog box below that. Then you can close that window.

Sparrow Wallet is now configured to use your private Electrum Rust Server as a backend over Tor. To learn more about Sparrow Wallet best practices, check out this Sparrow Wallet resource guide.

Now that Sparrow Wallet is connected with Electrum Rust Sever, this is a good time to get the watch-only wallet file exported from the COLDCARD. Then it can be imported to Sparrow Wallet. So connect your COLDCARD to the COLDPOWER adaptor and log into the COLDCARD.

In order to keep your COLDCARD air-gapped, the Partially Signed Bitcoin Transaction (PSBT) can be utilized to spend Bitcoin from the COLDCARD without ever connecting it to the internet. Basically, the public information from the COLDCARD called an XPUB will be used to import the necessary information into Sparrow Wallet on our desktop. By doing this, Sparrow Wallet will be able to generate receive addresses and QR codes, monitor the COLDCARD's balance, and initiate PSBTs. All without exposing any of the private information from the COLDCARD, like the signing key.

You will use the microSD card to transfer information between the desktop and the COLDCARD. Ensure the microSD card is inserted to the COLDCARD.

First, the .json file needs to be exported from the COLDCARD, which will contain all the public information necessary so that Sparrow Wallet can import this watch-only wallet. From the COLDCARD main menu select Advanced > MicroSD Card > Export Wallet > Generic JSON. You can leave the account number blank.

This is going to write the file to the microSD card, then you can connect that microSD card to your desktop computer with your USB adaptor. Copy/paste the exported .json file to your desktop from the microSD card. Note the file location and now you will switch back to Sparrow Wallet to get it ready to import the .json file.

In Sparrow Wallet, create a new wallet by selecting File > New Wallet, then you will be asked to name this wallet. Name the wallet whatever you want then click on Create Wallet. You will notice in the Sparrow Wallet interface lower right-hand corner that the color has changed to blue on the toggle switch. This indicates that your wallet is using your instance of Electrum Rust Server as the back end.

You will see the following screen, you can leave all the settings on the defaults. Then select Airgapped Hardware Wallet.

A screen will pop up and you can click on the Import File... button next to the COLDCARD icon. This will open your file explorer where you can point Sparrow Wallet to the file location containing the exported COLDCARD .json file. Select that file and click on open.

After a moment, you will see a summary of the wallet you are about to apply. You will notice a "Master fingerprint" dialog box with 8-characters in it. You can use this unique identifier to confirm that you are importing the correct wallet from your COLDCARD.

On your COLDCARD, from the main menu, navigate down to Advanced > View Identity and you can compare the displayed fingerprint to the one displayed in Sparrow Wallet. This is especially important to confirm if you have added a passphrase which was covered in the Creating a passphrase section.

If everything looks good, then click on Apply in Sparrow Wallet.

After clicking on Apply, you will have the opportunity to add a password to your wallet. This is a password which will encrypt the Sparrow Wallet data file that is saved on your computer. This password can protect your wallet if someone else gains access to your desktop and Sparrow Wallet file. If you forget your password, you will need to create a new wallet file by repeating this whole process.

You can also save a list of deposit addresses from your COLDCARD and compare this saved list to Sparrow Wallet to ensure the correct wallet is loaded without having to retrieve your COLDCARD, login to it, and compare the deposit addresses there. To do this, select the Receive tab in Sparrow Wallet then you can view the first receiving address from your COLDCARD and its QR code. On your COLDCARD, make sure you insert the microSD card and enter your passphrase if applicable. Then from the main menu, select Address Explorer. This will bring up a few address types that you can choose to view. Your COLDCARD can use legacy P2PKH Bitcoin addresses that start with "1", or nested SegWit P2SH Bitcoin addresses that start with "3", or Native SegWit Bech32 Bitcoin addresses that start with "bc1". Then you want to press 1 and this will save the first 250 addresses to a .csv file on your microSD card. You can also open the addresses.csv file with a text editor on your desktop to view the 250 addresses you exported from your COLDCARD and compare them to your Sparrow Wallet just for the added assurance.

After applying the changes, you can now navigate through your watch-only wallet in Sparrow Wallet. On the left-hand side of the Sparrow Wallet interface there are six tabs. The Transactions tab is where you can see information related to the transactions in this watch-only wallet. The Send tab is where you can create the PSBTs to then export for signing by the COLDCARD. The Receive tab is where you can generate receive address for your COLDCARD without having to plug in your COLDCARD and log into it. The Addresses tab shows several deposit and change addresses as well as any balances. The UTXOs tab shows any unspent transaction outputs and a small graph charting the history. Finally, the Settings tab is where you can see detailed information about the watch-only wallet such as the master fingerprint, derivation path, and XPUB.

Now you can click on the Receive tab on the left-hand side of the Sparrow Wallet interface. Then you will be presented with a Bitcoin receiving address, a QR code, and some additional details. You can scan this QR code with your mobile Bitcoin wallet, for example, and deposit some Bitcoin to your COLDCARD. You should see the transaction show up in Sparrow Wallet after a moment along with a pop-up notification. Also, in Bitcoin Core, the transactions should show up there as well. The transaction will remain in a pending status until it receives some blockchain confirmations. In the mean-time, you can click on the Transactions tab and review further details about your transaction. You can also copy/paste your transaction ID in mempool.space to watch for your first confirmation, or use whatever your preferred block explorer is. Tor Browser is a privacy-focused browser.

Now you can power off and secure your COLDCARD in a safe place until you want to sign a transaction and spend from it, several addresses will be catalogued in Sparrow Wallet so you can continue depositing to your COLDCARD via Sparrow Wallet without having to reconnect it every time. It is best practice to confirm each receiving address on the COLDCARD itself and or your saved .csv file and additionally to only use each address once.

When you are ready to sign a transaction to spend Bitcoin, it is necessary to create a PSBT in order to maintain the air-gapped benefit. You can deposit Bitcoin with your COLDCARD disconnected but to spend Bitcoin, the COLDCARD needs to sign the transaction. Sparrow Wallet is used to build the transaction based on your available Unspent Transaction Outputs (UTXOs) and the information you enter when constructing the transaction. The PSBT details are passed between Sparrow Wallet and the COLDCARD using the microSD card.

To create a PSBT, navigate to the Send tab on the left-hand side in Sparrow Wallet. There, you can paste the address you are sending to, add a label, enter an amount to send, and choose a miners fee rate, etc. Once you have everything set, click on Create Transaction. On the next screen, double check the details then click on Finalize Transaction for Signing. Then you will be asked what you want to do with the finalized PSBT. In this case, click on Save Transaction and Sparrow Wallet will launch the file explorer. Navigate to the microSD card and save the PSBT there. Then safely eject the microSD card.

Insert the microSD card into the COLDCARD. If necessary, power on your COLDCARD using the COLDPOWER 9-volt battery adaptor or USB adaptor. Then enter your COLDCARD PIN prefix, verify your anti-phishing words, and enter the PIN suffix. Enter and apply your passphrase, double check the fingerprint, then from the main menu choose Ready to Sign. Then the details of the PSBT will be displayed and you can confirm that the address and the amount and the miners fee are correct.

Then hit OK (✔) to sign. Once the file is signed it will be saved as a new file to the microSD card appended with -signed.psbt. You can then eject the microSD card and securely log out of your COLDCARD and power it down.

Eject the microSD card from the COLDCARD, insert to the USB adaptor, insert the adaptor into the desktop computer. Ensure Sparrow Wallet is open. Then from the file explorer, simply double-click on the signed PSBT file and it should open automatically in Sparrow Wallet. Alternatively, from Sparrow Wallet navigate to File > Open Transaction then choose File from the menu of options and navigate to the file location of the signed PSBT. Either way, then click on the Broadcast Transaction button to send the signed transaction to the Bitcoin Network.

At the time of broadcast you should see the transaction notification in Sparrow Wallet. Again, you can copy the transaction ID and paste in your preferred block explorer to watch for confirmations.

The main point here is that your COLDCARD is the required signing device while your Sparrow Wallet is your interface, transaction builder, and broadcaster. In this configuration, Sparrow Wallet can do many things like catalogue addresses and build transactions but without the signature from your COLDCARD, Sparrow Wallet cannot authorize spending of any of your Bitcoin.

Not only is your Bitcoin secured by your air-gapped COLDCARD, but the interface you use to interact with it is backed by your own private Electrum Rust Server over Tor. Another recent capability implemented in Sparrow Wallet is Whirlpool CoinJoins. You can configure Sparrow Wallet to deposit your CoinJoined outputs directly to your COLDCARD. This topic goes beyond the scope of this guide but keep in mind that there are a range of features and capabilities for both COLDCARD and Sparrow wallet that are not covered here. To learn more about an advanced feature in COLDCARD called Seed XOR, check out this guide. Also, to learn more about Sparrow Wallet and Whirlpool, check out this guide.

Steel plate backup demonstration#

Careful considerations should be made in regards to how the wallet backup information will be stored. The information required for a proper backup varies depending on how the wallet was setup. These requirements may be only 24 seed words for a simple wallet or the requirements can include 24 seed words, a passphrase, master fingerprint, derivation path, and more. There are several options when it comes to picking a storage medium, each has its own set of tradeoffs. Writing the 24 seed words on paper is a good start and helps mitigate the risks associated with having a digital copy of the backup information. With the backup information written down on paper, an adversary would need physical access to the paper in order to retrieve the information. Where as a photo, text file, or other digital medium can be copied and replicated and shared quickly or accessed remotely.

The trade off with paper backups is that they do not withstand fire or flooding very well. This is where steel backups come into play. Robust backups made from stainless steel can withstand fire temperatures beyond the range of a typical house fire, up to 1,500°C. Also stainless steel backups can withstand being submerged in water for extended periods of time. There is a wide range of steel backups available. Coinkite offers the SEEDPLATE which gives users a robust backup option that is resistant to fire and flooding as well as easy to conceal.

These stainless steel plates are etched with a grid on both sides. The grid contains the alphabet along the Y-axis and 48 columns along the X-axis. The 48 columns are split into 12 groups of 4 columns. Each of the 12 groups has enough room for 4 letters. Only the first 4 letters of each BIP-39 seed word is required in order to restore the wallet as no two words on the BIP-39 word list share the same sequence of the first 4 letters.

Use a marker to indicate the first 4 letters of the first 12 words on one side of the plate and then flip the plate over and repeat the process for the 13th through 24th words. If you make a mistake you can clean the marker off with acetone/nail polish remover and remark the letter.

Double check your work then use a spring-loaded punch to stamp the plate on each mark.

Now you have a robust stainless steel backup that can withstand fire and flood. This backup plate is easy to conceal measuring in at 127 mm × 76 mm × 1.5 mm so that it can be hidden in a variety of places and environments.

Conclusion#

That is all for this guide. You should have the knowledge now to check your tamper-evident bag, verify and update the firmware, setup a PIN, verify the dice roll math, create 24 seed words with your own randomness, create a passphrase, verify Sparrow Wallet, connect it with your own private Electrum Rust Server over Tor, as well how to import a watch-only wallet to Sparrow wallet and make some air-gapped transactions, and have some ideas about a robust stainless steel backup solution. Be sure to power down your COLDCARD, disconnect it, and secure it in a safe place and keep your backup information in a separate location.