Why WattleDBFeaturesPricingvs SupabaseIndustriesBlogFAQContactSign inStart free
WattleDB  /  Encryption demo
Coming soon ยท preview

We'll store it. We still won't be able to read it.

Client-held encryption is in development and cannot be switched on yet — this page is a preview of the mechanism, not a live feature. The design: you encrypt personal data inside your own trust domain, and WattleDB only ever receives ciphertext and blind-index hashes, so our staff, our servers, our backups, and any subpoena we're served all see ciphertext where your personal-data fields used to be. Your schema, row counts, timestamps and any columns you leave unencrypted remain visible to us. You'll still be able to search it. Try it below, nothing you type leaves this browser.

๐Ÿ”‘ Your key is generated in this browser and never sent anywhere. It stands in for the key that, in production, lives in your infrastructure, not ours.
โ‘  Your app YOUR TRUST DOMAIN

A clinic saving a patient. Red fields are personal data, encrypted before they leave. Green fields are non-sensitive and stay readable so your app still works normally.

โ‘ก What crosses the wire to WattleDB WE SEE THIS

The exact payload sent to the database. Personal fields are ciphertext; searchable ones also carry a one-way blind-index hash. Non-sensitive fields are plaintext.

// Fill the form and hit "Encrypt & save" to see the payload.
โ‘ข What WattleDB actually stores OUR DATABASE
idname_encname_bidxemail_encemail_bidxdob_encmedicare_encappt_typestatus

This is the raw table. Toggle "What you see" to decrypt it in your browser, the only place the key exists. A WattleDB engineer, a stolen backup, or a warrant served on us gets the left view.

โ‘ฃ Search encrypted data, server-side, without ever decrypting it

A support agent looks someone up by email or name. Your app hashes the search term into a blind index; the database matches on the hash. WattleDB runs the WHERE and never sees the plaintext term or the result.

// Run a search to see the blind-index lookup.

Equality match only, this is the honest limit of the free tier's blind index. "sarah" will not match "sarah.nguyen@โ€ฆ"; the whole value must match. Prefix/substring search is a separate, paid capability.

What this demo is, and is not. Client-held encryption is not yet available — it is in development and no customer can enable it today. This page runs the same cryptographic construction WattleDB's encryption will use, AES-256-GCM to encrypt each field and HMAC-SHA256 for the blind index, live in your browser via the Web Crypto API. The key is generated here and never transmitted. Once shipped, the crypto will run in a component inside your infrastructure (an Acra encryption proxy you run, or our SDK in your backend), and WattleDB's Postgres will store exactly what you see in panel โ‘ข. This is a demonstration of the mechanism, not a live connection to a WattleDB database, and not a feature you can turn on. Want it when it lands? Tell us.

Where the key lives is the whole point

Encryption only means "the provider can't read it" if the provider never holds the key. So the crypto is designed to happen in your trust domain, with WattleDB only ever receiving the output:

[ YOUR TRUST DOMAIN ] [ WATTLEDB ] your app โ”€โ”€โ–ถ encryption proxy / SDK โ”€โ”€โ”€โ”€ ciphertext + โ”€โ”€โ–ถ Postgres โ”‚ blind index (stores holds the key only this) (we never see it) search term โ”€โ”€โ–ถ hash to blind index โ”€โ”€โ”€โ”€ WHERE bidx = โ€ฆ โ”€โ”€โ–ถ matches on hash result โ—€โ”€โ”€ decrypt with key โ—€โ”€โ”€โ”€โ”€โ”€โ”€ ciphertext โ—€โ”€โ”€โ”€โ”€ returns ciphertext

Because the key would sit on your side, no configuration, insider, backup or legal order would let WattleDB turn that ciphertext back into a name. That is the difference between encryption at rest (we hold the key, so we can read it) and this. It is a claim about the encrypted values, not about the whole database: your schema, table and column names, row counts, timestamps and every column you leave in plaintext stay visible to us, and a subpoena served on WattleDB would still produce them.

What this does and doesn't protect

โœ… Protects the encrypted fields from us

WattleDB staff, a server compromise, a stolen backup and a subpoena served on WattleDB would see only ciphertext and hashes in the fields you encrypt. We could not produce those values, because we would not hold the key.

โš ๏ธ Does not hide the shape of your data

Table names, column names, row counts, timestamps and which rows exist stay visible to us, along with every column you leave plaintext. Encryption hides field values, not structure — so a legal order served on WattleDB would still produce a schema and those unencrypted columns.

โœ… Still searchable

Exact-match lookups (by email, by name) work server-side through blind indexes, so support tools and login flows keep working without decrypting the whole table.

โš ๏ธ You hold the key, and the risk

If you lose the key, the data is gone, permanently. There is no recovery, by design. Key custody becomes your most important operational responsibility.

โš ๏ธ Not every field, not every query

Blind indexes do equality only (no LIKE/range in the free tier), and low-cardinality fields (e.g. a yes/no) can leak through frequency. You choose which fields to encrypt and which stay plaintext for querying.

Australian-owned hosting and a provider that won't be able to read your PII

Australian-owned, Australian-hosted managed Postgres is available today. Opt-in client-held encryption for the fields that matter most is in development for higher plans — it is not yet available to enable.

Talk to us about encryption →