Kibitz

← The Kibitz Engine · deep dive

Kibitz Threat Model

What Kibitz protects, what it doesn't, and who can see what. Honest by design.

Companions: architecture.md (the planes), verification.md (admission security).


1. Assets

2. The trust model

Component What it is What it can see
Media plane full WebRTC mesh, DTLS-SRTP nothing in the clear leaves the browsers; no media server
Data plane peer-to-peer DTLS data mesh content goes browser→browser; no participant relays it
Signaling broker signal.kibitz.chat (stateless) presence metadata only — connection events, room ids, ephemeral peer ids; not content
TURN relay Cloudflare Realtime (when direct fails) encrypted packets + IPs; cannot decrypt the call
Coordinator a participant's browser (migratory) room content it's granted (it's in the room) + coordinates presence/gate + distributes the capability grant map. No discretionary powers — it relays signaling and host commands, it doesn't author them.
Host (admin) a peer that proves the room's host credential may lock/kick/admit. Its mod commands are signed, room-bound, cert-bound, fresh, and replay-guarded (a per-command jti the verifier LRU-dedups) (hostKey.ts), so even a malicious coordinator can't forge or replay them. An open room has no host at all.

The headline property: there is no server that can decode or record a call. Content is E2E-encrypted between browsers; the edge helpers are content-blind. There is nothing central to subpoena, record, or shut down mid-call.

And just as no server can read a call, no server can eject anyone from one — there is no central power to wield. Enforcement is per-peer and sender-side: each honest browser simply refuses to share its media and data with a peer it can't verify (and the gate refuses an unverified joiner before rostering). A peer that fails the check stays connected to nothing useful — it's starved, not kicked. This makes enforcement distributed and fail-closed: there's no central point to compromise, and the default on "I can't verify you" is nothing, never the real content. The irreducible edge: you can always deny a peer, but you can never force another peer to deny them — which is exactly why collusion (§4) is out of scope.

Note the coordinator/host split. The coordinator is positional, migratory plumbing — it holds the room id, keeps the roster, runs presence ping/reap, and relays signaling; it has no moderation powers of its own. The host is a verified peer who holds a discretionary credential (see §4). This decoupling is deliberate: it stops a stranger who happens to become coordinator from seizing moderation, and it means bans don't vanish when the coordinator role migrates.

3. What is protected

These authenticity/identity properties stop a deceiving middle — a machine-in-the-middle or an impersonator. They do not stop two willing parties from colluding (§4): verification proves identity, not honesty. Concretely on the MITM question: who can MITM you? In a verified room — nobody (cert-binding forbids it, §5; not even the operator). In an open room, only whoever relays your setup (a coordinator, or the broker we run) can try — and the safety code catches them. So it's prevented when verified, detectable when open — never silently possible.

4. What is not protected (scope boundaries)

These are inherent to a P2P, in-room model — stated plainly:

5. Admission attacks (and why they fail)

Detailed in verification.md §6. Summary:

6. Agent-specific surface

7. The email-OTP exception

The one verification method that needs a backend (verification.md §4.5) sees join metadata (which email asked to join which room) — a privacy cost the other methods avoid. It does not see call content. Use it only when proving email control without a third-party IdP is worth that trade.

8. Operator posture

The project is operated pseudonymously and holds no call content, accounts, or recordings — by construction, not policy. The legal/privacy surface is therefore minimal: the only data that touches infrastructure is ephemeral presence metadata and (optionally) TURN-relayed encrypted packets.