-
Hello, In the current implementation of libsecp256k1, the function Context for the question: In Taproot, users work with x-only public keys. If the owner of a group of x-only public keys signs with MuSig2 and does not send any information about the compression of each public key, it will not be possible to verify their signature correctly since the aggregate public key will differ. Am I correct? Thank you for your answers. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 7 replies
-
If by verifier, you mean full nodes enforcing the consensus rules... they don't care, as they only ever see the aggregate public key, and want a signature that is a valid BIP340 signature for that. They don't even know it's a MuSig2 aggregate. If by verifier you mean another party, who is interested in verifying that individual participants signed, they will need to know the public keys of the participants and recompute the aggregate themselves before verifying a signature against it. Those public keys must be the same as the ones used at signing time. x-only keys can be converted to full public keys by assuming they are even. It suffices if signers and verifiers use the same convention. |
Beta Was this translation helpful? Give feedback.
x-only pubkeys are only ever signed for using the private key corresponding to the equivalent even full public key (the BIP340 signing algorithm will negate the private key internally if need be for this).
MuSig2 aggregation/signing needs to do the same thing if you'd be working with x-only input keys: treat them as even public keys for aggregation purposes, and conditionally negate the private key at signing time to account for that.
But again, this isn't normally needed if you're talking about normal transaction signing. The verifier in this case doesn't know or care what the individual public keys were, or even that MuSig2 was used at all.