← Back to front page

Security architecture

A detailed look at how we ensure your data is never readable by anyone but you.

We cannot read your data

Not a policy — a property of the math.

Every byte on our servers is sealed under a key that never leaves your device — and nothing reaches your bank unless you unlock it. The backend stores only ciphertext and public keys.

Your browser
Private key (ECDH P-256)
IndexedDB wrapped under your passphrase
public key only
Our backend
Public key (encrypt only)
Ciphertext blobs only
PSD2 API
Your banks
350+ PSD2 banks
Credentials stay with your bank
01

Your key never leaves your device

An ECDH P-256 keypair is generated in your browser via the Web Crypto API. The private key is wrapped under your passphrase (PBKDF2) and stored in IndexedDB — it never leaves your device.

02

We only ever get your public key

The backend receives only the public key — enough to encrypt data for you, but mathematically useless for decrypting it.

03

Your data is sealed under your key

During a sync you authorize, the backend fetches from your bank and immediately seals every account and transaction under your public key (ephemeral ECDH P-256 + HKDF-SHA256 + AES-256-GCM) — ciphertext it can write but never read.

04

We store ciphertext, never secrets

Nothing is persisted in the clear — not even your bank session token. Each record is just an envelope: ephemeral public key, nonce, and ciphertext.

What we keep on our servers

Just three things live on our servers — and none of them can reveal your banking data.

  • Your public keyEncrypts data for you. Mathematically useless for reading it back.
  • Encrypted dataYour accounts and transactions, encrypted under your public key the instant they're fetched — then stored as ciphertext we can never read back.
  • Encrypted sessionStored sealed and decrypted only just-in-time, during a sync you trigger. Without your key, we can't reach your bank at all.

Never stored: plaintext banking data. We keep only ciphertext that we can't decrypt.

Reading your data

You fetch ciphertext and decrypt it locally. The browser and the headless S2S client run the same code path, so the cryptographic guarantees are identical.

No background access

Even the banking session token is encrypted under your key. A sync runs only while you're present with your key unlocked: decrypt the session → fetch from your bank → re-encrypt the results → discard all plaintext.

No silent jobs, no standing access — without your unlocked key, we cannot fetch anything from your bank.

Export your key for automated use

Server-to-server

Export your private key (JWK or PKCS#8) and provision it into your own infrastructure. The headless S2S client uses the same decryption path as the browser, and the key never leaves systems you control.

Export requires an explicit confirmation from you. The key becomes extractable only at that moment — in normal operation the local copy stays locked in your browser.

JWKPKCS#8extractable: true