P1 signal privacy: the author is on the wire (content-commitment gap, corrected)
Registry property 10 (cyber/launch.md, row 10): "P1 signal privacy —
commitment + validity proof, leakage bounded." This audit traces what the
current spec and code actually deliver against that claim, and what
closing it needs.
Corrected 2026-09-22. The first version of this audit (2026-09-21) measured
against the earlier P1 wording, "a signal's content is visible to its
participants; the network sees a commitment and a proof of validity", and
called the plaintext link vector $\vec\ell$ the inverse of P1. launch.md
core 6 corrected P1 the next day:
P1 · the edge is public, the author is private. the network sees that particle p links particle q, the axon weight, and the aggregates φ* is computed from; it does not see which neuron signed, who holds the position, or who owns the energy. corrected 2026-09-22: the earlier wording, content visible only to participants, would have hidden the edges themselves and left nothing for the collective φ* to run on.
and the 2026-09-22 consolidated-state decision on the same page: "the wire and ticket leaks (rows 10, 12, 29) are about the private side, not the edges." Under the corrected P1 the plaintext edges are by design; the gap is the author.
what P1 requires
For every signal the network must see the edges (which particle links
which, the axon weight) and a proof that they are valid, and must not
learn which neuron signed them, who holds the position, or who owns the
energy spent. Non-participants see edges and aggregates; authorship,
positions and energy stay with the personal book (launch.md, decision
2026-09-22).
what the spec defines today
cybergraph's signal spec
(cybergraph@0eae7ae9, file last changed in ea1bb1f6, 2026-08-11)
defines the signal as $(\nu, \mathit{net}, \vec\ell, \Delta\phi^*, \sigma, h_0, h_1)$
(specs/signal.md:7). The first field $\nu$ is "signing neuron"
(specs/signal.md:11): the author is a plaintext field of the broadcast
tuple. $\vec\ell$ (specs/signal.md:13) carries the edges in the clear,
which the corrected P1 permits. $\sigma$ is "a zheng proof covering the
impulse, all conviction box movements, and cyberlink validity against the
current BBG root" (specs/signal.md:15) — a validity proof over the
disclosed tuple, including the disclosed $\nu$; the spec's "any verifier
runs decide(σ) ... without recomputing anything" (specs/signal.md:41)
assumes the verifier holds $\nu$ and $\vec\ell$ in the clear.
foculus's durable signal codec
(foculus@9e32aa68) fixes the same leak at the byte level: "Links contain
neuron/from/to/token[32], amount(u64), valence(i8), height(u64)"
(specs/signal-codec.md:12). Every link on the wire names its neuron.
So the signal as specified broadcasts the author with every edge, to every relaying node. Under the corrected P1 this, not the plaintext $\vec\ell$, is the gap: the edge is public as required, and so is the author, which is forbidden.
mudra already specifies the primitive the fix needs. identity.md
§"private authority" (specs/identity.md:88-100): "a public permanent
subject identifier links its actions. the private profile proves
membership and policy satisfaction against a committed authority set
while keeping the member, ownership opening and private values hidden."
That is authorship hiding for an action, with nullifiers for replay and an
explicit leakage contract for aggregates — P1's requirement, as a spec
with no implementation in mudra/src (modules: claim, cosmos, domain, neuron, proof, spell). What is missing is the binding: neither
signal.md nor signal-codec.md uses the private profile in place of
$\nu$ / neuron[32], and no spec says which committed authority set a
signal proves membership against. seal.md (lattice KEM for a named
recipient) and private-recovery.md (payment-note discovery) do not
address it.
what the proving backend can do today
Closing the gap needs a zheng proof that verifies validity and authorship
(membership in the committed authority set, signature under a hidden key)
without the verifier holding the author — private execution over a hidden
witness. zheng's private-execution audit, zheng/audit/private-execution-release.md,
states this directly: "Zheng's current direct dependencies provide no
reviewed private execution backend or complete blinding protocol"
(line 29 of the file as on disk 2026-09-22). The existing Spartan
implementation sends witness-dependent sumcheck polynomials and
evaluations in the clear; swapping in a hiding PCS alone does not blind
those messages. Four candidate routes are surveyed there (RISC Zero guest,
Triton-native interpreter, native hiding STARK stack, upstream
Spartan/Nova port), none complete, none reviewed.
Citation status, corrected 2026-09-22: the first version of this audit
cited that file at commit 8b19098f. No such commit exists in the zheng
repository or on its remote; the file is untracked in the zheng working
tree (git -C zheng status lists audit/private-execution-release.md as
??). The quote above is from the file on disk and is not yet committed;
it becomes a verifiable citation when zheng commits it.
lens::Commitment (Brakedown, re-exported in zheng/rs/src/types.rs:10,
used in folding/decide.rs) exists as an internal witness-binding
primitive inside zheng's own polynomial commitment scheme, but nothing
wraps a signal's authorship with it, and using it that way would still
need the hiding-protocol work above to keep the proof itself from leaking
the witness.
conclusion
P1 is blocked on two undone pieces, in order:
- a cybergraph/foculus spec clause binding
identity.md's private authority profile into the signal: theneuron[32]per link and the top-level $\nu$ replaced by a membership proof against a named committed authority set, the nullifier scope, and the changed verifier view; and the same for the position and energy fields (amount, the ICBS position) that the corrected P1 also hides; - zheng's private execution / blinding protocol, already tracked as an open release requirement independent of P1 — the proof has to certify validity and authorship over a hidden witness.
Neither is a 2026-09-21 code change. This audit is the evidence entry for property 10; the two follow-ups above are its next slices, and the second one is shared with zheng's own private-execution release gate rather than being new scope. The plaintext $\vec\ell$ this audit first flagged is not a gap under the corrected P1 and should not be worked on.