Nachweis des Adressbesitzes

Diese Frage erscheint oft auf SO, aber es gibt etwas in den Antworten, die ich nicht bekomme.

Ich entwerfe ein System, das auf API-Aufrufen an blockchain.info basiert, aber ich habe echte Probleme, die Beziehung zwischen Pubkey, Adresse und digitalen Signaturen für meinen Anwendungsfall zu verstehen.

Angenommen, Benutzer Jane hat zuvor Transaktionen mit Bitcoin durchgeführt, und wir gehen davon aus, dass die Transaktion in der Bitcoin-Blockchain bestätigt wurde. Jane fordert nun von ihrer App-basierten Wallet-Software einige Metadaten zu dieser bestimmten Transaktion über den Webservice des Systems an.

Der Webservice verlangt von Jane den Nachweis, dass ihre Brieftasche diese Transaktion wirklich initiiert hat, um ihr den Zugriff auf die Daten zu ermöglichen, aber hier werde ich etwas verschwommen: Nach all meinem Lesen in den letzten 6 oder 7 Tagen sammle ich die Brieftasche Software müsste eine vordefinierte Nachricht signieren, die z. B. die TXID enthält, mit dem privaten Schlüssel der Brieftasche, signieren und zusammen mit dem öffentlichen Schlüssel an das System senden, aber sobald das System die Daten erhält, kann es die Nachricht mit der Öffentlichkeit überprüfen Schlüssel, na und? Wie beweist das, dass die txid (oder Adresse oder was auch immer) in dieser signierten Nachricht mit demselben privaten Schlüssel signiert wurde, von dem die fragliche Transaktion indirekt abgeleitet ist? Mir fehlt ein Teil, der Remote-Blockchain-Daten mit den von der Wallet-App gesendeten Daten „abgleicht“.

Ich verstehe die grundlegende PKI und dass Adressen gehashte Ableitungen eines öffentlichen Schlüssels sind, aber der Teil der digitalen Signatur verwirrt mich.

Danke fürs Lesen. Jede Hilfe wäre sehr willkommen.

Gibt es einen bestimmten Grund, warum Sie es so kompliziert und klobig machen? Gibt es einen Grund, warum Sie es nicht viel einfacher machen können? Warum zum Beispiel Jane nicht nur für sie an eine bestimmte Adresse bezahlen lassen, die alles, was sie gekauft hat, an ihr Konto oder an einen anderen Berechtigungsnachweis bindet?
Das System, das ich aufbauen möchte, bezieht sich auf Metadaten über eine BTC-Transaktion, von denen fast keine über die öffentliche Blockchain verfügbar sind, sie werden schließlich vom System generiert. Ich frage mich nur, wie das System als Drittanbieter am besten feststellen kann, dass eine Software-Wallet-App wirklich an einer bestimmten BTC-Transaktion teilgenommen hat, auf die sich die Metadaten beziehen. So dass nur diese Brieftasche Zugriff auf die Daten haben kann.

Antworten (1)

Ich habe für dieses Beispiel eine zufällige Transaktion geöffnet: https://blockchain.info/tx/c929454d6c83c15ecd9931c005a5a7fbacb1faba69f0a49538ab334d2848c5a1

Eingabeskripte:

ScriptSig:
PUSHDATA(72)[3045022100eb1d36c6fe6c201e5594d90a7bdc73dd9a33d291e7e58ba74fec46ab2139c9c602207a7124819f9a004a36a0a2ac494603cfeecf38b8c12b3c6e3ff6dea74053706101]
PUSHDATA(33)[033f2223c8f6b74e75e4afd05811b8c9f55c8584abef768336e6ad61d931bef548] 

Der erste Hex-Wert ist die Signatur der Transaktion. Der zweite Wert ist der öffentliche Schlüssel (Punkt der elliptischen Kurve). Und von diesem Wert können wir die Adresse ableiten.

Wenn Sie eine andere Signatur haben, die etwas signiert, und diese Signatur den gleichen öffentlichen Schlüssel hat, beweist das, dass dies derselbe Typ ist, der die Transaktion durchgeführt hat. Nur wer einen privaten Schlüssel hat, kann etwas signieren.

Elliptische Kryptographie funktioniert auf die nächste Weise: Wir wählen eine Zufallszahl, und dies wird der private Schlüssel sein. Dann multiplizieren wir diese Zahl und den EC-Punkt namens Generator und erhalten den öffentlichen Schlüssel.

Danke, das hilft. Also liege ich richtig, dass für die oben beschriebene "Anwendung" ("Abgleichen" oder "Verknüpfen" von 1 oder N tx-Eingabeadressen, die von einer Wallet-App an die Anwendung gesendet werden), dass es 1 sein sollte). Fordern Sie an, dass Janes Brieftasche einige Daten signiert 2). Fordern Sie an, dass die resultierende Signatur und der Pubkey gesendet werden 3). Überprüfen Sie, ob das signierte Dokument die erwarteten Daten enthält, indem Sie es mit dem bereitgestellten Pubkey entschlüsseln und 4). Wenn verifiziert, den Pubkey mit dem in der gewünschten Blockchain-Transaktion verwendeten vergleichen, um „Eigentum“ zu behaupten?
Für Schritt 3. Mit Signaturen können Sie nichts entschlüsseln. Der öffentliche Schlüssel wird zur Verifizierung verwendet. Das Überprüfungsverfahren kann 2 Werte zurückgeben: Signatur ist gültig oder nicht. Es akzeptiert 2 Parameter: öffentlicher Schlüssel und Daten. Daten sollen gehasht und dann verifiziert werden.
Richtig, so wird der Prozess also: 1). Rohdaten unterzeichnen 2). Senden Sie sig + Hash-Daten + Pubkey 3). Verifizieren? Aber was mir noch fehlt (sorry!), ist, wie die Off-Chain-„Verifizierung“ willkürlicher Daten beweist, dass der Prikey des Absenders verwendet wurde, um die Nachricht zu hashen, und in einen bestimmten Blockchain-TX verwickelt ist. Ich nehme an, sobald die Überprüfung des Nachrichten-Hashs selbst abgeschlossen ist, könnte das System die Blockchain auf einen TX mit dieser/diesen Pubkey-Eingabe(n) überprüfen, aber der Pubkey unterscheidet sich für jede TX-Eingabe, wäre es also nicht auch anders für dieses Off-Chain-Verfahren auch?
Die "Verifizierung" beliebiger Daten beweist, dass der Prikey des Absenders zum Hashen der Nachricht verwendet wurde - der Prikey wird zum Signieren des Hashs verwendet, nicht zum Hashen der Nachricht. Sie haben Recht, Sie können nichts außerhalb der Kette überprüfen. Sie müssen sicher sein, dass sich bestimmte Transaktionen innerhalb der Blockchain befinden. Der öffentliche Schlüssel in der TX-Eingabe bedeutet, dass Bitcoins von einer Adresse stammen, und Ihr Überprüfungsverfahren bestätigt, dass der Mann, dem diese Adresse gehört, eine Nachricht signiert hat.
Ich verstehe, dass Adressen von Pubkeys abgeleitet werden. Was ich nicht verstehe, ist, wie sich eine Signatur als Teil dieses Off-Chain-Prozesses auf einen Pubkey, eine Adresse oder irgendetwas anderes in der Kette bezieht.
Die Signatur wird mit dem privaten Schlüssel erstellt, der öffentliche Schlüssel und die Adresse werden ebenfalls mit dem privaten Schlüssel erstellt.