Wallets, die Transaktionen mit echten Zufallszahlen signieren

Von https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm :

Eine andere Möglichkeit, wie die ECDSA-Signatur private Schlüssel verlieren kann, ist, wenn „k“ von einem fehlerhaften Zufallszahlengenerator generiert wird.

Es wäre schön, wenn eine Brieftasche, anstatt Sie zu zwingen, einem bestimmten PRNG blind zu vertrauen, es Ihnen ermöglichen würde, die Zufälligkeit von „k“ zu erhöhen, indem Sie beispielsweise jedes Mal Ihre Maus bewegen (wie in https://www.bitaddress.org ). Sie sind dabei, eine Transaktion durchzuführen.

Gibt es eine Ethereum- oder Bitcoin-Wallet, die so etwas zulässt? Wenn nein, gibt es einen technischen Grund dafür?

Antworten (2)

Die Bitcoin-Welt verwendete früher zufällige k-Werte, hat es sich aber größtenteils anders überlegt, weil man eine Möglichkeit braucht, Zufallszahlen zu erstellen, und dies anfällig für Implementierungs- oder Plattformfehler ist, wie z eine Nummer von einer HTTP-URL bei random.org und endet mit etwas wie "HTTP ist jetzt deaktiviert. Bitte verwenden Sie HTTPS".

Die Lösung, die auch auf der verlinkten Wikipedia-Seite erwähnt wird, besteht darin, statt einer Zufallszahl eine deterministische Zahl zu verwenden. Die Zahl basiert teilweise auf der zu signierenden Nachricht, sodass Sie sicher sein können, dass Sie denselben Wert nicht zweimal für verschiedene Nachrichten deterministisch generieren. Das ist es, was heutzutage so ziemlich jede Kryptowährungs-Wallet-Software tut, und wenn sie es nicht tun, ist es eine rote Flagge.

Siehe diese Antwort für weitere Diskussionen über die Vor- und Nachteile davon (im Grunde alle Vorteile), einschließlich einiger Kommentare von Pieter Wuille, der libsecp256k1 geschrieben hat, die ECDSA-Bibliothek, die sowohl in Bitcoin als auch in Ethereum verwendet wird.

Beachten Sie, dass Sie zwar das Signieren ohne Zufallszahl durchführen können, aber dennoch Zufallszahlen benötigen, um die Schlüssel überhaupt zu generieren, und das kann ein guter Ort sein, um Sie dazu zu bringen, Ihre Maus herumzubewegen oder was auch immer.

Super Antwort, vielen Dank! Tatsächlich ist es durchaus sinnvoll, ein deterministisches k zu verwenden, das sowohl aus der Nachricht als auch aus dem privaten Schlüssel abgeleitet wird. Gut zu wissen, dass dies in Krypto-Wallet-Software bereits weit verbreitet ist.

Die Quelle der Zufälligkeit wie die Bewegung der Maus könnte als Startwert (der vollständig zufällig sein muss) für einen RNG verwendet werden. Ich denke jedoch, dass eine solche Quelle keine hohe Entropie bot, und vergessen Sie nicht, dass einige faule Leute keine gute Mausbewegung liefern. Außerdem verwenden wir die standardisierten RNG, weil sie getestet wurden und wir zum Beispiel überprüfen konnten, ob etwas nicht stimmt, wie mit dem Generator Dual_EC_DRBG, der von der NSA hintertürt wurde. Das einzige verbleibende Problem betrifft die Parameter, die in den Standards für ECDSA verwendet werden, wir wissen nicht, wie sie ausgewählt wurden. Ich denke, die Community bewegt sich jetzt in Richtung der Einführung des Schnorr-Algorithmus, der ein nachweislich sicherer Algorithmus ist, aber immer noch nicht standardisiert.