Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Signature numérique et propriété

Après cette leçon: Je peux expliquer comment une signature montre qui a envoyé un paiement.

Leçon de 60 min1 commandeLab blockchain : une chaîne jouet en Python à lire, casser, miner et signer

Comment une signature numérique prouve qui paie ?

Une signature numérique montre qu’un message vient bien du détenteur d’une clé secrète, et que personne ne l’a changé. Sans elle, n’importe qui peut écrire « Camille paie Hugo 5 € » dans le registre.

Vous allez voir une signature faite uniquement de hachages, assez simple pour être lue en entier.

À la fin de cette leçon

Remarque

Je peux expliquer comment une signature montre qui a envoyé un paiement.

Mots-clés

MotCe que ça veut dire
Clé secrètece que seul le propriétaire connaît : elle sert à signer
Clé publiquece que tout le monde peut connaître : elle sert à vérifier
Signatureune preuve attachée à un message, qui ne marche que pour ce message
Usage uniqueune paire de clés qui ne doit signer qu’un seul message
Vérifiercontrôler une signature avec la clé publique, sans connaître la clé secrète

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une clé secrète signe, une clé publique vérifie

Le registre contrôle le solde, mais il ne sait pas qui a écrit la ligne. Hugo pourrait écrire « Camille paie Hugo 5 » lui-même. Le paiement doit être signé.

Camille garde sa clé secrète et publie sa clé publique. Les autres reçoivent le message, la signature et la clé publique. Si la vérification réussit, seule Camille a pu signer.

Une signature faite seulement de hachages

Le labo utilise une signature à usage unique, faite de hachages. La clé secrète est 256 paires de nombres secrets : un pour le bit 0 et un pour le bit 1. La clé publique est l’empreinte de chacun.

On hache le message, ce qui donne 256 bits. Pour chaque bit, on révèle un secret de la paire : celui qui correspond à la valeur du bit.

Le labo signe un message et le vérifie

Le script sign.py du labo fabrique une paire de clés, signe un message, puis vérifie. Attention : il écrit des mots anglais, comme « public key », « signature » et « revealed secrets ».

Il change ensuite une lettre du message et vérifie la même signature.

Signer et vérifier un message

Commande
docker exec jupyter python3 steps/sign.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : un message de quatre bits

PositionBit du messageSecret révéléCe que le vérificateur compare
01le secret 1 de la paire 0son empreinte avec la clé publique 1 de la paire 0
10le secret 0 de la paire 1son empreinte avec la clé publique 0 de la paire 1
21le secret 1 de la paire 2son empreinte avec la clé publique 1 de la paire 2
31le secret 1 de la paire 3son empreinte avec la clé publique 1 de la paire 3

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Comment lire les quatre lignes affichées

La clé publique compte 256 paires d’empreintes. La signature compte 256 secrets révélés : un par bit. Le message signé donne True.

Avec une lettre changée, les bits du message changent, la signature ne correspond plus, et le résultat est False.

Pourquoi personne ne peut falsifier la signature

Un message de quatre bits est inventé pour la leçon. Avec SHA-256, il y en a 256.

Le vérificateur ne voit qu’un secret par paire. Pour un autre message, il faudrait connaître le secret de l’autre côté de la paire. Il ne le connaît pas, et on ne retrouve pas un secret à partir de son empreinte.

Les bits d’un message avec SHA-256

Code: python
import hashlib


def bits(message):
    empreinte = hashlib.sha256(message.encode()).hexdigest()
    nombre = int(empreinte, 16)
    # 256 chiffres binaires, avec des zéros devant si besoin
    return format(nombre, "0256b")


print(bits("Camille paie Hugo 5")[:12])
print(bits("Camille paie Hugo 6")[:12])

Un chiffre changé donne d’autres bits

Le programme affiche 110110100010, puis 110111000001. Les douze premiers bits ne sont pas les mêmes.

Pour la signature, ce sont les bits qui décident des secrets à révéler. Un autre message demande donc d’autres secrets.

Erreur fréquente

Attention

On croit que l’on peut signer plusieurs messages avec la même paire de clés. Avec cette signature, non : chaque signature révèle la moitié des secrets. Après deux messages, un tiers peut en combiner d’autres. C’est un jouet pour comprendre, pas un outil à utiliser.

À propos de ce labo et de sa source: Lab blockchain : une chaîne jouet en Python à lire, casser, miner et signer

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.