Coin Brief ENDE

BIP-374 reduziert die Challenge jetzt modulo der Kurvenordnung

BIP-374, der Entwurf für Discrete-Log-Equality-Beweise (DLEQ), steht seit dem

  1. September auf Version 0.3.0. Die Änderung ist klein, mechanisch — und genau von der Art, die darüber entscheidet, ob zwei Implementierungen übereinstimmen.

In GenerateProof wird die Challenge nun als Hash modulo der Kurvenordnung berechnet: e = int(hash_BIP0374/challenge(...)) mod n. In VerifyProof liest der Verifizierer e = int(proof[0:32]) und muss jetzt abbrechen, wenn e >= n — dieselbe Prüfung, die für s längst galt. Die Referenzimplementierung trägt beide Änderungen, und der Generator für Testvektoren bekam zwei neue Negativfälle: einen Beweis, dessen e gleich der Kurvenordnung ist, und einen, bei dem das für s gilt.

Autoren des BIP sind Andrew Toth, Ruben Somsen und Sebastian Falbesoner; Lizenz ist BSD-2-Clause, der Status bleibt Draft.

BIP-374 reduziert die Challenge jetzt modulo der Kurvenordnung
BIP-374 reduziert die Challenge jetzt modulo der Kurvenordnung — Coin Brief

Was das bedeutet

Ein nicht reduzierter Skalar ist ein Interoperabilitätsfehler, der auf die eine Eingabe wartet. Ein 256-Bit-Hash ist gelegentlich größer als die Ordnung der Gruppe secp256k1. Bibliotheken, die implizit reduzieren, und solche, die es nicht tun, liefern für fast jede Eingabe denselben Beweis — und für den seltenen Fall verschiedene. Der Schaden landet bei dem, der den Beweis erzeugt hat, nicht bei der nachlässigen Implementierung.

Sicherheitsrelevant ist die Ablehnung außerhalb des Bereichs auf der Prüfseite. Deterministische Erzeugung stellt Einigkeit zwischen ehrlichen Parteien her. Die Ablehnung von e >= n beseitigt eine Klasse von Malleabilität, bei der sich ein Beweis mit einem äquivalenten, aber anderen Skalar neu kodieren lässt.

Das eigentliche Ergebnis sind die Testvektoren, nicht der Fließtext. Einen Satz „bei Werten außerhalb des Bereichs abbrechen" kann man beim Implementieren überlesen; eine Vektordatei mit einem Fall, dessen e der Kurvenordnung entspricht, wird rot. Beide neuen Fälle kamen im selben Commit.