As you’ve noticed, I tend to write from time to time on my experiences with cryptocurrencies. By now you may have understood that my interest is mainly with the coins that support the equihash algorithm (ASIC resistant, GPU-based mining) such as ZCash and its derivates, ZClassic and ZenCash.
The challenges with software wallets
One thing that I try to put emphasis in most of what I do is making sure there is enough security and contingency in place, which is very true for cryptocurrencies, after all you’ve been through a hard time to mine these. Obviously VPN tunnelling, having an antivirus (even on Mac, yes) and Little Snitch/Little Flocker are good beginnings, but they aren’t enough. How can we be sure that our data (and especially our wallets) are kept safe. There is quite a difference in how cryptocurrency wallets are stored based on the wallet platform used. In this section we will go through the different kind of software wallets that exist and what challenges we may face with them, as a prelude to why hardware wallets are very relevant.
Native wallets are standalone applications running on your computer, whether it is Linux, MacOS or Windows. A native wallet is generally official or part of some community-driven development, they are supposed to offer the largest compatibility set with the cryptocurrency. A native wallet is installed locally on a system, there is no copy of the data that resides elsewhere.
You have to think about backing up and restoring your wallet (wallet.dat file) otherwise your money is gone forever. You can in theory save your wallet.dat somewhere, but it will just be a snapshot of it at a given moment. You then need to store this file safely. Will you put it on a USB key in your drawer? Another copy on another USB key in your safe? Here you want to be cautious about where you save the file, because it’s not encrypted! Avoid at all cost cloud storage solutions unless you have encrypted the file beforehand. Then there’s also versioning. Your wallet is supposedly dynamic, and if you are mining on top of just using it for everyday stuff, your balance will be changing (hopefully for you increasing) regularly.
An important security point is that native wallets currently do not support encryption. It means that whoever can get a grasp of your wallet.dat file (the file holding your cryptocurrency values) can just copy it, import it on their machine, and transfer the contents to another address (one of their addresses), thus immutably transferring your funds to their wallet and causing you to lose your assets. The same elements about storing a copy of your wallet.dat explained above apply here.
Software wallets work differently. Most of them are applications, but they are tied to an online account or a wallet that exists somewhere online. An example would be Jaxx. Those are slightly better as they offer the ability to do a backup through a seed: a series of words that, when put together in the right sequence, help reconstitute the private key and give you back access to your wallet. Jaxx for example uses a series of 12 words. Because the seed is the key that opens your safe, you must here as well take extra precautions not to expose it anywhere. In fact, it’s recommended to write it down and store it in two or more secure places. Don’t take a picture of them, as it could end up on your cloud storage, or photo apps, at the mercy of a hacker.
These wallets are lightweight wallets and are good to use on the go, but should never hold your entire cryptocurrency savings. Each software wallet has its own specifics, its own philosophy and its own way to implement security measures. It’s highly recommended to compare well before settling for one or another solution. Jaxx, for example has its source code published fully reviewable on their website. They also do not store any keys centrally as they seed code is generated directly on the device. Those wallets do not have 2FA (Two-Factor Authentication) built in, although some wallets allow at least the use of a PIN code.
In some cases, the data pertaining to your wallet is stored on the lightweight wallet provider infrastructure and any maintenance/upgrade can make your wallet become unavailable or leave you unable to send/receive funds.
Exchanges play an important role in the circulation of cryptocurrency capital and it’s natural that in order to ensure the ingress and egress flows of cryptocurrencies as well as fiat currencies, these exchanges require the creation of wallets so that you can trade, purchase or sell, and eventually send back to your own native or software wallets.
One issue here is that first of all cryptocurrencies are built as decentralized networks to avoid concentration of capital and regulation. Exchanges function to some extent as centralization gravity pits, because a lot of people who just trade cryptocurrency are perfectly OK with leaving their assets under the control of the exchange, mostly for comfort reasons. Inconvenient number one is that if the exchange gets hacked, it becomes very easy to siphon a lot of money because generally speaking there is no password seed tied to the wallets. Unless the exchange has strong security in place, you can clearly envision that your wallet.dat is just one of the many thousands sitting side by side. In fact, it can be even worse because it can be a single wallet file with a very large number of unique addresses, and each or more addresses can be tied to a given user account. But when an intruder gets ahold of the wallet file, the money is gone for everybody across the board. Obviously, each exchange has its own security measures and implementation: wallets may be segregated between users, but how can you know what security measures are in place?
Another aspect, which is more tied to privacy, is the fact that some of the major market exchanges, especially those who operate with cryptocurrency <-> fiat transactions are required to comply with some governments KYC (know-your-customer) / anti-money laundering regulations. Those KYC measures require anyone who creates an account to provide proofs of identity, uploading official documents, proofs of bank account ownership etc. While it allows these companies to work in a compliant model, it completely defeats the anonymity premise of cryptocurrencies.
In my view, cryptocurrencies should only transit through exchanges for the strictly necessary time required to perform transactions, and then be promptly transferred out & end up stored safely on a personal wallet. Maybe the users who keep their assets on exchanges need to be reminded regularly of the MtGox debacle.
Hardware Wallets – a hardened approach
In this section I will cover the approach taken by hardware wallets, especially the Trezor hardware wallet which is the one I ended up purchasing. Most of what is written here should equally apply to the other solutions in place, although -of course- features vary from device to device, so make sure you do your due diligence before settling for one or another hardware wallet.
Hardware wallet characteristics
Hardware wallets are tailored-built devices whose role is to ensure your wallet and private keys are safe, and that not only your wallet cannot be stolen, but also nobody can gain control of your private keys or assets.
Some of these wallets, such as the Trezor, the main topic of this article, do support multiple currencies. On top of Bitcoin, the Trezor supports Ethereum, Litecoin, Zcash, Dogecoin, Dash, Ethereum Classic and a couple more. I also spoke with the Trezor team and they mentioned that in theory, ZenCash as well as ZClassic support is also implementable, although it requires involvement from the dev teams.
Nerds will be interested to know that Trezor is that of an HID-class(human interface device) USB device: like a keyboard or mouse the system expects some input to come from the device.
The Trezor hardware wallet
The Trezor is made in Czech Republic and it’s kind of my country of adoption since I live there for 15 years now, so there’s a kind of sentimental feeling or bond, if you wish. The creators of Trezor are SatoshiLabs, the same company that is behind the legendary SlushPool, the first ever bitcoin mining pool to emerge (I logged in there a few months ago and found out I had a tiny amount of mBTC lying there from eons ago).
Let’s cover the Trezor from its primary usage perspective: the secure storage of cryptocurrency. The device is fairly small, comes with an USB cable and some stickers. One satisfying thing was the great care put in the anti-tampering properties of the box. There are two seals, one on top, one on the bottom of the papercard box. Another interesting aspect is that there seems to be some very strong glue holding the package together, making it impossible to break through it without damaging the package, thus clearly leaving marks that the package was tampered.
The Trezor has a tiny display that activates when it gets plugged to an USB port, as well as two buttons used to either confirm or cancel activities/requests that show up on the display.
The first thing to do when plugging the Trezor to your machine is to set it up. A mnemonic recovery seed is generated, a sequence of 24 words that need to be written on a piece of cardboard and stored securely. The seed is very important as it allows to recover the wallet, private keys and balances in case the physical Trezor device is lost. There’s a great way to conserve this code for eternity, and it’s to complement your Trezor with a cryptosteel, which is an undestructible sort of device which allows you to “write” your seed by using steel letters. I’m sure the only way to get rid of the cryptosteel is to escalate the slopes of Mount Doom and throw it in the flowing lava in the chambers of Sammath Naur, but I see I diverge again.
Then we are asked to set up a PIN code. That code is asked any time the wallet is accessed from the computer. Once the PIN code is confirmed, the genius part is that the Trezor displays a 9×9 tile with numbers from 1 to 9, but randomizes their position every time, so there is no way to determine the sequence from the computer. The user is presented on the computer with a blank 9×9 tile that corresponds what is on the Trezor (numbers are replaced by stars, and are never shown on the Wallet client – which is by the way a web-based interface) and the user clicks on the corresponding tiles to form their PIN code.
Finally, on top of the PIN code, the most demanding users can add an encryption passphrase which makes it even harder to break through.
I will not cover here the usability aspects (the folks at www.trezor.io have plenty of things to show) but will look at security. Each and every transaction that is done through the Trezor web-based wallet requires a physical confirmation on the Trezor device and the entry of a PIN code. This makes for a perfect anti-phishing protection since it forces the user to look at the transaction specifics and requests explicit approval. Furthermore, in case the PIN code is wrongly entered, the time lock between two tentatives increases exponentially.
Beyond cryptocurrencies: an emerging security platform?
One thing which I truly appreciate is how the developers of Trezor are looking at their product from multiple perspectives, or rather from a security platform perspective. Trezor supports the FIDO U2F protocol and can be used with password managers such as Dashlane, or for any website/service that supports U2F authentication methods (Google services, Dropbox, Facebook, and a few more)… beware friends, U2F (standard) is not the same as 2FA (method). I used to own a Yubikey 4 that I had purchased specifically for FIDO U2F functions, and I lost it two weeks ago while in the USA. I find it fantastic that thanks to the Trezor I don’t need to have another device for U2F (although seriously the Yubikey 4 is really nice).
SatoshiLabs have also created a Password Manager for Trezor, which is something I’m eager to look into, if only the good folks at SatoshiLabs would make it work with Opera (it currently works on Chrome, a browser that I no longer trust due to various privacy and security issues).
Finally, there seems to be an SSH access and GPG signature integration with GitHub. I don’t always go on GitHub, but when I do it’s just for downloading programs and stuff. However, I’d be interested to understand how these functions can be leveraged to sign messages or actions in the context of Keybase for example.
Like with every asset you own, you are in charge of determining the level of protection and also eventual compromises in terms of usability vs security. You may have 1,000 USD in savings and this might be a fortune for you, or you may have 500,000 USD in savings and that could just be a drop in the sea if you’re considerably more wealthy.
One fact remains true with cryptocurrencies: they guarantee (to a certain extent) anonymity in transactions, they’re lightweight, very easy to transfer (almost immediately, if we except the slowness affecting the bitcoin blockchain lately) and have a great financial value. All of this makes cryptocurrency very sought after assets; assets that any experienced hacker can steal to their advantage. The recrudescence of advanced hacking techniques combining phishing, social engineering exploits and SIM swapping, if not coupled with keyloggers, makes traditional security measures such as relying on TOTP or SMS 2FA potentially vulnerable to an exploit.
The strength of hardware wallets is the way they have been engineered, the necessity to physically interact with the wallet, and the way the wallet communicates with the computer (the PIN method on the Trezor is pure genius) ensures maximum security when managing cryptocurrencies.
While it’s fine to have products that fits a single purpose, it’s always better to build a platform and offer multiple services instead of being dependent of a single revenue stream. I like the vision taken by SatoshiLabs with the Trezor. Instead of making it a single-purpose device, they built a platform of security services around it and were able to build up partnerships and integrations with various vendors. I’d be particularly interested by the way to learn more about the GPG signing capabilities of Trezor, and how it would/could eventually integrate with Keybase. It’s often all about the ecosystem of parters and integrations, a lesson that applies very much to the data center industry with which I’m better acquainted.
On a final note, if you are serious about cryptocurrency, then you should be dead serious about ensuring the safety of your assets. In this sense Trezor represents the ultimate investment in cryptocurrency security.