main.rs
We are able to eavesdrop on seemingly normal FROST rounds
Participant 1 sent to participant 2 : VerifiableSecretSharingCommitment([...])
Participant 1 sent to participant 3 : VerifiableSecretSharingCommitment([...])
Participant 2 sent to participant 1 : VerifiableSecretSharingCommitment([...])
Participant 2 sent to participant 3 : VerifiableSecretSharingCommitment([...])
Participant 3 sent to participant 1 : VerifiableSecretSharingCommitment([...])
Participant 3 sent to participant 2 : VerifiableSecretSharingCommitment([...])
Which corresponds to the usual commitment sharing phase for the generated polynomial, where
is the signing threshold,
in our case, so each user's secret polynomial looks like:
With the group of signers.
Participant 1 sent to participant 2 : 21d572096976faf3962d2af54b2c5a0bafdee5f081e558dfa6e5dec42830cbb5
Participant 1 sent to participant 3 : bcf8cf26d4b4b79db158486c4ee673f3172a878c44582e0b3006f41d77af65fa
Participant 2 sent to participant 1 : e71ea9ddb484788e62b797d559083d759a2eab1112109022132d1319c4bc61bb
Participant 2 sent to participant 3 : 5284cc5c6a2a9f69adc975aba6293b7e4e69e38b740d0db0df3a5417c7a6d524
Participant 3 sent to participant 1 : 48badb74cda77ef986b4b788259c3624dd53da51bf5b5e3a0365a641d1260016
Participant 3 sent to participant 2 : 5ebd8b0b13a9793e70efe19e47cb3d4f98b0287f315c6c75e8cc9a21143de2c9
These are seemingly the signing shares being sent to each other. This was confirmed by taking a look at the actual code:
println!;
The signing shares are basically just being sent to signer
. These exchanges can be represented with the following exchange matrix:
Even though we are only able to intercept two of the three shares, we can still interpolate each because the threshold is
. Lagrange may be a bit overkill since we only have two coefficients, but whatever.
Now, since the group's signing key is just the sum of all
, we can just remove the
from the equation and get the sum of all shares for each participant.
use compute_lagrange_coefficient;
use ;
use BTreeSet;
FROST: Flexible Round-Optimized Schnorr Threshold Signatures
Chelsea Komlo
eprint.iacr.org PDF
Using ECC for (Multi-)Signatures
cstef
blog.cstef.dev