Eine Wallet-Wiederherstellung verstehen

Dies ist mein erster Beitrag zur Blockchain-bezogenen Programmierung, also entschuldigen Sie bitte meine Unwissenheit. Ich finde die Terminologie in den BIP32- und BIP39-Spezifikationen schwer verständlich, daher versuche ich hier, mein Verständnis zu bestätigen. Ich hoffe, jemand kann die Dinge für mich aufklären. Bitte korrigieren Sie mich, wenn ich das falsch verstehe. Hier geht.

Ich habe einen Trezor gekauft und meinen Seed mit dem Trezor generiert. Ich verstehe, dass dies eine Implementierung von BIP39 ist. Mein Verständnis ist, dass ich diesen Schlüssel auf einem Offline-Computer wie Tails Linux oder Bitkey.IO Live-CD generieren könnte, wenn ich Trezor nicht verwenden würde. Mein Verständnis ist, dass dies als Schlüssel für die Unterzeichnung von Transaktionen in der Zukunft dient. Dies erzeugt jedoch selbst keine Adressen in der Blockchain selbst.

Nachdem ich den Schlüssel erstellt hatte, generierte ich einige Adressen. Eine für Bitcoin, eine für Litecoin und so weiter. Auch hier wirkt sich das bloße Erstellen von Adressen in keiner Weise auf die Blockchain aus. Das einzige, was an diesen Adressen besonders ist, ist, dass die einzige Möglichkeit, diese Adressen zu erstellen, darin besteht, den Seed überhaupt zu haben. Ist dieses Verständnis richtig?

Danach kann Währung an die von mir erstellten Adressen gesendet werden. Das bedeutet, dass das Blockchain-Netzwerk akzeptieren muss, dass die Transaktionen getätigt wurden, und dann werden die Transaktionen mit allen anderen Knoten im Netzwerk synchronisiert, die schließlich für mich sichtbar sind, wenn ich die Adresse in der Software meines Trezors überprüfe.

Hier wird mein Verständnis etwas trübe. Es gibt auch einen sogenannten öffentlichen Schlüssel (xpub), mit dem ich die Details meiner Brieftasche und ihrer Transaktionen anzeigen kann, denke ich. Außerdem kann jeder, der die Adresse meiner Brieftasche hat, Transaktionen darin sehen, indem er die Blockchain abfragt.

Aber ohne den Seed kann niemand Münzen aus meinen Adressen transferieren. Der Seed wird dazu benötigt, um die Transaktionen zu signieren. Ist das richtig?

Nehmen wir an, mein Trezor ist verloren oder zerstört und alles, was ich noch habe, ist der Samen. Also kaufe ich einen neuen Trezor und stecke ihn ein. Ich möchte jetzt eine Wiederherstellung durchführen. Ich vermute also, dass es für die 24-Wort-Phrase wie ich sein wird. Rechts?

Was passiert an diesem Punkt? Ich habe keine Adressen oder XPUBs mehr aufgeschrieben, und ich brauche diese, um meine Salden zu sehen, bevor ich wieder Transaktionen unterzeichnen kann. Also, wie bekommt die Trezor-Software (oder andere deterministische Wallet-Software) meinen xpub und meine Adressen zurück?

Tun sie:

  1. Laden Sie die gesamte Blockkette auf meinen Computer herunter und überprüfen Sie jede Adresse, um zu sehen, ob sie von meinem ursprünglichen Seed gesät wurde?
  2. Irgendeine API getroffen? Wenn das so ist, wie? Sendet es meinen Seed an die API? Welche API? Unterhält Trezor eine Art Index von xpubs nach Seed? Ich würde nicht glauben, dass dies überhaupt sicher wäre und tatsächlich die Sicherheit des Systems vollständig aufheben würde.
  3. Ist in meinem Seed eine Art öffentlicher Schlüssel versteckt, der verwendet werden kann, um indizierte Adressen nachzuschlagen? Wenn ja, wie funktioniert das? Gibt es irgendwo eine C#-Bibliothek, mit der ich diesen öffentlichen Schlüssel aus meinem Seed extrahieren kann?
  4. Etwas anderes tun, an das ich nicht gedacht habe ... Was?

Edit: Ich lese das gerade durch. https://www.codeproject.com/Articles/784519/NBitcoin-How-to-scan-the-Blockchain . Es klingt so, als ob die Scanner-Klasse BIP37-Logik verwendet, um Daten aus der Blockkette herauszufiltern, um an die Adressen zu gelangen, die wahrscheinlich die Transaktionen enthalten, die ich sehen muss. Also, welche Eingaben braucht es, um dies zu tun? Kann ich etwas von meinem Seed ableiten, das sicher über eine API verwendet werden kann?

Von Mastering Bitcoin:

Erzeugen eines öffentlichen Schlüssels Ausgehend von einem privaten Schlüssel in Form einer zufällig generierten Zahl k multiplizieren wir ihn mit einem vorbestimmten Punkt auf der Kurve, dem sogenannten Generatorpunkt G, um einen anderen Punkt an einer anderen Stelle der Kurve zu erzeugen, der der entsprechende öffentliche Schlüssel ist K. Der Generatorpunkt wird als Teil des secp256k1-Standards spezifiziert und ist für alle Schlüssel in Bitcoin immer gleich.

K=k*G68

Dabei ist k der private Schlüssel, G der Generatorpunkt und K der resultierende öffentliche Schlüssel, ein Punkt auf der Kurve. Da der Erzeugerpunkt für alle Bitcoin-Nutzer immer gleich ist, ergibt ein privater Schlüssel k multipliziert mit G immer denselben öffentlichen Schlüssel K. Die Beziehung zwischen k und K ist fest, kann aber nur in eine Richtung berechnet werden, von k nach K. Deshalb kann eine Bitcoin-Adresse (abgeleitet von K) mit jedem geteilt werden und gibt den privaten Schlüssel des Benutzers (k) nicht preis.

Bedeutet dies also, dass mein Seed tatsächlich einen öffentlichen Schlüssel enthält? Und dieser Schlüssel ist der xpub? Mit anderen Worten, es ist also möglich, einen xpub aus dem Seed zu generieren? Ist das richtig?

Um die Frage auf den Punkt zu bringen: Wie ruft der Trezor oder eine andere Brieftasche angesichts meines Seeds alle zugehörigen Adressen, xpubs, öffentlichen Schlüssel, Transaktionen, Guthaben usw. ab, die aus dem Seed stammen?

Antworten (1)

Die verschiedenen privaten und öffentlichen Schlüssel werden alle von diesem Master-Seed abgeleitet.

Ja. Ich verstehe, dass sie abgeleitet sind. Aber abgeleitet ist etwas anderes, als sie nachschlagen zu können. Meine Frage ist, sagen wir, ich leite einen öffentlichen Schlüssel ab und präge dann eine Adresse. Dann schickt jemand Geld an diese Adresse und ich verliere alle meine Daten außer dem Seed, wie bekomme ich den öffentlichen Schlüssel zurück?
@MelbourneDeveloper So wie Sie es ursprünglich bekommen haben - Ihr Wallet-Programm leitet es aus dem Seed ab.
Der öffentliche Schlüssel? Und wenn die Leute "öffentlicher Schlüssel" sagen, ist das der xpub?
@MelbourneDeveloper Der xpub ist ein Schritt vor dem öffentlichen Schlüssel. Aber, wie gesagt, es stammt alles aus dem Samen. Der öffentliche Schlüssel kann vom xpub abgeleitet werden, aber es gibt auch andere Ableitungswege, die Sie einschlagen können – zum Beispiel können Sie den entsprechenden privaten Schlüssel ableiten und ihn dann in einen öffentlichen Schlüssel umwandeln.
Dann kann also der Schlüssel zusammen mit einer anderen Variablen verwendet werden, um den öffentlichen Schlüssel zu generieren. Es gibt also nur einen öffentlichen Schlüssel (xpub) pro Seed?
@MelbourneDeveloper Sie können eine beliebige Anzahl von xpubs ableiten. Einige Brieftaschen verwenden dies, um mehrere Währungen zu unterstützen, von denen jede mehrere Konten hat. Aber jeder Schritt ist nachvollziehbar.
OK. Ich glaube, ich bin ziemlich nah dran, das zu verstehen. Gibt es irgendwo ein Tool, das meinen öffentlichen Schlüssel von meinem Seed ableitet?
Hier gibt es eine , aber Sie müssen die genauen Ableitungsregeln kennen, die Ihre Brieftasche verwendet.
Das ist das Problem. Wenn es möglich ist, eine unendliche Zahl abzuleiten, wie rufe ich diejenigen aus der Blockkette ab, denen tatsächlich verwendete Adressen zugeordnet sind?
Ich kenne die Regeln nicht.
@MelbourneDeveloper Ihre Brieftasche kennt ihre eigenen Regeln, daher funktioniert die Verwendung einer anderen derselben Brieftasche. Und wenn alles andere fehlschlägt, können Sie die Ableitungsregeln nachschlagen – so ziemlich jede Brieftasche macht sie öffentlich. Wenn Sie ein neues Wallet laden, folgt das Wallet all seinen Ableitungspfaden, um nach Konten mit Guthaben zu suchen.
Ich glaube, Trezor verwendet m/44'/0'/0' für BTC non-SegWit und m/49'/0'/0' für BTC SegWit. Hier gibt es einige Dokumente .
OK. Daher kann jedes Wallet-Generierungstool öffentliche Schlüssel mit seinem eigenen Algorithmus generieren. Also müsste ich diesen Algorithmus kennen, um die öffentlichen Schlüssel zurückzubekommen. Aber ich nehme an, dass beim Erstellen der Schlüssel ein gewisses Maß an Entropie im Spiel ist, sodass ich neue Schlüssel erstellen kann, bis die Kühe nach Hause kommen. Das bedeutet nicht, dass einer von ihnen tatsächlich Geld in sich hat. Hier geht mein Verständnis schief.
@MelbourneDeveloper Sicher, aber anstatt das zu tun, würden Sie die gleichen Regeln befolgen, die Ihre Brieftasche verwendet, und Schlüssel/Konten in derselben Reihenfolge erstellen, in der sie sie erstellt haben. Sie müssen nicht nach dem Zufallsprinzip suchen, Sie können genau denselben Mechanismus verwenden, den Sie ursprünglich verwendet haben, indem Sie entweder dieselbe Software verwenden oder wissen, welche Methode diese Software verwendet hat.
Sie sagen also, dass die App (in diesem Fall Trezor) keine Entropie verwendet hat, um die öffentlichen Schlüssel und xpub aus meinem Seed zu generieren. Es hätte es in irgendeiner Reihenfolge erstellt. So könnte es zum Beispiel so etwas tun, wie meinen Samen zu nehmen, einen hinzuzufügen, ihn zu hashen und ihn mir dann zu geben. Beim zweiten Mal könnte es meinen Samen nehmen, zwei hinzufügen, es zerkleinern und es mir dann geben. Dieser Vorgang sollte also reproduzierbar sein. Rechts? Also, wenn Trezor m/44'/0'/0' verwendet, dann sollte ich in der Lage sein, ein Tool zu greifen, ihm meinen Seed zu geben, und dieses Tool sollte in der Lage sein, einen xpub/öffentlichen Schlüssel für mich abzurufen, richtig?
@MelbourneDeveloper Richtig. Es wird keine Entropie verwendet. Der Prozess ist deterministisch. (Wenn Entropie verwendet wurde, konnte sie nicht aus dem Master-Seed abgeleitet werden.)
Richtig, daher die "deterministische" Sache. Ich muss also nur den verwendeten Algorithmus finden und kann die Adressen usw. abrufen, ohne meinen Trezor zu löschen.