Wie funktioniert die Signaturüberprüfungsfunktion in bitcoin-qt ohne öffentlichen Schlüssel?

bitcoin-qtverfügt über eine Funktion zur "Signaturüberprüfung", mit der Sie eine signierte Nachricht überprüfen können. Alles, was es braucht, ist die Bitcoin-Adresse des Unterzeichners, die Nachricht und eine kurze Signatur. Soweit ich über digitale Signaturen verstehe, benötigen Sie den öffentlichen Schlüssel, um eine Signatur zu überprüfen. Eine Bitcoin-Adresse ist nur ein Hash des öffentlichen Schlüssels. Der öffentliche Schlüssel kann in der Blockchain sein, aber das wäre nur dann der Fall, wenn die Adresse bereits mindestens einen Ausgang beansprucht hätte. Wenn sie keine Ausgaben beansprucht haben, wie kann die Signatur verifiziert werden?

crypto.stackexchange.com/a/18106/7243 bietet eine bessere Antwort als die hier gegebene.

Antworten (2)

Der öffentliche ECDSA-Schlüssel kann aus der Signatur wiederhergestellt werden.

Siehe diesen Bitcointalk-Thread und das verlinkte PDF für Details.

Die in diesem Prozess erstellten Signaturen enthalten mehr Metadaten als gewöhnlich, um die Wiederherstellung öffentlicher Schlüssel zu unterstützen. Es enthält Wiederherstellungsflags (eine 8-Bit-Ganzzahl), die kodieren, ob der öffentliche Schlüssel komprimiert wurde, und eine bestimmte Wiederherstellungs-ID.

Wie das Secc-PDF http://www.secg.org/sec1-v2.pdf zeigt (Seite 47), können Sie bei gegebenem (r, s) einen Satz wahrscheinlicher öffentlicher Schlüssel wiederherstellen. Die Wiederherstellungs-ID macht dies zu einer eindeutigen Ableitung des korrekten öffentlichen Schlüssels.

Es ist auch wichtig, ob der öffentliche Schlüssel komprimiert ist. Bitcoin-Signaturen werden durch eine Adresse verifiziert, nicht durch einen öffentlichen Schlüssel!

Ihre Signatur sieht so aus: [32 Bytes von r] [32 Bytes von s] [recoveryFlags] und ist normalerweise base64-codiert.

Mit einer dieser Signaturen und einer Bitcoin-Adresse funktioniert die Verifizierung wie folgt:

  • Erzeugen des öffentlichen Schlüssels
  • richtig codieren (Komprimierung)
  • Hashing des Ergebnisses
  • Vergleichen Sie den Hash mit dem Hash, der aus der angegebenen Bitcoin-Adresse extrahiert wurde.