Secrets 🔒
Secrets are the second tier of privacy in SigNote. The note body is encrypted in your browser before it ever leaves your device. The server stores only ciphertext — it cannot read what you've written.
How Secrets work
When you save a Secret, the body is encrypted client-side using AES-GCM 256-bit encryption before being sent to the server. Only the title is stored as plaintext (to support search and navigation).
When you open the Secrets section, all bodies are decrypted in the background for your session — so browsing feels fast once you've unlocked.
Unlock flow 🔑
To access your Secrets, you need to unlock encryption with your passphrase. Here's what happens:
- You enter your passphrase
- The app re-derives your
deviceShareusing PBKDF2 (600,000 iterations) - It fetches your
serverSharefrom the server - The Master Encryption Key (MEK) is reconstructed:
deviceShare XOR serverShare - A session key (
secretBodyKey) is derived from the MEK using HKDF - All Secret bodies are decrypted with
secretBodyKeyand held in memory for the session
The passphrase itself is never stored anywhere.
Auto-lock 🔓
SigNote has two levels of automatic locking to protect your Secrets when you're not actively using them.
Soft lock — tab hidden
When you switch away from the tab (or minimise the window), SigNote immediately clears the MEK from memory and hides all decrypted content. Your deviceShare is kept in sessionStorage.
When you return to the tab and click Unlock, the MEK is silently reconstructed from deviceShare without asking for your passphrase again. You're back in your session instantly.
Hard lock — inactivity or sleep
A hard lock occurs when:
- You click the Lock button explicitly
- The tab has been inactive for 5 minutes (no mouse, keyboard, or touch input)
- The device goes to sleep (detected when the tab resumes after a gap of 30+ seconds)
On hard lock:
- The MEK is cleared from memory
- The
deviceShareis cleared fromsessionStorage - All decrypted content is immediately inaccessible
To access your Secrets again, you must enter your passphrase. Closing the tab also clears deviceShare automatically, since sessionStorage is tab-scoped.
Search
Secrets can be searched by title only. Because bodies are encrypted, the server can't index them.
If full-body search is important to you, use Notes instead. If title-only search isn't enough and you need stronger isolation per note, consider Seals.
Secrets vs Seals
| Secrets 🔒 | Seals 🛡️ | |
|---|---|---|
| Encryption key | Shared session key | Unique key per note |
| Decryption | All at once on unlock | One at a time, on demand |
| Speed | Fast (bulk decrypt) | Slower (individual decrypt) |
| Blast radius if key leaked | All secrets | Just one note |
| Best for | Passwords, info you access often | Your most sensitive data |
→ See Seals for the strongest privacy tier.
Technical details
- Algorithm: AES-GCM 256-bit
- Key:
secretBodyKey— derived from MEK via HKDF with info stringsignote-v1/secret-body - IV: Fresh random 12 bytes per encryption operation
- Stored: Ciphertext + IV in Postgres (no plaintext body ever written server-side)
→ Full cryptographic details in Encryption.
→ Concerned about what an attacker could access? See Threat model.
File attachments 📎
Files attached to Secrets are encrypted client-side before upload using AES-GCM with the account's attachment key (fileEncKey), derived from the MEK alongside secretBodyKey. The server receives only ciphertext and never sees the original file. Decryption happens in the browser when you download or view the file.
Uploading is blocked if encryption is locked — you must unlock first.
→ Full details in File uploads