How Scrinium encrypts your notes
Key hierarchy (1Password-style)
Password (in memory only)
└─(Argon2id)→ Master Unlock Key
└─ unwrap → Account Key
└─ unwrap → Vault Key
└─ per-note wrap → Note Key
└─ encrypts the note with XChaCha20-Poly1305
- Password → Master Unlock Key. Your password is stretched with Argon2id into a Master Unlock Key. It is never transmitted and never stored by the server.
- Master Unlock Key → Account Key. The Account Key is the top secret that identifies and authenticates your account.
- Account Key → Vault Key. A single key that protects your vault.
- Vault Key → per-note Note Keys. Each note gets its own key, so compromise of one note does not expose the rest.
- Note encryption. Each note is encrypted with XChaCha20-Poly1305 AEAD, and integrity is checked on every decrypt.
Primitives
| Purpose |
Primitive |
| Password key derivation |
Argon2id |
| Authenticated encryption |
XChaCha20-Poly1305 |
| Authentication |
SRP-6a |
| Recovery key |
BLAKE2b |
| At-rest storage |
Encrypted IndexedDB |
Authentication (SRP-6a)
Scrinium uses SRP-6a so the password never leaves your browser and the server proves it knows your verifier. This provides mutual authentication and protects against an impostor server that tries to capture a password.
Key rotation & recovery
- Changing your password re-encrypts the Account Key under a new Master Unlock Key (derived from the new password).
- A BLAKE2b recovery key lets you regain access if you forget your password.
- The server stores a verifier, not your password or keys.
Design review & verification
- The design and primitive choices are published here and in the source, versioned and change-controlled.
- Independent audit status will be published when available.
Honest limitations
Like all client-side crypto, security depends on the integrity of the code and the device. We publish the source so the design can be reviewed; we encourage independent audit.
Related