What is Nostr?
Volker
npub1g4j…fm70
2024-02-11 20:20:22

Volker on Nostr: Habe gerade für eine Telegram Gruppe aufgeschrieben, wie die Generierung der Private ...

Habe gerade für eine Telegram Gruppe aufgeschrieben, wie die Generierung der Private Keys geschieht, wie das mit 12 oder 24 Wörtern und der Entropie zusammenhängt. Das ist nämlich leider im Buch "Bitcoin Begreifen" nicht korrekt erklärt (der Autor hat es zu spät bemerkt).

Für alle, die es interessiert, also hier:

Von der Entropie zum Private Key:
Du beginnst mit einer gewissen Anzahl Bits an ENTROPIE ("Zufall"), die du idR von der Hardware generieren lässt und am besten noch manuell ergänzt (Würfeln etc.)
Von diesen Entropie-Bits generierst du den SHA256 Hash, der dir 256 Bits liefert. Das ist aber noch längst NICHT der Private Key. Du nimmst nun von diesen 256 Bits Hash die ersten vier Bits (oder bei 256 Bit Entropie die ersten acht), und hängst sie hinten an die ENTROPIE-Bits dran. Warum tust du das? Damit du eine Checksumme hast und damit in dem Fall, dass irgendwo ein Bit umgekippt ist, merken kannst, das etwas nicht stimmt.
Und jetzt schnippelst du diese 128+4, also 132 Bits in lauter kleine Stückchen zu je 11 Bits. Diese 11 Bits betrachtest du nun als Binärzahlen im Bereich 0-2047, da man mit 11 Bits 2048 verschiedene Werte codieren kann.
Jetzt nimmst du die Wortliste aus BIP-39, die aus 2048 Wörtern besteht, und suchst für jedes der 11-Bit Pakete das passende Wort aus der Tabelle. Beispiel: die ersten 11 Bits sind "110 0010 0000", das ist dezimal 1568. Dann suchst du das Wort Nummer 1568 aus der Tabelle raus (keine Ahnung was, vielleicht "Satoshi"). Das ist dann also jetzt das erste Wort deiner Mnemonic Phrase. (In Wirklichkeit ist alles um eins verschoben; die Liste geht nicht von 0-2047, sondern von 1-2048, warum auch immer, spielst hier aber keine Rolle).
Jetzt machst du das mit den 11 Bit pro Wort noch mit all den anderen Wörtern, was dir die Seed-Wort Liste, oder eben Mnemonic Phrase, gibt. Und jetzt wird das Ergebnis, also der komplette String aus 12 VOLLSTÄNDIGEN (nicht nur die Abkürzungen aus 4 Buchstaben) Wörtern, alle lückenlos hintereinander gehängt. Dieser String geht jetzt in eine "Password Based Key Derivation Function" namens PBKDF2. Diese Hashfunktion nimmt ausserdem ein PASSWORT (falls keins benutzt wird, nimmt es stattdessen "mnemonic", läuft 2048 mal durch (damit Brute Force Angriffe ausgebremst werden) und liefert schliesslich einen 512 Byte langen Hashwert dieser Mnemonics.
Dieser 512-Bit Hash Wert wird jetzt in eine weitere Hashfunktion gegeben, nämlich HMAC-512, mit dem Zusatzparameter "Bitcoin seed" als Passwort (oder "Salt")
Das Ergebnis dieses HMAC-512 Durchlaufs sind wiederum 512 Bit, und das ist nun endlich deine "Keychain" für alle Private Keys, die aus den Seed Wörtern generiert werden können. Die linken 256 Bits sind der "Master Chaincode", die rechten der "Master Private Key".
Author Public Key
npub1g4jdvuxv9dgkcqtn5fupf2l9mr9xp27glzp6eq450dwfszrhfp9scxfm70