INF58 : Cryptologie Attaque de clés RSA par la méthode de Wieer Nicolas DOUZIECH - Thomas JANNAUD - X005 9 mars 008 Table des matières Quelques rappels sur le cryptosystème RSA Pricipe de l attaque de Wieer 3 L algorithme des fractios cotiues 3. Pricipe................................... 3 3. Quelques ues des propriétés fodametales des fractios cotiues.. 3 3.3 L idée de Wieer.............................. 3 3.4 Démostratio............................... 4 3.5 Estimatio de la bore sur d....................... 4 4 Pratique 4 4. Algorithme complet............................ 4 4. Implémetatio............................... 5 4.3 Amélioratios implémetées........................ 6 4.4 Quelques résultats............................. 6 5 Coclusio 7
3 L ALGORITHME DES FRACTIONS CONTINUES Quelques rappels sur le cryptosystème RSA Le pricipe de RSA repose sur le chiffremet asymétrique à clé publique / clé privée suivat : Pour e et d bie choisis, x Z/Z, (x e ) d = x mod. O red alors publique la clé e. Si l o a u message m Z/Z, o ous evoie m e et coaissat d ous retrouvos le message iitial. La puissace du procédé tiet das le fait que coaissat m et e, il est très dur de retrouver d sas coaître la décompositio e facteurs premiers de. La méthode cosiste doc à choisir ombres premiers p et q aussi grads que écessaire, et à poser = p q. O choisit alors e plus ou mois "aléatoiremet", o le red publique, et il reste à calculer d. Choix de e et d : à x fixé, {x k, k Z} est u sous-groupe multiplicatif de (Z/Z), isomorphe d après le théorème chiois à (Z/pZ) (Z/qZ). Le cardial du sousgroupe divise doc ppcm(p, q ). Aisi, si e est premier avec p et q,et si d est l iverse de e das Z/(p )(q )Z (i.e tel que ed = mod (p )(q )), alors (x e ) d = x mod. Pricipe de l attaque de Wieer L attaque de Wieer s applique tout particulièremet lorsque l exposat secret d est faible. Elle repose sur l équatio défiissat d d après l exposat public e et la foctio de Carmichael appliquée au module = p q : e d = mod λ() De cette équatio, o e déduit l existece d u etier K tel que e d = +K λ(). De plus, λ() = ppcm(p, q ) = (p )(q ) G, avec G = pgcd(p, q ). Il viet alors ed = + K G (p )(q ) = + k g (p )(q ), après réductio tel que pgcd(k, g) =. O e déduit alors le pivot de l algorithme des fractios cotiues appliquées à cette attaque : e pq = k dg ( p + q g k ) f = f( δ) pq qui sera efficace si δ = p+q g k pq est très faible. Or, comme pgcd(k, g) = par défiitio et pgcd(k, d) = (d après la formulatio de Bézout : ed = +k (p )(q ) g ), si o détermie la fractio k dg, o obtiedra aisémet k et le produit dg. 3 L algorithme des fractios cotiues Le développemet e fractios cotiues permet de calculer le umérateur et le déomiateur d u ombre ratioel x (de maière exacte). Aisi, sachat que f = f( δ) et que l o coait f, o va pouvoir remoter o pas à f, mais à
3. Pricipe 3 L ALGORITHME DES FRACTIONS CONTINUES so umérateur et à so déomiateur, ce qui apporte cosidérablemet plus d iformatios. Cela permet e l occurece de "casser" le système puisque coaissat ces iformatios o verra que l o parviet à remoter à p, q, et d. 3. Pricipe Tout réel x peut s écrire de maière uique sous la forme x = q 0 + q + q + q 3 + q 4 +..., q, q, N Par costructio, q i = r et r i i = r q i i. O peut oter (q 0, q, q,... ) le développemet d u réel x. O peut ituiter qu ue certaie otio de "cotiuité" se dégage : Si x est proche de y, les premiers termes du développemet de x serot égaux à ceux de y. 3. Quelques ues des propriétés fodametales des fractios cotiues D ue part, le développemet coverge rapidemet, et il est fii si et seulemet si x est ratioel. D autre part, pour i pair : et pour i impair : (q 0, q,..., q i ) < (q 0, q,..., q i+ ) < (q 0, q,..., q i + ) (q 0, q,..., q i + ) < (q 0, q,..., q i+ ) < (q 0, q,..., q i ) La suite x (q 0, q,..., q i ) est doc alterée, et les sous-suites d idices pairs seulemet ou impairs seulemet sot mootoes. Efi, e défiissat i et d i tels que i, i di = (q 0,..., q i )), o a (q 0, q,..., q i ) = q i i + i q id i +d i et i d i i di = ( ) i. 3.3 L idée de Wieer Rappelos que f = f( δ), où δ semble être de petite taille, et l o aimerait coaître le umérateur et le déomiateur de f, sachat ceux de f. L idée de Wieer cosiste à effectuer le développemet e fractios cotiues de f : O ote (q 0, q,..., q m ) le développemet de f et (q 0, q,,q m ) celui de f. Si f et f sot suffisammet proches, alors les premiers termes du développemet de f et de celui de f sot égaux. Et avec u peu de chace, m m, ce qui ferait que le développemet de f serait u sous-développemet de celui de f. L algorithme va foctioer si et seulemet si les m premières valeurs du développemet de f sot celles de f, c est à dire si : m est pair et (q 0, q,..., q m ) < f (q 0, q,..., q m ) = f 3
3.4 Démostratio 4 PRATIQUE m est impair et (q 0, q,,q m + ) < f (q 0, q,,q m ) = f (ceci etraierait que le développemet de f cotiue plus loi qu au rag m) Cette coditio est remplie si δ < 3 où m et d m sot le umérateur et le mdm déomiateur de f. Ce qui semble être de la "chace" e est e fait pas. La coditio m m qui semble être aléatoire est e fait vérifiée sur l itervalle des ratioels compris etre (q 0, q,..., q m ) et (q 0, q,..., q m ) = f (si m est pair), qui est e fait de largeur fδ. 3.4 Démostratio O prouve le résultat das le cas où m est u etier pair. O a l iéquatio ci-dessus si et seulemet si δ < (q0,q,...,qm ) (q 0,q,...,q m). E utilisat les otatios i et d i vues das la partie "propriétés fodametales", l iéquatio se réécrit : δ < m d m m dm (q m m + m )(q md m +d m d m ) Et après réductio, e utisat la propriété fodametale citée e derier, o obtiet δ < m(d m d m ). Par voie de coséquece, δ < md m est suffisat pour obteir la covergece de l algorithme. (et doc δ < 3 aussi) mdm 3.5 Estimatio de la bore sur d O utilise les otatios de l article. Il y est écrit que pour d < 4 le "cassage" du code réussit grâce à l algorithme des fractios cotiues. Coditio de réussite : δ < md m = kdg. Or δ = p+q g k pq doc il suffit que p+q pq < kdg pour que l algorithme marche. O peut estimer p et q par puisque = pq. Ue coditio de réussite est doc kdg soit d kg. K Or k = P GCD(K,G) et g = G P GCD(K,G) doc il suffit que d KG. ed Comme G = P GCD(p, q ) et K = P P CM(p,q ) ed P P CM(p,q ), cela équivaut d avec (p )(q ). G ed (p )(q ) Ue coditio est doc d G ed soit d G e. Comme e <, ue coditio plus stricte est d G. p et q état premiers, avec ue forte probabilité les facteurs de (p ) et (q ) ot que de petits facteurs premiers et G(= P GCD(p, q )) est très petit devat (soit O()). O retrouve doc la coditio d < 4. 4 Pratique 4. Algorithme complet Voici l algorithme complet de l attaque de Wieer cotre ue clé publique (, e). 4
4. Implémetatio 4 PRATIQUE CasserRSA(, e) m 0, q 0 e/, r 0 e/ q 0, 0 q 0 et d 0 while (r m 0) 3 do if m est pair 4 the k/dg < q 0,..., q m + > 5 else k/dg < q 0,..., q m > O vérifie si le développemet partiel coviet pour k/dg 6 edg e dg 7 (p )(q ) edg/k 8 g edg mod 9 if (g = 0) 0 the goto FiTest le développemet e coviet pas p + q (p )(q ) if p + q impair 3 the goto FiTest le développemet e coviet pas 4 ( p q ) = ( p+q ) p q 5 = (( p q ) ) racie carré etière 6 if ( p q ) est pas u carré parfait 7 the goto FiTest le développemet e coviet pas 8 p p+q + p q, q p+q p q 9 d dg/g Fi des vérificatios, retour de d 0 retur d FiTest : Calcul de l élemet suivat du développemet de e/ q m+ = r m et r m+ = r m q m+ 3 if (m=0) 4 the = q 0 q + et d = q 5 else m+ = q m+ m + m et d m+ = q m+ d m + d m 6 retur "Clé icassable" 4. Implémetatio Pour implémeter cet algorithme, ous avos opté pour développer ue classe dot les membres serot os variables, e, m etap, la liste des q i, celle des i et d i et r i est stocké sous le format umérateur (variable r i ) et déomiateur (variable r i ). Pour ce qui est des foctios de calcul, ous avos : Ue foctio casser qui pred e argumet le mode de calcul choisi. Nous verros qu il s agit e fait des amélioratios que ous proposeros plus bas. Ue foctio breaker qui est l implémetatio de l algorithme de base mais das lequel ous etros le umérateur et le déomiateur de f qui approche, de maière iférieure f = k dg. Ue foctio calcul_ext qui calcule l élémet m + du développemet e fractio cotiue et met à jour les listes q i, i et d i. 5
4.3 Amélioratios implémetées 4 PRATIQUE Ue foctio Verifier qui, coaissat le développemet (partiel) de f vérifie s il coviet pour f. Cette foctio pred e argumet ue structure (qui cotiet, p, q, e, d) qui sera remplie si la vérificatio s avère positive et retourera VRAI, sio retourera FAUX. Parallèlemet, ous avos développé ue classe pricipale qui permet de choisir différets formats d etrées (lacemet e lige de commade). O peut spécifier la valeur de, soit directemet, soit via u fichier, celle de e de la même maière. O peut aussi demader la géératio aléatoire d ue clé dot o spécifie la taille (la taille de p et de q). U mode permet aussi de lacer k tests géérat aléatoiremet des clés et les testat. Efi, o peut spécifier le mode de calcul qui précise si o travaille avec la versio de base (par défaut) ou avec ue amélioratio. Pour géérer ue clé, ous choisissos "aléatoiremet" p et q premiers de la taille spécifiée. est alors le produit des deux et ϕ() = (p ) (q ). O choisit alors d aléatoiremet de taille le quart de celle de (BigIteger(.bitLegth()/4, rad)) et o essaie d iverser d pour obteir e ( mod ϕ()). Cepedat, o sait que d est pas toujours iversible, das ce cas, o rejette simplemet la clé et o e essaie ue autre. Notos e passat que pour calculer la racie carrée de, ous avos développé ue foctio sqrt sur les BigIteger qui calcule le plus grad etier (format BigIteger) m tel que m par la méthode de Newto. 4.3 Amélioratios implémetées Nous avos implémeté deux amélioratios proposées das l article. Les deux reposet sur le pricipe d approcher mieux f par f (toujours iférieuremet). Cepedat, elles peuvet e pas foctioer das des cas où l attaque classique foctioe (car o peut se retrouver avec f > f) Pour la première (mode ), il s agit de remplacer f = e par e (, ce qui ) améliore la bore maximale de d. Pour la deuxième (mode ), o souhaite toujours s approcher iférieuremet de f. Aussi, e supposat e et grads, o peut remplacer f = e e+i par f = +i avec i faible. Aussi, o essaie avec i variat de à 00. 4.4 Quelques résultats A titre d illustratio, ous avos testé le programme. Cocerat l algorithme de base, ous avos testé la créatio de 0000 clés de taille 5 bits. O costate que seulemet 306 clés ot pu être géérées jusqu au bout (l iversio de d échoue doc à 70%) Parmi ces 306 clés, seulemet 86 ot pas pu être cassées par l attaque de Wieer, ce qui est u taux d échec de seulemet 6%. Sur u ordiateur ormal, le test de ces 0000 clés ot pris que sept miutes. Notos cepedat qu u même test de 0000 clés mais e choisissat d par BigIteger(.bitLegth()/4-, rad) e géère statistiquemet aucue clé icassable! Cocerat les amélioratios, ous avos simulé 00000 clés comme précédemmet mais lorsqu ue clé est pas cassable par la méthode de base, alors ous tetos de la 6
5 CONCLUSION casser par la versio améliorée et par la versio améliorée. Comme précédemmet, seules 30% des clés ot pu être géérées jusqu au bout (30740 sur 00000), parmi cellesci, 58 ot pu être cassées par l attaque de base (soit eviro 8%). Cepedat, parmi ces 58 clés, l amélioratio a permis d e casser 35, ce qui est certes faible mais motre l itérêt de cette derière. Malheureusemet, la deuxième amélioratio a pu e casser aucue. A titre d exemple, ous doos deux clés o cassées par l attaque de base mais où la première amélioratio a réussi. (l algorithme pred et e e etrée et retoure p, q et d) = 709904940300059964008090346444646884099856797983080437584 338957973088789630059490095677999993473959300456887009503 34599788935494393 e = 480059080345099003067757037963933688587599876889853 37060686055738477045463869766489786500375903934585036 7359996077075658755 p = 508888547834459379994653943968889498084753 5658767549656 q = 66835083988075653543603855300788903065367784374438 456668743703 d = 33745566969577768030836759855 = 794785045088867305566866744053369889040037395396 8637655838778003069006345983378088357060384739975073676 056080588747986349447 e = 6550990765860857885498500403953700383787976469634600 07987606395348686707697839030750787356063937787550895609 43584804334474937457 p = 0075790306693986573383506434850537095060449440680067 8784885 q = 778699863457967979668354574690743437854560478797699949 7496803077 d = 3096667483378089573945603083793 5 Coclusio Comme le motre les résultats, l attaque de Wieer est efficace pour peu que d < 4. De plus, ous costatos que l amélioratio qui cosiste à remplacer e par e ( s avère utile mais e peut pas être gééralisée car o se retrouve fréquemmet ) au dessus de k dg et l algorithme des fractios cotiues est doc plus efficace. 7