Chapitre 02 : Clés privées/publiques, signatures et adresses bitcoin

Quand quelqu’un dit qu’il possède des bitcoins, cela signifie généralement qu’il connait une clé privée correspondant à une adresse Bitcoin qui a une ou plusieurs transactions en sortie.

Clés privées et clés publiques

Bitcoin utilise la cryptographie à clé publique pour créer une paire de clés (l’une est privée, l’autre publique) qui vous permet de contrôler l’accès à vos Bitcoins. La clé publique (qui est calculée à partir de la clé privée) permet de recevoir des fonds et la clé privée est utilisée pour signer les transactions que vous voulez envoyer au réseau Bitcoin.

Voici un exemple de clé privée : 000000000004095e11b023c125081cec00d001400c820f421a21000c00000000 et voici un exemple de clé publique : 042123fe621e3b2cf6ddb231aa7c8203aeb06ff0ae836c2097bfa6f6a45f15cb3b6d68f2421bb5465585a5fb4ba60b492d7f780baee9981466c7a63a21abadabe8

Avec ce système, chaque nœud du réseau qui va recevoir une transaction pourra vérifier que la signature est valide, car la transaction contiendra la signature (réalisée avec la clé privée) et la clé publique. La signature permet à n’importe qui de valider que les bitcoins que vous souhaitez utiliser dans la transaction signée vous appartiennent bien !

La clé privée porte bien son nom : vous ne devez jamais la divulguer et elle est généralement stockée de manière sécurisée dans ce qu’on appelle un portefeuille (wallet).

Si vous souhaitez que l’on vous envoie des Bitcoins via une transaction, vous allez donner votre adresse Bitcoin qui est un hachage (double hachage pour être exact) de votre clé publique.

Quand il va vouloir dépenser un Bitcoin (une sortie), le propriétaire va présenter une transaction comprenant sa clé publique et une signature qui sera créée avec sa clé privée. La signature est générée à partir du contenu complet de la transaction et c’est ce qui garanti que rien dans la transaction qui arrive au réseau bitcoin n’a été altéré.

Note : la majorité des destinataires des transactions sont des adresses Bitcoin, mais en réalité, le destinataire est un script, la plupart du temps, on met un script que l’on peut débloquer si on connait la clé privée correspondante, mais comme on le verra par exemple pour le réseau lighting, on peut avoir des scripts complexes.

Génération

  • La clé privée est un nombre généré au hasard entre 0 et 2^256.
  • Avec la clé privée, en utilisant la fonction cryptographique courbe elliptique, on va générer la clé publique.
  • Avec la clé publique, en utilisant SHA256 puis RIPEMD160, on va générer l’adresse Bitcoin qui sera encodé en Base58Check (qui va d’ailleurs ajouter un checksum au passage).

Ceci est très facile à calculer dans ce sens (clé privée → clé publique → adresse bitcoin) mais quasiment impossible de le faire en sens inverse (adresse bitcoin → clé publique → clé privée), c’est sur ce point que repose la sécurisation du système.

Votre adresse Bitcoin, vous pouvez la distribuer à tout le monde, c’est un peu comme les champs “à l’ordre de” sur un chèque.

Note : faites attention, la clé privée doit vraiment être choisie au hasard au risque de perdre tous vos bitcoins, il existe de nombreuses normes, outils et autres pour être sûr de faire d’un choix réellement aléatoire.

Concepts avancés

BIP-38

BIP-38 est un standard qui permet d’encrypter une clé privée à l’aide d’une “passphrase” de façon à ce que vous puissiez sauvegarder votre clé sur un support qui pourrait lui-même être “consulté” par un tiers.

Avec ce standard, vous partez d’une clé privée (encodée en WIF) avec le prefixe 5. On y ajoute une passphrase (la plupart du temps, une liste de mots) et cela donne en résultat une chaine en Base58Check qui commence par 6P. Donc si vous voyez une clé privée qui commence par 6P, vous allez avoir besoin de la passphrase pour la transformer en une clé privée.

P2SH

Les addresses Bitcoin traditionnelles commencent par un 1. Les bitcoins stockés à cette adresse peuvent être déverrouillés en présentant le hash de l’adresse publique ainsi qu’une signature faite avec la clé privée correspondante.

Les adresses Bitcoin commençant par un 3 sont des addresses pay-to-script hash. Au lieu d’avoir un bénéficiaire qui soit le propriétaire de l’adresse, le bénéficiaire est un hash de script. L’adresse est créée à partir du code du script qui définit qui peut dépenser l’ouput d’une transaction.

Comme nous le verrons pour le Lighting network, l’utilisation la plus classique de P2SH est pour ce qu’on appelle les adresses multisig qui permet d’avoir X signatures sur Y pour dépenser un output. Par exemple, si vous étiez une fratrie de 3, vous pourriez vouloir n’utiliser les fonds de la famille que si 2 sur 3 de la fratrie sont ok pour signer.