-
Yannick Chistel a rédigéYannick Chistel a rédigé
tp_crypto_aes_rsa.rst 3,67 Kio
TP : Chiffrement et Signature
Objectifs :
Ce TP a pour but de comprendre et manipuler :
- Le chiffrement symétrique avec AES
- Le chiffrement asymétrique avec RSA
- La signature numérique avec RSA
- La différence entre chiffrement et signature
Warning
- Avoir Python installé avec pycryptodome
- Comprendre le principe des clés publiques et privées
Ce TP est réalisé sur un notebook de capytale qui comprend la classe Crypto
du fichier annexe _cryptographie.py
.
Interface de la classe Crypto
La classe Crypto
permet de construire un objet avec 2 attributs:
- L'attribut
mode
qui définit le type de chiffrement. Un chiffrement symétrique (par défaut) si le mode est défini avec la valeurAES
ou asymétrique si le mode est défini avec la valeurRSA
. - L'attribut
key
qui contient la clé de chiffrement.
La classe Crypto
contient différentes méthodes:
-
chiffrer(message)
: Chiffre un message. -
dechiffrer(message)
: Déchiffre un message. -
signer_message(message)
: Signe un message (RSA uniquement). -
verifier_signature(message, signature)
: Vérifie une signature (RSA uniquement). -
afficher_cle()
: affiche la clé de chiffrement encodé en base64. -
save_key(filename, private=True)
: Sauvegarde une clé RSA. -
load_key(filename, private=True)
: Charge une clé RSA.
On rappelle que l'instruction Python help(Crypto)
affiche l'aide de la classe Crypto
qui a été ajoutée dans les différentes docstring de la classe.
Chiffrement symétrique avec AES
- Créez une instance de la classe
Crypto
en modeAES
. - Affichez la clé de chiffrement symétrique.
- Quelle est la longueur de la clé de chiffrement ?
- Créez une variable
msg
qui contient un message en clair à chiffrer. - Créez la variable
msg_chiffre
qui contient le messagemsg
chiffré. - Déchiffrer le message et vérifier que celui-ci est correct.
Chiffrement asymétrique avec RSA
- Créez une instance de la classe
Crypto
en modeRSA
. - Afficher la clé de chiffrement créée en utilisant l'attribut
key
. - Quels sont les différentes valeurs contenues dans la clé ?
- La méthode
get_private_key()
permet d'obtenir la clé privée ? Quelle est la valeur obtenue ? - La méthode
get_public_key()
permet d'obtenir la clé publique ? Quelle est la valeur obtenue ? - Afficher l'aide sur la méthode
save_key()
puis enregistrer vos clés (privé et publique) dans 2 fichiers différents. - Afficher dans un éditeur de texte vos clés et comparer les contenus.
Chiffrer et déchiffrer un message
- Créez une variable
msg
qui contient un message en clair à chiffrer. - Créez la variable
msg_chiffre
qui contient le messagemsg
chiffré. - Avec quelle clé le message est-il chiffré ?
- Déchiffrer le message et vérifier que celui-ci est correct.
- Avec quelle clé le message est-il déchiffré ?
Signature numérique
- Signer le message
msg
en l'enregitrant dans la variablemsg_signe
. - La signature et le message chiffré sont-ils les mêmes ? Justifier.
- Vérifier que la signature est correcte ?
- Que se passe-t-il si on modifie le message après la signature ?
En conclusion
- AES est rapide mais nécessite le partage sécurisé de la clé.
- RSA permet de chiffrer et signer, mais est plus lent.
- Une signature prouve l'authenticité d'un message sans le masquer.