Skip to content

fix: require GenCircuits to carry the verifier key's signature for its sender - #521

Open
KSlashh wants to merge 1 commit into
devfrom
audit/18-gencircuits-binding
Open

KSlashh wants to merge 1 commit into
devfrom
audit/18-gencircuits-binding

Conversation

@KSlashh

@KSlashh KSlashh commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

Audit item M5. Open against dev. Wire change: operator and verifier nodes must run the same version (this ships with the redeploy).

The operator bound a GenCircuits verifier_pubkey to the first peer that claimed it. A registered verifier could claim another verifier's key first; the real holder was then refused as "already bound to another peer", and the graph stalled because the selected key had no one to endorse it.

  • GenCircuits carries a Schnorr signature by verifier_pubkey over a domain tag, instance id, graph id, the key and the sender's peer id. The operator ignores a GenCircuits whose signature does not verify for its gossip author.
  • The setup package is not signed: gossip already authenticates the sender, and only the key-to-peer claim needs the key holder's consent.
  • Checking the key against the sender's NodeInfo binding instead was not usable: verifier NodeInfo heartbeats only reach the committee topic, and unregistered rows are purged after 15 minutes, so operators would soon have no verifier bindings.

Tests: the holder's message verifies for its own peer only; another peer's signature over the holder's key, and the holder's signature moved to another graph, are refused. Node tests and workspace clippy pass.

Validation results above are recorded in the zkm PR notes. Branch scope and diff formatting were checked locally; builds and tests were not rerun during publication.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants