Signieren von Daten mit ECDSA

Ich habe in diesem Artikel über die Mathematik hinter Bitcoins gelesen , und eine Sache, um die ich mich nicht kümmern kann, ist, wie der besagte Algorithmus verwendet wird, um „Daten“ zu signieren. Was genau sind diese "Daten"? Ist es mein Bitcoin? Wenn ja, wie genau wird ein Bitcoin in Daten dargestellt? Angenommen, ich habe 5 Bitcoins in meiner Coinbase-Brieftasche, die ich meinem Freund schicken möchte. Wie würde sich das auf den gesamten Prozess „Erlangen des privaten Schlüssels und Signieren Ihrer Daten damit“ übertragen, wie im Artikel beschrieben?

Entschuldigung, wenn dies eine zu unerfahrene Frage ist, ich bin neu in Kryptographiekonzepten. Vielen Dank im Voraus!

Antworten (2)

Jeder heute existierende Bitcoin existiert als nicht ausgegebener Transaktionsoutput (UTXO) in der Bitcoin-Blockchain. Das heißt, die Ausgabe einer bestehenden bestätigten Transaktion, die noch nicht als Eingabe einer anderen Transaktion verbraucht wurde.

Coinbase hat eine Sammlung von UTXOs, die die Bitcoins darstellen, die sie besitzen. Wenn Sie Coinbase anweisen, eine Bitcoin-Zahlung an jemanden aus Ihrer Brieftasche zu leisten, wählt dieser einen oder mehrere dieser UTXOs aus, mit denen er die Zahlung tätigt.

Sie bilden dann einen Datenblock, der diese UTXOs beansprucht und einen neuen UTXO erstellt, der die Bitcoins an den Empfänger gibt, und einen, der ihnen das Wechselgeld zurückgibt. Es ist dieser Datenblock, den sie mit dem Schlüssel für jeden UTXO signieren, den sie mit dieser Zahlung ausgeben.

Sobald die Transaktion bestätigt ist, ist das neue UTXO für den Empfänger die Bitcoins, die Sie ihm gesendet haben. Wenn sie sehen, dass UTXO in der Blockchain erscheint, wissen sie, dass Sie sie bezahlt haben. Sie können dann eine Transaktion bilden, die diesen UTXO ausgibt, um diese Bitcoins an jemand anderen zu übertragen.

A coinwird durch 3 Dinge beschrieben.

  • Der Endpunkt: der txidund Ausgabeindex in der erstellenden Transaktion. Identifiziert ausgegebene Coins explizit
  • Die Summe
  • Das scriptPubKey

Um eine Münze auszugeben, erstellen Sie eine Transaktion, in der Sie den Endpunkt als Eingabe angeben. Sie geben einige Ziele an (bekannt als Ausgaben). Sie scriptPubKeymüssen häufig eine Unterschrift leisten, die die Ausgaben authentifiziert.

ECDSA gibt an, zu nehmen h = H(m) mod n, wobei H(m) ein Hash-Algorithmus ist, und diese Daten zu verwenden, um eine Signatur durch einen privaten Schlüssel zu berechnen. Ihre Frage ist, was ist m?

m(die Daten, die signiert werden) ist eine Transaktion, die gemäß SIGHASH-Flags serialisiert ist, die bestimmen, welche Teile in der Signatur festgelegt werden.

  • SIGHASH_ALL schreibt die gesamte Transaktion als „Daten“ fest, wenn sich also eine dieser Daten ändert (jemand fügt eine Eingabe hinzu oder ändert ein Ziel), wird die Signatur ungültig.
  • SIGHASH_NONE erfasst alles außer den Ausgaben (die Größe des Ausgabeindex wird auf Null geändert). Dadurch wird sichergestellt, dass die Signatur gültig ist, solange die Eingaben gleich bleiben. Die Ausgänge können beliebig verändert werden.
  • SIGHASH_SINGLE erfasst eine Eingabe und eine Ausgabe. Alles andere kann sich ändern, ohne dass die Signatur ungültig wird.
  • SIGHASH_ANYONECANPAY kann zusätzlich zu den anderen Sighash-Typen angewendet werden. Nur eine Eingabe ist signiert (Ihre) und die Ausgaben.

Die SIGHASH-Flags werden an die Signatur angehängt, was es anderen ermöglicht, den Vorgang zu wiederholen, der beim Signieren durchgeführt wurde.

Es gibt noch einige weitere Modifikationen: - Eingabeskripte werden auf Null gesetzt, da Signaturen sich nicht selbst signieren können. - das txout.scriptPubKeywird als das txin.scriptSigfür dieses vin hinzugefügt (der Teil seit dem letzten OP_CODESEPARATOR) - ganz am Ende hashTypeCodewird das (4-Byte-Seufzer-Flag) angehängt

Weitere Einzelheiten zu diesem Vorgang finden Sie auf dieser Seite und dem Bild: https://en.bitcoin.it/wiki/OP_CHECKSIG

Der getrennte Zeuge enthält eine Änderung der Art und Weise, wie mer abgeleitet wird. Siehe BIP 143: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki