Witbitz docs HomeTrustAll docs

Privacy tiers — the canonical configuration, and how modes trade down

This is the spine for the privacy story. Every other doc describes a feature; this one describes the maximally-private configuration once, then defines each real-world mode as a delta from it — what it gains and, precisely, what it leaks and to whom. Read this first; the feature docs hang off it.

Honesty rule (read before quoting anything here). This page describes the ceiling — the maximal configuration, including mechanisms that are still Design. What is actually in production today is in the Status table and what you can check yourself is in Verify it yourself. Every mechanism below carries its own maturity (Production / Implemented / Design) so the ideal is never mistaken for the real.


1. The always-on foundation (every Space, live, not optional)

These are not a "tier" — they are the floor beneath every Space, live and checkable today:

Everything in §2 layers on top of this foundation.


2. The canonical maximum — the "Maximum" tier

The highest trust level is the foundation plus all seven of the mechanisms below, each of which closes one specific leak against one specific party. They are orthogonal — independently switchable, each shutting a different door — so the "levels" in §5 are bundles of these, not a single ladder.

code
Foundation (always on)
  + Server attestation   → operator/cloud can't read plaintext in use
  + Client attestation   → the running client is provably the genuine build
  + Client verification  → the locks are provably enforced in YOUR browser
  + OHTTP                → the server can't see WHO (your IP) is connecting
  + Client shaping       → a network observer can't read sizes / timing / patterns
  + No notification      → no push provider learns THAT / WHEN you got a message
  + Confidential model   → the model that answers the turn can't read it either
= Maximum

The platform ships this; apps configure it. The "Maximum" above is the platform's supported capability, not an aspiration — everything except the roadmap items (client attestation and client shaping) is shipped and available to every Space. A mode (§5) is a bundle of these mechanisms; a lower mode simply omits some. Which mode the first-party Spaces app ships at is a separate, app-level concern — see The Spaces app: default configuration.


3. What the platform ships today

Mechanism-level view — the platform's status for each. (What the first-party Spaces app enables by default is a separate concern: The Spaces app: default configuration. Full product map: Status. Client-side checks: Verify it yourself.)

Mechanism Platform maturity
Admission gate Production (structural — every Space)
Egress lock Production (structural — every Space)
Content-blind storage Production (structural — every Space)
Signed + reproducible build Production (structural — every Space)
Key confinement (vault sandwich) Production (structural — every Space)
Server attestation (Nitro enclave) Production — the app builder enables the enclave per room
Client verification (verifier extension / CSP-loader) Implemented — the self-run tool + the Windows verifier extension are built and proven on staging, not the prod default; the mobile companion is Design
Client attestation (hardware-rooted binary/device proof) Design — iOS App Attest / Android Keystore / Windows TPM verifiers are stubbed + fail-closed; native shells not shipped. (Client verification above is software release-attestation — a separate, more-mature thing.)
OHTTP (network-metadata) Production — oblivious transport (RFC 9458) is LIVE: the app routes room ops by postMessage to a pinned open-source L1.5 frame that verifies a client-attestable relay (GCP Confidential Space, relay.witbitz.chat) and encapsulates to the gateway. Sticky opt-in (?ohttp=1); every room data op goes through the relay. (verify)
Client shaping (traffic-analysis) Design
No notification Push is Production (off unless a user enables it — a configuration choice)
Confidential model (attested inference) Production — the confidential tier routes its model call through an attested no-log gateway into confidential-compute inference on an open-weights model, verified transitively from the render enclave's measurement (the attested tier).

Everything above is Production today except client attestation and client shaping, which are Design — the gap between what ships and the full ceiling. (OHTTP is Production, off by default behind the "Hide my IP" toggle.)


4. The seven mechanism axes (orthogonal)

Each axis: the leak it closes, the party it closes it against, and its platform state.

Axis Closes this leak Against whom Platform state
Server attestation plaintext readable during the render instant the operator + the cloud (AWS) Production (the app builder enables the enclave per room)
Client attestation (hardware) a participant's client is a tampered/forged build masquerading as the genuine app — a modified client that leaks, or a bot impersonating one whoever runs a forged/tampered client in your room (checked by the room's requireAttestation gate — hardware proof via App Attest / Keystore / TPM) Design — App Attest / Keystore / Windows-TPM verifiers stubbed, fail-closed
Client verification the JS actually running in your browser might not be the audited, egress-locked build — a leaky client could exfiltrate mk/plaintext whoever serves your client — the app builder itself, the operator, a CDN, or a network injector — a leaky or swapped build, on purpose or by mistake (verifying the client is what makes the double blind — even the app's own owner can't read your content — hold) Implemented — self-run tool + Windows extension proven on staging; mobile companion Design
OHTTP your IP / the fact you're connecting the server + the network path Production — a single attested relay (Confidential Space, verified client-side via the pinned L1.5 frame, RFC 9458) sees your IP but only ciphertext; the gateway decrypts the op but sees the relay's IP. LIVE for all app→AWS traffic: room data ops and the enclave attest/wake path (previously a direct-to-gateway probe) now both ride the relay when the toggle is on — fail-closed, so a relay hiccup never silently falls back to a direct IP-revealing POST. The relay is measured code that provably does not log the source address — verifiable, not a promise. Residual: the browser still reveals your IP to Cloudflare when it loads the app's own bytes and calls same-origin edge functions (/space-config, tiles, /api/appshare, /api/link) — Cloudflare already serves the app, so this is no new party, and AWS never sees you (CF proxies onward from its own IP). Hiding your IP from Cloudflare/Apple/Google (app-load, push, Google sign-in) is outside any web page's control — only a device-level VPN or Tor closes it, which composes cleanly with OHTTP.
Client shaping message sizes, timing, access patterns a passive network observer Design
No notification that/when you received a message (content-free tickle + timing) the push provider (Apple/Google/push service) Production
Confidential model the turn's plaintext, read by the model that answers the model vendor / host Production — the confidential tier's measured image routes only to an attested no-log gateway (Intel-TDX-verified in-image, fail-closed) into confidential-compute inference (Intel TDX + NVIDIA GPU, gateway-verified); trades frontier for open-weights (the attested tier)

Note — client verification comes in three forms: the self-run tool (on-demand; Verify it yourself §8), the Windows/desktop extension (continuous — pins the release + forces the CSP; Implemented), and a mobile native companion (Design). "Client-verify on" in §5 means the extension/companion (continuous) or a tool run (on-demand). This is software release-attestation — distinct from client attestation above, which proves the binary/device is genuine via hardware.

See: The attested tier, The attested client, The power-user stack, The verifier, Away notification.


5. Named modes = bundles of axes

Modes are named bundles of the §4 mechanisms — the platform supports the Maximum; a lower mode simply omits some. Names encode the trade, not a number. (Which mode the first-party Spaces app ships at is documented separately: The Spaces app: default configuration.) on, off, Design (not built yet).

Mode Server-attest Client-attest Client-verify OHTTP Shaping Confidential model Notifications In production today?
Maximum (full platform support, §2) off Partly — client shaping / hardware client-attest are Design (OHTTP is Production; on in this mode, opt-in in the app)
Attested (strongest shippable) off Yes
Verified off Yes
Baseline (foundation only) off Yes
Connected (convenience) on Yes

Governance overlays (regulator access, full audit trail, owner rule) are orthogonal to these privacy modes — a compliance opening is a named-recipient disclosure, not a privacy-mode step-down. Keep them on a separate axis; see Delegated authority, The owner rule. Air-gapped / on-prem deployments compose on top of any mode — see Air-gap, On-prem.


6. Feature × mode matrix

Cells: available and privacy-neutral · ✓·leak(party) available but discloses something specific · unavailable at this mode. Only rows that actually trade are shown — every other feature (posting turns, membership, recovery, offline export) is mode-invariant and simply .

Feature Maximum Attested Verified Baseline Connected
Async chat, private lanes, documents, widgets, artifacts
Local connectors (on-device: folder / Obsidian / local MCP)
Away notifications (push) ✓·leak(push provider: that/when) ✓·leak(push provider) ✓·leak(push provider)
Web search / flights / places (egress tools) ✓·leak(the named API) ✓·leak(the named API) ✓·leak(the named API) ✓·leak(the named API)
Cloud connectors (Google Drive/Docs, etc.) ✓·leak(the cloud: content synced) ✓·leak(the cloud) ✓·leak(the cloud)
Live call / voice ✓·leak(media path) ✓·leak(media path) ✓·leak(media path)
External model answers the turn ✓·attested route † ✓·leak(model vendor) † ✓·leak(model vendor) † ✓·leak(model vendor) † ✓·leak(model vendor) †

The model residual. If an external model answers, the model vendor receives plaintext to compute — attestation covers the render, not the vendor. The Confidential model axis (§3–§4) closes this and is Production on the confidential (attested) tier: the render enclave's measured image routes the turn only to an attested no-log gateway into confidential-compute inference on an open-weights model, each link verifying the next (verification is transitive from the render measurement; the weights themselves are vouched by the attested stack, not measured — see the attested tier). Modes that use a frontier model still leak the turn to that vendor — that is the frontier-vs-confidential trade, chosen per room. See The double blind.


7. Opting out — what each step gains and what it leaks

Each step omits one platform-supported protection — an explicit, named trade. Read top-to-bottom as "relax one thing, gain one thing, leak one named thing to one named party."


8. Residual limits (the honest floor, at every mode)

No mode removes these; state them plainly so the tiers never over-reach:


How this reorganizes the doc set

This page is the entry point for privacy claims. The existing docs slot under it:

Update rule: when a mechanism changes state, update §3 and Status together; when a feature's disclosure changes, update its §6 row.

Machine-readable source: privacy-tiers.md · Generated 2026-08-29T18:46:30Z · build f3ff88cc · every doc in one fetch: llms-full.txt (HTML) · ← trust-model · spaces-app-defaults