• Aucun résultat trouvé

Probl`eme des racines carr´ees modulaires

Chapitre 3 Contributions et R´ esultats

4.3 Attaque des implantations type ”Left-To-Right”

4.3.2 Probl`eme des racines carr´ees modulaires

Dans cette partie, nous d´etaillerons l’algorithme que nous avons choisi pour implanter le calcul de racines carr´ees modulaires. Nous montrerons ensuite, par une ´etude statistique d´etaill´ee, que le fait de consid´erer seulement les signatures obtenues avec un module faut´e premier est une hypoth`ese r´ealiste.

4.3.2.1 Algorithme de Tonelli & Shanks

L’algorithme de Tonelli & Shanks [Coh93] est une m´ethode probabiliste mais relativement efficace pour calculer des racines carr´ees dans un groupe muni d’une multiplication (Z/P Z)∗, o`u P est un nombre premier. `A partir de cet algorithme, le calcul de racines carr´ees modulaires peut ˆetre g´en´eralis´e `a tout groupe cyclique. Pour ce faire commencer par identifier l’existence d’un isomorphisme entre le groupe multiplicatif (Z/P Z)∗ et le groupe additif Z/ (P− 1) Z. En effet, supposons que P − 1 puisse aussi s’´ecrire :

P− 1 = 2e· r, avec r impair. (4.29)

Alors, le groupe cyclique G d’ordre 2e est un sous-groupe de Z/ (P− 1) Z. Soit z un g´en´erateur de G, si a est un r´esidu quadratique24 modulo P , alors :

a(P −1)/2≡ (ar)2e−1 ≡ 1 mod P (4.30)

On peut alors noter que ar mod P est aussi un r´esidu quadratique dans G, soit∃k ∈ [[0 : 2e− 1]]

de telle sorte que :

ar· zk = 1 dans le groupe G (4.31)

Ou encore, ar+1 · zk = a dans le groupe G. Par cons´equent, la racine carr´ee modulaire de a

modulo P peut s’exprimer ainsi :

a1/2≡ a(r+1)/2· zk/2 mod P (4.32)

Les principales ´etapes de cet algorithme de calcul de racines carr´ees modulaires sont donc :

Chapitre 4. Analyse de la perturbation d’un module RSA – Trouver un g´en´erateur z du sous-groupe multiplication G, – Calculer l’exposant k.

Afin de nous convaincre de l’efficacit´e de cet algorithme pour calculer des racines carr´ees mod- ulaires, nous l’avons implant´e sur PC et mesur´e ses performances. Ces r´esultats sont r´esum´es dans la partie suivante.

Implantation et R´esultats. A partir du principe du calcul de racines carr´ees modulaires pro-` pos´e par Tonelli & Shanks nous avons implant´e l’algorithme correspondant sur un PC [Coh93]. En pratique, la partie la plus coˆuteuse de l’algorithme correspond `a la recherche de l’exposant k. Par cons´equent, la complexit´e calculatoire de l’algorithme est domin´ee par la complexit´e de cette recherche :

CT onelli & Shanks = O ln4P op´erations binaires (4.33)

= O (ln P ) exponentiations (4.34)

Pour mieux se rendre compte, sur un Pentium IV 3.2GHz, notre implantation GIVARO25 de l’algorithme n´ecessitait en moyenne 7/1000 de secondes pour trouver une racine carr´ee modulaire, pour des groupes de taille 1024 bits. Par cons´equent, les performances r´eelles de l’implantation de cet algorithme ont retenu notre attention, c’est pourquoi nous l’avons choisi pour r´ealiser l’exploitation de signatures erron´ees.

Remarque 3. Comme dans [Mui06], la contrainte sur la primalit´e du module perturb´e peut ˆetre ´etendue au cas o`u celui ci est nombre friable. En d’autres termes, on peut aussi consid´erer les cas o`u le module faut´e est factorisable par de ”petits” nombres premiers. En effet, si la factorisation du module est connue, il est possible de calculer facilement des racines carr´ees modulaires. Dans ce cas, le principe consiste `a chercher les racines carr´ees modulo chacun des facteurs de ˆN puis `

a combiner les racines obtenues grˆace au Th´eor`eme des Restes Chinois (cf. [Sho05,§13.3.3] pour une explication plus d´etaill´ee). Dans un souci de clart´e, nous consid´ererons seulement les cas o`u les modules perturb´es sont premiers pour calculer les racines carr´ees.

4.3.2.2 Analyse statistique du nouveau mod`ele de faute

Dans le paragraphe pr´ec´edent, nous avons retenu une m´ethode pour calculer des racines carr´ees modulaires. Or, dans le cadre de notre analyse de perturbation, ce calcul de racines carr´ees n’est possible que si le modulo faut´e ˆN est un nombre premier. Il est alors l´egitime de se demander si cette condition n’est pas r´edhibitoire pour que l’attaque soit applicable en pratique. Afin de r´epondre `a cette interrogation, nous proposons ici une ´etude statistique de ce nouveau mod`ele de faute.

Pour commencer cette ´etude, nous proposons d’estimer le nombre de premiers pour une taille en bits fix´ee. D’apr`es [Dus98, Th´eor`eme 1.10], le nombre de premiers π inf´erieurs `a un entier x peut ˆetre born´e par :

π(x) x ln(x)  1 + 1 ln(x)+ 1.8 ln2(x)  , pour x≥ 32299. (4.35) π(x) ≤ x ln(x)  1 + 1 ln(x)+ 2.51 ln2(x)  , pour x≥ 355991.

25. GIVARO est une librairie C++ open source pour l’arithm´etique et le calcul alg´ebrique. Cette librairie, bas´ee sur GMP, est disponible `a l’adresse http://packages.debian.org/fr/sid/libgivaro-dev

4.3. Attaque des implantations type ”Left-To-Right” Par cons´equent, pour des nombres dont la taille est exactement τ bits tel que τ ≥ 19 bits, le nombre de premiers est :

πτ = π(2τ)− π(2τ −1) (4.36)

En utilisant l’expression des bornes d´etaill´ees par l’´equation (4.35), on peut approximer finement la probabilit´e qu’un nombre de τ bits choisi al´eatoirement soit premier πτ

2τ −1 : πτ 2τ −1 > Inf (t) = 0.480t5− 1.229t4+ 0.0265t3− 7.602t2+ 9.414t− 3.600 t3(t− 1)3ln3(2) (4.37) πτ 2τ −1 < Sup(t) = 0.480t5− 1.229t4+ 2.157t3− 11.862t2+ 13.674t− 5.02 t3(t− 1)3ln3(2)

Ainsi, pour des modules de taille τ = 1024 bits : Inf (1024) = 1

709.477 and Sup(1024) = 1 709.474

Par cons´equent, cela signifie que si l’on consid`ere des nombres de 1024 bits, alors ils ont une chance sur 709 d’ˆetre premier. De la mˆeme mani`ere, si l’on tire al´eatoirement un nombre de 2048 bits, ses chances d’ˆetre premier sont d’un peu plus d’un sur 1419. Cependant, cette densit´e est ´evalu´ee pour des nombres pouvant ˆetre ind´ependamment pairs ou impairs. Or, on sait qu’un module RSA r´esulte du produit de deux grands nombres premiers (et donc, au moins impairs). On peut donc affirmer que N est toujours impair. Par cons´equent, la probabilit´e qu’un module faut´e RSA soit premier est :

PrhN premierˆ | N impairi = prτ (4.38)

= 2× πτ

2τ −1 (4.39)

= 2

709 (4.40)

Ainsi, en partant d’un module RSA de 1024 bits les chances de tomber sur un module perturb´e premier sont d’un sur 305. Pour un RSA de 2048, elles sont donc d’un sur 709. Maintenant que nous avons r´eussi `a ´evaluer finement la densit´e de nombres premiers pour des tailles usuelles de RSA, nous allons nous int´eresser plus particuli`erement `a notre mod`ele de faute.

Pour rappeler rapidement le contexte de notre ´etude, nous consid´erons des perturbations venant affecter un octet al´eatoire d’un module RSA N , pendant l’ex´ecution d’une signature implant´e `a la mani`ere ”Left-To-Right”. Pour que les signatures erron´ees puissent ˆetre exploitables, il faut que le module perturb´e ˆN soit premier. Afin de montrer que ce mod`ele soit r´ealiste, nous voulons ´evaluer, de mani`ere th´eorique, la probabilit´e que cet ´ev`enement se r´ealise. Pour ce faire, consid´erons, dans un premier temps, un ensemble de k nombres al´eatoires de taille τ bits exactement et soit PN la variable al´eatoire repr´esentant le nombre de premiers que l’on peut

s’attendre `a trouver dans l’ensemble consid´er´e. On peut alors affirmer que la variable discr`ete PN suit une loi binomialeB(k, prτ). Nous pouvons alors calculer un intervalle de confiance pour

le d´enombrement de premier : Pr[a 6 PN 6b] = b X i=a k i  prτi· (1 − prτ)k−i (4.41)

o`u a et b sont des bornes enti`eres pour la variable al´eatoire PN. Maintenant que nous avons

Chapitre 4. Analyse de la perturbation d’un module RSA

l’ensemble des valeurs obtenues en consid´erant toutes les modifications possibles d’un module RSA N . En d’autres termes, si l’on note par⊕ le ”ou exclusif” binaire, alors1 :

N = {N ⊕ R8· 28i, R8 = 0 .. 255, i = 0 .. (

n

8 − 1)} (4.42)

La cardinalit´e de cet ensembleN est donc : |N | = 256 · n

8 = 32· n (4.43)

Si l’on consid`ere que N est compos´e de valeurs tir´ees al´eatoirement, alors sa proportion de valeurs premi`eres correspond `a ce qui est exprim´e par l’´equation (4.40). Dans ce cas, on peut fixer k = |N | et calculer le nombre moyen de premiers en approximant prτ. Dans le cas usuel

d’un RSA de taille n = τ = 1024 bits, alors on peut calculer une valeur approximative pour pr1024 et ensuite d´eduire le nombre moyen de modules perturb´es suivant le mod`ele de faute dont

la valeur est premi`ere : k· prτ. Dans notre cas, ce nombre moyen vaut 32· 1024 · 2/709 = 92.

Par ailleurs, on peut aussi combiner l’estimation de pr1024 `a l’´equation (4.41), pour estimer

que, dans plus de 99.99% des cas, le nombre de modules faut´es premiers que l’on peut esp´erer d´enombrer est au minimum de 56 et au maximum de 129. Il est int´eressant de noter que pour un RSA de taille 2048 bits, la r´epartition est quasi similaire. En effet, parmi tous les modules perturb´es obtenus suivant le mod`ele, environ 92 seront premiers en moyenne et ce nombre varie entre 56 et 129 avec une probabilit´e sup´erieure `a 99.99%. En pratique, N n’est ´evidemment pas compos´e d’´el´ements al´eatoires. Cependant les r´esultats que nous avons obtenus empiriquement d´emontrent que le biais engendr´e par cette hypoth`ese est n´egligeable.

R´esultats empiriques. Afin de valider notre analyse th´eorique, nous avons men´e une ´etude statistique compl´ementaire. Nous avons g´en´er´e al´eatoirement des modules RSA puis nous avons utilis´e notre mod`ele de perturbation pour d´eriver toutes les valeurs de modules perturb´es pos- sibles. Enfin, nous avons recens´e, dans cet ensemble, tous les modules perturb´es premiers. Les r´esultats obtenus sont illustr´es par la figure 4.2. La figure 4.2 (a) illustre la r´epartition du nom- bre de premiers que l’on peut esp´erer trouver parmis tous les modules perturb´es al´eatoirement sur un octet, d´eriv´es de modules RSA de taille 1024. Bien que nous ayons pris en compte le mod`ele de perturbation dans notre exp´erience, la r´epartition semble suivre une loi binomiale, comme ce que l’on pr´edisait dans notre ´etude th´eorique (i.e. en consid´erant des modules pertur- b´es al´eatoires). En guise de comparaison, nous avons r´ealis´e une ´etude similaire en rempla¸cant le module RSA par d’un nombre premier et un nombre impair (cf. Figure 4.2 (b)). Ces courbes sont le fruit d’une ´etude compl´ementaire de notre article de CT-RSA 2009 [BCDG09] men´ee en stage par des ´el`eves en 2`eme ann´ee de l’ENSIMAG. Ces courbes mettent en ´evidence la faible d´ependance existant entre la nature du nombre de base et la probabilit´e que les nombres faut´es d´eriv´es soient premiers. En observant la table 4.1 r´esumant tous nos r´esultats, on peut noter que nous ne nous sommes jamais trouv´es dans le cas o`u aucun nombre premier ne figurait parmi les ensembles de modules faut´es. Les valeurs extr´emales du nombre de premiers recens´es, dans le cas de perturbation d’un octet, correspondent quasi parfaitement `a ce que l’on a obtenu par l’analyse th´eorique. Par cons´equent, ces r´esultats empiriques viennent confirmer nos estimations th´eoriques et clore notre ´etude du mod`ele de faute.

1. Dans un souci de simplification, nous supposons qu’un octet perturb´e peut prendre 28 valeurs. En r´ealit´e,

il ne peut en prendre que 28− 1 car l’erreur ne peut ˆetre nulle, sinon le module resterait inchang´e et la signature serait inexploitable.

4.3. Attaque des implantations type ”Left-To-Right”

(a) Nombre de premiers `a une distance de Hamming de 8 bits d’un module RSA

(b) Nombre de premiers `a une distance de Hamming de 8 bits d’un entier impair (vert)/ module RSA (bleu)/ nombre premier (rouge)

Figure 4.2 – Distribution exp´erimentale du nombre de premiers parmi des nombres de 1024 bits de nature diff´erente

Remarque 4. Bien que la figure 4.2 et la table 4.1 pr´esentent les r´esultats obtenus de mani`ere globale, nous avons, en pratique, ´etudi´e encore plus finement la r´epartition des nombre pre- miers dans l’ensemble des valeurs possibles de modules faut´es. Pour un module donn´e, nous avons remarqu´e que la r´epartition du nombre de premiers n’´etait pas uniforme suivant les octets perturb´es. Cela signifie qu’en focalisant la perturbation sur un octet sp´ecifique du module, un attaquant peut consid´erablement augmenter ses chances de tomber sur un module faut´e premier (i.e. jusque d’un facteur 5 suivant l’octet ´etudi´e). Cette remarque peut donc permettre `a un at- taquant de r´eduire le nombre de signatures qu’il devra perturber pour esp´erer en obtenir une exploitable. En revanche, la position de ces octets ”faibles” varie suivant le module ´etudi´e. Par cons´equent, l’attaquant devra faire une analyse statistique pr´ealable du module pour identifier ses octets ”faibles” et ainsi augmenter ses chances d’obtenir un module faut´e premier.

Table 4.1 – Estimation empirique du nombre de premiers dansN . Architecture n bits |N | |N | · prn # essais. # de premiers

Min. Moyen. Max.

8-bit 1024 215 92.37 300 58 91.78 121

8-bit 2048 216 92.35 200 63 91.12 112

16-bit 1024 222 11823, 66 100 11282 11838, 16 12424

32-bit 1024 237 ≈ 3, 88 · 108

Cons´equences de l’´etude. Bien qu’a priori, consid´erer seulement des modifications primales d’un module RSA semble r´edhibitoire, nos estimations th´eoriques confirm´ees par nos exp´erimen- tations montrent que ces cas ne sont pas si rares. En effet, pour un RSA de 1024 bits, il suffit de collecter 305 signatures perturb´ees suivant le mod`ele pour esp´erer en obtenir une exploitable. De plus ce nombre peut ˆetre consid´erablement r´eduit si l’attaquant dispose d’un mat´eriel lui permettant de choisir assez pr´ecis´ement un octet du module `a perturber. Par ailleurs, notre

Chapitre 4. Analyse de la perturbation d’un module RSA

´etude vient renforcer les r´esultats d´ej`a obtenus par J.-P. Seifert’s [Sei05, Mui06] avec son at- taque visant `a corrompre le m´ecanisme de v´erification de signatures RSA (cf. Section 4.1). Par cons´equent, dans la suite de notre analyse de perturbations du module public pour des implan- tations ”Left-To-Right” de la signature RSA, nous consid´ererons qu’il est possible d’obtenir des modules faut´es premiers. Nous prendrons en compte la probabilit´e associ´ee `a cet ´ev`enement pour ´evaluer les performances de notre attaque.

Par l’interm´ediaire de l’´etude pr´ec´edente, nous avons trouv´e une solution pour r´esoudre le probl`eme de calcul de racines carr´ees modulo un module faut´e ˆN . Notre implantation de l’al- gorithme de Tonelli & Shanks ainsi que notre ´etude statistique montrent respectivement que cette solution est aussi r´ealiste en termes de complexit´e calculatoire qu’en termes de nombres de perturbations.