Skip to content

Threshold signatures

Witness currently supports two per-network signature representations.

Ed25519 multi-signature

Ed25519 is the default. The signed attestation contains one 64-byte signature record for each participating witness, together with its witness ID. The verifier looks up each ID in the secret-free network configuration, verifies the signature over Attestation::to_bytes(), rejects duplicate IDs, and requires the configured threshold.

This is a multi-signature representation: signatures remain individually visible. It is not a single cryptographic threshold signature.

BLS12-381 aggregate

BLS mode uses blst::min_sig. Each witness signs the same attestation and the gateway aggregates the signature bytes into one 48-byte compressed G1 signature (the configured BLS public keys are 96-byte compressed G2 keys). The wire object also carries the signer IDs. Verification aggregates the corresponding public keys and checks the aggregate, after enforcing unique known signers and the configured threshold. The current verifier does not check proof-of-possession (PoP) for BLS keys.

The compact signature is useful when many witnesses participate. The repository describes a 75% signature-byte saving versus three 64-byte Ed25519 signatures.

Implemented behavior

The gateway supports both schemes for attestations and Signed Tree Heads, and the same core verification rules are used by the gateway, CLI, and auditor. The signature representation must agree with signature_scheme; a mismatch is rejected. The JSON union rejects ambiguous or partial multi-sig/BLS shapes.

Assumptions

The public key set and signer IDs are authentic and stable for the verification operation. A BLS deployment therefore requires a trusted membership-key registration process that authenticates each witness/key binding and requires PoP before admitting the key to the verification configuration. Under that assumption, BLS aggregate verification proves the registered public keys jointly validate the aggregate; the threshold policy supplies the minimum signer-list count. Without the trusted registration/PoP assumption, a listed set of distinct IDs is not, by itself, proof that that many distinct witnesses participated.

Non-goals

Witness does not currently describe a DKG, secret-sharing ceremony, or native single-key threshold-signature protocol. BLS aggregation does not by itself remove the need to trust the signer list, public-key configuration, the membership registration/PoP process, or the operator threshold policy.

TODO — maintainer review

Have a cryptography maintainer review the BLS terminology, aggregate security assumptions, and the byte-size comparison before this page is treated as a protocol guarantee.