Security architecture

How NomadVault keeps keys away from the server

This page describes the cryptography we use, what each component can and cannot see, and the threats this design does not address. Reviewed September 2026.

Trust model

We assume our own infrastructure can be compromised. The design therefore places every key and every plaintext operation in the client, and treats the tenant API, database and object storage as untrusted stores of ciphertext. An operator with full database access obtains file sizes, timestamps and wrapped keys, not content.

01
Local encryption
Browser · your keys
AMK → RSA-4096 + ML-KEM-768 → per-file key
Holds the user's own Account Master Key, derives and unwraps file keys, performs all AES-GCM operations.
Trusted
02
Tenant boundary
Isolated tenant API + database
Encrypted payloads · signed access grants
Authorises requests, stores wrapped keys, grants and the audit chain.
Untrusted
03
EU storage
Encrypted object storage
Dedicated bucket · Germany / Finland
Stores opaque ciphertext blobs addressed by random identifier.
Untrusted

02 / 03 The server receives ciphertext, not your document contents. Metadata and access events remain visible.

What the server can and cannot see

  • File sizes, MIME types, timestamps and version counts
  • Folder structure and the sharing graph: who has access to which file or folder, with which role
  • User identities, sessions and every audit event
  • Access patterns: who opened, uploaded or downloaded what, and when
  • Blinded search tokens: which tokens occur in which file, how often, and which files a query matched, never the words behind them
  • File contents
  • File and folder names
  • Notes and previews
  • Any private key, file key or search key
  • Your password

Key hierarchy

The chain starts at the individual user, not the tenant. Each user derives their own Account Master Key from their password with Argon2id in the browser; it unlocks only that user's RSA-4096 and ML-KEM-768 key pairs. Every file has its own symmetric key, wrapped to those key pairs twice, classically and post-quantum, so that a future break of RSA alone does not expose content. There is no tenant-wide master key and no administrator key: an admin who has not been granted a file cannot decrypt it.

Password (never transmitted)
Account Master Key · per user · Argon2id
RSA-4096 key pair
ML-KEM-768 key pair
Wrapped file key (hybrid, per file)
AES-256-GCM file ciphertext

Encryption flow on upload

  1. 01
    SanitiseContent Disarm & Reconstruction strips macros, scripts and embedded objects in the browser.
  2. 02
    Generate file keyA 256-bit key and 96-bit nonce from the platform CSPRNG, per file version.
  3. 03
    Encrypt in chunksAES-256-GCM over 10 MB chunks, each with its own nonce and the chunk index as authenticated data, the last one size-padded; streamed as it is produced.
  4. 04
    Wrap the key twiceRSA-4096-OAEP and ML-KEM-768 encapsulation, combined with HKDF.
  5. 05
    Upload and recordCiphertext goes to your bucket; the tenant records the wrapped key, the encrypted metadata envelope and an audit entry.

Sharing

Granting access re-wraps the file key for the recipient's public keys inside the sender's browser. The grant is signed with Ed25519 and pinned to the recipient's key fingerprint, so a server that swapped in its own key would produce a grant the client rejects.

Sender's browserUnwrap file key → re-wrap for recipient → sign grant (Ed25519)
signed grant
Recipient's browserVerify signature and pinned fingerprint → unwrap → decrypt locally

Threat model

What this design stops, and what it does not.

ThreatMitigationResidual
Storage breachCiphertext only; keys never presentLow
Malicious insider at NomadVaultNo key material in the tenant; tamper-evident audit chainLow
Recorded traffic, decrypted laterHybrid ML-KEM-768 wrapping todayLow
Metadata analysisEncrypted metadata envelopes; sizes, timing, sharing graph, access patterns and blinded search tokens still observablePartial
Compromised user devicePasskeys, MFA, session scoping, device revocationOut of scope

Operations and compliance

HostingGermany and Finland, EU-only data paths
BackupsEncrypted, off-site, same jurisdiction
Availability99.5% target per tenant, published status page
CertificationGDPR-aligned; working towards ISO 27001 and BSI C5

Documents