Bases du Chiffrement Symétrique en Cryptographie

LinuxBeginner
Pratiquer maintenant

Introduction

Le chiffrement symétrique est un concept fondamental en cryptographie où une seule clé est utilisée à la fois pour chiffrer et déchiffrer l'information. Cette méthode est rapide et efficace, ce qui la rend idéale pour chiffrer de grandes quantités de données.

Dans ce laboratoire, vous acquerrez une expérience pratique du chiffrement symétrique en utilisant l'outil puissant en ligne de commande openssl dans un environnement Linux. Vous parcourrez le processus complet : génération d'une clé secrète, chiffrement d'un fichier texte, déchiffrement de celui-ci, et enfin, vérification que le fichier déchiffré est identique à l'original.

Concept de Chiffrement Symétrique

Dans cette étape, nous allons brièvement revoir le concept central du chiffrement symétrique. La partie "symétrique" signifie que la même clé qui verrouille (chiffre) les données est également utilisée pour les déverrouiller (déchiffrer).

Imaginez que vous ayez une boîte à serrure physique. Vous utilisez une clé pour la verrouiller. Pour l'ouvrir à nouveau, vous devez utiliser exactement la même clé. Dans le chiffrement symétrique, cette clé est un morceau d'information numérique, et elle doit être partagée de manière sécurisée entre les parties qui ont besoin de chiffrer et de déchiffrer les données. Si cette clé unique est compromise, la sécurité des données chiffrées est perdue.

Pour ce laboratoire, nous allons travailler avec un fichier texte simple. Un fichier nommé original.txt a été pré-créé pour vous dans le répertoire ~/project. Vous pouvez visualiser son contenu et confirmer qu'il s'agit d'un fichier texte simple et lisible.

Listons les fichiers dans le répertoire courant pour le visualiser :

ls -l

Vous devriez voir le fichier original.txt dans la sortie :

-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Maintenant, visualisons son contenu :

cat original.txt

La sortie sera le message texte simple contenu dans le fichier :

This is a secret message.

Dans les étapes suivantes, nous allons chiffrer ce fichier pour le rendre illisible, puis le déchiffrer pour revenir à sa forme originale.

Générer la Clé AES

Dans cette étape, vous allez générer une clé aléatoire sécurisée pour notre processus de chiffrement. La robustesse du chiffrement symétrique repose fortement sur le secret et l'aléatoire de la clé. Une clé prévisible est facile à deviner, rendant le chiffrement inutile.

Nous utiliserons la commande openssl rand pour générer une clé aléatoire cryptographiquement forte. Nous allons générer une clé de 256 bits, ce qui est une longueur standard pour l'algorithme AES (Advanced Encryption Standard).

Exécutez la commande suivante pour générer une clé de 32 octets (256 bits) au format hexadécimal et l'enregistrer dans un fichier nommé aes.key :

openssl rand -hex 32 > aes.key

Décortiquons cette commande :

  • openssl rand: La commande pour générer des données aléatoires.
  • -hex: Formate la sortie en une chaîne hexadécimale.
  • 32: Spécifie le nombre d'octets de données aléatoires à générer. Puisque chaque caractère hexadécimal représente 4 bits (ou un demi-octet), 32 octets de données donneront une chaîne hexadécimale de 64 caractères.
  • > aes.key: Redirige la sortie de la commande et l'enregistre dans le fichier aes.key.

Maintenant, visualisons la clé générée. N'oubliez pas que votre clé sera différente de l'exemple ci-dessous, car elle est générée aléatoirement.

cat aes.key

Vous verrez une longue chaîne de caractères hexadécimaux, qui est votre clé secrète de 256 bits :

2da75d4f284618ed6933d0e743757ed014ba39a1a8aa1879ebbbfe53b92d519a

Ce fichier, aes.key, contient maintenant le secret que nous utiliserons pour chiffrer et déchiffrer nos données.

Chiffrer le Fichier avec AES

Dans cette étape, vous utiliserez la clé que vous avez générée pour chiffrer le fichier original.txt. Nous utiliserons la commande openssl enc, qui est un outil polyvalent pour le chiffrement et le déchiffrement.

Nous utiliserons le chiffrement AES-256-CBC.

  • AES-256: Fait référence à l'Advanced Encryption Standard avec une clé de 256 bits.
  • CBC: Signifie Cipher Block Chaining (Chaînage de Blocs de Chiffrement), un mode d'opération qui ajoute de l'aléatoire et garantit que des blocs de texte clair identiques ne produisent pas des blocs de texte chiffré identiques.

Exécutez la commande suivante pour chiffrer le fichier :

openssl enc -aes-256-cbc -pbkdf2 -salt -in original.txt -out encrypted.dat -pass file:./aes.key

Examinons les options de la commande :

  • openssl enc: La commande pour les chiffrements.
  • -aes-256-cbc: Spécifie l'algorithme de chiffrement à utiliser.
  • -pbkdf2: Utilise une fonction de dérivation de clé basée sur un mot de passe (PBKDF2), moderne et standardisée, pour éviter les avertissements de dépréciation.
  • -salt: Ajoute un sel (salt) aléatoire à la clé avant le chiffrement. C'est une pratique de sécurité cruciale qui protège contre certains types d'attaques.
  • -in original.txt: Spécifie le fichier d'entrée à chiffrer.
  • -out encrypted.dat: Spécifie le nom du fichier de sortie qui stockera les données chiffrées.
  • -pass file:./aes.key: Indique à OpenSSL de lire le mot de passe (dans notre cas, la clé symétrique) depuis le fichier aes.key.

Après avoir exécuté la commande, un nouveau fichier nommé encrypted.dat sera créé. Essayons de visualiser son contenu :

cat encrypted.dat

La sortie sera un fouillis de caractères illisibles, confirmant que le fichier est chiffré.

Salted___Mi72j)NU_nJ_h9s(0]%

Vous avez maintenant réussi à chiffrer votre message secret. Toute personne obtenant ce fichier sans le aes.key ne pourra pas lire son contenu.

Déchiffrer le Fichier avec AES

Dans cette étape, vous allez déchiffrer le fichier encrypted.dat pour récupérer le message original. Puisqu'il s'agit d'un chiffrement symétrique, nous utiliserons la même clé (aes.key) et la même commande de base (openssl enc) que lors du chiffrement.

La différence clé est l'ajout de l'option -d, qui indique à OpenSSL d'effectuer un déchiffrement au lieu d'un chiffrement.

Exécutez la commande suivante pour déchiffrer le fichier :

openssl enc -d -aes-256-cbc -pbkdf2 -in encrypted.dat -out decrypted.txt -pass file:./aes.key

Cette commande est très similaire à la commande de chiffrement :

  • -d: Cette option spécifie que nous souhaitons déchiffrer le fichier d'entrée.
  • -aes-256-cbc: Nous devons spécifier le même chiffrement qui a été utilisé pour le chiffrement.
  • -pbkdf2: Vous devez utiliser la même fonction de dérivation de clé qui a été utilisée pour le chiffrement.
  • -in encrypted.dat: Le fichier d'entrée est maintenant notre donnée chiffrée.
  • -out decrypted.txt: Le fichier de sortie où le texte déchiffré et lisible sera enregistré.
  • -pass file:./aes.key: Nous fournissons la même clé qui a été utilisée pour chiffrer le fichier.

Une fois la commande terminée, un nouveau fichier nommé decrypted.txt sera créé. Visualisons son contenu pour vérifier si le déchiffrement a réussi.

cat decrypted.txt

La sortie devrait être le message original, exactement tel qu'il était dans original.txt :

This is a secret message.

Félicitations ! Vous avez réussi à effectuer un cycle complet de chiffrement et de déchiffrement.

Vérifier l'Intégrité du Fichier

Dans cette dernière étape, nous allons vérifier que le processus de déchiffrement a été parfait et que le fichier decrypted.txt est une copie exacte du fichier original.txt. Bien que nous puissions le confirmer visuellement pour un message court, une vérification programmatique est nécessaire pour les fichiers plus volumineux ou les scripts automatisés.

La commande diff sous Linux est l'outil parfait pour cette tâche. Elle compare deux fichiers ligne par ligne et signale toute différence. Si les fichiers sont identiques, diff ne produira aucune sortie.

Exécutez la commande diff pour comparer les fichiers original et déchiffré :

diff original.txt decrypted.txt

Si la commande s'exécute et que vous revenez à l'invite de commande sans aucun message, cela signifie que les fichiers sont identiques. Ce silence est la confirmation du succès. Il prouve que vos données ont conservé leur intégrité tout au long du cycle de chiffrement et de déchiffrement.

Pour voir tous les fichiers avec lesquels vous avez travaillé dans ce laboratoire, vous pouvez exécuter ls -l une dernière fois :

ls -l

Vous verrez le fichier original, la clé, les données chiffrées et le fichier déchiffré final :

-rw-rw-r-- 1 labex labex 65 Oct 20 08:57 aes.key
-rw-rw-r-- 1 labex labex 26 Oct 20 08:57 decrypted.txt
-rw-rw-r-- 1 labex labex 48 Oct 20 08:57 encrypted.dat
-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Ceci confirme que vous avez géré avec succès l'intégralité du cycle de vie du chiffrement symétrique.

Résumé

Dans ce laboratoire, vous avez acquis une expérience pratique des fondamentaux du chiffrement symétrique en utilisant openssl dans un environnement Linux.

Vous avez réussi à effectuer un flux de travail complet de chiffrement et de déchiffrement :

  • Vous avez appris le concept central d'une clé unique et partagée pour le chiffrement et le déchiffrement.
  • Vous avez utilisé openssl rand pour générer une clé AES forte de 256 bits.
  • Vous avez utilisé openssl enc pour chiffrer un fichier texte, le rendant illisible.
  • Vous avez utilisé la même commande avec l'option -d pour déchiffrer le fichier et le ramener à son état d'origine.
  • Enfin, vous avez utilisé la commande diff pour vérifier par programmation que les données déchiffrées étaient identiques aux données originales, confirmant ainsi l'intégrité des données.

Cet exercice pratique fournit une base solide pour comprendre le fonctionnement des chiffrements symétriques et comment ils sont appliqués en pratique pour protéger les données.