Security model

CanCan handles financial evidence, so its security boundary is deliberate and narrow: an encrypted local Vault, OS-managed secrets, and no hosted surface.

How CanCan protects your data

Local-first architecture

CanCan is a single-machine system: one Mac, one encrypted Vault, no hosted backend. The choices below are implemented in the open-source repository — apps/desktop/src-tauri — not promised on a slide.

Database
SQLCipher with vendored OpenSSL — the ledger is encrypted page by page, so no plaintext financial data ever reaches the disk.
Documents
Source files are sealed in XChaCha20-Poly1305 envelopes under a file-encryption subkey that HKDF-SHA256 separates from the master key, each envelope carrying its own random 24-byte nonce — authenticated encryption, so tampering is detected, not just discouraged.
Key derivation
Your password is stretched with Argon2id into a 256-bit wrapping key — the RFC 9106 low-memory profile (64 MiB, t=3, p=4) by default, or the OWASP minimum profile (19 MiB, t=2, p=1) when the first derivation exceeds the 750 ms unlock budget. That wrapping key seals a randomly generated master key; the password itself is never stored.
Secrets
Vault keys, Touch ID-protected unlock, OAuth refresh tokens, and statement passwords live in the macOS Keychain — never in the database or in plain files.
Integrity
Files are SHA-256 hashed on ingest and the digest is stored with the document; every decryption is authenticated by the envelope itself, and a Vault integrity sweep re-verifies stored bytes against the recorded digest — mismatches are marked missing, never served. Duplicates collapse to one verified copy.
Process boundary
The UI process receives bounded, presentation-safe read models only — raw file bytes, filesystem paths, hashes, locators, and database handles never cross into it.
Network
No listener, no telemetry, no analytics. Outbound connections exist only for capabilities you switch on: Gmail (official API, read-only scope), your own AI provider with a key you hold, and update checks that verify signed metadata before anything runs.
Releases
Artifacts are built by CI from immutable tags with checksums, signatures, and build provenance — never from a developer machine.

Reporting a vulnerability

Please report security issues privately — never in a public issue, discussion, or pull request.

Supported versions

CanCan is in a pre-1.0 preview line. Only the latest published 0.x Preview release receives security fixes; fixes ship as new releases, never as silent patches. A security-critical update is explained prominently in the app and still waits for your approval to install.

Get preview