Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Address AdamISZ's feedback regarding duplicate public keys #25

Merged
merged 3 commits into from
Jun 8, 2022

Conversation

jonasnick
Copy link
Owner

No description provided.

@AdamISZ
Copy link

AdamISZ commented May 26, 2022

I still feel like this wording does not convey to the reader the fact that not every one of an attacker's indices can be identified in case of receiving an incorrect contribution. There's considerable finesse here as per our discussion on-list, i.e. to what extent does it matter, but clearly we're trying to be precise, maybe just something like this?:

a signer who prevents a signing session from completing successfully by sending incorrect contributions in the session can be identified (at at least one signing index, if they are in control of more than one) and held accountable

But obviously your call.

@jonasnick
Copy link
Owner Author

I'll wait for the other authors to weigh in.

@real-or-random
Copy link
Collaborator

I think the example of forgeability of partial sigs is somewhat besides the point. When it comes to disruption and the ability to identify malicious signers ("identifiable aborts"), this property holds in MuSig2 even for maliciously created keys, i.e., whether the attacker knows a secret key or not is relevant for unforgeability but not for identifiable aborts. (See also the ROAST paper, where we make this formal for FROST; the exact same argument applies to MuSig2.) So in the example where the attacker controls signers 4 and 5, and doesn't have the secret key of 4 but still manages to produce a contribution that passes partial verification, you could say that 4 behaves honestly with respect to identifiable aborts. It doesn't really matter that the attacker doesn't know the secret key. (The attacker could equivalently also know it and not use it.) Similarly, the attacker could make signer 4 always use the same two EC points in the nonce, or always choose the secret key to be the constant 42. Such a signer is clearly not honest in the sense that it doesn't adhere to the protocol but we simply don't care when it comes to identifiable aborts.

So I believe one could argue that the protocol really identifies all signers which behave disruptively in a particular session. Of course, we can't identify all signers controlled by the attacker, because they could behave honestly in this particular session (and possibly be disruptive only in future sessions, if such sessions exist). But I totally see that this is subtle and debatable, and we shouldn't go into these details in the BIP. In the end, the protocol guarantees the following property, which is all that users of the protocol need to know, and so this is all we need to say in the BIP:

If the signing session fails to output a valid signature, then each honest signer will identify exactly one disruptive signer, who sent incorrect contributions in the session, and return the index of the disruptive signer.

And I believe this is in line with @AdamISZ's suggestions, (I hope) I'm just rephrasing.

We should also mention this very useful property:
Additionally, if the honest signers agree on the set of messages sent by all signers in the signing session, then the honest signers will identify the same disruptive signer.

(We can replace "disruptive" by "malicious", open to bikeshedding here.)

@AdamISZ
Copy link

AdamISZ commented May 27, 2022

Thanks @real-or-random that's a really interesting way of looking at it.

On reflection from that, I think I can see that ultimately what I'm worried about is something that's cautioned already, expicitly, in the document, namely that partial signatures are not proofs of knowledge. As per here:

Note that partial signatures are not signatures. An adversary can forge a partial signature, i.e., create a partial signature without knowing the secret key for the claimed public key[2].

Anybody sufficiently thoughtful to 'do this right' will presumably, in any meta-protocol, take account of this fact. It could be a "gotcha" in some use case, but this BIP can't really do more than inform of that fact.

If the signing session fails to output a valid signature, then each honest signer will identify exactly one disruptive signer, who sent incorrect contributions in the session, and return the index of the disruptive signer.

This looks good to me but: I don't get why you say 'exactly one', can't more than one signer output garbage/not follow the rules?

@real-or-random
Copy link
Collaborator

This looks good to me but: I don't get why you say 'exactly one', can't more than one signer output garbage/not follow the rules?

Ok yes, I said "exactly one" because our algorithms currently output only one. (see also #9 ). But on a second thought, that's not really true... I mean sure, for example PartialVerify outputs only one index but that's just because this algorithm is just looking at the contributions of a single signer. So I agree, it's better to drop the "exactly". Maybe "at least one" or just "one".

@jonasnick
Copy link
Owner Author

jonasnick commented May 31, 2022

Added @real-or-random's suggestion (slightly rephrased, since PartialSigVerify doesn't return the index of the signer, that's something the application needs to handle) and moved this part to the "Identifying Disruptive Signers" section.

@jonasnick jonasnick changed the title Fix wording that implied finding all disruptive signers is possible Address AdamISZ's feedback regarding duplicate public keys May 31, 2022
@AdamISZ
Copy link

AdamISZ commented May 31, 2022

ACK 3aabe68

Copy link
Collaborator

@real-or-random real-or-random left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK mod comments

bip-musig2.mediawiki Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants