imToken - Bitcoin & Ethereum Walletlatest release: 2.9.1 last analysed 13th April 2021
Help spread awareness for build reproducibility
Please help us spread the word, asking imToken - Bitcoin & Ethereum Wallet to support reproducible builds 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.
In the description we read:
imToken is a feature-rich digital wallet to securely manage BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, KSM, DOT, FIL, XTZ and other digital assets. It enables decentralized value exchange and DApp browsing in one place.
“securely manage BTC”. Ok, so it is a BTC wallet but is it self-custodial?
Carefully Guarding Your Assets
Build a comprehensive risk control system to ensure the security of wallets. Support hardware wallets & cold wallets to prevent private keys from contacting the network and reduce the risk of theft.
This certainly implies to be self-custodial but there being something supported doesn’t mean that the default isn’t them holding the keys. So hardware wallets are supported but where are the keys stored if I use this wallet without a hardware wallet?
Their website is not much more helpful:
Digital assets under your control
imToken is an easy and secure digital wallet trusted by millions
again is implied self-custody but not really stated.
From their FAQ:
How to backup the mnemonic?
Whoever has the Mnemonic is able to use your wallet. So, be sure to do the following two things:
- Backup your Mnemonic,
- Keep the Mnemonic safe
- Once the Mnemonic is lost, no one can retrieve it
- Do not tell the Mnemonic to anyone, so as to avoid irreparable damage
Backup Mnemonic steps:
- Accurately transcribe 12 words in the displayed order
- Confirm the Mnemonic, to ensure that the word transcript in step 1 is correct, and the sorting is accurate
- Backup complete
So the user does have access to the private keys but strictly speaking there is no claim that they don’t have a copy.
Finally on their official Twitter account there is a clear statement in the account’s bio:
Self-Custodial Crypto Wallet Since 2016.
I hope they make this claim a bit more prominent in the app’s description and on the website and asked for that in this tweet.
Assuming self-custody, the next question is: Is it open source? Again, there is no such claim in the description or the website but there is a link to their GitHub. On their GitHub though there is only one mention of their applicationId in an issue opened by our contributor Emanuel. It’s issue 97 asking:
Where is the latest source-code for im.token.app?
So for now we conclude this app is closed source and therefore not verifiable.
Without public source available, this app cannot be verified!
This verdict means that we could not find any source to compile the app from. Internally the company might do everything right but as we can't verify it, there is nothing protecting the user from an exit-scam where the provider releases an app that leaks the keys to the servers.
The app cannot be independently verified. If the provider puts your funds at risk on purpose or by accident, you will probably not know about the issue before people start losing money. If the provider is more criminally inclined he might have collected all the backups of all the wallets, ready to be emptied at the press of a button. The app might have a formidable track record but out of distress or change in management turns out to be evil from some point on, with nobody outside ever knowing before it is too late.
Share onTwitter Facebook LinkedIn
Or embed a widget in your website
<iframe src="/widget/#appId=im.token.app&theme=auto&style=short" name="_ts" style="min-width: 180px;border: 0;border-radius: 10px;max-width:280px;height: 130px;" > </iframe>
<iframe src="/widget/#appId=im.token.app&theme=auto&style=long" style="max-width:100%;width:342px;border:0;border-radius:10px;min-height: 510px;" > </iframe>