Bitcoin Forum
May 27, 2024, 08:30:10 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: BIP39 : les 24 mots, le checksum  (Read 205 times)
patrickus (OP)
Hero Member
*****
Online Online

Activity: 2646
Merit: 869


View Profile
June 28, 2020, 09:42:37 AM
Last edit: June 28, 2020, 10:31:25 AM by patrickus
 #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
Saint-loup
Legendary
*
Offline Offline

Activity: 2618
Merit: 2371



View Profile
June 28, 2020, 01:13:31 PM
Last edit: June 28, 2020, 02:23:17 PM by Saint-loup
Merited by patrickus (3), Halab (3), guigui371 (2), elma (1), Yaplatu (1)
 #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   |

██
██
██
██
██
██
██
██
██
██
██
██
██
... LIVECASINO.io    Play Live Games with up to 20% cashback!...██
██
██
██
██
██
██
██
██
██
██
██
██
patrickus (OP)
Hero Member
*****
Online Online

Activity: 2646
Merit: 869


View Profile
June 28, 2020, 03:41:27 PM
 #3

Merci pour l'astuce ! Smiley
patrickus (OP)
Hero Member
*****
Online Online

Activity: 2646
Merit: 869


View Profile
May 13, 2024, 08:07:06 AM
Merited by Halab (4), Saint-loup (1)
 #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.
Saint-loup
Legendary
*
Offline Offline

Activity: 2618
Merit: 2371



View Profile
May 13, 2024, 09:01:05 PM
Last edit: May 13, 2024, 09:28:59 PM by Saint-loup
Merited by Halab (4), patrickus (1)
 #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...

██
██
██
██
██
██
██
██
██
██
██
██
██
... LIVECASINO.io    Play Live Games with up to 20% cashback!...██
██
██
██
██
██
██
██
██
██
██
██
██
patrickus (OP)
Hero Member
*****
Online Online

Activity: 2646
Merit: 869


View Profile
May 13, 2024, 09: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.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!