Skip to content
Extraits de code Groupes Projets
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 valeur AES ou asymétrique si le mode est défini avec la valeur RSA.
  • 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

  1. Créez une instance de la classe Crypto en mode AES.
  2. Affichez la clé de chiffrement symétrique.
  3. Quelle est la longueur de la clé de chiffrement ?
  4. Créez une variable msg qui contient un message en clair à chiffrer.
  5. Créez la variable msg_chiffre qui contient le message msg chiffré.
  6. Déchiffrer le message et vérifier que celui-ci est correct.

Chiffrement asymétrique avec RSA

  1. Créez une instance de la classe Crypto en mode RSA.
  2. Afficher la clé de chiffrement créée en utilisant l'attribut key.
  3. Quels sont les différentes valeurs contenues dans la clé ?
  4. La méthode get_private_key() permet d'obtenir la clé privée ? Quelle est la valeur obtenue ?
  5. La méthode get_public_key() permet d'obtenir la clé publique ? Quelle est la valeur obtenue ?
  6. Afficher l'aide sur la méthode save_key() puis enregistrer vos clés (privé et publique) dans 2 fichiers différents.
  7. Afficher dans un éditeur de texte vos clés et comparer les contenus.

Chiffrer et déchiffrer un message

  1. Créez une variable msg qui contient un message en clair à chiffrer.
  2. Créez la variable msg_chiffre qui contient le message msg chiffré.
  3. Avec quelle clé le message est-il chiffré ?
  4. Déchiffrer le message et vérifier que celui-ci est correct.
  5. Avec quelle clé le message est-il déchiffré ?

Signature numérique

  1. Signer le message msg en l'enregitrant dans la variable msg_signe.
  2. La signature et le message chiffré sont-ils les mêmes ? Justifier.
  3. Vérifier que la signature est correcte ?
  4. 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.