Chiffrement Asymétrique avec RSA en Cryptographie

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous explorerez les principes du chiffrement asymétrique, une pierre angulaire de la cryptographie moderne. Contrairement au chiffrement symétrique qui utilise une seule clé pour le chiffrement et le déchiffrement, le chiffrement asymétrique utilise une paire de clés : une clé publique et une clé privée.

La clé publique est utilisée pour le chiffrement et peut être partagée avec n'importe qui. La clé privée est gardée secrète et est utilisée pour le déchiffrement. Ce mécanisme permet une communication sécurisée sans avoir besoin de partager une clé secrète au préalable.

Nous utiliserons l'algorithme RSA largement adopté et l'outil puissant en ligne de commande openssl pour démontrer ce processus. Vous apprendrez à générer une paire de clés, à chiffrer un message avec la clé publique et à le déchiffrer avec la clé privée. Toutes les opérations seront effectuées dans le terminal au sein de votre répertoire ~/project.

Fondamentaux du Chiffrement Asymétrique

Dans cette étape, vous apprendrez les concepts fondamentaux du chiffrement asymétrique, également connu sous le nom de cryptographie à clé publique. Il s'agit d'une étape conceptuelle sans commandes à exécuter, mais la compréhension de ces principes est cruciale pour les tâches pratiques qui suivront.

Le chiffrement asymétrique repose sur deux clés distinctes mais mathématiquement liées :

  • Clé Publique (Public Key) : Cette clé est mise à la disposition de tous. Sa fonction principale est de chiffrer les données. Toute personne possédant la clé publique peut chiffrer un message, mais ne peut pas l'utiliser pour déchiffrer ce même message. Considérez-la comme la fente d'une boîte aux lettres ouverte : n'importe qui peut y déposer une lettre.

  • Clé Privée (Private Key) : Cette clé doit être conservée secrète et sécurisée par son propriétaire. Sa fonction est de déchiffrer les données qui ont été chiffrées avec sa clé publique correspondante. Seule la personne détenant la clé privée peut déchiffrer le message. Dans notre analogie de la boîte aux lettres, la clé privée est la clé unique qui permet d'ouvrir la boîte et de récupérer les lettres.

Cette relation unidirectionnelle est le fondement de la communication sécurisée sur des réseaux non sécurisés. Dans les étapes suivantes, vous générerez votre propre paire de clés publique/privée et les utiliserez pour chiffrer et déchiffrer un message.

Générer une Paire de Clés RSA

Dans cette étape, vous allez générer une paire de clés RSA en utilisant l'outil en ligne de commande openssl. Cette commande créera un seul fichier contenant à la fois les composantes de la clé privée et de la clé publique.

Exécutez la commande suivante dans votre terminal. Toutes les commandes de ce laboratoire doivent être exécutées depuis le répertoire par défaut ~/project.

openssl genrsa -out private.pem 2048

Décortiquons cette commande :

  • openssl: La commande pour invoquer la boîte à outils OpenSSL.
  • genrsa: La commande spécifique pour générer une clé privée RSA.
  • -out private.pem: Cet indicateur spécifie le nom du fichier de sortie pour la clé. Nous le nommons private.pem.
  • 2048: C'est la longueur de la clé en bits. 2048 bits est une longueur standard et sécurisée pour les clés RSA.

Maintenant, vérifiez que le fichier private.pem a été créé dans votre répertoire courant en utilisant la commande ls.

ls

Vous devriez voir private.pem listé dans la sortie.

private.pem

Extraire la Clé Publique

Dans cette étape, vous allez extraire la clé publique du fichier private.pem que vous avez créé. Bien que le fichier de clé privée contienne tous les composants nécessaires, vous avez besoin d'un fichier de clé publique séparé que vous pouvez partager en toute sécurité avec d'autres pour chiffrer des messages.

Utilisez la commande suivante pour extraire la clé publique :

openssl rsa -in private.pem -pubout -out public.pem

Voici une description de la commande :

  • openssl rsa: Cette commande est utilisée pour traiter les clés RSA.
  • -in private.pem: Spécifie le fichier d'entrée, qui est notre clé privée.
  • -pubout: Cet indicateur demande à openssl d'extraire et de produire la partie publique de la clé.
  • -out public.pem: Spécifie le nom du fichier de sortie pour la clé publique.

La commande produira une courte sortie confirmant l'opération.

writing RSA key

Maintenant, listez à nouveau les fichiers dans votre répertoire pour voir à la fois la clé privée et la clé publique.

ls

Vous devriez maintenant voir à la fois private.pem et public.pem.

private.pem  public.pem

Vous pouvez visualiser le contenu du fichier de clé publique. C'est un fichier texte au format PEM.

cat public.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
...
-----END PUBLIC KEY-----

Chiffrer le Message avec la Clé Publique

Dans cette étape, vous allez créer un message secret puis le chiffrer en utilisant la clé publique que vous venez d'extraire. Seule une personne possédant la clé privée correspondante pourra le déchiffrer.

Tout d'abord, créons un fichier texte simple contenant notre message secret.

echo "This is a secret message." > message.txt

Cette commande crée un fichier nommé message.txt avec le contenu spécifié. Maintenant, chiffrons ce fichier en utilisant la clé publique.

openssl pkeyutl -encrypt -pubin -inkey public.pem -in message.txt -out encrypted.bin

Examinons cette commande :

  • openssl pkeyutl: Un utilitaire pour effectuer des opérations de clé publique telles que le chiffrement et le déchiffrement.
  • -encrypt: Spécifie que nous souhaitons effectuer une opération de chiffrement.
  • -pubin: Indique que la clé d'entrée (-inkey) est une clé publique.
  • -inkey public.pem: Spécifie la clé publique à utiliser pour le chiffrement.
  • -in message.txt: Le fichier d'entrée contenant le message en clair (plaintext).
  • -out encrypted.bin: Le fichier de sortie où les données chiffrées (texte chiffré ou ciphertext) seront stockées.

Après avoir exécuté la commande, un nouveau fichier encrypted.bin sera créé. Si vous essayez de visualiser son contenu, vous verrez des données binaires illisibles, qui sont la forme chiffrée de votre message.

cat encrypted.bin

La sortie sera une chaîne de caractères brouillés, confirmant que le message est chiffré.

Déchiffrer le Message avec la Clé Privée

Dans cette dernière étape, vous allez déchiffrer le message chiffré en utilisant votre clé privée pour récupérer le texte brut original. Cela démontre que seul le détenteur de la clé privée peut accéder à l'information secrète.

Utilisez la commande suivante pour déchiffrer encrypted.bin :

openssl pkeyutl -decrypt -inkey private.pem -in encrypted.bin -out decrypted.txt

Passons en revue les options de la commande :

  • openssl pkeyutl: Le même utilitaire qu'auparavant.
  • -decrypt: Cette fois, nous spécifions l'opération de déchiffrement.
  • -inkey private.pem: Spécifie la clé privée à utiliser pour le déchiffrement.
  • -in encrypted.bin: Le fichier d'entrée contenant le texte chiffré (ciphertext).
  • -out decrypted.txt: Le fichier de sortie où le texte brut récupéré sera sauvegardé.

Cette commande créera un nouveau fichier nommé decrypted.txt. Pour vérifier que le déchiffrement a réussi, affichez le contenu de ce nouveau fichier.

cat decrypted.txt

Vous devriez voir votre message original parfaitement restauré.

This is a secret message.

Félicitations ! Vous avez réussi à effectuer un cycle complet de chiffrement et de déchiffrement asymétrique en utilisant RSA et OpenSSL.

Résumé

Dans ce laboratoire, vous avez acquis une expérience pratique du chiffrement asymétrique en utilisant l'algorithme RSA et la boîte à outils OpenSSL.

Vous avez appris la différence fondamentale entre les clés publiques et privées ainsi que leurs rôles respectifs dans la sécurisation des communications.

Plus spécifiquement, vous vous êtes exercé sur les compétences clés suivantes :

  • Générer une paire de clés RSA de 2048 bits en utilisant openssl genrsa.
  • Extraire une clé publique à partir d'un fichier de clé privée en utilisant openssl rsa.
  • Chiffrer un message en clair avec une clé publique en utilisant openssl pkeyutl.
  • Déchiffrer le texte chiffré résultant avec la clé privée correspondante en utilisant openssl pkeyutl.

Ces compétences sont fondamentales pour comprendre et implémenter des systèmes sécurisés dans diverses applications, allant de la navigation web sécurisée (HTTPS) au courrier électronique chiffré et aux signatures numériques.