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.
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.
David Schwarz
Theruss