Safe, secure, and private.
Everything in Anchor is designed to keep your evidence protected. Your recordings are encrypted before they leave your device. We never see the key.
How we protect your evidence
Three architectural truths. The design makes the outcome.
Encryption on your device
Recordings are encrypted with AES-256-GCM before save or upload. The key stays in your device secure storage (Keychain or Keystore). We receive ciphertext only. We cannot decrypt it.
Plaintext never leaves your control.
Server stores only ciphertext
No server-held decryption keys for recordings or contact data. Compromise of our storage does not yield plaintext.
We do not have your keys.
Trusted contacts: app-only
No web link, no code in a message. The recipient proves device key control to access evidence. We do not send decryptable links; we do not store the keys that would make them work.
Evidence only in the app.
What exists in server reach and what we do not have
Clear boundaries. We hold only what we cannot decrypt or use to identify you.
What exists in server reach
- Encrypted blobs
- Keyed identifiers
- Push tokens
- Limited metadata
What we do not have
- Plaintext recordings
- Plaintext contact numbers or lists
- Invite secrets
- Recovery keys
- Plaintext evidence keys
Trusted contacts: app-only, key-bound
Evidence stays in the app. No web link, no code in a message.
Invite
Invite via link and QR only.
The server never stores the invite secret.
Bind
The recipient proves device key control.
No web viewer; no 6-digit code in the confidentiality boundary.
Access
Evidence viewing is in-app only.
No vault link or code sent in SMS.
Recovery and revocation
You hold the keys. We hold only what we cannot open.
Recovery
Recovery uses a key you hold. We store only an encrypted envelope. We cannot decrypt it.
Revocation
Revocation stops future access (new envelopes, URL refresh). We cannot claw back already-exported plaintext. We say so clearly.
Legal demand and compulsion
If we are compelled to hand over data, the architecture determines what exists.
Can produce
- Encrypted recording ciphertext (undecryptable without your key)
- Keyed incident identifiers
- Device push tokens
- Vault link metadata
Cannot produce
- Recordings in plaintext
- Trusted contact phone numbers in plaintext
- Contact list in plaintext
- Invite secret
- Recovery key or plaintext evidence key
The architecture makes this impossible, not policy.
See the full breakdown on our privacy pageWhat we defend against
Our architecture is built to resist these threats. No policy promises: the design makes the outcome.
Server compromise
No decryption keys on server; ciphertext-only.
Compromise does not yield plaintext.
IDOR / BOLA
Upload token binds to incident; identity must match.
Only the incident owner gets upload and access.
Token guessing
Strong random token; timing-safe comparison.
Guessing is not feasible.
Trusted Contact impersonation
Recipient proves device key control; no web viewer.
Evidence only in the app.
Invite hijack
Invite secret in link fragment only; server never stores it.
Accept fails without the fragment.
Operational controls
How we run the system: logging, notifications, access.
- Logging: We do not log incident IDs, signed URLs, tokens, key material, phone numbers, or decrypted bytes.
- Notifications: No content hints in SMS or push (no "video", "recording", or similar).
- Access: Identity-bound; sessions are short-lived.
Common questions
Privacy and security
More questions? See our full FAQ
Report a vulnerability: security@goanchor.app