Comprendre les 12 (ou 24) mots d’un portefeuille Bitcoin

0
476

Le fondement de l’auto-souveraineté proposée par Bitcoin c’est le contrôle de vos clés privées. Sans cela, d’une manière ou d’une autre, vous abandonnez la propriété de votre argent à quelqu’un d’autre. « Not your keys, not your coins » comme dit l’adage. 

Les personnes qui ne connaissent pas ses fondements techniques de Bitcoin se demandent souvent « où » se trouvent réellement vos bitcoins. Quand on leur parle de « portefeuille Bitcoin », ils imaginent un endroit où sont conservés leurs satoshis. Mais votre « portefeuille » Bitcoin ne contient pas réellement vos BTC, il stocke simplement vos clés privées. Vos bitcoins ne sont que des entrées de données sur un registre – la TimeChain – hébergé par toutes les personnes participant au réseau. Lorsque vous dépensez vos bitcoins, vous proposez en réalité une mise à jour des données stockées sur la TimeChain. Une clé privée permet au protocole de garantir que vous, et vous seul, pouvez autoriser une mise à jour du registre dans laquelle vous dépensez vos bitcoins.

Qu’est-ce qu’une clef privé ? 

Une clé privée c’est simplement un très grand nombre. Voilà par exemple une clé privée en binaire :

11100010110110010111101111000001010001000000100010011110101110110101011101110011111111111010101110100101110100111010011100101001101111010001100001111101011110011010010111100110111010000011011011011100011010001100011110100010010011110110101010110011 01101010

Il s’agit donc d’une suite aléatoire de 256 « 1 » et « 0 ». Ce nombre aléatoire est ce qui sécurise vos bitcoins. Cela n’a peut-être l’air de rien, mais c’est son caractère aléatoire qui garantit la sécurité de votre portefeuille. Il existe presque autant de clés privées Bitcoin possibles qu’il y a d’atomes dans l’univers visible. C’est le nombre de possibilités qu’un ordinateur devrait calculer pour générer et cataloguer toutes les clés privées potentielles. Tant que le processus utilisé pour générer les clés est véritablement aléatoire, vos clés sont donc en sécurité.

Voici à quoi ressemble une clé privée en hexadécimal (le binaire utilise deux chiffres pour coder un nombre, 1 et 0, l’hexadécimal utilise 16 chiffres, 0-9 et A-F) :

E2D97BC144089EBB5773FFABA5D3A729BD187D79A5E6E836DC68C7A24F6AB36A

Voici à quoi ressemble une clé privée au format WIF (Wallet Import Format) non compressé :

5KYC9aMMSDWGJciYRtwY3mNpeTn91BLagdjzJ4k4RQmdhQvE98G

Le format WIF était utilisé au début de Bitcoin. À cette époque, vous pouviez générer une clé privée à la fois, puis générer la clé publique à partir de celle-ci. Le processus de génération d’une clé publique n’est essentiellement que la multiplication de très grands nombres, mais il y a un peu plus que cela. Toutes les clés publiques sont un point x et y sur d’une très grande courbe. Dans le cas de Bitcoin, il s’agit de la courbe Secp256k1. Cette courbe permet de générer une clé publique à partir d’une clé privée en établissant une relation mathématique que vous seul connaissez, elle permet également de signer des transactions.

Voilà une clé publique non compressée. Elle comporte 130 caractères (0-9 A-F):

0425ECF32B258DCF90D397A555A45185F8C381F3A99661F08F0908630FDDCAA50AD6EF7E47CAEDDE1AB2C2E84C437355CD27024D2D3594510F981CAB18C3887CFC

Il est très courant de compresser des clés publiques en 66 caractères (0-9 A-F]) :

0225ECF32B258DCF90D397A555A45185F8C381F3A99661F08F0908630FDDCAA50A

Lorsque vous signez une transaction avec votre clé privée, cela se résume à une simple multiplication. En générant un nombre aléatoire (le nonce) et en l’utilisant ainsi que votre clé privée pour multiplier le hachage de la transaction que vous signez, vous produisez la signature (qui est composée de deux valeurs, r et S). Cela permet à quelqu’un d’exécuter un algorithme pour vérifier que le message a été signé par la clé privée appropriée sans révéler cette clé. Ce qui garantit que vous seul pouvez autoriser la dépense de vos bitcoins, c’est principalement la multiplication de très grands nombres.

Evidemment, cela pourrait sembler quelque peu intimidant. Mais aujourd’hui la plupart des utilisateurs n’utilisent plus ces formats compliqués mais des suites de mots intelligibles, appelées « seed phrases » ou « phrases mnémoniques ».

Les graines mnémoniques BIP39

Les graines mnémoniques (Mnemonic seeds ou seed phrases) ont été créées pour simplifier l’interaction avec les clés privées.

Comme nous l’avons vu précédemment, les clés privées ne sont, en fin de compte, qu’une longue série de 1 et de 0 générés de manière aléatoire. Si vous faites une copie d’une clé privée dans un tel format, les risques d’erreurs de transcription sont importants :

11100010110110010111101111000001010001000000100010011110101110110101011101110011111111111010101110100101110100111010011100101001101111010001100001111101011110011010010111100110111010000011011011011100011010001100011110100010010011110110101010110011 01101010

Il suffirait d’une seule erreur lors de la copie d’un chiffre pour rendre inutile la sauvegarde de vos clés. C’est là que les graines mnémotechniques sont utiles. Une suite de 256 « 1 » et « 0 » ce n’est pas une manière pratique d’interagir avec des informations sensibles. Une mauvaise inscription d’un seul chiffre entraîne la perte de l’accès à votre compte.

Désormais, on utilise des suites de mots :

truck renew fury donkey remind laptop reform detail split grief because fat

Voilà une suite beaucoup plus facile à gérer, n’est-ce pas ? Simplement 12 (ou 24) mots. Il s’agit d’un simple schéma de codage, tout comme le binaire ou l’hexadécimal.

Chacun des 12 ou 24 mots d’une graine mnémonique est un nombre binaire dans un schéma de codage correspondant à des chaînes spécifiques de 1 et de 0 à des mots. Si nous revenons à l’exemple de clé privée WIF citée plus tôt, il s’agissait d’un nombre codé dans un schéma de codage spécifique, dans ce cas, la base 58, qui utilise tous les chiffres et lettres de l’alphabet sauf 0 et 1, et O et l (sensible aux majuscules et minuscules). Ces caractères ont été exclus pour diminuer les erreurs de transcription (en confondant un 1 pour un l, ou un 0 pour un O). Les formats bech32 et bech32m, utilisés par Segwit et Taproot, utilisent uniquement cet ensemble de caractères : qpzry9x8gf2tvdw0s3jn54khce6mua7l.

La proposition d’amélioration Bitcoin 39 (BIP 39) a introduit un schéma de codage standardisé dans lequel chaque mot d’un dictionnaire spécialement conçu correspond par ordre alphabétique à un nombre binaire compris entre 00000000001 et 11111111111. La graine de démonstration ci-dessus correspond à ceci :

truck: 11101001001

renew: 10110110001

fury: 01011110011

donkey: 01000001001

remind: 10110101110

laptop: 01111101000

reform: 10110100010

detail: 00111100010

split: 11010010001

grief: 01100110100

because: 00010011110

fat: 01010011011

En binaire, cela ressemble à ceci :

11101001001 10110110001 01011110011 01000001001 10110101110 01111101000 10110100010 00111100010 11010010001 01100110100 00010011110 0101001 1011

Il y a 2048 mots, qui correspondent chacun à une chaîne spécifique de 11 chiffres de 1 et de 0 afin de permettre aux utilisateurs d’interagir plus facilement avec leurs clés privées. Lorsque vous générez un nombre aléatoire pour votre clé privée, votre portefeuille découpe ce nombre en morceaux de nombres binaires à 11 chiffres et les relie à des mots du dictionnaire mnémonique BIP 39. C’est toujours le même grand nombre, mais vous pouvez désormais le lire sous forme de mots en anglais. Étant donné que votre cerveau est beaucoup plus habitué à ce format qu’aux longues chaînes de 1 et de 0, cela réduit considérablement les risques d’erreurs de transcription entrainant une perte de fonds.

Vous avez peut-être remarqué que dans le codage binaire brut de la graine de mot ci-dessus, il y a quatre chiffres (1011) isolés, et le dernier « mot » ne comporte moins de chiffres. Il s’agit d’une somme de contrôle pour garantir qu’une phrase de départ est valide. Lorsque vous générez votre nombre aléatoire, il n’y a pas suffisamment de chiffres pour le mapper exactement à 12 (ou 24) mots. Le portefeuille hache les chiffres existants que vous avez générés et prend les premiers chiffres du hachage pour les ajouter à la fin de votre nombre aléatoire. Cela vous donne suffisamment de chiffres pour correspondre au dernier mot.

Ce dernier mot vous permet d’effectuer un contrôle de sécurité sur les copies de votre graine. Si vous faites une erreur entrant votre graine mnémonique dans un portefeuille, la somme de contrôle ne correspondra pas. Chaque graine de 12 ou 24 mots a plusieurs mots de contrôle potentiellement valides, mais si le dernier mot ne correspond pas à la somme de contrôle d’une graine correcte, votre portefeuille vous avertira qu’il est invalide. Cela donne aux utilisateurs un moyen intuitif mais néanmoins mathématique de garantir que leurs sauvegardes sont correctes, contrairement au processus compliqué de transcription et de sauvegarde des nombres binaires bruts.

La sélection des mots spécifiques de la liste est même allée jusqu’à garantir qu’aucun des 2048 mots n’ait les mêmes quatre premières lettres. Cela a été fait pour réduire le risque que des personnes commettent des erreurs de transcription en confondant des mots similaires et en se retrouvant avec une sauvegarde incorrecte de leurs clés privées.

Traduire ces mots en un ensemble de plusieurs clés privées/publiques est assez simple. Votre graine mnémonique est hachée à l’aide de SHA512, qui génère un hachage de 512 « 1 » et « 0 » individuels. La moitié de cette sortie est utilisée comme clé privée réelle et l’autre moitié est utilisée comme entrée dans SHA512 avec un numéro d’index et la clé privée ou publique existante pour générer une nouvelle paire de clés. Vous pouvez le faire autant de fois que vous le souhaitez pour générer de nouvelles clés privées/publiques qui peuvent toutes être récupérées à partir de votre seule phrase mnémonique.

Cela garantit que vous pouvez gérer vos clés privées aussi facilement et avec autant de sécurité que possible avec un moindre risque de commettre une erreur qui vous fera perdre votre argent. Et tout cela a été fait en utilisant les mathématiques ! J’espère que vous comprenez maintenant bien pourquoi les gens disent que Bitcoin c’est de la monnaie « sécurisé par les mathématiques ».

Traduction d’un article de SHINOBI publié le 8 mars 2024 sur bitcoinmagazine.com