![]() ![]() ![]() ![]() |
Systèmes modernes à clé publique3. Le cryptage RSA (2)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GénéralitésStéganographieCryptanalyseLittératureTranspositionsSubs. monoα
|
RSA et factorisationLe secret du RSA, nous l'avons dit, est très lié à la difficulté de factoriser efficacement de grands entiers. Ayant écarté les algorithmes naïfs, par quelles méthodes contemporaines le RSA peut-il être mis en péril ?Le problèmeÉtant donné un entier n, on cherche à le factoriser.Supposons qu'il existe x et x' tels que x2 ≡ x'2 (mod. n) et x ≢ ±x' (mod. n). Alors x2 − x'2 = (x−x')(x+x') ≡ 0 (mod. n), donc n∧(x−x') et n∧(x+x') sont en facteur dans n. Le problème devient la détermination de x et x' pour un coût de calcul raisonnable... Il est intéressant de rappeler que dès 1919, E. Carissan avait réalisé une machine électromécanique automatisant partiellement ce type de recherche ! ![]() Crible quadratique
![]() exempleSoit n = 119
On en déduit (16×11)2 ≡ 62 (mod. n). Donc 119 | (16×11)2 − 62 = (176−6)(176+6) = 170×182. Par conséquent, des facteurs de n sont
Tout ceci ne semble guère systématique -- il ne paraît même pas acquis que le processus converge. Détaillons davantage. ![]() Généralisation : combinaison de congruencesOn se donne a priori k (petits) facteurs premiers p1, ..., pk.Comme précédemment, pour plusieurs choix d'entiers xi, on effectue une tabulation des
Toutefois, on ne sélectionne chaque xi que si yi se décompose uniquement en fonction de p1, ..., pk [1]. On construit ensuite la matrice M = (mi,j) ∈ ℳp,k(𝔽2) définie par
(exposant de pj modulo 2 dans la factorisation de yi). On recherche alors des relations de dépendance linéaire à coefficients dans ℕ* entre les lignes de M, du type :
alors :
... mais c'est également, par définition, le carré de x1α1 × ... × xpαp -- on peut donc amorcer ainsi la factorisation. Cette recherche des combinaisons peut être conduite en appliquant à M une méthode de type pivot. ![]() exemplen = 24163481 ; {pi} = {2, 3, 5, 11, 13, 17}
La matrice M est donc :
et on peut voir [2] que L2 + L3 = 0𝔽2k, ce qui correspond à (9832×10118)2 ≡ (24×53×11×13)2 mod. n. Ceci qui nous conduit à poser x = 9832×10118 ≡ 2826252 mod. n et x' = 24×53×11×13 ≡ 286000 mod. n, puis
![]() Analyse et perspectives
Quelle est l'efficacité de cet algorithme ? En l'optimisant correctement, on estime que le temps de calcul est borné par exp(d1/3+ε) (où d = log(n). Pour des valeurs typiques de d ∈ [300, 1024], le temps de calcul T est voisin de exp(6d1/3). |