I Don't Trust The Cold Card: How to Verify Dice Rolls Using Tails
I don't trust the cold card, even though it is my favorite signing device. My cold card has two secure elements This means it is superb at generating big ass random numbers, but I don't trust it. I didn't even really know how that shit worked until I read This article. I still don't trust it. For all I know, Coinkite has millions of pre-generated keys factory installed on their hardware. When Bitcoin moons they might implement a retirement attack.
I assign a very low probability to this attack. There might be a 0.00000001 % chance of this happening, but I still don't trust my cold card. Maybe you 'trust secure elements," but I don't. Maybe you add a passphrase to protect yourself from this albeit unlikely attack. How do you know the password is legit? I wouldn't trust it. Do the addresses really belong to that Pubkey? How do you know? It's not that I think Coinkite are is a bad actor. My mistrust of Coinkite is epistemic in nature.
I Don't Need To Trust Coinkite
Why do people trust Bitcoin?
"Much of the trust in Bitcoin comes from the fact that it requires no trust at all. Bitcoin is fully open-source and decentralized. This means that anyone has access to the entire source code at any time. ... No organization or individual can control Bitcoin, and the network remains secure even if not all of its users can be trusted."
-- Bitcoin.org
I can verify the code on the clear calculator with a bad ass case. I can see the secure elements. I could say hello to my little friend and shoot those two square secure elements if I wanted to. I may not trust them, but I don't think I want to shoot them. I like the aesthetics of the cold card. It's way easier to look at than that Texas Instruments calculator my Algebra teacher forced to buy in high school. The buttons on this cryptography calculating machine feel much nicer than the MK3. To be honest, the buttons were the one thing I really didn't like about the Mark3, but even though I like the look and feel of the MK4, I still don't trust Coinkite. I can't truss it like Public Enemy.
How To Create An Air gap Computer
Of course, the reason I love Coinkite's Cold Card is because I don't need to trust it. It's just a calculator. In the same way snotty-nose third graders are supposed to check their math homework, we can check the math on our CCCC--Clear Cold Card Calculator by following this guide.
First, we need to find an old laptop. My friend gave me a computer that is older than the bitcoin white paper he would have thrown away anyway. I removed the Wi-Fi and hard drive from the computer by using a few tools and a lot of patience. This is called an air-gap computer. Don't try this at home. There are a litany of attacks that can totally wreck you. You don't need to trust the cold card, but you should trust the cold card more than an air gaped computer or Tails persistence. If you do decide to take a walk on the wild side to verify your keys, you should also have a password to hold your bitcoin. If you are advanced, you might even want to set up a multisig wallet. One issue is that your next of kin might not be so technically inclined as hard core fiat must die freaks like us.
Watch the video
Install Tails
Since it doesn't have a hard drive, you will also need to install tails on this computer. I suppose other Linux distributions could also work, but Tails erases everything once your done. I shouldn't have to say this, but DO NOT SAVE YOUR KEY ON TAILS;
You will need:
- A USB stick or micoUSB
- A computer to flash Tails onto the USB stick
- Tails.
If you have ever flashed a microUSB for a node using Balena Etcher, you should be able to install tails easily. If you want to take a deep dive into Tails, check out this video series released by Infosec Bytes.
You might need to change your bios settings to run tails. The bios settings are different for each computer. Some of my laptops required me to insert a pin into the physical hardware. Some made me press f 12, or f11 to start it up too. It would be impractical for me to teach you how to do it on every computer ever made, but you're a Bitcoiner. You can figure it out with a little duck duck finger action.
Roll The Dice and Follow the CoinKite Guide
When I order a new cold card to my PO Box, I calculate the seed words before it even gets to me. I roll two casino grade dice until I have 100 dice rolls. I copy those dice rolls onto an index card. These numbers are all I need to create a bitcoin wallet, but I buy signing devices because I don't trust myself with storing my life savings on an index card either. Not only do I not trust my Cold Card--I don't trust myself.
I write the dice rolls in 10 rows of 10 because it is easier to see. I also write some questions on my index card. this is not strictly necessary, but I like to use it as a to do list.
- Are there any computers around me? I consider the device in my pocket a computer too, even most people think it has something to do with Alexader Grahm Bell's invention.
- Are there any cameras? Do my words match the Cold Card?
- Do the addresses match?
- Can I recover imy seed?
If the answers to any of these questions are no, then I start over.
Is this paranoid? Yes. Have I ever been hacked? No. Hopefully I can stay humble enough to keep it that way.
I verify y seed words using rolls.py on an air gaped computer. It's actually not that complicated, but rather than write about how to do this, I felt it would be best to create a video. I have decided to enter the code here. One thing that tripped me up at first is that** I tried typing the >>> and $. Don't do that.**
First I ran:
from hashlib import sha256
sha256(b'').hexdigest()
Returns
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
If you have not entered any dice rolls yet.
sha256(b'123456').hexdigest()
returns:
'8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'
To verify your dice rolls,, enter
echo -n 123456 | sha256sum
If your dice rolls are 123456, your wallet would be:
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
You will also lose all your bitcoin, because you want a** big ass random number**. 123456 is neither random or big. It is just an example. You want to have at least 100 dice rolls. You can have more, but no less. Don't half ass it either. Make sure you actually roll the dice. I prefer casino dice, but I'm not sure that is necessary. Don't get fancy and create a dice rolling program or anything like that which may or may not actually be random. I once saw a thread of a pleb who explained how he lost the bitcoin on his cold card because he didn't actually roll his dice, but let his fat fingers do the walking instead. Don't be that pleb.
Next you will download rolls.py Don't click on that link either. Go to the actual Coldcard docs. You should not trust me like I don't trust Coinkite. You will need to download rolls.py from another computer and side load it onto tails. Copy it onto your desktop, right click and open the terminal.
Once the terminal is open, type
ls
You should see rolls.py. If so, type:
echo 3225251332234411136453113322561664443362453543666542122625651314425121232256566122424235654552552244 | python3 rolls.py
This runs the python 3 program that will calculate your seed words. Like I said before, we are not going to enter 123456. We demand 100 random dice rolls, but make sure you replace my dice rolls with your own.
Then we set up our cold card with the same dice rolls we used to create our seed in Tails.
If Our Cold Card Calculates The Same Seed Words. We Can Know Our Cold Card Is Not Cheating Us
Conclusion
And as much as Bitcoiners hate that word, trust matters — the truth is that you most trust that which you can verify. This is why Bitcoin will ultimately be the most trusted monetary, economic and communications layer on Earth, after a few generations. -- Alexander Svetski.
I don't trust my cold card, but I do trust my dice rolls produce the seed words on my cold card. Since the seed words match my hard drive free computer, I keep my seed phrase on a Cold Card, even though I don't trust ther device. My cold card seed is is just about as safe as it can be once I etch it onto a= military grade steel and ensure that those magic words never see an Internet connected computer.
I solemnly swear to never plug my Cold Card into a computer.
Like I said before, you should also not trust me. For example, Matt Odell prefers to add dice rolls on top of the secure element. . You should research the merits of this approach too. Maybe my dice were compromised and do not truly represent randomness. IMaybe my rolls were not rolled well. Maybe the surface I used compromised the entropy. Maybe I did not read them from left to right every single time. **No method is 100% perfect.
**
There are trade-offs with everything, but bitcoin requires personal responsibility. Don't trust verify is a lifestyle, not just a meme. I take it seriously. If every Bitcoiner took this motto seriously, we wouldn't see people get robbed by SBF and his political palm greasing Ponzi exchange. I do not keep my bitcoin on FTX or any other exchange because I cannot be absolutely sure that the exchange has my bitcoin. I expect exchanges do not have as much bitcoin as they tell their customers they have. I do not trust the exchanges or my Cold Card. The difference is I can still mathematically verify ownership of my bitcoin by using the Cold Card and Other hardware wallets. That is why I create my bitcoin keys this way. I urge you, dear reader, to do the same.