Wallet Logo

Satodime

Latest release: 0.2.0 ( 17th February 2022 ) 🔍 Last analysed 23rd March 2022 . Transactions are signed blindly
6th December 2021

Once unsealed, this device doesn't let the user verify what is being signed.

As part of our Methodology, we ask:

Can the user verify and approve transactions on the device?

If the answer is "no", we mark it as "Transactions are signed blindly".

Devices in this category are first sealed. Once the seal is broken, they sign transactions that they are presented with but have no built-in screen to verify what’s being signed.

That makes them prone to malicious companion apps that they rely on for sending.

While this leaves little room for major exit scams, the handling of such devices is delicate.

To redeem your funds safely, create your transaction on an offline machine and verify the signed transaction on a different machine before broadcasting it.

Help spread awareness for build reproducibility

Please help us spread the word discussing build reproducibility with Satodime  via their Twitter!

Do your own research!

Try out searching for "lost bitcoins", "stole my money" or "scammers" together with the wallet's name, even if you think the wallet is generally trustworthy. For all the bigger wallets you will find accusations. Make sure you understand why they were made and if you are comfortable with the provider's reaction.

If you find something we should include, you can create an issue or edit this analysis yourself and create a merge request for your changes.

What is a bearer token?

Bearer tokens are meant to be passed on from one user to another similar to cash or a banking check. Unlike hardware wallets, this comes with an enormous "supply chain" risk if the token gets handed from user to user anonymously - all bearer past and present have plausible deniability if the funds move. We used to categorize bearer tokens as hardware wallets, but decided that they deserved an altogether different category. Generally, bearer tokens require these attributes:

  • Secure initial setup
  • Tamper evidence
  • Balance check without revealing private keys
  • Small size
  • Low unit price
and either of these applies:
  • Somebody has a backup and needs to be trusted.
  • Nobody has a backup and funds are destroyed if the token is lost or damaged.

The Analysis 

Product Description

The Satodime is a bearer smartcard that can hold multiple cryptocurrencies as well as ERC20 tokens and NFTs. The card’s secure element is an EAL6+ chip which stores the private keys. According to this Medium article, it is meant to allow users to transact hand-to-hand.

With a Satodime card, you can physically transfer #Bitcoin, #Litecoin, #BitcoinCash, #Ethereum or any other #ERC20 tokens (including #NFTs) from one user to another (hand-to-hand), while still remaining secure, without the need to trust a third party.

This is how it deals with the private keys:

“Private keys are strictly sealed within the secure chip.”

You don’t know the keys until you redeem the key slot.”

Apart from that, details of how the keys are handled are elaborated in the same Medium article.

Private/public keypairs stored on the Satodime are always generated randomly inside the secure chip. As long as the keyslot is sealed, nobody has access to the private key. To prove that the private keys were not pre-generated during manufacturing and that no backdoor was inserted in the firmware, the user is prompted for a 64-hex random value during the sealing process. This random input is used to provide entropy during the key generation process. When the keyslot is unsealed and the private key is revealed, the entropy data (including user input) is provided and allows to ensure that the key generation process was indeed random.

A Satodime Android app is still in beta.

Retrieving the Private key

Retrieve the private key == UNSEAL

If you want to retreive the private key of a specific keyslot, you can unseal the keyslot at anytime. This action is not reversible.

Unsealing a keyslot will ask the secure chip to expose the private key.

When a keyslot is unsealed, the private key is made available to the user and can be recovered by clicking on the ‘more details’ button of the corresponding slot.

Once the private key is unsealed, it is no longer protected by the secure chip and any asset associated with the corresponding address should be transferred immediately to a new address. This is generally done by ‘sweeping’ the private key and many wallet provides this option (e.g. Electrum and Metamask).

Note that this is all done via the Satodime Tool, a python based Windows/Linux program.

Process

The card is read with “Satodime Tool” on a device with a card reader or NFC. The card itself does not have any form of display or interface such as a button.

The chip has three states:

  • Sealed - a new vault has been created and the private key is not yet shown to anybody. This state allows the user to accept, share, buy and get the satodime.
  • Unsealed - the private key has been revealed and entropy data provided
  • Uninitialized - the key pair has not been generated yet or has been recently reset after a transaction

Analysis

This is a physical bearer token. Its lack of a display requires both parties to a transaction to install the “Satodime Tool” on either a Windows or a Linux machine. The Medium article linked above and on the Satodime website also details a sample transaction wherein a user buys a Tesla car:

You want to buy the new Tesla using Bitcoin. You grab your Satodime, seal a new Bitcoin vault, write down the BTC address and load 1 BTC to it. Then, you go to the car dealer and begin negotiations. The dealer is asking for 1.25 BTC for this beautiful Ludicrous P100D. You accept the deal and send 0.25 more BTC to your Satodime vault using your favorite Bitcoin client. You grab your mobile phone, scan the Satodime using NFC and show the sealed vault to the car dealer. He can verify that the Bitcoin vault is sealed and full of 1.25 BTC. You shake hands and give him the card. You grab the car and leave the showroom peacefully and silently. SEAL — LOAD — VERIFY

The name and feature set suggests a relation to CoinKite’s Opendime Plain Keys . It’s basically an electronic version of it, with mostly the same features, including the assurance to have externally provided entropy being used in the key generation and the issue with not having a backup but the advantage of the device being re-usable with new keys. If the user fails to unseal the key slot though, the coins stored on the device are lost.

The recipient of a Satodime has to install the companion app in order to verify and claim the received funds.

Just like the Opendime, Satodime lets the companion app know the key when unsealed.

(dg, lw)