Skip to main content
SANITHIUM

Security Architecture

Security grounded in code verification—never exaggerated claims.

Every statement below has been checked directly against the SANITHIUM Wallet codebase. Where protections are in development or externally unaudited, we state those limits plainly.

Audit & Custody Disclaimer: Independent third-party security auditing has not been completed, and no formal certification or insurance applies. SANITHIUM cannot guarantee immunity against device compromise or user error, and cannot recover lost recovery phrases, reset wallets, or reverse broadcast transactions. Users are solely responsible for safeguarding their recovery phrases and private keys.

Code-Reviewed Controls

Six technical pillars, reviewed against implementation.

SEC-01

Self-Sovereign Key Generation & Non-Recoverability

Reviewed against CryptoProvider & SecurityWarningScreen.

12-word or 24-word BIP-39 recovery phrases are generated strictly on the user's device using platform cryptographically secure random sources. SANITHIUM stores zero keys on any server and cannot reset, recover, or restore a lost phrase.

SEC-02

Two-Layer Vault Encryption

Reviewed against WalletVault & PinService.

The recovery phrase is encrypted with AES-256-GCM (128-bit authentication tag, 12-byte random IV) using an ephemeral 256-bit K_MASTER, which is itself wrapped by K_PIN derived from a 6-digit PIN via PBKDF2-HMAC-SHA256 (100,000 iterations, separate 32-byte auth and encryption salts).

SEC-03

Progressive Rate Limiting & Constant-Time Verification

Reviewed against PinService.

PIN verification compares derived tokens in constant time to resist timing side-channels. Four failed attempts enforce a 30-second delay, attempts 5–9 apply quadratic minute lockouts (1, 4, 9, 16, and 25 minutes), and 10 consecutive failures enforce a 24-hour soft lockout requiring recovery phrase re-import.

SEC-04

Single-Use Signing Scope & Integrity Binding

Reviewed against SecureTransactionSigner & TransactionIntegrityBinding.

Every transaction requires explicit PIN confirmation producing a 60-second single-use SigningAuthorizationScope. TransactionIntegrityBinding ensures the exact network, recipient, value, and fee shown on the review screen match the payload signed offline.

SEC-05

OS-Level Privacy & Cloud Backup Exclusion

Reviewed against MainActivity.kt & AndroidManifest.xml.

Android builds apply WindowManager.LayoutParams.FLAG_SECURE to prevent screenshots, screen recordings, and app-switcher thumbnail previews, and configure android:allowBackup="false" to block cloud backup extraction of local storage.

SEC-06

Honest Scope Boundaries & Unaudited Status

Reviewed against MainActivity.kt & lib/ source files.

No independent third-party security audit, formal certification, or insurance coverage has been completed. Runtime root/jailbreak detection (flutter_jailbreak_detection) is present as a dependency but not yet wired into active startup blocking, and biometric unlock currently relies on local_auth plus EncryptedSharedPreferences AES-GCM storage rather than custom native Kotlin KeyStore key binding.

Seed Phrase & Device Responsibilities

  • Non-recoverability: SANITHIUM stores zero mnemonic backups. Losing both your device and your offline recovery phrase permanently prevents access to funds.
  • Physical storage: Record your 12 or 24-word recovery phrase offline on physical media. Do not store unencrypted copies in cloud drives, notes apps, or email drafts.
  • Device integrity: Keep your operating system updated and avoid compromised, rooted, or jailbroken devices—runtime jailbreak detection is not yet enforced by the current app startup flow.
  • Memory caveat: Mutable byte buffers (seeds, keys, PIN keys) are explicitly zeroized after use; immutable Dart VM strings cannot be overwritten in-place and are kept strictly short-lived.

Network, Smart Contract & Phishing Risks

  • Irreversible transfers: Confirmed blockchain transactions cannot be canceled or reversed. Always verify the full recipient address and target network before confirming.
  • Calldata scrutiny: When pairing via WalletConnect v2 (currently Sepolia only), inspect decoded ERC-20 transfers carefully. Unknown contract interactions trigger explicit warnings because arbitrary contract calls can transfer tokens or set allowances.
  • Phishing discipline: SANITHIUM will never ask for your recovery phrase, PIN, or a “verification deposit” via email, chat, or web forms. Only trust communications verified on sanithium.io.
  • Dangerous RPC methods blocked: Legacy raw eth_sign and key-export methods are explicitly denylisted in Web3RequestValidator.
Responsible Vulnerability Disclosure

Security Contact Process

If you identify a cryptographic, protocol, or web security issue affecting SANITHIUM Wallet or sanithium.io, report reproduction steps responsibly to security@sanithium.io or via our support portal. Please avoid testing against third-party RPC nodes or disclosing issues publicly prior to remediation review.