Signature numérique
Signature numérique et certificats SSL/TLS : principes, utilisation et manipulation avec OpenSSL.
Notions théoriques
Qu'est-ce qu'une signature numérique ?
Une signature numérique est un mécanisme cryptographique permettant de garantir l’authenticité, l’intégrité et la non-répudiation d’un message ou d’un document.
Une signature numérique repose sur la cryptographie asymétrique, qui utilise une paire de clés :
- Une clé privée pour signer le document.
- Une clé publique pour vérifier la signature.
Lorsqu’un document est signé :
- Un hachage du document est calculé.
- Ce hachage est chiffré avec la clé privée du signataire.
- La signature obtenue est jointe au document.
Lorsqu’un destinataire reçoit le document :
- Il déchiffre la signature avec la clé publique du signataire.
- Il recalcule le hachage du document.
- Il compare les deux hachages :
- S’ils sont identiques, la signature est valide.
- Sinon, le document a été modifié ou la signature est invalide.
Comment fonctionne la signature numérique ?
Une signature numérique repose sur la cryptographie asymétrique, qui utilise une paire de clés :
- Une clé privée (secrète) utilisée pour signer.
- Une clé publique (diffusée à tous) utilisée pour vérifier la signature.
1. Création de la signature numérique (par l’expéditeur)
Lorsqu’une personne (par exemple, Alice) veut signer un document :
-
Calcul du hachage :
- Un hachage (empreinte unique) du document est généré à l’aide d’un algorithme de hachage (comme SHA-256).
- Ce hachage est une suite de caractères unique qui représente le contenu du document.
- Exemple :
Hachage du document → 3a5f2b1c9d...
-
Chiffrement du hachage avec la clé privée :
- Alice chiffre ce hachage avec sa clé privée.
- Ce chiffrement produit la signature numérique.
- Exemple :
Signature numérique = Chiffrement(3a5f2b1c9d..., Clé privée d'Alice)
-
Ajout de la signature au document :
- La signature numérique est jointe au document.
- Alice envoie le document + la signature au destinataire (exemple : Bob).
2. Vérification de la signature (par le destinataire)
Lorsqu’une personne (Bob) reçoit le document signé, elle veut s’assurer que :
- Le document vient bien d’Alice.
- Le document n’a pas été modifié.
Voici comment Bob vérifie la signature :
-
Déchiffrement de la signature avec la clé publique :
- Bob utilise la clé publique d’Alice pour déchiffrer la signature.
- Cela lui permet d’obtenir le hachage original que Alice avait signé.
- Exemple :
Hachage déchiffré = Déchiffrement(Signature numérique, Clé publique d'Alice)
-
Recalcul du hachage du document :
- Bob applique le même algorithme de hachage sur le document reçu.
- Il obtient ainsi un nouveau hachage.
- Exemple :
Hachage recalculé du document → 3a5f2b1c9d...
-
Comparaison des deux hachages :
- Si le hachage déchiffré (provenant de la signature) est identique au hachage recalculé, alors :
✔️ La signature est valide → Le document est authentique et n’a pas été modifié. - Si les deux hachages sont différents, alors :
❌ La signature est invalide → Le document a été modifié ou la signature est fausse.
- Si le hachage déchiffré (provenant de la signature) est identique au hachage recalculé, alors :
Pourquoi cette méthode est sécurisée ?
-
Authenticité :
- Seule Alice possède la clé privée.
- Si la signature est valide, cela prouve que le document a bien été signé par Alice.
-
Intégrité :
- Si le document est modifié, son hachage changera.
- La comparaison des hachages échouera, indiquant une falsification.
-
Non-répudiation :
- Alice ne peut pas nier avoir signé le document, car seule elle possède la clé privée.
Exemple concret
Imaginons qu’Alice envoie un contrat signé à Bob :
- Alice signe le contrat avec sa clé privée.
- Bob utilise la clé publique d’Alice pour vérifier la signature.
- Si la signature est valide, Bob est sûr que :
- Le contrat vient bien d’Alice.
- Le contrat n’a pas été modifié.
Si quelqu’un essaie de modifier le contrat après la signature, la vérification échouera, car le hachage ne correspondra plus.
Certificats SSL/TLS
Les certificats SSL/TLS sont utilisés pour sécuriser les communications sur Internet.
Ils permettent de :
- Authentifier un site Web.
- Chiffrer les échanges entre un utilisateur et un serveur.
Un certificat SSL/TLS contient :
- Le nom du site Web.
- La clé publique du serveur.
- La signature numérique d’une autorité de certification (CA, Certificate Authority).
Les autorités de certification (CA) sont des organismes de confiance qui délivrent des certificats SSL/TLS.
Parmi les plus connues : Let’s Encrypt, DigiCert, GlobalSign.
Lorsqu’un utilisateur visite un site HTTPS :
- Le serveur envoie son certificat SSL/TLS.
- Le navigateur vérifie la signature du certificat auprès de l’autorité de certification.
- Si le certificat est valide, une connexion chiffrée est établie.
Exemple pratique
Il est possible de générer une paire de clés et de signer un fichier avec OpenSSL.
1. Générer une paire de clés RSA
openssl genpkey -algorithm RSA -out cle_privee.pem
openssl rsa -in cle_privee.pem -pubout -out cle_publique.pem
2. Signer un fichier
Créer un fichier message.txt
:
echo "Ce fichier est authentique" > message.txt
Signer le fichier avec la clé privée :
openssl dgst -sha256 -sign cle_privee.pem -out signature.bin message.txt
3. Vérifier la signature
openssl dgst -sha256 -verify cle_publique.pem -signature signature.bin message.txt
Si la signature est valide, OpenSSL affiche :
Verified OK
Si le fichier a été modifié, la vérification échoue.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L’objectif de ce TP est de manipuler les signatures numériques et les certificats SSL/TLS en utilisant OpenSSL.
L’exercice consiste à :
- Générer une paire de clés RSA.
- Créer un fichier texte et le signer numériquement.
- Vérifier l’authenticité de la signature.
- Simuler une modification du fichier et observer l’impact sur la signature.
- Créer un certificat auto-signé et l’examiner.
Chaque étape est détaillée avec les commandes à exécuter et une solution à la fin.
Étape 1 : Générer une paire de clés RSA
Une paire de clés RSA est nécessaire pour signer et vérifier un document.
La clé privée servira à signer, et la clé publique permettra de vérifier la signature.
Instructions :
- Ouvrir un terminal.
- Générer une clé privée RSA de 2048 bits :
openssl genpkey -algorithm RSA -out cle_privee.pem -pkeyopt rsa_keygen_bits:2048
- Extraire la clé publique associée :
openssl rsa -in cle_privee.pem -pubout -out cle_publique.pem
- Vérifier le contenu des fichiers générés :
cat cle_privee.pem
cat cle_publique.pem
- La commande
openssl genpkey
génère une clé privée RSA de 2048 bits et la stocke danscle_privee.pem
. - La commande
openssl rsa -pubout
extrait la clé publique et la stocke danscle_publique.pem
. cat cle_privee.pem
affiche la clé privée (ne jamais la partager).cat cle_publique.pem
affiche la clé publique (peut être partagée).
Étape 2 : Créer et signer un fichier
La signature numérique permet de garantir l’intégrité et l’authenticité d’un fichier.
Instructions :
- Créer un fichier texte contenant un message :
echo "Ce fichier est sécurisé et authentique." > message.txt
- Signer le fichier avec la clé privée :
openssl dgst -sha256 -sign cle_privee.pem -out signature.bin message.txt
- Afficher le contenu du fichier signé :
cat message.txt
- Examiner la signature générée (affichage en base64) :
base64 signature.bin
echo
crée un fichiermessage.txt
contenant un message simple.openssl dgst -sha256 -sign
génère une signature numérique et la stocke danssignature.bin
.base64 signature.bin
permet d’afficher la signature sous une forme lisible.
Étape 3 : Vérifier la signature
Une signature numérique est vérifiée en comparant le hachage du fichier avec le hachage décrypté depuis la signature.
Instructions :
- Vérifier la signature avec la clé publique :
openssl dgst -sha256 -verify cle_publique.pem -signature signature.bin message.txt
- Observer le résultat :
- Si la signature est valide, OpenSSL affiche "Verified OK".
- Si la signature est invalide, OpenSSL affiche "Verification Failure".
openssl dgst -sha256 -verify
utilise la clé publique pour vérifier que la signature correspond bien au fichiermessage.txt
.- Si le fichier n'a pas été modifié, la vérification réussit.
- Si le fichier a été altéré, la vérification échoue.
Étape 4 : Modifier le fichier et observer l’impact sur la signature
Une signature numérique est liée au contenu exact du fichier. Toute modification rend la signature invalide.
Instructions :
- Modifier légèrement le fichier :
echo "Ajout d'une ligne." >> message.txt
- Tenter de vérifier à nouveau la signature :
openssl dgst -sha256 -verify cle_publique.pem -signature signature.bin message.txt
- Observer le résultat :
- La vérification doit échouer, car le fichier a changé.
echo
ajoute une ligne au fichiermessage.txt
, ce qui modifie son contenu.- La signature initiale ne correspond plus au nouveau hachage du fichier, donc la vérification échoue.
Étape 5 : Créer un certificat auto-signé
Un certificat SSL/TLS contient une clé publique et est signé par une autorité de certification.
Dans cette étape, un certificat auto-signé est généré pour simuler un certificat SSL/TLS.
Instructions :
- Générer un certificat auto-signé valide pour 365 jours :
openssl req -x509 -new -key cle_privee.pem -out certificat.pem -days 365
- Fournir les informations demandées (pays, organisation, nom du serveur, etc.).
- Examiner le certificat généré :
openssl x509 -in certificat.pem -text -noout
openssl req -x509 -new
crée un certificat auto-signé en utilisant la clé privéecle_privee.pem
.- Le certificat est stocké dans
certificat.pem
et valable 365 jours. openssl x509 -text -noout
affiche les détails du certificat, y compris la clé publique et la signature.
Étape 6 : Vérifier un certificat SSL/TLS d’un site Web
Il est possible d’examiner le certificat SSL/TLS d’un site Web pour vérifier son authenticité.
Instructions :
- Examiner le certificat SSL/TLS d’un site Web sécurisé (exemple : Google) :
openssl s_client -connect google.com:443 -showcerts
- Rechercher les informations suivantes :
- L’autorité de certification qui a signé le certificat.
- La date d’expiration du certificat.
- Le nom de domaine associé au certificat.
openssl s_client -connect google.com:443 -showcerts
affiche le certificat SSL/TLS du site Google.- Il est possible d’observer l’autorité de certification (ex. DigiCert), la validité et le domaine associé.