Ce projet consiste en l'implémentation des algorithmes de chiffrement cryptographiques :
- une version simplifiée de l'algorithme de chiffrement AES (Advanced Encryption Standard)
- plusieurs variantes de l'algorithme RSA (Rivest-Shamir-Adleman),
Avec pour objectif :
- D'explorer les concepts fondamentaux du chiffrement
- étudier en RSA plusieurs concepts, y compris RSA-CRT, RSA avec padding, et les notions de malleability et indistinguishability.
Veuillez consulter le document officiel pour une explication détaillée du projet :
-
PDF MINI-AES : mini_aes.pdf
-
Images MINI-AES :
-
PDF RSA : rsa.pdf
-
Images RSA :
Avant de commencer, assurez-vous d'avoir installé les éléments suivants :
- Java JDK 11+
- Eclipse IDE (ou tout autre IDE compatible Java)
- Git
- Clonez ce dépôt Git :
git clone https://github.com/mohamed-nsa/cryptography-programming.git cd cryptography-programming
- Ouvrez Eclipse.
- Allez dans File > Import > Existing Projects into Workspace.
- Sélectionnez le dossier du projet cryptography-programming.
- Cliquez sur Finish.
- Ouvrez les fichiers principales :
../aes.java,../affine_cipher.java,../rsa.java - Exécutez-le en cliquant sur Run (ou en utilisant le raccourci
Ctrl + F11).
- Chiffrement et déchiffrement basés sur une version mini de AES, chiffrement Affine et RSA.
- Possibilité d'expérimenter avec différentes clés et blocs de données.
- Pour le chiffrement RSA les travaux demandés sont :
-
- Générer la clé publique
(e, N)et la clé privée(d, N), en choisissantetel queGCD(e, φ(N)) = 1.
- Générer la clé publique
-
- Implémenter l'algorithme Square-and-Multiply pour le calcul rapide de
a^b mod n.
- Implémenter l'algorithme Square-and-Multiply pour le calcul rapide de
-
- Implémenter les fonctions de chiffrement et de déchiffrement en utilisant l'exponentiation modulaire.
-
- Déchiffrement optimisé en résolvant : M ≡ C^d mod p M ≡ C^d mod q
-
- Montrer comment un attaquant peut modifier un message chiffré sans connaître la clé privée.
-
- Implémenter un algorithme permettant de retrouver
petqsiφ(N)est connu.
- Implémenter un algorithme permettant de retrouver
-
[!Jusqu'à maintenant, j'ai arrêté mon implémentation à la 6ème question]
-
- Montrer comment un attaquant peut retrouver
Msi le même message est envoyé à Alice et Bob.
- Montrer comment un attaquant peut retrouver
-
- Utiliser les classes
KeyPair,KeyPairGenerator,PublicKey, etPrivateKeypour générer une paire de clés de 1024 bits.
- Utiliser les classes
-
- Implémenter le chiffrement et le déchiffrement avec le schéma de padding PKCS#1.
-
- Générer et vérifier une signature numérique en utilisant deux méthodes :
- Avec
MessageDigestetCipher. - Avec la classe
Signature.