Dies ist mein Verständnis davon, wie eine Transaktion aussieht:
inputs:
input0:
txid: <funding tx0 TXID>
outputID: <output ID of UTXO in the funding tx0>
scriptSig: <pkhash_redeemer> <sig0_redeemer>
input1:
txid: <funding tx1 TXID>
outputID: <output ID of UTXO in the funding tx1>
scriptSig: <pkhash_redeemer> <sig1_redeemer>
...
outputs:
output0:
scriptPK: <scriptPK for new UTXO>
amount: <amount for new UTXO>
Wo die Signatur <sig_redeemer0>
vorbei ist:
<funding tx0 TXID>
<output ID of UTXO in the funding tx0>
<scriptPK for new UTXO>
<amount for new UTXO>
Ich habe viel gelesen, was in etwa so lautet: "Die Signatur gilt für die gesamte Transaktion" oder "Die Signatur signiert alle Ein- und Ausgänge". Es gibt jedoch ein paar Punkte, die mich verwirren:
Erfordern mehrere Eingaben mehrere Unterschriften? Oder ist mein Beispiel falsch?
Warum müssen wir die Eingaben der Transaktion signieren?
Wenn die Eingaben nicht signiert sind, bedeutet dies, dass Folgendes nicht signiert bleibt:
txid
der Finanzierungstransaktion<output ID of UTXO in the funding tx>
Sind alle Ausgaben signiert, stehen die Beträge und scriptPubKeys aller UTXOs aus Funding-Transaktionen fest. Ein Angreifer kann möglicherweise die Eingaben in den einlösenden TX ändern, sie können jedoch nur entsperrt werden, wenn die Eingaben gleich bleiben, sodass ein Angreifer keine willkürliche Eingabe verwenden kann.
Jede Hilfe wäre willkommen! Danke
Es kann mehrere Utxos geben, die dasselbe Skript entsperren würde. Das häufigste Beispiel sind zwei Transaktionen, die beide dieselbe Adresse bezahlen. Wenn Eingaben nicht signiert wären, könnte ein Angreifer einen Eingabe-Utxo durch einen anderen Utxo ersetzen, der dieselbe Adresse zahlt, und das wäre schlecht.
Betrachten Sie das folgende Szenario. Alice hat zwei Zahlungen an ihre Adresse 1Alice erhalten, beide in Höhe von 1 BTC: eine mit txid 234abc in Höhe von 1 BTC, und eine weitere mit txid 567def. Sie möchte 0,5 BTC an Bob zahlen, also erstellt und signiert sie eine Transaktion mit dem 234abc utxo als Eingabe und den folgenden Ausgaben: 0,5 BTC an die Adresse 1Bob und 0,4999 BTC an eine "Wechsel"-Adresse, 1AliceChange. (Dadurch bleibt eine Transaktionsgebühr von 0,0001 BTC.)
Nachdem diese Transaktion gesendet und bestätigt wurde, ändert Bob die Transaktion, sodass die Eingabe stattdessen 567def ist. Die scriptSig funktioniert gleich gut für jede Transaktion, die 1Alice bezahlt (sie haben alle den gleichen scriptPubKey), also ist diese neue Transaktion auch gültig. Bob sendet es und stiehlt effektiv zusätzliche 0,5 BTC von Alice, die sie ihm nie geben wollte.
Dies funktioniert nur, solange 567def denselben oder einen höheren Wert als 234abc hat, aber das ist keine große Einschränkung. (Wenn 567def einen höheren Wert hat, sagen wir 10 BTC, dann gibt Bobs neue Transaktion immer noch nur 0,4999 BTC an 1AliceChange zurück, also hat es effektiv eine Transaktionsgebühr von 9,0001 BTC. Jeder Miner würde diese Transaktion sehr gerne bestätigen; tatsächlich, vielleicht a Miner wird diesen Angriff ausführen, auch wenn Bob das nicht möchte.)
Nate Eldredge
acnalb
Nate Eldredge