In this article, I will demonstrate how Opendime, the Bitcoin credit stick works. I will be guiding you through the entire process from explaining the concept to unboxing, setting it up, to a bit advanced settings like verifying the device. This is meant to be quite detailed and in-depth. Use the content table below to skip through the section which interests you the most if you do not have the time to go through everything.
What is Opendime?
Opendime is a read-only USB stick which enables physical, off-chain, person to person cryptocurrency transactions securely and privately. This definition can be broken into few important elements which together make Opendime a powerful crypto tool:
- Read-only – The content of the USB cannot be altered.
- Physical – Opendime gives cryptocurrency a physical form. It works like just like fiat currency, a dollar bill for instance. It can be passed along from one person to another, an unlimited amount of time.
- Off-chain – by transacting person to person directly, the transaction never enters the blockchain. Which means miners do not have to audit (mine) it.
- Secure – No private keys are revealed during the transaction. Private keys are securely stored on a device – masked. In order to reveal the private key, the physical change on the device has to be made.
- Private – Since the device switches owners but keeps one public address, these transactions are private. Just like cash transactions.
Referred to as the Bitcoin credit stick, cryptocurrency bear-bond or the cash version of Bitcoin, Opendime is a cypherpunk device stick which simply enables you to store cryptocurrency on it and pass it along. It may sound similar to paper or even hardware wallet, but it’s slightly different.
It’s a combination of a paper and a hardware wallet. Unlike paper wallets, the private key is kept as a secret. Even the person who randomly generated a private key does not know it. The public address is on the other hand known and can be used to load funds at any given moment.
Opendime can be passed away multiple times from one person to another without ever revealing the private key to the owner or a receiver unless a permanent physical change is made to a device. This means that Opendime eliminates trust factor in transactions.
You do not have to trust anyone. You can verify that the Bitcoin Stick has the amount of bitcoin it says it has at any given moment without compromising the private keys.
So far two versions (models) of Opendime are available: Bitcoin and Litecoin. If you buy Bitcoin version, you can only store BTC on it. If you buy Litecoin version, it can only be used and loaded with LTC.
Who is behind Opendime?
The company behind Opendime is called Coinkite. Their founder, Rodolfo Novak is a well-known figure in the crypto community who’s been working on different Bitcoin software and web projects since 2012, including POS Terminal, server, and web wallets.
The product is designed and programmed in Canada and their company is based there. However, the factory which produces hardware and assembles the Opendime is based in Shenzhen, China.
The idea to create Opendime came from a simple problem – making something abstract like cryptocurrency – physical. At that time the Casascius physical coins existed, but there was always a fear that someone else might know your private key, no matter how reputable the person who made those physical coins was.
Coinkite came up with an idea – a PCB which generates the private key internally on a device memory, without ever going online. It’s always hidden and can be revealed when physically damaged.
How Opendime works?
Think of Opendime as a cypherpunk piggy bank. You can add as many coins as you like into it. Like almost any piggy bank, in order to get the funds from it, you have to break it.
Now, imagine that piggy bank shows its balance all the time. You always know how much “value” is in it, without anyone having to break it and count the coins in it.
Next, assume that the value inside can be verified anytime by anyone. Anyone in a transaction can act as an auditor and audit it. We now know the exact amount that our piggy bank has every time. When the value of a certain item is familiar and generally accepted, it means that it can be used as a transaction mean between people.
In our example, Alice heard that Bob is selling his apple for 1 BTC. She loaded 1 bitcoin into her piggy bank and headed to Bob. She offered him her piggybank which she claims is worth 1 BTC. However, Bob does not have to trust her word, since the piggy bank is easily verifiable. That is why Bob, inspects the outside of the piggy bank to make sure Alice has not tampered with it. He then easily verifies how much value is in it. After the verification, Bob and Alice complete their transaction. Alice now has an apple, whereas Bob owns Alice’s piggy bank.
After a while, Bob needs a new TV. He goes to a shop owner – Jim and brings his piggy bank with him to exchange it for goods. However, Jim priced his TV at 4 bitcoin, which obviously is not enough to make a transaction. Bob needs to add 3 more coins. He takes his wallet out and adds 3 more coins to the piggy bank. Bob goes back to Jim and handles him the piggy bank. Like Bob inspected Alice’s balance, Jim now takes a look at Bob’s piggy bank balance. After Jim verified that there are enough coins to make transactions, they exchange their goods successfully. Transaction completed.
During all of these transactions, the piggy bank remains sealed – locked. There is no way to get the coins out without physically damaging it. When damage is made, it is clearly visible and nobody would trust a broken piggy bank. Piggy bank itself, makes things even easier by signaling with an LED light when someone tampered with it.
You get the point. This can happen unlimited amount of times. Piggy bank goes from one hand to another, being funded when the price is lower than asked.
But here is the thing. What happens when the asked price is lower than the amount we have?
As the illustration above shows a situation where there is more value in a piggy bank than what we need to make a transaction.
- In the ideal world, the seller would be able to give back the change. This is a normal occurrence with fiat currencies since those are generally and widely accepted. Joanna would give back extra money to Jim.
- The second option is that Jim has multiple piggy banks with different amounts and he hands the one with the exact amount to Joanna. He can also refill if he has either an empty or a piggy bank with a lower amount than required.
- The third option is that Jim breaks the piggy bank. He transfers all of his money to the wallet and pays exactly 0.3 BTC to Joanna in return for a pair of shoes for his wife.
Getting coins into the piggy bank is easy, you can add unlimited amount of coins in it. But, as mentioned earlier, when you want to spend the coins from it, you would have to break it entirely.
And the thing is – nobody is going to accept a broken piggy bank. So once broken, it can not be used to transact, unless a crazy person finds it valuable for some strange reason, but that’s a whole different story.
The piggybank analogy is probably the closest one which describes how Opendime works. Now that we explained it abstractly. Let’s try to be more technical on how Opendime works. It’s similar to our abstracted version.
Opendime is meant to be disposable. Its main purpose is that you do not have to trust anyone on the amount on it, you can verify it anytime yourself. You are certain that your private keys are secure.
Opendime exists in three states :
- New, unused unit (the private key has not been created)
- Sealed unit (private key created, not visible)
- Unsealed unit (private key revealed)
In the next few paragraphs, I will guide you through the process from unboxing a new unit, verifying it, generating a private key, adding funds to your Opendime, and finally unsealing the unit. I will be using Opendime 3.0 Bitcoin version in my review and guideline before. Bear in mind that depending on where you’re reading this, there might be new version whose process might or might not defer from the one I’ll be doing. To be on a safe side, always consult manufacturers’ website and read the instruction manual.
Opendime is packed pretty simple to keep its production cost down. I paid 37.50$ for my 3 pack V 3.0 which arrived on time and as advertised. Their website accepts cryptocurrency payments like Bitcoin and Litecoin and I paid for my order in BTC.
In one package of Opendime, you get 3 USB sticks. This roughly means that one unit costs 12.50$. That might seem like a high price to pay, but the costs of the unit can easily be depreciated. The more you use it the value will depreciate even more.
I was a bit disappointed with the packing. All 3 USB sticks are packed into a single zip-lock bag with a sticker and a simple instruction which says: “Get started opendime.com/start”.
At the time of writing, the URL on the instruction pamphlet redirects to their homepage, it simply does not work. I think this should probably be removed from the packing, especially if the page does not exist anymore.
However, the instructions on the leaflet are quite concise which I personally like. It says :
- Plug into USB
- Open index.htm
- Follow the steps
Besides a leaflet, there’s no printed manual. You will find a readme file on the USB.
Opendime design and build quality
The device is pretty bear-bone. There’s nothing beautiful about it, but yet it’s beautiful. It looks line an rough, unfinished product, but there’s something geeky about that kind of look. The idea of an open PCB is not only to minimize the unit cost. It also comes from being transparent and not having a closed product. I probably should have mentioned this earlier, but Opendime is an open source project. Anyone with a little programming knowledge can audit it on Github.
From the 2.0 version, the edges are now oval and not rough. The board itself is very firm and can not be broken easily and certainly not accidentally. My personal opinion is that their latest version is very well-made. I like the openness of the product. At the same time, everything is visible, but not easy to break or mess up with accidentally if you’re a newbie. The PCB and other components are protected with a glue.
The USB stick does not require drivers to work, it’s plug and play. I tested it on Linux Mint 18.3, Windows 7 and Tails. The device was recognized instantly.
The first step is to plug the Bitcoin stick into your PC.
Once the device is inserted, the second step is to open the index.htm file inside the Opendime folder.
Next, when the index.htm file is opened in the browser you will be asked to agree to the terms of service. The pop-up warning is displayed in several languages.
|Green with brief flicker||Sealed. Your funds are secure.|
|Red and green alternating||UNSEALED. Private key has been revealed|
|Green solid, brief flash of red||Not yet loaded with enough entropy (setup time).|
|Green flashing (fast)||Reading/writing to drive.|
The next step is to create the private key.
Generating the private key
After the device is plugged into your PC’s USB port, you will have to generate a private key in order to load the funds into your Opendime. This process is very user-friendly and easy. Bear in mind that during this process Opendime does not have a control over the private key, nor do you. The private key will be randomly generated onto a device microchip using random entropy you add to the device memory. It does not require an internet access to do so.
Firstly, the FAQ advice that for better randomness, you use images only you have. The instructions say that you’d have to add at least of 256kb of data. However, they do not state anywhere that the total file size should not be larger than the USB device memory which is around 1.38 MB.
In my first attempt, prior to knowing the maximum size, I tried to add around 4MB of data and got an error. Seeing that, I’ve selected only two images and copied them onto > Opendime and device generated a completely random private key. Once the public key is ready, there will be a few noticeable changes to the device.
- When sealed, the Opendime will flash green when plugged in into the PC.
- When .htm file is opened, you will see a very clear message on the screen that you now have a private key.
This entire process is very intuitive. I like that there are so many signals that show the state of your device, both physically and inside the PC. This is very smart engineering and user experience at the same time.
Verifying the device
The device can be verified in the following ways :
- phone charger / USB – the LED light indicates the status
- physically inspecting it – check if the resistor has been damaged
- factory seal to make sure it comes from genuine OD factory.
- Samurai wallet – Android only
- Google Chrome extension- iOS only
Once I began learning about Opendime, I clearly understood the need that this little device can be verified and audited. At first, I thought there is only one way to verify Opendime, but as I began tapping into it, I realized how many different ways are to verify the Bitcoin bearer bond.
index.htm verification – verify button
This method is quick and works out of the box. However, it only checks for the Bitcoin/Litecoin signed messages and verifies that a device knows the private key which corresponds to the public address.
Google Chrome Plugin verification
The easiest and the most beginner friendly way of verifying Opendime for both Bitcoin address signed verification and anti-counterfeit factory chip is through their Google Chrome Extension. You just have to install the extension as described here
Coinkite found an opportunity where Chrome browser can communicate with a USB and perform trustme.py checkup in a user-friendly way. According to the manufacturer, this checkup can be performed offline.
Unfortunately, this easy method will only work for the Chrome OS. It does not work for Linux or Windows. I tried it on Chromium and was unable to establish a connection between a device and a browser both online or offline.
Trustme.py is a python script which performs all the checkup Chrome Extension does. It’s a bit advanced method but works really well. It is handy since this verification can be done offline. You can verify the device by running a python script on a device or do a cross-device checkup, where one Opendime check’s the authenticity of the other, which is a very safe method.
Running a trustme.py on a single device
The following method describes actions I had to do to run the python script on my Linux Mint 18.3. The process might vary slightly depending on your operating system or Linux distribution. The official guide will give you a more technical explanation.
- Install the python (Already exists in Linux and Mac)
- Install libusb (It was already pre-installed on my Linux distro), but if I did not have it, I would have to type this in terminal: sudo apt install libusb and press Enter. This step is not required. However, it is recommended. Without the libusb you can only do lightweight verification of the device.
- Go to your Opendime Advanced folder. (For me it was /media/myusername/OPENDIME/advanced)
- You will need to lift permission to run the python script. For my distro, I had to right click, open as root)
- Now when you have elevated privileges, right-click > Open in Terminal
- In terminal, type this: python trustme.py and click enter
You can do this step offline if you previously download and install two python packages pycoin and ecds. It is not required, however, if you’re connected to the Internet, they will be automatically downloaded when you run the python script.
Verifying with another Opendime (cross-device verification)
This process is very similar to previous. Instead of running the script on the Opendime we want to verify, we will be running a script from the Opendime we already trust and point it to check the Opendime we want to audit.
- Go to the Advanced folder of the Opendime you trust already (For me it was /media/myusername/OPENDIME/advanced
- You will need to lift permission to run the python script. For my distro, I had to right click, open as root)
- Now when you have elevated privileges, right-click > Open in Terminal
- In the terminal, we will have to run the script from a trusted device and point it to the USB path of the device you wish to verify. In the terminal type this: python trustme.py python trustme.py /media/myusername/OPENDIME1
and click enter.
If you do not have a trusted Opendime, do not worry. There you can download the code from Opendime Github repository and check your device against it.
Adding Bitcoin to Opendime
So far, we covered what is Opendime, how it works, we unwrapped it, verified it an generated the private key. The next step is the easiest of all – adding the funds to your cypher piggy bank. You can only add bitcoin to a device if you created the public key which automatically shows receiving public address.
You can find the public address for your Opendime inside the folder. It can be found as a text and a QR code in jpeg image format. The way you’ll be sending the money to your USB stick depends on the wallet you’ll be using. The process is pretty much similar, you can either copy/paste the text address or scan the QR code from the folder. Make sure to double check that the address is correct and confirm the payment.
Shortly after the payment has been sent, you will be able to see a transaction on the network, it may take a time depending on the network state that it gets confirmed. And that’s all. Your Opendime went from an empty piggy bank to an item with a verifiable value. You can now exchange it like a cash from one hand to another and add funds to it an unlimited amount of times.
Since transaction will be happening off-chain, there will be no confirmations or mining fees. The participants of the transactions are verifying it instead and passing it from one hand to another, an infinite amount of times. The private key will be sealed neither you nor anyone else will know it until the device is unsealed. I’ll demonstrate that in the next paragraph.
Unsealing your Opendime
Once you’re ready to spend bitcoin from your cypher piggy bank, you have to break it. Once you break it there’s no way back. Use a pin or a needle and push through the marked hole on the PCB. You need first to pierce the glue and then by pushing, you will push out the resistor. By doing so, you’re making a permanent physical change to your device, which reveals your private key.
This is probably the most amazing feature of the device. By doing a permanent damage, you can’t cheat in a transaction, because you broke the chain of trust. The device itself will now flash red once inserted into a PC, power bank or a mobile phone very visibly signaling that the private key is no longer a secret. This is at the same time the biggest risk of the device. This means that in order to get the bitcoin out of it, you’ll have to reveal it to a PC. Which further means you have to trust that PC and its security. Let’s now take a look how to do that.
Importing your private key into a wallet
In order to spend the money out of it, you’ll have to export the keys from the device to your wallet. This means, that you must trust the PC you’re doing this on. By revealing the private key, hackers can get it before you do, that’s why you absolutely must use it in an environment which you’re certain is safe. No matter which operating system you’ll be using to reveal your private key to, please disconnect from the internet.
This the least you can do to protect yourself. If you want to enhance the security, use Tails. These are just some precautions. Your keys might not get stolen, but why take that risk?
The process is easy. Depending on your mobile or desktop wallet, you just need to sweep/import the private keys either by manually entering the key or scanning the QR code. The wallet in which you’ll be importing the keys to need to support WIF format.
Using Opendime on a mobile device
I discovered that Opendime can be used together with Samurai wallet. In my research, I have not found an app which will work right out of the box with the device. Samurai wallet is compatible and works very smoothly.
Unfortunately a the time of writing there’s only an Android version. You will need an OTG compatible android phone and a cable or an adapter. The cable is pretty cheap. I purchased mine locally for around 3$. You can use an adapter as well.
The setup is very easy, once you configured your Samurai wallet, plug in the OTG cable and the Opendime in the USB slot. You will see a pop-up prompting to open the Samurai Bitcoin Wallet app. Once you open it, you will see the confirmed balance and the private key verification. If you insert a sealed Opendime, you’ll not see the status and the private key verification.
So basically, for now, you can only use a mobile phone to check the status of the Opendime and Bitcoin address signature. This is a great progress, and it makes the entire transaction from hand to hand much easier. It’s much easier to just bring a phone with an OTG adapter with an app installed than an entire laptop when making the transaction.
In my humble opinion, there’s still a lot of room to improve the usability of a mobile app. Hopefully, we will see an Opendime dedicated app with more feature and possibly advanced security checkups and private key generation from the phone. You will need an internet connection to use Samurai wallet.
Now that I covered pretty much everything about this cypherpunk device, here are my personal thoughts on its advantages and limitations summarized.
- no mining fees
- instant, physical off-chain transactions
- easily verifiable
- well-built, durable product
- private key securely stored, unknown to anyone
- innovative concept
- not reusable
- unable to recover key onto a device
- private key has to be revealed to a PC which can be a security risk.
- supports only Bitcoin and Litecoin recently
- the design might not be appealing to everyone
To sum up, my experience with the Opendime 3.0 was pretty good. I feel very comfortable recommending it. It’s well-built, extremely well-supported and innovative product coming from a reputable company which has been working on awesome Bitcoin projects for years now. There is still a room to innovate and improve the Opendime. I hope that Coinkite will continue to invest resources and knowledge into it. In my opinion, they found a very interesting gap in the market and hopefully they will keep filling it with innovative approaches.
I love that Opendime enables me to transact off-chain, privately and securely without having to trust an online generator or a third party with my private key generation. Furthermore, they are completely open-source and provide one of the best support experiences I encountered from a cryptocurrency company. I gave away two of my Opendimes to my cousins on Christmas and for now, I believe this is absolutely the best and safest way to give someone a bitcoin or a litecoin.
Some of the disadvantages of the devices are that it looks rough, though I personally did not mind that. Quite opposite, it really makes you feel geeky and cypherpunk while using it. A more serious limitation is that Opendime is disposable. There’s no way to re-use it. You can’t recover the seed or send cryptocurrency from it. Fluctuating exchange rates might be an issue in this kind of transactions. All of these things are not impossible to solve and I hope that we will see even better physical cryptocurrency solutions from Rodolfo Novak and his team.