Ich muss zugeben, dass ich beim Durchlesen des BIP39 das mit der Checksumme auch nicht auf Anhieb verstanden habe, da es doch recht theoretisch und ohne Beispiel beschrieben ist.
Versuchen wir mal, das Pferd von der anderen Seite aufzuzäumen. Ich verwende hier als Beispiel ein 24 Wort Mnemonic. Bei 12 Wörtern sieht es ein klein bisschen anders aus, das Prinzip bleibt aber das gleiche.
Was will man mit dem 24 Wort Mnemonic absichern?
Eine 256 Bit Zufallszahl.
Jetzt habe ich aber 24 Wörter, die jeweils aus 2048 Möglichkeiten bestehen.
2048 entspricht 11 Bit, weil 2^11 = 2048.
Also habe ich am Ende 24 Wörter x 11 Bit = 264 Bit.
Dann habe ich also 8 Bit zu viel, verglichen mit der ursprünglichen Zufallszahl von 256 Bit. Genau diese überzähligen 8 Bit werden mit der Checksumme gefüllt.
Wie wird diese Checksumme berechnet?
Entsprechend BIP39 wird die Checksumme aus der 256 Bit Zufallszahl berechnet, in dem aus dieser Zufallszahl zunächst ein Hash (SHA256) berechnet wird und von diesem Hash die führenden Bits als Checksumme verwendet werden. Es werden genau so viele führende Bits von dem Hash als Checksumme abgezwackt, wie oft die Zufallszahl durch 32 Bit teilbar ist.
Hintergrund: Dadurch bleibt das Endergebnis immer durch 11 Bit teilbar, weil N x (32 + 1) = N x 33 Bit.
Also bekommen wir 256 Bit / 32 = 8 Bit zusätzlich dazu. Da sind sie also wieder, unsere 8 Bit. Diese 8 Bit (=Checksumme) werden an die ursprünglichen 256 Bit angehängt, also haben wir wieder 264 Bit.
Wie komme ich jetzt von den 264 Bit zu den 24 Wörtern zurück?
Die 264 Bit werden in Blöcke aus 11 Bit zerteilt:
264 Bit / 11 Bit = 24 Blöcke.
Diese 24 Blöcke stellen die 24 Wörter dar, die man jetzt anhand der Wortliste aus der 11 Bit Zahl jeweils in ein Wort übersetzen kann.
Wie setzt sich also das letzte Wort zusammen?
Das letzte Wort (also das 24. Wort) besteht aus:
- 3 Bit vom verbleibenden Rest der 256 Bit Zufallszahl [Z], weil 11 Bit x 23 Wörter = 253 Bit. Es fehlen also noch 3 Bit, bis die 256 Bit voll sind.
- 8 Bit Checksumme [C]
Hier nochmal das letzte Wort bitweise (11 Bit) veranschaulicht (jeder Buchstabe steht für ein Bit):
Z Z Z C C C C C C C C
Deshalb kann man das letzte Wort der 24 Wörter also nicht zufällig aus der Wortliste auswählen, weil man sonst eine ungültige Checksumme bekommen würde.
Ich hoffe, ich habe das richtig beschrieben. So zumindestens verstehe ich BIP39.