• Aucun résultat trouvé

4.2 Analyse de l’algorithme SBMM

4.2.3 Compression des sorties de l’algorithme

Nous allons maintenant discuter du problème de la taille des sorties de l’algorithme. En effet, par exemple si c = 2, les entrées de l’algorithme sont inférieures à Ma alors qu’en sortie on a Kz < 5Maet Rz < 6Ma. Ainsi en réappliquant successivement SBMM, on obtient Kz,2 < 87Ma et Rz,2 < 121Ma puis Kz,3 < 29780Ma et Rz,2 < 42109Ma etc. La taille des opérandes va ainsi croître de façon exponentielle si on applique récursivement et sans contrôle l’algorithme SBMM.

Une première façon de procéder pour ce contrôle est d’effectuer une nouvelle réduc- tion après un certain nombre d’itérations. Nous verrons dans l’exemple proposé à la fin de cette sous-section que dans les calculs nécessaires aux doublements et additions de points d’ECC, un certain nombre de multiplications sont complètement indépendantes. Ainsi, si par exemple 4 multiplications indépendantes sont effectuées, leurs sorties ont toutes la même taille. On doit donc déduire du flot de calcul la taille maximale des sorties de l’algo- rithme SBMM afin de choisir Mbsuffisamment grand pour garantir X = KxMa+Rx < MaMb. Comme la taille des sorties croît très vite, seulement 2 ou 3 multiplications successives peuvent être effectuées avant une réduction modulaire de contrôle. Pour effectuer cette réduction à partir de notre algorithme, il suffit de l’appliquer sur la valeur à réduire, par exemple (Kz,Rz), et la valeur 1, représentée par (0,1).

Algorithme 28: Compression d’une valeur représentée par (K, R). Entrées : −−−−−→Ka|b|mγ et−−−−−→Ra|b|mγ avec K, R < mγ− 1

Pré-calcul : M−1 a mγ Sorties :−−−−−−−→(Kc)a|b|mγ , −−−−−−−→ (Rc)a|b|mγ avec Kc, Rc < 2Ma+ 6 1 |Rk|m γ ← BE −−→ Ka, Ba, mγ  /*−−−−→(Rk)a =−−→Ka*/ 2 Kk← (K − Rk)M−1 a mγ 3 −−−→(Rk)b ←−→Kb −−−−−→(Kk)b ×−−−−→(Ma) b 4 |Rr|m γ ← BE −→ Ra, Ba, mγ  /*−−−−→(Rr)a =−→Ra*/ 5 Kr← (R − Rr)M−1 a mγ 6 −−−→(Rr)b ←−→Rb −−−−−→(Kr)b ×−−−−→(Ma) b 7 return−−−−−−−−−−−−→(Kr+ Rk) a|b|mγ , −−−−−−−−−−−−→ (Rr+ 2Kk)a|b|mγ

Une autre méthode, plus rapide mais nécessitant un peu de matériel supplémentaire, est présentée dans l’algorithme 28. Il suffit de remarquer que les valeurs en sortie de l’algorithme Kzet Rz, sont proches de Ma. En effet, on a Kz< 5Maet Rz < 6Ma. Soit (−K→a|b,−R→a|b) une valeur en sortie de l’algorithme 26. Supposons qu’on décompose K en K = KkMa+ Rk et R en R = KrMa+ Rr. On a alors Kk < 5 et Kr < 6. On peut donc calculer une extension de base à partir de Ba vers un modulo supplémentaire mγ, premier avec Ma, puis obtenir la valeur exacte de ces quotients, du moment que mγ > 6. Il faut quand même avoir K mod mγ et R mod mγ dans ce modulo supplémentaire avant de pouvoir faire la division. On peut choisir mγ comme une petite puissance de 2, et choisir un élément de Bb, disons mb,1, égal à 2w. On peut ensuite déduire directement la valeur de K mod mγ et R mod mγ à partir des bits de poids faibles modulo mb,1. On remarque que puisque Kr et Kk sont très petits, nous n’avons pas besoin d’extension de base pour les représenter dans

Opération P1+ P2 2 P1 A = Z1X2+ Z2X1 E = Z12 B = 2X1X2 F = 2X1Z1 C = 2Z1Z2 G = X12 Formules D = aA + bC H = −4bE Z3 = A2− BC I = aE X3 = BA + CD + 2XGZ3 X3= F H + (G − I)2 Z3 = 2F (G + I) − EH

Table4.1 – Formules optimisées RNS issues de [8] pour les courbes sous forme de Weiers- trass courte, en coordonnées (X, Z) et adaptées à l’échelle de Montgomery.

Ba et Bb. En effet, on a (kr)a,i= (kr)b,i = Kr et (kk)a,i= (kk)b,i = Kk pour tout i. Après avoir obtenu Kk et Kr, on peut utiliser le fait que Ma2 = 2 mod P pour obtenir :

X ≡ KMa+ R mod P

≡ KkMa2+ RkMa+ KrMa+ Rrmod P ≡ (Rk+ Kr)Ma+ 2Kk+ Rr mod P ≡ KcMa+ Rc mod P .

La valeur retournée par la compression est donc (Kc, Rc). On note que Rk et Rr sont tous deux inférieurs à 2Ma si on utilise l’extension de base de Kawamura et al., impli- quant Kc < 2Ma+ 6 et Rc < 2Ma+ 10. Si deux valeurs (Kx, Rx) et (Ky, Ry) provenant d’une compression à l’aide de l’algorithme 28 sont utilisées en entrée de l’algorithme 26 de multiplication SBMM, on obtient alors en sortie Kz < 14Ma et Rz < 19Ma au lieu de Kz < 5Ma et Rz < 6Ma. Pour pouvoir réutiliser l’algorithme de compression, il suf- fit de prendre mγ > 19. Le plus simple est de prendre mγ = 32, en choisissant la base Ba sans modulo pair. Pour ne pas avoir besoin d’utiliser systématiquement la fonction de compression, on peut augmenter la valeur de mγ afin d’augmenter la correction maximale que l’on peut effectuer. Par exemple, si on enchaîne deux multiplications modulaires sans utiliser de compression, on obtient en sortie Kz < 753Ma et Rz < 1065Ma. En prenant mγ = 211= 2048, on peut se permettre de n’effectuer qu’une compression toutes les 2 mul- tiplications. Nous allons voir maintenant un exemple pour lequel il est utile de n’effectuer qu’une compression toutes les 2 multiplications.

Un exemple d’utilisation de la fonction de compression est illustré à la figure 4.1. Dans cette exemple, on suppose l’exécution d’une addition de points suivie d’un doublement, avec les formules de la table 4.1 (issues de [8]). On utilise l’algorithme de multiplication SBMM pour calculer les différentes valeurs intermédiaires des formules, et le résultat est compressé en parallèle par la fonction de compression. Pour presque tous les calculs, l’algorithme SBMM reçoit en entrée des valeurs compressées. Il y a deux cas pour lesquels SBMM va recevoir en entrée des valeurs qui ne l’ont pas été. Le premier cas est le calcul de X3 dans l’opération ADD. En effet, le calcul de X3 dans ce cas requiert la valeur Z3, qui n’a pas encore eu le temps d’être compressée : on est donc obligé de prendre directement le résultat de la multiplication SBMM. On se retrouve donc dans le cas où mγ est choisi pour pouvoir enchaîner 2 multiplications SBMM, celle de Z3 et celle de X3. On compressera directement X3 ensuite. On retrouve un cas similaire pour le calcul de X3 dans le calcul DBL, où la

A C B D Z3 X3 E F G H I X3 Z3 A C B D Z3 X3 E F G H I X3 Z3

· · ·

· · ·

ADD DBL SBMM Compression temps

Figure4.1 – Exemple fictif de flot d’exécution utilisant SBMM et la fonction de compression en parallèle, sur les formules d’addition et doublement de points définies à la table 4.1, avec 2 dépendances de données non satisfaites à temps entre la compression et SBMM.

valeur I, qui n’a pas encore été compressée, est utilisée. Finalement, cet exemple présente une façon d’effectuer le SBMM et la fonction de compression en parallèle, qui pourra être implantée dans le futur pour une multiplication scalaire complète.