The Iceberg Company
The encryption layer for AI apps.
Subzero tokenizes sensitive data at capture — SSNs, emails, custom entities — so your APIs, databases, and LLMs only ever see placeholders. Keys stay in your cloud, always.
See it work.
DemoThe same model, two surfaces. Sensitive values never reach your server in the clear — and never reach the model at all.
You are a support assistant for Acme Bank.
Customer: John Smith
SSN: 323-55-5663
Email: john@acmemail.com
Question: Can you verify my identity so I can process a refund?
The model receives
Response
Real values never touch your server logs, your database, or the model — at any point.
What else.
PlatformThe tokenize/reveal loop is the core. Everything below makes it operable at scale.
Custom entities
Built-in types cover SSN, email, phone, and card numbers. Define your own, like patient IDs, internal account numbers, or trade secrets, with your own validation and format rules.
Role-based access control
Define exactly which roles can reveal which entity types, under what conditions. Enforced on every single reveal call, not just at integration time.
Warehouse integrations
Snowflake external functions, Databricks UDFs, BigQuery remote functions. Batch tokenize on ingest with Fivetran, Airbyte, or dbt, then reveal natively in SQL, gated by role.
Format-preserving tokens
Tokens keep enough shape (length, character class, prefix) for SQL queries and LLMs to reason about the data structurally, without ever seeing the real value.
Analytics: when, where, and how.
ObservabilityEvery reveal is a privileged event. Know when it happened, where it was called from, and what key authorized it.
When
Know your unlocks — and set the limit.
Every reveal call is plotted in real time. Set a reveals-per-minute threshold per entity type or per key, and get alerted the moment it's crossed — before a spike becomes an incident.
- 1 Live reveal volume, broken down by entity type and caller
- 2 Configurable RPM threshold per API key or entity type
- 3 Alerts fire to Slack, email, or webhook the instant it's exceeded
Where
Trace every unlock to its line of code.
Our SDKs tag every reveal call with the file, function, and line that triggered it. A spike in reveals is traceable to the exact call site — not just "something, somewhere."
- 1 Automatic call-site tagging — no manual instrumentation required
- 2 Breadcrumb trail from API request down to the SDK call
- 3 Cross-reference with your own logs using the shared trace ID
How
Scope every key to exactly what it needs.
API keys are scoped to entity types, environments, and rate limits — not all-or-nothing access. A compromised key has a bounded blast radius by design.
- 1 Restrict a key to specific entity types — e.g. EMAIL only, never SSN
- 2 Separate keys per environment — staging keys can't touch production data
- 3 Set expiry and rate limits per key; rotate without downtime
Common questions
FAQWhat value is actually stored in my database?
The token — for example [SSN_8e21] — not the plaintext. Your database column stores a short string with no sensitive information in it. The real value exists only inside the Subzero vault, encrypted under your KMS key. An attacker with full database access sees only tokens.
Can Iceberg read our data?
No. Your raw values and your tokens never pass through Iceberg's infrastructure in readable form — raw values are encrypted in the browser before they reach us, and tokens live in your own database. What Iceberg holds in the vault is encrypted ciphertext, wrapped under a key that lives in your cloud KMS account. Without a live call to your KMS — using credentials we don't hold — that ciphertext is unreadable. We have no path to your plaintext.
Does Subzero require schema changes to my database?
No. Tokens are strings. You store them in whatever column you already have — VARCHAR, TEXT, any string-compatible type. No migrations, no new tables, no structural changes to your existing data model.
Can I tokenize data that my backend already holds — not just form fields?
Yes. The browser Element is optional. If your backend already holds a sensitive value,
send it directly to POST /v1/tokenize using a server-scoped
sz_live_... key. The response is the token. You can also
batch-tokenize up to 100 values per request via POST /v1/tokenize/batch
for ETL pipelines and data migrations.
How do I display a real value to a user once it's been tokenized?
Your server mints a reveal grant — a single-use, 60-second token scoped to a specific vault token and the allowed browser origin. The browser passes the grant ID to a Subzero reveal iframe, which decrypts the value inside the iframe and displays it. Plaintext never enters your DOM or appears in your network tab.
What happens to existing data in my database that was stored as plaintext?
You can migrate it using the batch tokenize endpoint. Read the existing values, send
them in batches of up to 100 to POST /v1/tokenize/batch,
and write the returned tokens back. If you register the entity type as deterministic,
retries always return the same token for the same value — so the migration is idempotent
and safe to re-run.
Does Subzero work with my existing KMS, or do I need a new one?
Subzero works with your existing KMS on AWS (KMS), GCP (Cloud KMS), Azure (Key Vault),
or a hardware HSM. You create a customer-managed key in your existing account and give
Subzero permission to call Encrypt and Decrypt on it.
No key migration, no new cloud account.
Do my clients need to sign up for Subzero or do anything to get set up?
No. Subzero is entirely whitelabeled and controlled from your existing platform. Your clients never see the Subzero name, never create an account, and never interact with any Subzero interface. Onboarding happens through your existing client setup flow — you provision the encryption namespace per client on the backend.
Who owns the encryption key for each client's data?
You provision a KMS namespace per client — either in your own cloud account (one key per client, fully isolated) or in the client's own cloud account if they want to bring their own key. Either way, each client's data is encrypted under a key that cannot decrypt any other client's data. A breach of one namespace doesn't touch the others.
Can my support team access client data when they need to troubleshoot?
Only if you've explicitly granted that role reveal access in your policy configuration. You define the rules — which roles, for which clients, under what conditions. Subzero enforces them and logs every access. This means you can give support staff access where they need it while keeping it revocable and auditable.
How do I tell enterprise clients that their data is safe — even from us?
Each client's KMS key is in an isolated namespace. Your platform holds no master key
that can decrypt across clients. You can demonstrate this to a client by showing them
their KMS key ARN and the policy that gates who can call Decrypt on it.
The claim "even we can't read your data without your authorization" becomes a verifiable
technical fact, not a marketing promise.
What happens if an encryption key is compromised?
Rotate the key in your KMS, then call Subzero's re-wrap endpoint. Re-wrapping re-encrypts every data key under the new KMS key without touching the vault data itself — no data migration, no re-tokenization. Once complete, the old key can no longer decrypt anything, and any attacker holding encrypted blobs from before the rotation is locked out.
What exactly is logged on every reveal?
Timestamp, caller identity (the IdP JWT subject), the token revealed, entity type, the policy rule evaluated and its result, and the KMS call ID. The KMS call ID means you can cross-verify every Subzero reveal log entry against your own CloudTrail or audit log — confirming the decrypt actually happened, at that time, for that caller.
Is there a VPC or on-premises deployment option?
Yes. Subzero can be deployed inside your VPC so that no sensitive data transits the public internet before tokenization. The vault and tokenization service run in your infrastructure; your KMS keys stay in your cloud account. Contact us to discuss deployment options for your environment.
Get started
Sensitive data protected before it ever reaches your server.
Install the SDK, integrate in minutes, and keep your keys in your own cloud. We're onboarding design partners now.