Security model
Keys never leave the device. A BIP39 wallet is generated locally. The recovery phrase is encrypted with AES-256-GCM using a key held by the Android Keystore. The master password derives a verifier with PBKDF2-HMAC-SHA256 and a per-install salt.
Networking fails closed. Requests use SOCKS5 to the embedded Tor client with remote DNS. Hosts are checked against an allowlist. There is no direct-connection fallback and no “try clearnet” switch.
The server is not in the signing path. The control plane serves update metadata and an APK. It never receives a private key, unsigned transaction or signed transaction. Compromising it cannot move funds from a device.
Updates are verified by hash. Every release publishes a SHA-256 checksum. The app can compare the downloaded APK before handing it to the Android installer.
What it protects against
- Network observers learning which RPC or price host your wallet contacts.
- A direct connection revealing your home or mobile IP to a blockchain provider.
- Silent fallback to clearnet when Tor is blocked or slow.
- Server-side key storage, account takeover and cloud backup exposure.
- Casual inspection of the recovery phrase: secret screens use FLAG_SECURE and the vault is encrypted at rest.
- Installing a corrupted download when the published checksum is verified.
What it does not protect
- A compromised phone, a malicious operating system, or malware with accessibility access.
- An unlocked device handed to someone else.
- You sharing the recovery phrase, a screenshot or a clipboard containing a key.
- Public blockchain data. Addresses, amounts and timing are visible on-chain.
- A malicious or dishonest RPC provider returning false chain data. Tor hides the path, not the content.
- Loss of the device without a written backup. There is no recovery service.
Verify a release
Download only from torwallets.org/download. Compare the SHA-256 on the download page with the file on your machine:
b07f28f2b5799b3507ca5fd0df1a5ab0e2b005fb93e9c147605a7842f6c22c5d
If the values differ, delete the file and download again from this domain. Do not install it.
Report a vulnerability
Open an in-app support ticket with a subject beginning with Security. Include the app version, Android version, a clear description and reproduction steps. Do not include real recovery phrases or private keys; use a freshly generated test wallet. If you cannot install the app, use the project contact form.