Application de RSA Standard et RSA Uni- directionnel
Python est un langage de programmation open source interprété côté serveur et non compilé. Créé par Guido van Rossum, il est utilisé pour le développement web, de jeux vidéo et autres logiciels ainsi que pour les in- terfaces utilisateurs graphiques. Il a notamment été utilisé dans la création d’Instagram, de YouTube et de Spotify, et est l’un des langages de program- mation officiels de Google. L’interpréteur Python peut être facilement étendu par de nouvelles fonctions et types de données implémentés en C ou C++ (ou tout autre langage appelable depuis le C). Python est également adapté comme langage d’extension pour personnaliser des applications.Django est un framework python open-source consacré au développement web 2.0 . Les concepteurs de Django lui ont attribué le slogan suivant : » Le framework web pour les perfectionnistes sous pression « . Il est donc clairement orienté pour les développeurs ayant comme besoin de produire un projet solide rapidement et sans surprise … c’est à dire à tous les développeurs !Comme il est toujours compliqué de partir de rien, Django nous propose une base de projet solide. Django est donc une belle boîte à outils qui aide et oriente le développeur dans la construction de ses projets.
Implémentation de RSA Standard
Montrons comment les algorithmes RSA fonctionnent en Python. Le code ci-dessous générera une paire de clés RSA aléatoire, cryptera un message qu’on veut chiffré et le décryptera à sa forme d’origine, en utilisant le schéma de remplissage RSA-OAEP.PyCharm est un environnement de développement intégré dédié aux lan- gages Python et Django. Ce logiciel existe en deux versions disponibles en téléchargement, une version libre et gratuite appelée Community Edition et une version complète payante Professional Edition.Ensuite, on crypte le message au moyen de la clé publique RSA (ici sup- posée être disponible localement dans le fichier « public.pem ») à l’aide du schéma de cryptage RSA-OAEP (RSA avec remplissage OAEP PKCS1) et le text chiffré est stocké dans le fichier « encrypt.txt ».
Enfin, on décrypte le message en utilisant RSA-OAEP avec la clé privée RSA qui est stockée dans le fichier « private.pem », le message décrypté se trouve dans le fichier decrypt.txt.Maintenant, signons un message, en utilisant la clé privée RSA (n, d). Calculons son hachage et augmentons le hachage à la puissance d modulo n (chiffrons le hachage avec la clé privée). Nous utiliserons le hachage SHA-512, il s’adaptera à la taille de clé RSA actuelle (3072). En Python, nous avons l’exponentiation modulaire comme fonction intégrée pow (x, y, n).La signature numérique obtenue est un entier compris entre zéro et la longueur de la clé RSA [0 … n] qui est stocké dans le fichier « sign.txt, comme illustré ci-dessousEnsuite, vérifions la signature en déchiffrant la signature à l’aide de la clé publique (élevons la signature à e modulo n) et comparons le hachage obtenu de la signature(hastFromSignature) au hachage du message signé à l’origine(hash)
Implémentation de RSA Unidirectionnel
Pour l’implémentation de RSA unidirectionnel on crée d’abord deux pairesde clés de taille 3072 et 4096. chaque clé est stockée dans un fichier nommé res- pectivement par « publicuni1.pem », « privateuni1.pem », « publicuni2.pem »,et « privateuni2.pem ». On a donc deux clés publiques et deux clés privéesOn récupére les nombres n, e et d pour chaque clé• Pour les clés de tailles 3072 on a :- les nombres (n,e) qui forment la clé publique ci-dessousEnsuite on crypte le message en claire avec la première clé publique rsa_public_key_uni1 qui est stockée dans le fichier publicuni1.pem et on obtient un message chiffré nommé « encrypted » se trouvant dans le fi- chier « encryptuni1.txt ». Ce dernier sera transformé avec la deuxiéme clé pu- blique rsa_public_key qui se trouve dans le fichier publicuni2.pem on obtient un second chiffré nommé rsa_encrypted stocké dans le fichier « en- cryptuni2.txt »En fin on déchiffre le message « rsa_encrypted » avec la clé privée rsa_private_key_uni2 on obtient un déchiffré nommé « decrypted » qu’on stocke dans le fichier « de-crypt1.txt ». On decrypt le message « decrypted » avec la clé privée rsa_private_key_uni1,on obtient « rsa_decrypted » se trouvant dans le fichier « decrypt2.txt » quicontient le message en claire.
La signature est valide et retourne true car le message reçu est effecti- vement celui qui a été signé. Dans le cas contraire le résultat serait false . »Uplaod », on clic sur le bouton « Chiffrer » et le message est chiffré et gardé dans le fichier « encrypt1.txt » ci-dessous avec la première clé public qui se trouve dans le fichier publicuni1.pemEnsuite on clic sur le bouton « Upload » et on choisit le fichier « encryp- tuni1.txt », on clic sur « Chiffrer » et le contenu du fichier est chiffré de nouveau avec la deuxième clé public stocké dans « publicuni2.txt » et est gardé dans le fichier « encryptuni2.txt ».tuni2.txt » et on clic sur le bouton « Déchiffrer » pour le premier déchiffrement. Le contenu du fichier est déchiffré avec la deuxième clé privée stockée dans « privateuni2.pem » et le chiffré est gardé dans le fichier « decrypt1.txt »Dans ce chapitre nous avons utilisé le framework Django et le langage python avec l’algorithme RSA afin de développer une application web pour le RSA standard et RSA unidirectionnel qui nous permet de faire le chiffrement, le déchiffrement, la signature et la vérification des données.