Attaque de RSA par fractions continuées On rappelle le principe de l’algorithme RSA. Soient p, q ∈ N deux nombres premiers, et soit n = pq. On choisit e ∈ (Z/ϕ(n)Z)× , que l’on rend public ainsi que n, et on calcule un inverse d de e modulo ϕ(n), que l’on garde secret ainsi que p et q. Si une personne veut transmettre nous un message m ∈ Z/nZ, elle calcule me ∈ Z/nZ, qu’elle nous transmet. Il nous suffit de calculer (me )d pour retrouver m. On va présenter une méthode due à Wiener pour attaquer ce cryptosystème, efficace quand d est petit. 1 Fractions continuées. Définition 1. Soient (an )n∈N une suite de nombres entiers naturels. On pose pour tout n ≥ 0, [a0 : a1 , a2 , . . . , an ] = a0 + 1 a1 + 1 a2 + 1 ···+ a1 n La suite [a0 ], [a0 ; a1 ], . . . est convergente. Proposition 1. Soit x ∈ R. Il existe une unique suite (an )n∈N d’entiers naturels telle que x = limn→+∞ [a0 : a1 , a2 , . . . , an ]. De plus, la suite an est nulle à partir d’un certain rang si et seulement si x ∈ Q (on utilise la convention 1/0 = +∞, 1/ + ∞ = 0). On dit que (an ) est le développement en fraction continuée de x, on appelle les [a0 : a1 , a2 , . . . , an ] (n ≥ 0) les réduites de x. Proposition 2. Soit x ∈ R, de développement en fraction continuée [a0 : a1 , a2 , . . . , an ]. On pose p−2 = 0, q−2 = 1, p−1 = 1, q−1 = 0. ¨On définit pour n ≥ 0, pn = an pn−1 + pn−2 , qn = an qn−1 + qn−2 . Alors, pour tout n ≥ 0, pn et qn sont premiers entre eux, et pn /qn = [a0 : a1 , a2 , . . . , an ]. Les rationnels pn /qn s’appellent les convergentes de x. Théorème 1. Soit x ∈ R, et soit pn /qn une convergente de x. Si q est un entier tel que q ≤ qn , alors |x − p/q| ≥ |x − pn /qn |, pour tout p ∈ Z. De plus, si |x − p/q| < 1/2q 2 , alors p/q est une convergente de x. 1 2 Attaque de RSA Soit n = pq, avec p et q premiers, soit e < ϕ(n) inversible modulo ϕ(n), et soit d un inverse de e modulo ϕ(n). On veut calculer d connaissant e et n. Par définition, il existe un entier k ∈ Z tel √ que ed = 1 + kϕ(n). √ Comme e < ϕ(n), on a k < d. Si on suppose que q < p < 2q, alors q < n et n − ϕ(n) < 3 n. On écrit : e k |1 − k(n − ϕ(n))| 3k − = < √ . n d nd d n Proposition 3. Si d < 13 n1/4 , alors on peut retrouver d. Démonstration. Dans ce cas, l’inégalité précédente donne ne − kd < une réduite de ne . 1 2d2 car k < d. Ainsi, k d est Pour déterminer de quelle réduite il s’agit, on peut calculer les premières réduites de e/n, jusqu’à en trouver une dont le dénominateur soit bien d. Pour cela, on remarque que la relation ed = 1 + kϕ(n) devrait fournir la valeur de ϕ(n) si on a trouvé la bonne réduite. Questions. 1. Démontrer la proposition 1. 2. Implémenter le calcul des réduites d’un x ∈ R 3. À la fin du texte, comment s’assurer que l’on a la bonne valeur de ϕ(n) ? 4. Évaluer le temps de calcul pour l’attaque proposée. 5. Implémenter l’attaque et l’appliquer avec n = 53849827354264842453628575584921, e = 49394906641974585153683647525463. 2