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
  1. 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.
  2. Master Unlock Key → Account Key. The Account Key is the top secret that identifies and authenticates your account.
  3. Account Key → Vault Key. A single key that protects your vault.
  4. Vault Key → per-note Note Keys. Each note gets its own key, so compromise of one note does not expose the rest.
  5. 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