• Loïc Morel

Création d'un portefeuille Bitcoin : entropie, phrase, graine et clés étendues.

Dans cet article nous allons vulgariser comment est généré un portefeuille Bitcoin et qu'est-ce qu'il représente. Nous allons introduire les concepts d'entropie, de phrase mnémonique (ou phrase de récupération), de graine (seed) et de clé étendue. Nous n'expliquons pas comment utiliser un portefeuille Bitcoin en pratique mais comment il fonctionne techniquement. Ces informations purement techniques vous permettent de comprendre les rouages en action sous vos logiciels afin de mieux maîtriser votre utilisation de Bitcoin.


Dans cet article nous parlerons exclusivement des portefeuilles HD (déterministes hiérarchiques) qui représentent l'extrême majorité des wallets actuels. Nous reviendrons sur leur concept plus loin dans cet article, mais gardez à l'esprit que d'autres types de portefeuilles Bitcoin existent malgré qu'ils ne soient pratiquement plus utilisés aujourd'hui.


Par exemple, les premiers portefeuilles Bitcoin étaient simplement constitués d'un agglomérat anarchique et aléatoire de clés privées. On les appelle les portefeuilles JBOK (Just a Bunch of Keys). Aujourd'hui ces portefeuilles ne sont pratiquement plus utilisés et sont même déconseillés par certains développeurs Bitcoin Core puisqu'ils sont très laborieux à manipuler.


graine Bitcoin



L'entropie.


A la base de tout portefeuille Bitcoin se trouve une entropie, un nombre compris entre 128 bits et 256 bits (généralement 256 bits). Il existe donc au sein des entropies de 256 bits sur Bitcoin un nombre de possibilités constitué de 78 chiffres, c'est un nombre de possibilités très grand, cela permet d'assurer la diversité des wallets .


Le nombre de bits choisi dépendra du nombre de mots que l'on souhaite avoir dans la phrase de récupération (ou mnémonique). Une entropie de 256 bits donnera une phrase de récupération de 24 mots. Nous vous conseillons d'opter pour ce type d'entropie, une entropie plus courte étant moins sécurisée.


Tableau comparaison taille entropie + checksum


Au plus ce nombre généré est aléatoire, au plus votre portefeuille sera sécurisé. Ce nombre aléatoire permettra par la suite d'accéder à l'intégralité de votre wallet. Si ce nombre est compromis, ou si la génération ne se fait pas de manière assez aléatoire, il y a une possibilité de vols de vos bitcoins.


Le premier choix qui se porte à vous est de laisser votre portefeuille générer cette entropie pour vous. Dans ce cas, il est essentiel d'opter pour des softwares (et firmwares pour vos hardwares wallets) open source ou sources vérifiables et réputés. C'est la garantie que de nombreux développeurs aient vérifié que l'entropie est suffisamment aléatoire.


Les hardwares wallets que nous avons testé et qui répondent à cette exigence sont : Trezor One, Coldcard MK3 (MK4) et Passport V2. La Trezor est plutôt conseillée aux utilisateurs débutants, la Coldcard et le Passport sont conseillés aux utilisateurs intermédiaires à avancés.


Le deuxième choix possible est de générer vous même cette entropie. Si c'est ce que vous souhaitez faire, nous avons rédigé un article traitant entièrement de ce sujet : Comment générer soi-même sa phrase mnémonique Bitcoin ?


Dérivation mnémonique



La phrase mnémonique et la graine.


A partir de ces 264 bits, le portefeuille va définir une phrase mnémonique de 24 mots en se fiant à la liste donnée au sein de BIP39. Ces 24 mots représenteront donc un encodage de la graine du portefeuille. Ils permettent de faciliter sa mémorisation et son stockage au vu de la reconstruction du portefeuille suite à un problème quelconque.


L'utilisateur doit porter une attention toute particulière au stockage de cette phrase.


Les 264 bits de la mnémonique vont donc également servir à dériver une graine (ou seed). Pour ce faire, le portefeuille va appliquer la fonction de dérivation de clé PBKDF2 (Password-Based Key Derivation Function 2).


Le PBKDF2 permet d'appliquer une fonction choisie à un mot de passe avec un sel cryptographique, et de répéter cette opération un grand nombre de fois, afin d'obtenir une clé.


Dans le cas de Bitcoin, la fonction utilisée est HMAC-SHA512 et le sel cryptographique est la fameuse Passphrase. Cette fonction est utilisée 2048 fois sur la mnémonique afin d'en sortir une clé de 512 bits : la graine.


Dériver la graine



Pourquoi utiliser une seed ?


Un portefeuille Bitcoin est simplement un ensemble de clés privées permettant de débloquer des bitcoins. Pour rappel, les bitcoins ne sont pas "stockés" sur votre portefeuille mais sur la chaîne Bitcoin. Ils sont représentés par des UTXOs (Unspent transaction output) qui sont simplement pleins de petits morceaux de bitcoins.


Les premiers portefeuilles Bitcoin étaient simplement constitués d'un agglomérat anarchique et aléatoire de clés privées. On les appelle les portefeuilles JBOK (Just a Bunch of Keys).


Les portefeuilles Bitcoin utilisés aujourd'hui par une extrême majorité d'utilisateurs sont les portefeuilles déterministes hiérarchiques (HD). Au lieu de générer des clés privées de manière aléatoire, ils permettent de dériver toutes les clés d'un portefeuille à partir de la graine. Cette graine permet donc en une seule sauvegarde d'avoir accès à l'intégralité d'un portefeuille Bitcoin.




Les clés étendues.


Nous en sommes donc pour le moment à la graine. Voyons maintenant comment dériver les clés étendues.


La graine va être maintenant être passée dans la fonction HMAC-SHA512. Il en ressortira un condensat de 512 bits. Ce condensat va être séparé en deux, les premiers 256 bits et les derniers 256 bits.


Les 256 bits de gauche représenteront la clé privée maîtresse et les 256 bits de droite seront le code de chaîne maître.


Dériver la clé maitresse et le code de chaine maitre


Le code de chaîne intervient dans la dérivation des clés enfants. Il est impossible de dériver des clés sans en avoir la connaissance. Il permet d'introduire des données pseudo aléatoires dans le processus de dérivation. C'est ce qui permet de ne pas pouvoir dériver de clés sœurs en ayant connaissance simplement d'une clé enfant.


Ces deux informations sont regroupées afin de n'en constituer plus qu'une : la clé privée étendue. Cette clé est souvent nommée XPRV étant donné qu'elle commence par ces quatre lettres.


Nous allons également pouvoir dériver une clé publique étendue en ajoutant la clé publique dérivée de la clé privée maîtresse utilisant ECDSA et le code de chaîne maître. Cette clé publique étendue est généralement nommée XPUB étant donné qu'elle commence par cette suite de caractères.


Dérivation des clés étendues



Conclusion.


Dans cet article nous nous arrêtons aux clés étendues. Pour découvrir comment sont utilisées ces clés étendues pour obtenir des adresses Bitcoin, nous vous suggérons de lire cet article : Clé privée, clé publique et adresse Bitcoin.




Pour aller plus loin :