NUT-00: add BLS12-381 (v3) protocol#371
Conversation
|
ChatGPT Pro Review 1. Blocking: externally supplied BLS points need explicit subgroup validationThe new BLS section says compressed encodings are fixed-width and that infinity is never valid, but it does not explicitly require subgroup checks for I’d add normative text along these lines in NUT-00:
This matters especially for 2. Blocking/high: batch “rejection sampling” is actually modulo reductionThe batch section says weights are derived “by rejection sampling,” but the pseudocode does: and only rejects I’d change this to one of: or use a wider expand, for example 64 bytes via XMD/HKDF/expand_message, then reduce modulo The same issue is worth revisiting in NUT-13: the v3 deterministic blinding factor is currently 3. High: v3 keyset-ID test vectors reuse the same G2 key for multiple amountsThe new NUT-02 v3 test vectors use the exact same G2 public key for amount That is risky as a canonical example. In this protocol, verification of a proof checks I’d either update the vectors to use distinct valid G2 public keys per amount, or add a strong rule in NUT-01/NUT-02:
The safer option is to do both. 4. Medium: the new test vectors do not actually expose
|
|
I would still request changes due to the new Mint Scalar Construction section. The formula Suggested fix: remove the normative Mint Scalar Construction section and replace the critical note with an unambiguous requirement: "Mints MUST deserialize and validate v3 The other updates look good: batch rejection sampling, NUT-13 v3 rejection sampling, distinct v3 amount keys, Y/K vectors, and batch challenge/weight vectors are all substantial improvements. |
|
@Egge21M - Thank you for running the review bot. All issues raised have been addressed and this should be ready to review now. |
Co-authored-by: a1denvalu3 <cloudsupper@proton.me>
Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
d38844f to
4b99585
Compare
|
Have resolved the overlap in symbol definitions as
|
Co-authored-by: a1denvalu3 <43107113+a1denvalu3@users.noreply.github.com>
Co-authored-by: a1denvalu3 <43107113+a1denvalu3@users.noreply.github.com>
Co-authored-by: a1denvalu3 <43107113+a1denvalu3@users.noreply.github.com>
Summary
Adds Pairing-based BDHKE (BLS12-381) as the v3 Cashu blind-signature protocol for keysets with version byte
02, alongside the legacy secp256k1 protocol for00/01keysets.hash_to_curve_G1with the Cashu RFC 9380 DST, multiplicative blindingB_ = r·Y, blind signingC_ = a·B_, unblindingC = r^-1·C_, and verification bye(C, G2) == e(Y, K).Fr*, and explicit point-validation requirements to reject non-canonical encodings, identity points, off-curve points, and non-prime-order subgroup points before signing or verification.00/01keysets use compressed secp256k1 keys, while02keysets use compressed BLS12-381 G2 keys.02, G2 public keys in the preimage, lowercased units, and updated V3 test vectors.dleq; offline verification uses the pairing equality from NUT-00.BLS_FR_ORDERinstead of modular reduction.The JSON/wire shape of
BlindedMessage,BlindSignature,Proof, and TokenV4 remains unchanged; the keyset version selects the curve and byte widths forB_,C_,C, and mint public keys.