• Aucun résultat trouvé

1.1 La cryptographie asymétrique

1.1.4 Techniques classiques de multiplication scalaire et d’exponentiation

Dans cette section sont présentés quelques algorithmes de multiplication scalaire. Ils sont présentés pour une loi de groupe notée additivement (notation pour ECC) mais la transformation en algorithme d’exponentiation est triviale (ainsi par exemple l’algorithme doublement et addition 5 peut se réécrire en carré et multiplication). Les algorithmes 5 et 6 sont deux variantes de l’algorithme dit doublement et addition (ou double-and-add en anglais), bits de poids faibles et bits de poids forts en tête, respectivement. Le principe est de parcourir le scalaire k bit à bit afin de calculer le schéma de Hörner correspondant. L’avantage de l’algorithme 5 provient du fait que ses lignes 3 et 4 sont parallélisables, alors que dans l’algorithme 6, ils travaillent sur la même donnée. Par contre l’algorithme 6 ne

Algorithme 5: Multiplication scalaire doublement et addition poids faibles en tête (source [57], p. 96). Entrées : k = (kℓ−1, . . . , k1, k0)2, P ∈ E/Fp Sortie : [k]P 1 Q ←− O 2 pour i de 0 à ℓ − 1 faire 3 si ki = 1 alors Q ←− Q + P 4 P ←− [2]P 5 retourner Q

travaillant que sur une seule valeur, il suffit de stocker un seul point durant le calcul. L’al- gorithme 7, issu de [125], permet d’accélérer les calculs en réduisant le nombre d’additions, au prix de pré-calculs. Le scalaire k est ici parcouru par fenêtre de w bits (par exemple w = 4). Un compromis est alors à faire entre la réduction du nombre d’additions de points et la quantité de points pré-calculés à stocker. En plus de la mémoire pour stocker ces points, le coût du calcul de ces points en début de multiplication scalaire doit être pris en compte si le point de base est régulièrement changé, par exemple pour protéger le circuit contre des attaques statistiques (cf. sous-section 1.1.6). Il existe beaucoup d’autres algo- rithmes d’exponentiation et de multiplication scalaire (un exemple de plus est donné au chapitre 3). Ces algorithmes proposent par exemple de recoder k dans une certaine repré- sentation pour réduire encore le nombre d’additions de points. Des exemples seront donnés dans la section 1.1.5. Pour plus de détails, le lecteur trouvera par exemple une étude des algorithmes d’exponentiation et de multiplication scalaire rapide dans l’article [51]. En- fin, d’autres algorithmes sont aussi utilisés pour protéger le circuit contre les attaques par canaux cachés, par exemple la multiplication scalaire dite échelle de Montgomery [62] (algorithme 22, chapitre 3).

Algorithme 6: Multiplication scalaire doublement et addition poids forts en tête (source [57], p. 97). Entrées : k = (kℓ−1, . . . , k1, k0)2, P ∈ E/Fp Sortie : [k]P 1 Q ←− O 2 pour i de ℓ − 1 à 0 faire 3 Q ←− [2]Q 4 si ki = 1 alors Q ←− Q + P 5 retourner Q

1.1.5 Réduction du coût de la multiplication scalaire

La figure 1.4 propose une vue sur la hiérarchie des opérations d’une multiplication scalaire. On considère généralement deux sous-niveaux : les opérations sur les points ADD et DBL et les opérations ±, ×, −1 sur le corps de base F

p (la plupart des études de l’état de l’art se consacre surtout à la réduction du nombre de multiplications). Afin d’améliorer l’efficacité de la cryptographie sur courbes elliptiques, de nombreuses approches ont été proposées dans la littérature, aux différents niveaux de la figure 1.4. Des améliorations ont aussi été proposées sur la réduction de l’arithmétique des courbes, c’est à dire la réduction

Algorithme 7: Multiplication scalaire par fenêtre fixe de Yao [125]. Entrées : k = (km−1, . . . , k1, k0)2w avec ki ∈ [0, 2w− 1], m =ℓ w  et P ∈ E/Fp Pré-calculs : T = (O, P, [2]P, . . . , [2w− 1]P) Sortie : [k]P 1 début 2 Q ←− T(km−1) 3 pour i de m − 2 à 0 faire 4 pour j de 1 à w faire 5 Q ←− [2]Q 6 Q ←− Q + T(ki) 7 retourner Q temps [k]Q DBL ADD DBL . . . ±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1±, ×,−1 FP E/FP

Figure 1.4 – Hiérarchie des opérations dans une multiplication scalaire.

du coût des opérations de base telles que l’addition et le doublement de point, ou la propo- sition de formules pour des opérations plus complexes pour le triplement, par exemple [39], ou le quintuplement avec par exemple [81]. Une façon d’améliorer les formules est de chan- ger de système de coordonnées. En effet, les inversions modulaires étant très coûteuses vis à vis des autres opérations modulaires, l’utilisation de systèmes de coordonnées différents des coordonnées affines a été proposée dans la littérature [28, 32]. Ces systèmes rajoutent un certain nombre de coordonnées, notamment pour éviter de faire une inversion à chaque opération ADD ou DBL. Par exemple, dans [32] est évoqué un coût d’environ 30 multiplica- tions pour une inversion, ou même 100 multiplications pour les auteurs de [17]. Le retour à une représentation normalisée affine demande une inversion, mais c’est la seule requise sur toute la multiplication scalaire. Par exemple, les coordonnées projectives Jacobiennes font correspondre le point (x, y) = (X/Z2, Y /Z3) à (X, Y, Z) avec Z 6= 0 pour (x, y) 6= O (si Z = 0 alors (x, y) = O). L’équation 1.2 devient ainsi

Y2 = X3+ aXZ4+ bZ6 .

Par exemple, les formules de la table 1.5, issues de [17] permettent de calculer l’addition et le doublement de point sans inversion.

Le site web [17] recense un grand nombre de systèmes de coordonnées, et évalue leur coût en terme d’opérations élémentaires sur le corps en décomptant les opérations nécessaires aux additions, doublements, mais aussi triplements ou encore λ-doublements (formules spé- ciales lorsqu’on enchaîne les doublements). Une autre façon d’améliorer l’arithmétique de certaines courbes est de les choisir avec une forme particulière permettant des simplifica- tions dans les calculs, autrement dit de changer l’équation de définition d’une courbe pour obtenir de nouvelles formules d’addition et doublement. Par exemple les courbes d’Ed- wards [43], définies par x2+ y2 = c2(1 + dx2y2) avec cd(1 − c4d) 6= 0 mènent à des formules

P1+ P2 2 P1 A1 = Z12 A = X12 A2 = Z22 B = Y12 u1 = X1A2 C = B2 u2 = X2A1 D = Z12 S1 = Y1Z2A2 S = 2 (X1+ B)2− A − C S2 = Y2Z1A1 M = 3A + aD2 H = u2− u1 T = M2− 2S I = (2H)2 X3 = T J = HI Y3= M (S − T ) − 8C R = 2(S2− S1) Z3= (Y1+ Z1)2− B − D V = u1I X3 = R2− J − 2V Y3= R(V − X3) − 2S1J Z3 = (Z1+ Z2)2− A1− A2H

Table 1.5 – Formules pour courbe elliptique sous forme de Weierstrass courte en co- ordonnées Jacobiennes (source [17]). Note : P1 = (X1, Y1, Z1), P2 = (X2, Y2, Z2) et P3 = (X3, Y3, Z3).

nécessitant peu d’opérations [16, 17].

On peut aussi accélérer les calculs au niveau de l’algorithme de multiplication scalaire lui même (voir des exemples en section 1.1.4). Des techniques de recodage de la clé ont par exemple été proposées afin de limiter le nombre d’additions de points (souvent plus coûteuses que les doublements). On peut citer par exemple le recodage en forme non ad- jacente [83] (NAF pournon-adjacent form) qui recode la clé avec un nombre limité de 1 (correspondants aux additions) dans la nouvelle représentation. Un autre exemple de re- codage est la représentation à base double [39] (DBNS pour double-base number system), qui propose de réécrire la clé dans une base double 2 et 3. Ce dernier recodage suppose des formules de triplement de points, qui sont des formules plus efficaces que celles d’un doublement et d’une addition combinées.

Pour finir, les travaux sur l’amélioration de l’arithmétique dans les grands nombres trouvent une application directe dans la cryptographie asymétrique. On notera par exemple les travaux d’implantations de [121] qui testent différentes façons d’implanter l’arithmétique ECC sur GPU, ou encore les travaux [5, 45, 52] qui utilisent la représentation RNS pour accélérer les calculs ECC. Les travaux de cette thèse se placent donc au plus bas niveau, dans l’implantation de l’arithmétique du corps de base. On verra, notamment dans le cha- pitre 3, que les différents niveaux de la hiérarchie d’une multiplication scalaire (algorithme de multiplication scalaire, opération sur les points et opérations sur le corps) ne peuvent pas être complètement dissociés afin d’être le plus efficace possible, chaque modification sur l’un des niveaux ayant un impact sur les autres.

1.1.6 Sécurité et attaques physiques