How Ophie encrypts, stores, and deletes your data. Engineering details written for users, not just auditors.
Looking for the plain-English version? Read /security for a consumer overview of our encryption-at-rest model.
Last Updated: May 4, 2026
This Trust Center describes practices Ophie intends to operate at public launch. It has not undergone external legal or security audit. Claims have been reviewed internally against the codebase by the founding team.
Every session transcript, memory, and insight you share with Ophie is protected with a per-user envelope encryption key — a Data Encryption Key (DEK) — stored wrapped under an AWS KMS Customer-Managed Key (CMK). Your ciphertext lives in Supabase Postgres. The KMS CMK never leaves AWS; our agent unwraps your DEK once per session, uses it to encrypt with AES-256-GCM + AAD, and never writes the raw key to disk or logs.
This page answers three questions for every layer of the stack: what is encrypted, by whom, and what survives a breach. We also document what is not protected — because honest scope matters more than marketing confidence.
The diagram below shows the full dataflow from your microphone to persistent storage:
user_profiles.encrypted_dek; the KMS CMK never leaves the AWS HSM boundary.encrypted_mac_key) covers one indexed column per table for equality lookups without decrypting row content.| Key | Rotation Trigger | Mechanism |
|---|---|---|
| AWS KMS CMK | Annual (automatic) | AWS KMS automatic key rotation enabled — verifiable in Terraform module infrastructure/terraform/modules/kms/ |
| Per-user DEK | On-demand via runbook (TRUST-07) | New DEK generated; all ciphertext re-encrypted in background; old DEK NULLed after PITR window closes |
| JWT signing keys | Managed by Supabase Auth | Not under application control; Supabase rotates per their SLA |
Per-user DEK rotation is triggered manually via the TRUST-07 runbook. The cleanup gate ensures the old DEK remains readable through the PITR window, then is NULLed permanently.
Ophie uses Pinecone Serverless (Standard tier) for vector similarity search over session memories. This tier does not offer Customer-Managed Encryption Keys (CMEK). We completed a formal risk-acceptance review before shipping this configuration.
| Control | Status |
|---|---|
| CMEK (customer-managed keys) | Not available on Standard tier — risk accepted |
| Per-user namespace isolation | Enabled — each user's vectors are in a separate namespace |
| Chunk size | At least 128 tokens per chunk — limits re-identification from partial fragments |
| Ciphertext sidecar | Each vector stores an opaque AEAD ciphertext in metadata — the actual transcript content requires KMS decryption to read |
| Kill-switch playbook | Documented internal runbook — deletes all user namespaces if Pinecone is compromised |
The decision: the Standard tier posture is acceptable for pre-launch given the ciphertext sidecar pattern and namespace isolation, with a commitment to evaluate CMEK if Pinecone adds it to Standard or if usage grows past the Enterprise tier threshold.
The following surfaces represent known leakage vectors — places where some data may be visible outside the encrypted envelope. We disclose them proactively.
EncryptionContext that contains the user_id. User IDs are not content — they are identifiers — but they are visible in CloudWatch metric dimensions to anyone with CloudWatch read access to the account.When you delete your account, the following sequence runs:
deleted_at timestamp. Pinecone vectors are deleted (vendor-side delete via API).The deletion timeline value above is read live from our backend configuration. It reflects the current Supabase PITR retention setting. If the PITR window changes, this page updates automatically within 5 minutes.
Decrypt cache invalidation is per-process; in the worst case, a previously-cached DEK on another worker remains usable for up to 10 minutes after account deletion. We do not promise sub-second cross-process eviction. The DEK is NULLed in the live database at T+0; the cache window is a residual exposure documented in §5.
Each encryption-touching pull request includes a committed self-review entry using a dedicated encryption PR template. These entries are not a substitute for independent audit; they are a compensating control during the pre-launch solo-founder phase.
Questions about our security practices? team@ophie.app. For privacy questions, see our Privacy Policy.