Back to Privacy Overview

Security Architecture

A technical overview of how we protect your data.

Architecture Overview

Security architecture diagram showing zero-knowledge encryption flow from user device to server

Zero-knowledge architecture: your data is encrypted on your device before it ever reaches our servers.

Zero-Knowledge Architecture

Prepare That Day uses a zero-knowledge architecture. This means:

  • All encryption and decryption happens client-side in your browser
  • Our servers never see plaintext data or decryption keys
  • Even with full database access, your data remains unreadable

Key Hierarchy

Your password never leaves your device. Instead, it's used to derive encryption keys locally:

Key hierarchy diagram showing how your password derives the Vault Master Key and RSA Private Key through PBKDF2

Cryptographic Standards

We use industry-standard algorithms implemented via the Web Crypto API:

PurposeAlgorithmDetails
Password DerivationPBKDF2-SHA256600,000 iterations, 256-bit output
Vault Data EncryptionAES-256-GCMUnique IV per field, authenticated encryption
Key SharingRSA-OAEP4096-bit keys, SHA-256 hash
Trusted Device KeysAES-256-GCMNon-extractable CryptoKey in IndexedDB

How Data Flows

1Account Creation

  1. You create a strong password (validated by zxcvbn)
  2. A random 256-bit Vault Master Key is generated in your browser
  3. An RSA-4096 key pair is generated for sharing capabilities
  4. Your password is run through PBKDF2 to derive an encryption key
  5. The Master Key and RSA Private Key are encrypted with this derived key
  6. Only the encrypted keys (unreadable blobs) are sent to our servers

2Unlocking Your Vault

  1. You enter your password
  2. Encrypted keys are fetched from the server
  3. Your password derives the decryption key via PBKDF2
  4. Keys are decrypted locally and held in memory
  5. You can now read and write encrypted vault data

3Encrypting Vault Data

  1. Each field is encrypted individually
  2. A unique random IV (initialisation vector) is generated per field
  3. AES-GCM encrypts the data with your Master Key
  4. The encrypted blob + IV is stored on our servers

Trusted Contact Key Sharing

When you share access with a trusted contact, your Master Key is securely transferred without ever being exposed:

  1. Your decrypted Master Key is held in memory
  2. We fetch your trusted contact's RSA Public Key
  3. Your Master Key is encrypted with their public key (RSA-OAEP)
  4. This encrypted key is stored — only they can decrypt it with their private key
  5. When they access the vault, they decrypt with their private key

Result: Your key is shared securely. We never see it in plaintext.

Trusted Device Security

For convenience, you can trust a device to skip password entry. Here's how it stays secure:

  1. A non-extractable AES-256 key is generated via Web Crypto API
  2. This key is stored in IndexedDB — it cannot be exported or stolen via JavaScript
  3. Your Master Key is encrypted with this device key
  4. The encrypted Master Key is stored server-side with a device ID
  5. On return, the device key decrypts your Master Key locally

XSS Protection: Non-extractable keys cannot be stolen even if an attacker injects malicious JavaScript. The Web Crypto API prevents any code from reading or exporting these keys.

Device trust expires after 30 days for additional security.

Additional Security Measures

Password Strength

Enforced via zxcvbn (score 4 required)

Brute-Force Resistance

600,000 PBKDF2 iterations slow down attacks

Memory Safety

Keys held only in React context, cleared on logout

Transport Security

All data transmitted over HTTPS/TLS

What This All Means

Database breach? Attackers get encrypted blobs they can't read.

Server compromise? No plaintext data exists on our servers to steal.

Malicious employee? Even with full access, they cannot decrypt your data.

Government subpoena? We can only provide encrypted data we cannot read.

Your security doesn't depend on trusting us. It depends on mathematics.

Questions about our security? Contact us at [email protected]