• Aucun résultat trouvé

Considérant que les algorithmes de cryptographie les plus répandus utilisent l’exponentiation modulaire, il est important de réaliser la multiplication modulaire de manière efficace. Il existent plusieurs méthodes pour implanter cette opération, comme celles proposés para Barret [9], Booth [15] et Blakley [13]. Cependant, l’une des plus répandues est celle de la méthode de Montgomery ( [68], [97]).

En 1985 Peter Montgomery a publié une manière de calculer le produit modulaire sans avoir besoin de réaliser la division par le module [68]. Cette caractéristique facilite l’implantation maté- rielle, puisque la division par un module grand est trop coûteuse du point de vue de la surface.

Avant d’expliquer la technique, il faut faire quelques suppositions préliminaires. Tout d’abord, tous les nombres en question sont représentés dans une base (ou racine) β , qui est normalement une puissance de 2 : β = 2t, où t représente la taille en bits du chemin de données de l’architecture

cible. Soit k le nombre de digits de t bits nécessaires pour représenter un nombre donné, la forme suivante symbolise les nombres :

A = k−1 X i=0 ai× βi; B = k−1 X i=0 bi× βi; M = k−1 X i=0 mi× βi (2.16)

Par exemple, si pour un système cryptographique donné il est nécessaire de manipuler des nombres de 1024bits, dans une architecture qui a un chemin de données de 16bits (t), k sera donc de 64, puisqu’il aura 64 mots de 16bits pour composer le nombre de 1024 − bits. Sous cette forme, les digits xi (ai, bi et mi) satisfont la condition 0 ≤ xi < b. L’algorithme de multiplication modulaire

accumule les digits produits par ai× β, et intercale avec des réductions modulaires pour maintenir

les résultats plus petits que M. La contribution de Montgomery est de parcourir les digits de A en ordre inverse (Voir l’algorithme 6), et par conséquent, il n’est pas nécessaire de réaliser des comparaisons avec la taille totale des nombres dans les réductions modulaires. Par rapport aux algorithmes de produit modulaire classiques, Montgomery réalise un décalage à droite au lieu d’un

2.7. Multiplication Modulaire - L’algorithme de Montgomery 63

décalage à gauche, et une addition au contraire d’une soustraction. Tout cela permet simplifier la logique combinatoire.

La multiplication modulaire de Montgomery part du principe que : U + (U × M′ mod R) × N

R ≡ U × β

−1 mod M (2.17)

Pour un M′ égal à :

M′ = −M−1 mod β

Comme β est choisi de façon que β = 2n, la division par β n’est qu’un décalage à droit de n

bits ; et la réduction par β (mod β) équivaut à prendre les n bits de poids forts. Enfin, si U de l’équation 2.17 par A × B, il est possible de calculer la multiplication modulaire, comme montre l’algorithme 6.

Algorithme 6: Algorithme de Montgomery pour la Multiplication Modulaire Entrée: A, B et M dans la forme décrite en 2.16

Sortie: R = [A · B · −β−1]M MMM(A, B, M) 1: R ← 0 2: for i = 0 to k − 1 3: qi ←£(r0+ ai× b0) × [−m]−1¤ β 4: R ← R + ai× B + qi× M 5: R ← Rβ 6: if (R > M) then R ← R − M 7: return (R)

Pour que l’algorithme soit réalisable, il faut aussi qui M soit premier avec b, condition facilement satisfaite, puisque b est une puissance de 2 et M est la multiplication de deux grands nombres premiers (donc, il est impair). Par conséquent, pgcd(M, b) est toujours égal à 1.

La valeur [−m]β−1 est l’inverse modulaire de m0 par rapport à b . [−m0]−1β est donc un résidu qui satisfait la congruence ([−m]−1

β · m0 ≡ [1]β et cela est calculé à l’aide de l’algorithme d’Euclide

étendu. Le digit est calculé de telle façon qui R + ai· B + qiM soit divisible par β.˙

Par contre, l’algorithme de Montgomery ne calcule pas exactement [A · B]M mais, [A · B · βk]M.

Par conséquent, il faut des étapes additionnelles pour enlever la valeur résiduelle β−k. Cela peut

être obtenu soit avec un pré-calcul, soit avec un post-calcul. Dans le premier cas A et B sont multipliés par [β]M avant que le calcul de la multiplication modulaire ne commence ; et à la fin le

résultat doit être quand même multiplié par la valeur 1, afin de s’obtenir [A × B]M. La seconde

méthode consiste en réaliser un deuxième passage par l’algorithme, en multipliant le résultat du premier passage par β2×k.

64 Introduction à la Cryptographie

Comme il est mentionné auparavant, les systèmes cryptographiques doivent manipuler des don- nées de l’ordre de 1024−bits ou plus. Il est donc impossible de prendre l’algorithme de Montgomery pour réaliser des calculs sur des grands nombres. Il faut l’adapter. En représentant A, B, M et le résultat R dans la forme proposée en 2.16, il est nécessaire d’adapter l’algorithme 6. Comme conséquence, il faut compter sur une deuxième boucle enchaîné, utilisée pour réaliser les opérations de multiplication, addition et division (décalage) sur des grands nombres découpés. L’algorithme 7 montre cette adaptation.

Le seul problème de cet algorithme c’est qu’il a une complexité O(2k) car il a une telle dépen-

dance de données qui ne permet pas de rendre les opérations parallèles. Dans l’algorithme 7 il est évident que pour calculer q il est nécessaire avoir d’abord r (ligne 3). Ensuite, pour calculer r, il faut absolument avoir q (lignes 6 et 7).

Le Tableau 2.2 montre les performances de cet algorithme pour des différentes cibles technolo- giques. L’implantation de cet algorithme sur des plate-formes diverses a contribué pour la maîtrise du problème, aussi bien qu’aide à positionner l’architecture proposée dans le cadre de cette thèse par rapport à d’autres architectures. Ce tableau montre aussi les résultats de trois implantations de l’état de l’art. Il est remarquable que la performance sur GPP est très faible par rapport aux autres. Cela est dû au fait que l’implantation sur GPP a été faite d’une façon simples, voir pédagogique, afin d’aider à la compréhension de l’algorithme.

Algorithme 7: Algorithme de Montgomery pour la Multiplication Modulaire au niveau Mot Entrée: A, B et M dans la forme décrite en 2.16

Sortie: R = [A · B · −β−1]M MMM2(A, B, M) 1: R ← 0 2: for i = 0 to k − 1 3: qi← h (ai× b0+ r0) × (−m0)−1 i β 4: c ← 0 5: for j = 1 to k − 1 6: rj−1 ← [rj + ai× bj+ q × mj+ c]beta 7: c ← (rj+ai×bjβ+q×mj+c) 8: rj ← c 9: return (R)

Dans la prochaine Section il est démontré qu’il est possible de combiner l’algorithme de Mont- gomery avec le système de numération residual (RNS) afin de se paralléliser le calcul de l’expo- nentiation modulaire.