• Aucun résultat trouvé

5.2 Multiplication scalaire avec les EAC sur des courbes munies d’un

5.3.2 Comparaison à la méthode SGLV pour des courbes “twis-

Ted127-glv4 [FHLS15] et FourQ [CL15] sont les deux algorithmes de mul-tiplication scalaire les plus efficaces (et sûrs). Ils s’appuient sur l’algorithme

Méthodes — Plateforme Android EAC-Mult /W-SGLV (sans encodage) 0.75 EAC-Mult / W-SGLV (avec encodage) 0.73 Méthodes — Plateforme Gnu MP, x64 EAC-Mult / W-SGLV (sans encodage) 0.98 EAC-Mult / W-SGLV (avec encodage) 0.96

Méthodes — Plateforme Android (x-only) EAC-Mult / W-SGLV (sans encodage) 0.69 EAC-Mult / W-SGLV (avec encodage) 0.67

Méthodes — Plateforme Gnu MP, x64 (x-only) EAC-Mult / W-SGLV (sans encodage) 0.88

EAC-Mult / W-SGLV (avec encodage) 0.86

Table 5.6 – Ratio entre le temps d’exécution de la méthode EAC-Mult et celui de la méthode SGLV, pour un niveau de sécurité de 128 bits, sur différentes plateformes.

GLV à quatre dimensions et tirent parti de deux endomorphismes efficaces ainsi que d’un système de coordonnées étendues sur les courbes “twisted” Edwards [HWCD08]. Ce système de coordonnées fournit les formules d’addition de points les plus rapides pour des courbes basées sur des corps de grandes caractéris-tiques. Cependant, certains points à pré-calculer doivent être stockés pour des opérations de lecture lors de la multiplication scalaire. Par exemple, 512 octets de mémoire sont nécessaires pour stocker 8 points dans Ted127-glv4.

Une comparaison brute de notre approche avec ces méthodes ne serait pas pertinente. En effet, d’une part, il est certain que les méthodes utilisant deux endomorphismes sont plus rapides. D’autre part, notre contexte d’implémen-tation est très différent (arithmétique sur Fp, faible consommation mémoire et courbes avec un endomorphisme). Cependant, il semble équitable de profiter du système de coordonnées des courbes “twisted” Edwards pour comparer notre approche à la méthode SGLV sur les courbes munies d’un endomorphisme, qui correspond à notre contexte.

5.3.2.1 Comparaisons aux coûts théoriques

Dans le système de coordonnées “twisted” Edwards étendu, un point est représenté par quatre coordonnées (X, Y, T, Z) avec T = XY /Z. En utilisant l’algorithme43, chaque doublement de point est suivi d’une addition de points. Les meilleures performances pour cette séquence d’opérations sont obtenues en combinant les coordonnées “twisted” Edwards standard avec les coordonnées “twisted” Edwards étendues (comme expliqué dans [HWCD08]). Cela conduit à un coût de 10M` + 4S` par bit du scalaire, pour un niveau de sécurité de `/2 bits (voir les tableaux 5.7 et 5.8).

Méthode Coût

EAC-Mult (` + 1)(5Mt+ 2St) TED-SGLV `/2 × (10M`+ 4S`)

Table 5.7 – Analyse du coût des méthodes EAC-Mult et TED-SGLV, pour un niveau de sécurité de `/2 bits (t ' 1.4`).

Méthode 96 bits de sécurité 128 bits de sécurité 192 bits de sécurité EAC-Mult 965M269+ 386S269 1285M358+ 514S358 1925M536+ 770S536

TED-SGLV 960M192+ 384S192 1280M256+ 512S256 1920M384+ 768S384

Table 5.8 – Coût théorique de la multiplication scalaire pour un niveau de sécurité donné.

Il ressort de cette approche théorique que la méthode avec les EAC ne peut pas faire mieux que la méthode SGLV en utilisant le système de coordonnées étendu sur des courbes “twisted” Edwards. Cependant, les résultats expérimen-taux (voir tableau 5.9) révèlent, une fois de plus, qu’il faut prendre en compte tous les calculs afin d’évaluer le coût réel d’un algorithme multiplication sca-laire. Les résultats du tableau5.9 ont été obtenus en implémentant la méthode SGLV sur la courbe “twisted” Edwards : E(Fp) : −x2 + y2 = 1 + x2y2, avec p = 2256 − 43443. L’ordre de la courbe est de 8.h, où h est un nombre pre-mier. L’endomorphisme φ correspondant satisfait φ2 + 1 = 0. Il correspond à l’application (x, y) 7→ (αx, 1/y), où α est un élément d’ordre 4 [LWG+15]. Les paramètres pour la méthode EAC-Mult sont ceux de la section 5.3.1.4. Afin de comparer ces deux méthodes, nous avons effectué une moyenne de 217 multipli-cations scalaires.

Penchons nous sur les résultats obtenus sur la plateforme Android. D’une part, dans le tableau 5.4, on peut observer que le coût d’une multiplication modulaire d’entiers de 358 bits est à peine supérieure à celui d’une multiplica-tion modulaire d’entiers de 256 bits. D’autre part, la procédure ZADDb comporte précisément 7 multiplications modulaires (en supposant le même coût pour l’élé-vation au carré et la multiplication) et 7 des additions modulaires. L’addition en coordonnées mixtes pour les courbes “twisted” Edwards [HWCD08] coûte préci-sément 14 multiplications modulaires, 14 additions modulaires, 1 multiplication par 2 et en moyenne le calcul d’un opposé modulaire :

1. un doublement de point nécessite 8 multiplications modulaires, 6 additions modulaires et une multiplication par la constante de courbe a, qui dans notre cas est égale à −1,

2. une addition de points nécessite 6 multiplications modulaires, 8 additions modulaires et 2 multiplications par 2 [HWCD08],

3. une fois sur deux, l’opposé de l’un des deux points affines P ou P + φ(P ) doit être calculé.

Méthodes — Plateforme Android EAC-Mult / TED-SGLV (sans encodage) 0.95 EAC-Mult / TED-SGLV (avec encodage) 0.93

Méthodes — Plateforme Gnu MP, x64

EAC-Mult / TED-SGLV (sans encodage) 1.41 EAC-Mult / TED-SGLV (avec encodage) 1.39

Méthodes — Plateforme Android (x-only) EAC-Mult / TED-SGLV (sans encodage) 0.84 EAC-Mult / TED-SGLV (avec encodage) 0.82

Méthodes — Plateforme Gnu MP, x64 (x-only) EAC-Mult / TED-SGLV (sans encodage) 1.21

EAC-Mult / TED-SGLV (avec encodage) 1.19

Table 5.9 – Ratio entre le temps d’exécution de la méthode EAC-Mult et celui de la méthode TED-SGLV, pour un niveau de sécurité de 128 bits, sur différentes plateformes.

BigInteger.shiftleft() ou BigInteger.add(). Les résultats expérimentaux ont montré que les temps d’exécutions de ces deux méthodes sont presque équi-valents. Ces deux méthodes allouent un nouvel objet de type BigInteger, et comme nous l’avons déjà expliqué dans la section 5.3.1.3, la plus importante partie du temps d’exécution de ces opérations provient l’allocation mémoire. De même, le calcul d’un opposé modulaire peut être fait en utilisant soit la méthode BigInteger.neg(), soit la méthode BigInteger.subtract(). Pour les mêmes raisons, ces deux opérations sont presque équivalentes.

Le tableau 5.10 résume le coût des méthodes EAC-Mult et TED-SGLV, pour un niveau de sécurité de `/2 bits (D` correspond à la multiplication par 2 d’un entier de ` bits et N` l’opposé modulaire d’un entier de ` bits). On peut déduire de ce tableau que si le coût de `(3D`/2 + N`) est supérieur au coût de 7Mt+ 7At, alors la méthode EAC-Mult devient plus efficace que la méthode TED-SGLV. En d’autres termes, nous devons comparer le temps d’allocation de 14 objets BigInteger utilisés pour calculer 7Mt+7At, avec le temps d’allocation de 5`/2 objets BigInteger utilisés pour le calcul `(3D`/2 + N`).

Méthode Coût

EAC-Mult (` + 1)(7Mt+ 7At)

TED-SGLV `/2 × (14M`+ 14A`+ 3D`+ 2N`)

Table 5.10 – Analyse du coût des méthodes EAC-Mult et TED-SGLV, pour un niveau de sécurité de `/2 bits (t ' 1.4`).

Soit TEAC−Mult le temps d’exécution de la méthode EAC-Mult. En supposant que le temps d’exécution d’une multiplication (ou d’une addition) modulaire

d’entiers de 256 bits est à peu près le même que celui d’entiers de 358 bits, le coût de la méthode TED-SGLV devient :

TEAC−Mult+ δ(5 × 256

2 − 14), où δ est le temps d’exécution de l’allocation de la mémoire.

Ces allocations sont faites par des appels à la méthode BigInt.newBigInt(). Nos expériences ont montré que son temps d’exécution est d’environ 50 micro-secondes, ce qui donne un ratio suivant :

TEAC−Mult

TEAC−Mult+ 31300.

En effectuant 217 multiplications scalaires, nous avons obtenu un temps d’exécution moyen de 693943 microsecondes pour TEAC−Mult, ce qui donne un ratio d’environ 0.96, résultat qui est conforme à la ligne 1 du tableau 5.9. Notons qu’une même analyse ne peut être faite pour la plate-forme x64, car la différence entre les temps d’exécution des multiplications modulaires est trop importante (voir tableau 5.4).

En résumé, sur une plate-forme Android, la méthode de multiplication sca-laire basée sur les EAC est plus intéressante que la méthode SGLV (avec un en-domorphisme), même en utilisant le système de coordonnées étendu des courbes “twisted” Edwards. Avec les systèmes utilisant la coordonnée x uniquement, la comparaison devient encore plus favorable.

Sur une plate-forme x64, la méthode EAC-Mult est plus rapide que la mé-thode SGLV, mais plus lente que la mémé-thode TED-SGLV. Cependant, cette dernière nécessite plus de mémoire (voir section5.3.4). Ainsi, notre méthode fournit un compromis raisonnable entre le temps d’exécution et le stockage des données.