• Aucun résultat trouvé

Proposition 3.1.1 Soit (G, ∗) un groupe commutatif dont on note la loi multiplicativement. On peut calculer a

N/A
N/A
Protected

Academic year: 2022

Partager "Proposition 3.1.1 Soit (G, ∗) un groupe commutatif dont on note la loi multiplicativement. On peut calculer a"

Copied!
4
0
0

Texte intégral

(1)

Chapitre 3

Analyse que quelques algorithmes arithm´ etiques

3.1 Puissance rapide et applications.

Proposition 3.1.1 Soit (G, ∗) un groupe commutatif dont on note la loi multiplicativement. On peut calculer a

n

en O(log(n)) op´ erations ∗.

Remarque 3.1.2 On distinguera deux situations assez diff´ erentes selon que le coˆ ut de x ∗ y est ind´ ependant des ´ el´ ements x, y de G ou pas. Donnez 2 exemples de G dans chaque situation.

Entr´ ee: Un ´ el´ ement g de G et un naturel n.

Sortie: Un ´ el´ ement de G : g

n

Fonction puiss(g, n) ;

u ← 1; v ← g ; //u,v : 2 variables locales ; tantque n > 1 faire

si n pair alors

v ← v ∗ v ; n ← n/2;

sinon

u ← u ∗ v; v ← v ∗ v ; n ← (n − 1)/2;

fsi ftantque

retourner u ∗ v;

Algorithme 1: Puissance rapide.

Exercice 3.1.3 Programmez en python et en xcas une fonction de puissance rapide : puis(u,n,loi) et testez la.

3.1.1 RSA.

Proposition 3.1.4 On consid` ere un entier n = p.q o` u p et q sont des nombres premiers impairs distincts. Pour tout entier e premier avec φ(n) = (p − 1)(q − 1), la fonction ψ

e

: (Z

/

/nZ

/

)

×

→ (Z

/

/nZ

/

)

×

, x 7→ x

e

[n] est bijective, et la connaissance de p et q permet de trouver sa r´ eciproque en temps polynomial (en log n).

Remarque 3.1.5 On ne connait pas d’algorithme polynomial (en log n) pour trouver les facteurs premiers d’un entier. De plus la donn´ ee de (n, φ(n)) est ´ equivalente (en temps polynomial) ` a la donn´ ee de (p, q)

Exercice 3.1.6 Dans la documentation officielle de Python, en ´ etudiant les ”builtin functions”, trouver comment obtenir un caract` ere ` a partir d’un code ascii, et vice versa. Trouver dans xcas comment convertir une chaine en la liste des codes ascii de ses caract` eres.

1

(2)

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 e n c o d e une c h a i n e de c a r a c t e r e p a r l ’ e n t i e r somme s u r i d e s c i . 2 5 6 ˆ i ou c i e s t l e c o d e a s c i i du ieme c a r a c t e r e de l a c h a i n 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 u r a n t e f o r i in 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 ( ’ a b c d e f t u t u ’ )

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 ψ

e

il 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 x de (p − 1) ∨ (q − 1).

Remarque 3.1.8 x est un multiple de (p − 1) ∨ (q − 1) si et seulement si, pour tout a premier avec p.q on a a

x

= 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 p et q, uniquement celle de n = p.q

Entr´ ee: Un multiple x de (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

a recoit une valeur al´ eatoire entre 0 et n − 1 telle que a ∧ n = 1;

si a

x/2

6= 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

(3)

On peut maintenant utiliser cet algorithme de type Las Vegas pour trouver (p, q) avec une probabilit´ e de type pile ou face.

Entr´ ee: Un multiple x de (p − 1) ∨ (q − 1) o` u p, q sont premiers impairs, tel que x/2 n’ait pas la mˆ eme propri´ et´ e;

Sortie: (p, q);

p ← 1;

tantque p = 1 ou p = n faire

a recoit une valeur al´ eatoire entre 0 et n − 1 telle que a ∧ n = 1;

p = (a

x/2

− 1) ∧ n;

ftantque sinon

retourner (p, n/p);

fsi

Algorithme 3: Trouve p,q

3.2 Primalit´ e

3.2.1 Liste ou tests

Entr´ ee: un entier N

Sortie: la liste des premiers inf´ erieurs ` a N ; Fonction Premiers(N);

liste ← [2 : N ] ; //la liste est index´ ee de 0 ` a N − 1;

i ← 0;

tantque i < longueur(liste) faire p ← liste[i] ; m ← 2p;

tantque m ≤ N faire

si m est dans la liste alors Enlever m de la liste;

fsi

m ← m + p;

ftantque i ← i + 1;

ftantque

retourner liste;

Algorithme 4: Crible d’Eratost` ene

Exercice 3.2.1 Progammez en Python le crible d’Eratost` ene, et donnez un ordre de grandeur de N pour qu’il mette plus de 1 ` a 2 minutes pour r´ epondre.

Th´ eor` eme 3.2.2 (Petit th´ eor` eme de Fermat) Si p est un nombre premier, alors pour tout a premier avec p, on a

a

p−1

≡ 1 (mod p) .

On dit qu’un entier a, 1 < a < n, est t´ emoin de la non primalit´ e de n si a

n−1

6≡ 1 (mod n), sinon on dit que n passe le test de Fermat pour a. Si a n’est pas t´ emoin alors que n n’est pas premier, on dit que n est faux t´ emoin.

3

(4)

Entr´ ee: Un entier N ;

Sortie: La liste des entiers inf´ erieurs ` a N , N ≥ 5, qui passent le test de Fermat pour 2 et 3;

Fonction TestFermat(N);

liste← [2, 3];

pour n entre 5 et N faire si 2

n−1

≡ 1 (mod n) alors

si 3

n−1

≡ 1 (mod n) alors Ajouter n ` a la liste;

fsi fsi fpour

retourner liste;

Algorithme 5: test de fermat

Exercice 3.2.3 Ecrire les fonctions correspondantes en Python, et trouver les intrus dans la liste obtenue avec TestFermat(3000).

3.2.2 Le test de Miller-Rabin

Entr´ ee: entier impair n ` a tester, entier t donnant le nombre de t´ emoins.

Sortie: un r´ eponse sure n est non premier, ou bien une r´ eponse probabiliste : n est probablement premier

b ← 0 ;r ← n − 1;

tantque r est pair faire

b ← b + 1 ; r ← r/2 ; // n − 1 = 2

b

r, r impair ; ftantque

pour j de 1 ` a t faire

choisir au hasard d entre 2 et n − 2;

d ← (d

r

mod n) ; // positif si d vaut 1 ou n − 1;

si d 6= 1 et d 6= n − 1 alors k ← 1;

tantque k < b et d 6= n − 1 faire

d ← (d

2

mod n) ; k ← k + 1 ; // calcul des carr´ es successifs;

si d = 1 alors

retourner (“non premier”) ; // plus d’espoir de trouver −1 : n´ egatif;

fsi ftantque

si d 6= n − 1 alors

Sortie(“non premier”);

fsi fsi fpour

retourner (“tr` es probablement premier”) ;

Algorithme 6: Test de Miller-Rabin

Exercice 3.2.4 1. En s’appuyant sur le th´ eor` eme suivant, justifier le test de Miller-Rabin.

2. On admet que dans le test de Miller-Rabin le nombre de faux t´ emoins pour un entier n non premier est au plus n/4. Combien de t´ emoins suffisent pour que la r´ eponse positive soit exacte avec une probabilit´ e sup´ erieure ` a 1 − (A.N. = 10

−6

).

Th´ eor` eme 3.2.5 Si p est premier impair, et si n − 1 = 2

b

r, avec r impair, alors pour tout a premier avec n :

soit a

r

≡ 1 (mod n),

soit il existe k , 0 ≤ k < b, tel que : a

r2k

≡ −1 (mod n).

Exercice 3.2.6 Etudier la preuve du th´ eor` eme et la majoration du nombre de faux t´ emoins.

4

Références

Documents relatifs

Donnez l’automata sur l’alphabet sur l’alphabet A = {a, b, c} ayant un nombre pair de a et de b et un nombre impair de

Extraire de CH un caractère à partir de la position 2 et mettre le résultat dans la variable SCH Page 14. Nom &amp;

5 Montrer que les droites AM et BN

R´ esoudre (E h ) en suivant l’algorithme du cours et pr´ eciser une base du sous-espace vectoriel P... En d´ eduire que la matrice M

[r]

Le discriminant ∆ de ce polynˆ ome est 40... La solution est la 2`

Les suites sont donc adjacentes et convergent vers la même

[r]