Kann Bitcoin-Skripting für Double-Spending-Angriffe verwendet werden?

Eine Standard-Bitcoin-Transaktion hinterlegt Coins in einer Adresse und gibt dann unter Verwendung der Skriptsprache von Bitcoin an, dass jeder, der diese Ausgabe ausgeben möchte, im Besitz des privaten Schlüssels sein muss, der dieser Adresse entspricht.

Es ist jedoch möglich, von dieser Basisvorlage abzuweichen, um komplexere Transaktionen zu erstellen, bei denen andere Bedingungen erfüllt sein müssen, um die Transaktionsausgabe auszugeben.

Ist es möglich, eine Transaktion zu erstellen, bei der eine Summe auf eine Adresse eingezahlt wird, aber nur der Besitzer eines anderen privaten Schlüssels diese ausgeben darf? Ich bin kein Bitcoin-Scripting-Experte, aber das sieht zumindest möglich aus.

Kann in diesem Fall eine solche konstruierte Transaktion verwendet werden, um einen Double-Spending-Angriff zu starten, bei dem Adresse A die Summe X an Adresse B sendet, aber nach Abschluss der Transaktion Adresse A das Eigentum an der Summe behält und sie an eine andere Stelle senden kann, während Adresse B kann eigentlich nichts dagegen tun, auch wenn die Summe seinem Guthaben gutgeschrieben wird?

Wie würde eine Standard-Wallet eine solche Transaktion behandeln? Würde es überhaupt erkennen, dass etwas Seltsames vor sich geht, oder würde es blind anzeigen, dass X BTC die Adresse B eingegeben hat, unabhängig vom Transaktionsskript?


Bearbeiten:

Entschuldigung, ich wurde dadurch in die Irre geführt, wie Websites wie blockchain.info Transaktionen anzeigen: Eine Transaktion enthält eigentlich keine "Ausgabeadresse", sie enthält nur Ausgaben, die die Bedingungen angeben, die erforderlich sind, um sie auszugeben; die "Ausgabeadresse" wird berechnet, indem geprüft wird, welche Signatur der Adresse vom Ausgabeskript angefordert wird; Daher ist es unmöglich, "Geld an Adresse B zu senden", ohne die Adresse B tatsächlich in das Ausgabeskript aufzunehmen.

Es bleibt jedoch etwas die Frage: Könnte eine Transaktion so gestaltet werden, dass eine Brieftasche dazu gebracht wird, ihrem Benutzer zu sagen: „Ich habe X BTC erhalten“, während jemand anderes die Summe tatsächlich mit einem anderen privaten Schlüssel beanspruchen kann?

Bitte beachten Sie, dass die Transaktion, wie ich sie beschrieben habe, so gestaltet ist, dass B überhaupt kein Recht hat , die Summe auszugeben; eine komplexere Transaktion könnte es stattdessen sowohl B als auch A ermöglichen, sie auszugeben.
Ich dachte, für jede einzelne Transaktion wird ein Schlüssel generiert. Wenn also A oder B Doubke für diese Summe ausgeben, muss es eine völlig andere sein und vom Ursprungskonto abgebucht werden
Ok, das würde nicht funktionieren (siehe Bearbeiten). Aber vielleicht wäre etwas anderes...

Antworten (2)

Was Sie beschreiben, ist ein Widerspruch der Begriffe. Wenn ein Geldbetrag auf eine Adresse eingezahlt wird, bedeutet dies, dass nur der private Schlüssel dieser Adresse das Geld ausgeben kann.

Vielleicht könnten Sie eine nicht standardmäßige Transaktion erstellen und den Leuten sagen, dass sie dem Besitzer der Adresse B die Erlaubnis gibt, sie auszugeben, aber wenn die Leute sich die Transaktion genau genug ansehen, können sie erkennen, dass es sich wirklich um Adresse C (und nicht B) handelt. s Besitzer, der es ausgeben kann. Daran führt kein Weg vorbei: Die Transaktionsausgabe ist öffentlich, ebenso wie die Implementierung ihrer Funktionsweise.

Wenn also die Frage lautet: Können Sie Software X mit einer nicht standardmäßigen Transaktion täuschen? Vielleicht würde es davon abhängen, einen Fehler (oder eine andere nicht ideale Situation) in der fraglichen Software zu finden. (Wenn Sie zum Beispiel eine Transaktion erstellen, die von Adresse B oder C ausgegeben werden kann, wird die Brieftasche, die B besitzt, vielleicht sagen, dass sie das Guthaben hat, und wenn er es nicht erneut überweist, bevor Sie es tun, dann können Sie „zurückstehlen“. " das Geld auf diese Weise) Ich würde jedoch alle nicht standardmäßigen Transaktionen als höchst verdächtig behandeln.

Einverstanden (siehe Bearbeiten). Es stellt sich jedoch die Frage: Wie reagieren Kunden auf nicht standardmäßige Transaktionen? Wie geht z. B. der Referenzkunde von „Ausgabeskript einer Transaktion“ zu „Hey, Sie haben gerade 42 BTC erhalten“? Kann man sich mit sowas austricksen?

Nein, Sie werden den Standard-Client damit nicht täuschen. Wenn es das Skript nicht vollständig versteht (dh es handelt sich um ein Nicht-Standard-Skript), versucht es nicht, es teilweise oder so weiter zu analysieren. Das Verfahren ist einfach: Wenn der Client das Skript nicht vollständig verstehen kann, wird es einfach ignoriert. Zeitraum.

Irgendeine Referenz dafür? Welche Arten von Transaktionen gelten als „Standard“? Wer entscheidet, ob es sich bei einer Transaktion um eine Standardtransaktion handelt? Wie können Sie sogar eine nicht standardmäßige Transaktion in die Blockchain schürfen, wenn die Referenzsoftware sie einfach ignoriert?
Es gibt ein Protokoll und dann gibt es die Referenzimplementierung und auch andere Implementierungen. Das Protokoll ist zwar stabil, die Implementierungen jedoch nicht, und einige Funktionen werden in einigen Clients schneller übernommen. Dasselbe gilt für die Richtlinie, sich auf trx zu verlassen – verschiedene Implementierungen haben leicht unterschiedliche Regeln, wenn es um Entscheidungen über das Vertrauen auf trx geht. Was ein „Standard“-Skript ist, hängt vom Client ab, aber im Allgemeinen ist es ein Skript, das einen gültigen öffentlichen Schlüssel und eine Signatur erfordert. Mehr Infos hier .
siehe github.com/bitcoin/bitcoin/blob/… (Funktionslöser) - selbst wenn Sie keine Programmierkenntnisse haben, sollten diese vier Zeilen klar genug sein und sie enthalten die vier Standardtransaktionen. Die zukünftigen Bitcoin-Versionen werden zulassen, dass alle anderen TXs Standard sind ( bitcoin.stackexchange.com/questions/28181/… ), aber dennoch – die Clients/Wallets sehen sich den gesamten TX an, um die Bitcoin-Adresse zu berechnen.