Comment les adresses Bitcoin sont-elles créées ?
Les adresses sont au cœur du fonctionnement des transactions Bitcoin. Elles sont des encodages de clés publiques.
De la clé publique à l’adresse
Générer une adresse Bitcoin requiert avant tout une clé publique qui va de paire avec une clé privée.
Les deux clés sont créées ensemble à l’aide de la cryptographie sur les courbes elliptiques. La courbe utilisée dans le protocole Bitcoin s’appelle secp256k1.
Les clés sont essentiellement de grands nombres reliés par une relation mathématique obtenue grâce à cette courbe elliptique.
L’équation de la courbe elliptique secp256k1 est telle que chacune des clés obtenues fait 256 bits au maximum. Au lieu de l’exprimer en chiffres, on utilise le format hexadécimal. On parle de format en base16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F).
Les clés de 256 bits en hexadécimal ont une longueur de 64 caractères. Exemple de clé privée en hexadécimal :
e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262
En décimal (base10):
105627842363267744400190144423808258002852957479547731009248450467191077417570
En binaire (base2):
1110100110000111001111010111100111000110110110000111110111000000111110110110101001
0101110111100001100011001100111000100111110100010001010011001000010011001100000011
11011010011000011111001000001011110101100111111111000010001100111010101000110011001001100010
La clé exprimée en binaire fait 256 bits (256 0 ou 1), vous pouvez compter.
La clé publique correspondante est (en hexadécimal):
02588d202afcc1ee4ab5254c7847ec25b9a135bbda0f2bc69ee1a714749fd77dc9
Les clés publiques sont souvent confondues avec les adresses, à tort. Cela fait longtemps que l’on utilise des adresses à la place des clés publiques pour réaliser des transactions.
Les clés publiques sont désormais offusquées derrière des « adresses ». Voici le processus de transformation d’une clé publique en adresse :
1) Passer la clé publique dans SHA-256.
2) Passer le hash obtenu dans RIPEMD-160 (qui est aussi une fonction de hachage).
3) Ajouter au début de ce hash le code correspondant au type d’adresse.
4) Repasser le tout dans SHA-256.
5) Repasser encore une fois dans SHA-256.
6) Prendre les quatre premiers octets du hash (checksum) et les ajouter au hash obtenu à l’étape 3.
7) Convertir l’adresse au format base58.
Qu’est-ce que SHA-256, RIPEMD-160, Base58 ?
SHA-256 pour « Secure-Hash Algorithm ». Cette fonction donne un hash de 256 bits quoiqu’on lui donne en entrée.
Il s’agit d’une fonction à sens unique. Impossible donc de deviner ce qui a été apporté en entrée à partir du hash de sortie.
Si l’on donne en entrée « J’aimeBitcoin » dans SHA-256, on obtient ce hash :
d244eafee6196a053e89d91999d33adfdc46a82b0a595f32b65d11c69a2c13cc
Si l’on donne à la place « J’aimebitcoin » (avec un b miniscule), on obtient ce hash :
dcf280d6205d22f155ef5523bb39874801dc56125f34ad41a6965c3bc5d88a39
Le hash est complètement différent. C’est ce que l’on appelle « l’effet avalanche ». Une toute petite modification en entrée modifie drastiquement le résultat en sortie.
RIPEMD-160 est aussi d’un algorithme de hachage. Sauf que la longueur du hash n’est que de 160 bits.
Pourquoi utiliser deux algorithmes différents ?
RIPEMD-160 raccourcit la taille des hash. Cela permet de réduire la quantité de mémoire nécessaire pour faire tourner un nœud. La décentralisation du réseau s’en trouve renforcée. Cela permet aussi d’avoir des transactions moins lourdes et donc moins chères.
SHA-256 rajoute pour sa part un niveau de sécurité, contre la menace quantique par exemple.
Base58 sert à supprimer les caractères 0, O, I et l. Cela permet d’éviter les erreurs en les confondant à la lecture de l’adresse. Il raccourcit également un peu plus la longueur de l’adresse.
Enfin, le code du type d’adresse pour distinguer les différents types d’adresse. Liste complète ICI.
Exemple de création d’adresse
Il faut partir d’une clé publique :
02588d202afcc1ee4ab5254c7847ec25b9a135bbda0f2bc69ee1a714749fd77dc9
1) Entrer la clé publique dans SHA-256 qui va donner un hash de 256 bits :
9d302083dadf92b38dcb1c626c842602dbb091466e30ed2a4763cd8ac67c0a9f
2) Entrer ce hash dans RIPEMD-160 (qui est aussi une fonction de hachage donnant un hash de 160 bits) :
956e88bf3eda9fa4a228f55e10c9f8f7e2518f97
3) Ajouter le code de type de transaction au début du hash issu de RIPEMD-160 :
[00]956e88bf3eda9fa4a228f55e10c9f8f7e2518f97
4) Repasser dans SHA-256 :
77af09c704b3c235c504d17c69a5b22543567afcb86b0f6f6c89d978e8ef1f10
5) Repasser une deuxième dans SHA-256 :
3ca359f964d6629ec7c114a032826b2baf66bb35b4350ab82f5864a65a1cefab
6) Prendre les quatre premiers octets du hash (checksum) et les ajouter au hash obtenu à l’étape 3 :
[00]956e88bf3eda9fa4a228f55e10c9f8f7e2518f97[3ca359f9]
7) Convertir l’adresse au format base58.
1Ed86dcxMQqFkmF89n7PTRPUku7h25j5m2
Voilà. Cela ressemble fort à l’une des adresses se trouvant dans votre wallet, non ?
Soit dit en passant, le « checksum » permet au wallet de vérifier si une adresse fournie contient une erreur de frappe. Il serait dommage d’envoyer des BTC vers une mauvaise adresse.
Grâce au checksum, la probabilité d’entrer une mauvaise adresse est de seulement 1 sur 4,3 milliards. Ne craignez donc pas d’entrer une mauvaise clé.
Par ailleurs, le nombre de paires de clés Bitcoin pouvant être créées étant de 2^160. La probabilité qu’un chanceux reçoive ces BTC est quasiment nulle. Les BTC seront perdus à jamais.
Résumé
Il existe différents types d’adresses. Celui que nous venons de décrire s’appelle P2PKH (Pay-to-public-key-hash), ou adresse « Legacy ». Il s’agit du plus vieux type d’adresse. Elles commencent par « 1 ».
Il en existe bien d’autres types d’adresse, par exemple :
-Les adresses P2WPKH (Pay-to-Witness-Public-Key-Hash). Elles sont sont encodées en Bech32 plutôt qu’en base58 et commencent par « bc1 ».
-Les adresses P2SH (Pay-to-Script-Hash). Elles commencent par « 3 ».
En résumé, une paire de clés privée/publique est générée grâce à la cryptographie sur les courbes elliptiques. La clé publique passe ensuite à la moulinette de SHA-256, RIPEMD-160 et base58 pour créer une adresse. Cette dernière est une représentation de la clé publique.
Un ensemble d’adresses est appelé « wallet ». Ce dernier n’héberge pas de bitcoins à proprement parler, mais des clés privées.
Les adresses constituent l’information publiquement disponible servant à réaliser des transactions. En sachant que, concrètement, une transaction revient à créer un (ou plusieurs) UTXO.
Les UTXO sont des scripts (des petits bouts de code) liant d’une certaine quantité de BTC à une adresse (une clé publique) que les nœuds gardent jalousement en mémoire. Pour en savoir plus : UTXO et Privacy.
Seul celui qui possède la clé privée correspondant à la clé publique peut déverrouiller (signer) le script et réaliser une transaction, c’est-à-dire lier les BTC à une nouvelle adresse.
Maximisez votre expérience Cointribune avec notre programme 'Read to Earn' ! Pour chaque article que vous lisez, gagnez des points et accédez à des récompenses exclusives. Inscrivez-vous dès maintenant et commencez à cumuler des avantages.
Reporting on Bitcoin, "the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy".
Les propos et opinions exprimés dans cet article n'engagent que leur auteur, et ne doivent pas être considérés comme des conseils en investissement. Effectuez vos propres recherches avant toute décision d'investissement.