./security_model.md
How We Protect Your Data
Not a promise — math. This page explains PingVaults' zero-knowledge architecture, and why even if we wanted to "act maliciously", we couldn't.
// core commitment
You don't have to trust us.
Encryption happens in your browser. Your keys never leave your device.
Our servers only store ciphertext they can never unlock.
Even if we disappear tomorrow, your data lives forever on Arweave.
Even if we wanted to act maliciously — there's nothing to steal.
This isn't a promise. It's math.
// data_flow[]
Data Flow (Where Your Answers Go)
Answers exist only in browser memory. They are never logged, cached, or persisted anywhere.
Strips spaces, lowercases, converts full-width characters — so 'Alice' and 'alice' always derive the same key. Runs entirely in the browser.
Answers are fed through PBKDF2 with a random salt to derive an AES-256 key. The key material never leaves the browser.
Your vault content is encrypted with the derived key, producing ciphertext. Answers and key are then discarded from memory.
The server receives only ciphertext, salt, IV, and key schema (field types and question text). Answers are never in the request body.
When reading, ciphertext is downloaded from Arweave and decrypted locally using the re-entered answers. The server is never involved in decryption.
// server_access_table[]
What the Server Can and Cannot See
// open_source[]
Open Source Policy
📂 pingvaults-crypto ↗
The encryption core is fully open source (MIT), including complete test vectors and offline decryptor HTML files. Anyone can audit, run tests, and verify there are no backdoors.
MIT · crypto.ts · test vectors · offline decryptors
🔒 Main Repo (Proprietary)
UI, Inactivity Switch engine, API routes, and other business logic are proprietary. Even if this layer were compromised, the server only holds ciphertext it cannot decrypt.
UI · API · Inactivity Switch · DynamoDB
// faq[]
FAQ
Can PingVaults read my vault content?+
What if PingVaults shuts down?+
Does the offline decryptor depend on pingvaults.com?+
Could you secretly send my answers in JavaScript?+
Is the encryption strong enough?+
Transparent architecture. Auditable code. Permanent storage.