• Aucun résultat trouvé

Autres algorithmes distribués

Partie III Applications 157

Chapitre 8 Application au recouvrement de clé 185

9.2 Autres algorithmes distribués

n’utilise pas le modèle de l’oracle aléatoire tout en étant non-interactive. Dans le cas où il existe un seul combineur, il vaut mieux utiliser la preuve de validité de Gennaro et al.. Cependant, dans le cas où tous les utilisateurs peuvent faire des requêtes de signature, le protocole de Shoup est utile. La preuve de Frankel et al. est utile si on veut utiliser un module RSA n’ayant pas une forme spécifique. Elle fait toutefois l’hypothèse qu’en prenant suffisamment d’éléments au hasard dans ZN on génèrera ZN en entier, mais l’analyse n’a pas été faite. Dans la suite de ce chapitre, nous verrons une analyse de cette hypothèse avec des modules ayant certaines particularités.

D’autre part, dans le cas de signature RSA, comme RSA-FDH [11, 51] par exemple, la preuve de sécurité utilise déjà le modèle de l’oracle aléatoire, on peut alors utiliser le protocole de Shoup. Mais, dans le cas de la signature de Gennaro, Halevi et Rabin [87] qui n’utilise pas l’oracle aléatoire, les preuves de validité de Gennaro et al. et celle de Frankel et al. permettent de distribuer ce schéma de signature sans faire appel à l’oracle aléatoire mais en utilisant leFlexible-RSA Problemqui est un problème plus facile à résoudre que le problème RSA77. Ceci a été fait par Catalano, Gennaro et Halevi dans [40].

1. Soitt = bn−12 c. Pour touti = 1, . . . , n, serveuritire au hasard des polynômes de degrét,fi, gi ∈ZP[X]satisfaisantfi(0) =pietgi(0) =qi. En d’autres termes, les coefficients constants defi et degisont fixés àpi etqi et tous les autres coefficients sont choisis au hasard dansZP. De manière identique, serveurichoisit un polynôme de degré2t hi∈ZP[X]tel quehi(0) = 0.

2. Pour touti= 1, . . . , n, serveuricalcule les3tvaleurs :

∀j= 1, . . . , n: pi,j =fi(j) ; qi,j =gi(j) ; hi,j =hi(j)

Serveurienvoie alors de manière secrète le triplet(pi,j, qi,j, hi,j)aux serveursjpour toutj6=i. On remarque que lespi,j pourj= 1, . . . , nsont les parts d’un partage de secret à la Shamir depi, et de même pourqi.

3. A ce point, chaque serveur i a toutes les parts (pi,j, qi,j, hi,j) pour j = 1, . . . , n.

Serveuricalcule : Ni=

n

X

j=1

pi,j

· · ·

n

X

j=1

qi,j

+

n

X

j=1

hi,j modP ServeuribroadcasteNià tous les autres serveurs.

4. A ce point, chaque serveur a tous lesNi pouri= 1, . . . , n. Soitα(X)le polynôme : α(X) =

n

X

j=1

fj(X)

· · ·

n

X

j=1

gj(X)

+

n

X

j=1

hj(X) modP

On observe que α(i) = Ni et par définition de fi, gi, hi, nous avonsα(0) = N. De plus, α(X) est un polynôme de degré2t. On remarque que t est défini tel que n≥2t+ 1. Par conséquent, comme tous les serveurs ont au moins2t+ 1points de α(X), ils peuvent l’interpoler et découvrir tous ses coefficients. Enfin, chaque serveur évalue α(0)et obtientN modP. Comme N < P, les serveurs apprennent tous la valeur correcte deN.

FIG. 9.3: Algorithme BGW pour calculer le produit de deux quantités partagées

9.2.3 Algorithme du test de Fermat de biprimalité partagé

Nous rappelons brièvement le protocole présenté par Boneh et Franklin pour tester de manière par-tagée la biprimalité d’un nombre, c’est-à-dire, si étant donné un moduleN, est-il de la formeN =pq?

Ce test effectue les calculs moduloN qui est une quantité publique. En effet, il est très difficile de calculer modulo une quantité secrète et partagée. Par exemple, on ne sait même pas calculer de manière partagée et efficacebmodpsibetpsont partagés. Ainsi, Boneh et Franklin effectuent un test modulo N.

De plus, d’après les résultats de Pomerance [152, 153] sur la rareté des pseudopremiers dès qu’un

1. Le serveurichoisit un entier au hasardriR[0..2L(N)+k0], oùk0est un paramètre de sécurité, calculecii+eriet envoiecià tous les autres serveurs.

2. Chaque serveur peut alors calculerc=P

ici =ϕ+eRavecR=P

iri. La valeur cpeut être publiquement connue,Rétant tenu secret.

3. Tous les serveurs peuvent alors calculer pgcd(e, c) et les coefficients de Bezout u etv tels que eu+cv = pgcd(e, ϕ). Si eetϕ sont premiers entre eux, on a alors eu+cv= 1. Dans ce cas, il est facile de voir que si on remplacecparϕ+eR, nous obtenonse(u+Rv) +ϕv= 1. Ainsi,u+Rvest l’inverse deemoduloϕ. Notons le d.

4. Chaque serveur définit sa part de l’inversed,di = vri, et le premier serveur,d1 = u+vr1.

FIG. 9.4: Algorithme GCD pour calculer le PGCD ou l’inverse partagé d’un entier connu et d’un entier partagé

crible est effectué, on peut estimer que dès qu’un module passe ce test, il est bien formé. Sinon, on serait obligé d’itérer ce test plusieurs fois car les nombres pseudo-premiers pour le test de Fermat représentent la moitié de l’espace.

Le test de biprimalité de Boneh-Franlin évite aussi les nombres de Carmichael en utilisant une va-riante du test de primalité de Solovay-Strassen modulo N. On peut remarquer que Boneh et Franklin n’ont pas tenté de partager moduloN l’algorithme de Miller-Rabin car ce dernier calcule des racinesN -ième non triviales de l’unité et ceci permet de factoriserN. On voit le test de Solovay-Strassen dans le calcul dev. En effet, on a vu que l’on pouvait tester la résiduosité d’un élémentgmoduloNen calculant g(p−1)(q−1)/4modN si (g|N) = 1. C’est ce qui est fait dans les étapes 2 et 3. Cette astuce peut être utilisée pour partager le cryptosystème de Goldwasser-Micali. L’étape 4 est un peu technique et est utile dans la preuve du théorème 30 pour obtenir la borne1/2.

On peut montrer les résultats suivants :

Théorème 30. SoitN =pqun entier tel quep ≡ q ≡ 3 mod 4. Si N est le produit de deux nombres premiers, alors “succès” est déclaré dans toutes les invocations du proto-cole. Sinon, les serveurs déclarent queN n’est pas le produit de 2 nombres premiers avec probabilité au moins 12 (parmi tous les choix des randomsgeth).

En ce qui concerne la sécurité de ce protocole dans le modèle honnête-mais-curieux.

Théorème 31. Supposons quepetqsont des nombres premiers distincts tels quep≡q≡ 3 mod 4. Alors toute coalition de n−1serveurs peut simuler leur vue du protocole de test de biprimalité. Par conséquent, ce protocole estn−1sûr.

1. Les serveurs génèrent un randomg∈ZN. La valeur degest connue desnserveurs.

2. Le serveur1calcule le symbole de Jacobi degmoduloN. Si(g|N)6= 1, le protocole retourne à l’étape 1 et un nouveaugest choisi.

3. Sinon, le serveur1 calcule v1 = g(N−p1−q1+1)/4 modN. Tous les autres serveurs calculentvi =g(pi+qi)/4 modN. Les serveurs calculent ensuitev =Qn

i=1vimod N en utilisant par exemple le protocole de Benaloh [15] et décrit dans la version Journal of Cryptology de [27]. Ils vérifient si

v=

n

Y

i=1

vi =? ±1 modN

Si le test échoue, les serveurs déclarent queN n’est pas le produit de deux nombres premiers.

4. Les serveurs exécutent un test de Fermat dans le groupe TN = (ZN[X]/(X2 + 1))/ZN. Pour effectuer ce test dansTN, les serveurs tirent un random h ∈ TN. Serveur1calculeu1 =hN−p1−q1+1. Tous les autres serveurs calculentui =hpi+qi. Les serveurs utilisent alors le même protocole que dans l’étape 3 pour calculeru = Qn

i=1ui. Ils vérifient ensuite si

u=

n

Y

i=1

ui ?

= 1

Si le test échoue,N est rejeté. Sinon, ils déclarent “succès”.

FIG. 9.5: Algorithme de test de biprimalité partagé

Chiffrement du même message sous plusieurs clés

Dans cette annexe, nous montrons qu’il faut être prudent quand on chiffre le même message sous plusieurs clés toutes différentes, en particulier lorsque l’on utilise le cryptosystème RSA sans fonction de padding. Il est évident qu’un chiffrement probabiliste permet de contrer ces attaques, mais seul un chiffrement sémantiquement sûr permet de contrer toutes les attaques possibles. Il faut ainsi utiliser RSA avec le padding OAEP par exemple pour atteindre ce niveau de sécurité.

10.1 Chiffrement RSA sous deux clés (e

1

, N ) et (e

2

, N ) avec pgcd(e

1

, e

2

) = 1

Dans ce cas, on montre que l’on peut reconstruire le messagemsans connaître aucune des deux clés secrètes.

Commepgcd(e1, e2) = 1, l’algorithme d’Euclide étendu permet de trouver deux entiersaetbtels queae1+be2 = 1. Considérons les chiffrés du même message sous les deux clés :

c1=me1 modN et c2=me2 modN (10.1)

À partir deaetb, on peut calculer

ca1×cb2≡(me1)a(me2)b ≡mae1+be2 =mmodN

Remarques: On peut aussi montrer que l’utilisateur 1 peut calculer la clé secrète de l’utilisateur 2 à partir de sa clé secrète. En effet, soient d1 etd2 les clés secrètes des utilisateurs 1 et 2 respectivement.

On a alors

e1×d1 = 1 modϕ(N) et e2×d2 = 1 modϕ(N) (10.2) Ainsi,e1d1−1est un multiple deϕ(N). L’utilisateur 1 peut donc obtenir la clé secrèted2en calculant e2−1 mod (e1d1−1)avec l’algorithme d’Euclide étendu.

Enfin, on peut aussi appliquer l’algorithme de Miller [126] pour factoriser un module RSANlorsque l’on connaît un multiple deϕ(N).