FR2974916A1 - Dispositif et procede de multiplication rapide - Google Patents

Dispositif et procede de multiplication rapide Download PDF

Info

Publication number
FR2974916A1
FR2974916A1 FR1153870A FR1153870A FR2974916A1 FR 2974916 A1 FR2974916 A1 FR 2974916A1 FR 1153870 A FR1153870 A FR 1153870A FR 1153870 A FR1153870 A FR 1153870A FR 2974916 A1 FR2974916 A1 FR 2974916A1
Authority
FR
France
Prior art keywords
integer
program
words
encoding
integers
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
FR1153870A
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Altis Semiconductor SNC
Original Assignee
Altis Semiconductor SNC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Altis Semiconductor SNC filed Critical Altis Semiconductor SNC
Priority to FR1153870A priority Critical patent/FR2974916A1/fr
Priority to FR1161674A priority patent/FR2974917B1/fr
Priority to PCT/FR2012/050818 priority patent/WO2012150396A2/fr
Publication of FR2974916A1 publication Critical patent/FR2974916A1/fr
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

Méthode d'encodage d'un nombre entier a = a[0] + a[1] 2 + a[2] 2 +...+ a[n-1] 2 formé de n mots de t bits. Ledit encodage est formé de : A. Un tableau d'entiers U , de h+1 lignes et n colonnes B. Un ensemble d'entiers {Sj} C. et d'un sous ensemble A0 C {a[0],a[1],...,a[n-1]} de mots de t bits. Le dit encodage étant tel que pour j = 0,...,h le relations suivantes sont satisfaites : a[S ] = a[0] U +...+ a[n-1] U .

Description

Dispositif et procédé de multiplication rapide.
1. Domaine de l'invention Le domaine de l'invention est celui des microprocesseurs. Plus précisément, l'invention concerne la mise en oeuvre d'opérations et de traitement numérique de type « multiplication d'entiers à multi-précision » dans un microprocesseur ou dans un bloc de logique configurable (FPGA) ou dans un coprocesseur arithmétique, et ce de façon simple et efficace.
L'invention concerne tout particulièrement les systèmes embarqués et les composants de confiance tels que les cartes à puce, les puces sans contact et les coprocesseurs à usage cryptographique basés sur une logique répartie ou configurable. 2. Art antérieur
Le traitement cryptographique de données numériques nécessite souvent d'effectuer des multiplications de grands entiers, de tels entiers ont 20 typiquement pour taille 1024 ou 2048 bits.
Par exemple, la majorité des algorithmes cryptographiques à clé publique requière l'exécution répétée de l'opération axb où a, b sont des grands entiers. La multiplication de grands entiers est particulièrement nécessaire à la 25 réalisation d'algorithmes cryptographiques tels que le chiffrement ou la signature RSA décrits dans le brevet américain U.S. 4,405,829, de l'échange de clés Diffie-Hellman décrit dans le brevet américain U.S. 4,200,770, de la norme DSA décrite dans le brevet américain U.S. 5,231,668, des protocoles d'identification à apport nul de connaissance tels que les protocoles de Fiat- 30 Shamir décrits dans le brevet européen EP 0252499 ou encore à la mise en oeuvre de la cryptographie à courbes elliptiques, décrite dans la norme IEEE P1363, section A.12.1.15 La présente invention ayant pour objectif d'optimiser l'opération axb, il convient, dans un premier temps, d'exposer l'art antérieur en matière d'algorithmes de multiplication d'entiers.
Aux fins de notre description, nous supposerons que les nombres entiers a et b sont tous deux formés de n mots de t bits. a = a[0]+a[1] 2t + a[2] 22t + ...+ a[n-1] 2@1-1)t b = b[0]+b[1] 2t + b[2] 22t + ...+ b[n-1] 2(n-1)t Ainsi le produit r = axb sera un entier de 2n mots de t bits : r =axb = r[0]+r[1] 2t + r[2] 22t + ...+ r[2n-1] 2(2n-1)t
La méthode de multiplication classique
Cette méthode fait appel à une sous-routine de base notée MADA (acronyme signifiant « Multiplier, Additionner, Diviser et Accumuler ») et imite le procédé de multiplication manuel. La sous-routine MADA prendra en entrée quatre mots x,y,c,r et retournera deux mots u,v tels que : u 2' +v = x y+c+r
Comme x,y,c,r sont tous inférieurs ou égaux à l'entier maximal représentable dans le mot machine de t bits (à savoir 2t4) leur somme est inférieure ou égale à (2t-1)(2t-1)+(2t-1)+(2t-1) = (22t-2t+1+1)+ 2t+1-2 = 22t4. Il s'en suit que {u,v}=MADA(x,y,c,r) ne peut causer un débordement nécessitant plus que deux mots de t bits pour représenter le résultat {u,v}.
La multiplication classique est effectuée ainsi : Entrée : deux entiers a = a[0]+a[1] 2t + a[2] 22t + ...+ a[n-1] 2@1-1)t et b = b[0]+b[1] 2t + b[2] 22t + ...+ b[n-1] 2@1-1)t 1 : mettre à zéro le registre résultat r[0] = r[1] = ... = r[2n-1] = 0 2:pour i=0àn-1{ 2.1.: c=0 2.2.: pour j = 0 à n-1 { 2.2.1. : {c,r[i+j]} = MADA(a[i],b[j],c,r[i+j]) } 2.3.: r[i+n]=c } 3 : retourner le résultat r = r[0]+r[1] 2t + r[2] 22t + ...+ r[2n-1] 2(2n-1)t Algorithme 1 La méthode de multiplication de Karatsuba
Cette méthode (^publiée dans l'article de A. Karatsuba et Yu. Ofman (1962). "Multiplication of Many-Digital Numbers by Automatic Computers". Proceedings of the USSR Academy of Sciences 145: 293-294.) utilise comme sous-routine un programme de multiplication existant, par exemple un programme mettant en oeuvre la multiplication classique que nous venons d'exposer.
La méthode de Karatsuba considère les nombres entiers a et b comme la concaténation de deux parties de tailles égales : a = ahaut 2L + abri et b = bhaut 2L + bbas. Typiquement L = tn/2.
La multiplication de Karatsuba est effectuée ainsi : Entrée : deux entiers a = ahaut 2L + abri et b = bhaut 2L + bbas. 1 : U = ahaut X bhaut 2 : V = abas X bbas 3 : W = (ahaut + abas ) X (bhaut + bbas) - U - V 4 : retourner le résultat r = u 22L + w 2L + v Algorithme 2
Il est facile de vérifier, en substituant les valeurs de u, v et w que la quantité r retournée par l'algorithme de Karatsuba est : ahaut bhaut 22L + ((ahaut + abas) (bhaut + bbas) - ahaut bhaut - abas bbas) 2L + abas bbas = ahaut bhaut 22L + ((ahaut abas ) + (bhaut bbas)) 2L + abas bbas = axb
L'avantage de la méthode de Karatsuba est que le résultat r de la 10 multiplication de a par b s'obtient en effectuant trois (et non quatre) multiplications de nombres de L bits (soit un gain de 25%).
La méthode de Karatsuba se prête à une généralisation récursive connue à l'homme de l'art permettant d'accroître le gain de vitesse au-delà de 25%. La mise en oeuvre de l'une des méthodes précédentes en FPGA
Un circuit logique programmable dit FPGA (« Field-Programmable Gate Array »), ou réseau logique programmable, est un circuit intégré logique qui 20 peut être reprogrammé après sa fabrication. Il est composé de nombreuses cellules logiques élémentaires (élément 3 sur la figure 1) librement assemblables.
Un bloc logique est de manière générale constitué d'une table de 25 correspondance (LUT ou Look-Up-Table) et d'une bascule (Flip-Flop en anglais). La LUT sert à implémenter des équations logiques ayant généralement 15 4 à 6 entrées et une sortie. Elle peut toutefois être considérée comme une petite mémoire, un multiplexeur ou un registre à décalage. Le registre permet de mémoriser un état (machine séquentielle) ou de synchroniser un signal (pipeline).
Les blocs logiques, présents en grand nombre sur la puce (de quelques milliers à quelques millions en 2007) sont connectés entre eux par une matrice de routage configurable (élément 1 sur la figure 1). Ceci permet la reconfiguration à volonté du composant, mais occupe une place importante sur le silicium et justifie le coût élevé des composants FPGA. La topologie est dite « Manhattan », en référence aux rues à angle droit de ce quartier de New York. Le FPGA communique avec le mode extérieur à l'aide de cellules d'entrée sortie (élément 2 sur la figure 1).
La structure d'un tel circuit rend malaisée la réalisation de grands multiplieurs parallèle-parallèle car dans de tels circuits, où chaque bit du résultat dépends de tous les bits d'entrée demandent la connexion de signaux par-dessus les blocs logiques. Ainsi, la programmation directe d'un algorithme de multiplication classique sur FPGA résultera en de piètres performances.
Ainsi, il devient important de mettre au point des circuits de multiplication adaptés aux FPGAs au cas où le FPGA servirait pour le calcul et non pour prototypes un algorithme. 3. Résumé de l'invention
L'invention a pour objectif général de pallier, dans des contextes particuliers, à au moins certains inconvénients de ces techniques connues et ce surtout lorsque l'on dispose de multiplieurs matériels de taille relativement modeste (par exemple 8 bits x 8 bits).
Plus précisément, un premier objectif de l'invention est notamment de fournir une technique permettant d'effectuer efficacement des multiplications d'entiers variables par un entier constant.
Un second objectif de l'invention est notamment de fournir une technique permettant d'effectuer efficacement des multiplications d'entiers variables par d'autres entiers variables.
Un troisième objectif de l'invention est notamment de fournir une 10 technique efficace de gestion de la mémoire vive, permettant de réduire la sauvegarde nécessaire à l'exécution des méthodes de multiplication inventives.
Un quatrième objectif de l'invention est notamment de fournir une technique de multiplication pouvant être facilement parallélisée sur une 15 architecture multiprocesseurs SIMD ou sur une architecture à logique configurable.
Un cinquième objectif de l'invention est notamment de fournir une technique de génération de clés cryptographiques facilement multipliables par 20 des entiers variables à l'aide des méthodes inventives.
Un sixième objectif de l'invention est notamment de fournir une procédure accélérée de réduction modulaire basée sur les cinq objectifs précédents en appliquant les méthodes inventives à la réalisation des 25 multiplications nécessaires à l'exécution des algorithmes de Barrett et de Montgomery.
L'accroissement d'efficacité dont il est question dans la présente invention s'exprime par un nombre réduit d'appels à la sous-routine MADA et 30 par une parallélisation possible de l'opération de multiplication.
La multiplication d'un nombre variable par une constante fixe est très utile, surtout en cryptographie où il est souvent nécessaire de calculer le résultat de l'opération gx où g est fixe et x variable.
Une telle opération est aussi très utile pour le traitement graphique où une multiplication par des constantes fixes est souvent nécessaire afin d'effectuer des calculs trigonométriques.
Enfin, de nombreux algorithmes de traitement du signal (filtrage, FFT, 10 convolution) nécessitent d'effectuer des multiplications de nombres variables par des constantes fixes.
L'invention peut également s'adapter aux cas dans lesquels il est nécessaire de multiplier deux nombres variables l'un par l'autre comme il sera 15 expliqué dans les paragraphes qui suivent.
Brèves explications des Dessins
La figure 1 illustre un circuit électronique selon un exemple de 20 réalisation de l'invention. Les figures 2 et 3 présentent des ordinogrammes illustrant l'algorithme 4 selon un exemple de réalisation de l'invention
4. Description de l'invention 4.1. Représentation inventive de l'entier a
Reprenant les notations de la section 2, il est proposé de calculer la valeur r=axb de manière efficace ainsi :
Il est rappelé que le nombre a est divisé en n mots de taille t bits. a = a[0]+a[1] 2t + a[2] 22t + ...+ a[n-1] 2(n-1)t 25 30 On génère, une fois pour toutes, un tableau U comportant au plus h n-2 lignes, organisé comme suit : La cellule contient une valeur entière comprise entre -c et +c où c est une petite borne entière, typiquement 1, 2 ou 3. La colonne « cible » contient un entier S; compris entre 0 et n-1. étape j a[0] a[1] a[n-2] a[n-1] cible j=0 U0,0 U1,0 ... Un-2,0 Un-1,0 SO j=1 U0,1 Ul,l Un-2,1 Un-1,1 Si ... ... ... ... ... ... ... j=h-1 UO,h-1 U1,h-1 Un-2,h-1 Un-1,h-1 Sh-1 j=h UO,h U1,h ... Un-2,h Un-1,h Sh Le tableau est une représentation alternative du nombre a, cette représentation alternative exprime une manière dont les mots a[i], constituant l'entier a, peuvent être obtenus les uns des autres par des combinaisons 10 linéaires successives à petits coefficients, selon la formule suivante : a[S;] = a[O] Uo,; +...+ a[n-1] Un-1,, Exemple : Etapej a[0] a[1] a[2] a[3] a[4] a[5] a[6] cible J=0 U0,0=0 U1,0=1 U2,0=0 U3,0=0 U4,0=-1 U5,0=0 U6,0=1 So=2 =1 U0,1=0 U1,1=0 U2,1=0 U3,1=0 U4,1=1 U5,1=0 U6,1=0 S1=5 j=2 U0,2=0 U1,2=0 U2,2=-1 U3,2=0 U4,2=0 U5,2=1 U6,2=0 S2=0 j=3 U0,3=1 U1,3=0 U2,3=0 U3,3=0 U4,3=0 U5,3=-1 U6,3=0 S3=3 15 Un tel tableau U exprime le fait que les chiffres du nombre a peuvent s'obtenir successivement ainsi : On débute le processus avec trois mots : a[1], a[4] et a[6].
Former a[2]=a[1]-a[4]+a[6] (étape j=0) puis a[5]=a[4] (étape j=1) puis 20 a[O]=a[5]-a[2] (étape j=2) et enfin a[3]=a[0]-a[5] (étape j=3).5 Etant donné un nombre entier a, la construction du tableau U qui lui est associé fait appel à la technique de « retour sur trace » (appelée aussi « backtracking » en anglais). Cette technique est décrite dans de très nombreuses références bibliographiques, dont par exemple « Gurari Eitan, 1999 Backtracking Algorithms « CIS 680: Data Structures : Chapter 19 : Backtracking Algorithms ».
La technique du retour sur trace, évidente à l'homme de l'art, consiste à revenir légèrement en arrière sur des décisions prises afin de sortir d'un 10 blocage.
4.2. Gestion efficace de la mémoire utilisée par le procédé inventif
Afin de gérer de manière efficace l'allocation et la libération de la 15 mémoire en cours de l'algorithme, il est possible de définir une table auxiliaire M indiquant les variables pouvant être libérées à la fin de chaque étape du calcul.
Le tableau M est dérivé du tableau U ainsi : Entrée : un tableau Ui,; 1 : mettre à la valeur 1 toutes les cellules telles que Ui,;0. 2 : supprimer la colonne « cible » 3:pour i=1àn-1{ 3.1.: soit Ti le plus grand indice j tel que Ui,;=1 3.2.: mettre le symbole L dans toutes les cellules Uj,Tj } 4 : mettre à la valeur 0 toutes les cellules telles que U,,=1 5 : enlever la ligne j = h. 6 : retourner le tableau résultant de l'exécution des étapes 1 à 5 Algorithme 3 20 Nous noterons par Mk le tableau généré après l'étape k (k=1,2,3,4,5) du processus que nous venons de décrire.
Le symbole « L » signifie « Libérer après usage ». L'usage du symbole « L » n'a rien d'obligatoire ou de fondamental et toute autre façon de marquer l'information peut être substituée au symbole « L ».
10 Par exemple : après les étapes 1 et 2 le tableau donné à titre illustratif deviendra M2 : étape j a[0] a[1] a[2] a[3] a[4] a[5] a[6] j=0 0 1 0 0 1 0 1 j=1 0 0 0 0 1 0 0 j=2 0 0 1 0 0 1 0 j=3 1 0 0 0 0 1 0 15 après l'étape 3 le tableau donné à titre illustratif deviendra M3 : étape j a[0] a[1] a[2] a[3] a[4] a[5] a[6] j=0 0 L 0 0 1 0 L j=1 0 0 0 0 L 0 0 j=2 0 0 L 0 0 1 0 j=3 L 0 0 0 0 L 05 après l'étape 4le tableau donné à titre illustratif deviendra M4 : étape j a[0] a[1] a[2] a[3] a[4] a[5] a[6] j=0 0 L 0 0 0 0 L j=1 0 0 0 0 L 0 0 j=2 0 0 L 0 0 0 0 j=3 L 0 0 0 0 L 0 après l'étape 5 le tableau donné à titre illustratif deviendra MS=M : étape j a[0] a[1] a[2] a[3] a[4] a[5] a[6] j=0 0 L 0 0 0 0 L j=1 0 0 0 0 L 0 0 j=2 0 0 L 0 0 0 0 La reconstruction des mots de a, économe en mémoire effectuée selon le tableau M s'exécute ainsi :
10 On débute le processus avec trois mots : a[1], a[4] et a[6]
comme indiqué par le tableau U, générer a[2]=a[1]-a[4]+a[6] à cette étape le tableau M indique que l'on peut libérer les registres contenant a[1] et a[6] 15 comme indiqué par le tableau U, générer a[5]=a[4] à cette étape le tableau M indique que l'on peut libérer le registre contenant a[4] comme indiqué par le tableau U, générer a[0]=a[5]-a[2] à cette étape le tableau M indique que l'on peut libérer le registre 20 contenant a[2] générer a[3]=a[0]-a[5] à cette étape on peut libérer tous les registres restant alloués.5 4.3. Procédé inventif de multiplication par une constante fixe
Afin d'effectuer l'opération axb où a est fixe et b variable on procède de manière très analogue au procédé de reconstruction des mots de a que nous venons de décrire. On calcule par une multiplication « entier x mot » les quantités bxa[1], bxa[4] et bxa[6], et on initialise le registre de résultat à la valeur r=bxa[1]x2'+bxa[4]x24t+bxa[6]x26t
Il est maintenant possible de calculer par une addition et une 10 soustraction la quantité b x a[2] = b x a[1] - b x a[4] + b x a[6] et de mettre à jour le registre de résultat r = r + b x a[2] x 22t.
On libère les registres contenant b x a[1] et b x a[6] comme l'indique le tableau M. En consultant le tableau U on voit que a[5]=a[4] et donc que 15 l'opération suivante à effectuer est b x a[5] = b x a[4].
Ainsi, on met à jour le registre de résultat r = r + b x a[4] x 25t et on libère le registre contenant b x a[4] comme l'indique le tableau M.
20 Ensuite on calcule b x a[0] = b x a[5] - b x a[2], on met à jour r = r + b x a[0] puis on libère le registre contenant b x a[2].
Enfin, le tableau U indique que l'on doit calculer b x a[3] = b x a[0] - b x On calcule donc le résultat final r = r + b x a[3] x 23t et on libère tous les registres restant alloués. a[5]. 25 L'algorithme inventif est donc le suivant : Entrée : une liste de mots a[i] pour les indices i tels que U,o 0 un entier b un tableau Ui,; un tableau Mi,; 1 : initialiser r = 0 2:pour i=0àn-1{ 2.1.: si U,o 0 alors allouer la variable q[i] = b x a[i] } 3:pour j=1àh{ 3.1.: allouer la variable q[S;] = q[O] Uo,; +...+ q[n-1] Un-1,, 3.2.: mettre à jour r = r + q[S;] 2tsi 3.3.: libérer les variables q[k] pour les k tels que Mk,, ==L } 4 : libérer toutes les variables q[ ] restantes allouées. : retourner le résultat r. Algorithme 4
5 Note : Dans le calcul de la somme q[S;] = q[O] Uo,; +...+ q[n-1] Un-i,; le résultat de la multiplication d'une variable q[ ] non allouée par un est défini comme étant zéro.
Note : Le nombre de registres nécessaires à l'exécution de l'algorithme à l'étape j est égale à v;=n-z;+1 où z; note le nombre de cellules à la ligne j dans le tableau M4 contenant un zéro. Ainsi, la consommation totale de mémoire de l'algorithme multiplication est égale à maxi (v;).
Il est estimé que la méthode inventive que nous venons de décrire sera, pour une rapidité équivalente à celles des méthodes classiques, a peu près 10 fois moins consommatrice en place sur un FPGA ou, inversement, 4 fois plus rapide qu'une multiplication classique pour une surface équivalente. 4.4. Procédé inventif de multiplication par un entier variable
Dans le cas où a et b sont tous deux des nombres entiers variables il devient trop coûteux de construire un tableau U en temps réel par la technique 5 de « retour sur trace ».
La méthode inventive peut cependant s'adapter au cas où a et b sont tous deux des nombres entiers variables. Pour ce faire on trie les mots a[i] par ordre croissant afin d'obtenir une suite d[0],...,d[n-1].
Ensuite, on calcule les différences A[i] = d[i+l]-d[i] dont l'espérance est de l'ordre de 2t/n. Ainsi, en calculant les quantités b x j pour j = 2,...,B pour une borne B de l'ordre de 2t/n il devient possible de construire, par additions successives la grande majorité des valeurs b x a[i].
Lorsque l'écart entre d[i+l] et d[i] est tel que A[i]>B, on traite un tel A[i] comme une exception :
- soit en ajoutant des termes de la forme b x j dont nous disposons pour 20 un sous-ensemble des valeurs de j dont la somme égale A[i] - soit en effectuant directement la multiplication b x A[i] permettant ensuite de passer de b x d[i] à b x d[i+l] par une simple addition.
Pour plus de clarté nous illustrons ici le procédé inventif en base 100 et 25 non en une base 2t. Par exemple, supposons que l'on souhaite multiplier le nombre a= 3141592653589793238462643383279502884197169399375105820974944592307816 4062862089986280348253421170680 par un certain nombre entier b. 10 15 30 On découpe a en groupes de deux chiffres décimaux : a[ 00]=03 a[ 01]=14 a[ 02]=15 a[ 03]=92 a[ 04]=65 a[ 05 ]= 35 a[ 06 ]= 89 a[ 07 ]= 79 a[ 08 ]= 32 a[ 09 ]= 38 a[ 10 ]= 46 a[ 11 ]= 26 a[ 12 ]= 43 a[ 13 ]= 38 a[ 14 ]= 32 a[ 15 ]= 79 a[ 16 ]= 50 a[ 17 ]= 28 a[ 18 ]= 84 a[ 19 ]=19 a[20]=71 a[21]=69 a[22]=39 a[23]=93 a[ 24]=75 a[ 25]=10 a[ 26]=58 a[ 27]=20 a[ 28]=97 a[ 29]=49 a[ 30 ]= 44 a[ 31 ]= 59 a[ 32 ]= 23 a[ 33 ]= 07 a[ 34 ]= 81 a[ 35 ]= 64 a[ 36 ]= 06 a[ 37 ]= 28 a[ 38 ]= 62 a[ 39 ]= 08 a[40]=99 a[41]=86 a[42]=28 a[43]=03 a[44]=48 a[45]=25 a[46]=34 a[47]=21 a[48]=17 a[49]=06 a[ 50 ]= 80.
On trie la liste précédente par ordre croissant afin d'obtenir : d[ 00]=03 d[ 01]=03 d[ 02]=06 d[ 03]=06 d[ 04]=07 d[ 05 ]= 08 d[ 06 ]=10 d[ 07 ]=14 d[ 08 ]=15 d[ 09 ]=17 d[ 10 ]=19 d[ 11 ]= 20 d[ 12 ]= 21 d[ 13 ]= 23 d[ 14 ]= 25 d[ 15 ]= 26 d[ 16 ]= 28 d[ 17 ]= 28 d[ 18 ]= 28 d[ 19 ]= 32 d[ 20 ]= 32 d[ 21 ]= 34 d[ 22 ]= 35 d[ 23 ]= 38 d[ 24 ]= 38 d[ 25 ]= 39 d[ 26 ]= 43 d[ 27 ]= 44 d[ 28 ]= 46 d[ 29 ]= 48 d[ 30 ]= 49 d[ 31 ]= 50 d[ 32 ]= 58 d[ 33 ]= 59 d[ 34 ]= 62 d[ 35 ]= 64 d[ 36 ]= 65 d[ 37 ]= 69 d[ 38 ]= 71 d[ 39 ]= 75 d[ 40]=79 d[ 41]=79 d[ 42]=80 d[ 43]=81 d[ 44]=84 d[ 45]=86 d[ 46]=89 d[ 47]=92 d[ 48]=93 d[ 49]=97 d[ 50 ]= 99 Ce qui donne la liste des différences suivante : A[00]=0 A[ 01]=3 A[02]=0 A[03]=1 A[04]=1 A[05]=2 A[06]=4 A[07]=1 A[08]=2 A[09]=2 A[10]=1 A[11]=1 A[12]=2 A[13]=2 A[14]=1 A[15]=2 A[16]=0 A[17]=0 A[18]=4 A[19]=0 A[20]=2 A[21]=1 A[22]=3 A[23]=0 A[24]=1 A[25]=4 A[26]=1 A[27]=2 A[28]=2 A[29]=1 A[30]=1 A[31]=8 A[32]=1 A[33]=3 A[34]=2 A[35]=1 A[36]=4 A[37]=2 A[38]=4 A[39]=4 A[40]=0 A[41]=1 A[42]=1 A[43]=3 A[44]=2 A[45]=3 A[46]=3 A[47]=1 A[48]=4 A[49]=2 Ainsi, les écarts possibles sont 0, 1, 2, 3, 4 et 8. En prenant la borne B=4 il s'avère nécessaire de calculer une fois pour toutes les écarts 2 x b, 3 x b et 4 x b afin de couvrir toute la liste à l'exception de A[ 31 ]= 8. Afin de générer 8 x b, deux méthodes sont donc possibles : - soit en ajoutant des termes de la forme b x j dont nous disposons pour 10 un sous-ensemble des valeurs de j dont la somme égale A[i]. Dans le cas présent 4xb+4xb.
- soit en effectuant directement la multiplication b x A[i] permettant de passer de b x d[i] à b x d[i+1] par une simple addition. Dans le cas présent il 15 s'agit d'effectuer la multiplication b x 8. 4.5. Procédé inventif de multiplication parallèle
Dans le cas où l'on dispose de plusieurs coeurs de multiplication il est 20 possible d'adapter le procédé inventif afin de faire fonctionner e coeurs de multiplication en parallèle.
Pour ce faire il est nécessaire d'adapter le procédé de retour sur trace afin de construire e tableaux U1,...,Ue minimisant la dépendance entre les a[i] de 25 sorte que les e processus lancés sur e coeurs puissent être soit indépendants soit synchronisés.
Lorsque les e processus se terminent, le résultat final r s'obtient en faisant la somme des résultats r1,...,re retournés par les e processus. 4.5.1. Cas des processus indépendants Deux processus de multiplication sont dits indépendants si aucun des deux processus n'utilise (requiert) les a[i] produits par l'autre processus. En d'autres termes, les différents processus indépendants partitionnent l'ensemble 30 des a[i] en e classes mutuellement disjointes dans le temps et dans l'espace mémoire et dont le calculs indépendants sont codés par les U1,...,Ue. 4.5.2. Cas des processus synchronisés Deux processus sont dits synchrones si aucun des deux processus n'utilise (requiert) un a[i] avant que ce dernier n'ait été produit par l'autre processus. En d'autres termes, les deux processus partitionnent l'ensemble des a[i] en e classes indépendantes seulement dans l'espace mémoire mais pas dans le temps, et dont les calculs sont codés par les U1,...,Ue. 4.6. Procédé de retour sur trace amélioré
Il est possible de rendre le procédé de recherche d'un tableau U plus rapide en offrant à l'algorithme de retour sur trace plus de solutions potentielles.
Afin d'illustrer ces variantes, considérons le nombre entier a, défini de manière décimale ainsi : a = [chiffres] 01 66 [chiffres] 81 [chiffres] 85 [chiffres]
Comme 166 = 81 + 85 il est clair que la quantité 166 X b peut s'obtenir par l'addition de 81 X b + 85 X b. Et ce même si le nombre 166 s'étale sur deux mots consécutifs. De même considérons un autre nombre entier a, défini de manière décimale ainsi :
a = [chiffres] 41 66 [chiffres] 81 [chiffres] 85 [chiffres] 40 [chiffres] 30 Comme 166 = 81 + 85 il est clair que la quantité 41 66 X b peut s'obtenir par l'addition de 81 X b + 85 X b + 100 X (40 X b).
Cette variante s'adapte également aux nombres négatifs comme illustré 5 dans l'exemple suivant où l'entier a, est toujours défini de manière décimale ainsi :
a = [chiffres] 41 66 [chiffres] 34 [chiffres] 42 [chiffres]
10 Puisque 41 66 = 4200 - 34 la quantité 41 66 X b peut s'obtenir par l'opération 100 X (42 X b) - 34 X b.
4.7. Procédé de génération de clés multipliables efficacement.
15 Dans un certain nombre de scénarios cryptographiques, il s'avère possible de choisir des clés ayant une forme particulière.
Par exemple, dans le protocole d'identification de Fiat-Shamir, il est nécessaire d'effectuer la multiplication de clés privées s dont les clés publiques 20 vi associées sont définies par vi =1/s? mod n.
Ainsi, il est possible de choisir les clés s de sorte à ce qu'une multiplication d'un s par un s, soit rapide.
25 Pour ce faire on peut générer d'abord le tableau U et ensuite dériver le nombre a qu'il représente (plutôt qu'effectuer la démarche inverse).
Ceci présente deux avantages :
30 - Il n'est plus nécessaire d'avoir recours à l'algorithme de « retour sur trace » afin de générer U. - Le nombre de registres q[ ] nécessaires à l'algorithme 4 peut être contrôlé et fixé d'avance lors de la génération de la clé.
La méthode présente néanmoins deux inconvénients qui doivent être 5 évalués avant toute mise en oeuvre du présent procédé de génération de clés multipliables efficacement:
L'entropie des clés ainsi générées se trouve réduite.
10 - Il n'est parfois plus possible de fixer les autres paramètres du système à des valeurs arbitraires si ces autres paramètres sont générés à partir de clés multipliables efficacement. Cette seconde réserve se comprendra facilement en considérant 15 l'exemple du protocole de Fiat-Shamir :
Si le générateur de la clé génère d'abord s et calcule ensuite vi =1/s? mod n, le nombre vi n'aura aucune forme particulière.
20 Par contre, si le générateur de la clé souhaite que vi soit une chaîne particulière (par exemple l'identité d'un utilisateur), alors le nombre s calculé par s =1/Jv mod n n'aura aucune forme particulière et la génération du tableau U qui lui est associé nécessitera un recours à un algorithme de retour sur trace. 4.8. Procédé de réduction modulaire efficace
La majorité des algorithmes cryptographiques à clé publique nécessite d'effectuer une réduction modulaire modulo un module n qui, usuellement, ne 5 varie pas beaucoup durant le calcul cryptographique.
Deux méthodes connues de l'homme de l'art ont été publiées par Barrett et par Montgomery dans les articles suivants :
10 - P.D. Barrett, "Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor," Advances in Cryptology - CRYPTO'86, Springer, 1986.
- Peter Montgomery, "Modular Multiplication Without Trial Division," 15 Math. Computation, vol. 44, pp. 519-521, 1985.
Dans les deux cas, la réduction modulaire comporte la multiplication d'un nombre variable par une constante dérivée à partir du module n modulo lequel l'on souhaite réduire le nombre. Dans le cas de l'algorithme de Barrett, la constante vaut la partie entière de la quantité 2Vn où L est la taille du nombre à réduire.
Dans le cas de l'algorithme de Montgomery, la constante vaut la 22N mod 25 n où N est la taille du module n.
Ainsi on peut voir que la multiplication par ces constantes peut se faire de manière efficace à l'aide des algorithmes inventifs présentés précédemment. 20 4.9. Combinaison avec le procédé de Karatsuba
Il s'avère possible de combiner l'algorithme inventif avec le procédé de 5 Karatsuba que nous avons présenté précédemment et ce sorte à bénéficier de l'accélération des calculs apportées par les deux algorithmes.
Rappelons que la multiplication de Karatsuba, où on multiplie les nombres entiers a = ahaut 2L + abas et b = bhaut 2L + bbas s'effectue à l'aide des étapes 10 suivantes :
1 : U = ahaut X bhaut 2: 3: 15 4 : V = abas X bbas W = (ahaut + abas ) X (bhaut + bbas) - U - V retourner le résultat r = u 22L + w 2L + v Ainsi, il est clair que si a est constant alors les quantités ahaut, abas et (ahaut + abas ) le sont aussi.
20 Il s'en suit que les étapes 1, 2 et 3 peuvent s'effectuer en tirant avantage de l'algorithme inventif ce qui permet de tirer avantage des deux facteurs d'accélération des deux méthodes.

Claims (19)

  1. REVENDICATIONS1. Méthode d'encodage d'un nombre entier a = a[0] + a[1] 2t + a[2] 22t + ...+ a[n-1] 2(n-1)t formé de n mots de t bits. Ledit encodage est formé de : A. Un tableau d'entiers Ui,;, de h+1 lignes et n colonnes B. Un ensemble d'entiers {S;} C. et d'un sous ensemble Ao c {a[0],a[1],...,a[n-1]} de mots de t bits. Le dit encodage étant tel que pour j = 0,...,h le relations suivantes sont satisfaites : a[S;] = a[0] Uo,, +...+ a[n-1] Un-1,;.
  2. 2. Méthode d'encodage d'un nombre entier a = a[0] + a[1] 2t + a[2] 22t + ...+ a[n-1] 2(n-1)t formé de n mots de t bits. Le dit encodage est formé de : A. Un tableau d'entiers Ui,;, de h+1 lignes et n colonnes B. Un ensemble d'entiers {S;} C. et d'un sous ensemble Ao c {a[0],a[1],...,a[n-1]} de mots de t bits. Le dit encodage étant tel que pour j = 0,...,h le relations suivantes sont satisfaites : a[S;] = a[0] Uo,, +...+ a[n-1] Un-i,; ou a[5;+1] 2t + a[S;] = a[0] Uo,, +...+ a[n-1]
  3. 3. Méthode d'encodage d'un nombre entier a selon l'une ou plusieurs des revendications 1 à 2 où les entiers sont tels que -c<_Ui,;<_c et où c est une constante entière.
  4. 4. Méthode d'encodage d'un nombre entier a selon l'une ou plusieurs des revendications 1 à 3 où l'entier c a pour valeur 1 ou 2 ou 3.
  5. 5. Dispositif et programme produisant à partir d'un nombre entier a 30 un encodage conforme à l'une ou plusieurs des revendications 1 à 4. Ce dispositif et programme comprenant les étapes suivantes : A. choisir un sous ensemble Ao c {a[O],a[1],...,a[n-1]}. B. initialiser une variable j = 0 C. tant que A {a[O],a[1],...,a[n-1]} { C.1. choisir un indice S;E {0,...,n-1} tel que a[S;]E A; C.2. exprimer le mot a[S;] = a[O] Uo,, +...+ a[n-1] Un-I,, comme une combinaison linéaire à petits coefficients entiers des a[i]e A. C.3. s'il est impossible d'effectuer l'étape C.2. alors faire un retour sur trace (« backtracking ») à une étape j' < j nécessaire pour débloquer l'algorithme. C.4. si l'ensemble de l'étape C échoue malgré tous les retours sur trace faits à l'étape C.3., choisir un nouvel sous-ensemble Ao et aller à l'étape B. C.5. A;+i = A u {a[S;] } C.6. j++ } D. retourner Ao, l'ensemble des S; et une table formée des
  6. 6. Dispositif et programme produisant à partir d'un entier a un encodage conforme à l'une ou plusieurs des revendications 1 à 4. Ce dispositif et programme comprenant les étapes suivantes : 5 A. choisir un sous ensemble Bo=Ao c {a[O],a[1],...,a[n-1]}. B. initialiser une variable j = 0 C. tant que B; ~ {a[O],a[1],...,a[n-1]} { 10 C.1. choisir un indice S;E {0,...,n-1} tel que a[S;]E Bi C.2. effectuer l'une des options suivantes : C.2.1. exprimer le mot a[S] = a[O] Uo,, +...+ a[n-1] Un-I,, comme une combinaison linéaire à petits coefficients entiers des a[i]e A. ou 15 C.2.2. si a[S; +1] E exprimer le nombre a[S;+1] 2t + a[S;] = a[O] Uo,, +...+ a[n-1] Un-i,; comme une combinaison linéaire à petits coefficients entiers des a[i]e A. C.3. s'il est impossible d'effectuer l'étape C.2. alors faire un retour sur trace (« backtracking ») à une étape j' < j nécessaire pour débloquer 20 l'algorithme. C.4. si l'ensemble de l'étape C échoue malgré tous les retours sur trace faits à l'étape C.3., choisir un nouvel sous-ensemble Ao et aller à l'étape B. C.5. si C.2.1. a été exécuté alors A;+i = A u {a[S;]} si C.2.2. a été exécuté alors B;+i = B; u {a[5;+1], a[S;]} 25 C.6.j++ } D. retourner Ao, l'ensemble des S; et une table formée des
  7. 7. Dispositif et programme permettant de calculer à partir du tableau un tableau décrivant une politique de libération de mémoire efficace lors de l'utilisation d'un entier a selon l'une ou plusieurs des revendications 1 à 6. Ce dispositif et programme comprenant les étapes suivantes : A. mettre à la valeur 1 toutes les cellules du tableau U telles que U,;0. B. pour i=làn-1{ B.1. soit Ti le plus grand indice j tel que U,,=1 B.2. mettre le symbole L dans toutes les cellules Uj,Tj } C. mettre à la valeur 0 toutes les cellules telles que Ui,;=1 D. supprimer la dernière ligne j=h. E. retourner le tableau résultant de l'exécution des étapes A à D.
  8. 8. Dispositif et programme permettant de calculer à partir des tableaux et Mi,;, de l'ensemble Ao, et d'un entier b un nombre r=axb selon l'une ou plusieurs des revendications 1 à 7. Ce dispositif et programme comprenant les étapes suivantes : A. initialiser r = 0 B. pour i=0àn-1{ B.1. si Ui,o 0 alors allouer la variable q[i] = b x a[i] } C.pour j=1àh{ C.1. allouer la variable q[S] = q[O] Uo,, +...+ q[n-1] Un-i,; C.2. mettre à jour r = r + q[S;] 2tsJ C.3. libérer les variables q[k] pour les k est tel que Mk,; ==L } D. libérer toutes les variables q[ ] restantes allouées. E. retourner le résultat r.
  9. 9. Dispositif et programme permettant de calculer sur une architecture à e multiplieurs une forme parallèle du procédé décrit dans la revendication 8. Ledit procédé parallèle est caractérisé par un calcul indépendant ou par un calcul synchronisé de e instances du procédé décrit dans la revendication 8. Ledit calcul indépendant ou synchronisé étant obtenu en adaptant le procédé de retour sur trace des revendications 5 ou 6 afin de trouver e tableaux U1,...,Ue minimisant la dépendance entre les a[i] de sorte que les e processus lancés sur e multiplieurs puissent être mutuellement indépendants ou synchronisés. Lorsque les e processus se terminent, le résultat final r s'obtient en faisant la somme des résultats r1,...,re retournés par les e processus.
  10. 10. Dispositif et programme permettant de calculer sur une 15 architecture à e multiplieurs une forme parallèle du procédé décrit dans la revendication 9. Le dispositif et programme étant caractérisés en ce qu'aucun des e processus n'utilise (requiert) les a[i] produits par un autre processus. En d'autres termes, les différents processus indépendants partitionnent l'ensemble des a[i] en e classes mutuellement disjointes dans le temps et dans l'espace mémoire. Les calculs correspondant à chaque classe étant codés par les U1 Ue.
  11. 11. Dispositif et programme permettant de calculer sur une architecture à e multiplieurs une forme parallèle du procédé décrit dans la revendication 9. 30 Le dispositif et programme étant caractérisés en ce qu'aucun des e processus n'utilise (requiert) un a[i] avant que ce dernier ne soit produit par un autre processus. 20 25 En d'autres termes, les différents processus partitionnent l'ensemble des a[i] en e classes indépendantes seulement dans l'espace mémoire mais pas dans le temps. Les calculs correspondant à chaque classe étant codés par les U1,...,Ue.
  12. 12. Dispositif de génération de clés cryptographiques faciles à multiplier par l'un des procédés ou dispositifs décrits dans les revendications 1 à 11 consistant à générer d'abord le tableau et l'ensemble Ao puis de dériver l'entier a qu'ils représentent. 10
  13. 13. Dispositif de génération de clés cryptographiques faciles à multiplier selon la revendication 12 où lesdites clés servent à l'un des algorithmes suivants : Fiat-Shamir, ou Diffie-Hellman, ou RSA ou DSA ou tout algorithme opérant sur une courbe elliptique. 15
  14. 14. Dispositif et programme permettant de calculer à partir de deux entiers a = a[O] + a[1] 2t + a[2] 22t + ...+ a[n-1] 2(n-1)t et b = b[O] + b[1] 2t + b[2] 22t + ...+ b[n-1] 2(n-1)t tous deux formés de n mots de t bits le nombre r = axb = r = r[0]+r[1] 2t + r[2] 22t + ...+ r[2n-1] 2(2n-1)t 20 Lesdits dispositif et programme étant caractérisés par l'exécution des étapes de calcul suivantes : A. Fixer une borne entière B. 25 B. Calculer les quantités h[j]= jxb pour j = 2,...,B. Eventuellement par additions successives de b. C. Trier les mots a[i] par ordre croissant. Soit d[0]<_...<_d[n-1] la suite de mots ainsi obtenus. D. Calculer Ai = d[i+l]-d[i] pour i = 0,...,n-2. 30 E. Pour les A>B calculer les quantités h[4 ]=A xb par toute moyen. F. Calculer le nombre po = d[O]xb. G. Calculer pour i=1,...n-1 les nombres pi = d[i]xb par la relation de récurrence pi+i=pi+h[Ai]. H. Constituer le résultat r par l'addition d'entiers pi décalés.
  15. 15. Dispositif et programme selon la revendication 14 où le calcul de l'étape E est accompli en effectuant directement la multiplication de Ai par b
  16. 16. Dispositif et programme selon la revendication 14 où le calcul de l'étape E est accompli en en exprimant h[Ai] comme une somme de h[i] calculés à l'étape B.
  17. 17. Un algorithme de réduction modulaire nécessitant une opération de multiplication d'entiers comme sous-routine, caractérisé en ce que ladite multiplication est effectuée à l'aide d'une des méthodes décrites dans l'une ou plusieurs des revendications 1 à 16.
  18. 18. Méthode de multiplication d'entiers basée sur l'algorithme de Karatsuba caractérisé en ce que au moins l'une des multiplications d'entiers utilisée par l'algorithme de Karatsuba comme sous-routine est effectuée à l'aide d'une des méthodes décrites dans l'une ou plusieurs des revendications 1 à 16.
  19. 19. Composant de confiance sécurisé détachable ou fixe mettant en oeuvre l'une ou plusieurs des revendications 1 à 18.
FR1153870A 2011-05-05 2011-05-05 Dispositif et procede de multiplication rapide Pending FR2974916A1 (fr)

Priority Applications (3)

Application Number Priority Date Filing Date Title
FR1153870A FR2974916A1 (fr) 2011-05-05 2011-05-05 Dispositif et procede de multiplication rapide
FR1161674A FR2974917B1 (fr) 2011-05-05 2011-12-15 Dispositif et procede de multiplication rapide
PCT/FR2012/050818 WO2012150396A2 (fr) 2011-05-05 2012-04-13 Dispositif et procede de multiplication rapide

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1153870A FR2974916A1 (fr) 2011-05-05 2011-05-05 Dispositif et procede de multiplication rapide

Publications (1)

Publication Number Publication Date
FR2974916A1 true FR2974916A1 (fr) 2012-11-09

Family

ID=46062359

Family Applications (2)

Application Number Title Priority Date Filing Date
FR1153870A Pending FR2974916A1 (fr) 2011-05-05 2011-05-05 Dispositif et procede de multiplication rapide
FR1161674A Active FR2974917B1 (fr) 2011-05-05 2011-12-15 Dispositif et procede de multiplication rapide

Family Applications After (1)

Application Number Title Priority Date Filing Date
FR1161674A Active FR2974917B1 (fr) 2011-05-05 2011-12-15 Dispositif et procede de multiplication rapide

Country Status (2)

Country Link
FR (2) FR2974916A1 (fr)
WO (1) WO2012150396A2 (fr)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4200770A (en) 1977-09-06 1980-04-29 Stanford University Cryptographic apparatus and method
US4405829A (en) 1977-12-14 1983-09-20 Massachusetts Institute Of Technology Cryptographic communications system and method
US4748668A (en) 1986-07-09 1988-05-31 Yeda Research And Development Company Limited Method, apparatus and article for identification and signature
US5231668A (en) 1991-07-26 1993-07-27 The United States Of America, As Represented By The Secretary Of Commerce Digital signature algorithm
DE602006007828D1 (de) * 2005-03-31 2009-08-27 Nxp Bv Kanonisch gezeichneter digitaler multiplikator

Also Published As

Publication number Publication date
WO2012150396A2 (fr) 2012-11-08
WO2012150396A3 (fr) 2013-01-03
FR2974917B1 (fr) 2013-10-04
FR2974917A1 (fr) 2012-11-09

Similar Documents

Publication Publication Date Title
Bermudo Mera et al. Time-memory trade-off in Toom-Cook multiplication: an application to module-lattice based cryptography
Koziel et al. Fast hardware architectures for supersingular isogeny Diffie-Hellman key exchange on FPGA
Liu et al. Efficient Ring-LWE encryption on 8-bit AVR processors
Roy et al. Compact ring-LWE cryptoprocessor
EP1368747B1 (fr) Procede et dispositif pour reduire le temps de calcul d&#39;un produit, d&#39;une multiplication et d&#39;une exponentiation modulaire selon la methode de montgomery
EP2515228B1 (fr) Procédé de multiplication de Montgomery
FR2788867A1 (fr) Procede arithmetique, appareil arithmetique et appareil de traitement cryptographique
Sakiyama et al. Tripartite modular multiplication
EP2515227A1 (fr) Circuit de multiplication de Montgomery
KR20110105555A (ko) 효율적인 하드웨어 구성을 갖는 몽고메리 승산기
EP0692762B1 (fr) Circuit logique de multiplication parallèle
Morales‐Sandoval et al. Scalable GF (p) Montgomery multiplier based on a digit–digit computation approach
Lee et al. Tensorcrypto: High throughput acceleration of lattice-based cryptography using tensor core on gpu
Tian et al. Ultra-fast modular multiplication implementation for isogeny-based post-quantum cryptography
Langhammer et al. Efficient FPGA modular multiplication implementation
EP0437876B1 (fr) Multiplieur série programmable
Issad et al. Software/hardware co-design of modular exponentiation for efficient RSA cryptosystem
EP1869545A1 (fr) Dispositif implementant la multiplication modulaire de montgomery
FR3083885A1 (fr) Circuit de generation de facteurs de rotation pour processeur ntt
EP0785503B1 (fr) Procédé de production d&#39;un paramètre de correction d&#39;erreur associé à la mise en oeuvre d&#39;opérations modulaires selon la méthode de Montgomery
FR2974916A1 (fr) Dispositif et procede de multiplication rapide
Issad et al. Efficient and scalable hardware implementation of montgomery modular multiplication
Kirshanova et al. New NTRU Records with Improved Lattice Bases
CN109614072B (zh) 对素数取模、素域中模乘运算的实现方法和装置
CN113190211A (zh) 一种用于双线性对的四输入fios模乘算法及架构设计