Four questions.
- What model and software answered the request?
- Who could read the prompt while it was processed?
- Can payment be separated from the request it paid for?
- Can the result be verified without exposing the request itself?
SEAL stands for Sidecar, E2EE relay transport, Anonymous credits, and Ledger of receipts. A fifth component, measured policy, defines any enabled filtering in a way a verifier can inspect. The goal is not to ask users to accept a privacy statement. The goal is to give builders a protocol for checking the environment, the keys, the payment credential and the receipt trail themselves.
Why this expansion matters
Open models create more choice. A developer can select a model, a host, a region and an inference provider instead of being locked to one closed platform. But that choice also creates a new trust problem: the request often crosses several systems operated by different parties.
A prompt can reveal unreleased code, research, trading logic, customer records or private instructions. The ordinary setup asks a user to trust the inference provider’s handling of that data while it is in use. For open-model infrastructure the underlying questions remain: what is actually running, where does plaintext exist, and what evidence can an independent party inspect?
Confidential computing is relevant because it is designed to protect data while it is being used, not just while it is stored or transmitted. NVIDIA describes confidential computing as hardware-level protection for GPU execution, memory, register state, model weights and inference prompts, with device attestation used to assess the trustworthiness of the compute environment. SEAL applies that direction to an open-model routing system, then joins it with encrypted transport, privacy-preserving credentials and receipts.
SEAL is not a claim that all privacy problems are solved today. It is a public working draft (v0.1.0), not an IETF standard, and its repository separates what is implemented from what remains planned in a status table that this page reads directly.
The design in one request.
A complete SEAL request is designed to work as a chain of independently checkable steps. First, a client selects the privacy floor it needs. SEAL specifies three lanes:
public
- Path
- TLS to the router, then to any provider
- Who can run it
- Any provider
- Payment
- API key, credits, per-call payment or blind token
attested
- Path
- TLS to the router, then to an enclave whose attestation the router verified recently
- Who can run it
- Attested providers only
- Payment
- API key, credits, per-call payment or blind token
unlinkable
- Path
- Oblivious HTTP through an independent relay to the router's gateway, or Tor to the router's onion service; then to an attested enclave
- Who can run it
- Attested providers only
- Payment
- Blind tokens only; an API key or a wallet is refused
The router treats a lane as a floor. If it cannot meet a lane’s requirements, it refuses and explains why, rather than silently serving the request below the level it asked for.
A request chooses a lane (provider.lane in the body or the X-Anyroute-Lane header; a key or a saved route can set a default). A lane is a floor: the router never serves a request below the lane it asked for, and says why when it cannot serve it (no_attested_endpoint, lane_requires_anonymous_auth).
01 / Attested serving.
The request reaches the model-serving environment. SEAL’s Sidecar measures the model weights at boot, checks them against an allow-list, creates its application keys in memory, and obtains hardware-attestation evidence that commits to those keys and measurements. The evidence binds the TLS key, the receipt-signing key, the model digest and configured deployment values into a verifiable record. A client can inspect that evidence, compare the trusted values, and pin the TLS key for the live connection.
02 / Encrypted to the enclave.
Where encrypted transport is enabled, the client encrypts the request body to an HPKE public key obtained from verified Sidecar evidence. The Sidecar can reject expired, replayed, malformed or undecryptable requests before they reach the model server. It can also encrypt the response in authenticated frames, so a client can detect a truncated encrypted response.
03 / Paid without a name.
For payment, the design introduces blind-signed credentials. Version 1 uses fixed-value Privacy Pass Blind RSA tokens. The router can validate a token at redemption without the generation record or the receipt naming the buyer; the receipt carries a nullifier and a token key id instead.
04 / A receipt to check.
The response comes with a signed receipt whose hashes let a client check the exact request and response bytes of the exchange, the model digest, the attestation reference and, where applicable, the policy state. Router receipt roots can be anchored on chain for later inclusion checks.
Privacy, payment and proof should not all depend on one provider’s internal database and one provider’s promise.
S Sidecar and attested serving.
The Sidecar is the model-side gateway. It sits next to an OpenAI-compatible model server and turns an endpoint into something that can expose evidence about its configuration. At boot it calculates a deterministic digest across the model files. It refuses to start if its model allow-list is empty or if the measured digest is not on it. It creates TLS and Ed25519 receipt keys in memory, then includes the public keys and measured values in the attestation binding.
The evidence is served at GET /attest. A verifier can request a fresh nonce-bound quote, recompute the binding digest, compare it with the quote, validate the hardware quote with a verifier of its choice, and make sure the live TLS connection uses the key bound in that evidence. Development evidence is labelled as such, and a verifier must reject it outside development.
This matters because “private server” is not a useful technical category on its own. A meaningful claim needs evidence about the endpoint, the model identity, the encryption key and the receipt-signing key.
There are boundaries. In version 1 the Sidecar’s image digest is an operator declaration, because a process cannot read its own image digest, and the compose hash is hardware-measured only where the platform reports it. Model weights are measured at boot and must be mounted read-only. A boot quote shows what booted, not that the same endpoint is still live later; fresh nonce-bound checks and TLS-key pinning are there for freshness. Version 1 evidence also does not bind GPU evidence into the Sidecar’s TDX quote. That is a material distinction, and SEAL documents it rather than presenting a CPU-side quote as complete proof of confidential GPU execution.
E Encrypted transport and network separation.
Encryption and network privacy solve related but different problems. SEAL’s anyroute-hpke/v1 mode encrypts the request body from a client directly to an enclave Sidecar, with HPKE over X25519, HKDF-SHA256 and AES-128-GCM. The request path and the client’s time are bound as associated data, and the framed, encrypted response lets the client check that the final frame arrived.
Separately, the system has an Oblivious HTTP gateway and relay design. The relay drops ordinary client headers, cookies, addresses and query strings before it forwards the encapsulated request. The unlinkable lane requires a blind token and either an independent relay or Tor onion access; a relay run by the gateway’s own operator is explicitly not enough for that lane.
The distinction matters because encrypted content alone does not hide every signal: network participants can still observe timing and size. And the path through the router matters as much as the cipher. Whether the router carries the client’s inner ciphertext through to the enclave on the attested and unlinkable lanes, or terminates TLS and sees the request, has its own row in the status table, as do chunked Oblivious HTTP, padding and fixed-send timing for streamed traffic.
That disclosure is not a weakness in the specification. It is exactly why a public specification needs a status table: builders should be able to choose a privacy lane knowing what it guarantees now, not what a roadmap may guarantee later.
Encrypted chat is switched on at anyroute.tech.
The dedicated POST /api/v1/e2ee/chat/completions adapter forwards content encrypted on the client to the Phala attested gateway enclave. A correctly encrypting client keeps message content out of the router. Encryption ends at that gateway, which forwards restored content to the serving workload over a separate confidential channel; this is not client encryption directly to a GPU.
The SDK requires an attestation verifier supplied by the caller and verifies the encrypted reply and gateway receipt, with no plaintext fallback. The router still sees model, roles, message counts and sizes, timing, usage and authorization metadata. Ordinary chat reads request text in router memory on every lane. This adapter supports the attested lane and Tor with blind tokens on the unlinkable lane; it does not make every router endpoint encrypted or carry sidecar anyroute-hpke/v1 through the router. Read the encrypted-chat checks and limits.
A Anonymous credits.
Payment can be a privacy leak even if the request body is encrypted. If the account that buys access is attached to every inference call, payment history becomes request history.
SEAL’s version 1 credits are Privacy Pass Blind RSA tokens. A buyer submits blinded token material and the issuer signs it without learning the eventual token. When the token is redeemed, the router verifies the credential, claims a one-time nullifier so it cannot be spent twice, and bills a pooled internal account. The receipt and the generation record can carry the nullifier and the issuer key id without naming the buyer.
These tokens have deliberately narrow economics: they are fixed-value, single-use credentials. A request cannot cost more than the token’s value, and unused value is not returned as change. The more flexible e-cash design, with variable value, blinded change, holder locking and a DLEQ proof on every signature, is specified alongside them in 0003.
Blind credentials do not erase every correlation risk. Privacy depends on the size and behaviour of the anonymity set; buying and at once spending a distinctive token shrinks it, and a transparent funding rail can still identify the buyer at purchase time. A protocol should describe these limits instead of using “anonymous” as a blanket label.
L A ledger of verifiable receipts.
A private system still needs accountability. SEAL’s answer is a receipt that proves facts about an exchange without putting the prompt or the response in the receipt.
The version 1 node receipt is signed with Ed25519 and carries hashes of the exact request and response bytes, the model digest, the attestation reference, usage, completion state, and optional fields for an encrypted exchange or the classifier. JSON responses carry it in a response header; streamed responses deliver it after the stream’s final event.
The router also signs receipts for the generations it settles: the model, provider, cost, latency, lane, attestation details and payment fields. Its signing keys are published and, where a chain is configured, registered on chain and never overwritten. Receipt leaves are collected into hourly Merkle trees whose roots are posted on chain where a chain is configured, so a user can verify inclusion against the anchored root.
This does not mean a receipt proves that a particular model computed an answer. A valid node receipt proves that a process holding a key bound to a verified quote signed the stated hashes; the broader conclusion about the serving environment rests on attestation. An anchor proves inclusion in the anchorer’s tree, not that every possible receipt was included. The purpose of receipts is to turn more of the inference path into an inspectable record, not to manufacture certainty where the technology cannot provide it.
Measured policy: visible constraints, not hidden filters.
Open-model infrastructure also has to be clear about policy. A host may need to refuse certain requests, but an opaque filter undermines the promise of an inspectable system.
SEAL’s optional classifier runs inside the enclave when it is turned on. Its weights are allow-listed separately and measured at boot. Whether it is on, its digest, the policy hash and the categories behind it are tied to the attestation record, so a verifier can see whether filtering was active and what policy was measured.
The policy layer is intentionally narrow. It has a built-in minimum category for sexual content involving minors; operators may add publicly described categories, but cannot remove or redefine the built-in one. The classifier can check request text and, optionally, response text. It keeps counters, not the request text, the category or the label. A blocked request gets a signed refusal receipt with no content in it.
It is not a magic safety solution. The classifier is off unless the operator turns it on, can make false-positive and false-negative decisions, and does not examine images, audio or files in version 1; requests that carry them are refused by default or let through, as the measured configuration says. A policy hash proves which policy and classifier were measured, not that the classifier decided perfectly. For users of open and less centrally curated model ecosystems, this is the useful direction: constraints should be visible, measurable, and limited to what the system says they are.
The open host network.
Anyroute Network is open for early hosts running deploy/network/approved/tdx-qwen2.5-0.5b: Intel TDX in a supported confidential VM serving Qwen2.5 0.5B. Join with one command. Admission is automatic after fresh hardware evidence, the signed host policy v1 and sanctions screening of operator and payout addresses pass. The policy is published at GET /api/v1/network/policy and committed as a host_policy entry in the key log.
New hosts start on probation, with a public record on Hosts. Sidecar bindings v2 commit the source archive hash, engine image and served model ID into report data. Legacy v1 evidence still verifies but does not supply every field this admission policy requires. These bindings do not prove that a declared engine image is running or that a source archive produced it; appraising the measured deployment remains necessary.
Hosts post no bond or deposit at anyroute.tech: admission is by hardware attestation, and traffic follows each host’s record. Payouts, fee buy-and-burn and slashing are not switched on at anyroute.tech yet. No payouts are being made. Read the host policy and limits.
Who learns what.
The parties to a request on the full design, and what each can and cannot learn. This is the design’s intent; the status table says which parts of it exist, and the honest limits below say where it stops.
| Party | Learns | Does not learn |
|---|---|---|
| UUser or agent, with the client SDK | Everything about its own requests | Nothing listed |
| ROblivious HTTP relay (another operator); on the Tor path, the volunteer relays of U's Tor circuit instead | U's address (on the Tor path only the entry relay, which does not learn the destination), ciphertext sizes and timing | Content, destination host or model, payer |
| GAnyroute gateway and router | That a valid credit was presented, cost, destination host, ciphertext | U's address (behind R), U's identity, plaintext (on the E2EE path) |
| MCredit issuer (mint) | That someone bought N credits on some rail | Which requests those credits paid for |
| HHost operator running the sidecar | That its enclave served ciphertext, token counts | Plaintext, U's address, payer |
| EThe enclave (confidential VM and GPU) | Plaintext, in memory only | U's address, payer identity, purchase |
| L, CTransparency log and chain | Public measurements, keys, receipt roots | Anything about users |
Honest limits.
These hold for the design, not only for today's code, and are published with it.
- Trust rests on Intel, AMD and NVIDIA silicon, reproducible builds and witnessed logs. It is not a cryptographic proof of inference.
- GPU attestation on shipping Hopper and Blackwell parts proves a genuine confidential-computing GPU is reachable. It does not bind that GPU to the confidential VM (no TDISP yet). Physical memory-interposer attacks on DDR5 are out of scope.
- AMD SEV-SNP hosts cannot carry confidential-GPU claims yet: SNP has no runtime measurement register to bind GPU evidence into.
- Unlinkability holds against Anyroute, against hosts and against any single relay. It does not hold against a relay colluding with the gateway, or against a global network observer correlating timing.
- On the Tor path of
unlinkable, Tor takes the place of the independent relay. Anyroute runs the onion service and never learns the client's address, because a Tor onion service is never given it. Ordinary chat exposes plaintext to Anyroute’s router; the distinct encrypted-chat adapter forwards encrypted content to the gateway enclave. Anyroute sees clear routing metadata and request size and timing directly, with no relay in between. An observer who watches both the client's entry into Tor and the router's side can match them by timing, and requests sent on one Tor circuit can be linked to each other. - Deterministic (batch-invariant) serving and confidential-computing mode both cost throughput.
- Credits are non-transferable prepaid inference, not money and not an investment.
- A minimal, measured block list runs inside the enclave and its hash is public. Nothing else is filtered.
- Stylometric identification from prompt content is out of scope: the protocol hides the channel, not what you write.
Design targets.
These are the properties SEAL is designed to provide once every part in the status table below is built. They are targets, not claims about today's deployment; the status table says which parts exist.
- G1
- Attested execution. A request is served only by an enclave whose CPU quote and GPU evidence match a publicly logged manifest.
- G2
- Weights identity. The digest of the served weights is measured at boot and named in every receipt.
- G3
- Confidentiality. Plaintext exists only in confidential-VM memory and confidential-GPU memory; requests are encrypted from the client to a key the enclave's evidence binds.
- G4
- Unlinkable payment. The credit issuer cannot link a purchase to a redemption, and a DLEQ proof shows it signed with the published key rather than a per-user one.
- G5
- Network privacy. On the
unlinkablelane the client's address is hidden from the router by an Oblivious HTTP relay run by another operator, or by Tor when the request reaches the router's onion service. - G6
- Verifiable receipt. Each response has a signed receipt with request and response hashes, a hash chain over streamed chunks, the execution profile and the policy hash; receipt roots are anchored on chain.
- G7
- Verifiable policy. What the enclave blocks is defined by a measured policy document whose hash is public; nothing else is filtered and no content is logged.
- G8
- No key partitioning. Every key or configuration a client encrypts to or verifies against is in a witnessed transparency log, and clients refuse keys that are not.
What exists today, and what remains planned.
SEAL is most useful when its present state is described accurately, so this table is not written for this page. It is read from the spec’s own status table when the site is built, row for row.
31 rows: 23 implemented (10 of them off by default), 8 planned. Source: spec/README.md, Status of this repository.
| Part | Spec | Status |
|---|---|---|
Attested sidecar: opt-in SHA-256 bindings v2 adds source archive hash, engine image and model ID while preserving v1 verification; weights hashed at boot against an allow-list; Intel TDX quote whose report data binds the TLS, receipt and HPKE keys and the image, compose and model digests; quote-pinned TLS certificatesidecar/ | 0001 | Implemented |
Host install package: one-command installer (engine detection, seal.yaml schema and validator), Compose file, Helm chart, Terraform modules (GCP TDX, Azure SEV-SNP public lane only, Phala deployment skeleton), seal CLI (init, add-node, verify, status)deploy/seal/, scripts/seal-cli.ts | 0001 | Implemented; the hosted installer address is planned |
Router verifies provider evidence: fresh nonce-bound quotes, pluggable quote verifiers, NVIDIA remote attestation for GPU evidence a provider reports, quote-pinned TLS, attestation historysrc/services/attestor.ts, src/providers/ | 0001 | Implemented |
Client-side checks of a sidecar's evidence and receipts (quote signature through a caller-supplied verifier)packages/client, packages/client-py | 00010004 | Implemented |
Measurement bundles published to a public Sigstore Rekor log; router verifies inclusionscripts/publish-measurement.ts, src/services/measurements.ts | 0001 | Implemented |
On-chain measurement registry (image, compose and model digests, log entry, quote-proof hash)contracts/src/MeasurementRegistry.sol | 0001 | Implemented |
GPU evidence bound into the sidecar's own quote; policy-hash and exec-profile-hash boot events; RTMR3 replay by clients | 0001 | Planned |
| In-toto manifests, policy registry contract, threshold KMS with on-chain governance | 0001 | Planned |
Anyroute-run transparency log (tlog-tiles) with witnesses, or with public-log anchoring of checkpoints in Sigstore Rekor; client split-view checkssrc/tlog/, src/tlog/rekor.ts, packages/client/src/tlog.ts, scripts/tlog-witness.ts | 00010002 | Implemented, off by default; logs receipt keys, Oblivious HTTP key configurations, blind-token issuer keys, measurement bundles and sidecar key bindings and signed host admission policies (manifests and e-cash keysets are planned). Rekor anchoring is the alternative to witnesses: it detects a split view after the fact and does not prevent one |
Signed host admission policy with host_policy key-log entries; automatic admission and probation against quote-bound pins and screened operator/payout addressessrc/network/, deploy/network/approved/tdx-qwen2.5-0.5b/ | 0001 | Implemented, off by default (NETWORK_POLICY_ENABLED, NETWORK_HOSTS_ENABLED); switched on at anyroute.tech for the approved Intel TDX Qwen2.5 0.5B build |
Inner E2EE anyroute-hpke/v1 (single-shot request, framed streaming response)sidecar/src/hpke.ts, packages/client/src/hpke.ts | 0002 | Implemented, off by default |
Encrypted chat adapter through the Phala attested gateway; client-encrypted content reaches the gateway enclave, with routing metadata visible to the router; distinct from sidecar HPKEsrc/e2ee/, packages/client/src/e2ee.ts | 0002 | Implemented, off by default (E2EE_PASSTHROUGH_ENABLED); switched on at anyroute.tech |
Sidecar anyroute-hpke/v1 ciphertext carried through ordinary router chat routes (ordinary chat still exposes text to the router) | 0002 | Planned |
| Chunked inner E2EE for streamed requests; fixed-size padding and send tick | 0002 | Planned |
Oblivious HTTP gateway (RFC 9458, 9292); per-epoch keys; key history as a signed hash chain; relay list with operator independencesrc/ohttp/ | 0002 | Implemented, off by default; non-streaming only |
Independent Oblivious HTTP relayrelay/ | 0002 | Implemented |
Chunked Oblivious HTTP for streaming responsessrc/ohttp/chunked.ts, relay/, packages/client/src/ohttp.ts | 0002 | Implemented, off by default |
Tor onion service in front of the routerdeploy/onion/ | 0002 | Implemented |
Lane unlinkable over the onion service: Tor instead of an independent relay, blind tokens only, onion requests recognised only by the proxy's secretsrc/onion/, src/ohttp/lane.ts | 0002 | Implemented, off by default |
Lanes public, attested, unlinkable in the router: per request, per key and per saved route; no fallback off an attested lane (no_attested_endpoint); lane-aware selection weightsrc/router/disclosure.ts, src/router/select.ts, src/ohttp/lane.ts | 0002 | Implemented; unlinkable needs blind tokens and Oblivious HTTP or the onion path switched on |
Blind RSA tokens (Privacy Pass type 0x0002), per-epoch issuer keys, on-chain key commitmentssrc/blind/, contracts/src/BlindIssuer.sol | 0003 | Implemented, off by default |
| Blinded e-cash credits (BDHKE, DLEQ, P2PK, swap and change); issuer in an enclave; sealed nullifier store | 0003 | Planned |
Receipts v1: Ed25519 over canonical JSON, from the router and from the sidecarsrc/receipts/, sidecar/src/receipts.ts | 0004 | Implemented |
Hourly Merkle roots of router receipts, with a proof endpoint; the root is posted on chain only where a chain is configured (off chain otherwise, and proofs say so)src/services/anchor.ts, contracts/src/ReceiptAnchor.sol | 0004 | Implemented |
Per-host anchoring of enclave receipts: leaves from each attested sidecar's feed, kept only if signed by the receipt key its verified quote binds, rooted per host and interval, posted with anchorAttested where a chain is configured (off chain otherwise, and proofs say so), with a proof endpoint and a client checksrc/services/host-anchor.ts, src/api/host-anchor.ts, contracts/src/ReceiptAnchor.sol (anchorAttested), packages/client/src/host-anchor.ts | 0004 | Implemented, off by default |
Router receipts v2: COSE_Sign1 (EdDSA), chunk hash chain over router streams, bucketed token counts; checks in the SDK, the web verifier and a CLIsrc/receipts/v2.ts, packages/client/src/receipts-v2.ts, packages/client/bin/verify-receipt.ts | 0004 | Implemented |
| Node receipts v2: signed in the enclave (ES256K), execution profile, epoch nullifier | 0004 | Planned |
In-enclave classifier: pinned weights, policy hash bound in the quote, one-bit receipt field, signed refusalsidecar/src/classifier.ts | 0005 | Implemented, off by default |
Privacy-safe stats: no per-request logs in the sidecar; hourly counters (requests, refusals by reason, latency and token buckets) released with snapped Laplace noise from a CSPRNG, epsilon 1 per family per hour by default, daily budget ledger; the router publishes attested and unlinkable traffic the same way and keeps it out of raw public metricssidecar/src/dpstats.ts, src/services/private-stats.ts | 0005 | Implemented |
| Blocks counted by policy category; privacy parameters bound in the attestation | 0005 | Planned |
Measured policy.json in a boot event; token-streamed output checks; dispute re-run in a second enclave | 0005 | Planned |
Implemented is not the same as switched on.
The table above is about the repository. This panel is about the router serving this page: what it reports about itself right now in its public status document. Anything it reports as off says so.
Encrypted chat and automatic host admission are switched on at anyroute.tech. Bonds are indexed from HostBond; payouts, fee buy-and-burn and slashing are not switched on yet. The live panel below reports the router’s current status.
GET /api/v1/statusReading this router’s status…
Why a public specification changes the ecosystem.
The spec/ folder is licensed under Apache-2.0, even though the rest of the repository keeps its own source-available license. The five RFC-style documents describe attestation, transport, anonymous credits, receipts and verification, and measured policy in a form third parties can review or implement without treating Anyroute’s codebase as the only source of truth. That matters for builders in three ways.
A shared vocabulary. A model host, SDK author, relay operator, wallet developer and auditor can reason about the same fields, lane rules, key history, receipts and verification steps.
Inspectable boundaries. A project can decide whether the present HPKE path, a particular attestation configuration or the current blind-token model is enough for its use case, without inferring privacy properties from a marketing page.
Composable integration. A model host can run an OpenAI-compatible endpoint behind a Sidecar, a client can check attestation evidence and receipts, a payment tool can handle blind credentials, and a relay can operate independently. Not every part has to be run by the same company for the protocol to make sense.
- The specification, rendered from
spec/(7 documents, v0.1.0). /seal/status.json: lanes, design targets, parties, honest limits and every status row as JSON, built from the same files.- The source on GitHub, and Verify to check a provider’s attestation and a receipt in your browser.
- What we keep: every table, column, Redis key and log line the router has, generated from its schema.
The larger point.
Open models should not require open exposure.
More broadly, neither model access nor privacy should be decided by whether a user is willing to trust a server operator they cannot inspect.
SEAL is Anyroute’s effort to give open-model infrastructure a verifiable privacy layer: prove the serving environment where possible, encrypt the request path where implemented, separate payment from request history where blind credentials support it, publish the policy, and return receipts that users can inspect later.
The protocol is still early. Its strongest claims are the ones marked implemented above, because a builder can check them. Its most ambitious outcome, an end-to-end unlinkable lane that combines independent relay transport, encrypted requests through the router, attested execution and blind e-cash, depends on every one of those rows, and the table, not this page, says how far along each one is.
That is the right posture for infrastructure of this kind. Build the critical pieces in public. Specify the rest in public. Mark the difference. Then let builders, model hosts and users verify the system as it grows.