How LegendPass encrypts your vault, where the keys live, and — just as important — what our encryption does not cover.
Every claim below was written from the shipping source code, including the parts that are inconvenient. A security document you cannot check is marketing. If something here turns out to be wrong, tell us at support@gammapass.com and we will correct it.
Most password managers open a document like this by telling you they can see nothing. That is rarely the whole truth, so here is ours in full, at the top, before the cryptography.
The third column is the one that matters. Your secrets are encrypted with a key we do not have. The labels around them — which services you have accounts with, under which usernames — are not. Section 6 lists every field, and section 10 explains what that means for you.
Your master password is never used directly as an encryption key, and it is never sent anywhere. It is stretched on your device into two separate 256-bit keys.
master password
+
account salt = [your account ID] ++ [random per-account salt]
|
v
PBKDF2-HMAC-SHA256 × 310,000 iterations
|
v
64 bytes -> [ 32-byte AES-256 key ][ 32-byte HMAC-SHA256 key ]To check that a typed master password is correct, the app decrypts a short known value — a canary — that was encrypted during setup. A wrong password fails the authentication check in section 3 and never touches your real data.
Secrets are sealed with AES-256-CBC combined with HMAC-SHA256 in an encrypt-then-MAC construction. Encrypt-then-MAC is the ordering cryptographers recommend: the authentication tag is verified before any decryption happens, so tampered data is rejected rather than parsed.
encrypt: IV = 16 random bytes (cryptographically secure RNG, fresh every record) CT = AES-256-CBC(plaintext, AES key, IV) MAC = HMAC-SHA256(HMAC key, IV ++ CT) out = "VENC:" ++ base64( IV ++ CT ++ MAC ) decrypt: recompute MAC over IV ++ CT MAC mismatch -> reject, do not decrypt MAC match -> AES-256-CBC decrypt
After derivation, the two keys are held in memory for the session and stored in the operating system's hardware-backed key store so you are not retyping your master password every time you open the app.
Vault items are stored locally on the device and synced through a managed Supabase Postgres database, which also handles accounts and sign-in — including Google and Apple sign-in. Encryption happens on your device before anything is handed to the network layer, so the transport is a second line of defence rather than the only one.
Unlocking the browser extension. The extension holds no long-term key, so opening your vault on a desktop requires the keys to reach the browser. They travel wrapped, and the server never sees them in the clear:
browser generates an ephemeral P-256 keypair, publishes its public key
phone shows you the request, you approve it
phone generates its own ephemeral P-256 keypair
shared = ECDH(phone private, browser public)
wrapping key = HKDF-SHA256(shared, "LegendPass Browser Unlock v1")
server stores AES-256-GCM(wrapping key, { AES key, HMAC key }) + phone public key
browser derives the same shared secret and unwrapsThis is the section other vendors summarise away. Encryption is applied to the secret field of each item, not to the whole record. The labels that surround a secret sync in readable form so they can be listed, searched, and sorted.
| Item type | Encrypted on your device | Stored readable (metadata) |
|---|---|---|
| Login | password | service name, username, URL, date added |
| Secure note | note content | title, date added |
| Wi-Fi | network password | network name, security type, notes, date added |
| Payment card | card number, CVV | cardholder name, expiry date, card brand, date added |
| Bank account | account number, IBAN | bank name, account holder, routing number, SWIFT code, account type, notes, date added |
| Two-factor code | TOTP secret | issuer, account name, algorithm, digit count, period, date added |
| Passkey | credential ID, public key, private key | relying-party ID and name, user name and display name, notes, dates |
| Account setup | password canary | account email, per-account salt, master password hint |
What this means concretely. Anyone with access to our database — us under legal compulsion, or an attacker who breached it — would learn which services you hold accounts with, the usernames on them, which banks you use and their routing numbers, and when you added each item. They would not learn a single password, card number, account number, two-factor secret, or passkey private key. Those are ciphertext, and the key that opens them is derived from a master password we have never held.
Where this is going. Encrypting metadata as well is on our roadmap. It is a larger change than it sounds — search and sort currently run against those readable fields, and existing accounts need a migration — so we are not going to claim it before it ships. This page will be updated on the day it does, and the version number at the top will change with it.
LegendPass uses two different biometric mechanisms. They have different security properties and conflating them would be misleading, so here they are separately.
Device biometrics — Face ID, Touch ID, Android fingerprint. Handled entirely by the operating system. The template lives in dedicated security hardware — the Secure Enclave on Apple devices, the equivalent trusted environment on Android. LegendPass never sees it. The app receives a yes or no, nothing more.
LegendPass face, palm, and gesture recognition. These are ours, not the operating system's, and they work differently. The camera frames are processed on your device into a mathematical template. That template is written to the app's private storage — protected by the platform's file-level encryption, iOS Data Protection or Android File-Based Encryption — and never by any other app. To be precise about what it is not: these templates are not stored in the Secure Enclave, because they are not device biometrics.
We have no administrative override, no escrowed key, and no password reset that recovers a vault. This is not an operational gap we intend to close — it is the property that makes the rest of this document meaningful. A recovery mechanism we could invoke is a recovery mechanism an attacker could invoke, or a court could compel.
If you forget your master password, the vault cannot be opened. Not by us, not by anyone.
Zero-knowledge encryption protects your vault from us and from anyone who reaches our infrastructure. It cannot protect you from your own device once that device is compromised. If malware is running with your privileges while your vault is unlocked, it can read what you can read. No architecture changes that.
A security document that lists only strengths is not worth reading. These are the honest limits of the current implementation.
If you find a flaw, email support@gammapass.com with enough detail to reproduce it. We will acknowledge within five business days. We will not pursue legal action against anyone who reports a genuine finding in good faith and gives us a reasonable window to fix it before publishing.
This document is maintained by GAMMA PASS LLC, Limited Liability Company, State of New Mexico, Entity ID 0008102768. Version 1.0, August 3, 2026.
No admin override, no escrowed key, no reset that recovers a vault. If we could open yours for you, so could anyone who compromised us.
No card required. Upgrade to Premium only when you want the extras.