In vielen Kryptowährungen besteht ein TX aus einer Reihe von TX-Eingängen und TX-Ausgängen.
Wenn ein TX an das Netzwerk gesendet wird, hat es bereits die Signatur (im Entsperrskript).
Meine Frage ist also, was einen Miner oder irgendjemanden im Netzwerk daran hindert, die bereits vorhandene Entsperrung zu verwenden und die Sperrskripte der Transaktionen zu ändern und dann die Transaktion zu verbreiten.
Denn nach meinem Verständnis kann ich eine Signatur bereitstellen, um einen Txo zu entsperren, und jemand verwendet meine Signatur, um die Sperrskripte dieser TXs zu ändern.
Signaturen decken Ein- und Ausgänge ab.
Ändert jemand eine der Ausgaben in einer Transaktion, ist eine neue Signatur erforderlich. Effektiv unterschreibt Ihre Unterschrift "die Verwendung meines UTXO X zum Senden von A BTC an B, C BTC an D, ...".
Denn nach meinem Verständnis kann ich eine Signatur bereitstellen, um einen Txo zu entsperren, und jemand verwendet meine Signatur, um die Sperrskripte dieser TXs zu ändern.
Bei einem "P2PKH tx" erfordert das Unlockscript einige Operationen, die ausgeführt werden müssen, während ein tx ausgegeben wird:
<sig><pubkey><OP_DUP><OP_HASH160>pk hash<OP_EQUALVERIFY><OP_CHECKSIG>
Ich habe hier drei Szenarien, wenn Teile der Skriptfelder geändert werden:
1.) ändern <sig>
und<pubkey>
ein Miner ändert das Teil mit einer neuen Signatur und einem neuen Pubkey. Unter der Annahme, dass der Block raelly "durchkommt", hat der Spender der Gelder ein Problem, weil seine nicht mehr mit dem Hash der übereinstimmen würden.
2.) nur die ändern<sig>
ein Miner ändert nur den Teil mit einer neuen Signatur. Jetzt würde der Spender mit dem Hash der übereinstimmen. Der letzte Befehl <OP_CHECKSIG>
würde jedoch die verbleibenden Teile auf dem Stapel prüfen ( <new sig><pubkey>
), und dies würde (offensichtlich) fehlschlagen.
3.) Ändern Sie das Pubkey-Skript
Wenn irgendetwas im Pubkey-Skript geändert wird, schlägt der Signaturprozess fehl. Während der Erstellung der signierten Transaktion wird der Bereich sigscipt mit dem Pubkey-Skript gefüllt und dann signiert. Später, vor dem Senden des tx, wird der sciptsig-Bereich durch ersetzt <signature><pubkey>
. Wenn der Block also an andere Knoten weitergegeben würde, würden sie diesen Block und seine tx-in-side verifizieren und eine Signatur-Nichtübereinstimmung entdecken.
Pieter erklärte hier Details des Skriptsig hier: Was sind die Teile eines Bitcoin-Transaktions-"Eingabe"-Skripts?
und zwei Referenzen, die weiter zum Verständnis beitragen:
1) http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html
2) Andreas' Buch „Mastering Bitcoin“, 2. Auflage, Seite 135ff
Wirbel
Pieter Wuille
Pieter Wuille
Wirbel
Pieter Wuille
Wirbel
Pieter Wuille