Qui a vraiment envoyé ce document ?
Une signature numérique prouve qui a envoyé un message et que personne ne l’a modifié en route. Un certificat relie une clé publique au nom de son propriétaire.
Quand votre navigateur affiche un cadenas, il a vérifié les deux. Sans eux, n’importe qui pourrait se faire passer pour votre banque.
À la fin de cette leçon
Remarque
Je peux expliquer comment une signature et un certificat prouvent qui a envoyé un message.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Signature numérique | une empreinte chiffrée avec la clé privée de l’auteur |
| Authenticité | le fait de savoir qui est l’auteur d’un message |
| Certificat | un document qui lie une clé publique à un nom |
| Autorité de certification | un organisme de confiance qui signe des certificats |
| Chaîne de confiance | la suite de certificats qui mène jusqu’à une autorité connue |
| Code d’authentification (HMAC) | une empreinte calculée avec une clé secrète partagée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une signature se fait avec la clé privée
Pour signer, l’auteur calcule l’empreinte du message, puis la chiffre avec sa clé privée. Le résultat est la signature, envoyée avec le message.
Pour vérifier, le lecteur déchiffre la signature avec la clé publique de l’auteur. Il compare avec sa propre empreinte du message. Si elles sont égales, le message est authentique et intact.
Signer l’empreinte 65 avec la clé privée
python3 -c "print(pow(65, 2753, 3233))"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.
Vérifier la signature avec la clé publique
python3 -c "print(pow(588, 17, 3233))"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é : une signature jouet
| Étape | Calcul | Résultat |
|---|---|---|
| Clés jouets | n = 3233, publique e = 17, privée d = 2753 | Les mêmes que dans la leçon précédente |
| Empreinte du message | On suppose qu’elle vaut 65 | 65 |
| Signature | 65 puissance 2753 modulo 3233 | 588 |
| Vérification | 588 puissance 17 modulo 3233 | 65, égale à l’empreinte : valide |
| Message modifié | Nouvelle empreinte, par exemple 66 | 66 est différent de 65 : refusée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Erreur fréquente
Attention
Beaucoup de gens pensent qu’une signature cache le message. Elle ne cache rien : le message reste lisible. La signature prouve seulement l’auteur et l’intégrité. Pour cacher le message, on le chiffre en plus.
Un certificat relie clé et nom
Une signature prouve qu’un détenteur de clé privée a écrit le message. Mais qui est ce détenteur ? Un fraudeur peut publier sa propre clé en disant qu’elle est celle de votre banque.
Un certificat règle ce problème. Il contient un nom, une clé publique et une date de fin. Il est signé par une autorité de certification qui a vérifié l’identité du propriétaire.
Une chaîne mène à une racine connue
Le certificat d’un site est signé par une autorité intermédiaire. Le certificat de celle-ci est signé par une autorité racine. Votre navigateur ou votre système connaît d’avance une liste d’autorités racines.
Pour croire un site, on remonte la chaîne. Chaque signature doit être valable et chaque certificat en cours de validité. La chaîne finit par une racine connue.
Le cadenas ne prouve pas l’honnêteté
Attention
Beaucoup de gens pensent que le cadenas prouve qu’un site est digne de confiance. Il prouve seulement que la connexion est chiffrée et que le site possède bien le nom affiché. Un site frauduleux peut avoir un nom à lui et un certificat valable.
Un HMAC authentifie avec une clé partagée
Quand deux machines partagent déjà une clé secrète, elles n’ont pas besoin de paire de clés. L’une calcule une empreinte du message avec cette clé : c’est un code d’authentification, ou HMAC. L’autre refait le calcul et compare.
Un HMAC prouve l’intégrité et l’auteur, mais seulement entre ceux qui partagent la clé. Il ne prouve rien à un tiers.
Un HMAC de virement 50
python3 -c "import hmac, hashlib; print(hmac.new(b'cle', b'virement 50', hashlib.sha256).hexdigest()[:16])"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.