HOW VERIFICATION WORKS
Checked in your browser.
Sealed to the enclave.
What your browser checks, what our relay sees, and what you still trust us for.
Not independently assessed yet
Enclave checked first
How we know
Before your first message, Tinfoil’s open-source verifier checks the chip-signed report in your browser. A report that doesn’t verify stops everything.
Sealed in your tab
How we know
Each request is encrypted with EHBP (HPKE, AES-256-GCM) to the key the attestation named, before it leaves.
The relay sees bytes
How we know
Our relay checks your account and allowance and passes ciphertext to Tinfoil’s hosts. It sees sizes, times and your account, and keeps no copy.
A receipt per answer
How we know
Your browser checks the enclave of the model that answered, where its hardware allows, and keeps what it found with the answer.
Who could look, and what stops them.
The network
Residual risk: Low- Gets
- Sealed bytes, sizes, times
- Stopped by
- HTTPS, then sealing to the enclave
- Still open
- Traffic sizes and timing
Our relay
Residual risk: Medium- Gets
- Your account, IP, sizes, model
- Stopped by
- Sealed in your tab; it can’t open them
- Still open
- The metadata it sees
The cloud host
Residual risk: Medium- Gets
- Encrypted enclave memory
- Stopped by
- AMD SEV-SNP or Intel TDX, attested
- Still open
- Hardware flaws; Tinfoil’s own statements
A fake enclave
Residual risk: Low- Gets
- Nothing: your tab refuses it
- Stopped by
- Attestation, checked in your browser
- Still open
- Verified code isn’t reviewed code
Changed site code
Residual risk: Medium- Gets
- What you type, before sealing
- Stopped by
- Build manifest, signature, your own rebuild
- Still open
- A page can’t fully vouch for itself
The developer API
Residual risk: High- Gets
- Your request, in memory
- Stopped by
- No storage or logs, by our policy
- Still open
- You trust our gateway
INSIDE ONE SERVER
Where the enclave begins, and ends.
Scroll to take a GPU server apart: what sits inside the enclave boundary, and what stays outside it.
- Heat spreaderThe metal lid over the GPU’s chips.
- GPU dieWhere the model runs. Tinfoil’s documentation says its NVIDIA GPUs (H100, H200 and B200) run in confidential computing mode.
- High-bandwidth memoryHolds the model’s weights, and your request while it’s answered.
- Confidential virtual machineOn the server’s processor (AMD SEV-SNP or Intel TDX): Tinfoil’s router and the model’s server, in memory the host can’t read. Its chip signs the report your browser checks.
- The enclave boundaryWhat the hardware keeps the host out of, and what the attestation describes. Your request is opened only inside it.
- The hostThe board, its hypervisor and drivers, and whoever operates it: outside the boundary. It carries sealed bytes in and out.
An illustration of the kind of machine Tinfoil runs, not a picture of a particular one. Tinfoil’s signed release record names each enclave’s CPUs, memory and GPUs; the workspace’s Verified panel shows them.
Read the full textHide the full text
In short
Undergrove runs open-weight models inside hardware enclaves operated by Tinfoil. Some of what that means your browser checks for itself; some of it is Tinfoil’s statement; and some of it rests on us. Here is which is which.
Your browser checks
- That the enclave is genuine hardware running the code Tinfoil published.
- That each request is sealed to that enclave’s key before it leaves your tab.
- For each answer’s receipt, the enclave of the model that answered, where its hardware allows.
Tinfoil states
- That it can’t access its enclaves, and that nothing in them persists between restarts.
- That its supported GPUs run in confidential computing mode.
You trust us for
- The code this site sends your browser, which you can compare with the build.
- What the relay does with what it can see: sizes, times and your account.
- The developer API’s gateway, which reads requests in memory.
None of this has been independently assessed yet.
01 · Attestation
The chip vouches for the code.
A hardware enclave is a part of a server that its own host can’t look into: the processor encrypts the enclave’s memory and keeps the host’s software out of it. On its own, that would only be a promise. What makes it checkable is attestation. When the enclave starts, the processor measures the code it loaded and signs a report of that measurement with a key the chip maker vouches for. The report also names the public key the enclave will decrypt with.
Before your first message, the workspace fetches that report for Tinfoil’s router enclave, through our server, and runs Tinfoil’s open-source verifier on it in your browser. Fetching it through us changes nothing: we can’t forge the chip’s signature, and a report that doesn’t verify stops everything.
They match: requests are sealed to the key the report names.
Anything fails: nothing is sent, and the workspace says why.
The verifier’s checks, in order
- Find the release Tinfoil published for this code.
- Check the enclave’s hardware attestation report against the chip maker’s signing keys.
- Check the release’s signed build record (Sigstore, from GitHub).
- Compare: the code measured in the enclave must be exactly that release.
- Check that the encryption key is the one the enclave’s attestation names.
A verified report is reused for up to ten minutes, in this tab or another of this site’s tabs, and only if it’s the very same one, by its SHA-256. The workspace shows each check under Verified, and the architecture page shows the code that runs it.
02 · Sealing
Only the enclave can open it.
With the enclave verified, every live request is sealed in your tab before it leaves. Its body is encrypted with EHBP, Tinfoil’s protocol for encrypting HTTP bodies, to the key the attestation named. EHBP uses HPKE, a standard for encrypting to someone’s public key: your tab makes a fresh key pair for the request, combines it with the enclave’s key into a shared secret, and encrypts with AES-256-GCM.
The fresh public half travels beside the ciphertext, as the encapsulated key. Only the enclave’s private key, which never leaves the enclave, can turn it back into the secret. The answer comes back the same way, in sealed frames your tab opens as they stream.
03 · The relay
Bytes it can’t read.
Sealed requests go to our relay, a function on Vercel, rather than straight to Tinfoil. It checks who’s asking and that they’re within their allowance, and puts Undergrove’s Tinfoil key on the request, so you don’t need an account with Tinfoil. It refuses anything that isn’t addressed to one of Tinfoil’s own hosts or doesn’t carry an encapsulated key.
It can’t count your words, so it estimates each request’s cost from the ciphertext’s size, erring high. It keeps no copy, and its logs hold route names, status codes and timings only.
On the outside: the relay sees
- Your account, and your IP address (through Vercel, our host)
- Each request’s size, time and path
- Which model answered, from a header Tinfoil sets
- Whether web search or images were used, as your browser declares, so they can be charged
Sealed inside: it can’t read
- Your messages and files
- The answers
- Your instructions and memory notes
04 · Receipts
Two enclaves, and a receipt for each answer.
The router enclave your browser verified doesn’t run the model. It opens your request and passes it to the enclave where the model runs with its GPUs, which the router verifies itself, under its published code, and names in a response header.
Your browser then checks that named enclave too, with the same verifier, against the repository Tinfoil’s router pins for that model. What it found is kept with the answer as a receipt: the enclave, the code measured in it, the release it matched and the key the request was sealed to. A receipt is your browser’s own record, not signed by us or by Tinfoil; the attestation behind it is signed by AMD and GitHub, so anyone can check it again.
- Verified
- Genuine hardware, running a published release of the repository Tinfoil’s router pins for the model.
- Not checked
- Hardware the browser verifier can’t read yet: it reads AMD SEV-SNP reports, so an enclave on Intel TDX is recorded as not checked.
- Unconfirmed
- The check ran and a step failed, for instance an enclave already on a newer release than the one Tinfoil’s service pairs it with.
05 · The developer API
A different path, said plainly.
Code that calls the developer API sends its request over HTTPS to our gateway, which reads it: to check it, apply limits and run tools. It reads it in memory and never stores or logs it. The gateway then does what your browser does in the workspace: it verifies the enclave with Tinfoil’s SDK and seals the request to it.
So on this path you trust us with the request while the gateway holds it. What you can still check is the enclave: each answer from Tinfoil’s route carries headers naming the attestation bundle the gateway verified, for you to verify again. The developer documentation shows how.
GET /v1/attestation?sha256= returns for you to check again.06 · This page
Checking the code that checks.
Everything above runs in code this site sends your browser, so that code matters too. Each build writes a manifest: the SHA-256 of every file the site serves, and the commit it was built from.
A page can’t fully vouch for itself: a check that runs in the page is only as honest as the page. The stronger check doesn’t involve us at all: rebuild the commit yourself in the pinned environment and compare the manifests.
npm run rebuild:site) should give the same manifest, byte for byte; anyone can run it and compare, without asking us.07 · Limits
What this doesn’t prove.
- Tinfoil’s statements stay Tinfoil’s. That it can’t access its enclaves, that nothing in them persists between restarts and that its GPUs run in confidential computing mode are what Tinfoil says. Your browser checks that the hardware is genuine and runs the published code.
- The hardware is part of what you trust. The protection is as good as the processors, their firmware and the chip makers’ keys, and hardware enclaves have had published vulnerabilities before.
- One hop rests on published code. That your request went from the router to the model’s enclave rests on the router’s published code. Your browser can check the model’s enclave on AMD SEV-SNP only; on Intel TDX it’s recorded as not checked.
- The relay sees the outside. Your account, your IP address, sizes, times and which model answered.
- Published isn’t the same as reviewed. The verifier shows which code runs, not that the code has no flaws.
- No independent assessment yet. No auditor has reviewed this design or its code so far.
For who could see what, observer by observer, read the threat model.
08 · Go further
See each part working.
- ArchitectureThe four stops a message makes, what each can see, and the code that does it.
- Seal it yourselfType a message and watch it sealed to the enclave, step by step.
- Try to break itOne encrypted request, byte for byte as our relay saw it.
- Threat modelWho could see what: our hosting, us, Tinfoil, the network, a court order.
- Verify this pageHash the code this page loaded and compare it with the build.
- TransparencyCounts of encrypted requests and enclave checks, and the commit in production.