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
| Mot | Ce que ça veut dire |
|---|---|
| Clé secrète | ce que seul le propriétaire connaît : elle sert à signer |
| Clé publique | ce que tout le monde peut connaître : elle sert à vérifier |
| Signature | une preuve attachée à un message, qui ne marche que pour ce message |
| Usage unique | une paire de clés qui ne doit signer qu’un seul message |
| Vérifier | contrô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
docker exec jupyter python3 steps/sign.pyAffiché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
| Position | Bit du message | Secret révélé | Ce que le vérificateur compare |
|---|---|---|---|
| 0 | 1 | le secret 1 de la paire 0 | son empreinte avec la clé publique 1 de la paire 0 |
| 1 | 0 | le secret 0 de la paire 1 | son empreinte avec la clé publique 0 de la paire 1 |
| 2 | 1 | le secret 1 de la paire 2 | son empreinte avec la clé publique 1 de la paire 2 |
| 3 | 1 | le secret 1 de la paire 3 | son 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
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.