seal

Impossible to steal.

Seal protects your app's secrets at runtime, even if hackers take over your servers. Stack-agnostic, not a secrets manager.

Read the architecture

kali@kali: ~ — nc -lvnp 4444

kali@kali:~$ nc -lvnp 4444

listening on [any] 4444 ...

connect to [10.13.37.1] from prod-api-3 [10.0.4.11] 51722

root@prod-api-3:/srv/api# id

uid=0(root) gid=0(root) groups=0(root)

root@prod-api-3:/srv/api#

console.seal.zone/acme/audit

Audit log

ai-assistant
  1. RequestPOST /v1/responses · 200api.openai.com · s_77e0 · 554 ms
  2. RequestPOST /v1/responses · 200api.openai.com · s_19c4 · 417 ms
  3. RequestPOST /v1/responses · 200api.openai.com · s_8f2a · 280 ms

The usual fixes don't work.

Your app needs the key in memory. Root can read memory.

Encrypt it

key = decrypt(env.OPENAI_KEY_ENC)

sk-proj-7Hq2…b9Xc

Your app decrypts it. So can they.

Put it in a vault

key = await vault.read("openai")

sk-proj-7Hq2…b9Xc

Your app fetches it. So can they.

Rotate it

rotate("openai", { every: "90d" })

sk-proj-7Hq2…b9Xc

Your app keeps it for 90 days. So do they.

Lock it in hardware.

The key lives in a hardware TEE, a sealed part of the chip that even root can't look inside. Your app only ever holds a blob.

The key goes into the TEE. Your server gets a blob back.

Runs on

Your serverAttacker has root

import seal
blob = seal.seal(
"sk-proj-7Hq2…b9Xc",
to="https://api.openai.com/v1",
apps=["ai-assistant"],
)
# → seal1.acme.3.b7f2…

Hardware TEE

Upstream

  • api.openai.com
  • Postgres
  • Redis
  • Your API

Built onAMD SEVIntel TDXAWS Nitro Enclaves

Change three lines.

Put the blob where the key was and open a session on it. Your app never sees the real key.

-OPENAI_API_KEY=sk-proj-7Hq2…b9Xc
+OPENAI_API_BLOB=seal1.acme.3.b7f2d41c09ae…
import os
from openai import OpenAI
+import seal
-client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
+with seal.session(os.environ["OPENAI_API_BLOB"]) as s:
+ client = OpenAI(base_url=s.url, api_key=s.key)
  • Zero setup

    Seal hosts the TEE for you. Free to start.
  • Works with your stack

    OpenAIAnthropicStripePostgresRedisKubernetesAWSAzureGoogle CloudGitHub Actions
  • Save blobs anywhere

    Only your app can use them. Keep them in env vars, your database or your secrets manager.

Don't trust us either.

Pick a plan and see who could read your key. At the strictest, only the chip maker.

Hackers with root

Can read

Your developers

Can read

Your cloud admins

Can read

Seal

Not involved

Chip maker

Not involved

The key sits in your app's memory. Anyone with root, or with your cloud account, can read it.

Where you trust Seal, Seal is kept honest.

  1. source9f3c…e1a0

    chip9f3c…e1a0✓

    Anyone can rebuild it

    Same code, same fingerprint.

  2. No one ships alone

    Several signatures. Add yours.

  3. Public first

    Logged, watched by outsiders.

  4. Then it waits

    Public for a while before it gets keys.

  5. Your SDK checks the chip

    On every connection.