Brevet FR2775368A1 — publié le 19990827

Coprocesseur d'arithmétique modulaire permettant de réaliser des opérations non modulaires rapidement. L'invention concerne un coprocesseur d'arithmétique modulaire amélioré de manière à effectuer rapidement des opérations non modulaires. Plus précisément, l'invention concerne l'amélioration d'un coprocesseur d'arithmétique permettant de réaliser des opérations modulaires selon la méthode de Montgomery, afin d'étendre les possibilités d'un tel dispositif. La méthode de Montgomery permet d'effectuer des calculs modulaires dans un corps fini GF(2n) (corps de Galois) sans effectuer de divisions. Classiquement, les opérations modulaires sur GF(2n) sont utilisées en cryptographie pour des applications telles que l'authentification de messages, l'identification d'un utilisateur et l'échange de clés. De tels exemples d'applications sont décrites par exemple dans un document Dl qui correspond à la demande de brevet FR-A-2 679 054. On trouve dans le commerce des circuits intégrés dédiés à de telles applications, par exemple le produit fabriqué par la société SGS-THOMSON Microelectronics et portant la référence ST16CF54, bâti autour d'une association de type unité centrale - coprocesseur arithmétique, et dédié à la mise en oeuvre de calculs modulaires. Le coprocesseur utilisé permet de traiter des opérations modulaires en utilisant la méthode de Montgomery. Il fait l'objet de la demande de brevet EP-A- 0 601 907 que l'on appellera par la suite le document D2. Ce coprocesseur est illustré sur la figure 1 (cette figure correspondant à la figure 2 du document D2). L'opération de base (appelée Pfield) mise en oeuvre par ce coprocesseur consiste, à partir de trois données binaires A (multiplicande), B (multiplieur), et N (modulo), codées sur un nombre entier n de bits, à produire une donnée binaire Pfield(A, B)N codée sur n bits, telle que Pfield(A, B)N = A * B * I mod N. I est une donnée binaire, appelée erreur, codée sur n bits tels que I = 2-n mod N (plus précisément, la valeur de I dépend du nombre de blocs de k bits considérés pour le codage de A, étant k un entier). Pour réaliser l'opération A * B * I mod N, on considère que les données sont codées sur m mots de k bits (m et k étant des nombres entiers), avec m * k = n. On fournit les mots des données A et B à un circuit de multiplication 19 ayant une entrée série pour recevoir B, une entrée parallèle pour recevoir les blocs de k bits de A, et une sortie série. Dans le document D2, le coprocesseur travaille avec k = 32 et m = 8 ou 16. Le coprocesseur de D2 peut être utilisé pour produire le résultat de la multiplication modulaire A * B mod N. La multiplication modulaire se décompose en deux opérations élémentaires Pfield successives. On calcule Pfield(Pfield(A, B)N, H)N, avec H une donnée codée sur n bits, appelée paramètre de correction d'erreur, et égale à 22n mod N. Pour de plus amples détails sur la mise en oeuvre de la multiplication modulaire, on pourra se reporter au document D2. Plusieurs possibilités de calcul sont déjà connues; elles consistent à utiliser soit une méthode logicielle, soit un circuit spécialisé tel que celui illustré dans le document D2. Le circuit illustré sur la figure 1 comprend: - trois registres à décalage 10, 11 et 12 à entrée et sortie série, ces registres comportant un nombre n de cellules, avec n = m * k, - des multiplexeurs 13, 14 et 15 placés respectivement devant les entrées des registres 10, 11 et 12, - trois registres 16, 17 et 18 à entrée série et sortie parallèle, et comportant k cellules, - deux circuits 19 et 20 de multiplication comprenant une entrée série, une entrée parallèle et une sortie série, - deux registres 21 et 22 de k cellules, - des multiplexeurs 24, 25, 26, 36, 37 et 38, - un démultiplexeur 39, - des circuits 27, 28 et 29 de soustraction série, des circuits 30 et 31 d'addition série, - des cellules à retard 32, 33 et 34 pour retarder de k temps de cycle la propagation de données binaires, - un circuit 35 de comparaison. Pour plus de détails sur les arrangements des différents éléments du circuit entre eux, on pourra se reporter au document D2. L'utilisation du circuit illustré sur la figure 1 permet d'optimiser (en terme de durée de calcul, de taille mémoire, etc.) le traitement d'opérations modulaires utilisant une taille de donnée fixée, en l'occurrence 256 ou 512 bits. Or, la cryptographie nécessite des machines de plus en plus performantes, travaillant de plus en plus vite et utilisant des clefs de plus en plus complexes. On s'oriente ainsi vers la manipulation de données codées sur 768, 1024, 1536 et même 2048 bits. Pour traiter de telles données, on peut envisager de réaliser des circuits de dimensions plus importantes en adaptant les éléments du circuit aux tailles des données. Cette solution peut poser des problèmes dans des applications telles que les cartes à puce pour lesquelles la taille des circuits est physiquement limitée à cause des différences de contrainte mécanique de flexion entre les cartes et les substrats de silicium. De plus, il est demandé d'intégrer de plus en plus d'éléments fonctionnels différents sur une telle carte et la place disponible pour un circuit de cryptage en est d'autant plus réduite. Il faut donc trouver des solutions permettant de limiter l'augmentation de la taille de ce circuit, tout en permettant de fonctionner de manière optimum pour des données de taille supérieure à la taille des registres prévues initialement. Pour réaliser des opérations modulaires utilisant des opérandes d'une taille supérieure à ce que gère le coprocesseur (c'est-à-dire en pratique de la taille maximale des registres), on peut utiliser le circuit 1 représenté sur la figure 2 qui comporte un processeur classique 2 (8, 16, ou 32 bits), une mémoire 3, le coprocesseur 4 de la figure 1, et un bus de communication servant à relier les différents éléments 2, 3 et 4 ensemble et/ou à l'extérieur du circuit 1. Dans le circuit de la figure 2, le coprocesseur 4 est utilisé comme multiplieur travaillant sur m * k bits (classiquement 256 ou 512 bits). Le processeur 2 sert à superviser notamment les opérations à réaliser suivant un algorithme de cryptage particulier et les échanges de données entre la mémoire 3 et le coprocesseur 4. Or la réalisation de l'opération de base des calculs modulaires selon la méthode de Montgomery, dite Pfield, consiste, à partir de trois données binaires A (multiplicande), B (multiplieur) et N (modulo), codées sur un nombre entier n de bits, à produire une donnée binaire notée P(A, B)N codée sur n bits, telle que P(A, B)N = A * B * I mod N, I étant une erreur due à la méthode de Montgomery. Dans le cas o n est de taille supérieure à la taille des registres, c'est à dire m * k, il convient de décomposer n en p mots de Bt bits, Bt étant une base de travail de taille inférieure ou égale à m * k, par exemple m * k. La méthode de Montgomery se déroule ainsi, i étant un indice variant de 0 à m - 1, on répète la boucle de calcul suivante: X = Si + Ai * B, Y0 = (X * J0) mod 2Bt, Z = X + (N * Y0), Si+1 = Z \ 2Bt, \ étant une division entière, si Si+1 est supérieur à N alors on soustrait N à Si+l, Ai correspondant à un mot de Bt bits de la décomposition de A, et Si correspondant à un résultat actualisé de l'opération Pfield et Sm = P(A, B)N = A * B * I mod N. Un tel procédé de calcul nécessite un grand nombre d'échanges de données entre le coprocesseur 4 et la mémoire 3. En effet, le coprocesseur 4 de la figure 1 ne peut réaliser que des multiplications simple A * B = S, A et B étant codés sur Bt bits et S étant codé sur 2 * Bt bits. Une solution proposée dans le document EP-A-0 793 , appelé par la suite D3, consiste à effectuer dans le coprocesseur 4 une opération du type S = A * B + C, dans laquelle A, B et C sont codées sur Bt bits, S étant codé sur 2 * Bt bits. La figure 3 représente un coprocesseur 4 selon D3. Le coprocesseur 4 illustré sur la figure 3 comprend: - trois registres à décalage 110, 111 et 112 à entrée série et sortie série, ces registres comportant un nombre n (n entier) de cellules, avec n = m * k (m et k entiers); - un multiplexeur 113 comprenant trois entrées série et une sortie série, la sortie série étant reliée à l'entrée du registre 110, la première entrée étant reliée à une première borne d'entrée 150, la deuxième entrée étant reliée à la sortie du registre 110; - un multiplexeur 114 comprenant deux entrées série et une sortie série, la sortie série étant reliée à l'entrée du registre 111, la première entrée étant reliée à une deuxième borne d'entrée 151; - un multiplexeur 115 comprenant trois entrées série et une sortie série, la sortie série étant reliée à l'entrée du registre 112, la première entrée étant reliée à une troisième borne d'entrée 152, la deuxième entrée étant reliée à la sortie du registre 112; - trois registres 116, 117 et 118 de k cellules comprenant une entrée série et une sortie parallèle, l'entrée du registre 117 étant reliée à une quatrième borne d'entrée 153; - deux circuits 119 et 120 de multiplication comprenant une entrée série, une entrée parallèle pour recevoir k bits, et une sortie série; - deux registres 121 et 122 de mémorisation de k cellules comprenant une entrée parallèle et une sortie parallèle, l'entrée du registre 121 étant reliée à la sortie du registre 116, la sortie du registre 121 étant reliée à l'entrée parallèle du circuit de multiplication 119, et la sortie du registre 122 étant reliée à l'entrée parallèle du circuit de multiplication 120; - un multiplexeur 123 comprenant deux entrées parallèles et une sortie parallèle, la première entrée du multiplexeur 123 étant reliée à la sortie du registre 117, la deuxième entrée du multiplexeur 123 étant reliée à la sortie du registre 118, la sortie du multiplexeur 123 étant reliée à l'entrée du registre 122; - deux multiplexeurs 124 et 125 comprenant chacun deux entrées série et une sortie série, la sortie du multiplexeur 124 étant reliée à l'entrée du registre 116, la première entrée du multiplexeur 124 étant reliée à une cinquième borne d'entrée 154, la sortie du multiplexeur étant reliée à l'entrée série du circuit de multiplication 119, la première entrée du multiplexeur étant reliée à un zéro logique; - un multiplexeur 126 comprenant trois entrées série et une sortie série, la sortie étant reliée à l'entrée série du circuit de multiplication 120, la première entrée étant reliée à un zéro logique; - des circuits 127, 128 et 129 de soustraction comprenant chacun deux entrées série et une sortie série, la première entrée du circuit 127 étant reliée à la sortie du registre 110, la sortie du circuit 127 étant reliée à chacune des deuxièmes entrées des multiplexeurs 124 et 125 et également à une borne de sortie 155, la première entrée du circuit 128 étant reliée à la sortie du registre 111; un circuit 130 d'addition comprenant deux entrées série et une sortie série, la première entrée du circuit étant reliée à la sortie du circuit 119, la sortie du circuit 130 étant reliée à la deuxième entrée du multiplexeur 126; - un circuit 131 d'addition comprenant deux entrées série, une sortie série et une sortie de retenue, la sortie de retenue du circuit 131 étant reliée à la première entrée du circuit 129; - des cellules à retard 132, 133 et 134 pour retarder de k temps de cycle la propagation de données binaires (ces cellules étant typiquement des registres à décalage de k bits), ces cellules comprenant une entrée série et une sortie série, la sortie de la cellule 132 étant reliée d'une part à la troisième entrée du multiplexeur 126 et d'autre part à l'entrée de la cellule 133, la sortie de la cellule 133 étant reliée à la deuxième entrée du circuit 129, l'entrée de la cellule 134 étant reliée à la sortie du circuit 130, et la sortie de la cellule 134 étant reliée à la première entrée du circuit 131; - un circuit 135 de comparaison comprenant deux entrées série et deux sorties, la première entrée étant reliée à la sortie du circuit 131, la deuxième entrée étant reliée à la sortie du circuit 129; - deux multiplexeurs 136 et 137 comprenant chacun deux entrées série, une entrée de sélection, et une sortie série, chacune des premières entrées étant reliée à un zéro logique, chacune des entrées de sélection étant reliée à l'une des sorties du circuit 135, la sortie du multiplexeur 136 étant reliée à la deuxième entrée du circuit 127, la sortie du multiplexeur 137 étant reliée à la deuxième entrée du circuit 128; - un multiplexeur 138 comprenant deux entrées série et une sortie série, la première entrée étant reliée à un "un" logique, la deuxième entrée étant reliée à la sortie du registre 112, la sortie étant reliée d'une part à l'entrée de la cellule 132 et d'autre part aux deuxièmes entrées des multiplexeurs 136 et 137; - un démultiplexeur 139 comprenant une entrée série et deux sorties série, l'entrée étant reliée à la sortie du circuit 120, les sorties étant reliées respectivement à l'entrée du registre 118 et à la deuxième entrée du circuit 131; - un multiplexeur 140 comprenant deux entrées série et une sortie série, la première entrée étant reliée à la sortie du circuit 128, la deuxième entrée étant reliée à un zéro logique, et la sortie étant reliée à la deuxième entrée du circuit 130; un multiplexeur 141 comprenant deux entrées série et une sortie série, la première entrée étant reliée à la sortie du circuit 130, la deuxième entrée étant reliée à la sortie du circuit 131, et la sortie étant reliée aux troisièmes entrées des multiplexeurs 113 et 115 et à la deuxième entrée du multiplexeur 114; - deux bornes de sortie 156 et 157 reliées respectivement aux sorties des registres 111 et 112. Pour le fonctionnement du coprocesseur 4 de la figure 3, l'homme du métier se reportera à D3. L'avantage majeur du coprocesseur 4 de la figure 3 est qu'il permet de chaîner les multiplications en conservant les Bt bits de poids fort du résultat de la multiplication précédente. La fonction réalisée permet ainsi d'effectuer plus rapidement le produit A * B, A étant codé sur Bt bits et B étant codé sur p * Bt bits par découpage successif du produit. Dans D3, une variante de réalisation montre un circuit qui permet de réaliser l'opération élémentaire S = A * B + C + D, avec A, B, C et D codés sur Bt bits, S étant codé sur 2 * Bt bits. Le but d'une telle variante a pour objet d'effectuer simultanément une multiplication sur p * Bt bits et une addition sur p * Bt bits pour réaliser plus rapidement les calculs de X = Si + Ai * B et Z = X + (N * Y0) de l'algorithme de Montgomery. Si l'on développe l'algorithme de Montgomery réalisé à partir d'opérations élémentaires de type S = A * B + C + D, on obtient la répétition de la boucle de calcul suivante: A) calcul de X = Si + Ai * B, soit: Xp...X0 = Sipl... Si,0 + Ai * Bpi...B0, avec Xj, Sij et Bj les mots de Bt bits de X, Si et B, à l'aide de la succession des p calculs suivant réalisés dans le coprocesseur 4: A1) X'1X0 = Si,0 + Ai * B0 + 0 A2) X'2X1 = Si,1 + Ai * B1 + X'i Ap-1) X'p-lXp-2 = Si,p_2 + Ai * Bp-2 + X'p-2 Ap) XpXp-1 = Si,p-_ + Ai * Bp_1 + X'p-1 avec X'1 à X'p_1- des mots de Bt bits de calcul intermédiaire qui restent en permanence dans le coprocesseur 4; B) Y0 = (X * J0) mod 2t soit: Y0 = (Xpl'.X0 * J0) mod 2Bt, par le calcul suivant réalisé dans le coprocesseur 4: Y'lY0 = X0 * J0 + 0 le mot de poids faible Y0 étant le seul intéressant; C) Z = X + N * Yo, soit: Zp..Z0 = Xp...X0 + Y0 * Np-,...N0, avec Zj, Xj et Nj les mots de Bt bits de Z, X et N, à l'aide de la succession des p + 1 calculs suivant réalisés dans le coprocesseur 4: C1) Z'lZ0 = X0 + Y0 * No + 0 C2) Z'2Z1 = X1 + Y0 * N1 + Z'1 Cp-1) Z'p-lZp-2 = Xp-2 + Y0 * Np-2 + Z'p-2 Cp) Z'pZp-1 = Xp-1 + Y0 * Np-l + Z'p-l Cp+l) Zp = Xp + 0 * 0 + Z'p avec Z'1 à Z'p des mots de Bt bits de calcul intermédiaire qui restent en permanence dans le coprocesseur 4; D) Si+1 = Z \ 2Bt, \ étant une division entière, si Si+1 est supérieur à N alors on soustrait N à Si+1. L'invention propose d'améliorer le temps de calcul en supprimant le calcul repéré Cp+l en créant une nouvelle opération du type S = A * B + C, avec S et C codés sur 2 * Bt bits, et A et B codés sur Bt bits. Pour réaliser cette nouvelle opération, une bascule de mémorisation de débordement a été rajoutée pour mémoriser un éventuel débordement à l'issu d'un calcul élémentaire et réinjecter l'éventuel débordement lors du calcul suivant. L'invention a pour objet un circuit de calcul pour réaliser une opération A * B + C, A et B étant des entiers codés sur au plus m * k bits, C étant un entier codé sur au plus 2 * m * k bits, m et k étant des entiers non nuls, le circuit de calcul comportant: des premier, deuxième et troisième registre de m * k bits, les dits registres mémorisant des données; un quatrième registre de k bits mémorisant une donnée; un premier circuit de multiplication pour réaliser des multiplications entre les données des premier et quatrième registres; des moyens d'addition pour réaliser une addition des données des deuxième et troisième registres et le résultat sortant du circuit de multiplication; des moyens pour mémoriser une retenue éventuelle résultant d'un débordement de l'addition; et des moyens de liaison pour fournir un résultat intermédiaire provenant des moyens d'addition dans les deuxième et troisième registre, et pour fournir la retenue, mémorisée lors d'une précédente addition, aux moyens d'addition de manière à additionner la retenue à la place du mot de poids le plus faible à additionner dès que le mot de poids le plus faible a été additionné. Selon une variante, le circuit de calcul comporte un cinquième registre de m * k bits pour fournir de manière successive des mots de k bits au quatrième registre. L'invention propose également de réaliser la même opération élémentaire en utilisant les deux multiplieurs en parallèle afin de réduire par deux le temps de calcul. Dans cet optique, le circuit de calcul comporte un deuxième circuit de multiplication pour effectuer, simultanément avec le premier circuit de multiplication, la multiplication de la donnée du premier registre avec une donnée d'un sixième registre de k bits, les moyens d'addition additionnant, avec un décalage de k bits, le résultat sortant du deuxième circuit de multiplication. L'invention porte également sur un coprocesseur d'arithmétique modulaire comportant des moyens pour mettre en oeuvre des opérations modulaires sur des nombre de m * k bits, m et k étant des entiers, et le circuit de calcul précédemment défini. Plus généralement, l'invention porte sur un dispositif de calcul modulaire comportant un processeur, une mémoire, caractérisé en ce qu'il comporte le coprocesseur. Par ailleurs, l'invention a également pour objet un procédé de calcul de A * B + C, A et B étant des entiers codés sur au plus m * k bits, C étant un entier codé sur au plus 2 * m * k bits, m et k étant des entiers non nuls, dans lequel: on multiplie, dans un circuit de multiplication, une donnée d'un premier registre de m * k bits par une données d'un quatrième registre de k bits; on additionne des données d'un deuxième et d'un troisième registres de m * k bits avec le résultat sortant du circuit de multiplication; on mémorise une retenue éventuelle résultant d'un débordement de l'addition; on mémorise un résultat intermédiaire dans les deuxième et troisième registres; et on répète les opérations précédente en changeant la donnée du quatrième registre et en additionnant la retenu éventuelle mémorisée à la place du mot de poids le plus faible à additionner dès que le mot de poids le plus faible a été additionné. Dans une variante, on mémorise entièrement une opérande dans un cinquième registre de m * k bits pour fournir l'opérande de manière successive au quatrième registre. Pour diviser par deux le temps nécessaire à la réalisation du procédé, on effectue en parallèle une deuxième multiplication dont le résultat est additionné avec un décalage de k bits. Plus généralement, l'invention porte sur un procédé de calcul d'opération modulaire sur des opérandes de taille supérieur à m * k bits dans lequel les opérandes sont traitées par mots de m * k bits, en utilisant le procédé de l'invention. L'invention sera mieux comprise et d'autres particularités et avantages apparaîtront à la lecture de la description qui va suivre, la description faisant référence aux dessins annexés parmi lesquels: la figure 1 représente un coprocesseur modulaire selon l'art antérieur, la figure 2 représente un dispositif de calcul modulaire selon l'art antérieur, la figure 3 représente un coprocesseur modulaire selon l'art antérieur, les figures 4 et 5 représentent deux modes de réalisation d'un coprocesseur de calcul modulaire selon l'invention. Les figures 1 à 3 étant décrites précédemment et leur fonctionnement étant décrit dans D2 et D3, elles ne seront pas décrites plus en détail. La figure 4 représente le coprocesseur 4 de la figure 3 modifié selon l'invention. Les modifications effectuées sont les suivantes: - la cellule à retard 132 est utilisée comme un registre à décalage de k bits; - le multiplexeur 140 comporte une troisième entrée; - les entrées du circuit 131 d'addition ne sont plus connectées aux sorties de la cellule à retard 134 et du démultiplexeur 139; - un multiplexeur 160 comprenant deux entrées et une sortie a été ajouté, la première entrée du multiplexeur 160 étant connectée à la sortie du circuit , la deuxième entrée du multiplexeur 160 étant connectée à la sortie de la cellule à retard 134, et la sortie du multiplexeur 160 étant connectée à la première entrée du circuit 131; - un multiplexeur 161 comprenant trois entrées et une sortie a été ajouté, la première entrée du multiplexeur 161 étant connectée à la sortie de la cellule à retard 132, la deuxième entrées du multiplexeur 161 étant connectée à la deuxième sortie du démultiplexeur 139, la troisième entrée du multiplexeur 161 étant reliée à un zéro logique, et la sortie du multiplexeur 161 étant connectée à la deuxième entrée du circuit 131; une bascule 162 de mémorisation comprenant une entrée et une sortie a été ajoutée, la bascule servant à mémoriser un bit, l'entrée de la bascule 162 étant connectée à la sortie de retenue du circuit 131, et la sortie de la bascule 162 étant connectée à la troisième entrée du multiplexeur 140; une borne de sortie 163 connectée à la sortie de la bascule 162 permet de sortir le bit contenu dans la bascule. Les différents éléments constituant le coprocesseur 4 de la figure 4 peuvent par ailleurs être modifiés pour supporter des fonctionnalités supplémentaires. Ainsi l'ajout de circuits de calcul et de multiplexeur supplémentaires créant de nouvelles capacités de traitement autorisant les chemins nécessaires pour le déroulement de l'opération objet de l'invention est tout à fait envisageable. De même, si les multiplexeurs 140, 141, 160 et 161 ont leurs sorties dirigées respectivement sur leurs première, deuxième, deuxième et deuxième entrées, on retrouve le coprocesseur 4 de la figure 1. Pour effectuer les différentes fonctions du circuit de la figure 1, il convient de se reporter à D2. Pour pouvoir réaliser l'opération élémentaire de l'invention S = A * B + C, il convient de neutraliser certains éléments du coprocesseur 4 de la figure 4. Ainsi, les multiplexeurs 136 et 137 sont positionnés pour fournir "0" sur leurs sortie afin que les circuits 127 et 128 se comportent comme des fils; le multiplexeur 160 est positionné pour relier en permanence la sortie du circuit 130 à la première entrée du circuit 131. Pour des raisons de clarté, dans les explications qui vont suivre, on ne tiendra pas compte des retards causés par les circuits 127, 128, 130 et 131 de soustraction et d'addition ni d'éventuels retard causé par l'initialisation des différents éléments du coprocesseur 4. En effet, l'homme du métier sait comment synchroniser des circuits entre eux. Les explications qui vont suivre permettront de réaliser le séquencement nécessaire des différents éléments du coprocesseur 4 pour réaliser l'opération élémentaire de l'invention S = A * B + C, A et B étant codés sur Bt = m * k bits, et C et S étant codés sur 2 * Bt = 2 * m * k bits: Initialisation: I0) on charge dans le registre 121, par l'intermédiaire du registre 116, le mot A0 de k bits de poids le plus faible de l'opérande A; on charge dans le registre 110 les m * k bits de l'opérande B; on charge dans le registre 111 les m * k bits de poids faible de l'opérande C notée CO; on charge dans le registre 112 les m * k bits de poids fort de l'opérande C notée C1; on initialise à zéro le registre 132 et les circuit 130 et 131; et si il s'agit d'une première opération élémentaire, alors on initialise à "0" la bascule 162. Première itération: Il) on effectue un décalage de k bits sur les registres 110, 111, 112 et 132, les données sortant du registre 110 étant multipliées par le contenu du registre 121 dans le circuit 119, le registre 110 ayant son entrée reliée à sa sortie, les données sortant du registre 111 étant additionnées avec le résultat sortant du circuit 119 dans le circuit 130, les données sortant du registre 112 étant chargées dans le registre 132, les données entrant dans le registre 112 provenant de la sortie du circuit 130; I2) on effectue un décalage de (m - 1) * k bits sur les registres 110 et 111, les données sortant du registre étant multipliées par le contenu du registre 121 dans le circuit 119, le registre 110 ayant son entrée reliée à sa sortie, les données sortant du registre 111 étant additionnée avec le résultat sortant du circuit 119 dans le circuit 130, les données entrant dans le registre 111 provenant de la sortie du circuit 130; I3) on effectue un décalage de 1 bit sur les registres 111 et 132, un "0" étant envoyé au circuit 119, le bit présent dans la bascule 162 étant additionné avec le résultat sortant du circuit 119 dans le circuit 130, le bit sortant du registre 132 étant additionné au résultat sortant du circuit 130 dans le circuit 131, les données entrant dans le registre 111 provenant de la sortie du circuit 131; I4) on effectue un décalage de k - 1 bits sur les registres 111 et 132, des "0" étant envoyés au circuit 119, des "0" étant additionnés avec le résultat sortant du circuit 119 dans le circuit 130, les bits sortant du registre 132 étant additionnés au résultat sortant du circuit 130 dans le circuit 131, les données entrant dans le registre 111 provenant de la sortie du circuit 131; lors du dernier décalage, on mémorise dans la bascule 162 la retenue présente dans le circuit 131; I5) pendant que l'on effectue les étapes Il à I4, on charge le mot A1 dans le registre 116. A l'issue de la première itération, le registre 110 contient l'opérande B; le registre 111 contient un résultat intermédiaire qui correspond aux m * k bits de poids fort de l'opération A0 * B + C1i,0C0, A0 correspondant aux k bits de poids faible de A, C1,0 correspondant aux k bits de poids faible du mot C1 de k * m bits de poids fort de l'opérande C, et Co correspondant au mot de m * k bits de poids faible de l'opérande C; le registre 112contient en bits de poids fort le mot So,O0 et en bits de poids faible les mots Cl,m-1 à C1,1, le mot S0,0 correspondant aux k bits de poids faible du mot So de m * k bits du résultat S de l'opération élémentaire de l'invention, les mots Clm-1 à C1,1 correspondant aux m - 1 mots de k bits de poids fort du mot C1 de m * k bits de poids fort de l'opérande C; le registre 116 contient le mot A1 correspondant au mot de k bit de poids 1 de l'opérande A; la bascule 162 contient une éventuelle retenue de débordement résultant de l'itération. Boucle de calcul: on répète m - 1 fois l'initialisation de boucle et l'itération de boucle qui suivent, j étant un indice variant de 1 à m - 1: Initialisation de boucle: I'0) on charge dans le registre 121 le mot Aj contenu dans le registre 116; on initialise à zéro le registre 132 et les circuit 130 et 131. Itération de boucle: on effectue les étapes Il à I4 définies précédemment: I'5) pendant que l'on effectue les étapes Il à I4, on charge le mot Aj+1 dans le registre 116. A l'issue de chaque itération de boucle, le registre 110 contient l'opérande B; le registre 111 contient un résultat intermédiaire qui correspond aux m * k bits de poids fort de l'opération Aj..A0 * B + Cl,j. .Cl,0C0, Aj..A0 correspondant aux j * k bits de poids faible de A, Cij..C1,0 correspondant aux j * k bits de poids faible du mot de k * m bits de poids fort de l'opérande C, et Co correspondant au mot de m * k bits de poids faible de l'opérande C; le registre 112 contient en bits de poids fort les mots SOj à SO,O0 et en bits de poids faible les mots Clm-1 à Cij+1, les mots S0,j à S0,0 correspondant aux j * k bits de poids faible du mot S0 de m * k bits du résultat S de l'opération élémentaire de l'invention, les mots Clm-1 à Cij+1 correspondant aux m - 1 - j mots de k bits de poids fort du mot C1 de m * k bits de poids fort de l'opérande C; le registre 116 contient le mot Aj+1 correspondant au mot de k bit de poids j+l de l'opérande A; la bascule 162 contient une éventuelle retenue de débordement résultant de l'itération précédente. A l'issue de la dernière itération, le résultat S est contenu dans les registres 111 et 112, une éventuelle retenue étant mémorisée dans la bascule 162. Si l'on désire récupérer la totalité du résultat, on sort les données contenu dans les registres 111 et 112 par l'intermédiaire des bornes 156 et 157, et on récupère l'éventuelle retenue indiquant un débordement de calcul par l'intermédiaire de la borne 163. Si par contre on désire enchaîner un calcul, on sort uniquement le contenu du registre 112. Pour effectuer l'enchaînement de calcul, on charge dans le registre 112 un mot de Bt = m * k bits de poids supérieur de la variable à additionner; on présente ensuite le mot de poids supérieur remplaçant A; on n'effectue pas la remise à jour de la bascule 162. A titre d'exemple, la réalisation d'une opération Pfield(D, E)N = S avec le circuit 1 de la figure 2 utilisant le processeur 4 de la figure 4, D, E, S et N étant codés sur p mots de Bt bits, Bt étant égal à m * k bits se déroule ainsi: on répète p fois la boucle de calcul constituées de la succession d'étapes suivante, i étant un indice variant de 0 à p-1 et étant incrémenté pour chaque exécution de la boucle par le processeur 2: PX) calcul de X = Si + Di * E, soit: Xp...X0 = Si,p-l...Si,0 + Di * Epi...E0, avec Xj, Sij et Ej les mots de Bt bits de X, Si et B, et Si étant une valeur actualisée de S telle que So = 0 et Sp_1 = S, en décomposant à l'aide des étapes PXl à PXp: PXl) X'lXo = Si,lSi,o + Di * E0 en chargeant Di dans le registre 110, Si,1 dans le registre 112, Si,0 dans le registre 111, en initialisant à "0" la bascule 162, et en chargeant successivement les m mots de k bits constituant E0 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à X0; PX2) X'2X1 = Si,2X'1 + Di * E1 en chargeant Si,2 dans le registre 112, et en chargeant successivement les m mots de k bits constituant E1 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à X1; PXp-l) x p-lXp-2 = Si,p-lX'p-2 + Di * Ep-2 en chargeant Si,p-l dans le registre 112, et en chargeant successivement les m mots de k bits constituant Ep_2 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Xp_2; PXp) XpXp-l = X'p_1 + Di * Epl en chargeant des "0" dans le registre 112, et en chargeant successivement les m mots de k bits constituant Ep_1 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Xp_1 et le contenu du registre 111 qui correspond à Xp, la sortie de la retenue n'étant pas nécessaire car elle est forcément nulle; avec X'1 à X'p_1 des mots de Bt bits de calcul intermédiaire qui restent en dans le registre 111 du coprocesseur 4 entre deux calculs; PY) Y0 = (X * J0) mod 2Bt, soit: Y0 = (Xp... X0 * J0) mod 2Bt, par le calcul suivant réalisé dans le coprocesseur 4: Y'I1Y0 = X0 * J0 + 0 en chargeant X0 dans le registre 110, des "0" dans les registres 111 et 112, en initialisant à "0" la bascule 162, et en chargeant successivement les m mots de k bits constituant J0 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Y0 seule donnée intéressante; PZ) Z = X + N * Y0, soit: Zp..Z0 = Xp..X0 + Y0 * Np- 1...N0, avec Zj, Xj et Nj les mots de Bt bits de Z, X et N, en décomposant à l'aide des étapes PZl à PZp: PZ1) Z'lZ0 = X1X0 + Y0 * No en chargeant Y0 dans le registre 110, X1 dans le registre 112, X0 dans le registre 111, en initialisant à "0" la bascule 162, et en chargeant successivement les m mots de k bits constituant No dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Z0; PZ2) Z'2Z1 = X2Z'1 + Y0 * N1 en chargeant X2 dans le registre 112, et en chargeant successivement les m mots de k bits constituant N1 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Z1; PZp-1) Z'p-1Zp-2 = Xp_1Z'p-2 + Y0 * Np-2 en chargeant Xp_1 dans le registre 112, et en chargeant successivement les m mots de k bits constituant Np_2 dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Zp-2; PZp) ZpZp-l = XpZp-1 + Y0 * Np-, en chargeant des Xp dans le registre 112, et en chargeant successivement les m mots de k bits constituant Np-, dans le registre 116; à la fin du calcul on sort le contenu du registre 112 qui correspond à Zp-l et le contenu du registre 111 qui correspond à Zp, on sort également la retenue; avec Z'1 à Z'p des mots de Bt bits de calcul intermédiaire qui restent en permanence dans le coprocesseur 4; PS) si la retenue est égale à 0 et que Z \ 2Bt est inférieur à N alors Si+, = Z \ 2Bt, sinon Si+ = Z \ 2Bt - N, \ étant une division entière. Dans l'exemple décrit ci-dessus, l'invention permet d'économiser p additions de Bt bits, soit environ p * Bt cycles d'un signal d'horloge servant au séquencement du coprocesseur 4 et permet d'éviter des échanges de données entre la mémoire 3 et le coprocesseur 4. On remarque que l'opération S = A * B + C est réalisée avec une variable C reconstituée à partir de mots de taille inférieure dont la provenance est différente. Des variantes de réalisation du processeur 4 de la figure 4 sont possibles. En effet, il n'est pas nécessaire de connecter la sortie de la bascule 162 au multiplexeur 140 et la borne 163. On peut, par exemple, connecter la sortie de la bascule 162 au dispositif de contrôle du processeur 4 (non représenté) et relier la troisième entrée du multiplexeur à un "1" logique, le dispositif de contrôle orientant soit un "0" soit un "1" en fonction du bit contenu dans la bascule, un indicateur de débordement contrôlé par le dispositif de contrôle (par exemple un registre de statut) pouvant toujours être fourni à l'utilisateur, c'est à dire au reste du circuit 1. De même, le multiplexeur 161 n'est pas nécessaire mais permet de simplifier le séquencement du coprocesseur 4. En effet, il est possible de charger le nombre "1" dans le registre 122 afin d'utiliser le circuit de multiplication 120 comme un fil, l'envoie de "0" logique se faisant par l'intermédiaire du multiplexeur 126. Il est également possible de modifier la disposition des différents éléments utilisés pour réaliser le calcul détaillé précédemment par rapport aux différents composants du coprocesseur 4 servant à réaliser d'autres fonction. La figure 5 présente une variante de l'invention. Le coprocesseur 4 de la figure 5 comporte - quatre registres à décalage 210, 211, 212 et 240 à entrée série et sortie série, ces registres comportant un nombre n (n entier) de cellules, avec n = m * k (m et k entiers); - un multiplexeur 241 comprenant deux entrées série et une sortie série, la sortie série du multiplexeur 241 étant reliée à l'entrée du registre 240, une première entrée du multiplexeur 241 étant reliée à une première borne d'entrée 242 et une deuxième entrée du multiplexeur 241 étant reliée à la sortie du registre 240; - un multiplexeur 213 comprenant trois entrées série et une sortie série, la sortie série du multiplexeur 213 étant reliée à l'entrée du registre 210, une première entrée du multiplexeur 213 étant reliée à une deuxième borne d'entrée 243 et une deuxième entrée du multiplexeur 213 étant reliée à la sortie du registre 210; - un multiplexeur 214 comprenant deux entrées série et une sortie série, la sortie série du multiplexeur 214 étant reliée à l'entrée du registre 211 et une première entrée du multiplexeur 214 étant reliée à une troisième borne d'entrée 244; - un multiplexeur 215 comprenant trois entrées série et une sortie série, la sortie série du multiplexeur 215 étant reliée à l'entrée du registre 212, une première entrée du multiplexeur 215 étant reliée à une quatrième borne d'entrée 245 et une deuxième entrée du multiplexeur 215 étant reliée à la sortie du registre 212; - trois registres 216, 217 et 218 de k cellules comprenant une entrée série et une sortie parallèle, - un multiplexeur 246 comprenant deux entrées série et une sortie série, la sortie série du multiplexeur 246 étant reliée à l'entrée du registre 217, une première entrée du multiplexeur 246 étant reliée à une cinquième borne d'entrée 247 et une deuxième entrée du multiplexeur 246 étant reliée à la sortie du registre 240; - deux circuits 219 et 220 de multiplication comprenant une entrée série, une entrée parallèle pour recevoir k bits et une sortie série, deux registres 221 et 222 de mémorisation de k cellules comprenant une entrée et une sortie parallèles, l'entrée du registre 221 étant reliée à la sortie du registre 216, la sortie du registre 221 étant reliée à l'entrée parallèle du circuit de multiplication 219 et la sortie du registre 222 étant reliée à l'entrée parallèle du circuit de multiplication 220; - un multiplexeur 223 comprenant deux entrées parallèles et une sortie parallèle, une première entrée du multiplexeur 223 étant reliée à la sortie du registre 217 et une deuxième entrée du multiplexeur 223 étant reliée à la sortie du registre 18, la sortie du multiplexeur 223 étant reliée à l'entrée du registre 222; - deux multiplexeurs 224 et 225 comprenant chacun deux entrées série et une sortie série, la sortie du multiplexeur 224 étant reliée à l'entrée du registre 216, une première entrée du multiplexeur 224 étant reliée à la sortie du registre 240, la sortie du multiplexeur 225 étant reliée à l'entrée série du circuit de multiplication 219 et une première entrée du multiplexeur 225 reçoit un "0" logique; - un multiplexeur 248 comprenant quatre entrées série et une sortie série, la sortie du multiplexeur 248 étant reliée à l'entrée série du circuit de multiplication 220 et une première entrée de ce multiplexeur reçoit un "0" logique; - des circuits de soustraction 227, 228 et 229 comprenant chacun deux entrées série et une sortie série, une première entrée du circuit 227 étant reliée à la sortie du registre 210, la sortie du circuit 227 étant reliée à chacune des deuxièmes entrées des multiplexeurs 224 et 225, à une borne de sortie 249 et à une quatrième entrée du multiplexeur 248; - un multiplexeur 250 comprenant trois entrées série et une sortie série, la sortie du multiplexeur 250 étant reliée à une première entrée du circuit 228, une première entrée du multiplexeur 250 étant reliée à la sortie du registre 211, une deuxième entrée de ce multiplexeur recevant un "0" logique, et une troisième entrée de ce multiplexeur recevant un "1" logique; - deux circuits d'addition 230 et 231 comprenant chacun deux entrées série et une sortie série, une première entrée du circuit 230 étant reliée à la sortie du circuit 219 et une deuxième entrée de ce circuit étant reliée à la sortie du circuit de soustraction 228, la sortie du circuit 230 étant reliée à une deuxième entrée du multiplexeur 248, la sortie du circuit 231 étant reliée à une première entrée du circuit 229; - un multiplexeur 253 comprenant trois entrées série et une sortie série, la sortie série du multiplexeur 253 étant reliée à une première entrée du circuit d'addition 231 et une première entrée de ce multiplexeur étant reliée à la sortie du circuit d'addition 230, la troisième entrée du multiplexeur reçoit un "0" logique; - des cellules à retard 232, 233 et 234 pour retarder de k temps de cycle la propagation de données binaires (ces cellules étant typiquement des registres à décalage de k bits, c'est-à-dire de la taille des registres 216, 217 et 218), ces cellules comprenant une entrée série et une sortie série, la sortie de la cellule 232 étant reliée d'une part à une troisième entrée du multiplexeur 248 et d'autre part à l'entrée de la cellule 233, la sortie de la cellule 233 étant reliée à une deuxième entrée du circuit 229, l'entrée de la cellule 234 étant reliée à la sortie du circuit d'addition 230 et la sortie de la cellule 234 étant reliée à une deuxième entrée du multiplexeur 253; - un circuit 235 de comparaison comprenant deux entrées série et deux sorties, une première entrée du circuit 235 étant reliée à la sortie du circuit 231 et une deuxième entrée du circuit 235 étant reliée à la sortie du circuit 229; - deux multiplexeurs 236 et 237 comprenant chacun deux entrées série, une entrée de sélection, et une sortie série, chacune des premières entrées série des multiplexeurs 236 et 237 recevant un "0" logique, chacune des entrées de sélection étant reliée à l'une des sorties du circuit 235, la sortie du multiplexeur 236 étant reliée à une deuxième entrée du circuit 227 et la sortie du multiplexeur 237 étant reliée à une deuxième entrée du circuit 228; - un multiplexeur 238 comprenant deux entrées série et une sortie série, une première entrée du multiplexeur 238 recevant un "1" logique, une deuxième entrée du multiplexeur 238 étant reliée à la sortie du registre 212, la sortie du multiplexeur 238 étant reliée d'une part à l'entrée de la cellule 232 et d'autre part à des deuxièmes entrées des multiplexeurs 236 et 237; - un démultiplexeur 239 comprenant une entrée série et deux sorties série, l'entrée du démultiplexeur 239 étant reliée à la sortie du circuit 220, et une première sortie du démultiplexeur 239 étant reliée à l'entrée du registre 218; - une cellule à retard 254 pour retarder de k temps de cycle la propagation de données binaires (ces cellules étant typiquement des registres à décalage de k bits), cette cellule comprenant une entrée série et une sortie série, l'entrée de la cellule 254 étant reliée à une deuxième sortie du démultiplexeur 239; - un multiplexeur 255 comprenant deux entrées série et une sortie série, une première entrée du multiplexeur 255 étant reliée à la deuxième sortie du démultiplexeur 239, une deuxième entrée du multiplexeur 255 étant reliée à la sortie de la cellule 254 et la sortie du multiplexeur 255 étant reliée à une deuxième entrée du circuit d'addition 231; - un multiplexeur 256 comprenant deux entrées série et une sortie série, une première entrée du multiplexeur 256 étant reliée à la sortie du circuit d'addition 230, la sortie de ce multiplexeur étant reliée à des troisièmes entrées des multiplexeurs 213 et 215 et à une deuxième entrée du multiplexeur 214; deux bornes de sortie 257 et 258 reliées respectivement aux sorties des registres 211 et 212; - un multiplexeur 260 comprenant deux entrées série et une sortie série, une première entrée du multiplexeur 260 étant reliée à la sortie de la cellule à retard 233, et une deuxième entrée recevant un "0" logique; - un circuit d'addition 261 comprenant deux entrées série, une sortie de calcul, et une sortie de retenue, une première entrée du circuit d'addition 261 étant reliée à la sortie du multiplexeur 260, une deuxième entrée du circuit d'addition 261 étant reliée à la sortie du circuit d'addition 231, la sortie de calcul du circuit d'addition 261 étant reliée à la deuxième entrée du multiplexeur 256; - une bascule 262 de mémorisation comprenant une entrée et une sortie, l'entrée étant reliée à la sorite de retenue du circuit d'addition 261, et la sortie de la bascule 262 étant reliée à un dispositif de supervision du coprocesseur 4 (non représenté). La fonction de retard des cellules à retard 232 et 233 est utilisée pour réaliser des calculs modulaires de manière interne, comme expliqué dans D2. Dans l'invention, les cellules à retard 232 et 233 sont utilisées comme des registres à décalage et seront appelées par la suite registres 232 et 233. Comme on le verra par la suite, cet exemple de coprocesseur réalisé conformément à l'invention pourra subir des modifications sans qu'on sorte du cadre de l'invention. En ce qui concerne les bornes de sortie et d'entrée, on pourra choisir d'utiliser des bornes distinctes mais celles-ci pourront être aussi une ou des bornes d'entrée/sortie communes à plusieurs éléments du coprocesseur. En utilisant des bornes distinctes, un avantage est de pouvoir recevoir et/ou fournir des données de et/ou à des éléments extérieurs au coprocesseur (tels que le processeur de traitement 2 par exemple) en parallèle, ce qui diminue la durée des échanges entre le circuit et des éléments extérieurs. Pour réaliser l'opération faisant l'objet de l'invention, il convient de rendre les circuits de soustraction 227 et 228 transparents aux flux de bits reçus sur leurs premières entrées. On sélectionne en permanence la deuxième entrée du multiplexeur 255 pour que les données produites par le circuit de multiplication 220 soient fournies avec un retard de k cycles d'horloge au circuit d'addition 231. Pour des raisons de clarté, dans les explications qui vont suivre, on ne tiendra pas compte des retards causés par les circuits 227, 228, 230, 231 et 261 de soustraction et d'addition ni d'éventuels retard causé par l'initialisation des différents éléments du coprocesseur 4. En effet, l'homme du métier sait comment synchroniser des circuits entre eux. Les explications qui vont suivre permettront de réaliser le séquencement nécessaire des différents éléments du coprocesseur 4 pour réaliser l'opération élémentaire de l'invention S = A * B + C, A et B étant codés sur Bt = m * k bits, et C et S étant codés sur 2 * Bt = 2 * m * k bits, m étant un nombre pair: Initialisation: IT0) on charge dans le registre 240 les m * k bits de l'opérande A; on charge A0 et A1 respectivement dans les registres 221 et 222 via les registres 216 et 217, A0 et A1 étant les mots de k bits de poids 0 et 1 de l'opérande A; on charge dans le registre 210 les m * k bits de l'opérande B; on charge dans le registre 211 les m * k bits de poids faible de l'opérande C notée CO; on charge dans le registre 212 les m * k bits de poids fort de l'opérande C notée C1; on initialise à zéro les registres 232 et 233 et de la cellule à retard 254, les circuits d'addition 230, 231 et 261, et les circuits de multiplication 219 et 220; et si il s'agit d'une première opération élémentaire, alors on initialise à "0" la bascule 262. Première itération: IT1) on effectue un décalage de 2 * k bits sur les registres 210, 211, 212, 232, les données sortant du registre 210 étant multipliées par le contenu du registre 221 dans le circuit 219 et par le contenu du registre 222 dans le circuit 220, le registre 210 ayant son entrée reliée à sa sortie, les données sortant du registre 211 étant additionnées avec le résultat sortant du circuit 219 dans le circuit 230 et avec le résultat sortant du circuit 220 avec un décalage de k bits dans le circuit 231, les données sortant du registre 212 étant chargées dans les registres 232 et 233, les données entrant dans le registre 212 provenant de la sortie du circuit 231, le circuit 261 étant rendu transparent par l'envoi de "0" logique via le multiplexeur 260; IT2) on effectue un décalage de (m - 2) * k bits sur les registres 210 et 211, les données sortant du registre 210 étant multipliées par le contenu du registre 221 dans le circuit 219 et par le contenu du registre 222 dans le circuit 220, le registre 210 ayant son entrée reliée à sa sortie, les données sortant du registre 211 étant additionnées avec le résultat sortant du circuit 219 dans le circuit 230 et avec le résultat sortant du circuit 220 avec un décalage de k bits dans le circuit 231, les données entrant dans le registre 211 provenant de la sortie du circuit 231, le circuit 261 étant rendu transparent par l'envoi de "0" logique via le multiplexeur 260; IT3) on effectue un décalage de 1 bit sur les registres 211, 232 et 233, un "0" étant envoyé aux circuits 219 et 220 par les multiplexeur 225 et 248, le bit présent dans la bascule 262 étant additionné avec le résultat sortant du circuit 219 dans le circuit 230 (par l'envoi, soit d'un "0", soit d'un "1", à l'aide du multiplexeur 250, en fonction de l'état du contenu de la bascule 262), le résultat sortant du circuit 230 étant additionné avec le résultat sortant du circuit 220 dans le circuit 231, le bit sortant du registre 233 étant additionné au résultat sortant du circuit 231 dans le circuit 261, les données entrant dans le registre 211 provenant de la sortie du circuit 261; IT4) on effectue un décalage de 2 * k - 1 bits sur les registres 211, 232 et 233, des "0" étant envoyés aux circuits 219 et 220 par les multiplexeurs 225 et 248, des "0" étant additionnés avec le résultat sortant du circuit 219 dans le circuit 230, le résultat sortant du circuit 230 étant additionné avec le résultat sortant du circuit 220 dans le circuit 231, les bits sortant du registre 233 étant additionnés au résultat sortant du circuit 231 dans le circuit 261, les données entrant dans le registre 211 provenant de la sortie du circuit 261; lors du dernier décalage, on mémorise dans la bascule 262 la retenue présente dans le circuit 261; IT5) pendant que l'on effectue les étapes IT1 à IT4, on charge les mots A2 et A3 respectivement dans les registres 216 et 217. A l'issue de la première itération, le registre 210 contient l'opérande B; le registre 211 contient un résultat intermédiaire qui correspond aux m * k bits de poids fort de l'opération A0 * B + C,1C1,0C0, A0 correspondant aux k bits de poids faible de A, Ci,iCl,o correspondant aux deux mots de k bits de poids faible du mot C1 de k * m bits de poids fort de l'opérande C, et C0 correspondant au mot de m * k bits de poids faible de l'opérande C; le registre 212 contient en bits de poids fort les mots S0,1 S0,0 et en bits de poids faible les mots Cl,m-1 à C1,2, les mots S0,1 et S0,0 correspondant aux deux mots de k bits de poids faible du mot S0 de m * k bits du résultat S de l'opération élémentaire de l'invention, les mots Clm-1 à C1,2 correspondant aux m - 2 mots de k bits de poids fort du mot C1 de m * k bits de poids fort de l'opérande C; les registres 216 et 217 contiennent les mots A2 et A3 correspondant aux mots de k bits de poids 2 et 3 de l'opérande A; la bascule 262 contient une éventuelle retenue de débordement résultant de l'itération. Boucle de calcul: on répète (m / 2) - 1 fois l'initialisation de boucle et l'itération de boucle qui suivent, j étant un indice variant de 1 à (m /2) - 1: Initialisation de boucle: IT'0)on charge dans le registre 221 le mot A2*j contenu dans le registre 216; on charge dans le registre 222 le mot A2*j+1 contenu dans le registre 217; on initialise à zéro les registres 232 et 233, et les circuit 230, 231 et 261. Itération de boucle: on effectue les étapes IT1 à IT4 définies précédemment: IT'5)pendant que l'on effectue les étapes IT1 à IT4, on charge le mot A2*j+2 dans le registre 216, et on charge le mot A2*j+3 dans le registre 217. A l'issue de chaque itération de boucle, le registre 210 contient l'opérande B; le registre 211 contient un résultat intermédiaire qui correspond aux m * k bits de poids fort de l'opération A2*j+l..A0 * B + C1,2*j+l-..C1,0C0, A2*j+l..A0 correspondant aux (2 * j + 1) * k bits de poids faible de A, Cl,2*j+l..Cl,O0 correspondant aux (2 * j + 1) * k bits de poids faible du mot de k * m bits de poids fort de l'opérande C, et Co correspondant au mot de m * k bits de poids faible de l'opérande C; le registre 212 contient en bits de poids fort les mots S0,2*j+1 à S0,O0 et en bits de poids faible les mots Cl,m- l à C1,2*j+2, les mots S0,j à So,0 correspondant aux j * k bits de poids faible du mot S0 de m * k bits du résultat S de l'opération élémentaire de l'invention, les mots Cî,m-l à C1,2*j+2 correspondant aux m - 2 - 2 * j mots de k bits de poids fort du mot C1 de m * k bits de poids fort de l'opérande C; les registres 216 et 217 contiennent les mots A2*j+2 et A2*j+3 correspondant aux mots de k bits de poids 2 * j + 2 et 2 * j + 3 de l'opérande A; la bascule 262 contient une éventuelle retenue de débordement résultant de l'itération. A l'issue de la dernière itération, le résultat S est contenu dans les registres 211 et 212, une éventuelle retenue étant mémorisée dans la bascule 262. Si l'on désire récupérer la totalité du résultat, on sort les données contenu dans les registres 211 et 212 par l'intermédiaire des bornes 257 et 258, et on récupère l'éventuelle retenue indiquant un débordement de calcul. Si on désire enchaîner un calcul, on sort uniquement le contenu du registre 212. Pour effectuer l'enchaînement de calcul, on charge dans le registre 212 un mot de Bt = m * k bits de poids supérieur de la variable à additionner; et on charge le mot de poids supérieur remplaçant A dans le registre 240; on n'effectue pas la remise à jour de la bascule 262. Si les opérandes sont codées sur un nombre m de mots de k bits avec m impair, alors on se ramène au cas o m est pair en rajoutant un mot constitué de k "0". A titre d'exemple, la réalisation d'une opération Pfield(D, E)N = S avec le circuit 1 de la figure 2 utilisant le processeur 4 de la figure 5, D, E, S et N étant codés sur p mots de Bt bits, Bt étant égal à m * k bits se déroule ainsi: on répète p fois la boucle de calcul constituée de la succession d'étapes suivante, i étant un indice variant de 0 à p-1 et étant incrémenté pour chaque exécution de la boucle par le processeur 2: PX) calcul de X = Si + Di * E, soit: Xp...X0 = Sip-l... SiO + Di * Ep_...E0, avec Xj, Si,j et Ej les mots de Bt bits de X, Si et B, et Si étant une valeur actualisée de S telle que SO = 0 et Sp_1 = S, en décomposant à l'aide des étapes PXl à PXp: PXl) X'lXo = Si,lSi,0 + Di * E0 en chargeant Di dans le registre 210, Si,1 dans le registre 212, Si,0 dansle registre 211, en initialisant à "0" la bascule 262, et en chargeant E0 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à X0; PX2) X'2X1 = Si,2X'1 + Di * E1 en chargeant Si,2 dans le registre 212, et en chargeant E1 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à X1; PXp- 1) X p-lXp-2 = Si,plX'p-2 + Di * Ep-2 en chargeant Sip_1 dans le registre 212, et en chargeant Ep-2 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Xp_2; PXp) XpXp-1 = X'p-1 + Di * Ep_1 en chargeant des "0" dans le registre 212, et en chargeant Ep_1 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Xp_1 et le contenu du registre 211 qui correspond à Xp, la sortie de la retenue n'étant pas nécessaire car elle est forcément nulle; avec X'1 à X'p_1 des mots de Bt bits de calcul intermédiaire qui restent en dans le registre 211 du coprocesseur 4 entre deux calculs; PY) Y0 = (X * J0) mod 2Bt, soit: Y0 = (Xpl.. X0 * J0) mod 2Bt, par le calcul suivant réalisé dans le coprocesseur 4: Y 1YO = X0 * J0 + 0 en chargeant X0 dans le registre 210, des "0" dans les registres 211 et 212, en initialisant à "0" la bascule 262, et en chargeant J0 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Y0 seule donnée intéressante; PZ) Z = X + N * Y0, soit: Zp-- .Z0 = Xp..X0 + Y0 * Np-...N0, avec Zj, Xj et Nj les mots de Bt bits de Z, X et N, en décomposant à l'aide des étapes PZl à PZp: PZ1) Z'1Z0 = X1X0 + Y0 * No en chargeant Y0 dans le registre 210, X1 dans le registre 212, X0 dans le registre 211, en initialisant à "0" la bascule 262, et en chargeant No dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Z0; PZ2) Z'2Z1 = X2Z'1 + Y0 * N1 en chargeant X2 dans le registre 212, et en chargeant N1 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Z1; PZp-1) Z'p-lZp-2 =Xp-lZ'p-2 + Y0 * Np-2 en chargeant Xp_1 dans le registre 212, et en chargeant Np-2 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Zp-2; PZp) ZpZp-1 = XpZ'p-1 + Y0 * Np-1 en chargeant des Xp dans le registre 212, et en les m mots de k bits constituant Np_1 dans le registre 240; à la fin du calcul on sort le contenu du registre 212 qui correspond à Zp-1 et le contenu du registre 211 qui correspond à Zp, on sort également la retenue; avec Z'1 à Z'p des mots de Bt bits de calcul intermédiaire qui restent en permanence dans le coprocesseur 4; PS) si la retenue est égale à 0 et que Z \ 2Bt est inférieur à N alors Si+1 = Z \ 2Bt, sinon Si+1 = Z \ 2Bt - N. \ étant une division entière. Le coprocesseur 4 de la figure 5 permet de réaliser les calculs environ deux fois plus vite que le coprocesseur 4 de la figure 4 et réduit le nombre d'interventions du processeur 2 pour gérer des échanges de données entre la mémoire 3 et le coprocesseur 4. Des combinaisons entre les processeurs des figures 4 et 5 sont possible. On peut par exemple transposer le registre 240 sur le coprocesseur de la figure 4 pour réduire le nombre d'échanges de données. Inversement, on peut supprimer le registre 240 de la figure 5 mais cela impose de charger pendant les itérations les mots de k bits de l'opérande A. De nombreux déplacements d'éléments peuvent être effectués. La cellule à retard 254 peut être placée en sortie du circuit de multiplication 219 à condition d'inverser les mots des registres 216 et 217. On peut également imaginer déplacer le circuit d'addition 261 à un autre endroit dans le circuit, l'important étant que la bascule 262 puisse récupérer la retenue du dernier des circuits d'additions 230, 231 ou 261. De même, la retenue ne doit pas nécessairement être injectée dans le premier des circuits d'addition mais à la place du mot de m * k bit de poids faible qui est additionné. Il est également possible d'utiliser des circuits d'addition ayant plus de deux entrées, il conviendra alors de mémoriser la retenue du dernier des circuits d'addition utilisés et d'injecter la retenue à la place du mot de poids faible additionné. Les tailles des opérandes peuvent très bien être différentes les unes des autres, on pourra toujours se ramener à une taille de m * k bits ou effectuer un nombre d'itération fonction de la taille des opérandes. REVENDICATIONS 1. Circuit de calcul pour réaliser une opération A * B + C, A et B étant des entiers codés sur au plus m * k bits, C étant un entier codé sur au plus 2 * m * k bits, m et k étant des entiers non nuls, le circuit de calcul comportant: - des premier, deuxième et troisième registres (110, 111, 112, 210, 211, 212) de m * k bits, les dits registres mémorisant des données; - un quatrième registre (121, 221) de k bits mémorisant une donnée; - un premier circuit de multiplication (119, 219) pour réaliser des multiplications entre les données des premier et quatrième registres (110, 121, 210, 221); - des moyens d'addition (130, 131, 230, 231, 261) pour réaliser une addition des données des deuxième et troisième registres (111, 112, 211, 212) et le résultat sortant du circuit de multiplication (119, 219); - des moyens pour mémoriser (162, 262) une retenue éventuelle résultant d'un débordement de l'addition; et - des moyens de liaison pour fournir un résultat intermédiaire provenant des moyens d'addition dans les deuxième et troisième registre, et pour fournir la retenue, mémorisée lors d'une précédente addition, aux moyens d'addition de manière à additionner la retenue à la place du mot de poids le plus faible à additionner dès que le mot de poids le plus faible a été additionné. 2. Circuit selon la revendication 1, caractérisé en ce que le circuit de calcul comporte un cinquième registre (240) de m * k bits pour fournir de manière successive des mots de k bits au quatrième registre (221). 3. Circuit selon l'une des revendications 1 ou 2, caractérisé en ce que le circuit de calcul comporte un deuxième circuit de multiplication (220) pour effectuer, simultanément avec le premier circuit de multiplication (219), la multiplication de la donnée du premier registre (210) avec une donnée d'un sixième registre (222) de k bits, les moyens d'addition additionnant, avec un décalage de k bits, le résultat sortant du deuxième circuit de multiplication (220). 4. Coprocesseur d'arithmétique modulaire (4) comportant des moyens pour mettre en oeuvre des opérations modulaires sur des nombre de m * k bits, m et k étant des entiers, caractérisé en ce qu'il comporte le circuit de calcul de l'une des revendication 1 à 3. 5. Dispositif de calcul modulaire (1) comportant un processeur (2), une mémoire (3), caractérisé en ce qu'il comporte le coprocesseur (4) de la revendication 4. 6. Procédé de calcul de A * B + C, A et B étant des entiers codés sur au plus m * k bits, C étant un entier codé sur au plus 2 * m * k bits, m et k étant des entiers non nuls, dans lequel: - on multiplie, dans un circuit de multiplication (119, 219), une donnée d'un premier registre (110, 210) de m * k bits par une données d'un quatrième registre (121, 221) de k bits; - on additionne des données d'un deuxième et d'un troisième registres (111, 112, 211, 212) de m * k bits avec le résultat sortant du circuit de multiplication (119, 219); - on mémorise une retenue éventuelle résultant d'un débordement de l'addition; - on mémorise un résultat intermédiaire dans les deuxième et troisième registres (111, 112, 211, 212); et - on répète les opérations précédente en changeant la donnée du quatrième registre (121, 221) et en additionnant la retenu éventuelle mémorisée à la place du mot de poids le plus faible à additionner dès que le mot de poids le plus faible a été additionné. 7. Procédé selon la revendication 6, caractérisé en ce que l'on mémorise entièrement une opérande dans un cinquième registre (240) de m * k bits pour fournir l'opérande de manière successive au quatrième registre (121). 8. Procédé selon l'une des revendications 6 ou 7, caractérisé en ce que l'on effectue en parallèle une deuxième multiplication dont le résultat est additionné avec un décalage de k bits. 9. Procédé de calcul d'opération modulaire sur des opérandes de taille supérieur à m * k bits dans lequel les opérandes sont traitées par mots de m * k bits, caractérisé en ce que l'on utilise le procédé de l'une des revendications 6 à 8.