Skip to main content
Trust & Security

Your family's most private information deserves security you can inspect.

We built CarryOn for families like ours. The same encryption, key handling, and operational controls we'd want guarding our own wills, our own messages, our own kids' inheritance. This page documents — honestly — exactly what those controls are today.

Encryption — at rest and in transit

  • Scrambled before it’s stored — every document, message, and vault item is encrypted (AES-256-GCM).
  • Per-estate encryption salt generated at estate creation. No two families share a key.
  • PBKDF2-HMAC-SHA256, 600,000 iterations for password-derived keys (NIST recommends ≥600k).
  • TLS 1.3 with HSTS (max-age 2 years, includeSubDomains, preload flag set; submitted to the browser preload list).
  • Encrypted with per-estate keys; access controlled and audited. Documents are stored AES-256-GCM encrypted with keys derived per estate from key material CarryOn operates. Because we hold that key material, this is not a zero-knowledge system: CarryOn staff access to stored content is restricted to administrator roles, limited to defined support and verification tasks, and every document download and vault view is written to an append-only audit trail — access is controlled and audited, not impossible. AI chat transcripts, which can quote documents you flagged for AI analysis, are encrypted at rest with the same per-estate keys and are deleted with the estate or account they belong to.

Authentication & Session Security

  • HMAC-SHA256 signed JWTs with token blacklist + auto-expiring TTL index in MongoDB.
  • Single-session enforcement for non-admin accounts — old sessions are invalidated when you log in elsewhere.
  • Account lockout after 5 failed attempts within 15 minutes.
  • A one-time email code at sign-in, on by default for every account, with an option to skip it for the rest of the day on a trusted connection; passkeys supported. SMS codes coming soon.
  • WebAuthn / Passkey support for benefactor and beneficiary accounts.

Key & Secret Rotation

  • JWT signing secrets rotated at least annually and on any incident.
  • Stripe API keys rotated when staff change roles or leave.
  • VAPID push keys persisted to environment, not disk — survives pod restarts cleanly.
  • Per-estate AES salts are immutable for the life of the estate; we never re-key without explicit user consent because it would invalidate all encrypted data.

Infrastructure

  • Backend hosted on Render (Virginia, US East); web app served by Vercel (global edge). MongoDB Atlas (encrypted-at-rest, automatic backups, point-in-time recovery).
  • Distributed scheduler locks (MongoDB-backed) prevent duplicate background jobs in multi-pod deployments.
  • MongoDB-backed sliding-window rate limiter on every authentication and high-value endpoint.
  • Sentry error monitoring on both backend (FastAPI + Starlette) and frontend, gated behind env-based DSN so dev environments never report.
  • K8s-style liveness + readiness probes (/api/health/live, /api/health/ready) for graceful rolling deploys.

Browser-Side Hardening

  • Content Security Policy (default-src 'self', tight allow-list for Stripe and fonts).
  • HSTS (2 years) with includeSubDomains and the preload flag.
  • X-Frame-Options: DENY (no clickjacking).
  • X-Content-Type-Options: nosniff.
  • Referrer-Policy: strict-origin-when-cross-origin.
  • Permissions-Policy locks down camera, mic, geolocation, payment to first-party only.
  • Cross-Origin-Opener-Policy: same-origin; Cross-Origin-Resource-Policy: same-origin by default (public images the site embeds are marked cross-origin).

Privacy & Data Protection

  • You own your data. Full export tooling described on our Wind-Down & Data-Portability Promise.
  • Beneficiaries see nothing until you choose. Pre-transition, the only surface they have is their own profile.
  • "Public Device Mode" wipes the local cache (IndexedDB + JWT) on tab close or inactivity for shared devices (libraries, FEMA shelters).
  • We never sell, trade, or market your family data to third parties. Ever.
  • AI processing — zero data retention. Estate Guardian, the Beneficiary Concierge, and our other AI features are powered by xAI (Grok). Our xAI account is configured for zero data retention: the content of each request is processed only to generate the response and is not stored by xAI afterward. Separately, xAI's published API policy excludes API content from model training. The conversation transcripts you see in the app are stored by CarryOn under the controls described above — not by xAI.
  • Dictation & AI Builders — you choose who hears your voice. The "describe it and I'll draft it" builders (Entities & Structures, Financial Picture, and the pillars that follow), Milestone Message dictation and the Estate Guardian mic all run through one dictation setting. CarryOn Private Dictation (the default we recommend) records in your browser and sends the audio only to CarryOn, which transcribes it on the same zero-data-retention xAI account described above; the audio is held in memory for that single request and is never written to disk, storage or our database, and the transcript is returned to you — not stored. Device dictation instead uses the speech recognition built into your phone or browser (Apple on iPhone, iPad and Mac; Google on Chrome and Android), the same engine as your keyboard's mic — that audio is processed by Apple or Google under their terms and CarryOn receives only the text. You can switch at any time under Settings → Dictation. In every case the AI sees only the text you dictated or typed plus the names already in your estate, it proposes a draft, and nothing is created until you review it and tap Build.

Compliance & Audits

  • Preparing for SOC 2 Type II. We are preparing for a SOC 2 Type II audit. We do not claim SOC 2 attestation today. When the audit is complete, the report and the audit firm's name will be published on this page.
  • GDPR & CCPA data-subject rights (access, deletion, portability) supported via in-app export and a written request to privacy@carryon.us.
  • HIPAA-style controls applied to medical directives stored in the Secure Document Vault, though we are not a covered entity.

Reporting a Vulnerability

If you've found a security issue, please tell us before you tell the internet. We don't have a paid bug bounty yet, but we will publicly credit you on this page (with your permission) and respond within 72 hours.

Questions about how we protect your family's information? Write to security@carryon.us. We answer every legitimate inquiry, often within the same day.

Last updated: October 8, 2026. This page is the source of truth for CarryOn's security posture. We change it before we change practice.