Das Generieren einer Zufallszahl k
in einer elliptischen Kurve ist von entscheidender Bedeutung, und bei jeder Transaktionssignatur in Bitcoin ist eine Zufallszahl k
erforderlich, um einen Punkt zu berechnen k*G
. Wenn dies k
nicht zufällig gewählt wird, verliert es sofort den privaten Schlüssel.
Daher entwickelten sie eine Idee zur deterministischen Generierung von ECDSA, die in RFC6979 beschrieben wird . Im Grunde verketten sie den privaten Schlüssel mit der gehashten Nachricht und verwenden eine HMAC-Funktion und erzeugen einen Pseudozufallswert k
.
Diese Methode scheint einfach und leicht.
Oder gibt es generell Ineffizienzen oder Probleme mit dieser Methode und warum sehen wir immer noch eine nicht-deterministische Implementierung von ECDSA?
Keine ernsthaften Effizienzbedenken. Das Signieren wird für einen bestimmten Kunden ziemlich selten durchgeführt (normalerweise nur wenige Signaturen pro Transaktion). Obwohl es möglich ist, dass die Signierung etwas länger dauert, um den k
Wert zu generieren, würde dies nicht auffallen, insbesondere wenn man bedenkt, wie selten sie von einem bestimmten Client verwendet wird. Die Überprüfung aller Signaturen ist der CPU-Engpass für die Blocküberprüfung in Bitcoin, da alle vollständigen Knoten die Signaturen aller Transaktionen im Netzwerk überprüfen müssen, und dies dauert unabhängig davon, wie der k
Parameter gewählt wurde, dieselbe Zeit.
Gregory Maxwell hat hier einen Kommentar zur Verwendung deterministischer k
Werte abgegeben :
Die Hauptargumente in den meisten Bereichen gegen die Derandomisierung von DSA sind die FIPS-Konformität (für uns irrelevant) und berechtigte Bedenken hinsichtlich der Risiken der Verwendung eines (weniger) überprüften kryptografischen Konstrukts. Mit der weit verbreiteten Bewegung in Richtung derandomisierter DSA ist diese letztere Sorge weniger ein Problem.
Die neue libsecp256k1- Bibliothek von Pieter Wuille verwendet tatsächlich die deterministische Generierung von k
.
Beachten Sie auch, dass einer der Hauptvorteile der Verwendung dieser Konstruktion darin besteht, dass Sie sich keine Sorgen machen müssen, dass eine Schwachstelle in Ihrem PRNG im Signierprozess ausgenutzt wird. Wenn Sie beispielsweise verschiedene Daten mit demselben k
Wert signieren, wird Ihr privater Schlüssel sofort preisgegeben . Ein ähnlicher Angriff kann auch ausgenutzt werden, wenn der PRNG schwach genug ist, um die Beziehung zwischen verschiedenen k
Werten zu bestimmen, die beim Signieren derselben Daten verwendet werden. Da das k
deterministisch aus den von Ihnen signierten Daten (und dem privaten Schlüssel) generiert wird, sind diese Bedenken bezüglich des PRNG nicht mehr so relevant, da Sie immer dieselbe Signatur für dieselben Daten erstellen. Dies erleichtert auch das Schreiben von ECDSA-Einheitentests.
abeikverdi
Amaclin
Pieter Wuille
Morsecoder
Pieter Wuille
abeikverdi
Pieter Wuille
abeikverdi
Pieter Wuille
abeikverdi
Morsecoder
abeikverdi
Morsecoder
abeikverdi