Un exemple de programme python pour encoder une chaine vers un entier. thonverb
(python)
def c h a i n e 2 e n t i e r s (L ) :
”””On enc ode une c ha in e de c a r a c t e r e par l ’ e n t i e r somme su r i d es
c i . 25 6ˆ i ou c i e s t l e cod e a s c i i du ieme c a r a c t e r e de l a c ha in e ”””
a=1; s=0 # s e s t l a somme p a r t i e l l e , e t a l a p u i s s a n c e de 256 c o ur an t e
for iin L :
s=s+a∗ord ( i )
a=a ∗256
return s
print c h a i n e 2 e n t i e r s ( ’ ab cdef tutu ’ )
Exercice 3.1.7 Avec xcas, trouver p, q avec nextprime tels que n:=p*q;ifactor(n); ne semble
pas r´epondre. Choisissez un entier e, trouvez son inverse modulo φ(n)avec xcas, (ou si vous avez
le temps avec une fonction Python bezout que vous auriez programm´e). Puis cr´eez une fonction
python qui encode un message d’au plus 20 caract`eres en un entier, et une fonction qui d´ecode cet
entier.
3.1.2 Algorithmes probabilistes : Monte Carlo & Las Vegas.
Il existe deux types d’algorithmes probabilistes.
-Las Vegas : La r´eponse est fixe, mais pas le temps d’ex´ecution. Il continue d’utiliser une
donn´ee al´eatoire jusqu’`a ce qu’il trouve la r´eponse voulue. (il joue jusqu’`a gagner)
-Monte Carlo : Ici le temps d’ex´ecution est fixe, mais pas la r´eponse. Autrement dit, on
produit une r´eponse `a partir d’un nombre fix´e de tirages al´eatoires. Ex une valeur approch´ee
d’int´egrale.
S’il est clair que dans le protocole RSA la donn´ee de n, φ(n) permet de trouver l’inverse de ψeil
n’est pas tout `a fait vrai qu’il faut connaˆıtre φ(n) pour trouver cet inverse en temps polynˆomial.
En effet, il suffit de connaˆıtre un multiple xde (p−1) ∨(q−1).
Remarque 3.1.8 xest un multiple de (p−1) ∨(q−1) si et seulement si, pour tout apremier
avec p.q on a ax= 1 [p.q]
Nous donnons donc ici un algorithme probabiliste qui donne les nombres premiers p, q `a partir d’un
multiple de (p−1) ∨(q−1).
Tout d’abord, un algorithme de type Monte Carlo (qui n’utilise pas la connaissance de pet q,
uniquement celle de n=p.q
Entr´ee: Un multiple xde (p−1) ∨(q−1) o`u p, q sont premiers impairs. Une probabilit´e π.
Sortie: Une r´eponse sˆure : x/2 n’est pas multiple de (p−1) ∨(q−1). ou bien;
une r´ep. prob : x/2 est probablement un multiple de (p−1) ∨(q−1).
t←1;
tantque t > (1 −π)faire
arecoit une valeur al´eatoire entre 0 et n−1 telle que a∧n= 1;
si ax/26= 1 [n]alors
t←0;
sinon
t←t/2 //la probabilit´e de perdre est de 1/2;
fsi
ftantque
si t= 0 alors
retourner x/2 non multiple;
sinon
retourner x/2 probablement multiple;
fsi
Algorithme 2: Test x/2
2