Aller au contenu principal

Bases du chiffrement

AES, RSA, ECC : comprendre les principes de base du chiffrement.

Notions théoriques

1. Introduction au chiffrement

Le chiffrement est une technique permettant de protéger des informations en les transformant de manière à ce qu'elles ne puissent être lues que par des personnes autorisées.

info

Le chiffrement est utilisé dans de nombreux domaines :

  • communications sécurisées,
  • stockage de données sensibles,
  • signatures numériques,
  • etc.

Il existe deux grandes catégories de chiffrement :

  • Le chiffrement symétrique : Une seule clé est utilisée pour chiffrer et déchiffrer les données.
  • Le chiffrement asymétrique : Une paire de clés est utilisée (une clé publique pour chiffrer, une clé privée pour déchiffrer).

2. Chiffrement symétrique (AES)

L'AES (Advanced Encryption Standard) est l'un des algorithmes de chiffrement symétrique les plus utilisés.
Il fonctionne en prenant un bloc de données (128 bits) et en le transformant à l'aide d'une clé (128, 192 ou 256 bits).

Avantages :

  • Très rapide et efficace pour chiffrer de grandes quantités de données.
  • Utilisé dans de nombreux protocoles de sécurité (HTTPS, VPN, Wi-Fi).

Inconvénients :

  • La clé doit être partagée entre l'expéditeur et le destinataire, ce qui peut poser un problème de sécurité.

3. Chiffrement asymétrique (RSA)

Le RSA (Rivest-Shamir-Adleman) est un algorithme de chiffrement asymétrique.
Il repose sur la difficulté de factoriser de grands nombres premiers.

Fonctionnement :

  • Une clé publique est utilisée pour chiffrer un message.
  • Une clé privée correspondante est nécessaire pour le déchiffrer.

Avantages :

  • Permet de sécuriser les échanges sans avoir besoin de partager une clé secrète.
  • Utilisé pour l'authentification et les signatures numériques.

Inconvénients :

  • Plus lent que l'AES.
  • Nécessite des clés très longues pour garantir la sécurité.

4. Chiffrement par courbes elliptiques (ECC)

L'ECC (Elliptic Curve Cryptography) est une alternative au RSA qui offre un niveau de sécurité équivalent avec des clés plus courtes.

Avantages :

  • Plus rapide et plus efficace que le RSA.
  • Utilisé dans les communications sécurisées modernes (TLS, Bitcoin, etc.).

Inconvénients :

  • Plus complexe à implémenter.
  • Moins étudié que le RSA, donc potentiellement plus vulnérable à certaines attaques.

Exemple pratique

Il est possible de chiffrer et déchiffrer un message en utilisant AES, RSA et ECC avec Python.

1. Chiffrement AES en Python

from Crypto.Cipher import AES
import os

# Générer une clé secrète de 16 octets (128 bits)
key = os.urandom(16)

# Créer un objet de chiffrement AES en mode ECB
cipher = AES.new(key, AES.MODE_ECB)

# Message à chiffrer (doit être un multiple de 16 octets)
message = b"Message secret 123"

# Chiffrer le message
ciphertext = cipher.encrypt(message)

# Déchiffrer le message
decrypted_message = cipher.decrypt(ciphertext)

print("Message chiffré :", ciphertext)
print("Message déchiffré :", decrypted_message)

2. Chiffrement RSA en Python

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Générer une paire de clés RSA
key = RSA.generate(2048)
public_key = key.publickey()
cipher_rsa = PKCS1_OAEP.new(public_key)

# Message à chiffrer
message = b"Message secret"

# Chiffrer le message
ciphertext = cipher_rsa.encrypt(message)

# Déchiffrer le message
decrypt_rsa = PKCS1_OAEP.new(key)
decrypted_message = decrypt_rsa.decrypt(ciphertext)

print("Message chiffré :", ciphertext)
print("Message déchiffré :", decrypted_message)

Test de mémorisation/compréhension


Quel est le principal avantage du chiffrement symétrique AES ?


Quelle est la principale faiblesse du chiffrement symétrique ?


Quel algorithme repose sur la difficulté de factoriser de grands nombres ?


Quel algorithme est utilisé pour les courbes elliptiques ?


Pourquoi ECC est-il plus efficace que RSA ?



TP pour réfléchir et résoudre des problèmes

L’objectif de ce TP est de comprendre et d’implémenter :

  • le chiffrement symétrique (AES)
  • et le chiffrement asymétrique (RSA) en Python.

Étape 1 : Préparer l’environnement de travail

Avant de commencer, il est essentiel de s’assurer que les bibliothèques nécessaires sont installées.

Instructions :

  1. Ouvrir un terminal et vérifier que Python est installé :
python --version
  1. Installer la bibliothèque pycryptodome pour utiliser les algorithmes de chiffrement :
pip install pycryptodome
  1. Créer un dossier de travail pour organiser les fichiers :
mkdir chiffrement
cd chiffrement
  1. Créer deux fichiers Python : un pour AES et un pour RSA.
touch aes_chiffrement.py rsa_chiffrement.py
Une solution

Étape 2 : Implémenter le chiffrement AES

L’algorithme AES fonctionne en chiffrant des blocs de données de 16 octets avec une clé secrète.
L’objectif est de chiffrer un message et de le déchiffrer pour vérifier que l’algorithme fonctionne correctement.

Instructions :

  1. Ouvrir le fichier aes_chiffrement.py dans un éditeur de texte.
  2. Importer les modules nécessaires :
from Crypto.Cipher import AES
import os
  1. Générer une clé secrète de 16 octets :
key = os.urandom(16)
  1. Créer un objet de chiffrement AES en mode ECB :
cipher = AES.new(key, AES.MODE_ECB)
  1. Définir un message de 16 octets à chiffrer (AES nécessite un message de longueur multiple de 16) :
message = b"Message secret12"
  1. Chiffrer le message :
ciphertext = cipher.encrypt(message)
  1. Déchiffrer le message :
decrypted_message = cipher.decrypt(ciphertext)
  1. Afficher les résultats :
print("Message chiffré :", ciphertext)
print("Message déchiffré :", decrypted_message)
  1. Exécuter le script et observer les résultats :
python aes_chiffrement.py
Une solution

Étape 3 : Implémenter le chiffrement RSA

L’algorithme RSA repose sur une paire de clés : une clé publique pour chiffrer et une clé privée pour déchiffrer.
L’objectif est de générer ces clés, chiffrer un message avec la clé publique et le déchiffrer avec la clé privée.

Instructions :

  1. Ouvrir le fichier rsa_chiffrement.py dans un éditeur de texte.
  2. Importer les modules nécessaires :
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
  1. Générer une paire de clés RSA :
key = RSA.generate(2048)
  1. Extraire la clé publique :
public_key = key.publickey()
  1. Créer un objet de chiffrement RSA avec la clé publique :
cipher_rsa = PKCS1_OAEP.new(public_key)
  1. Définir un message à chiffrer :
message = b"Message secret"
  1. Chiffrer le message avec la clé publique :
ciphertext = cipher_rsa.encrypt(message)
  1. Créer un objet de déchiffrement avec la clé privée :
decrypt_rsa = PKCS1_OAEP.new(key)
  1. Déchiffrer le message :
decrypted_message = decrypt_rsa.decrypt(ciphertext)
  1. Afficher les résultats :
print("Message chiffré :", ciphertext)
print("Message déchiffré :", decrypted_message)
  1. Exécuter le script et observer les résultats :
python rsa_chiffrement.py
Une solution

Étape 4 : Comparer les performances

L’objectif est de comparer le temps d’exécution du chiffrement AES et RSA pour comprendre leurs différences en termes de rapidité.

Instructions :

  1. Modifier aes_chiffrement.py pour mesurer le temps d’exécution :
import time

start = time.time()
ciphertext = cipher.encrypt(message)
end = time.time()

print("Temps de chiffrement AES :", end - start)
  1. Modifier rsa_chiffrement.py pour mesurer le temps d’exécution :
import time

start = time.time()
ciphertext = cipher_rsa.encrypt(message)
end = time.time()

print("Temps de chiffrement RSA :", end - start)
  1. Exécuter les deux scripts et comparer les résultats.
Une solution

Conclusion

Ce TP a permis de :

  • Comprendre et implémenter le chiffrement AES et RSA en Python.
  • Observer les différences entre chiffrement symétrique et asymétrique.
  • Comparer les performances des deux algorithmes.

Le chiffrement est essentiel pour garantir la sécurité des données et protéger les communications.
AES est utilisé pour chiffrer rapidement de grandes quantités de données, tandis que RSA est utilisé pour sécuriser les échanges de clés et les signatures numériques.