Wiederherstellung mittels Seed-Phrase (technisch, Code-Ebene)

Hallo, wie man durch die Seed-Phrase mittels einer Wallet wieder an seine BTCs kommt hab ich verstanden.

Mich würde aber interessieren wie das auf technischer Ebene (Logisch, Programmtechnisch) gelöst ist.

BTCRecovery (btcrecover/btcrecover at master · 3rdIteration/btcrecover · GitHub) bietet z.B. die Möglichkeit via einer aus der Blockchain erstellten Adressdatenbank. Indem ansch. mittels des Seeds, systematisch Adressen erzeugt werden, um diese gegen die DB abzugleichen und somit die entsprechenden BTCs der damit verbundenen Transaktionen zu ermitteln und aufzurechnen. (Wie man anhand dieses Vorgehens alle Adressen erwischen will ist mir nicht klar)

Ist das die einzige Möglichkeit und wird das so in den unterschiedlichen Wallets gemacht ? Oder bestehen noch andere Herangehensweisen/Techniken ?

Links zu entsprechenden Erklärungen/Projekten/Code wären sehr hilfreich.

Wäre schön wenn sich hier jemand findet, der Licht ins Dunkel bringen könnte. Danke.

Kennst du schon Mastering Bitcoin?

3 „Gefällt mir“

Das läuft letztlich ganz genau so, wie wenn du deine Wallet erstmals aufsetzt.

Dein Wallet exportiert ein paar Adressen an die Software, die mit dem Wallet kommuniziert. Das kann irgendeine Applikation eines Wallet Anbieters sein, oder ein Desktop Wallet, oder eine Kommandozeile, etc.

Die Software hat eine Verbindung zu einer Node und überprüft mit Hilfe der Node, ob Transaktionen zu einer dieser Adressen bekannt sind.

Schließlich werden die Transaktionen angezeigt.

4 „Gefällt mir“

Ja, kenn ich. Dort werden viele Dinge sehr gut erklärt. Aber da steht dieser Punkt nicht drin.

Schon klar, was aber, wenn du NUR die Seed-Phrase hast, keine Adressen.

Da wird es dann spannend. Aus der Seed-Phrase kann man ja sämtliche Master-Keys und Child-Keys und die entsprechenden Adressen generieren. Diese werden dann auch von der Wallet vorgehalten.

Wenn aber all das weg ist und man nur noch seinen Seed hat. Was passiert da technisch, z.B. in einer komplett neuen, leeren Wallet, um wieder seine BTCs zu ermitllen.

Das Vorgehen um aus der Seedphrase die Keys und Adressen abzuleiten ist in BIP39 und BIP32 standardisiert. Jede Standard Software Wallet kennt also nach Eingabe der Wörter all deine Keys und Adressen.

Bei einer Hardware Wallet kennt nur das Gerät deine Seedphrase, exportiert aber den xpub des verwendeten Accounts an die verwendete Wallet Software.

Der Rest ist so wie @Makowski schreibt.

Jede Wallet Software muss zur Ermittlung deiner Balance, oder zum Übermitteln von Transaktionen, mit einer Node des Bitcoin Netzwerks verbunden sein.

Die Software fragt also nun der Reihe nach, beginnend beim Adress-Index 0, die Adressen deines Bitcoin Accounts bei der Node ab.

Die Node führt neben der Blockchain eine Datenbank aller aktuell verfügbaren Bitcoin (UTXO Set). Für jede angefragte Adresse prüft sie ob ein „Guthaben“ darauf verfügbar ist, also entsprechende UTXOs vorhanden sind, und liefert diese zurück zur Wallet Software.

Wie diese Node genau sucht und welche Datenbanken sie pflegt hängt evtl. auch vom Betreiber und der zusätzlich verwendeten Software ab (z.B. Electrum Server). Ich kann mir vorstellen, dass größere Firmen da auch eigene Speziallösungen haben.

Sobald die Wallet Software irgendwann für jede weitere Adresse keine UTXOs mehr übermittelt bekommt, hört sie auf weiter anzufragen. Sie geht dann davon aus, dass die Adressen ab diesen Indizes nicht mehr verwendet wurden.

Soweit ich weiß gibt es weitere Feinheiten und Unterschiede, z.B. zu Privacy Zwecken. Aber im Groben ist es das.

3 „Gefällt mir“

Das Verfahren ist letztlich eine Konvention, ein Industriestandard.

1 „Gefällt mir“

Danke für die ausführliche Antwort.

Also ist es tatsächlich so, wie das auch BTCRecovery macht, indem erzeugte Adressen durchgegangen werden.

Der entscheidende Punkt, den ich noch nicht so ganz verstanden hatte war letztlich das Abbruchkriterium der Suche. Verstanden habe ich aus deiner Antwort, das a.) die Systematik (Start bei Adressindex 0) und b.) keine weitere Adresse liefert mehr was zurück, als Abbruchkriterium, die Suche abbrechen.

Bleibt nur noch die Frage, was bei eine „Lücke“ von zwar erzeugten, aber nicht verwendeten Adressen, passiert, denn Adressen kann ich ja ständig generieren und wenn die Erzeugung nach den Standards (PIP 39, 32 44) abläuft, wird entsprechend die nächste Adresse einfach ausgegeben. Nach meinem Verständnis können somit unbenutzte Adressen entstehen und somit eine „Lücke“ erzeugen, bei der diese Adressen nichts zurück liefern und somit die Suche abbrechen würde.

Kennt jemand eine guten Open-Source-Wallet ? Dann kann ich mir das im Code ja mal ansehen, wie das dort gemacht wird.

Du kannst mal den Code der Bitbox App durchforsten:

GitHub - digitalbitbox/bitbox-wallet-app: The BitBoxApp for desktop and mobile.

Dort nach „gap limit“ suchen, vielleicht findest du die passende Funktion. Das Gap Limit ist die Anzahl leerer Adressen, nach der die Suche abgebrochen wird.

Repository search results · GitHub

Könnte das hier sein:

bitbox-wallet-app/backend/coins/btc/account.go at b1b64045653c40bb65cf6616d8f80060838a4ba9 · digitalbitbox/bitbox-wallet-app · GitHub

Ansonsten hilft vielleicht @stadicus weiter, einer der Bitbox Entwickler.

So einen Fall hatten wir erst neulich hier. Die Wallet zeigt die Coins, die weiter hinten liegen, dann nicht an, weil sie nach einer Lücke vorher schon abgebrochen hat (Thread).

Deshalb kann man das Gap Limit einstellen.

2 „Gefällt mir“

Super, danke für die Antworten. Das hilft mir weiter.

(Für diejenigen die selbst auf Code-Ebene in Python mit den oben genennten BIPs experimentieren wollen : GitHub - ebellocchia/bip_utils: Generation of mnemonics, seeds, private/public keys and addresses for different types of cryptocurrencies)