B3IQ private inference currently uses encrypted transport. It is private from the B3IQ control plane, gateway, hosted playground, router accounting, billing exports, and public explorer payloads. It is not yet a claim that prompts and outputs are hidden from the node operator.

This page describes what is stored, what each layer in the path can see, and the roadmap to verified confidential compute. We state the current boundary honestly: where a protection is not yet in place, we say so.

Privacy Classes

ClassStatusClaim
private_transportActiveClient encrypts to node transport key. Protects content from B3IQ services and public surfaces, not from the node operator.
verified_confidential_cpuPlannedRequires verified TEE attestation, transport key binding, attestation freshness, and receipt evidence.
verified_confidential_gpuLaterRequires practical confidential GPU hardware, driver stack, and attestation tooling.

Is Your Content Stored?

The short answer: the public inference path stores no prompt or output. The table below is the complete list of paths and exactly what each one retains.

PathContent stored?Detail
Public / pooled inferenceNoPrompt and output transit memory and stream through, but are never written to a datastore. Only token counts and routing metadata are kept.
Private inference (private_transport)Ciphertext onlyStored encrypted to the node. B3IQ holds no key and cannot decrypt. The encrypted payload is auto-purged after about 30 days; a billing skeleton remains.
Node-local playgroundPlaintextLives only in the operator's own node database, on their own machine. Removed on node uninstall or reset.
Hosted playground (dashboard)PlaintextStored server-side for the life of the session so conversation history works. Purged by a scheduled retention sweep after the session expires or is deleted, subject to admin retention controls.
Node request logsOff by defaultRaw prompt/response logging is opt-in and off by default. The public and gateway paths are always content-redacted regardless.
The public hot path keeps no content

For pooled inference, content flows through control-plane memory and the node runtime but is never persisted on either side. The accounting record holds token counts and routing metadata only — no prompt, no completion text.

Current Baseline

  • Private job request bodies must include a b3iq-private-transport-v1 envelope.
  • The envelope uses an X25519 key exchange to the node transport key with AEAD encryption, so only the target node can open it.
  • Streaming responses are protected frame by frame: each frame binds a sequence number and a final-frame flag into its authenticated data, so truncated, reordered, dropped, or replayed frames are detected.
  • Extra request fields are rejected before dispatch, so plaintext cannot be smuggled in alongside the ciphertext.
  • Private command results store only validated encrypted response envelopes and an optional receipt hash.
  • Stored state may contain ciphertext envelopes, job state, usage rows, receipt hashes, and signed receipt commitments.
  • Stored state must not contain raw prompts, outputs, customer tokens, local node keys, or router secrets.
  • Old terminal ciphertext envelopes can be purged while preserving billing, receipt, and settlement evidence.

What Each Layer Can See

Transport encryption terminates at the routing edge, so for pooled traffic the edge and the control plane are in-path and can see content in memory — they just never store it. The private_transport path is zero-knowledge to B3IQ: the control plane relays ciphertext it cannot decrypt. In both cases the node operator, who runs the model, can see the content today.

LayerPooled (public)private_transport
Control plane (B3IQ)Sees content in memory to price and route; never storedCiphertext only — holds no key, cannot decrypt
Routing edge (TLS terminates here)In-path for contentCiphertext only
Node operatorSees prompt and output (runs the model)Decrypts and sees content, until verified-confidential execution exists
Public settlement recordToken counts and aggregate batch totalsSame — hashes and counts, never content

Privacy-Positive Defaults

  • Node location is coarse (city-level) — never a raw IP address.
  • IP and user-agent appear only as hashes in admin audit logs, with the IP under a keyed HMAC.
  • API keys and tokens are stored only as hashes.
  • Work receipts carry content hashes and token counts — never the prompt or output.
  • Settlement records only aggregate batch totals — never per-recipient amounts.
  • Queue and ledger state hold no content, and no key-value cache is used.

Confidential Routing Is Fail-Closed

A request may declare a privacy class. A verified_confidential_* request is fail-closed: it routes only to a node whose attestation B3IQ itself has verified and found fresh — never the node's self-reported claim.

Confidential classes are empty today

The attestation verifier is not yet enabled, so a request for a verified_confidential_* class currently matches no nodes. The only active class is private_transport. We would rather route nothing than route to an unverified node.

TEE Path

The first confidential CPU target is AMD SEV-SNP. Intel TDX remains a second backend. The TEE path needs:

1

Quote retrieval and verification

Prototype hardware quote retrieval and verifier service integration.

2

Transport key binding

Bind the node transport public key to attestation report data.

3

Sanitized public summary

Publish only verification status, TEE type, provider/verifier, policy ID, measurement/runtime/report-data/public-key/quote hashes, and freshness.

4

Client-side verification

Verify attestation before encryption in strict confidential mode.

5

Receipt commitment

Include attestation hash in signed receipts without exposing raw quotes or certificate chains.

Until that flow is implemented and tested end to end, use private_transport terminology.

Private Jobs

The encrypted private-job APIs, envelope contract, and job lifecycle.

Learn More
Operator Security

How nodes handle keys, tokens, and local trust boundaries.

Learn More
Ask a question... ⌘I