This is an adaptation of the MuSig2's partial signature forgery for the FROST protocol, described by Adam Gibson. You can find the original write-up here.
In FROST signing, a malicious participant could forge the partial signature (i.e., PartialSigVerify on it will succeed) of another participant without knowing their secret share, but only under the following conditions:
- The victim does not participate in the signing.
- The malicious participant impersonates the victim while also participating with their original share, making it appear as if two different participants are involved in the signing.
As a consequence, the malicious signing participant will be unable to create a valid partial signature for their original secret share.
Key Setup: Let's consider a 3-of-5 FROST policy among a group of participants
- The participant identifiers are
$I = {1, 2, 3, 4, 5}$ . - Each participant's public share is denoted by
$X_i ;\forall i \in I$ . - Each participant's secret share is denoted by
$x_i ;\forall i \in I$ . - The group public key is denoted by
$\tilde{X}$ .
Signing Setup: Assume we start a signing session with $S = {P_1, P_2, P_4^, P_5}$. The adversarial participant will take the role of both $P_4^$ and
Note
In this scenario, the malicious participant
The adversary receives the nonces from other signing participants:
The adversary sets aggregate partial nonces
Calculate
Calculate
Calculate
Calculate
Calculate
The last two values
To create nonces such that the forgery
Choose
Calculate
Choose
Calculate
Now,
$R_{5,1} = R_{1}^{} - R_{4,1}$ and $R_{5,2} = R_{2}^{} - R_{4,2}$
So, concluding the first communication round of the signing protocol, the adversary shares the rogue nonce values
Moving to the second communication round, the adversary can present the forged partial signature
The RHS is entirely fixed by the previous steps, and thus the LHS is a point whose discrete log cannot be extracted. In other words, the values