Zum Inhalt springen
ecdsa.com

RFC 6979 (deterministisches ECDSA)

Die Spezifikation von Thomas Pornin aus dem Jahr 2013, die die Nonce k für DSA oder ECDSA mit HMAC-DRBG aus dem privaten Schlüssel und dem Hash der Nachricht ableitet, sodass das Signieren keinen Zufallszahlengenerator braucht.
Auch geschrieben alsRFC 6979deterministic ECDSAdeterministic DSA

Das Verfahren (§3.2) nutzt den privaten Schlüssel und den modulo der Gruppenordnung reduzierten Hash als Seed für HMAC (int2octets(x) ‖ bits2octets(h1)), führt die Update-Schritte von HMAC-DRBG aus und zieht Kandidaten, bis einer in 1…q−1 liegt. Derselbe Schlüssel und dieselbe Nachricht ergeben immer dasselbe k und damit Byte für Byte dieselbe Signatur. Verifizierer erkennen keinen Unterschied: Das Ergebnis ist eine gewöhnliche ECDSA- oder DSA-Signatur.

FIPS 186-5 lässt die Methode als „deterministisches ECDSA“ zu (§6.3.2, Anhang A.3.3). Sie beseitigt die Fehlerquelle schlechter Zufallszahlengeneratoren, die hinter dem Fall der PlayStation 3 und vielen Schlüssellecks bei Wallets stand, und macht Testvektoren reproduzierbar: Anhang A.2 von RFC 6979 enthält Vektoren für DSA, die P-Kurven des NIST sowie die K- und B-Kurven.

Der Preis ist die Anfälligkeit für Fehlerinjektion und Seitenkanalangriffe: Wird dieselbe Nachricht zweimal signiert und dabei ein Fehler herbeigeführt, kann das den Schlüssel offenlegen; Hedged-Varianten mischen deshalb zusätzlichen Zufall in dieselbe Ableitung (§3.6 erlaubt zusätzliche Daten). Schalter in Bibliotheken: OpenSSL ab 3.2 -pkeyopt nonce-type:1; Python cryptography ec.ECDSA(hashes.SHA256(), deterministic_signing=True); @noble/curves signiert standardmäßig deterministisch und bietet für Hedging die Option extraEntropy.

Standards und Quellen

Alle Begriffe