PersonalPremiumFamilyTeamBusinessEnterprise
Security invariants
The absolute constraints of PulsVault's zero-knowledge design — ten hard guarantees that hold across every feature, plan, and release.
These are the hard guarantees of the product — absolute constraints of the zero-knowledge design that every feature is built and tested against. They are not configuration defaults or best-effort policies: a change that would violate any of them is rejected by design review and by invariant assertions in the test suite.
The invariants#
Must never be violated
- Raw UMK, DEK, and PDS never reach the server. Only their encrypted forms — the wrapped master key and wrapped vault DEKs — are ever stored.
- The primary vault is always AES-256-GCM, regardless of any organization encryption policy, and it is never shareable.
- A password change only re-wraps the UMK. It never triggers re-encryption of vault items.
- The Access Key is unrecoverable by design. Your browser generates it and the server never sees it — only a BCrypt hash of a one-way verifier is stored; if lost, recovery requires the Recovery Key.
- Signup blocks until the primary vault DEK is initialized. The client must store the wrapped DEK before registration is considered complete — no user enters the app with an uninitialized primary vault.
- A secure link's symmetric key lives only in the URL fragment (
#key=…). The HTTP specification guarantees fragments never reach the server. - DEK rotation happens client-side. When shared access is revoked, the owner's device re-encrypts items under a new DEK — the server cannot do this because it holds no keys.
- OWNER is never assignable via sharing. The maximum access level a share can grant is EDITOR.
- Every AES-GCM encryption uses a unique 12-byte IV. IVs are never reused under the same key.
- The server never sees the Access Key or the Recovery Key. Your browser generates both at signup, shows them once, and sends only one-way verifiers; the server stores hashes of those and cannot re-display either key.
Architectural decisions that back them#
The invariants are upheld by a handful of deliberate design choices rather than ad-hoc checks:
| Decision | Why it protects the invariants |
|---|---|
| Two-gate session model | Vault data is inaccessible without a vault session, even with a valid login JWT (invariant 1) |
| Per-vault DEK, not per-item | One decrypt per vault open, while separate vaults keep independent keys (1, 7) |
| Sharing by key re-wrapping, not re-encryption | The DEK is wrapped per recipient with RSA-2048-OAEP; items are never re-encrypted for a share (1, 8) |
| Server as opaque blob store | Encrypted fields are stored and returned verbatim — the backend has no decrypt path to misuse (1) |
| Hash-chained audit ledger | Entries form a linked chain with HMAC signatures; rows cannot be inserted outside the audit service (see Audit log) |
What this means in practice#
- Support staff cannot read your secrets, reset your vault contents, or bypass the Emergency Kit — there is nothing on the server to decrypt with.
- Losing both your master password and your Emergency Kit means the data is gone. This is the deliberate price of invariant 1 and 4.
- Compliance reviewers can verify invariant 9 and the envelope format directly in stored ciphertext, and chain integrity via the audit verification endpoint.
Related#
- Zero-knowledge model — the design these rules protect
- Encryption architecture — the key hierarchy in detail
- Threat model — what the invariants defend against
Was this page helpful?