Trust & Transparency
Security at seQRets
Understanding the threat model, the architecture, and why your secrets are safe.
How seQRets Protects Your Secrets
Zero-Knowledge Architecture
seQRets never sees, stores, or transmits your secret. Everything — encryption, splitting, QR generation — happens locally on your device. There is no server. There is no account. No analytics payload carrying fragments of your data. Your secret enters memory, gets encrypted and split, and is destroyed.
Encryption
Your secret is encrypted with XChaCha20-Poly1305, the same authenticated encryption used in Signal, WireGuard, and libsodium. The key is derived from your password (and optional keyfile) using Argon2id (64MB memory cost, 4 iterations) — the gold standard for resisting brute-force and GPU-based attacks. A generated keyfile adds 256 bits of entropy, defeating brute-force regardless of password strength.
Shamir's Secret Sharing
After encryption, the ciphertext is split using Shamir's Secret Sharing — a mathematically proven threshold scheme. Any fewer shares than the threshold reveals zero information about the original. This isn't obscurity — it's information-theoretic security.
QR Code Output
Each share is rendered as a printable QR code designed to be distributed — stored in separate locations, given to trusted people, or locked in different safes. No single QR code is useful on its own.
Web App vs. Desktop App
Both apps use the same cryptographic core, but the desktop app closes several threat vectors that browsers can't.
| Threat | Web App | Desktop App |
|---|---|---|
| Malicious browser extensions | Exposed — extensions can read DOM, intercept clipboard, log keystrokes | Immune — Tauri's WebView loads no extensions |
| JavaScript supply-chain attack | Possible — code served from CDN at load time | Eliminated — bundled, code-signed binary |
| Memory persistence | JavaScript GC — timing unpredictable, strings immutable | Rust zeroization — compiler-fence ensures memory is cleared |
| Binary tampering | N/A | Detected — code-signed, integrity verified at install |
| Offline operation | After initial load only | Always — no network required |
| Key derivation | JavaScript (noble/hashes) | Native Rust — argon2, chacha20poly1305 crates |
| Share integrity verification | SHA-256 hash embedded and verified silently — no visible UI | Auto-verified on restore with shield icon, SHA-256 fingerprint on printed cards |
| Clipboard auto-clear | 60 seconds after copy | 60 seconds after copy |
| Bob AI API key storage | localStorage (optional "remember") | OS keychain (macOS Keychain / Windows Credential Store) |
| Network exposure indicator | Pulsing header dot: red = online, green = offline | Pulsing header dot: red = online, green = offline |
The web app mitigates supply-chain risk by working offline after the first load. Once cached, no external code is fetched. But for users handling high-value secrets, the desktop app is the recommended choice.
Ready to upgrade?
The desktop app eliminates every browser threat vector.
Native Rust crypto, memory zeroization, code-signed binary — no browser required.
The Seed Phrase Question
"Why does my seed phrase touch a connected device?"
It has to — and the design accounts for it. Your secret briefly enters memory, gets encrypted under a key derived from your password and optional keyfile, is split into Shamir shares, rendered as QR codes, and then destroyed. In the desktop app, Rust zeroes the memory with compiler-fence zeroization. The entire operation takes seconds.
After that, the device holds zero shares and zero copies of your secret. There is nothing left to steal.
"Briefly is all it takes!"
For that brief window to matter, an attacker would need active malware already running on your device — sophisticated enough to read process memory in real time at the exact moment you perform the operation.
If that's your situation, no tool protects you — air-gapped or otherwise:
- •That same malware can keylog your hardware wallet PIN
- •It can screenshot your paper seed when you check it
- •It can modify clipboard contents when you copy an address
- •It can replace firmware on your hardware wallet during updates
The threat model isn't "does the secret touch a device?" It's "is the device compromised at that moment?"
What seQRets actually replaces
Most people aren't using air-gapped machines. They're protecting their seed phrases with:
- •A piece of paper in a desk drawer (fire, theft, single point of failure)
- •A screenshot synced to iCloud or Google Photos
- •A password manager (centralized target, corporate breach risk)
- •A plaintext file called "seed.txt"
- •Nothing at all
seQRets replaces all of that with encrypted, threshold-split backups distributed across multiple locations. Even if one share is physically stolen, it's cryptographically useless without meeting the threshold.
The honest bottom line
An air-gapped machine with a verified OS that never connects to anything is more secure. seQRets doesn't claim otherwise. But for the 99% of crypto holders who don't have that setup, the choice isn't between seQRets and a perfect air-gapped workflow. It's between seQRets and a sticky note.
Frequently Asked Questions
Responsible Disclosure
If you discover a security vulnerability in seQRets, please report it privately to security@seqrets.app. Do not open a public issue. We take all reports seriously and will respond within 48 hours.
Upgrade your security
You've seen the difference.
Make the right choice.
The desktop app gives you native Rust cryptography, memory zeroization, and zero browser attack surface. Your secrets deserve it.
Get the App →