SigNoteSigNote
Documentation

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:

  1. You enter your passphrase
  2. The app re-derives your deviceShare using PBKDF2 (600,000 iterations)
  3. It fetches your serverShare from the server
  4. The Master Encryption Key (MEK) is reconstructed: deviceShare XOR serverShare
  5. A session key (secretBodyKey) is derived from the MEK using HKDF
  6. All Secret bodies are decrypted with secretBodyKey and 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 deviceShare is cleared from sessionStorage
  • 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 keyShared session keyUnique key per note
DecryptionAll at once on unlockOne at a time, on demand
SpeedFast (bulk decrypt)Slower (individual decrypt)
Blast radius if key leakedAll secretsJust one note
Best forPasswords, info you access oftenYour 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 string signote-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