3OS PM – 29 janvier 2015 RSA avec Python – Nom : . . . . . . . . . . . . . . . . . . . . . . . . TE n◦ 657 Exercice 1 (5 points) Soit la fonction proc ci-dessous. 1 def proc(a, b): 2 x, xx = 1, 0 3 y, yy = 0, 1 4 while b != 0: 5 q = a // b 6 a, b = b, a % b 7 xx, x = x - q * xx, xx 8 yy, y = y - q * yy, yy 9 return (a, x, y) a) Expliquer ce que fait cette fonction. b) Expliquer en détail le rôle de la ligne no 7. c) A la ligne 9, que vaut a par rapport à x et y ? Exercice 2 (5 points) Créer un fichier Python nommé Nom_Ex2.py qui permet de décomposer un entier naturel non nul n comme une somme de puissances de 2. Par exemple, le fichier pourrait afficher à la console : 100 = 4 + 32 + 64 357 = 1 + 4 + 32 + 64 + 256 2015 = 1 + 2 + 4 + 8 + 16 + 64 + 128 + 256 + 512 + 1024 sv – Gymnase de Burier 1 3OS PM – 29 janvier 2015 Nom : . . . . . . . . . . . . . . . . . . . . . . . . Exercice 3 (6 points) Le fichier Ex3.txt contient deux nombres premiers p et q. On choisit e = 5 qui satisfait la condition gcd(e, ϕ(n)) = 1, où n = p · q. On dispose ainsi d’une clé publique (n, e). a) Dans un fichier Nom_Ex3.py, construire la clé privée (n, d). Afficher à la console la valeur de d. b) Coder le message suivant (présent dans Ex3.txt) à l’aide de la clé publique (n, e) et l’afficher à la console. 1212121212121212121212121212121212121212121212121212121212 c) Décoder le message suivant (présent dans Ex3.txt) à l’aide de la clé privée (n, d)et l’afficher à la console. 552286272664186788564631857984700455907472476279585940597060 910032345859983744925615546127492663685334316976853156087392 492286054148756451673574970807904348821305159693448433784514 720609801829221010443718208244525608679557226563996106232420 213674414386740893281348305724265811795219709375 Exercice 4 (6 points) Le chiffrement d’un message m est possible à partir de la clé publique (n, e). Voici une fonction codage_rsa qui permet de chiffrer un message m. 1 def codage_rsa(m, n, e): 2 return pow(m, e, n) Le déchiffrement d’un message chiffré x est possible à l’aide de la clé privée (n, d). Voici une fonction decodage_rsa qui permet de déchiffrer un message x. 1 def decodage_rsa(x, n, d): 2 return pow(x, d, n) Le fichier Nom_Ex4.py contient ces deux fonctions, deux nombres premiers p et q ainsi que la valeur de e. Le fichier Nom_Ex4.py contient également un message m et un message codé x. En utilisant les fonctions codage_rsa et decodage_rsa qui remplacent l’exponentiation modulaire présente dans les différents codes, compléter le fichier Nom_Ex4.py pour : a) Déterminer la valeur de d, puis afficher sa valeur à la console. b) Coder le message m à l’aide de la clé publique (n, e) et afficher ce message codé à la console. c) Décoder le message codé x à l’aide de la clé privée (n, d) et afficher ce message décodé à la console. sv – Gymnase de Burier 2