Skip to content
ToTóo– βeta
Security & privacy

Your identity is yours. We just help you prove it.

The cryptography we use, the data we keep, and the data we never see. Plain English, no hand-waving.

Cryptography

ToTóo is built on three open standards that have been audited and battle-tested in the real world for over a decade. We do not invent our own cryptography.

FIDO2 / WebAuthn

Your identity key is generated inside your device's secure hardware (Touch ID, Windows Hello, YubiKey). It cannot be exported or phished. The same standard used by banks and governments.

AES-GCM 256

ID documents are encrypted in your browser using a non-extractable key stored in your device's secure storage. The server only ever receives ciphertext. No one — including us — can decrypt it without that key.

The tradeoff: because the key is generated and kept on your device, encrypted documents stay on the device that encrypted them. They are not accessible from a second device and are unrecoverable if you lose access to the original one. We chose this so no breach, subpoena, or insider threat can ever expose your documents — even from us.

Selective disclosure

You can prove you are over 18 without revealing your date of birth. You can share a name without sharing your address. The minimum data, by design.

Libraries we trust: @simplewebauthn for FIDO2, the Web Crypto API for AES-GCM, and audited elliptic-curve primitives for any future zero-knowledge proofs.

What we never see

This is the part that matters. We do not have access to — and cannot have access to — the following:

  • Your raw ID documents

    Passport scans, driver licenses, and other uploaded documents are encrypted in your browser before they touch our servers. The encryption key is bound to your device. We literally cannot read them — even if we wanted to, even if a court ordered us to. The same property means documents stay on the device that encrypted them and are not recoverable from a different device.

  • Your private key material

    The private half of your identity key is generated and stored inside your device's secure hardware (Secure Enclave, TPM, or YubiKey). It is never transmitted, never logged, and never reconstructable from anything we store.

  • Your biometric data

    Your fingerprint, face, or other biometric stays on your device. The authenticator tells us "yes" or "no" — it does not send the biometric itself. This is a property of the FIDO2 standard, not a promise we can break.

  • Your browsing behavior

    No third-party analytics. No advertising trackers. No fingerprinting scripts. We use a privacy-respecting error monitor (or none at all) and nothing else.

Threat model

Every security system has limits. Here is what ToTóo protects against — and what it does not.

We protect against

  • Phishing — keys are bound to the origin (your domain) and cannot be exfiltrated
  • Password reuse — there is no password. Authentication is biometric or hardware-key based.
  • Server breach exposing raw data — we only hold ciphertext of documents and public key material
  • Impersonation — only the device with the private key can sign on behalf of a user
  • Tampering with verification records — every record includes a counter and is signed

We do not protect against

  • Physical coercion — if someone forces you to scan your fingerprint, we cannot detect that
  • Compromised user device — if your phone is already rooted or has malware, the local threat model is broken before we ever see you
  • The person you verify being malicious — we verify their identity, not their intentions. A real bank robber can pass a FIDO2 check.
  • Coordinated Sybil attacks — one person making many accounts is mitigated by in-person verification, not by cryptography

Important: Identity verification answers "is this person who they claim to be?" — it does not answer "is this person trustworthy?" or "is this person acting in good faith?". Use it as one signal among many.

If you lose your device

ToTóo is designed so that we cannot recover your data on your behalf. That property comes with consequences when you lose access to a device. Here is what is and isn't recoverable.

Recoverable

  • Your account — sign in from a new device using a fresh biometric or hardware key
  • Your identity credentials — register additional devices from your account page to avoid lock-out in the future
  • Your profile data — name, email, phone, date of birth are stored on the server
  • Your verification history — who you have verified, when, and which attributes were shared

Not recoverable

  • Encrypted ID documents uploaded on the lost device — the decryption key died with the device
  • The local copy of your identity private key — there is no server-side copy by design
  • Any in-progress verification flows that lived only in your browser session

Recommended setup

Register at least two devices (for example, your phone and a hardware security key) so that losing one does not lock you out of your account. Re-upload ID documents on each new device where you want them available — they are encrypted afresh with that device's local key.

Coming soon: an optional passphrase-based key backup so you can restore encrypted documents on a new device without trusting us with the key. The passphrase is never sent to our servers and the backup remains encrypted under your passphrase alone.

Data we store

Transparency about what we keep. Everything below is required to make the system work. You can delete your account and we delete it all.

DataFormWhy we need it
Your public keyPlaintext (public by design)To verify signatures you produce. This is the public half of your identity key.
Credential IDHash / identifierTo look up which key to use when you authenticate.
Signature counterIntegerTo detect cloned authenticators. Each successful sign increments the counter.
ID documentsAES-256-GCM ciphertextTo re-share them with future verification requests. The decryption key is on your device only.
Verification recordsSignatures + timestampsTo prove a verification happened and when. Includes who verified whom.
Account emailPlaintextTo sign you in. We never sell, share, or use this for marketing.

Infrastructure

We use boring, well-audited infrastructure. Nothing exotic, nothing that introduces new classes of risk.

Database & Auth

Supabase (PostgreSQL + GoTrue)

Row-level security on every table. Service role used only by Edge Functions, never exposed to clients.

Edge Functions

Deno Deploy

Stateless, isolated per-request. No long-lived processes that could be compromised.

Hosting

Static SPA on a managed CDN

TLS 1.3, HSTS, automatic certificate rotation. No origin server to patch.

Secrets

Environment variables, scoped per function

No secrets in code. No secrets in logs. Rotation is a single dashboard click.

Vulnerability disclosure

Found a bug? We want to hear about it. We commit to acknowledging security reports within two business days and to working with you on a fix before any public disclosure.

Report privately

Email is the fastest path to us. PGP key available on request.

security@totoo.id

Public issues

For non-sensitive bugs, open an issue on our public tracker. We triage weekly.

GitHub Issues

Our commitment: we do not pursue legal action against security researchers who act in good faith, stay within scope, and give us a reasonable window to fix issues before disclosure.

Questions we didn't answer?

We're happy to go deeper on any of this. Email a real human and you'll get a real answer.