(TODO for Tarak: update inaccuracies in this doc)
Threshold Signature is used by Flow to generate random values in a distributed manner, to form a native random beacon to the Flow protocol. The threshold signature is instantiated using the BLS signature. BLS signature generation is used as a Verifiable Random function (VRF - check definition here) to form a VRF-based random beacon. The threshold aspect makes the VRF construction distributed and decentralized, making the Flow random beacon a threshold-VRF instance.
A threshold key generation (distributed or not) is a protocol that allows n participants to generate a key pair (SK, PK) and to divide it into n key shares, each share is a key pair (sk_i, pk_i) corresponding to the i-th participant. If the generation is distributed, SK is generated using entropy from the n participants (see next section for details on the keys)
The sk_i are the t-Shamir secret sharing of SK, i.e SK can be computed given any t+1 distinct key shares sk_i , and a set of up to t distinct key shares does not give any information about SK.
Threshold signatures allow the signature of a certain message m under the secret key SK without reconstructing SK first. The signature can be reconstructed using t+1 signatures of the same message m using distinct key shares sk_i.
SK doesn't have to be recovered to sign a message. The process doesn't leak information about SK and therefore allows SK to be reused for signing different messages.
Given n participants, indexed from 1 to n
(SK, PK) and n key-pair shares (sk_i, pk_i) , such that:
SK is not known by any of the n participantsPK and all pk_i are known by all n participants and all external partiesi , sk_i is known by participant of index i and not known to other participants of index j != isk_i s are the shamir sharing of secret SKm, participants can sign m using their respective sk_i, and generate the signature share sig_i = sign(sk_i, m)sig_i can be verified using m , pk_i and the simple signature verification algorithm Verify(sig_i, m, pk_i)m under SK can be reconstructed using at least t+1valid sig_i along with their corresponding indices i . The resulting signature is also called a threshold signature sigsig can be verified suing m and PK and the simple signature verification algorithm Verify(sig, m, PK)n, how to pick the right t?TODO: update below
A threshold signature scheme has to main security properties:
unforgeability: