Étude et implémentation en Python de primitives et attaques cryptographiques classiques : chiffrement, cassage de clés, cryptanalyse.
Telecharger & tester
make && ./my_pgp --gen-key | --encrypt | --decrypt ... (reimplementation partielle de PGP/GPG en C)
My_pgp est un projet Epitech (Tek3, module cybersecurite/reseaux) qui consiste a implementer, dans un langage libre, un ensemble de primitives cryptographiques allant du chiffrement symetrique le plus rudimentaire jusqu'a un systeme hybride proche du veritable protocole PGP, avec pour fil conducteur l'echange securise de messages entre deux correspondants sous la menace d'un adversaire intercepteur.
Le programme unique my_pgp accepte cinq systemes cryptographiques selectionnables en ligne de commande (xor, aes, rsa, pgp-xor, pgp-aes), un mode chiffrement ou dechiffrement, et une option de mode bloc (-b) traitant un seul bloc de la taille de la cle plutot qu'un flux de longueur arbitraire traite bloc par bloc avec padding par des zeros. Toute donnee numerique doit etre representee et affichee en hexadecimal little-endian, une convention de nommage rigoureuse qui court sur l'ensemble du sujet.
Le volet symetrique impose deux algorithmes : un XOR simple entre message et cle (pedagogique mais peu pratique en conditions reelles), puis l'algorithme AES en cle de 128 bits, plus robuste et utilisable avec une cle bien plus courte que le message. Le volet asymetrique impose une implementation complete de RSA a partir de deux nombres premiers fournis en parametre : generation de la paire de cles publique/privee via l'indicatrice de Carmichael, l'exposant public devant etre le plus grand nombre premier de Fermat satisfaisant les contraintes de l'algorithme, puis chiffrement et dechiffrement d'un message represente comme un unique grand nombre en little-endian.
Le systeme hybride final, pgp-xor ou pgp-aes, combine les deux approches a la maniere du protocole PGP reel : generation d'une cle symetrique aleatoire, chiffrement du message avec cette cle rapide, puis chiffrement de la cle symetrique elle-meme avec la cle publique RSA du destinataire, la sortie affichant en premiere ligne la cle symetrique chiffree puis le message chiffre. Ce mecanisme resout le probleme fondamental de l'echange de cle secrete sur un canal non securise, sans les limites de performance du RSA pur sur de longs messages.
Les bonus proposes incluent l'extension d'AES aux tailles de cle 192 et 256 bits, la generation autonome de nombres premiers aleatoires pour RSA plutot que leur fourniture en parametre, l'ajout de schemas de padding pour renforcer la securite face aux attaques structurelles, et l'implementation d'un mecanisme de signature permettant de garantir l'authenticite de l'auteur d'un message.
Projet suivant
