Glossaire / Portefeuilles et conservation
BIP39
Aussi appelé BIP-39, code mnémonique.
- Qu'est-ce que le BIP39 ?
- Le BIP39 est la spécification de 2013 qui encode l'entropie d'un portefeuille sous forme de mots tirés d'une liste fixe de 2 048 mots et les étire en un seed de 512 bits.
Spécifié dans BIP-39.
Presque tous les portefeuilles que vous pouvez acheter l'implémentent, et c'est pourquoi une phrase notée sur un appareil d'une marque se restaure sur un autre. Le document a été soumis le 10 septembre 2013 et Bitcoin Core ne l'a jamais implémenté à ce jour. Son autorité sur votre sauvegarde vient de l'adoption du secteur, non du processus de normalisation.
Comment cela fonctionne
Marek Palatinus et Pavol Rusnak, de SatoshiLabs, avec Aaron Voisine et Sean Bowe, ont rédigé le BIP-39. La spécification définit deux conversions et rien d'autre.
La première transforme du hasard en mots. Un portefeuille prend une entropie de 128, 160, 192, 224 ou 256 bits, la hache avec SHA-256 et ajoute les premiers bits de ce hachage, à raison de la longueur d'entropie divisée par 32 bits, comme somme de contrôle. Le total est ensuite lu 11 bits à la fois, chaque bloc sélectionnant un mot dans une liste d'exactement 2 048 mots. Les cinq tailles d'entropie donnent respectivement 12, 15, 18, 21 et 24 mots, et les deux que vous rencontrerez réellement sont les extrémités de cette plage.
La somme de contrôle est petite à dessein. Une phrase de 12 mots porte quatre bits de somme de contrôle, donc une liste de douze mots valides assemblée au hasard passe la validation environ une fois sur seize. Cela suffit à rattraper presque toutes les erreurs de copie à la main et est très loin de suffire à rendre une phrase inventée sûre.
La seconde conversion transforme les mots en seed. La phrase est normalisée en Unicode NFKD, puis passée dans PBKDF2 avec HMAC-SHA512 sur 2 048 itérations, le sel étant formé de la chaîne littérale "mnemonic" suivie d'une phrase secrète facultative choisie par l'utilisateur. Le résultat fait toujours 512 bits, que la phrase compte 12 mots ou 24.
Les listes de mots font partie de la norme, elles ne sont pas décoratives. La liste anglaise est construite pour que deux mots ne partagent jamais leurs quatre premières lettres et pour que les paires visuellement confondables soient exclues. Des listes officielles existent aussi pour le japonais, le coréen, l'espagnol, le chinois dans les deux écritures, le français, l'italien, le tchèque et le portugais. Une phrase n'a de sens que par rapport à la liste dont elle est issue, et c'est pourquoi une phrase espagnole saisie dans un portefeuille qui ne connaît que l'anglais échoue immédiatement.
Où cela se voit
Chaque écran d'installation d'un portefeuille matériel, chaque boîte de dialogue "restaurer à partir de 12 ou 24 mots" et chaque procédure de récupération des logiciels courants repose sur le BIP-39. La compatibilité qui en résulte est réelle et mérite d'être protégée : c'est elle qui fait qu'un appareil défaillant est une contrariété plutôt qu'une perte.
Le point faible de la norme est ce qu'elle omet. Une phrase ne dit rien du chemin de dérivation, du type de script ou du logiciel de portefeuille qui l'a produite, et elle ne comporte aucun champ de version pour en ajouter un plus tard. Deux portefeuilles peuvent lire correctement les mêmes mots et vous afficher malgré tout des adresses et des soldes différents. Noter le chemin à côté des mots est la solution de contournement habituelle, et elle relève entièrement de la convention, la spécification n'apportant aucune aide sur ce point.
Les 2 048 itérations de PBKDF2 sont l'autre critique. Ce nombre était peu coûteux en 2013 et il est insignifiant aujourd'hui, si bien que l'étirement n'offre presque aucune protection à quiconque choisit une phrase secrète facultative faible. Il ne protège rien du tout quant aux mots eux-mêmes, qui reposent sur leurs 128 ou 256 bits d'entropie machine.
BIP39 vs portefeuille HD
Le BIP-39 transforme des mots en seed ; le BIP-32 transforme une phrase de récupération en un arbre de clés. Ce sont deux documents distincts, d'auteurs différents, et un portefeuille peut implémenter l'un sans l'autre. Bitcoin Core est entièrement déterministe hiérarchique et ne prend en charge aucune phrase mnémonique. Electrum est tout aussi déterministe hiérarchique et utilise son propre format de phrase, avec un marqueur de version intégré. Considérez "compatible BIP-39" comme une promesse sur la lecture de vos mots, non comme une promesse sur les adresses qui apparaîtront ensuite.