Wie wird eine Transaktion vor Manipulation geschützt, bevor sie in einen Block aufgenommen wird?

Verwenden der Terminologie von: https://en.bitcoin.it/wiki/Protocol_specification#tx

Was hindert einen Angreifer, der einen Rogue-Client betreibt, daran, tx_out[] einer Transaktion durch Werte zu ersetzen, die dem Angreifer die Ausgabe der Transaktion zuweisen?

Das tx_in[] ist unverändert (und vermutlich gültig), aber die Ausgaben kommen jetzt dem Angreifer zugute.

Ein neuer Hash kann dann vom Rogue-Client mithilfe der inv-Nachricht berechnet und angekündigt werden.

Wenn nichts dies verhindert, wie verhindert das Bitcoin-Netzwerk, dass diese betrügerische Transaktion in einen Block aufgenommen wird?


[Ich muss an dieser Stelle sowieso nichts kommentieren]

Danke David, das hat mein [Miss-]Verständnis der Dokumentation unter:

https://en.bitcoin.it/wiki/Script#Crypto

Die OP_CHECKSIG-Beschreibung sagt teilweise:

Die Ausgaben, Eingaben und das Skript der gesamten Transaktion (vom zuletzt ausgeführten OP_CODESEPARATOR bis zum Ende) werden gehasht.

Ich dachte, "die gesamte Transaktion" sei die vorhergehende Transaktion, nicht die Einlösungstransaktion, die wie von Ihnen beschrieben unterzeichnet wurde.

Nochmals vielen Dank, dass Sie mir geholfen haben.

Antworten (1)

Die gesamte Transaktion (mit Ausnahme der Signaturen) muss für jede beanspruchte Transaktionsausgabe mit dem entsprechenden Schlüssel signiert werden. Manipulationen an einem der Ausgänge machen alle Signaturen ungültig.

Wie wäre es, wenn Sie einfach einen OP_CODESEPARATOR direkt am Anfang einer Ausgabe hinzufügen? Nichts würde sich wirklich ändern, aber der Transaktions-Hash, der signierte Wert wäre genau derselbe.