OpenChainGraph · Explainer Recorded 2-of-3 ceremony

Threshold signing: one key across many holders

One signing key can sit in several hands at once, so that two of three holders together can sign and any single holder alone cannot. This page walks one 2-of-3 ceremony end to end twice: once with a trusted dealer who briefly holds the whole key, and once with distributed key generation, where the whole key is never assembled anywhere. It closes with the failure stories bad randomness keeps writing, and with where threshold ideas touch this estate. Every ceremony value on this page is a recorded transcript: it was generated offline by a pinned cryptography library before this page was written, and the page itself runs no cryptography.

Presenter mode shows one step per screen. Arrow keys move, A toggles autoplay, Esc exits.
Two of three holders produced every signature shown here, and each result verifies as one ordinary Ed25519 signature under one group public key. To any outside verifier, a threshold ceremony and a single key look the same.
Part one · The problem

One key is one point of failure

Two steps: what a verifier actually sees when a signature arrives, and how one key can be split so that no single holder alone can use it.

1
Step 1 · The problem

From one key to many holders

One ordinary signing key answers three questions at once: who approves, where the key lives, and what happens when that one place burns. Threshold signing changes the middle answer: the same single key, in effect, lives in several hands, and a quorum of those hands must agree before anything is signed.

Single key holder one device one keyone secret steal it once, sign anything Multisignature holder A holder B holder C sig 1 sig 2 sig 3 three signatures visible Threshold share 1 share 2 share 3 ONE signature two of three agreed, and nobody can tell which two

A multisignature scheme keeps separate keys and produces separate signatures, so the policy is visible on the wire: a verifier counts three signatures and learns that three parties were involved. A threshold scheme produces one signature under one public key, and the quorum policy stays private to the holders. That privacy is a design choice with a cost: the ceremony that splits the key has to be run well, which is the subject of the next three steps.

Who asks at this stepagents welcome
Why does one signature from three holders look identical, to any outside verifier, to one signature from a single key?
2
Step 2 · The problem

Shares and thresholds

A threshold scheme cuts one secret into n shares so that any t of them can act together, while fewer than t learn nothing about the secret. This page's ceremony uses t = 2 and n = 3: two holders can sign, one holder alone cannot, and all three together are never needed.

the whole signing key (scalar) cut: Shamir secret sharing, a random polynomial of degree t-1 = 1 share 1 share 2 share 3 any 2 shares sign together t = 2 of n = 3 1 share alone: no signing power, and no usable information about the key Each share is also verifiable. Alongside the shares sits a public list of commitments; any holder can check that its share is consistent with that list without learning anything else, so a bad or corrupted share is caught before it matters.

The mathematics is polynomial interpolation over a finite field: fix a secret as the constant term of a random polynomial of degree t-1, hand each holder one point on that polynomial, and any t points determine the polynomial while t-1 points leave it completely undetermined. The commitments are the polynomial's coefficient points, published so shares can be checked. FROST, the signing protocol used on this page, builds its 2-of-3 group exactly this way.

t = 2, n = 3 throughout this pageshare check: VSS commitments (RFC 9591 Appendix C.2)
Who asks at this stepagents welcome
In a 2-of-3 share set, what exactly can one holder do alone, and what does a verifier need before it trusts a claimed share?
Part two · The ceremony

Two ways to cut one key into three shares

Three steps: the trusted-dealer track, where one party briefly sees everything; distributed key generation, where no party ever does; and the signing step, where two holders produce one signature. Every value in these steps was recorded offline and is quoted, truncated, from that recording.

3
Step 3 · The ceremony

The trusted dealer trackdesign scene

The oldest way to cut a key: a dealer generates the whole key, cuts it into shares, hands one share to each holder, and deletes the key. It works, and it has a structural weakness: for a moment, one machine held everything, and the ceremony is only as trustworthy as that machine and its randomness.

dealer generates the whole key with its own randomness whole key: 79aba78a3d07e4d6…0548f50b holder 1, share 57928337… holder 2, share 593e5c90… holder 3, share d82f9332… group public key: a0f4f4be…702cf1ef (ordinary Ed25519 key) the marked moment: one party holds the whole key

The recorded dealer run drew the whole key first, then cut it into the three shares shown, each share paired with a public verifying share so holder 1 can check what it received. RFC 9591, the FROST specification, sketches exactly this shape in its Appendix C, because key generation is out of that document's scope. The whole-key value above is real and is published deliberately: this ceremony was recorded for teaching, the key was born in a sealed offline run, and showing what the dealer saw is the point. That exposure is why the next step exists.

recorded, dealer runwhole key 79aba78a3d07e4d6…0548f50bgroup key a0f4f4bef38f1941…702cf1efVSS commitments: a0f4f4be…, 73f35c10…
Who asks at this stepagents welcome
What exactly does the dealer see in the trusted-dealer setup, at which moment, and what must be trusted about that machine?
4
Step 4 · The ceremony

Distributed key generation

Distributed key generation removes the dealer: every holder contributes randomness, the shares are formed in public round messages, and the whole signing key exists only as a sum that is never assembled anywhere. The ceremony holds together as long as one participant is honest.

Round 1: each holder broadcasts commitments and a proof of knowledge holder 1: commitments 12cedfc7…, 896e8c51… proof of knowledge: 85819ac0… holder 2: commitments 79689f17…, de105726… proof of knowledge: 8434977d… holder 3: commitments caa6d786…, 673e54b8… proof of knowledge: 65d17df0… Round 2: each holder sends a private share fragment to every other holder fragments in transit, e.g. holder 2 to holder 3: 20eccee8… Round 3: every holder derives the same key material locally holder 1 derivesits share, locally holder 2 derivesits share, locally holder 3 derivesits share, locally all three derive the same group key: e232e373…a6fd45e6

This three-round shape, with the proof of knowledge in round one, is the distributed key generation implemented in @noble/curves 2.4.0, the Zcash Foundation construction. RFC 9591 covers the FROST signing that follows; it deliberately leaves key generation out of scope, so the DKG wording here names the library's construction rather than the RFC. In the recorded run, all three holders derived byte-identical group public keys and mutually consistent verifying shares, and each share validated against the published commitments.

recorded, DKG rungroup key e232e373e9a3c0cc…a6fd45e6all three agree: yesshares validate: yes
Who asks at this stepagents welcome
Walk the three DKG rounds. What is public after each round, and where does the whole signing key never exist?
5
Step 5 · The ceremony

Two holders sign as one

Signing is RFC 9591 FROST signing, in two rounds: the participating holders publish nonce commitments, then each produces a partial signature, and an aggregation step folds the partials into one ordinary 64-byte Schnorr signature under the group public key.

Round 1: nonce commitments (recorded DKG run, holders 2 and 3) holder 2 commits: hiding 9c63684d… binding d732467d… fresh random nonces, published as commitments only holder 3 commits: hiding 86677d93… binding 99e771b4… each partial signature consumes its nonce exactly once Round 2: partial signatures, then aggregation partial from holder 2: 07942648… partial from holder 3: 4b7d165d… aggregate: a8369d73f96814e3…9bc90ea0e RFC 9591 FROST verification: PASSagainst the group public key ordinary Ed25519 verification: PASSsame signature, same key, no FROST code

The message signed in both recorded runs was the ASCII string threshold-signing-explainer recorded ceremony. The recorded transcript also includes, for completeness, the dealer run signing by holders 1 and 2. Every verification below passed in the recorded run, and the second one is the quietly important result: the aggregate is a well-formed RFC 8032 Ed25519 signature, so an ordinary verifier with no FROST code accepts it.

RunKey generationSigning pairAggregate signatureRFC 9591 verifyOrdinary Ed25519 verify
Dealertrusted dealerholders 1 + 250688ca151bf4a13…82c3ed00PASSPASS
DKGDKG.round1/2/3holders 2 + 3a8369d73f96814e3…9bc90ea0ePASSPASS

Different holder pairs signed the two runs, which is the threshold property doing its job: any two of the three can form a quorum. The nonce discipline matters as much as the shares; the randomness step of this page is where that story lands.

Who asks at this stepagents welcome
Which values from the recorded transcript would an external verifier need in order to check the aggregate signature, and which verifier code can it use?
Part three · Choices, failures, and this estate

From holder choice to failure stories

Four steps: choosing holders as a design value, FROST against MuSig2, the randomness failure stories with their primary sources, and where threshold ideas touch the AINumbers estate.

6
Step 6 · Choices

Choosing who holds a share

A threshold is only as strong as the spread of its holders. Holder choice is a design value: pick holders by jurisdiction, by authentication type, and by whether each is a person or an organisation, so that one compromise, one legal demand, or one mistake stays below the quorum.

holder 1 jurisdiction: European Union authentication: hardware device who: an organisation holds one share holder 2 jurisdiction: North America authentication: passkey who: a person holds one share holder 3 jurisdiction: APAC authentication: in-person ceremony who: an organisation holds one share Any two of these three form a quorum. No vendor is named here because the properties, spread and independence, are the design levers.

The three axes do different work. Jurisdiction spread keeps one court or one regulator from reaching a quorum. Authentication spread means one class of credential compromise, for example a stolen passkey, reaches at most one share. The person-or-organisation choice sets who is accountable and who is reachable in an emergency. A sound policy names its holders along all three axes before the ceremony is scheduled.

Who asks at this stepagents welcome
Give three holder-selection policies for a 2-of-3 set and name the failure each one survives.
7
Step 7 · Choices

FROST and MuSig2 side by side

Two Schnorr multi-party schemes answer different questions. FROST, specified in RFC 9591 (an Informational RFC), lets a threshold subset of n sign. MuSig2, specified in BIP 327 (a draft Bitcoin Improvement Proposal), requires all participants and exists to make several keys look like one ordinary BIP340 key.

FROSTMuSig2
specificationRFC 9591, InformationalBIP 327, draft
who must take partany t of n holders (this page: 2 of 3)all n participants
signing roundstwo: nonce commitments, then partial signaturestwo
key generationout of scope for RFC 9591; trusted dealer sketched in its Appendix C; distributed key generation per @noble/curves, the Zcash Foundation constructionbuilt into the scheme (public-key aggregation)
nonce disciplinea reused nonce in any partial signature leaks that holder's sharea reused nonce leaks the private key

For custody of one key across several holders, the threshold column is the one that matters: MuSig2 cannot express 2-of-3, because all participants must sign. MuSig2 shines where a fixed group wants the efficiency and privacy of one key. Both live or die by nonce discipline, which is the next step's subject.

Who asks at this stepagents welcome
Compare FROST and MuSig2 for a 2-of-3 custody policy and say which applies at all.
8
Step 8 · Failures

Why bad randomness is the recurring failure

Threshold structures spread a key across holders, and every one of those holders still draws randomness: to generate shares, and for every single nonce at signing. The recorded failure stories below are all, at bottom, randomness stories, and each is linked to its primary source.

healthy entropy pool 2^128+ possible key values enumeration is hopeless, so the key survives being public key material pool quietly narrowed a packaging change, 2006 keys drawn from a small space, with no visible error anywhere enumeration wins days of CPU time, 2008: the Debian OpenSSL keys, generated in public within days The same shape repeats at signing time: a per-signature nonce drawn from too small a space hands the key to anyone who sees two signatures.

The Debian OpenSSL weakness

Between 17 September 2006 and 13 May 2008, a Debian-specific change to the OpenSSL package made its random number generator predictable, so cryptographic key material was guessable. The Debian advisory DSA 1571-1 (CVE-2008-0166) told every affected user to recreate keys: SSH keys, OpenVPN keys, DNSSEC keys, and key material for X.509 certificates and TLS sessions, and it flagged DSA signing keys as compromised outright, because DSA signs with a fresh secret random value each time. Two years of keys, one quiet packaging change.

Serial-number entropy misses at certificate authorities

Three public compliance cases in 2019, none of them key generation: certificate serial numbers. The Baseline Requirements ask certificate authorities for at least 64 bits of output from a cryptographically secure random number generator, and three authorities landed just under it. GoDaddy's serials carried about 63.994 bits after a 2016 change, Entrust's AffirmTrust issuers produced 63-bit serials through an EJBCA flaw, and DarkMatter's platform was configured for 64-bit serials that left about 63 bits of entropy. All three were disclosed on the Mozilla bug tracker, remediated, and the affected certificates re-issued or revoked.

The lesson for a threshold ceremony: the shares and the nonces both come from randomness, so the ceremony's health is the health of its entropy sources at every draw. The estate's Ed25519 guide covers where per-signature randomness sits in the signatures used here.

Who asks at this stepagents welcome
What did the Debian OpenSSL weakness and the 2019 CA serial-number findings have in common, and where does the same risk sit in a FROST ceremony?
9
Step 9 · The estate

In the AINumbers estate

Two statements close this page: what a threshold signer would change for this estate's verifiers, which is design only, and the k-of-n structure the estate runs today, which is a set of independent cosignatures rather than one shared key.

How it could plug indesign

A FROST-Ed25519 threshold signer would produce one ordinary Ed25519 signature under one group public key. The estate's receipt verifier T568 and envelope verifier T624 already verify ordinary Ed25519 signatures, so both would accept such a signature with no code change on their side. The threshold signer itself is a design on this page: the estate runs no threshold signing today, and this page runs no cryptography at all.

The estate does this todaylive

The estate's real k-of-n today is the Sigsum witness set behind anchor.ainumbers.co: twelve pinned witnesses, each an independent key on its own device, cosigning every transparency-log checkpoint, with verification requiring a quorum of those independent cosignatures. That is k-of-n agreement among separate signatures, shown here as exactly that, rather than one threshold key. Measured 23 October 2026 from anchor-suite/public/lib/sigsum.mjs (witness list last changed 20 August 2026).

The distinction matters for anyone tempted to read a witness quorum as threshold signing. Each Sigsum witness signs with its own key, visibly, and the policy counts the cosignatures; a FROST quorum produces one signature and keeps the policy private. Both are k-of-n trust, and they are different mechanisms.

Who asks at this stepagents welcome
Which estate verifier would accept a FROST-Ed25519 aggregate signature unchanged, and what does the estate use today instead of threshold keys?
Value provenance: recorded Every ceremony value on this page (whole key, shares, commitments, nonces, partial and aggregate signatures, group keys, verification results) is quoted from one recorded transcript generated offline on 23 October 2026 by @noble/curves 2.4.0 (MIT licence), suite FROST-ED25519-SHA512-v1, on a deterministic seeded run. Tarball sha256 55279c71b0201d6c0e58d0206d15825359e02a3932f326ba7b7909ac2d334aa9; exact dependency @noble/hashes 2.4.0, tarball sha256 e1946149b780017b2564fcc092cb01c04e1d7f20627d0296c17da8868f4436dc. The generator lives outside this repository and this page runs no cryptography; hex values are displayed truncated, with the full transcript downloadable below.
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.