Aller au contenu principal

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.

info

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é :

  1. Un hachage du document est calculé.
  2. Ce hachage est chiffré avec la clé privée du signataire.
  3. La signature obtenue est jointe au document.

Lorsqu’un destinataire reçoit le document :

  1. Il déchiffre la signature avec la clé publique du signataire.
  2. Il recalcule le hachage du document.
  3. 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 :

  1. 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...
  2. 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)
  3. 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 :

  1. 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)
  2. 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...
  3. 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.

Pourquoi cette méthode est sécurisée ?

  1. 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.
  2. Intégrité :

    • Si le document est modifié, son hachage changera.
    • La comparaison des hachages échouera, indiquant une falsification.
  3. 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 :

  1. Alice signe le contrat avec sa clé privée.
  2. Bob utilise la clé publique d’Alice pour vérifier la signature.
  3. 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 :

  1. Le serveur envoie son certificat SSL/TLS.
  2. Le navigateur vérifie la signature du certificat auprès de l’autorité de certification.
  3. 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


Quel est le rôle principal d'une signature numérique ?


Quelle clé est utilisée pour signer un document ?


Que se passe-t-il si un document signé est modifié ?


Quel est le rôle d'une autorité de certification (CA) ?


Que contient un certificat SSL/TLS ?


Que signifie SSL/TLS ?


Pourquoi un navigateur fait-il confiance à un certificat SSL/TLS ?


Quelle commande OpenSSL permet de générer une clé privée RSA ?


Quelle extension de fichier est souvent utilisée pour stocker une clé privée ?


Que signifie une réponse 'Verified OK' lors de la vérification d'une signature ?



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 à :

  1. Générer une paire de clés RSA.
  2. Créer un fichier texte et le signer numériquement.
  3. Vérifier l’authenticité de la signature.
  4. Simuler une modification du fichier et observer l’impact sur la signature.
  5. 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 :

  1. Ouvrir un terminal.
  2. Générer une clé privée RSA de 2048 bits :
openssl genpkey -algorithm RSA -out cle_privee.pem -pkeyopt rsa_keygen_bits:2048
  1. Extraire la clé publique associée :
openssl rsa -in cle_privee.pem -pubout -out cle_publique.pem
  1. Vérifier le contenu des fichiers générés :
cat cle_privee.pem
cat cle_publique.pem
Résumé des commandes
  • La commande openssl genpkey génère une clé privée RSA de 2048 bits et la stocke dans cle_privee.pem.
  • La commande openssl rsa -pubout extrait la clé publique et la stocke dans cle_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 :

  1. Créer un fichier texte contenant un message :
echo "Ce fichier est sécurisé et authentique." > message.txt
  1. Signer le fichier avec la clé privée :
openssl dgst -sha256 -sign cle_privee.pem -out signature.bin message.txt
  1. Afficher le contenu du fichier signé :
cat message.txt
  1. Examiner la signature générée (affichage en base64) :
base64 signature.bin
Résumé des commandes
  • echo crée un fichier message.txt contenant un message simple.
  • openssl dgst -sha256 -sign génère une signature numérique et la stocke dans signature.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 :

  1. Vérifier la signature avec la clé publique :
openssl dgst -sha256 -verify cle_publique.pem -signature signature.bin message.txt
  1. Observer le résultat :
    • Si la signature est valide, OpenSSL affiche "Verified OK".
    • Si la signature est invalide, OpenSSL affiche "Verification Failure".
Résumé des commandes
  • openssl dgst -sha256 -verify utilise la clé publique pour vérifier que la signature correspond bien au fichier message.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 :

  1. Modifier légèrement le fichier :
echo "Ajout d'une ligne." >> message.txt
  1. Tenter de vérifier à nouveau la signature :
openssl dgst -sha256 -verify cle_publique.pem -signature signature.bin message.txt
  1. Observer le résultat :
    • La vérification doit échouer, car le fichier a changé.
Résumé des commandes
  • echo ajoute une ligne au fichier message.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 :

  1. Générer un certificat auto-signé valide pour 365 jours :
openssl req -x509 -new -key cle_privee.pem -out certificat.pem -days 365
  1. Fournir les informations demandées (pays, organisation, nom du serveur, etc.).
  2. Examiner le certificat généré :
openssl x509 -in certificat.pem -text -noout
Résumé des commandes
  • openssl req -x509 -new crée un certificat auto-signé en utilisant la clé privée cle_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 :

  1. Examiner le certificat SSL/TLS d’un site Web sécurisé (exemple : Google) :
openssl s_client -connect google.com:443 -showcerts
  1. 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.
Résumé des commandes
  • 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é.