Crypto
Travaux Dirig´es Crypto no2
—Formation ISN—
Objectif du TP : programmer RSA.
1 Exponentiation binaire
Question 1 ´
Ecrire un petit programme qui affiche la liste des chiffres en base 2 d’un entier donn´e
(par exemple fourni au clavier, peu importe). On demande de faire en sorte que cette fonction-
nalit´e du programme puisse par la suite resservir, donc il est souhaitable d’´ecrire une fonction
chiffres en base 2, prenant comme argument un entier, et renvoyant une liste python.
Pour r´ealiser cette conversion d’un entier xen base 2, on peut s’y prendre de plusieurs fa¸cons.
– Premi`ere m´ethode, r´ecursive :
– Si k= 1, retourner la liste [1].
– Si k= 2k0+ 1, calculer r´ecursivement l’´ecriture en base 2 de k0, puis en d´eduire celle de k.
Idem dans le cas k= 2k0.
– Deuxi`eme m´ethode (la mˆeme sans r´ecursivit´e) :
– Pour calculer le d´eveloppement en base 2 de x, on maintient deux entiers yet k, et une liste
t, tels qu’`a chaque instant test de longueur k, et : x=y2k+Pk−1
i=0 ti2i.
– Initialement, y=x,k= 0, et test la liste vide.
– Tant que yest non nul, effectuer l’op´eration suivante :
– Si yest impair, ajouter 1 `a la fin de t.
– Si yest pair, ajouter 0 `a la fin de t.
– Diviser ypar deux. Incr´ementer k.
Question 2 Combien d’op´erations en gros sont n´ecessaires pour effectuer le calcul pr´ec´edent selon
les m´ethodes ci-dessus ? Utilisez votre programme avec des entiers de 10, 20, 40, 80 chiffres (ou plus)
pour tenter de confirmer exp´erimentalement cette hypoth`ese.
Question 3 ´
Ecrire un programme par exponentiation binaire pour calculer akmod n, ´etant donn´e
trois entiers a,k, et n. En prenant pour ndes entiers de tailles croissante, tenter d’obtenir un ordre
de grandeur du nombre d’op´erations en fonction du nombre de chiffres de n.
2 Algorithme d’Euclide
On propose de programmer l’algorithme d’Euclide pour calculer le pgcd de deux entiers, et de
s’en servir dans un second temps pour calculer des inverses modulo un entier n.
On utilise le r´esultat suivant :
Proposition 1 Pour aet bdeux entiers, et b > 0, le pgcd de aet best le mˆeme que le pgcd de b
et de bmod a.
Ainsi, pour calcule pgcd(42,17), on se ram`ene `a
pgcd(42,17) = pgcd(17,8) = pgcd(8,1) = pgcd(1,0) = 1.
Question 4 ´
Ecrire un programme qui calcule le pgcd de deux nombres entiers.
On souhaite maintenant calculer des inverses modulaires. L’explication est un peu longue, mais
normalement le programme est court. Ceci ne sert pas avant la question 7.
1