Wie überprüft Bitcoin die Signatur, wenn Adressen in eine Richtung gehasht werden?

Ich stecke fest, um die Transaktionen von Bitcoin zu verstehen. Der Eigentümer muss also die Transaktion mit seinem privaten Schlüssel signieren, dann können Miner überprüfen, ob diese Signatur mit seinem öffentlichen Schlüssel übereinstimmt. Der öffentliche Schlüssel wird jedoch mit drei Funktionen (RIPEMD160, SHA256 und Base58) gehasht, und es ist unmöglich, den ursprünglichen öffentlichen ECDSA-Schlüssel von der Adresse zu erhalten. Wie funktioniert die Transaktionsverifizierung eigentlich?

Antworten (1)

Der öffentliche ECDSA-Schlüssel ist in der neuen Transaktion "enthalten" (Teil der scriptSig).

Einzelheiten

Dies ist eine Beispielausgabe einer Transaktion (nur der Hash des Pubkeys ist verfügbar) :

"scriptPubKey": {
    "asm": "OP_DUP OP_HASH160 059be22aadc3bef6b673cb7a16247a0b7403d943 OP_EQUALVERIFY OP_CHECKSIG",
    "hex": "76a914059be22aadc3bef6b673cb7a16247a0b7403d94388ac",
    "reqSigs": 1,
    "type": "pubkeyhash",
    "addresses": [
      "mg2cQz9Y3ugyjfq8b2wTcW4veemgTBKxkX"
    ]
  }

Der Pubkey von der obigen Adresse ist 03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf(aber er ist in der Blockchain nicht sichtbar, bis die Ausgabe ausgegeben wird. Nur der Empfänger der obigen Ausgabe kennt ihn.)

Die Verwendung dieser Ausgabe als Eingabe in einer späteren Transaktion führt zu:

"scriptSig": {
            "asm": "304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d[ALL]03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf",
            "hex": "47304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d012103788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf"
          },
  • ( 3044... ist die DER-codierte ECDSA-Signatur)
  • ( 03788... ist der Pubkey)
Wie wird es entschlüsselt? Ist SHA256 nicht nur in eine Richtung?
SHA256 ist eine Einweg-Hash-Funktion. Ja. Sie können einen Public-Key-Hash nicht in einen Public-Key dekodieren. Nur der Empfänger der Coins hat den entsprechenden öffentlichen Schlüssel (in seinem Wallet). Es ist keine "Entschlüsselung" erforderlich.
Bedeutet dies, dass der Empfänger den öffentlichen Schlüssel besitzt? Aber das erklärt nicht, warum andere Leute die Signatur des Absenders nicht imitieren können, wenn sein öffentlicher Schlüssel unbekannt ist ...
Ich glaube, ich habe es jetzt verstanden. Für die Eingabe enthält die ScriptSig also sowohl den ungehashten Pubkey als auch die Signatur des Absenders, und die Ausgabe enthält die Adresse des Empfängers, richtig?
Rechts. Input = Pubkey exponieren (nicht mehr relevant)
Ausgabe = hash(pubkey) (niemand kennt den Pubkey außer dem Empfänger)