• Loïc Morel

Comment générer soi-même sa phrase mnémonique Bitcoin ?

La phrase mnémonique (ou phrase de récupération) est un encodage de votre graine destiné à faciliter sa mémorisation et son stockage. Elle est basée sur une suite de mots décris au sein du BIP39 que vous pouvez retrouver en cliquant ici.


Connaitre cette suite de mots est donc suffisant pour déterminer la graine d'un portefeuille et donc générer l'ensemble des clés associées à celle-ci (sauf utilisation d'un sel cryptographique de type Passphrase BIP39).


Cette phrase, dérivée de l'entropie est généralement générée directement par votre portefeuille. Il est néanmoins possible de générer soi-même sa phrase mnémonique.


Nous allons vous expliquer dans cet article comment construire soi-même sa phrase de récupération (mnémonique) Bitcoin ?




Sommaire :

  1. Préparation du matériel nécessaire.

  2. La génération de l'entropie.

  3. Calcul de la checksum.

  4. Conversion binaire vers décimal.

  5. Recherche des mots de la phrase mnémonique.




Dés


 

ATTENTION : Générer soi-même sa phrase mnémonique nécessite de ne laisser aucune trace numérique lors de la construction. Sans cela, votre portefeuille disposera d'une surface d'attaque plus élevée et donc d'un risque de vol de vos bitcoins accru. Il est beaucoup moins risqué d'opter pour un hardware wallet qui va générer cette phrase pour vous hors-ligne avec du code open source ou source vérifiable. Pour cela nous vous conseillons à date la Trezor One pour les débutants, et la Coldcard MK3 (ou MK4) ou le Passport V2 pour les utilisateurs intermédiaires à avancés.


Vous pouvez donc suivre ce tutoriel pour essayer de créer un faux portefeuille que vous n'utiliserez pas. En revanche, nous vous déconseillons fortement d'y envoyer des fonds.


Même en suivant ce tutoriel, il est possible que votre mnémonique soit compromise. Aucune responsabilité ne saurait être engagée à quelque titre que ce soit.


Le portefeuille que nous exposons en photo dans cet article est évidemment vide, nous le générons simplement pour ce tutoriel. Nous vous rappelons que, contrairement à ce que l'on fait dans ce tutoriel, vous ne devez jamais prendre en photo, diffuser ou partager votre phrase de récupération.

 


1 - Préparation du matériel nécessaire.


Pour générer vous-même votre mnémonique, vous allez avoir besoin :

  • D'une feuille de papier.

  • D'un stylo ou crayon à papier : plusieurs couleurs pour se repérer plus facilement.

  • D'un clavier à fil (surtout pas Bluetooth).

  • D'un ordinateur (fixe de préférence).

  • D'une clé USB vide d'au moins 8go.

  • De la liste de 2048 mots de BIP39, imprimée.

  • De plusieurs dés.

  • D'un verre ou d'un bol avec de l'eau chaude.

  • De gros sel.


Après avoir réuni tout le matériel, on va devoir se mettre en condition. On s'installe dans un endroit sans passage, on ferme la porte, on ferme les rideaux et on vérifie que les caméras (webcams, caméras de surveillance, téléphone...) sont éteintes ou cachées. Mettez un peu de musique en fond, et détendez vous.


Nous allons également devoir vérifier les dés. Nous vous conseillons d'opter pour un nombre conséquent de dés afin de réduire l'impact d'un dé éventuellement déséquilibré (entre 5 et 10 dés c'est bien). Pour vérifier l'équilibre de vos dés, vous allez devoir vous munir d'un verre d'eau chaude saturée en sel. Il faut que l'eau soit suffisamment salée pour permettre au dé de flotter à la surface du liquide.


Vous allez lancer chaque dé une vingtaine de fois dans l'eau salée et vérifier le résultat du lancé. Si une ou deux faces reviennent de manière trop importante par rapport au reste des autres faces, étendez le test à plus de lancés. Si les résultats sont équilibrés entre chaque face, votre dé est opérationnel. Si une ou deux faces reviennent trop souvent, il faut exclure ces dés qui sont potentiellement déséquilibrés ce qui viendrait réduire l'entropie de votre phrase mnémonique et donc réduire la sécurité de votre portefeuille.


Une fois les dés vérifiés, on va pouvoir passer à la génération de l'entropie.




2 - La génération de l'entropie.


A partir de ce moment là, il ne faut pas parler. Vous ne devez pas dire vos chiffres ou vos mots à voix haute.


Pour réaliser une mnémonique de 24 mots d'une taille de 264 bits nous allons avoir besoin d'une entropie de 256 bits, c'est à dire une suite de 0 et de 1 longue de 256 caractères.


Les 8 bits restants seront donnés par la checksum, le début du condensat de l'entropie utilisant SHA256 (nous y revenons après).


Dérivation de la mnémonique depuis l'entropie.
Dérivation de la mnémonique depuis l'entropie.


Chaque mot de notre phrase sera déterminé par un groupe de 11 bits de manière à ce que les 264 bits nous donnent 24 mots : 24 * 11 = 264.


L'entropie va donc permettre de générer les 23 premiers mots et 3 bits seulement du 24ème mot. Le reste du 24ème mot sera déterminé par les 8 bits de la checksum.


Division en 24 mots de 11 bits
Division en 24 mots de 11 bits.


Pour générer ces 256 0 et 1, nous allons utiliser les dés. Admettons qu'un résultat pair donne un 0 et un résultat impair donne un 1.


Nous allons donc jeter les dés 256 fois de manière à avoir notre entropie de 256 bits. Si le résultat du lancé du dé est 1/3/5 alors nous noterons "1". Si le résultat est 2/4/6 alors nous noterons "0". Chaque résultat est noté à la suite, de la gauche vers la droite, et du haut vers le bas.


Pour faciliter la tâche, nous allons grouper les bits par amas de quatre et de trois comme sur la photo ci-dessous. Chaque mot disposant de 11 bits, nous écrirons 11 résultats par ligne.


256 bits sur papier


Comme on peut le voir sur ma fiche, le mot numéro 24 ne comporte pour le moment que 3 bits, puisqu'il viendra être complété par les 8 bits de la checksum.


Si vous souhaitez encore augmenter le caractère aléatoire de cette entropie, vous pouvez choisir d'ajouter d'autres sources de résultats aléatoires entre 0 et 1. Vous pouvez par exemple déterminer les 14 premiers mots avec les dés et les 10 restants avec d'autres sources aléatoires.


Quelques exemples de sources de résultats binaires aux caractéristiques pseudo aléatoires :

  • Lancez une chaine d'infos sur la TV et comptez le nombre de caractères en grand titre. Si pair, alors 0. Si impaire alors 1.

  • Comptez le nombre de voitures qui passent sur une route en 30 secondes. Si résultat pair, alors 0. Si résultat impair alors 1.

  • Pesez un sachet d'aliments entamé (comme un sachet de pâtes). Si résultat en grammes pair, alors 0. Si résultat impair alors 1.

  • ...

Oui, tout cela peut paraitre ridicule ou parano. Mais ce sont des moyens équilibrés et sûrs de diversifier votre source d'entropie et donc d'améliorer la sécurité de votre futur portefeuille.


Si vous souhaitez améliorer encore plus la sécurité de votre portefeuille, vous pouvez augmenter la taille de l'entropie. Au plus l'entropie sera grande, au plus ses propriétés pseudo-aléatoires seront bonnes. Vous pouvez ainsi partir sur une entropie de 1000 bits par exemple, puis passer cette entropie dans la fonction de hachage SHA256 pour obtenir un condensé de taille standard.



Nous avons donc généré nos 256 premiers bits, nous devons maintenant passer au calcul de la checksum (somme de contrôle) représentant les 8 bits restants.




3 - Calcul de la checksum.


Ce moment est le plus critique dans la génération d'un portefeuille manuellement, puisqu'il va nécessité l'intervention d'un ordinateur.


La checksum est simplement un hash SHA256 de l'entropie réduit aux 8 premiers bits. Le calcul d'un condensat SHA256 peut se faire à la main, mais pour un input de 256 bits, vous allez y passer sûrement une semaine entière. Le plus judicieux est donc de le faire sur un ordinateur.


Ce calcul de la checksum est ce qui fait que je ne conseille jamais de générer soi-même la mnémonique. Selon moi, l'utilisation d'un ordinateur, même avec les précautions citées ci-dessous, augmente de façon irraisonnable la surface d'attaque d'un portefeuille.


Donc si vous souhaitez créer un portefeuille sécurisé, en réduisant au maximum la surface d'attaque : laissez votre hardware wallet générer la mnémonique pour vous. Préférez des hardwares wallets utilisant un firmware open source (ou source vérifiable) et réputé comme la Coldcard MK3 (ou MK4), la Trezor One ou encore le Passport V2.



Maintenant que les risques sont exposés, nous pouvons revenir à notre tutoriel.


Pour calculer la checksum en laissant le moins de traces possible, nous allons utiliser une distribution Linux amnésique à partir d'un support amovible. Par exemple, Tails est un système d'exploitation qui se lance depuis une clé USB sur un ordinateur et qui utilise exclusivement la mémoire RAM de la machine. Il n'interagi pas avec le disque dur et ne laisse donc théoriquement aucune trace sur l'ordinateur.


Cependant, même avec l'utilisation de Tails, votre entropie peut fuiter d'autres façons. Par exemple si votre clavier est compromis. Pour réduire ce risque nous conseillons d'utiliser un clavier filaire.


Attention, Tails ne fonctionne que sur les processeurs avec architecture x86_64. Ainsi, Tails ne fonctionnera pas avec un processeur ARM de type puce Apple M1. Il fonctionnera parfaitement avec les processeurs Intel ou AMD.


Pour commencer, depuis votre ordinateur classique de tous les jours, téléchargez Tails depuis le site officiel. Vérifiez votre image en utilisant PGP ou en utilisant l'outils intégré au site officiel.


Formatez ensuite votre clé USB et flashez y Tails grâce à un logiciel comme Balena Etcher.


Une fois le flash terminé et vérifié, vous pouvez éteindre votre ordinateur. Débranchez l'alimentation de votre ordinateur et déconnectez votre disque dur de la carte mère. Si vous disposez d'une carte WiFi, déconnectez la. Si vous avez un câble Ethernet RJ45, déconnectez le également le temps de l'opération.


Afin de réduire au maximum le risque de fuite durant l'opération, débranchez votre box internet et éteignez votre téléphone. Enfin, déconnectez de votre ordinateur tout périphérique inutile durant l'opération : micro, webcam, enceintes, casque...


Si votre BIOS ne permet pas de démarrer le PC depuis un périphérique, modifiez ce paramètre puis redémarrez l'appareil.


Une fois l'ordinateur et l'environnement sécurisés, redémarrez votre ordinateur sur la clé USB Tails bootable.



Choisissez la langue et lancez l'OS.


Accueil Tails OS


Accédez au terminal depuis le menu Applications > Outils système > Terminal.


Ouverture du terminal Tails OS


Une fois sur le terminal, vous allez devoir calculer le hash de votre entropie. Pour cela utilisez la commande suivante :

echo [votre entropie] | shasum -a 256 -0

Remplacez simplement [votre entropie] par votre suite de 256 0 et 1 sans espace et sans les crochets.


La commande revient donc à noter :


echo espace votre entropie toute à la suite espace | espace shasum espace -a espace 256 espace -0.


Dans cette commande le "-0" permet de signaler à l'algorithme de hachage sha256 que l'input (notre entropie) est écrit en format binaire. Cela lui permettra de le considérer comme tel durant le calcul.


Avec l'entropie de notre exemple cela donne cela :


Ecriture de la commande pour calculer la checksum


Vérifiez que les chiffres entrés sur le terminal correspondent bien à ceux sur votre papier. Si vous vous êtes trompé à ce stade, le hash sera différent et la checksum sera invalide.


Appuyez ensuite sur la touche entrée pour valider.


Le terminal va vous donner le hash de votre entropie.


Résultat de la commande pour calculer la checksum


Pour le moment le hash est en format hexadécimal. Nous avons besoin pour terminer notre mnémonique des 8 premiers bits du hash, ce qui constitue la checksum. En format hexadécimal, chaque caractère représente 4 bits. Nous allons donc récupérer les deux premiers caractères de notre hash.


Dans notre cas ce sont les lettres "d" et "f". Une fois les lettres notées sur votre feuille de papier, vous pouvez éteindre votre ordinateur.


Nous allons devoir maintenant les convertir en nombres binaires. Voici le tableau de conversion :


Tableau de conversion décimal, binaire et hexadécimal


Nos deux nombres hexadécimaux "d" et "f" donnent respectivement en nombres binaires : 1101 et 1111. Notre checksum de 8 bits est donc égale à 11011111.


Nous pouvons dorénavant compléter notre entropie sur notre feuille de papier avec les 8 derniers bits.


Ajout de la checksum à l'entropie.
Ajout de la checksum à l'entropie.


Félicitations, votre mnémonique est prête ! Il ne reste plus qu'à convertir chaque ligne en un nombre décimal et à y associer un mot de la liste fournie dans BIP39.




4 - Conversion binaire vers décimal.


Pour convertir chaque ligne en un nombre décimal nous allons utiliser une technique qui permet de réaliser le calcul de tête sans perdre trop de temps.


Pour le moment vous avez sur votre fiche 24 lignes comportant chacune 11 0 et 1. Pour convertir cela facilement en décimal, nous allons associer chaque premier bit au nombre 1024 si 1 ou au nombre 0 si 0. Pour le deuxième bits nous associerons le nombre 512 si 1 et le nombre 0 si 0, puis ainsi de suite. Voici les correspondances :

  • 1er bit : 1024.

  • 2e bit : 512.

  • 3e bit : 256.

  • 4e bit : 128.

  • 5e bit : 64.

  • 6e bit : 32.

  • 7e bit : 16.

  • 8e bit : 8.

  • 9e bit : 4.

  • 10e bit : 2.

  • 11e bit : 1.

Pour chaque ligne nous additionnerons les résultats obtenus afin d'obtenir la conversion décimale du nombre binaire.


Par exemple, imaginons qu'une de mes lignes est égale à : 1010 1101 101.


Schéma de conversion binaire vers décimal.
Schéma de conversion : binaire vers décimal.


Pour chaque bit égal à 1, nous reportons en dessous le nombre associé. Pour chaque bit égal à 0, nous ne reportons aucun nombre.


Il suffit ensuite d'additionner tous les nombres validés par des "1" et on obtient la conversion décimale de notre nombre binaire. Dans notre exemple, notre nombre binaire de 1010 1101 101 est égal à 1389 en nombre décimal.



J'ai donc effectué ce calcul pour toutes mes lignes sur ma feuille de papier :


Conversion binaire vers décimal mnémonique


Ces nombres décimaux vont nous permettre de déterminer un rang dans la liste des mots BIP39.




5 - Recherche des mots de la phrase mnémonique.


Nous avons donc maintenant le rang de chaque mot dans la liste donnée dans BIP39. Seulement, la liste de mots est numérotée de 1 à 2048, mais dans notre méthode de calcul, les résultats possibles vont de 0 à 2047. Nous avons donc un décalage d'un rang à rectifier.


Pour cela, nous allons prendre chacun des 24 nombres indiquant un rang sur notre feuille de papier et nous allons y additionner 1 à chaque fois de manière à rectifier ce décalage.


Rectification rang mots mnémonique


Maintenant que nous avons les rangs, nous n'avons plus qu'à chercher chaque mot au sein de la liste de BIP39. Par exemple, mon premier mot se trouve au rang 742.


Liste de mots mnémonique BIP39
Crédit : https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki


Une fois tous les mots trouvés, nous disposons enfin de notre phrase de récupération (mnémonique) générée manuellement.


Mnémonique phrase


Il ne reste plus qu'à l'importer, soit sur un logiciel desktop si l'on souhaite disposer d'un portefeuille logiciel. Soit sur un périphérique comme une Trezor One si l'on souhaite disposer d'un portefeuille hardware.


Si lors de l'importation un message d'erreur "invalid checksum" s'affiche, cela veut dire que vous avez fait une erreur. Les deux erreurs les plus communes sont :

  • Vous vous êtes trompé lors de l'écriture de l'entropie sur le terminal de Tails et donc le hash en output était erroné.

  • Vous vous êtes trompé dans les calculs permettant de convertir les nombres binaires en nombres décimaux.

Il faut donc revoir vos calculs, les vérifier et réessayer l'importation.


Tip : Pour conserver votre phrase, seules les 4 premières lettres de chaque mot suffisent. Elles sont toutes différentes pour les 2048 mots de la liste.


Nous vous rappelons une nouvelle fois que cette génération manuelle de votre mnémonique comporte des risques de vols de vos bitcoins. Nous vous conseillons de ne pas suivre ce tutoriel pour vos portefeuilles importants mais de laisser votre hardware wallet générer la mnémonique pour vous, avec du code open source ou vérifiable.




Cas spécifique de l'option de lancé de dés sur les ColdCard :


Les hardware wallet de la famille Coldcard disposent d'une option Dice Roll (lancé de dés) pour générer la mnémonique. Cette option est très bien, et nous vous la conseillons fortement puisqu'elle permet d'avoir la main sur la génération de l'entropie, sans avoir besoin d'utiliser un autre appareil que votre Coldcard pour effectuer les calculs.




Pour aller plus loin :