Signatures et transactions

L'importance des signatures numériques

Les signatures digitales sont utilisées par la blockchain mais qu'est-ce que c'est et à quoi ça sert ?

Une signature numérique est un mécanisme utilisé pour identifier l'expéditeur d'un message et qui permet de vérifier que le message n'a pas été modifié depuis son envoi.

Elle est donc utilisée pour vérifier l'authenticité d'un contenu au sens large : on peut utiliser les signatures numériques sur les e-mails, fichiers et autres contenus numériques.

Pour que le destinataire puisse vérifier qu'on est bien l'expéditeur et que le message n'a pas été altéré, on va lui transmettre une clé publique et la signature du message.

On se sert des signatures digitales dans la blockchain pour vérifier les transactions, c'est pourquoi il est primordial de comprendre comment ça marche.

Analogie avec le chèque de banque

Faisons l'analogie avec le système bancaire traditionnel et le chèque de banque : lorsque vous souhaitez régler par chèque, il est important de mentionner le nom du bénéficiaire, le montant du règlement et surtout de signer le chèque.

Le bénéficiaire n'aura plus qu'à l'endosser et le déposer à la banque.

La banque est ensuite dans l'obligation de vérifier la signature et s'assurer qu'elle est valide. Dans le cas contraire, le compte ne sera pas débité.

Avec la blockchain, c'est presque la même chose ! La différence c'est qu'il n'y a pas d'autorité centrale car c'est décentralisé et le nom du bénéficiaire est remplacé par l'adresse publique.

Donc on a besoin d'un système pour vérifier que la signature d'une transaction est valide et c'est là qu'intervient la cryptographie asymétrique avec le mécanisme des signatures digitales !

Cryptographie asymétrique : clé privée, clé publique et signature

La cryptographie asymétrique utilise deux clés (paire de clés), dont l'une est publique et l'autre privée. Les deux sont reliées entre elles mais il est impossible de deviner la clé privée à partir de la partir de la clé publique.

En informatique elles sont souvent représentées au format hexadécimal.

Exemple de clé privée (hex) : 01be7c8b2e769c508a42846f4d7380fef644f0fce815023dbcbe9fdeefd09103

Si on s'y intéresse plus en détails, une clé privée ou publique dans la blockchain est un point sur une courbe elliptique (pour Bitcoin la courbe utilisée est ECDSA et on utilise les paramètres secp256k1).

La clé privée est utilisée pour déchiffrer les données qui ont été chiffrées avec la clé publique correspondante. Elle sert également à produire des signatures digitales à partir d'un message.

La clé publique permet de chiffrer un message qui ne sera lisible que par le détenteur de la clé privée associée. Elle permet aussi de vérifier une signature et un message pour vérifier son authenticité.

Comprendre en pratiquant (démo)

Nous vous invitons à essayer la démo interactive qui va suivre.

Instructions :

  1. Écrivez n'importe quoi dans le cadre "Message"
  2. Signez le message (bouton "Signer le message")
  3. Changez d'onglet : allez dans "Vérifier"
  4. Cliquez sur le bouton "Vérifier le message" en bas à droite
  5. Le message est valide !
  6. Maintenant, modifiez le message (toujours en restant sur le même onglet)
  7. Re-cliquez sur le bouton de vérification
  8. Vous constatez que le message n'est plus valide ! La signature ne correspond pas au message modifié : l'expéditeur n'a pas écrit cela (vérification effectuée avec la clé publique et la signature).

N'utilisez jamais la clé privée générée par cette maquette en dehors du cadre éducatif : pas d'import dans un vrai wallet !

La génération pseudo-aléatoire depuis le navigateur n'est pas suffisante pour garantir un niveau de sécurité acceptable.

Vous devez utiliser un logiciel dédié à cet usage.

Qu'est-ce qu'une adresse publique ?

Une adresse publique est une suite de caractères utilisée pour recevoir des bitcoins de la part d'autres personnes, on peut la comparer à une boite postale ou à l'IBAN du système bancaire traditionnel.

Seul le détenteur de la clé privée est le propriétaire des fonds associés, puisque c'est le seul qui sera en mesure de produire une signature valide : c'est lui qui peut transmettre un ordre de virement au réseau.

L'adresse publique est créée à partir de la clé publique, on ne peut pas deviner la clé publique à partir de l'adresse seule.

Et après ?

Dans les prochains chapitres, vous aurez plus de détails sur le procédé de création d'une adresse publique à partir d'une clé publique.

Ce sont des chapitres bonus et ils sont facultatifs : si vous êtes arrivé jusqu'ici, vous avez déjà acquis de solides connaissances sur le principe de fonctionnement technique d'une blockchain.