Signatures Numériques avec RSA en Cryptographie

LinuxBeginner
Pratiquer maintenant

Introduction

Bienvenue dans le laboratoire sur les Signatures Numériques avec RSA. Une signature numérique est un mécanisme cryptographique utilisé pour vérifier l'authenticité et l'intégrité des messages ou documents numériques. Elle garantit que le message a été créé par un expéditeur connu (authenticité) et qu'il n'a pas été altéré pendant le transit (intégrité).

Dans ce laboratoire, vous acquerrez une expérience pratique du cycle de vie complet d'une signature numérique. Nous utiliserons l'outil en ligne de commande openssl, un utilitaire robuste et polyvalent pour les tâches cryptographiques. Vous apprendrez à générer une signature à l'aide d'une clé privée et à la vérifier à l'aide de la clé publique correspondante. À la fin, vous aurez une compréhension pratique de la manière dont les signatures numériques sécurisent nos communications numériques.

Concept de Signature Numérique

Dans cette étape, nous allons commencer par comprendre le concept fondamental d'une signature numérique. Une signature numérique est créée par l'expéditeur en utilisant sa clé privée (private key). Cette clé est gardée secrète et n'est connue que de l'expéditeur. La signature peut ensuite être vérifiée par toute personne possédant la clé publique (public key) correspondante de l'expéditeur.

Ce processus fournit deux garanties de sécurité essentielles :

  • Authenticité : Puisque seul l'expéditeur possède la clé privée, une signature valide prouve que le message provient bien de lui.
  • Intégrité : La signature est mathématiquement liée au contenu du message. Si le message est modifié de quelque manière que ce soit, la signature ne sera plus valide.

Pour faciliter ce laboratoire, le processus de configuration a déjà généré une paire de clés RSA pour vous : private.pem (votre clé secrète) et public.pem (votre clé partageable). Il a également créé un fichier nommé message.txt. Listons les fichiers dans notre répertoire de projet pour les visualiser.

Exécutez la commande suivante dans votre terminal :

ls -l

Vous devriez voir les fichiers qui ont été préparés pour vous :

-rw-rw-r-- 1 labex labex   55 Oct 20 09:20 document.txt
-rw-rw-r-- 1 labex labex   26 Oct 20 09:20 message.txt
-rw------- 1 labex labex 1704 Oct 20 09:20 private.pem
-rw-rw-r-- 1 labex labex  451 Oct 20 09:20 public.pem

Maintenant que nous avons nos clés et un message, nous sommes prêts à créer notre première signature numérique.

Signer le Message avec la Clé Privée

Dans cette étape, vous allez créer une signature numérique pour le fichier message.txt. Le processus implique deux actions principales : premièrement, la création d'un hachage cryptographique (une chaîne d'octets unique de taille fixe) du message, et deuxièmement, le chiffrement de ce hachage avec votre clé privée. Le résultat est la signature numérique.

Nous utiliserons la commande openssl dgst pour effectuer cette opération. Exécutons la commande pour signer message.txt.

openssl dgst -sha256 -sign private.pem -out signature.bin message.txt

Décortiquons cette commande :

  • openssl dgst: Ceci invoque la commande de résumé (digest) OpenSSL.
  • -sha256: Ceci spécifie l'algorithme SHA-256 pour créer le hachage du message.
  • -sign private.pem: Ceci indique à OpenSSL de signer le hachage en utilisant la clé privée spécifiée, private.pem.
  • -out signature.bin: Ceci spécifie le fichier de sortie où la signature binaire résultante sera stockée.
  • message.txt: Ceci est le fichier d'entrée que nous signons.

Après avoir exécuté la commande, un nouveau fichier nommé signature.bin sera créé. Ce fichier contient la signature numérique. Vous pouvez vérifier sa création en listant à nouveau les fichiers.

ls -l

Vous verrez maintenant signature.bin dans la liste des fichiers :

-rw-rw-r-- 1 labex labex   55 Oct 20 09:20 document.txt
-rw-rw-r-- 1 labex labex   26 Oct 20 09:20 message.txt
-rw------- 1 labex labex 1704 Oct 20 09:20 private.pem
-rw-rw-r-- 1 labex labex  451 Oct 20 09:20 public.pem
-rw-rw-r-- 1 labex labex  256 Oct 20 09:26 signature.bin

Vérifier la Signature avec la Clé Publique

Dans cette étape, nous allons jouer le rôle d'un destinataire qui souhaite vérifier la signature. Pour ce faire, le destinataire a besoin de trois éléments : le message original (message.txt), la signature numérique (signature.bin), et la clé publique de l'expéditeur (public.pem).

Le processus de vérification inverse le processus de signature. OpenSSL utilisera la clé publique pour déchiffrer la signature, révélant ainsi le hachage original. Il calculera ensuite indépendamment un nouveau hachage du message qu'il a reçu. Si les deux hachages correspondent, la signature est valide.

Utilisons à nouveau openssl dgst, mais cette fois avec l'option -verify.

openssl dgst -sha256 -verify public.pem -signature signature.bin message.txt

Voici la décomposition de la commande de vérification :

  • -verify public.pem: Ceci indique à OpenSSL de vérifier une signature en utilisant la clé publique spécifiée, public.pem.
  • -signature signature.bin: Ceci spécifie le fichier de signature à vérifier.
  • message.txt: Ceci est le fichier de message original auquel la signature est censée correspondre.

Si la signature est valide, OpenSSL affichera le message suivant :

Verified OK

Cette confirmation signifie deux choses : le message a été signé sans aucun doute par le propriétaire de la clé private.pem, et le contenu de message.txt n'a pas été modifié depuis sa signature.

Signer le Fichier avec la Clé Privée

Dans cette étape, nous allons renforcer le processus de signature en l'appliquant à un fichier différent. Cela aidera à consolider votre compréhension de la manière dont un hachage signé est créé et utilisé. Nous avons un autre fichier dans notre répertoire nommé document.txt. Nous allons maintenant créer une signature numérique pour ce document.

La procédure est identique à celle que nous avons suivie à l'Étape 2. Nous allons générer un hachage SHA-256 de document.txt et signer ensuite ce hachage avec notre clé private.pem.

Créons la signature et sauvegardons-la dans un fichier nommé document.sig.

openssl dgst -sha256 -sign private.pem -out document.sig document.txt

Cette commande crée un nouveau fichier de signature, document.sig, qui est spécifique au contenu actuel de document.txt. Tout changement apporté au document nécessiterait la génération d'une nouvelle signature.

Listons les fichiers pour confirmer que document.sig a été créé.

ls

Vous devriez voir le nouveau fichier de signature dans la sortie :

document.sig  document.txt  message.txt  private.pem  public.pem  signature.bin

Nous avons maintenant un document signé, que nous utiliserons dans l'étape suivante pour démontrer la puissance de vérification d'intégrité des signatures numériques.

Tester la Modification de Signature

Dans cette dernière étape, nous allons démontrer la caractéristique la plus critique d'une signature numérique : la protection de l'intégrité. Nous allons intentionnellement altérer le fichier document.txt après qu'il ait été signé, puis tenter de le vérifier avec la signature originale. Cela montrera comment les signatures numériques empêchent les modifications non autorisées.

Tout d'abord, ajoutons du texte au fichier document.txt. Cela simule un attaquant modifiant le document.

echo "This is an unauthorized change." >> document.txt

Le contenu de document.txt a maintenant changé. La signature originale, document.sig, a été créée sur la base du contenu précédent du fichier.

Maintenant, essayons de vérifier le fichier document.txt modifié en utilisant la signature originale document.sig et la clé publique.

openssl dgst -sha256 -verify public.pem -signature document.sig document.txt

Cette fois, la vérification n'aboutira pas. Au lieu de cela, vous verrez un message d'erreur similaire à :

Verification failure
805BA484597F0000:error:02000068:rsa routines:ossl_rsa_verify:bad signature:../crypto/rsa/rsa_sign.c:430:
805BA484597F0000:error:1C880004:Provider routines:rsa_verify:RSA lib:../providers/implementations/signature/rsa_sig.c:774:

Cet échec est le résultat attendu. Il se produit parce que le hachage du document.txt modifié ne correspond plus au hachage qui a été chiffré à l'intérieur de document.sig. Cela prouve instantanément que le fichier a été falsifié depuis sa signature. Ce mécanisme est fondamental pour faire confiance aux documents et communications numériques.

Résumé

Dans ce laboratoire, vous avez réussi à apprendre l'application pratique des signatures numériques en utilisant RSA et OpenSSL.

Vous avez parcouru l'ensemble du processus :

  • Compris les concepts fondamentaux d'authenticité et d'intégrité fournis par les signatures numériques.
  • Utilisé une clé privée (private.pem) pour signer un message et créer un fichier de signature.
  • Utilisé la clé publique correspondante (public.pem) pour vérifier la signature et confirmer l'authenticité du message.
  • Constaté un Verification failure (échec de vérification) après avoir intentionnellement falsifié un fichier signé, démontrant ainsi comment les signatures numériques protègent l'intégrité des données.

Cette expérience pratique fournit une base solide pour comprendre comment la confiance est établie dans le monde numérique, un concept crucial en cybersécurité et en informatique moderne.