// security & how it works
Built so you don't have to trust us
Pock encrypts everything on your device. The server is a dumb pipe that stores encrypted blobs and public keys - it never holds your passphrase, your keys, or your plaintext. Each topic below is tagged with what it applies to.
Passphrase & Secret Key
your accountEvery secret Pock gives you, what each does, and why unlocking takes two things instead of one.
Zero-knowledge
all your dataEverything is encrypted on your device. The server stores ciphertext and can't read it.
Post-quantum crypto
key exchangeX-Wing hybrid key exchange (X25519 + ML-KEM-768) - safe against harvest-now-decrypt-later.
The vault
your secretsSecrets organized into recursive dotted-namespace folders, encrypted per item.
Passwordless unlock
sign-inFace ID, Touch ID, Windows Hello, or a security key via WebAuthn PRF - no key ever leaves the device.
Secure sharing
one-off sharesSend an encrypted secret by link; the decryption key travels a separate channel.
The CLI
machinesThe same audited crypto core as a native binary - the high-assurance tier.
Team encryption
teamsOne content key sealed to each member's public key. Add/remove members without exposing plaintext.
Key transparency
teams · auditableAn append-only Merkle log of public keys, so anyone can detect a swapped key.
// the guarantee
What zero-knowledge means here
Every secret is encrypted in your browser or CLI before it leaves you, with keys derived from your passphrase and a device-held Secret Key (2SKD). The cipher is XChaCha20-Poly1305; the key exchange is X-Wing, a post-quantum hybrid. A server breach, a rogue operator, or a subpoena yields ciphertext and nothing else.
// teams
Sharing without giving up zero-knowledge
A team namespace has one content key. Each secret is sealed to it, and the key is wrapped to every member's X-Wing public key (envelope encryption). Members decrypt on their own devices; the server only routes ciphertext. Adding a member wraps the key to their key; removing one rotates it and re-wraps to the rest. (Team encryption is rolling out in phases.)
// trust, verified
Detecting a swapped key
Envelope encryption is only as trustworthy as the public keys, so Pock does two things. First, your client pins each member's key on first sight (like SSH known_hosts) and alarms loudly if it ever changes. Second, every public key is appended to a public, append-only Merkle log: the server publishes signed tree heads, and clients verify inclusion and append-only consistency proofs. Because anyone can mirror the tree heads, a server that swaps a key leaves permanent public evidence. You can audit it yourself:
// tamper-evidence
You can't be backdoored in the dark
A web app's own origin serves its code, so nothing stops that origin from shipping a targeted backdoor - TLS and CSP don't defend against the server itself. Pock can't prevent that, but it makes it impossible to do quietly. Every release publishes a signed manifest of the SHA-384 of every shipped asset, appended to the same append-only Merkle log. A verifier fetches the served files, re-hashes them, and checks they match a manifest that's provably in the public log - so a tampered or per-user payload either fails verification or leaves permanent public evidence. Audit it yourself:
The CLI and desktop app are the high-assurance tier - versioned, installed builds that can also verify the web surface before you trust it. The web vault is tamper-evident and independently verifiable; the native clients are belt-and-suspenders.
// honest limits
What we do not (yet) hide
- ›Metadata isn't encrypted. Namespace, item, and environment names are stored in plaintext so the server can route them - it sees that
acme.web.prod.STRIPE_KEYexists, never what it equals. - ›Web code is served by our origin. We can't prevent a compromised origin from serving bad code - but every release is logged so tampering is detectable, and the CLI + desktop app are the high-assurance tier.
- ›TOTP seeds live on the server - but they're an access gate, not a decryption key. Confidentiality always rests on your passphrase.
Verify, don't trust: the goal is to make cheating detectable.