WO2012150396A2 - Dispositif et procede de multiplication rapide - Google Patents
Dispositif et procede de multiplication rapide Download PDFInfo
- Publication number
- WO2012150396A2 WO2012150396A2 PCT/FR2012/050818 FR2012050818W WO2012150396A2 WO 2012150396 A2 WO2012150396 A2 WO 2012150396A2 FR 2012050818 W FR2012050818 W FR 2012050818W WO 2012150396 A2 WO2012150396 A2 WO 2012150396A2
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- words
- integer
- encoding
- integers
- word
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5324—Multiplying 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
Definitions
- the field of the invention is that of microprocessors and more particularly that of encryption units.
- the invention relates to the implementation of multi-precision integer multiplication operations and digital processing in a microprocessor or in a configurable logic block (FPGA) or in an arithmetic coprocessor, and this in a simple and effective way.
- FPGA configurable logic block
- the invention applies in particular in embedded systems and trusted components such as security modules and coprocessors for cryptographic use based on a distributed or configurable logic.
- the present invention is also applicable to the multiplication of large integers not having an identical number of bits. To this end, it is necessary to recall a first method to multiply such numbers.
- a first method uses a basic subroutine denoted MADA (acronym for "Multiply, Add, Divide and Accumulate”) and mimics the manual multiplication process.
- a a [0] + a [1] + a [2] 2 2t + ... + a [nl] 2 ⁇ n - 1 > t
- the multiplication of Karatsuba is carried out according to the following algorithm 2:
- the advantage of the Karatsuba method is that the result r of the multiplication of a by b is obtained by performing three (and not four) multiplications of numbers of L bits. Therefore, using such a method, it is already possible to reduce by 25% the number of multiplications.
- the Karatsuba method easily lends itself to a recursive generalization known to those skilled in the art to increase the speed gain beyond 25% on a standard processor.
- circuits improves performance in terms of computing time. For this, it is possible to use arithmetic coprocessors specialized in cryptographic calculations using large numbers. These circuits can be prediffused or programmable after manufacture.
- the gate arrays (in English "Gaste Array") perform functions established during their design, they are not modifiable thereafter.
- the programmable circuits consist of a large number of logic gates connected to a control and programming unit. These circuits perform certain functions, depending on their programming. Among the types of programmable circuits, the most common are:
- FPGA Field-Programmable Gate Array
- the general object of the invention is to overcome, in particular contexts, at least certain disadvantages of these known techniques and this especially when one has material multipliers of relatively modest size (for example 8 bits x 8 bits).
- the present invention provides a method of encoding an integer using an encoding function taking as input an integer of n t-bit word or a multiple of t bits, and outputting an ordered array U of j lines and i columns containing integers Ui, j.
- the words making up the number a are in the order from the lowest weight to the largest weight: a [0], a [l], a [2], ... a [n-1],
- the encoding function also returns a non-empty subset A of "p" words of the number a and a correspondence function f associating the index "k” of at least one word of a with the subscript "j At least one line of U,
- the integers Ui, j are the coefficients of a plurality of equalities making it possible to express the value of words a [k] of a as a function of the other words a [k] of a, the calculation of the value of the word a [ k] being carried out by the following equation:
- a [k] U0, jxa [0] + U1, jxa [l] + ... + U (n1), jxa [nl],
- the multiplications can be organized as a series of additions.
- This ordered sequence of numbers makes it possible to first multiply the multiplier with the smallest number, then to consider that the following multiplications are additions of one or more units. Each result is added to the previous one taking into account the rank of the number in the ordered sequence.
- n be the number of numbers making up the multiplicand, the calculation thus made uses between n and 2n multiplications. As a result, the execution of an addition is faster than that of a conventional multiplication, the calculation times are thus reduced.
- the invention provides a technique for efficiently performing multiplications of variable integers by a constant integer.
- the invention also provides a technique for efficiently performing multiplications of variable integers by other variable integers.
- the invention also makes it possible to provide an efficient technique for managing the random access memory, making it possible to reduce the backup necessary for the execution of the inventive multiplication methods.
- the invention also makes it possible to provide a multiplication technique that can easily be parallelized on a SIMD multiprocessor architecture or on a configurable logic architecture.
- the invention also makes it possible to provide a technique for generating cryptographic keys that can be easily multiplied by variable integers using inventive methods.
- the present invention also provides a circuit adapted to implement the method of encoding an integer described above.
- FIG. 1 is a block diagram of a circuit comprising logic gates able to execute a multiplication according to an exemplary embodiment.
- FIG. 2 shows a flow chart for the implementation of the invention according to an exemplary embodiment.
- a programmable logic circuit called FPGA or programmable logic array, as shown in Figure 1, is a logic integrated circuit that can be reprogrammed after its manufacture. It is composed of many elementary logical cells (element 3 in Figure 1) freely assembled.
- a logic block generally consists of a look-up table (LUT or Look-Up-Table) and a flip-flop (Flip-Flop).
- the LUT is used to implement logic equations that typically have 4 to 6 inputs and an output. It can however be considered as a small memory, a multiplexer or a shift register.
- the register is used to store a state (sequential machine) or to synchronize a signal (pipeline).
- Logic blocks present in large numbers on the chip (from a few thousand to a few million in 2007) are interconnected by a configurable routing matrix (element 1 in Figure 1). This allows the reconfiguration at will of the component, but occupies an important place on the silicon and justifies the high cost of the FPGA components.
- the topology is called "Manhattan”, in reference to the right-angled streets of this district of New York.
- the FPGA communicates with the external mode using input input cells (element 2 in Figure 1).
- the increase in efficiency is expressed by a reduced number of calls to the MADA subroutine and by a possible parallelization of the multiplication operation.
- the multiplication of a variable number by a fixed constant is very useful, especially in cryptography where it is often necessary to calculate the result of the operation g x where g is fixed and x variable.
- Such an operation is also very useful for graphic processing where a multiplication by fixed constants is often necessary in order to perform trigonometric calculations.
- many signal processing algorithms filtering, FFT, convolution
- the invention can also be adapted to cases in which it is necessary to multiply two variable numbers one by the other as will be explained in the following paragraphs.
- An exemplary embodiment of the invention will now be described.
- k represents the index of the word a [k], this word being a part of the number a.
- the algorithm generates, once and for all, an array U with at most h ⁇ n-2 rows, organized as follows: the cell Utj contains an integer value Ui, j between -c and + c where c is a small bound whole, typically 1, 2 or 3.
- the "target" column contains an integer 3 ⁇ 4 between 0 and n-1.
- Such a table U expresses the fact that the numbers of the number a can be obtained successively as follows: We begin the process with three words: a [l], a [4] and a [6].
- This first line j 0 of U making it possible to determine a value of word a [Si] with the help of words of a which do not express themselves from other words of a but which are expressed only by their value . From this line, it is possible to calculate another value a [Si '] from a word a [if] previously determined.
- the word a [2] is formed from the words a [l] a [4] and a [6].
- the three words a [l] a [4] and a [6] are represented only by their value and are not the result of a previous equation.
- the value of the word a [2] of a is calculated from other words of a.
- the following words down each line of the table allow to calculate another value a [Si '] from word a [if] previously calculated.
- Table M is derived from Table U as follows:
- the symbol “L” readable in the table means "Release after use”. This notation indicates that during the next loop, this memory box can be assigned to another calculation. In this way, when programming the FPGA, memories can be used several times for temporary results. In this way, it is possible to reduce the number of memory boxes useful to the algorithm. It is obvious that the symbol “L” is not mandatory or fundamental and any other way of marking information may be substituted for the symbol "L". For example: after steps 1 and 2, the table given as a non-limiting exemplary embodiment will become M 2 :
- the table M indicates that we can release the registers containing a [l] and a [6]. Indeed, the presence of the symbol L indicates that the values stored in these memories will no longer be used in any subsequent step, it is therefore possible to assign them to other values or other calculations performed in parallel for example. As a result, the number of memory used by the algorithm is decreased,
- the symbol L present in table M indicates that the register containing a [2] can be released
- the algorithm then liberates the registers containing bxa [l] and bxa [6] as indicated in table M.
- the total memory consumption of the multiplication algorithm is equal to maxj (vj).
- the possible deviations are 0, 1, 2, 3, 4 and 8.
- the process In the case where there are several multiplication cores, it is possible to adapt the process to operate a number "e" of multiplication cores in parallel. According to a preferred example, the multiplications run on 16 bits, but this number may change according to the performance of the multiplication cores.
- the multiplication cores can be independent or synchronized with each other. Two multiplication processes are said to be independent if neither process uses the a [i] produced by the other process. In other words, the different independent processes partition the set of a [i] into e classes mutually disjointed in time and in memory space and whose independent computations are encoded by U 1 , - ⁇ -, U e .
- Two processes are said to be synchronous if neither process uses an a [i] before it has been produced by the other process.
- the two processes partition the set of a [i] into independent e classes only in the memory space but not in time, whose computations are encoded by the U 1 , - ⁇ -, U e .
- the method which is the subject of the invention makes it possible to generate cryptographic keys.
- the algorithm can first generate the array U and then derive the number it represents (rather than perform the opposite approach). This method has at least two advantages:
- the number of registers q [] required for the algorithm 4 can be controlled and fixed in advance during the generation of the key.
- circuit capable of implementing the encoding method may be any integrated circuit with logic gates controllable by appropriate programming. Therefore, the present embodiments should be considered by way of illustration but may be modified in the field defined by the scope of the appended claims.
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
La présente invention concerne un procédé d'encodage d'un nombre entier utilisant une fonction d'encodage prenant en entrée un nombre entier de n mot de t bits ou d'un multiple de t bits, et renvoyant en sortie un tableau ordonné U de j lignes et i colonnes contenant des entiers Ui,,j. Les mots a[k] composant le nombre a sont comparés entre eux afin de les organiser en une suite de mots ayant une valeur croissante (k=0, k=1, k=2,...). Un tableau d'indices permet de conserver le rang k du mot a[k] dans la liste ordonnée. Un premier mot de a est calculé par une équation utilisant un groupe de mots qui ne s'expriment pas en fonction d'autres mots de a. Puis tous les autres mots de a sont calculés à l'aide d'équation utilisant des mots déjà calculés. De cette façon, il est possible d'exprimer un grand nombre comme une suite ordonnée de termes ayant de faibles écarts les uns avec les autres. Un tel encodage permet de limiter le nombre de multiplications élémentaires lors de la multiplication de ce nombre avec un autre. La présente invention concerne aussi le circuit mettant en œuvre l'encodage, ainsi qu'un circuit mettant en œuvre la multiplication de nombres ainsi encodés.
Description
Dispositif et procédé de multiplication rapide.
DOMAINE DE L'INVENTION
Le domaine de l'invention est celui des microprocesseurs et plus particulièrement celui des unités de cryptage.
Plus précisément, l'invention concerne la mise en œuvre 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 s'applique notamment dans les systèmes embarqués et les composants de confiance tels que les modules de sécurité et les coprocesseurs à usage cryptographique basés sur une logique répartie ou configurable.
PRESENTATION DE L'ART ANTERIEUR
Selon des techniques bien connues, le traitement cryptographique de données numériques nécessite souvent d'effectuer des multiplications de grands entiers, de tels entiers ont typiquement pour taille 1024 ou 2048 bits.
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 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-Shamir décrits dans le brevet européen EP 0252499 ou encore à la mise en œuvre de la cryptographie à courbes elliptiques, décrite dans la norme IEEE P1363, section A.12.1.
De nombreux algorithmes existent pour exécuter des multiplications d'entiers de grandes tailles. Soient a et b deux nombres entiers, a et b sont tous deux formés de n mots de t bits.
a = a[0]+a[l] + a[2] 22t + ...+ a[n-l] 2^
b = b[0]+b[l] 2' + b[2] 22t + ...+ b[n-l] 2^
Ainsi le produit r = axb sera un entier de 2n mots de t bits :
r = a x b = r[0]+r[l] 2' + r[2] 22t + ...+ r[2n-l] 2^
La présente invention est aussi applicable à la multiplication de grands nombres entiers n'ayant pas un nombre identique de bits. A cette fin, il y a lieu de rappeler une première méthode permettant de multiplier de tels nombres.
Une première 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 prend en entrée quatre mots x, y, c, r et retourne deux mots u, v tels que : u 2t +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 2'-l) leur somme est inférieure ou égale à :
(2t-l)(2t-l)+(2t-l)+(2t-l) = (22t-2t+1+l)+ 2t+1-2 = 22t-l.
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 selon l'algorithme 1 suivant : Soit deux entiers en entrée a et b, où:
a = a[0]+a[l] + a[2] 22t + ...+ a[n-l] 2<n-1>t
et
b = b[0]+b[l] 2' + b[2] 22t + ...+ b[n-l] 2<n-1>t
1 : mettre à zéro le registre résultat r[0] = r[l] = ... = r[2n-l] = 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[l] 21 + r[2] 22t + ...+ r[2n-l] 2(2η 1)'
Algorithme 1
Selon cette méthode, supposons un nombre de 64 octets multiplié à un nombre de 64 octets et, supposons que le processeur ne dispose que d'un multiplieur octet par octet, la multiplication de ces deux nombres nécessite d'utiliser séquentiellement 64 au carré : 4196 fois ce multiplieur. Ce grand nombre de multiplications élémentaires occupe le processeur pendant un temps non négligeable.
D'autres méthodes de multiplication applicables au grand nombre existent. On peut citer la méthode de multiplication de Karatsuba.
D'autres méthodes de multiplication applicables au grand nombre existent. On peut citer 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 œuvre 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 + abas et b = bhaut 2L + bbas. Typiquement L = tn/2. La multiplication de Karatsuba est effectuée selon l'algorithme 2 suivant :
Soit deux entiers en entrée a et b, où:
a = ahaut 2L + abas et b = bhaut 2L + bbas.
1 : U = ahaut X bhaut
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 consiste en ce que le résultat r de la multiplication de a par b s'obtient en effectuant trois (et non quatre) multiplications de nombres de L bits. De ce fait, en utilisant une telle méthode, il est déjà possible de réduire de 25 % le nombre de multiplications. La méthode de Karatsuba se prête facilement à une généralisation récursive connue à l'homme de l'art permettant d'accroître le gain de vitesse au-delà de 25% sur un processeur standard.
L'utilisation de circuits spécifiques permet d'améliorer les performances en termes de temps de calcul. Pour cela, il est possible d'utiliser des coprocesseurs arithmétiques spécialisés dans les calculs cryptographiques utilisant des grands nombres. Ces circuits peuvent être prédiffusés ou programmables après la fabrication. Les circuits prédiffusés (en Anglais « Gâte Array ») réalisent des fonctions établis lors de leur conception, ils ne sont pas modifiables ensuite. Les circuits programmables sont constitués d'un grand nombre de portes logiques reliées à une unité de contrôle et de programmation. Ces circuits effectuent certaines fonctions, selon leur programmation. Parmi les types de circuits programmables, on peut citer les plus courants :
FPGA (« Field-Programmable Gâte Array »),
PLD (« Programmable Logic Device »),
- EPLD (« Erasable Programmable Logic Device »),
CPLD (« Complex Programmable Logic Device »),
PAL (« Programmable Array Logic »)
Le nombre de portes disponibles dans ces circuits, et de ce fait, la puissance de calcul utilisable, est limité. La mise en œuvre d'une multiplication simple, ou d'une multiplication modulaire dans de tels composants nécessite une programmation performante.
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).
RESUME DE L'INVENTION
Ainsi, la présente invention propose un procédé d'encodage d'un nombre entier utilisant une fonction d'encodage prenant en entrée un nombre entier de n mot de t bits ou d'un multiple de t bits, et renvoyant en sortie un tableau ordonné U de j lignes et i colonnes contenant des entiers Ui,j. Les mots composant le nombre a sont dans l'ordre du poids le plus faible au poids le plus grand : a[0], a[l], a[2], ... a[n-l],
la fonction d'encodage renvoie également en sortie un sous ensemble A non vide de « p » mots du nombre a et une fonction de correspondance f associant l'indice « k » d'au moins un mot de a à l'indice « j » d'au moins une ligne de U,
les entiers Ui,j sont les coefficients d'une pluralité d'égalités permettant d'exprimer la valeur de mots a[k] de a en fonction des autres mots a[k] de a, le calcul de la valeur du mot a[k] s'effectuant par l'équation suivante :
a[k] = U0,j x a[0] + Ul,j x a[l] + ... + U(n-l),j x a[n-l], où f (k) = j la première ligne j=0 de U permettant de calculer une valeur de mot a[k] à l'aide de mots composant l'ensemble A de « p » mots qui ne s'expriment pas en fonction d'autres mots de a, chaque ligne suivante de U permettant de calculer une valeur de mot a[k] à l'aide de mots de l'ensemble A et de mots dont la valeur est calculée dans une ligne précédente, l'ensemble des (n-p) lignes de U permettant de calculer toutes les valeurs de mots a[k] qui ne sont pas dans l'ensemble A.
En listant de façon ordonnée les nombres composant le multiplicande, les multiplications peuvent être organisées comme une suite d'additions. Cette suite ordonnée de nombres permet de multiplier d'abord le multiplicateur avec le plus petit nombre, puis de considérer que les multiplications suivantes sont des additions de une ou de plusieurs unités. Chaque résultat est additionné au précédent en prenant en compte le rang du nombre dans la suite ordonnée. Soit n le nombre de nombres composant le multiplicande, le calcul ainsi réalisé utilise entre n et 2n multiplications. De ce fait, l'exécution d'une addition est
plus rapide que celle d'une multiplication classique, les temps de calcul sont ainsi diminués. L'invention permet de fournir une technique permettant d'effectuer efficacement des multiplications d'entiers variables par un entier constant.
L'invention permet également de fournir une technique permettant d'effectuer efficacement des multiplications d'entiers variables par d'autres entiers variables. L'invention permet également de fournir une 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. L'invention permet également de fournir une technique de multiplication pouvant être facilement parallélisée sur une architecture multiprocesseur SIMD ou sur une architecture à logique configurable. L'invention permet également de fournir une technique de génération de clés cryptographiques facilement multipliables par des entiers variables à l'aide des méthodes inventives.
La présente invention propose également un circuit apte à mettre en œuvre le procédé d'encodage d'un nombre entier décrit précédemment. BREVE PRESENTATION DES DESSINS
D'autres caractéristiques et avantages de l'invention apparaîtront à travers la description d'un exemple de réalisation non limitatif de l'invention, explicité à l'aide des figures jointes, parmi lesquelles :
- la figure 1 est un diagramme bloc d'un circuit comportant des portes logiques aptes à exécuter une multiplication selon un exemple de réalisation.
- la figure 2 présente un ordinogramme pour la mise en œuvre de l'invention selon un exemple de réalisation.
DESCRIPTION D'UN MODE DE REALISATION
Pour faciliter la description, l'invention sera décrite ci-après dans le cadre de l'implémentation du procédé d'encodage dans un FPGA. L'implémentation du procédé dans tout circuit électronique doté de portes est parfaitement envisageable.
Un circuit logique programmable dit FPGA, ou réseau logique programmable, tel que représenté par la figure 1, est un circuit intégré logique qui 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 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 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 prototyper un algorithme. Selon un aspect particulier de la présente invention, l'accroissement d'efficacité s'exprime par un nombre réduit d'appels à la sous-routine MADA et 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, convolution) nécessitent d'effectuer des multiplications de nombres variables par des constantes fixes utilisant le procédé d'encodage selon la présente invention.
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 expliqué dans les paragraphes qui suivent. Un exemple de réalisation de l'invention va maintenant être décrit.
Une représentation d'un entier a est maintenant décrite. On rappelle que l'invention permet de calculer la valeur r=axb.
II est rappelé que le nombre a est divisé en n mots de taille t bits, a = a[0]+a[l] + a[2] 22t + ...+ a[n-l] 2^
Dans l'expression a[k], k représente l'indice du mot a[k], ce mot étant une partie du nombre a.
Nous allons maintenant décrire un algorithme permettant d'encoder a pour calculer la valeur r=axb en minimisant le nombre de multiplication élémentaires.
L'algorithme génère, une fois pour toutes, un tableau U comportant au plus h < n-2 lignes, organisé comme suit : la cellule Utj contient une valeur entière Ui,j comprise entre -c et +c où c est une petite borne entière, typiquement 1, 2 ou 3. La colonne « cible » contient un entier ¾ compris entre 0 et n-1. étape j a[0] a[l] a[n-2] a[n-l] cible j=0 Uo,o Ul,0 Un-2,0 Un-1,0 So
H Uo,i Uu Un-2,1 Un-1,1 Si j=h-l Uo,h-l Ul,h-1 Un-2,h-l Un-l,h-l Sh-l
j=h Uo,h Ul,h Un-2,h Un-l,h Sh
Le tableau Utj 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 linéaires successives à petits coefficients, selon la formule suivante :
a[¾] = a[0] Uo,j +...+ a[n-l] Un-i,j
Voici un exemple de tableau :
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[l], a[4] et a[6]. Cette première ligne j=0 de U permettant de déterminer une valeur de mot a[Si] à l'aide de mots de a qui ne s'expriment pas à partir d'autres mots de a mais qui s'expriment uniquement par leur valeur. A partir de cette ligne, il est possible de calculer une autre valeur a[Si'] à partir de mot a[si] précédemment déterminé.
Former a[2]=a[l]-a[4]+a[6] (étape j=0) puis a[5]=a[4] (étape j=l) puis a[0]=a[5]-a[2] (étape j=2) et enfin a[3]=a[0]-a[5] (étape j=3).
Ainsi, on peut constater que le mot a[2] est formé à partir des mots a[l] a[4] et a[6]. Les trois mots a[l] a[4] et a[6] sont représentés uniquement par leur valeur et ne sont pas le résultat d'une précédente équation. La valeur du mot a[2] de a est calculé à partir d'autres mots de a. Les mots suivants en descendant chaque ligne du tableau permettent de calculer une autre valeur a[Si'] à partir de mot a[si] précédemment calculé.
Il importe maintenant de décrite la façon de remplir le tableau. 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 Algorithme « CIS 680 : Data Structures : Chapter 19 : Backtracking Algorithme ». La technique du retour sur trace, connue de l'homme de l'art, consiste à revenir légèrement en arrière sur des décisions prises afin de sortir d'un blocage.
L'allocation et la libération de la mémoire en cours de l'algorithme est maintenant décrite. 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 Utj
1 : mettre à la valeur 1 toutes les cellules telles que Ui,j≠0.
2 : supprimer la colonne « cible »
3 : pour i = 1 à n-1 {
3.1. : soit Ti le plus grand indice j tel que Ui,j=l
3.2. : mettre le symbole L dans toutes les cellules Um }
4 : mettre à la valeur 0 toutes les cellules telles que Ui,j=l
5 : enlever la ligne j = h.
6 : retourner le tableau Mi,j résultant de l'exécution des étapes 1 à 5
Algorithme 3
Nous noterons par Mk le tableau généré après l'étape k (k=l,2,3,4,5) du processus que nous venons de décrire.
Le symbole « L » lisible dans le tableau signifie « Libérer après usage ». Cette notation indique que lors de la prochaine boucle, cette case mémoire peut être affectée à un autre calcul. De cette façon, lors de la programmation du FPGA, des mémoires peuvent servir plusieurs fois pour des résultats temporaires. De cette façon, il est possible de diminuer le nombre de cases mémoires utiles à l'algorithme.
Il est évident que le 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 ». Par exemple : après les étapes 1 et 2 le tableau donné à titre d'exemple de réalisation non limitatif deviendra M2 :
après l'étape 4 le tableau donné à titre d'exemple de réalisation non limitatif deviendra M4 : étape j a[0] a[l] a[2] a[3] a[4] a[5] a[6] j=0 0 L 0 0 0 0 L
H 0 0 0 0 L 0 0
i=2 0 0 L 0 0 0 0
i=3 L 0 0 0 0 L 0
après l'étape 5 le tableau donné à titre d'exemple de réalisation non limitatif deviendra M5=M :
La reconstruction des mots de a, particulièrement économique en mémoire, selon l'exemple de réalisation illustré par le tableau M ci-dessus, s'exécute ainsi :
Reprenons l'exemple précédent et appliquons la partie de l'algorithme dédié à l'allocation des mémoires du tableau M. L'algorithme débute le processus avec trois mots : a[l], a[4] et a[6] comme indiqué par le tableau U, générer a[2]=a[l]-a[4]+a[6],
à cette étape le tableau M indique que l'on peut libérer les registres contenant a[l] et a[6]. En effet, la présence du symbole L indique que les valeurs mémorisées dans ces mémoires ne seront plus utilisées dans aucune étape ultérieure, il est donc possible de les affecter à d'autres valeurs ou d'autres calculs effectués en parallèle par exemple. De ce fait, le nombre de mémoire utilisées par l'algorithme est diminué,
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 symbole L présent dans le tableau M indique que l'on peut libérer le registre contenant a[2],
générer a[3]=a[0]-a[5],
à cette étape on peut libérer tous les registres restant alloués, en effaçant les symboles L du tableau.
Nous allons maintenant détailler l'algorithme dans le cas d'une multiplication par une constante fixe. Afin d'effectuer l'opération axb où a est fixe et b variable, l'algorithme procède de manière très analogue au procédé de reconstruction des mots de a que nous venons de décrire. L'algorithme calcule par une multiplication « entier x mot » les quantités bxa[l], bxa[4] et bxa[6], et on initialise le registre de résultat à la valeur r = b x a[l] x 2t + b x a[4] x 24t + b x a[6] x 26t. Il est maintenant possible de calculer par une addition et une soustraction la quantité b x a[2] = b x a[l] - 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. De ce fait, un certain nombre de multiplications sont remplacés par des additions et des soustractions successives, réduisant ainsi le temps de calcul de la multiplication.
L'algorithme libère alors les registres contenant b x a[l] 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 l'opération suivante à effectuer est b x a[5] = b x a[4].
Ainsi, l'algorithme 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.
Ensuite, l'algorithme 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'algorithme doit calculer b x a[3] = b x a[0] - b x a[5].
L'algorithme calcule donc le résultat final r = r + b x a[3] x 23t et libère tous les registres restant alloués, en supprimant tous les symboles « L » restant dans le tableau.
Un exemple d'algorithme est présenté ci-dessous et illustré par la figure 2: Entrée :
une liste de mots a[i] pour les indices i tels que Ui,o≠ 0
un entier b
un tableau Utj
un tableau Mi,j
1 : initialiser r = 0
2 : pour i = 0 à n-1 {
2.1. : si Ui,o≠ 0 alors allouer la variable q[i] = b x a[i] }
3 : pour j = 1 à h {
3.1. : allouer la variable q[¾] = q[0] Uo,j +...+ q[n-l] Un-i,j
3.2. : mettre à jour r = r + q[¾] 2tsi
3.3. : libérer les variables q[k] pour les k est tel que Mk,j ==L }
4 : libérer toutes les variables q[ ] restantes allouées.
5 : retourner le résultat r.
Algorithme 4 A noter que, dans le calcul de la somme q[¾] = q[0] Uo,j +...+ q[n-l] Un-i,j le résultat de la multiplication d'une variable q[ ] non allouée par un Utj est défini comme étant zéro.
A noter que, le nombre de registres nécessaires à l'exécution de l'algorithme à l'étape j est égale à Vj=n-Zj+1 où Zj 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 à maxj (vj).
Nous allons maintenant détailler l'algorithme dans le cas d'une multiplication avec 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 de « retour sur trace ». La méthode objet de la présente invention peut s'adapter au cas où a et b sont tous deux des nombres entiers variables.
Pour ce faire l'algorithme trie les mots a[i] par ordre croissant afin d'obtenir une suite d[0],...,d[n-l]. Ensuite, l'algorithme calcule les différences Δ[ϊ] = d[i+l]-d[i] dont l'espérance est de l'ordre de 2'/n. Ainsi, en calculant les quantités b x j pour j = 2,...,B pour une borne B de l'ordre de 2'/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 un sous-ensemble des valeurs de j dont la somme égale Δ[ϊ]
- soit en effectuant directement la multiplication b x Δ[ϊ] 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é en base 100 et non en une base 2
Par exemple, supposons que l'on souhaite multiplier le nombre a :
03141592653589793238462643383279502884197169399375105820974944
5923078164062862089986280348253421170680
par un certain nombre entier b également.
L'algorithme 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[ll ]=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.
La liste précédente est ensuite triée 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
Δ[ 00 ]=0 Δ[ 01 ]=3 Δ[ 02 ]=0 Δ[ 031=1 Δ[ 04 ]=ι
Δ[ 05 ]= 2 Δ[ 06 ]=4 Δ[ 07 ]=ι Δ[ 08 ]= 2 Δ[ 09 ]= 2
Δ[ 10 1= 1 Δ[ 11 1= 1 Δ[ 12 ]= 2 Δ[ 13 ]= 2 Δ[ 14 ]=ι
Δ[ 15 ]= 2 Δ[ 16 ]=0 Δ[ 17 ]=0 Δ[ 18 ]=4 Δ[ 19 ]=0
Δ[ 20 ]= 2 Δ[ 21 1= 1 Δ[ 22 ]=3 Δ[ 23 ]=0 Δ[ 24 ]=ι
Δ[ 25 ]= 4 Δ[ 26 1= 1 Δ[ 27 ]= 2 Δ[ 28 ]= 2 Δ[ 29 ]=ι
Δ[ 30 1= 1 Δ[ 31 ]=8 Δ[ 32 ]=ι Δ[ 33 ]=3 Δ[ 34 ]= 2
Δ[ 35 1= 1 Δ[ 36 ]=4 Δ[ 37 ]= 2 Δ[ 38 ]=4 Δ[ 39 ]= 4
Δ[ 40 ]=0 Δ[ 41 1=1 Δ[ 42 ]=ι Δ[ 43 ]=3 Δ[44 ]= 2
Δ[ 45 ]=3 Δ[ 46 ]=3 Δ[ 47 ]=ι Δ[ 48 ]=4 Δ[ 49 1= 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 Δ[ 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 un sous-ensemble des valeurs de j dont la somme égale Δ[ϊ]. Dans le cas présent
4 x b + 4 x b.
- soit en effectuant directement la multiplication b x Δ[ϊ] permettant de passer de b x d[i] à b x d[i+l] par une simple addition. Dans le cas présent il s'agit d'effectuer la multiplication b x 8.
Un perfectionnement consistant à exécuter en parallèle des multiplications élémentaires est maintenant détaillé.
Dans le cas où l'on dispose de plusieurs cœurs de multiplication, il est possible d'adapter le procédé afin de faire fonctionner un nombre « e » de cœurs de multiplication en parallèle. Selon un exemple préféré, les multiplications s'exécutent sur 16 bits, mais ce nombre peut évoluer selon les performances des cœurs de multiplication.
Pour l'exécution en parallèle, 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 sorte que les e processus lancés sur e cœurs 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,...,^ retournés par les e processus.
Les cœurs de multiplication peuvent être indépendants ou synchronisés entre eux. Deux processus de multiplication sont dits indépendants si aucun des deux processus n'utilise les a[i] produits par l'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 et dont le calculs indépendants sont codés par les U1,- · -,Ue.
Deux processus sont dits synchrones si aucun des deux processus n'utilise 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.
Quoique technique, la manière d'obtenir à partir d'un nombre entier a, un ensemble de e tableaux U1,- - .,^ indépendants ou synchrones est bien connue de l'homme de l'art. Il n'est donc pas utile de la détailler d'avantage.
Selon un perfectionnement, 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 ce perfectionnement, considérons un exemple de 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 χ b peut s'obtenir par l'addition de 81 χ b + 85 χ b. Et ce même si le nombre 166 s'étale sur deux mots consécutifs. De cette manière, il est possible de minimiser le nombre de multiplication en utilisant des résultats précédemment calculés.
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]
Comme 166 = 81 + 85 il est clair que la quantité 41 66 χ b peut s'obtenir par l'addition de 81 χ b + 85 χ b + 100 χ (40 χ b). Ce perfectionnement s'adapte également aux nombres négatifs comme illustré 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]
Puisque 41 66 = 4200 - 34 la quantité 41 66 χ b peut s'obtenir par l'opération 100 χ (42 χ b) - 34 χ b.
Selon un perfectionnement, le procédé objet de l'invention permet de générer des clefs cryptographiques. 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 & dont les clés publiques Vi associées sont définies par vi = 1/sr2 mod n. Ainsi, il est possible de choisir les clés si de sorte à ce qu'une multiplication d'un & par un sj soit rapide.
Pour ce faire, l'algorithme 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). Cette méthode présente au moins deux avantages :
- 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é.
Deux éléments doivent être évalués avant toute mise en œuvre 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.
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.
Ce second point se comprendra facilement en considérant l'exemple du protocole de Fiat-Shamir :
Si le générateur de la clé génère d'abord & et calcule ensuite vi = 1/sr2 mod n, le nombre vi n'aura aucune forme particulière.
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 si calculé par si = 1/Vvi 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.
Des personnes versées dans l'art pourront adapter la présente invention sous de nombreuses autres formes spécifiques sans l'éloigner du domaine d'application de l'invention comme revendiqué. En particulier, le circuit apte à mettre en œuvre le procédé d'encodage peut être tout circuit intégré doté de portes logiques contrôlables par une programmation appropriée. Par conséquent, les présents modes de réalisation doivent être considérés à titre d'illustration mais peuvent être modifiés dans le domaine défini par la portée des revendications jointes.
Claims
1. Procédé d'encodage d'un nombre entier utilisant une fonction d'encodage prenant en entrée un nombre entier de n mot de t bits ou d'un multiple de t bits, et renvoyant en sortie un tableau ordonné U de j lignes et i colonnes contenant des entiers Ui,j, les mots composant le nombre a étant dans l'ordre du poids le plus faible au poids le plus grand : a[0], a[l], a[2], ... a[n-l], caractérisé en ce que,
la fonction d'encodage renvoie également en sortie un sous ensemble A non vide de « p » mots du nombre a et une fonction de correspondance f associant l'indice « k » d'au moins un mot de a à l'indice « j » d'au moins une ligne de U,
les entiers Ui,j étant les coefficients d'une pluralité d'égalités permettant d'exprimer la valeur de mots a[k] de a en fonction des autres mots a[k] de a, le calcul de la valeur du mot a[k] s'effectuant par l'équation suivante :
a[k] = U0,j x a[0] + Ul,j x a[l] + ... + U(n-l),j x a[n-l], où f (k) = j la première ligne j=0 de U permettant de calculer une valeur de mot a[k] à l'aide de mots composant l'ensemble A de « p » mots qui ne s'expriment pas en fonction d'autres mots de a, chaque ligne suivante de U permettant de calculer une valeur de mot a[k] à l'aide de mots de l'ensemble A et de mots dont la valeur est calculée dans une ligne précédente, l'ensemble des (n-p) lignes de U permettant de calculer toutes les valeurs de mots a[k] qui ne sont pas dans l'ensemble A.
2. Procédé d'encodage d'un nombre entier selon la revendication 1 caractérisé en ce que les entiers Ui,j sont tels que -c < Ui, j< c et, c est une constante entière.
3. Procédé d'encodage d'un nombre entier selon la revendication 2, caractérisé en ce que l'entier c a pour valeur 1 ou 2 ou 3.
4. Procédé d'encodage d'un nombre entier selon l'une quelconque des revendications précédentes, caractérisé en ce qua mise à jour du tableau Ui,j s'effectue ligne par ligne en utilisant la technique de retour de trace.
5. Procédé d'encodage d'un nombre entier selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte des étapes de libération des mémoires contenant les entiers Ui,j, un tableau Mi,j définissant par un symbole (L) l'état de libération des mémoires du tableau Ui,j, consistant à effectuer les étapes suivantes,
A. mettre à la valeur 1 toutes les cellules du tableau U telles que Ui,j≠0.
B. pour i = 1 à n-1 {
B.l. soit Ti le plus grand indice j tel que Ui,j=l
B.2. mettre le symbole L dans toutes les cellules UÎ,TÎ }
C. mettre à la valeur 0 toutes les cellules telles que Ui,j=l
D. supprimer la dernière ligne j=h.
E. retourner le tableau Mi,j résultant de l'exécution des étapes A à D.
6. Procédé de multiplication d'un entier a par un entier b, avec un résultat r, caractérisé en ce que l'entier a est encodé selon l'une quelconque des revendications précédentes.
7. Procédé de multiplication d'un entier a par un entier b, selon la revendication 6, caractérisé en ce qu'il comporte des étapes de libération des mémoires contenant les entiers Ui,j, un tableau Mi,j définissant par un symbole l'état de libération des mémoires du tableau Ui,j, consistant à effectuer les étapes suivantes :
A. initialiser r = 0
B. pour i = 0 à n-1 {
B. l. si Ui,o≠ 0 alors allouer la variable q[i] = b x a[i] }
C. pour j = 1 à h {
Cl. allouer la variable q[¾] = q[0] Uo,j +...+ q[n-l] Un-i,j
C.2. mettre à jour r = r + q[¾] 2t si
C.3. libérer les variables q[k] pour les k est tel que Mk,j ==L } D. libérer toutes les variables q[ ] restantes allouées.
E. retourner le résultat r.
8. Circuit électronique apte à encoder un nombre entier selon l'une quelconque des revendications 1 à 5, ou à multiplier un entier a par un entier b selon l'une des revendications 6 et 7.
9. Circuit électronique selon la revendication 8 caractérisé en ce qu'il comporte une architecture à e multiplieurs disposés de façon parallèle, lesdits e multiplieurs exécutant chacun un calcul indépendant de e instances de la méthode d'encodage,
ledit calcul indépendant étant obtenu en adaptant le procédé de retour sur trace de la revendication 5 afin de déterminer e tableaux U j - . Ui,]6 minimisant la dépendance entre les a[i] de sorte que les e processus lancés sur e multiplieurs sont mutuellement indépendants.
10. Circuit électronique selon la revendication 8 caractérisé en ce qu'il comporte une architecture à e multiplieurs disposés de façon parallèle, lesdits e multiplieurs exécutant chacun un calcul indépendant ou par un calcul synchronisé de e instances du procédé décrit dans la revendication 8.
ledit calcul synchronisé étant obtenu en adaptant le procédé de retour sur trace de la revendication 5 afin de déterminer e tableaux U j - . Ui,]6 minimisant la dépendance entre les a[i] de sorte que les e processus lancés sur e multiplieurs sont mutuellement indépendants.
11. Circuit électronique selon la revendication 9 ou 10 caractérisé en ce qu'aucun des e processus exécutés sur les multiplieurs en parallèle n'utilise les entiers a[i] générés par un autre processus, les différents processus indépendants exécutés en parallèle partitionnant l'ensemble des entiers 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 \ \,)l,...,\ \,)e.
12. Circuit électronique selon l'une quelconque des revendications 8 à 11, caractérisé en que qu'il possède un moyen de génération de clés cryptographiques issues de la multiplication de deux entiers dont l'un au moins est encodé selon la revendication 1.
13. Circuit électronique selon la revendication 12, caractérisé en que ledit moyen de génération de clés cryptographiques utilisant l'un des algorithmes pris dans l'ensemble suivant : Fiat-Shamir, ou Diffie-Hellman, ou RSA ou DSA ou tout algorithme opérant sur une courbe elliptique.
14. Composant de confiance sécurisé détachable ou fixe caractérisé en ce qu'il comporte un circuit électronique selon l'une quelconque des revendications 8 à 13.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1153870A FR2974916A1 (fr) | 2011-05-05 | 2011-05-05 | Dispositif et procede de multiplication rapide |
FR1153870 | 2011-05-05 | ||
FR1161674 | 2011-12-15 | ||
FR1161674A FR2974917B1 (fr) | 2011-05-05 | 2011-12-15 | Dispositif et procede de multiplication rapide |
Publications (2)
Publication Number | Publication Date |
---|---|
WO2012150396A2 true WO2012150396A2 (fr) | 2012-11-08 |
WO2012150396A3 WO2012150396A3 (fr) | 2013-01-03 |
Family
ID=46062359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/FR2012/050818 WO2012150396A2 (fr) | 2011-05-05 | 2012-04-13 | Dispositif et procede de multiplication rapide |
Country Status (2)
Country | Link |
---|---|
FR (2) | FR2974916A1 (fr) |
WO (1) | WO2012150396A2 (fr) |
Citations (4)
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 |
EP0252499A2 (fr) | 1986-07-09 | 1988-01-13 | Yeda Research And Development Company Limited | Méthode, appareil et article pour identification et signature |
US5231668A (en) | 1991-07-26 | 1993-07-27 | The United States Of America, As Represented By The Secretary Of Commerce | Digital signature algorithm |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8046401B2 (en) * | 2005-03-31 | 2011-10-25 | Nxp B.V. | Canonical signed digit multiplier |
-
2011
- 2011-05-05 FR FR1153870A patent/FR2974916A1/fr active Pending
- 2011-12-15 FR FR1161674A patent/FR2974917B1/fr active Active
-
2012
- 2012-04-13 WO PCT/FR2012/050818 patent/WO2012150396A2/fr active Application Filing
Patent Citations (4)
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 |
EP0252499A2 (fr) | 1986-07-09 | 1988-01-13 | Yeda Research And Development Company Limited | Méthode, appareil et article pour identification et signature |
US5231668A (en) | 1991-07-26 | 1993-07-27 | The United States Of America, As Represented By The Secretary Of Commerce | Digital signature algorithm |
Non-Patent Citations (2)
Title |
---|
A. KARATSUBA; YU. OFMAN: "Multiplication of Many-Digital Numbers by Automatic Computers", PROCEEDINGS OF THE USSR ACADEMY OF SCIENCES, vol. 145, 1962, pages 293 - 294 |
GURARI EITAN: "CIS 680: Data Structures : Chapter 19: Backtracking Algorithms", 1999, article "Backtracking Algorithms" |
Also Published As
Publication number | Publication date |
---|---|
FR2974917A1 (fr) | 2012-11-09 |
FR2974916A1 (fr) | 2012-11-09 |
WO2012150396A3 (fr) | 2013-01-03 |
FR2974917B1 (fr) | 2013-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2515228B1 (fr) | Procédé de multiplication de Montgomery | |
EP2515227B1 (fr) | Circuit de multiplication de Montgomery | |
EP0712072A1 (fr) | Procédé de mise en oeuvre de réduction modulaire selon la méthode de Montgomery | |
EP1368747B1 (fr) | Procede et dispositif pour reduire le temps de calcul d'un produit, d'une multiplication et d'une exponentiation modulaire selon la methode de montgomery | |
EP2005290B1 (fr) | Procede et dispositif pour engendrer une suite pseudo-aleatoire | |
WO2017001212A1 (fr) | Microprocesseur parallèle stochastique | |
Lee et al. | TensorCrypto: High throughput acceleration of lattice-based cryptography using tensor core on GPU | |
FR2853424A1 (fr) | Architecture de multiplicateurs polynomial et naturel combines | |
EP0692762A1 (fr) | Circuit logique de multiplication parallèle | |
EP0437876B1 (fr) | Multiplieur série programmable | |
EP0259231B1 (fr) | Dispositif de détermination de la transformée numérique d'un signal | |
Langhammer et al. | Efficient FPGA modular multiplication implementation | |
WO2020012104A1 (fr) | Circuit de génération de facteurs de rotation pour processeur ntt | |
EP1869545B1 (fr) | Dispositif implementant la multiplication modulaire de montgomery | |
FR3083890A1 (fr) | Processeur ntt par flot | |
EP0785503B1 (fr) | Procédé de production d'un paramètre de correction d'erreur associé à la mise en oeuvre d'opérations modulaires selon la méthode de Montgomery | |
WO2012150396A2 (fr) | Dispositif et procede de multiplication rapide | |
EP0476592A2 (fr) | Générateur d'adresses pour la mémoire de données d'un processeur | |
EP1972061A2 (fr) | Dispositif et procede d'encodage de type cabac | |
CN109614072B (zh) | 对素数取模、素域中模乘运算的实现方法和装置 | |
FR2818765A1 (fr) | Multiplicateur modulaire et processeur de cryptage/decryptage utilisant le multiplicateur modulaire | |
Singh et al. | High performance VLSI architecture for wave digital filtering | |
Lee et al. | TensorCrypto | |
CA2359198C (fr) | Unite de calcul pour l'execution d'un protocole cryptographique | |
Pang et al. | F p 2 arithmetic acceleration based on modified Barrett modular multiplication algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 12724663 Country of ref document: EP Kind code of ref document: A2 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 12724663 Country of ref document: EP Kind code of ref document: A2 |