Algorithme de Shor
144983
28635775
2008-04-14T12:20:36Z
Fguerraz
135027
/* II. Trouver la période */ Lien erroné
En [[arithmétique modulaire]], l''''algorithme de Shor''' est un [[Algorithmique|algorithme]] [[calculateur quantique|quantique]] pour [[Décomposition en produit de facteurs premiers|factoriser]] un nombre ''N'' en temps [[notation O|O]]((log ''N'')<sup>3</sup>) et en espace O(log ''N''), nommé en l'honneur de [[Peter Shor]].
Beaucoup de [[Cryptographie asymétrique|cryptosystèmes à clé publique]], tels que le [[Rivest Shamir Adleman|RSA]], deviendraient cassables par un tiers si l'algorithme de Shor était un jour programmé dans un [[calculateur quantique]] pratique. Un message chiffré avec RSA peut être déchiffré par factorisation de sa clé publique ''N'', qui est le produit de deux [[nombre premier|nombres premiers]]. Il est connu que les algorithmes classiques ne peuvent pas faire cela en temps O((log ''N'')<sup>''k''</sup>) pour n'importe quel ''k'', donc, ils deviennent rapidement impraticables quand ''N'' augmente, à la différence de l'algorithme de Shor qui peut casser le RSA en temps polynomial. Il a été aussi étendu pour attaquer beaucoup d'autres cryptosystèmes à clé publique.
Comme tous les algorithmes pour calculateur quantique, l'algorithme de Shor est probabiliste : il donne la réponse correcte avec une haute probabilité et la probabilité d'échec peut être diminuée en répétant l'algorithme.
L'algorithme de Shor fut utilisé en 2001 par un groupe d'[[International Business Machines|IBM]], qui factorisa 15 en 3 et 5, en utilisant un calculateur quantique de 7 [[qubit]]s.
=== Procédure ===
Le problème que nous allons essayer de résoudre est le suivant, soit un [[nombre entier|entier]] donné ''N'', nous essayons de trouver un autre entier ''p'' compris entre ''1'' et ''N'' qui divise ''N''.
L'algorithme de Shor consiste en deux parties :
# Une réduction du problème de factorisation en un problème de [[Ordre (théorie des groupes)|recherche d'ordre]], qui peut être effectué sur un ordinateur classique.
# Un algorithme quantique pour résoudre le problème de recherche d'ordre.
==== Partie classique ====
# Prendre un nombre pseudo-aléatoire ''a'' < ''N''
# Calculer le [[Plus grand commun diviseur|PGCD]](''a'', ''N''). Ceci peut être effectué par l'utilisation de l'[[algorithme d'Euclide]].
# Si PGCD(''a'', ''N'') ≠ 1, alors c'est un facteur non-trivial de ''N'', donc effectué.
# Autrement, utiliser la sous-routine de recherche de période (ci-dessous) pour trouver ''r'', la [[fonction périodique|période]] de la fonction suivante :<br /><math>f(x) = a^x\ \mbox{mod}\ N</math>,<br />c.a.d. le plus petit entier ''r'' pour lequel <math>f(x+r) = f(x)</math>.
# Si ''r'' est [[nombres pairs et impairs|impair]], retourner à l'étape 1.
# Si ''a'' <sup>''r''/2</sup> ≡ -1 (mod ''N''), retourner à l'étape 1.
# Les facteurs de ''N'' sont PGCD(a<sup>''r''/2</sup> ± 1, ''N''). Effectué.
==== Partie quantique : sous-routine de recherche de période ====
<ol>
<li>Commencer avec des registres d'entrée et de sortie de chacun log<sub>2</sub>''N'' qubits , et les initialiser à:
:<math>N^{-1/2} \sum_x \left|x\right\rangle \left|0\right\rangle</math>
où ''x'' va de 0 à ''N'' - 1.</li>
<li>Construire ''f''(''x'') comme une fonction quantique et l'appliquer à l'état précédent, pour obtenir
:<math>N^{-1/2} \sum_x \left|x\right\rangle \left|f(x)\right\rangle</math>
</li>
<li>Appliquer la [[Analyse harmonique sur un groupe abélien fini|transformée de Fourier]] quantique au registre d'entrée. La transformée de Fourier quantique sur ''N'' points est définie par :
:<math>U_{QFT} \left|x\right\rangle
= N^{-1/2} \sum_y e^{2\pi i x y/N} \left|y\right\rangle</math>
Ce qui donne l'état suivant :
:<math> N^{-1} \sum_x \sum_y e^{2\pi i x y/N} \left|y\right\rangle \left|f(x)\right\rangle</math>
</li>
<li>Effectuer une mesure.
On obtient ainsi une certaine valeur ''y'' dans le registre d'entrée et <math>f(x_0)</math> dans le registre de sortie.
Comme ''f'' est périodique, la probabilité de mesurer un certain ''y'' est donnée par
:<math> N^{-1} \sum_{x:\, f(x)=f(x_0)} \left| e^{2\pi i x y/N} \right|^2
= N^{-1} \sum_{b} \left| e^{2\pi i (x_0 + r b) y/N} \right|^2
</math>
Le calcul montre que cette probabilité est plus haute quand ''yr/N'' est proche d'un entier.</li>
<li>Mettre ''y/N'' sous forme irréductible, et extraire le dénominateur ''r''′, qui est un candidat pour ''r''.</li>
<li>Vérifier si ''f''(''x'') = ''f''(''x'' + ''r''′). Si c'est le cas, c'est terminé.</li>
<li>Autrement, obtenir plus de candidats pour ''r'' en utilisant des valeurs proches de ''y'', ou multiples de ''r''′. Si un autre candidat marche, c'est terminé.</li>
<li>Sinon, retourner à l'étape 1 de la sous-routine.</li>
</ol>
=== Explication de l'algorithme ===
L'algorithme est composé de deux parties. La première partie transforme le problème de factorisation en un problème de recherche de période d'une fonction et peut être implémentée de façon classique. La seconde partie trouve la période en utilisant la transformée de Fourier quantique et est responsable de l'accélération quantique.
==== I. Obtenir des facteurs à partir de la période ====
Les entiers inférieurs à ''N'' et [[premiers entre eux|premiers avec]] ''N'' forment un [[groupe (mathématiques)|groupe]] fini muni de la multiplication [[Congruence sur les entiers|modulo]] ''N'', qui est typiquement noté ('''Z'''/''N'''''Z''')<sup>×</sup>. Par la fin de l'étape 3, nous avons un entier ''a'' dans ce groupe. Comme le groupe est fini, ''a'' doit avoir <!--référence nécessaire-->un ordre fini ''r'', le plus petit entier positif tel que
:<math>a^r \equiv 1\ \mbox{mod}\ N</math>
Par conséquent, ''N'' | (''a'' <sup>''r''</sup> - 1). Supposons que nous somme capable d'obtenir ''r'' et qu'il est [[nombres pairs et impairs|pair]]. Alors
:<math>a^r - 1 = (a^{r/2} - 1) (a^{r/2} + 1) \equiv 0\ \mbox{mod}\ N</math>
:<math>\Rightarrow N\ | (a^{r/2} - 1) (a^{r/2} + 1)</math>
''r'' est le ''plus petit'' entier positif tel que ''a'' <sup>''r''</sup> ≡ 1, donc ''N'' ne peut pas diviser (''a'' <sup>''r'' / 2</sup> - 1). Si ''N'' ne divise pas non plus (''a'' <sup>''r'' / 2</sup> + 1), alors ''N'' doit avoir un facteur commun non-trivial avec chacun des (''a'' <sup>''r'' / 2</sup> - 1) et (''a'' <sup>''r'' / 2</sup> + 1).
'''Preuve :''' Pour simplifier, notons (''a'' <sup>''r'' / 2</sup> - 1) et (''a'' <sup>''r'' / 2</sup> + 1) par ''u'' et ''v'' respectivement. ''N'' | ''uv'', donc ''kN'' = ''uv'' pour certain entier ''k''. Supposons que PGCD(''u'', ''N'') = 1; alors ''mu'' + ''nN'' = 1 pour certains entiers ''m'' et ''n'' (ceci est une propriété du [[Plus grand commun diviseur|PGCD]].) En multipliant les deux cotés par ''v'', nous trouvons que ''mkN'' + ''nvN'' = ''v'', donc ''N'' | ''v''. Par contradiction, PGCD(''u'', ''N'') ≠ 1. Par un argument similaire, PGCD(''v'', ''N'') ≠ 1.
Ceci nous fournit une factorisation de ''N''. Si ''N'' est le produit de deux nombres premiers, ceci est la ''seule'' factorisation possible.
==== II. Trouver la période ====
L'algorithme de recherche de période de Shor est fortement relié à la capacité d'un [[calculateur quantique]] d'être dans de nombreux états simultanément.
Les physiciens appellent ce comportement une « [[Principe de superposition quantique|superposition]] » d'états.
Pour calculer la période d'une fonction ''f'', nous évaluons la fonction en tous ses points simultanément.
Pourtant, la physique quantique ne nous permet pas d'accéder à toute l'information directement. Une [[Mesure en mécanique quantique|mesure]] fournira seulement une parmi toutes les valeurs possibles en détruisant toutes les autres.
Par conséquent nous avons à transformer avec précaution la superposition en un autre état qui retournera la réponse correcte avec une haute probabilité.
Ceci est achevé par la [[Analyse harmonique sur un groupe abélien fini|transformée de Fourier]] quantique.
Shor eut ainsi à résoudre trois problèmes d'« implémentation ».
Tous ont été implémentés « rapidement », ce qui veut dire qu'ils peuvent être implémentés avec un nombre de [[porte quantique|portes quantiques]] qui est [[polynomiale (Complexité)|polynomial]] en <math>\log N</math>.
<ol>
<li> Créer une superposition d'états.
Ceci peut être fait en appliquant des portes d'Hadamard à tous les qubits dans le registre d'entrée.
Une autre approche serait d'utiliser la transformée de Fourier quantique (voir ci-dessous).
<li> Implémenter la fonction ''f'' comme une transformation quantique.
Pour achever cela, Shor utilisa l'[[Exponentiation par carrés|élévation au carré]] pour sa transformation d'exponentiation modulaire.
<li> Exécuter une transformation de Fourier quantique.
En utilisant les portes NON contrôlées et les portes qubit à rotation unique Shor conçu un circuit pour la transformée de Fourier quantique qui utilise juste <math>O((\log N)^2)</math> portes.
</ol>
Après toutes ces transformations, une mesure fournira une approximation de la période ''r''.
Pour simplifier, assurons-nous qu'il existe un ''y'' tel que ''yr/N'' soit un entier.
Alors la probabilité de mesurer ''y'' est 1.
Pour voir cela, notons qu'alors
:<math>e^{2 \pi i b yr/N} = 1\,</math>
Pour tous les entiers ''b''.
Par conséquent, la somme qui nous donne la probabilité de mesurer ''y'' sera de ''N/r'' comme ''b'' prend globalement ''N/r'' valeurs et ainsi, la probabilité est ''1/r''.
Il existe ''r'' ''y'' tels que ''yr/N'' soit un entier donc les probabilités totalisent 1.
<br />
<br />
Note : une autre manière d'expliquer l'algorithme de Shor est de noter que c'est juste l'[[algorithme d'estimation de phase quantique]] déguisé.
=== Références ===
Préimpression de l'article original de Peter Shor :
* [http://www.arxiv.org/abs/quant-ph/9508027 ''Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer'', Peter W. Shor]
Un livre généraliste sur le calcul quantique :
* ''Quantum Computation and Quantum Information'', Michael A. Nielsen, Isaac L. Chuang, Cambridge University Press, 2000
{{portail mathématiques}}
[[Catégorie:Informatique quantique]]
[[Catégorie:Algorithme de factorisation des entiers]]
[[ar:خوارزمية شوور]]
[[de:Shor-Algorithmus]]
[[en:Shor's algorithm]]
[[es:Algoritmo de Shor]]
[[it:Algoritmo di fattorizzazione di Shor]]
[[ko:쇼어 알고리즘]]
[[lt:Šoro algoritmas]]
[[pl:Algorytm faktoryzacji Shora]]
[[ru:Алгоритм Шора]]