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.
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)