Wie werden unterschiedliche Accounts abgeleitet?

Hallo zusammen,

Hab mich letztens gefragt wie genau die einzelnen Accounts abgeleitet werden. Also wie vom seed die einzelnen Accounts abgeleitet werden. Das sie gehasht werden ist mir klar, würde es gerne genauer wissen. Muss sich ja irgendwas ändern das immer unterschiedliche Accounts entstehen aber trotzdem alle vom Hauptgeheimnis hergeleitet werden. Stell mir das irgendwie wie folgt vor:
Man nimmt seinen seed und hasht ihn mit Sha 256 das Ergebnis ist der private key für Account 0

Für Account 1 wird dann einfach noch eine 1 beim erstellen hinzugefügt und dann immer so weiter

Da ich von Kryptographie noch kein großer Verständnis hab bin ich mir ziemlich sicher das da ein Denkfehler drin ist.

Gruß semu

1 „Gefällt mir“

Schau mal hier rein:

Technische Erklärung in Mastering Bitcoin:

Nein, nicht ganz… :slight_smile:

So einfach ist das dann doch nicht. Völlig falsch ist deine Vermutung aber auch nicht!

Um deine Aussage etwas zu korrigieren: Der (512 bit) Seed wird in einen HMAC geworfen (hier kommt SHA-512 zum Einsatz) und die ersten 256 bit, also die erste Hälfte ist der Master Private Key m, die restlichen 256 bit der Master Chain Code.

Der Accountschlüssel #0 befindet sich hierarchisch erst drei Stufen unter m. Tatsächlich wird dann aber wie du schreibst einfach ein Index erhöht um weitere Accounts abzuleiten.

Der verlinkte Beitrag sollte dir erstmal ein gutes Verständnis geben wie eine HD Wallet funktioniert. Das konkrete Ableitungsverfahren kannst du dir dann in Mastering Bitcoin anschauen, das ist ohne Informatik-Hintergrund aber evtl. nicht ganz einfach.

Etwas zugänglicher sind die technischen aber sehr anschaulichen Erklärungen von Greg Walker:

2 „Gefällt mir“

Kenne den tread. Werd ihn mir Mal nochmal durchlesen

Wollte des Buch schonmal lesen aber glaub des braucht noch bisschen bei mir. Zu wenig informatik Hintergrund. Aber vlt. Tu ich es mir Mal an und les es nen paar Mal.:sweat_smile:
Die verlinkten Artikel schau ich mir auch Mal an

Oh man es werden immer mehr Fragenzeichen in meinem Kopf :sweat_smile::joy:

Du musst das gar nicht so im Detail verstehen, das wäre völlig übertrieben… :smiley:

Die Frage „Wie werden unterschiedliche Accounts abgeleitet?“ kann man auch relativ einfach beantworten:

Eine HD Wallet kann Schlüssel ableiten wie ein Baum Äste und Blätter. Auf der Höhe die für Accounts vorgesehen ist kann ich einfach den Ast wechseln und lande bei anderen Blättern. Die Information auf welchem Ast ich mich befinde steht im Ableitungspfad. Wenn ich den selben Pfad von der Wurzel zur Krone gehe lande ich immer bei den gleichen Blättern (sofern nicht gerade Winter ist :wink:).

Vereinfacht kannst du dir das genau so vorstellen. Ob da jetzt ein HMAC mit SHA-512 benutzt wird oder was der Chain Code soll spielt keine Rolle fürs Verständnis.

Du hast eine Hashfunktion und du fütterst diese Funktion mit einem erweiterten Schlüssel und einem Index. Das sind dann deine Accountschlüssel.

Dieser Vorgang läuft dann nochmal „unten“ auf Adressebene ab, überall aber das gleiche Prinzip, mit kleinen Feinheiten die sich unterscheiden.

1 „Gefällt mir“

Ja schon klar, aber interessiert mich halt. Sind halt so fragen die ich mir stell bevor ich schlafen gehe😂
Werd mich da Mal bisschen einlesen sobald ich Zeit hab.

1 „Gefällt mir“

Die gaaanz kurze, sicherlich unvollständige Antwort wäre vielleicht in etwa wie folgt:
Es gibt sowas wie den Derivation Path (wohl definiert in BIP-32), wo man sich auf bestimmte Konventionen (BIP-44, BIP-49, BIP-84, …) geeinigt hat, wie die Zweige und Äste dessen zu interpretieren sind, wovon @sutterseba zuletzt gesprochen hat.

Für Native Segwit Adressen (P2WPKH, Adresspräfix bc1…) lautet dieser für Bitcoin-Mainnet z.B. für die allererste Empfangsadresse vom allerersten (Standard-)Account: m/84’/0’/0’/0/0
(von links nach rechts im Derivation Path)
m: Master Private Key
84’: Native Segwit mit bech32-Adressformat (hardened, markiert durch einfaches Anführungszeichen ')
0’: Bitcoin-Mainnet (bei Testnet stünde hier z.B. 1’), (hardened)
0’: Erster Account (Zählung fängt mit Null an; beim 2. Account stünde da 1’, beim 3. dann 2’, …), (hardened)
0: Externe Adressen oder 1 für interne Adressen (wie z.B. das Wechselgeld), (non-hardened)
0: Erster Key, erste Adresse (Zählung fängt bei Null an wie beim Account), (non-hardened)

Legacy-Adresse (P2PKH, Adresspräfix 1…), Bitcoin-Mainnet, 4. Account, 8. Key/Adresse (intern) ist dann:
m/44’/0’/3’/1/7

Also im Prinzip
m / purpose' / coin_type' / account' / extern | intern / address_index

Finde ich beim Greg Walker viel einfacher zu verstehen als im Mastering Bitcoin Buch. Aber das Buch habe ich vor learnmeabitcoin.com gelesen. Einmal reicht bei mir auch nicht, das werde ich sicherlich noch ein paarmal lesen müssen (nicht alles, nur die schwierigen Teile, die ich mir nicht merken kann).