Warum kam es früher bei Bitcoin-Transaktionen zu wiederholten „R“-Werten?

Bitte erklären Sie, warum früher die wiederholten Werte von „R“ in Bitcoin-Transaktionen auftraten.

Diese Transaktion hat beispielsweise eine Wiederholung des Werts „R“: https://www.blockchain.com/btc/tx/19d66411a5aa716a04b37197c11c93c9446a54694a2d2302093d8b0a93ed5d83

Wenn Sie sich RawTX ansehen: https://btc.com/19d66411a5aa716a04b37197c11c93c9446a54694a2d2302093d8b0a93ed5d83.rawhex

Wiederholungswert "R":

R = cabc3692f1f7ba75a8572dc5d270b35bcc00650534f6e5ecd6338e55355454d5

Was war der Grund dafür? Erklären Sie den Grund für diesen Fehler?

Antworten (2)

Der RWert ist das Ergebnis der EC-Punkt-Multiplikation zwischen dem kWert (bekannt als Nonce) und dem Generatorpunkt der secp256k1-Kurve. Es ist praktisch der öffentliche Schlüssel für k. Die einzige Möglichkeit, wie sich ein RWert wiederholen kann, ist, wenn ker auch gleich ist. Da es ksich um eine 256-Bit-Zahl handelt, die vollständig zufällig ausgewählt werden soll, ksollte sie nicht wiederholt werden, es sei denn, der Zufallszahlengenerator ist defekt.

Wenn man bedenkt, dass dies kzum Zeitpunkt der Unterzeichnung generiert wird und zufällig sein sollte, können wir daraus schließen, dass derjenige, der sich kfür diese Transaktionen entschieden hat, einen fehlerhaften Zufallszahlengenerator hat, der entweder einen festen Wert oder einen kleinen Wert ausgibt, der die Wahrscheinlichkeit einer kWiederholung erhöht. Es gibt keinen triftigen Grund dafür, also kommt dieser Fehler entweder von einem fehlerhaften RNG oder einem völligen Missverständnis der Funktionsweise von ECDSA.

Weil r nur von der Zufallszahl k abhängt (zusätzlich zu den Kurvenparametern) und die Wiederverwendung von k, solange die privaten Schlüssel unterschiedlich sind, in Ordnung ist.

Weiterführende Literatur: https://www.maximintegrated.com/en/app-notes/index.mvp/id/5767

K ist die Zufallszahl, die beim Signieren verwendet wird, deren einzige Anforderung darin besteht, nicht für denselben privaten Schlüssel wiederverwendet zu werden ( bitcoin.stackexchange.com/questions/35848 andernfalls), sondern seit langem deterministisch mit RFC6979 generiert wird. K ist nicht der Schlüssel.
Die Nonce muss auch absolut zufällig sein, niemandem bekannt sein und auch nicht wiederverwendet werden.
(Entschuldigung, dass ich die ersten beiden vergessen habe), aber ich sehe kein Risiko, das durch die Wiederverwendung von Nonce für verschiedene private Schlüssel verursacht wird.
Solange Sie niemals dieselbe Nachricht zweimal unterschreiben, ja, aber Sie wären ein kompletter Clown, wenn Sie Systeme entwickeln würden, die auf dieser Annahme basieren. Eine einzelne Nonce zu speichern und sie für mehrere Nachrichten zu verwenden, wäre Wahnsinn.
Wenn Sie dasselbe kfür zwei Signaturen mit privaten Schlüsseln wiederverwenden, die unter Verwendung eines gemeinsamen BIP32-Vorfahren abgeleitet werden, und der Angreifer den xpub kennt, kann er den xprv berechnen. Wirklich, niemals k wiederverwenden.