Wie werden Transaktionen nur mit der Bitcoin-Adresse und nicht mit dem öffentlichen Schlüssel verifiziert?

Ich verstehe, wie asymmetrische Kryptosysteme und digitale Signaturen funktionieren:

Sie generieren ein Paar (privater Schlüssel, öffentlicher Schlüssel). Sie teilen niemals den privaten Schlüssel, Sie machen den öffentlichen Schlüssel ... nun, öffentlich.

Sie haben eine Reihe von Funktionen:

  • verschlüsseln (öffentlicher Schlüssel, Klartext) = verschlüsselter Text
  • entschlüsseln (privater Schlüssel, verschlüsselter Text) = Klartext
  • sign(privater Schlüssel, Klartext) = signierter Text
  • verify_signature(öffentlicher Schlüssel, signierter Text) = is_signature_valid_bool

In Bitcoin sind die Adressen jedoch gehashte Versionen des öffentlichen Schlüssels. Es gibt keine Möglichkeit, das Hashing rückgängig zu machen. Daher bin ich mir nicht sicher, wie Transaktionen überprüft werden.

Ich denke, die Frage ist dann, was tatsächlich an wen übertragen / gespeichert wird, wenn ich eine Transaktion durchführen möchte. Ich nahm an:

  • Geben Sie Bitcoin-Adressen ein
  • Bitcoin-Adressen ausgeben
  • Signatur der Transaktion mit allen privaten Schlüsseln der Eingabeadresse (ich denke in der Reihenfolge der Eingaben)

... aber dann sehe ich nicht, wie die Validierung durchgeführt wird. Ich gehe also davon aus, dass Sie Ihre öffentlichen Schlüssel beim Erstellen einer Transaktion gesendet haben. Dies würde erklären, warum Sie keine Adresse erneut verwenden sollten, nachdem Sie Geld dafür ausgegeben haben. Der Punkt, der mich verwirrt, ist, dass ich hier keine öffentlichen Schlüssel sehe

Die nächste Unklarheit ist die Reihenfolge. Gibt es eine implizite Reihenfolge, in der die Signaturen angebracht werden müssen? Ich nahm an, dass dies mit Script geschehen würde , aber ich sehe dies nicht im Block-Explorer.

Kann jemand etwas Licht ins Dunkel bringen?

Nicht-Antworten

Antworten (2)

Wenn Sie von einer Bitcoin-Adresse ausgeben, enthält Ihre Transaktion sowohl den öffentlichen Schlüssel, der der gehashten Adresse entspricht, von der Sie ausgeben möchten, als auch eine Signatur, die mit diesem öffentlichen Schlüssel verifiziert werden kann.

Ihr Link führt zu einem Block, der selbst nicht signiert ist. Schauen wir uns jedoch eine Transaktion aus Ihrem Block an: https://www.blockchain.com/btc/tx/b8f925d09c647904e428d902c8404fc91e5dbe53773b82d717cf13374785ca20

Scrollen Sie nach unten zu „Eingaben“ und unter Sigscript 3045022100c89735ddbb5e231044610590c086d41f1e871067987087ed48e041f8999314830220011deba08ad9a67ddafe51dc530f3f60c8974373bf2f25953a89c139d238216201befindet sich die ECDSA-Signatur und 023aa5b3f24a2b8fc8f64b69ba383b148892deef94cf060288cc99e81be0f9722eder öffentliche Schlüssel, der der Adresse entspricht.

Eine Bitcoin-Transaktion erzeugt Ausgaben, die später als Eingabe für eine neue Transaktion verwendet werden können. Jede Ausgabe wird an eine sogenannte gesperrt scriptpubkey, die im Grunde das kryptografische Rätsel aufstellt, das erfüllt werden muss (dh zurückgeben, truewenn es ausgeführt wird), damit diese Münzen ausgegeben werden können. Jede Transaktion, die diese Münzen ausgibt, muss ein scriptsig(Freischalt-Skript) bereitstellen, das dieses Rätsel erfüllt.

Wenn Sie also beispielsweise eine Transaktion erstellen, die an eine „Pay-to-Public-Key-Hash“ (P2PKH)-Bitcoin-Adresse zahlt, ist der mit der Adresse verbundene Pubkey dem Netzwerk nicht bekannt. Aber wenn diese Ausgabe später als Eingabe für eine neue Transaktion verwendet wird, würde das Skriptsig, das diese Münzen freischaltet, den Pubkey neben einer gültigen Signatur enthalten, und somit können Netzwerkknoten überprüfen, ob der rechtmäßige Eigentümer dieser Münzen dies tut ausgeben (indem der bereitgestellte Pubkey gehasht wird und überprüft wird, ob die Hash-Ausgabe mit der Bitcoin-Adresse übereinstimmt, an die die Coins gebunden sind).


Zur Bestellung von Unterschriften hier ein paar Fragen/Antworten mit guten Details:

Was genau wird in einer Segwit-Transaktion gehasht und signiert?

Schritt-für-Schritt-Beispiel zum Einlösen einer Rohtransaktion erforderlich

Wie löse ich einen Basis-Tx ein?

Wie signiere ich eine SegWit-Transaktion über NBitcoin?

Was ist der Signatur-Digest für Segwit-Ausgaben?


Andere relevante Fragen, die ich gefunden habe:

Wie funktionieren Skripte?

Was ist die Beziehung zwischen scriptSig und scriptPubKey?