Niveau : 2 Orange
Algorithme de Montgomery pour la multiplication modulaire
1 Présentation du problème, Notations
Étant donnés trois nombres entiers a, b, n le problème est de calculer le plus rapidement possible a·b
mod n.
Disons tout de suite que si on a une seule multiplication à faire, la transformation de Montgomery ,
ainsi que l’algorithme qui en découle, que nous présentons ici, n’ont pas d’intérêt. En revanche si des
multiplications s’enchaînent comme dans le cas de l’algorithme « square and multiply » décrit dans
la « fichecrypto_004 » alors cet algorithme prend tout son sens.
En conclusion il faut considérer l’algorithme de Montgomery comme s’insérant dans l’algorithme
« square and multiply» du calcul de anmod n.
2 La transformation de Montgomery
2.1 Définition de la transformation - lien avec le Produit
Soit nle modulo intervenant dans l’opération. On supposera désormais que nest un nombre im-
pair. Le nombre de bits de nest l’entier ktel que :
2k1n < 2k.
On appellera rle nombre 2k. Comme nest impair rest premier avec net donc inversible modulo n.
On notera r1l’inverse de nmodulo n.
Soit φ(transformation de Montgomery) l’application de In={0,1··· , n1}dans lui-même définie
par :
φ(a) = a·rmod n.
Cette application φ(multiplication par rmodulo n) est une bijection de Indans lui-même puisque r
est inversible modulo n. Le théorème qui suit nous indique comment s’exprime le transformé d’un
produit de deux termes en fonction des transformés de chacun de ces deux termes.
Théorème 2.1 Soit c=a·bmod n. Alors :
φ(c) = φ(a)·φ(b)·r1mod n.
Preuve. Calculons le second membre de l’égalité à prouver :
φ(a)·φ(b)·r1mod n=a·r·b·r·r1mod n,
φ(a)·φ(b)·r1mod n=a·b·r1mod n=c·rmod n=φ(c).
1
2.2 Comment se calcule le transformé d’un produit
On calcule une fois pour toutes r1par l’algorithme d’Euclide étendue, et pendant qu’on y est on
calcule aussi l’autre coefficient de Bézout, c’est-à-dire qu’on calcule r1et vtels que :
r·r1v·n= 1,
0< r1< n et 0< v < r.
Nous noterons l’opération :
φ(a)φ(b) = φ(a)·φ(b)·r1mod n=φ(c).
Le calcul de φ(c) = φ(a·b) = φ(a)φ(b)peut s’effectuer de la manière suivante :
Algorithme pour calculer φ(a)φ(b)
1) s=φ(a)·φ(b),
2) t= (s·v) mod r,
3) m= (s+t·n),
3) u=m/r,
4) si unalors φ(c) = unsinon φ(c) = u.
En effet, il existe un entier ktel que :
t=s·v+k·r.
On calcule alors :
m= (s+t·n) = s+s·v·n+k·r·n,
m= (s+t·n) = s+s·(r·r11) + k·r·n,
m= (s+t·n) = s·r·r1+k·r·n,
u=s·r1+k·n=φ(c) + k·n.
Donc :
uφ(c) (n).
Mais on voit que
0s < n2
et
0t < r,
donc :
0m < n ·(r+n)<2·r·n,
et
0u < 2·n.
Ceci prouve qu’il n’y a que deux possibilité : soit φ(c) = usoit φ(c) = unsuivant que unou
non.
Dans cet algorithme, on ne fait pas de division par n, mais par r, ce qui change tout puisque rest
une puissance de 2. Bien entendu, pour une seule opération, ceci n’est pas intéressant puisqu’il y a
plusieurs calculs préparatoires à faire. Mais si on enchaîne un grand nombre d’opérations alors on
devient gagnant.
2
3 Enchaînons les opérations
Reprenons l’algorithme square and multiply que nous avons développé dans la « fichecrypto_004 ».
On veut calculer akmod n. On calcule alors :
1) A=φ(a)
2) P=kApar l’algorithme square and multiply intégrant la transformation de Montgomery
3) Ayant ainsi P=kA=φ(ak)on revient à akpar la formule ak=P·r1mod n.
Voici le détail du calcul de P.
Square and multiply
entrées : un tableau Nde K+ 1 bits
représentant ken binaire
sortie : le nombre P=kA
début
P1;
iK;
tant que i0faire
PPP;
si N[i] == 1
alors PPA;
finsi
ii1;
fintq
retourner P;
fin
Le coût des opérations auxiliaires du début et de la fin du programme (transformation directe de aet
inverse de kAainsi que les calculs de r1et vsont amortis par l’enchaînement des opérations de
multiplication et d’élévation au carré.
Auteur : Ainigmatias Cruptos
Diffusé par l’Association ACrypTA
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !