Author

Topic: BIP39 : les 24 mots, le checksum (Read 282 times)

legendary
Activity: 2604
Merit: 2353
August 08, 2024, 03:48:38 PM
#8
Oui car contrairement à ce qu'on pourrait penser pour générer la binary seed finale de 512bits(128chiffres en hexadécimal) on ne retransforme pas la menmonic seed en seed numérique, mais on la garde sous forme alphanumérique en format UTF-8 NFKD précisément, pour la hasher avec la passphrase
Quote
To create a binary seed from the mnemonic, we use the PBKDF2 function with a mnemonic sentence (in UTF-8 NFKD) used as the password and the string "mnemonic" + passphrase (again in UTF-8 NFKD) used as the salt. The iteration count is set to 2048 and HMAC-SHA512 is used as the pseudo-random function. The length of the derived key is 512 bits (= 64 bytes).

This seed can be later used to generate deterministic wallets using BIP-0032 or similar methods.

The conversion of the mnemonic sentence to a binary seed is completely independent from generating the sentence. This results in a rather simple code; there are no constraints on sentence structure and clients are free to implement their own wordlists or even whole sentence generators, allowing for flexibility in wordlists for typo detection or other purposes.
https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

newbie
Activity: 22
Merit: 20
August 06, 2024, 09:29:16 PM
#7
Pour ce qui est du chiffre de 256 24e mots donnant une seed valide, j'ai un doute par contre. Puisque pour une seed de 24 mots, il y a 8 bits de checksum. Le dernier mot, qui est un groupe de 11bits comme tous les mots, est donc composé de 8bits de checksum et des 3 derniers bits de la chaine initiale découpée en blocs de 11bits. Ca me semblerait donc plus logique qu'il n'y en ait que 23 = 8 en fait.
Oui, c'est exactement ça.
La taille du checksum est obtenue en divisant la taille en bits de l’entropie par 32.
Soit pour une entropie de 256 bits on a 256 / 32 = 8 bits de checksum

On va ensuite concaténer l'entropie avec le checksum (qui correspond en fait aux 8 premiers bits du hash256 de l'entropie) ce qui donne 256 + 8 = 264 bits

Ces 264 bits sont divisés en paquets de 11. 264 / 11 = 24 mots

Si tu n'as que 23 mots (soit 253 bits) il te faudra compléter l'entropie avec 3 bits (ce qui te donne 8 possibilités) pour arriver à 256 et ajouter ton checksum.

A toi de choisir le mot qui te plait le plus pour ta seed car comme dit Saint-loup ça ne te donnera pas la même clé privée en fonction du dernier mot que tu retiens.
hero member
Activity: 2814
Merit: 912
May 13, 2024, 04:31:12 PM
#6
Tu as probablement raison pour le 8 au lieu de 256. En fait j'ai lu les deux versions mais je n'ai pas vérifié. Mais selon mes tests, ça avait plus de chances d'être 8. Et de toute façon 8 = 2048/256 comme tu dis.
legendary
Activity: 2604
Merit: 2353
May 13, 2024, 04:01:05 PM
#5
Oui c'est vrai il y a plusieurs 24eme mots possibles qui donneront une seed valide à partir de 23 mêmes premiers mots. En revanche, la seed ne sera pas la même au final, et les clés et adresses dérivées ne seront donc pas les mêmes. On peut le vérifier sur la page iancoleman en générant les adresses des 2 seeds citées d'ailleurs.

Pour ce qui est du chiffre de 256 24e mots donnant une seed valide, j'ai un doute par contre. Puisque pour une seed de 24 mots, il y a 8 bits de checksum. Le dernier mot, qui est un groupe de 11bits comme tous les mots, est donc composé de 8bits de checksum et des 3 derniers bits de la chaine initiale découpée en blocs de 11bits. Ca me semblerait donc plus logique qu'il n'y en ait que 23 = 8 en fait.

J'ai essayé au hasard, et sachant qu'il y a 2048 mots dans le dictionnaire, je devrais avoir 256/2048 = 1/8 une chance sur 8 de tomber sur une seed valide avec un 24eme mot pris au hasard, si 256 mots sont ok.
Je n'ai pas obtenu ce resultat statistique dans mes essais, mais on ne peut pas exclure un gros manque de chance de ma part toutefois...
hero member
Activity: 2814
Merit: 912
May 13, 2024, 03:07:06 AM
#4
Peut-être le saviez vous déjà mais moi non: le 24 ème mot n'est pas unique.

Sur le site https://iancoleman.io/bip39/, on peut générer des seeds. Par exemple, j'obtiens les 24 mots suivants:

Quote
risk jungle delay tray oblige valve business dial organ onion hurry lounge barrel meadow link pull noise rail assist ski open clap champion degree

Le 24 éme mot est ici "degree". C'est un checksum. Il est calculé. Mais ce que j'ignorais, c'est qu'il n'est pas unique. Il y aurait en fait 256 possibilités dans le cas d'un seed à 24 mots.

Il existe des sites permettant de calculer le 24 ème mot ou plutôt un 24 éme mot, par exemple seedpicker : https://seedpicker.net/calculator/last-word.html.

Si je fait un copier coller des 23 premiers mots de la seed précédente et recherche le 24 ème mot avec seedpicker, il trouve "away".

Quote
risk jungle delay tray oblige valve business dial organ onion hurry lounge barrel meadow link pull noise rail assist ski open clap champion away

Cette seed est différente de la précédente mais elle fonctionne trés bien également.
hero member
Activity: 2814
Merit: 912
June 28, 2020, 10:41:27 AM
#3
Merci pour l'astuce ! Smiley
legendary
Activity: 2604
Merit: 2353
June 28, 2020, 08:13:31 AM
#2
En fait, on peut le faire avec la page de iancoleman mais il y a un petite "astuce". Il faut d'abord rentrer 24 mots et ça corrige le 24eme en le transformant en checksum valide.
Pour que l'astuce fonctionne :


Concrètement, après avoir saisi la seed sur le premier écran, il faut cliquer sur Show entropy details



On peut voir alors le rang des mots dans le dictionnaire(Word Indexes), et l'encodage sur 11bits de ce rang(Raw Binary).
Binary Checksum donne les bits de checksum. Si on les accole avec le dernier groupe de bits de Raw Binary, on peut constater que l'on obtient bien un groupe de 11bits correspondant au dernier "word index" qui est le mot corrigé.
Ici 0000101 0010 <-> 82 <-> apart  





Cf BIP39 pour comprendre comment ce checksum est calculé ou pour le faire soi-même à la main https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#generating-the-mnemonic
Quote
Generating the mnemonic

The mnemonic must encode entropy in a multiple of 32 bits. With more entropy security is improved but the sentence length increases. We refer to the initial entropy length as ENT. The allowed size of ENT is 128-256 bits.

First, an initial entropy of ENT bits is generated. A checksum is generated by taking the first ENT / 32 bits of its SHA256 hash.
This checksum is appended to the end of the initial entropy. Next, these concatenated bits are split into groups of 11 bits, each encoding a number from 0-2047, serving as an index into a wordlist. Finally, we convert these numbers into words and use the joined words as a mnemonic sentence.
The following table describes the relation between the initial entropy length (ENT), the checksum length (CS) and the length of the generated mnemonic sentence (MS) in words.

CS = ENT / 32
MS = (ENT + CS) / 11

 |  ENT  | CS | ENT+CS |  MS  |
+-------+----+----------+---- -+
 |  128  |  4   |   132     |  12   |
 |  160  |  5   |   165     |  15   |
 |  192  |  6   |   198     |  18   |
 |  224  |  7   |   231     |  21   |
 |  256  |  8   |   264     |  24   |
hero member
Activity: 2814
Merit: 912
June 28, 2020, 04:42:37 AM
#1
Je voudrais une fonction qui me permette de générer le 24 ème mot (chekcksum) à partir des 23 premiers mots ?

Ou mieux un site web qui permette de le faire ? Malheureusement, le site https://iancoleman.io/bip39/ ne le permet pas.

L'idée est de créer une liste de 24 mots à partir de deux listes de 12 mots que j'ai déjà mémorisées. Donc je prends 12 mots de la première liste, 11 mots de la seconde et il me reste à calculer le 24 ème mot...

Bon évidemment je pourrais me contenter d'une liste de 12 mots qui offre une sécurité suffisante. Mais il semble que l'utilisation de 24 mots (plus une passphrase) soit en train de devenir la méthode standard.

Et en informatique, j'ai toujours cherché à coller aux standard...

J'aime l'idée de mémoriser les 24 mots (même s'il faut aussi une sauvegarde par exemple dans un coffre en banque, la mémoire pouvant être défaillante). Avec l'Etat de plus en plus totalitaire qu'ils nous font, il ne faut pas exclure que l'on soit un jour obligé de passer la frontière sans avoir le temps de passer à la banque. Wink
Jump to: