Protocol-side companion to #65 and to agent-bridle's Ceremony Contract (bridle PR #229, v0.1.2 §2.1/§5.4/§5.5). The identity model: every participant — principal, agent, surface — is a fingerprint; a monolith is one fingerprint wearing all roles; a no-compute mobile surface is a keypair + renderer.
What already exists here (cite, don't rebuild)
Delegation (newt → back-end worker) is therefore shipped in outline: both endpoints chain to a common pinned principal; the root key is involved at issuance only (headless fleets verify offline; revocation = generation bump).
What this issue adds
- SAS enrollment ceremony for new devices/surfaces (incl. no-compute):
commit-then-reveal, SAS derived from the full exchange transcript, human
comparison on both screens as the authentic channel. (A naive
phrase-echo — "new device shows abc-987, trusted device returns it
encrypted" — is MITM-relayable; the commitment step is what forces the
attacker to guess in advance.)
- Parameterized paranoia:
strength = (SAS entropy × rounds, distinct witnesses, presence); minima set by caveat ceiling — broad ceiling ⇒ multi-round + ≥2 previously-secured witnessing surfaces + hardware presence (attest).
- Surface identities: remote surfaces sign their Decisions/AuditRecords; enrollment produces a PinRecord in the chain-store carrying the ceremony parameters (auditable).
- External anchors as corroboration: GitHub-published keys / DNS / org CA / prior devices = candidate witnesses for a self-sovereign root — never load-bearing (floating-identity doctrine;
docs/decisions/floating_identity.md); no-GitHub users enroll by ceremony alone.
Out of scope
Refs: #65, #39, #40, bridle#229 (§2.1, §5.4, §5.5), bridle#225, newt-agent#1209.
Protocol-side companion to #65 and to agent-bridle's Ceremony Contract (bridle PR #229, v0.1.2 §2.1/§5.4/§5.5). The identity model: every participant — principal, agent, surface — is a fingerprint; a monolith is one fingerprint wearing all roles; a no-compute mobile surface is a keypair + renderer.
What already exists here (cite, don't rebuild)
UserKey(principal root) →AgentKey::issue→CertChain::verifychaining to the user root, fail-closed (fix(protocol): fail-closed causal-generation enforcement in CertChain::verify (§9.1) #39, §9.1)different_users_rejected_by_handshake)Delegation (newt → back-end worker) is therefore shipped in outline: both endpoints chain to a common pinned principal; the root key is involved at issuance only (headless fleets verify offline; revocation = generation bump).
What this issue adds
commit-then-reveal, SAS derived from the full exchange transcript, human
comparison on both screens as the authentic channel. (A naive
phrase-echo — "new device shows abc-987, trusted device returns it
encrypted" — is MITM-relayable; the commitment step is what forces the
attacker to guess in advance.)
strength = (SAS entropy × rounds, distinct witnesses, presence); minima set by caveat ceiling — broad ceiling ⇒ multi-round + ≥2 previously-secured witnessing surfaces + hardware presence (attest).docs/decisions/floating_identity.md); no-GitHub users enroll by ceremony alone.Out of scope
Refs: #65, #39, #40, bridle#229 (§2.1, §5.4, §5.5), bridle#225, newt-agent#1209.