FR 2745647 A1 19970905 FR 9605668 A 19960430 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 Gallois) 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 D1 consistant en une demande de brevet français publiée sous le numéro 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 Mvicroelectronics 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 européen publiée sous le numéro 0 601 907 A2 que l'on appellera par la suite le document D2. Ce coprocesseur est illustré sur la figure I (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, et 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. kI un entier. considérés pour le codage de A). 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 coprocesseur décrit dans le document D2. on a k = 32 et m = 8 ou 16. Ce circuit 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 0 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. 1l 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, 2 5 - deux registres 21 et 22 de k cellules. - des multiplexeurs 24, 25. 26, 36. 37 et 38. - uin démultiplexeur 39. - des circuits 27, 28 et 29 de soustraction série. - des circuits 30 et 31 d'addition série, 3 0 - 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, en particulier aux figures 2 et 3. et aux extraits de la description s'y rapportant: page 15 - ligne 54 à page 16 ligne 13, et page 17 - ligne 50 à page 18 - page 55. L'utilisation du circuit illustré sur la figure I pour réaliser une opération Pfield(A, B)N o A, B, et N sont codés sur n bits en m mots de k bits. N est impaire et A est découpé en m mots Ai,_ (avec i indice entier variant de I à m). comprend les étapes suivantes: 1 - initialisation du circuit - calcul de manière logicielle d'un paramètre J0 défini par la relation [(N * J0) + 1] mod 2k = 0 - chargement en série du paramètre J0 dans le registre 17. - chargement en série de B dans le registre 10. - chargement en série de N dans le registre 12. - chargement en série de A0 dans le registre 16. - chargement en série de n zéros logiques consécutifs dans le registre 1, - initialisation des deux circuits 19 et 20 de multiplication. des trois circuits 27. 28 et 29 de soustraction, et des deux circuits 30 et 31 d'addition. 2 0 2 - mise en oeuvre d'une boucle indicée par i avec i variant de 1 à m. - chargement en parallèle dans le registre 21 du contenu du registre 16. - réalisation de différentes opérations élémentaires afin d'effectuer les calculs suivants: X(i) = S(i - 1) + B * Ai 2 5 Y0(i) = [X(i) * J0] mod 2k, Z(i) = X(i) + [N * Yo(i)] S(i) = Z/2k. / étant la division entière. soustraction lors de l'itération suivante de N ou 0 à S suivant que S soit supérieur ou non à N, 3 0 3 - sortie du résultat S(k) par l'intermédiaire d'une borne de sortie. Pour plus de détails sur le déroulement d'un tel procédé. on peut se réfétrer au document D2. et plus particulièrement aux extraits suivants: page 4 - ligne 41 à page 6 - ligne 17 et page 19 - lignes 7 à 49. Jusqu'à présent, l'utilisation du circuit illustré sur la figure 1 permet d'optimiser des traitements (en terme de durée de calcul, de taille mémoire. etc.) pour des opérations modulaires utilisant une taille de donnée fixée, en l'occurrence 256 ou 512 bits (selon que m soit égal à 8 ou à 16). 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 ou mème 1024 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 flexibilité 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 1 5 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. Cette problématique ne se limite pas à des coprocesseurs d'arithmétique modulaire traitant des données d'une taille fixe de 256 ou 512 bits. Elle est également transposable plus généralement à des coprocesseurs manipulant des données et qu'on souhaite utiliser pour effectuer des opérations sur des données dont la taille dépasse leur capacité de traitement. Si on désire réaliser des opérations modulaires utilisant des opérandes d'une 2 5 taille supérieure à ce que gère le coprocesseur (c'est-à- dire en pratique à la taille des registres). on peut utiliser un processeur classique (8, 16, ou 32 bits). une mémoire et le coprocesseur de la figure 1, le coprocesseur servant à effectuer des multiplications. Il est possible d'effectuer avec le coprocesseur décrit dans D2 des multiplications A * B classiques sur des tailles allant jusqu'à n bits en procédant de la manière suivante I - initialisation - chargement dans le registre 17 de k zéros logiques. - chargement dans le registre 10 de B, - chargement dans le registre 11 de k zéros logiques. - chargement dans le registre 16 du mot Ao de k bits de A. - initialisation du multiplieur 19. - initialisation des circuits d'addition et de soustraction 28. 30 et 3 1. 2 - mise en oeuvre d'une boucle de calcul avec i indice variant de I à m: - chargement du contenu du registre 16 dans le registre 2 1. - réalisation, par décalage à droite simultané des registres 10 et 11. de la multiplication de Ai_ par B et de l'addition du contenu du registre 1 1 avec le résultat du produit, - stockage des k bits de poids faible dans le registre 12 par décalage à droite de k bits, - stockage des n bits de poids fort du résultat dans le registre I 1. - chargement du mot Ai dans le registre 16 (de préfétrence pendant le déroulement d'une ou de plusieurs étapes précédentes). A la fin d'un tel procédé, on a donc le poids faible du résultat dans le registre 12 et le poids fort du résultat dans le registre 11. Il suffit de rajouter une borne de sortie reliée à la sortie des registres 11 et 12 pour pouvoir récupérer le résultat en sortie du coprocesseur. 9 Il est possible d'effectuer la multiplication d'une donnée B codée sur n bits par une donnée A codée sur m' mots avec m' entier supérieur à ni. Pour cela. on exécute la boucle avec i variant de 1 à m'. Toutes les m itérations. on sort le contenu du registre I 2 par une borne de sortie. 2 5 Le coprocesseur pouvant être utilisé pour réaliser des multiplications classiques. il est possible de réaliser des opérations modulaires sur des opérandes codées sur iun nombre m' * k bits avec m'> m. Pour cela on manipule les opérandes A. B et N en les divisant en q (q entier) sous-opérandes de n bits AqÀ Aq-2... A0. Bq 1 Bq-2. BO N q1.? N2 0. On utilise le coprocesseur pour réaliser des multiplications 3 C classiques sur les sous-opérandes. La méthode est la suivante: 1.1 - Multiplication de B par la première sous-opérande de A I - On calcule A0 * Bo. Le résultat est de la forme RO10 Roo avec RO10 et R0O données codées sur m mots de k bits. On sort R 10 et Roo des registres 1 1 et 12 et on les stocke dans une mémoire. 2 - On calcule A0 * B1. Le résultat est de la forme R1 IRo I1 avec R 1 et R 1 codées sur m mots. On sort RI 1 et RO 1 des registres 1 1 et 12 et on les stocke dans une mémoire. Q- On calcule A0 * Bq _. Le résultat est de la forme Rlql ROqI avec Rlql et ROq_ codées sur m mots. On sort RlqîI et ROq_ des registres 11 et 12 et on les stocke dans une mémoire. 1.2 - Calcul du résultat de la multiplication de B par la première sous-opérande de A: - calcul de R10 + R 1 et stockage du résultat, noté X, - calcul de ci + Rlli + R02 (c1 étant la retenue du calcul précédant) et stockage du résultat noté X29 - calcul de cq_2 + R1 q-2 + ROq- 1 et stockage du résultat noté Xq_ 1 - calcul de cq 1 + R1 q- 1 et stockage du résultat noté Xq. Si on considère que Roo00 = X0, alors le résultat de la multiplication est la donnée Xq_.....Xl XO On pourra bien sûr effectuer les additions au fur et à mesure de la sortie des résultats, ce qui permet de minimiser la taille de la mémoire dans laquelle sont stockés les résultats. 1.3 - Calcul du résultat d'une multiplication 3 o X0 * Jo0 = Y. avec Y de la forme Y1 Y0. Y1 et Y0 étant codées sur m mots. sortie et mémorisation de Y0 1.4 - Calcul du résultat de la multiplication de la première sous-opérande de Y par N I - On calcule Y0 * No Le résultat est de la forme T10 Too avec T10 et TOo codées sur m mots. On sort T10 et Too des registres 11 et 12 et on les stocke dans une mémoire. 2 - On calcule Y0 * NI. Le résultat est de la forme Tl 1 T01 avec T1 I et TOI codées sur m mots. On sort Tl 1 et T01 des registres 1 1 et 12 et on les stocke dans une mémoire. Q- On calcule Y0 * Nql- Le résultat est de la forme Tlql TOql avec TlqI et TOq_ codées sur m mots. On sort TlqI et TOql des registres 11 et 12 et on les stocke dans une mémoire. 1.5 - Calcul du résultat de la multiplication de N par la première sous-opérande de Y: - calcul de T10 + T01 et stockage du résultat, noté L, - calcul de ci + T1 + T02 (c1 étant la retenue du calcul précédant) et stockage du résultat noté U-?. - calcul de cq_2 + Tl q2 + TOq_ et stockage du résultat noté Uq_. - calcul de cq 1 + Tlq- 1 et stockage du résultat noté U. Si on considère que Too = U0, alors le résultat de la multiplication est la 2 5 donnée Uq Uql.....UI U0 On pourra bien sûr effectuer les additions au fur et à mesure de la sortie des résultats, ce qui permet de minimiser la taille de la mémoire dans laquelle sont stockés les résultats. 1.6 - Calcul du résultat de la multiplication modulaire de B par la première sous- 3 0 opérande de A - Calcul de U + X et stockage du résultat, noté Z. Le résultat Z de l'addition est de la forme (c) Zq Zq1.....4 A. -stockage de S(1) = Z/2k - (N ou 0). 2 - Reprise des étapes 1. i à 1.6 en considérant la deuxième sousopérande de A en modifiant l'étape 1.2 tel que ci-dessous: - calcul de Ro10 + Roi et stockage du résultat. notéi. - calcul de c1 + R1 + R02 (cl étant la retenue du calcul précédant) et stockage du résultat noté W-. - calcul de cq_2 + RI q-2 + ROq-I et stockage du résultat noté Wq_. - calcul de cq 1 + Rlq-1 et stockage du résultat noté \'q. Puis: - calcul de W + S(I) qui donne alors le résultat de la multiplication X avec X delaformeXq Xq 1.Xq.X X0etW=Wq Wq 1.....W1 Wo avecWO 1 5 Ro0. Q - Reprises des étapes ci-dessus en considérant la g-ième sous-opérande de A. Le résultat final du calcul est S(q) - (N ou 0). Comme on le voit, le procédé nécessite un certain nombre d'échanges avec l'extérieur. Ces échanges sont pénalisants en terme de temps de calcul et d'espace mémoire pour stocker d'une part les résultats extraits du coprocesseur et d'autre part le programme exécutable correspondant au procédé qui est complexe. Généralement. 2 5 I'intérêt des coprocesseurs est d'utiliser une tfréquence d'horloge plus rapide que celle des autres éléments qui leur sont reliés. On minimise donc l'intérêt d'utiliser un coprocesseur si les traitements auxquels il est destiné ilmpliquent des échanges avec des circuits (processeurs classiques, mémoires. etc.) fonctionnant plus lentement et à la vitesse desquels il devra s'adapter lors des échanges. 3 0 L'inventeur a cherché à modifier le coprocesseur illustré sur la figure I de sorte à améliorer le traitement de l'opération ci- dessus, et plus particulièremient à diminuer le temps de traitement. Ainsi. l'invention concerne un dispositif comprenant un premier. un deuxième et un troisième registres, au moins une borne d'entrée pour recevoir des données binaires à stocker dans ces registres, un circuit de multiplication permettant de réaliser une opération de multiplication entre deux données stockées dans les premier et troisième registres. un premier circuit d'addition permettant de réaliser une opération d'addition entre une donnée stockée dans le deuxième registre et une donnée produite par le circuit de multiplication, un circuit de soustraction placé entre le deuxième registre et le circuit d'addition permettant de réaliser une opération de soustraction entre une donnée stockée dans le deuxième registre et une donnée stockée dans un quatrième registre. une cellule à retard et un deuxieme circuit d'addition placés entre le premier circuit d'addition et l'entrée du deuxième registre, des moyens de multiplexage permettant de fournir à une entrée d'un des circuits d'addition le contenu du deuxième registre ou un état logique permanent. de relier une autre entrée dudit circuit d'addition à une sortie du circuit de multiplication et de relier une sortie dudit circuit d'addition à une entrée du deuxième registre. L'invention sera mieux comprise, et d'autres particularités et avantages apparaîtront, à la lecture de la description qui va suivre et qui est à lire conjointement 2 0 aux dessins annexés dans lesquels: - la figure I représente un coprocesseur 4 selon l'état de la technique. - la figure 2 représente un exemple typique de structure de circuit comprenant un coprocesseur, - les figures 3, 4 et 5 représentent des coprocesseurs selon l'invention. La figure 2 représente un circuit 1 de cryptage comprenant un processeur 2 de traitement (par exemple un processeur 8. 16. ou 32 bits). une mémoire 3. iun coprocesseur 4, et un bus 5 de communication. Le bus 5 permet de relier les éléments 2.3 et 4 ensemble et/ou à l'extérieur du circuit I afin d'échanger des données et/ou des 3 0 signaux de commande. La mémoire permet de stocker des données binaires de différents formats. Le processeur 2 permet de gérer les échanges d'informations entre la mémoire 3. le coprocesseur 4 et l'extérieur. Le coprocesseur est une version modifiée du coprocesseur illustré sur la figure 1, tel qu'illustrée sur la figure 3 ou 4. La figure 3 représente un coprocesseur selon l'invention. Le circuit illustré sur la figure 3 comprend - trois registres à décalage 10, 11 et 12 à entrée série et sortie série. Ces registres comportent un nombre n (n entier) de cellules, avec n = m * k (m et k entiers). - un multiplexeur 13 comprenant trois entrées série et une sortie série. la sortie série étant reliée à l'entrée du registre 10, la première entrée étant reliée à une première borne d'entrée 50. la deuxième entrée étant reliée à la sortie du registre 10. - un multiplexeur 14 comprenant deux entrées série et une sortie série. la sortie série étant reliée à l'entrée du registre 11, la première entrée étant reliée à une deuxième borne d'entrée 5 1, - un multiplexeur 15 comprenant trois entrées série et une sortie série. la sortie série étant reliée à l'entrée du registre 12, la première entrée étant reliée à une troisième 1 5 borne d'entrée 52, la deuxième entrée étant reliée à la sortie du registre 1 2. - trois registres 16. 17 et 18 de k cellules comprenant une entrée série et une sortie parallèle. l'entrée du registre 17 étant reliée à une quatrième borne d'entrée 53. - deux circuits 19 et 20 de multiplication comprenant une entrée série. une entrée parallèle pour recevoir k bits, et une sortie série. 2 o - deux registres 21 et 22 de mémorisation de k cellules comprenant une entrée et une sortie parallèles, l'entrée du registre 21 étant reliée à la sortie du registre 16. la sortie du registre 21 étant reliée à l'entrée parallèle du circuit de 1multiplication 10. et la sortie du registre 22 étant reliée à l'entrée parallèle du circuit de multiplication 20. - un multiplexeur 23 comprenant deux entrées parallèles et une sortie parallèle. 2 5 la première entrée du multiplexeur 23 étant reliée à la sortie du registre 17. la deuxième entrée du multiplexeur 23 étant reliée à la sortie du registre 18. la sortie du multiplexeur 23 étant reliée à l'entrée du registre 22, - deux multiplexeurs 24 et 25 comprenant chacun deux entrées série et une sortie série. la sortie du multiplexeur 24 étant reliée à l'entrée du registre 16. la première 3 0 entrée du multiplexeur 24 étant reliée à une cinquième borne d'entrée 54. la sortie du multiplexeur 25 étant reliée à l'entrée série du circuit de multiplication 19. la première entrée du multiplexeur 25 étant reliée à un zéro logique. - un multiplexeur 26 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 20. la première entrée étant reliée à un zéro logique, - des circuits 27, 28 et 29 de soustraction comprenant chacun deux entrées série et une sortie série, la première entrée du circuit 27 étant reliée à la sortie du registre 10. la sortie du circuit 27 étant reliée à chacune des deuxièmes entrées des multiplexeurs 24 et 25 et également à une borne de sortie 55. la première entrée du circuit 28 étant reliée à la sortie du registre 11. - des circuits 30 et 31 d'addition comprenant chacun deux entrées série et une sortie série, la première entrée du circuit 30 étant reliée à la sortie du circuit 19, la sortie du circuit 30 étant reliée à la deuxième entrée du multiplexeur 26. la sortie du circuit 31 étant reliée à la première entrée du circuit 29. - des cellules à retard 32. 33 et 34 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 32 étant reliée d'une part à la troisième entrée du multiplexeur 26 et d'autre part à l'entrée de la cellule 33, la sortie de la cellule 33 étant reliée à la deuxième entrée du circuit 29, l'entrée de la cellule 34 étant reliée à la sortie du circuit 30. et la sortie de la cellule 34 étant reliée à la première entrée du circuit 31. - uin circuit 35 de comparaison comprenant deux entrées série et deux sorties, la première entrée étant reliée à la sortie du circuit 31. la deuxième entrée étant reliée à la sortie du circuit 29, - deux multiplexeurs 36 et 37 comprenant chacun deux entrees serie. une entrée de sélection, et une sortie série, chacune des premières entrées étant reliée à uin zéro 2 5 logique. chacune des entrées de sélection étant reliée à l'une des sorties du circuit 35. la sortie du multiplexeur 36 étant reliée à la deuxieme entrée du circuit 27. la sortie du multiplexeur 37 étant reliée à la deuxième entrée du circuit 28. - uLn multiplexeur 38 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 3 0 sortie du registre 12, la sortie étant reliée d'une part à l'entrée de la cellule 32 et d'autre part aux deuxièmes entrées des multiplexeurs 36 et 37. - uin démultiplexeur 39 comprenant une entrée série et deux sorties série. l'entrée étant reliée à la sortie du circuit 20, les sorties étant reliées respectivement à l'entrée du registre 18 et à la deuxième entrée du circuit 31. - un multiplexeur 40 comprenant deux entrées série et une sortie série, la première entrée étant reliée à la sortie du circuit 28, 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 30; - un multiplexeur 41 comprenant deux entrées série et une sortie série, la première entrée étant reliée à la sortie du circuit 30. la deuxième entrée étant reliée à la sortie du circuit 31, et la sortie étant reliée aux troisièmes entrées des multiplexeurs 13 et 15 et à la deuxième entrée du multiplexeur 14, - deux bornes de sortie 56 et 57 reliées respectivement aux sorties des registres 1l et 12. 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 circuit. 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) de manière simultanée, ce qui diminue la durée des échanges entre le circuit et des éléments extérieurs. 2 0 D'autre part, en ce qui concerne les éléments du circuit 4. la description ci-dessus doit aussi être comprise comme étant une description plus fonctionnelle que structurelle. En d'autres termes, il importe de pouvoir réaliser les connexions telles qu'indiquées entre des éléments réalisant les fonctions énumérées (multiplexage. addition, soustraction, etc.). En particulier, les multiplexeurs pourront être regroupées 2 5 entre eux et comporter alors un nombre d'entrées, de sorties. et d'entrées de sélection plus importants. En ce qui concerne les multiplexeurs 25. 36. 37. et 40 qui ont uine entrée recevant un signal fixe (zéro ou un logique), on pourra les incorporer fonctionnellement aux circuits 19. 27, 28 et 30 si ceux-ci comprennent une entrée de commande permettant d'imposer un état logique sur une de leur entrées. 3 o Par rapport au circuit de la figure 1. le circuit de la figure 3 comprend donc deux multiplexeurs 40 et 41 supplémentaires et le multiplexeur 14 a sa première entrée reliée à une borne d'entrée. Le multiplexeur 40 permet de forcer à zéro la deuxième entrée du circuit d'addition 30 indépendamment du contenu du registre 1. Le multiplexeur 41 permet de relier directement la sortie du circuit 30 directement aux entrées des registres 10, 11 et 12, ce qui permet de réaliser simplement une opération non modulaire A * B + C. On ne retarde pas le résultat dans la cellule 34. contrairement au circuit illustré sur la figure 1. D'autre part. on s'affranchit de la prise en compte des circuits 20 et 31 qui implique, pour réaliser une multiplication classique, dans le cas du circuit de la figure 1, de réaliser une opération modulaire en considérant que J0 = 0. On peut grâce à l'invention réaliser une multiplication non modulaire sans tenir compte des éléments du circuit 4 utilisés dans le cadre d'une opération Pfield. On peut donc envisager dans un tel cas de limiter la consommation du circuit 4 en inhibant le fonctionnement des éléments utilises seulement dans le cadre d'une opération Pfield. On notera que le multiplexeur 40 aurait pu être placé entre la sortie du registre I 1 et la première entrée du circuit 28. On pourrait aussi utiliser un multiplexeur 40 à trois entrées. la troisième entrée étant reliée à la sortie du registre 11. Cette solution permet de pouvoir s'affranchir de la présence du circuit 28. On peut alors diminuer la consommation globale du circuit 4 en prévoyant d'isoler ce circuit et éventuellement d'autres circuits (tels que le multiplexeur 37) qui lui sont rattachés fonctionnellement. quand le circuit 28 n'est pas 2 0 utilisé. Le coprocesseur illustré à la figure 3 permet, grâce à l'ajout des éléments 40 et 41, de réaliser des opérations Pfield sur des opérandes codées sur un nombre m' * k bits avec m' > m de manière plus simple et plus rapide que le circuit de la figure 1. Pour cela on manipule les opérandes A, B et N en les divisant en q (q entier) sous- opérandes de n bits: AqI Aq2... Ao, Bq _1 Bq_2... B, Nq_1 _2. On notera que A et B pourront avoir en pratique des tailles différentes. On suppose ici. pour simplifier, que A et B ont la même taille. On ne rentrera pas dans le détail de fonctionnement au pas à pas des éléments du coprocesseur, celui-ci ne posant pas de 3 0 problème à l'homme du métier connaissant le document D2. La méthode est la suivante: 1. 1 - Multiplication de B par la premièsous-opérande de A: I -OncalculeA0 * B0 +0. Le résultat est de la forme Ri0 ROO avec R10 et R00 données codées sur m mots de k bits. On sort ROO = X0 du registre 12 et on le stocke dans une mémoire (par exemple la mémoire 3 du circuit 1). 2-OncalculeA0 * B1 + RI 0. Le résultat est de la forme R1 1 'O I avec RI 1 et R01 codées sur m mots. On sort Roi = X1 du registre 12 et on le stocke dans une mémoire. Q - On calcule A( * Bql + Rlq-2 Le résultat est de la forme Rlq -1 ROq-I avec Rlq_ et ROq I codées sur m mots. On sort Rlq_ = Xq et ROq_ = Xq 1 des registres 1 et 12 et on les stocke dans une mémoire. Le résultat de la multiplication est la donnée Xq XqI.....X X0. 1.2 - Calcul du résultat d'une multiplication: X0 * J0 = Y. avec Y de la forme Y1 Y0, Y1 et Y étant codées sur m mots. 2 0 sortie et mémorisation de Y0 1.3 - Calcul du résultat de la multiplication de la première sous-opérande de Y par N: I - On calcule Y0 * No + X0. Le résultat est de la forme T1 0 TOO avec Tl 0 et TOO codées sur m mots. 2 5 On sort TOO = Z0 du registre 12 et on le stocke dans une mémoire. En pratique, on pourrait montrer que Z0 = 0. et il n'est donc pas nécessaire de le mémoriser. 2 - On calcule Y0 * NI + T 10 Le résultat est de la forme Tl 1 T01 avec T1 I et T01 codées sur m mots. 3 0 On sort T01 = U1 du registre 12 et on le stocke dans une mémoire. Q - On calcule Y0 * Nq_ 1 + Tl q-2 Le résultat est de la forme Tlq I TOq I avec Tlq I et TOq I codées sur m mots. On sort Tlql = Uq et TOq I = Uq 1 des registres 11 et 12 et on les stocke dans une mémoire. Le résultat de la multiplication est la donnée Uq Uq_..... U I U0. 1.4 - Calcul du résultat de la multiplication modulaire de B par la première sous- opérande de A: - Calcul de U + X et stockage du résultat, noté Z. Le résultat Z de l'addition est de la forme (c) t.....Z - stockage de S(1) = Z/2k - (N ou 0). 2 - Reprise des étapes 1. i à 1.4 en considérant la deuxième sousopérande de A en modifiant l'étape 1.1 tel que ci-dessous 1 -OncalculeA1 * Bo +0. Le résultat est de la forme RO10 Roo avec RO10 et Roo données codées sur m mots. On sort Roo00 = W0 du registre 12 et on le stocke dans une mémoire (par exemple la mémoire 3 du circuit 1). 2-OncalculeA1 * B1 +R10. Le résultat est de la forme RI I R0 avec R1 I et R01 codées sur mi mots. On sort Ro1 = W1 du registre 12 et on le stocke dans une memoire. Q - On calcule A1 * Bq_ 1 + Rlq-2 Le résultat est de la forme Rlq_ ROq_ avec Rlq_ et ROq_ codées suir m mots. On sort RlqI = Wq et ROq_ = Wq 1 des registres 11 et 12 et on les stocke dans une mémoire. 3 0 Calcul de W + S(l) qui donne alors le résultat de la multiplication X avec X de la forme Xq Xq_.....X 0 Q - Reprises des étapes ci-dessus en considérant la q-ième sous-opérande de A. Le résultat final du calcul est S(q) - (N ou 0). Gain en temps de calcul. Le temps de calcul est mesuré en nombre de cycles d'horloge du coprocesseur. La multiplication du contenu du registre 10 par le contenu du registre 16 nécessite (n + 2. k) cycles (en ne tenant pas compte du chargement des registres et de l'initialisation du circuit) avec le circuit de l'état de la technique, et (n ± k) cycles avec 1 0 le circuit de l'invention, la cellule 34 n'étant pas traversée. On considérera par ailleurs que les additions sont réalisées à l'aide d'un additionneur série dont le fonctionnement est cadencé par l'horloge du coprocesseur. Une addition nécessite alors n cycles. - Méthode selon l'état de la technique. Calcul desAi * B: q. q. m.(n + 2. k) = n..(m + 2) Calcul des W: q. q. n = n.. CalculdesX:(q- 1).(q +).n =n.( - 1) Calcul des Y: q. m. (n + 2. k) = n. q. (m + 2) CalculdesT: q. q. m. (n + 2. k)=n n. (m + 2) Calcul des U: q. q. n = n. CalculdesZ:q.(q+ l). n = n. ( +q) Le nombre de cycles nécessaires pour réaliser les calculs est donné par la tormule suivante: 2. n. (m +4). q- + n. (m + 3). q - n. 2 5 - Méthode en utilisant l'invention. Calcul des A *B + R: q. q. m. (n + k) = n. (m+). CalculdesX:(q- 1).(q +). n = n. -n Calcul des Y q. m. (n + k) = n. (m +). q Calcul des T: q. q. m. (n + k) = n. (m + 1) CalculdesZ: q. (q+ l).n=n. q- +n.q Le nombre de cycles nécessaires pour réaliser les calculs est donné par la tformule suivante: 2. n. (m + 2). q- + n. (m + 2). q - n. Considérons q = 3 et k = 32. Pour m = 8 ( n = 256), le premier procédé nécessite 63 488 cycles et le deuxième procédé nécessite 53 504 cycles, soit un gain de 15.72 %. Pour m = 16 (n = 512), le premier procédé nécessite 212 992 cycles et le deuxième procédé nécessite 193 024 cycles, soit un gain de 9.38 %. On remarquera que ces calculs ne tiennent pas compte des échanges de données entre le coprocesseur et l'extérieur, ces échanges étant beaucoup plus nombreux dans la mise en oeuvre de la première méthode. Le temps nécessaire pour effectuer ces échanges dépend de la fréquence d'horloge utilisée pour cadencer le fonctionnement des éléments extérieurs (tels que la processeur de traitement 2. la mémoire 3 et le bus de communication 5 du circuit 1), cette fréquence étant en pratique généralement inférieure à la fréquence de l'horloge du coprocesseur. La capacité du coprocesseur selon l'invention à mettre en oeuvre des opérations 1 5 du type A * B + C présente également d'autres avantages. Méthode RSA. La méthode de cryptage RSA nécessite de faire des calculs de type C = MD mod N avec M un message à crypter ou à décrypter, N un modulo tel que N = P * Q, avec P et Q des nombres entiers premiers, et D tel que (D * E) mod [(P - 1) *(Q 1)]= 1. avec E connu. Un algorithme pour réaliser ce calcul est le suivant A = (M mod p)D mod (P - 1) mod P B = (M mod Q)D mod (Q - 1) mod Q U=Q-1 modP Si A une entrée du multiplexeur à une borne d'entrée. Opération Pfield avec dépassement de capacité. En pratique. le fonctionnement du coprocesseur est commandé par un circuit de séquencement qui contrôle les différents éléments du coprocesseur selon l'opération que l'on souhaite réaliser. Typiquement, ce circuit de séquencement comprend des compteurs et/ou décompteurs affectés au contrôle des boucles de calcul et au contrôle des opérations au sein des boucles. Le nombre de passages dans le registres 16, pour une opération donnée, est fixé par la taille de l'opérande A. Connaissant la taille de l'opérande. il est possible d'incrémenter un compteur au rythme des passages, et de comparer la valeur du compteur au nombre de passages nécessaires, de telle sorte qu'on arrête le coprocesseur quand l'opération est terminée. Un problème peut se poser si la valeur de comptage représentative de la taille de l'opérande est supérieure à la capacité de 2 0 comptage du compteur. Supposons par exemple que l'on souhaite réaliser Pfield(A. B)N avec A codé sur m" * k bits, la capacité de comptage du compteur étant de m ' * k bits avec m' inférieur à m". L'opération est réalisable avec le circuit illustré sur la figure 3. On réalise en premier lieu l'opération Pfield avec les m' premier blocs de A et on stocke le résultat dans le registre 11. IL suffit alors de relancer l'opération avec les (m" - mrn') derniers blocs de A. le contenu du registre 11 étant lors de la première multiplication additionné à la donnée produite par le circuit 19. Cela nécessite de connaitre l'état d'un seul signal de commande indiquant quelle est l'entrée du multiplexeur 40 à sélectionner. 3 o Tel que le circuit selon l'état de la technique fonctionne. cette méthode n'est pas possible. En effet. la mise en oeuvre d'une opération Pfield comprend le chargement automatique dans le registre 11 de zéros logiques. Autrement dit. on doit traiter de manière externe le problème de dépassement de capacité, ce qui et préjudiciable en terme de temps de calcul et d'espace mémoire (il faut stocker le programme adéquate). * La figure 4 illustre un autre coprocesseur 4 selon l'invention. Il comprend les mêmes éléments que le circuit illustré sur la figure 3. Les multiplexeurs 40 et 41 sont disposés autrement. On utilise alors le circuit d'addition 31 au lieu du circuit d'addition 30. Le multiplexeur 40 comprend trois entrées série et une sortie série. La première entrée de ce multiplexeur 40 est reliée à la première entrée du circuit 28. La sortie du 1 0 circuit 28 est reliée à la deuxième entrée du circuit 30, de manière analogue au circuit 4 illustré sur la figure 1. La deuxième entrée du multiplexeur 40 est reliée à la sortie de la cellule 34 (cette sortie n'étant plus reliée à la première entrée du circuit 31). La troisième entrée du multiplexeur 40 est reliée à un zéro logique. La sortie du multiplexeur 40 est reliée à la première entrée du circuit 31. Le multiplexeur 41 comprend deux entrées série et une sortie série. La première entrée de ce multiplexeur 41 est reliée à la sortie du circuit 19. La deuxième entrée du multiplexeur 41 est reliée à la deuxième sortie du démultiplexeur 39 (qui n'est plus reliée à la deuxième entrée du circuit 31). La sortie du multiplexeur 41 est reliée à la deuxième entrée du circuit 31. Quant à la sortie du circuit 31, elle est reliée aux entrées des multiplexeurs 13, 14, et 15 tel qu'illustré sur la figure 1. On remarquera que le circuit illustré sur la figure 4 est moins flexible d'utilisation que celui de la figure 3. En ce qui concerne la mise en oeuvre d'une opération non modulaire A * B ou A * B + C, la configuration illustrée sur la figure 4 est équivalente en terme de temps de calcul et de complexité a la configuration 2 5 illustrée sur la figure 3. Par contre, elle ne permet pas de mise en oeuvre d'opérations modulaires telles que le permet le circuit de la figure 3. Cela vient du fait que le zéro logique imposé sur la troisième entrée du multiplexeur 40 est situé en aval des circuits et 26. Autrement dit, si il est nécessaire de considérer un contenu du registre 11 composé de zéros, on doit d'une manière ou d'une autre charger ce registre avec les dits 3 0 zeros. On doit soit rajouter une entrée au multiplexeur 14. soit rajouter un multiplexeur en amont du circuit 30, ce multiplexeur ayant le même rôle que le multiplexeur 40 du circuit illustré sur la figure 3. Autrement dit, l'encombrement est alors plus important pour le circuit de la figure 4 que pour le circuit de la figure 3. et son utilisation est plus complexe. On remarquera que la première entrée du multiplexeur 40 du circuit de la figure 3 aurait pue être reliée à la sortie du circuit 28. La figure 5 illustre un autre coprocesseur selon l'invention. Il comprend les mêmes éléments que le circuit illustré sur la figure 3, ces éléments étant agencés de la même manière. Il comprend en outre un circuit 42 d'addition, un multiplexeur 43 à deux entrées et un circuit 44 de gestion de retenue. Ce circuit permet de mettre en oeuvre une opération du type A * B + C + D, avec 1 0 C et D données stockées dans les registres 1 1 et 12, et A * B étant produit par le circuit 19 de multiplication. Dans l'exemple illustré sur la figure 5, le circuit 42 d'addition est disposé entre la sortie du registre 11 et le circuit 28 de soustraction. Le circuit 42 comprend deux entrées série et une sortie série. Sa sortie série est reliée à la première entrée du circuit 28. Sa première entrée est reliée à la sortie du registre 11 et sa deuxième entrée est reliée à la sortie du multiplexeur 43. Le multiplexeur 43 a une entrée reliée à la sortie du registre 12 et son autre entrée reçoit un zéro logique. Le circuit 42 fournit ainsi soit le résultat de l'addition des contenus des registres 11 et 12 (C + D). soit le contenu du registre 11 (C + 0). 2 O On notera que le circuit d'addition aurait pu être disposé différemment, par exemple entre le circuit 28 et le circuit 30, voire en aval du circuit 30. Le multiplexeur 43 pourra être incorporé tfonctionnellement au circuit 42 si celui-ci comprend une ou des entrées de commande permettant d'imposer un ou des états logiques sur sa deuxième ou ses deux entrées. 2 5 Le circuit 44 a pour tfonction de détecter un éventuel dépassement de capacité lors d'opérations intermédiaires. Ce dépassement intervient si l'addition d'une donnée avec une donnée fournie par le circuit 19 de multiplication aboutit à un résultat codé sur uin nombre de bits supérieur à la taille des données produites par le circuit 19 de multiplication (c'est-à-dire pratiquement à la somme des tailles des registres 10 et 16). 3 0 Ce cas peut se présenter par exemple si les opérations sont etfftectuees sur des données codées sur un nombre de bits supérieur à n. Ce cas peut également. comme on le verra par la suite. se présenter pour des opérations sur des données de taille égale à n. Ce circuit 44 détecte le dépassement dans le circuit d'addition placé le plus en aval (c'est à dire le circuit 30 dans l'exemple illustré sur la figure 5). c'est-à-dire dans le circuit d'addition intervenant en dernier dans une boucle de calcul. Il agit, dans la boucle de calcul suivante, au niveau de l'un des circuits d'addition (dans l'exemple il s'agit du circuit 42) de manière à ce que la retenue soit prise en compte. Le coprocesseur illustré à la figure 5 permet, grâce à l'ajout des éléments 42, 43 et 44 de réaliser des opérations Pfield sur des opérandes codées sur un nombre m' * k bits avec m'> m de manière plus simple et plus rapide que les circuits des figures 1, 3 et 4. Pour cela on manipule les opérandes A, B et N en les divisant en q (q entier) sous- opérandes de n bits: Aq 1 Aq_2... A0, Bq_, Bq2...,N- N1 q2... N 0. On notera que A et B pourront avoir en pratique des tailles différentes. On suppose ici, pour simplifier, que A et B ont la même taille. On ne rentrera pas dans le détail de fonctionnement au pas à pas des éléments du coprocesseur. celui-ci ne posant pas de problème à l'homme du métier connaissant le document D2. La méthode est la suivante: I. 1 - Multiplication de B par la première sous-opérande de A: I -Oncalcule A( *B0 +0+0. Le résultat est de la forme RO10 R00 avec RO10 et ROO données codées sur m mots de k bits. On sort RO = X0 du registre 12 et on le stocke dans une mémoire (par exemple la mémoire 3 du circuit 1). 2 - OncalculeA0 * B1 + Ri0 +0. Le résultat est de la forme R 1 RO 1 avec RI et R 1 codées sur m mots. On sort RO 1 = XI du registre 12 et on le stocke dans une mémoire. Q - On calcule Ao * Bq_, + Rlq-2 + 0. Le résultat est de la forme Rlq_ ROq_ avec Rlq_ et RoqI codées sur m mots. On sort Rlq l = Xq et R0q 1 = Xq 1 des registres 11 et 12 et on les stocke dans une mémoire. Le résultat de la multiplication est la donnée Xq Xq 1.... X1 X0. Dans cette étape 1.1, la méthode est identique à celle mise en oeuvre par le circuit de la figure 3. 1.2 - Calcul du résultat d'une multiplication X 0 * J= Y. avec Y de la forme YI Y0. Y1 et Y0 étant codées sur m mots, sortie et mémorisation de Y0 1.3 - Calcul du résultat de la multiplication de la première sous-opérande de Y par N: ! - On calcule Y0* No + X + 0. Le résultat est de la forme T1 0 TOO avec T1 0 et TOO codées sur m mots. On sort Too = Z0 du registre 12 et on le stocke dans une mémoire. 2 - On calcule Y0 * NI + X1 + T10 Le résultat est de la forme T 1 T01 avec Tl 1I et TO I codées sur m mots. On sort T01 =Z1 du registre 12 et on le stocke dans une mémoire. Q - On calcule Y0 * Nq_ I + Xq_ I + TI q-2 Le résultat est de la forme Tlq_ TOq_ avec Tlq I et TOq_ codées sur m mots. On sort Tlq_ et TOql = Zq 1 des registres I 1 et 12 et on les stocke dans une mémoire. 2 5 On calcule Xq + TI q I =Zq. Le résultat Z de la multiplication est la donnée Zq Z Stockage de S(1) = Z/2k - (N ou 0))= Sq (1) SI1 (1).) ( (1). 2 - Reprise des étapes 1. 1 à 1.3 en considérant la deuxième sousopérande de A 3 o en modifiant l'étape 1.1 tel que ci-dessous - On calcule A1 * B0 + S) () + 0. Le résultat est de la forme R10 R00 avec RI0 et Roo données codées sur m mots. On sort RO = X0 du registre 12 et on le stocke dans une mémoire (par exemple la mémoire 3 du circuit 1). 2-OncalculeA1 * B1 +SI (1)+R10. Le résultat est de la forme RI 1 Ro 1 avec RI 1 et R 1 codées sur m mots. On sort R%1 = X1 du registre 12 et on le stocke dans une mémoire. Q - On calcule A1 * Bq_1 + Sql (1) + Rlq_2 Le résultat est de la forme Rlql ROql avec RlqI et ROq_ codées sur m mots. On sort Rlq I et ROq_ = Xq 1 des registres 1 1 et 12 et on les stocke dans une memoire. Calcul de Xq = Rlq- 1 + Sq(1) qui donne alors le résultat de la multiplication Xavec X delaformeXq XqI..... X Y). Q - Reprises des étapes ci-dessus en considérant la q-ième sous-opérande de A. Le résultat final du calcul est S(q) - (N ou 0). Les améliorations illustrées sur la figure 5 permettent d'obtenir. par rapport au circuit de la figure 3. un gain de temps dans la mise en oeuvre des suites d'operations. en augmentant le nombre d'opérations réalisées simultanément. Ce gain de temps est réalisé à partir de l'étape 1.3. Gain en temps de calcul. Le temps de calcul est mesuré en nombre de cycles d'horloge du coprocesseur. Calcul des A * B + R + S q. q. m. (n + k) n. (mI + 1). Calcul desXq:(q- 1). n = n.q-n Calculdes Y q. m. (n + k) = n. (m+ 1). q Calcul des Y *N + T + X: q. q. m. (n + k) = n. (m- 1).m Calcul des Zq: q. n = n. q Le nombre de cycles nécessaires pour réaliser les calculs est donné par la formule suivante:2. n. (m + 1). c2 + n. (m + 3). q - n. Considérons q = 3 et k = 32. Pour m = 8 ( n = 256), le procédé selon l'état de la technique nécessite 63 488 cycles et le procédé ci-dessus nécessite 49 664 cycles, soit un gain de 21.77 % (le gain était de 15.72 % pour le circuit de la figure 3). Pour m = 16 (n = 512), le premier procédé nécessite 2121 992 cycles et le deuxième procédé ci-dessus nécessite 185 344 cycles, soit un gain de 12.98 % (le gain était de 9.38 % pour le circuit de la figure 3). On voit donc que le gain supplémentaire en temps de calcul par rapport au circuit de la figure 3 est de l'ordre de 5 % pour m = 8 et de 3.5 % pour m = 16. En réalité, le gain supplémentaire sera plus important. les calculs de gain ne prenant pas en compte les échanges du coprocesseur avec son environnement. 1_5 Bien que l'on ait considéré l'ajout du circuit 42 d'addition dans le circuit de la figure 4, on comprendra que l'on aurait pu tout aussi bien réaliser cette amélioration en modifiant le circuit illustré sur la figure 5, la mise en oeuvre de l'opération A * B + C +D étant alors réalisée avec le circuit 31 d'addition. 2 0 Illustration du dépassement de capacité. On considèrera pour simplifier n égal à 16 et k égal à 8. A titre d'exemple, supposons que l'on souhaite calculer X = A * B + C + D. avec A = FFFF, B = B1 B0 = FFFF avec B0 = OOFF et B1 = FFOO. C = FFFF et D = FFFF. A. B, C et D sont donc codées sur n bits. 2 5 Le résultat X est FFFF FFFF, autrement dit il est codé sur 2.n bits. Le résultat final de l'opération peut donc être stocké dans deux registres de taille n. Pour effectuer l'opération, on va stocker A dans le registre 10. B0 et B1 sont stockés successivement dans le registre 16, et le résultat final X est stocké dans les registres 11 pour les poids fort et dans le registre 12 pour les poids faibles. 3 0 On procède de la manière suivante Etape I: A * B0 + C + D = FFFF * FF + FFFF + FFFF = FFFF * FF + 01 FFFE = FE FFOI + 01 FFFE = 100 FEFF Z = OOFE, codée sur n bits, est stockée dans le registre 11. FF (première moitié du poids faible de X) est stockée dans la première moitié du registre 12. La retenue 1 n'est pas stockée dans le registre 11 et est à ajouter à l'étape suivante. Etape 2: A * Bi + O + Z (+ 1) = FFFF * FFOO + 0000 FE0O (+ 100 0000) = FFFF * FFOO + 0100 FEOO = FEFF 0100 + 0100 FEO0 = FFFF FFOO Les O en italique sont représentés pour qu'il y ait une cohérence mathématique entre les étapes I et 2. En pratique, ils ne sont pas présents réellement dans la mise en oeuvre de la boucle de l'étape 2. Le multiplexeur 43 est sélectionné de manière à fournir en permanence l'état logique "zéro" sur sa sortie. 2 0 Le poids fort de X (FFFF) est stocké dans le registre I I et le reste du poids faible de X (FF) est stocké dans le registre 12. la première moitié du poids faible de X étant décalée vers la deuxième moitié du registre 12. Globalement on a FFFF dans ce registre. Le résultat final est donc bien FFFF FFFF. sans dépassement de la capacité de 2 5 stockage du registre 11 lors du décalage en fin de première étape dans ce registre de la donnée Z. REVENDICATIONS 1 - Dispositif (4) comprenant: - un premier, un deuxième et un troisième registres ( 10. I 1. 16). - au moins une borne d'entrée (50, 51, 54) pour recevoir des données binaires à stocker dans ces registres, - un circuit (19) de multiplication permettant de réaliser une opération de multiplication entre deux données stockées dans les premier et troisième registres (I 1. 16), - un premier circuit (30) d'addition permettant de réaliser une opération d'addition entre une donnée stockée dans le deuxième registre ( I 1) et une donnée produite par le circuit (19) de multiplication, - un circuit (28) de soustraction placé entre le deuxième registre ( 11) et le circuit (30) d'addition permettant de réaliser une opération de soustraction entre une donnée stockée dans le deuxième registre (11) et une donnée stockée dans un quatrième registre (12). - une cellule à retard (34) et un deuxième circuit (31) d'addition placés entre le premier circuit (30) d'addition et l'entrée du deuxième registre ( 11). - des moyens (40, 41) de multiplexage permettant de fournir à une entrée d'un des circuits (30. 3 1) d'addition le contenu du deuxième registre ( 1 1) ou un état logique permanent, de relier une autre entrée dudit circuit d'addition à une sortie du circuit (19) de multiplication et de relier une sortie dudit circuit d'addition à une entrée du deuxième registre. 2 - Dispositif selon la revendication 1, caractérisé en ce que les moyens de multiplexage comprennent un premier et un deuxième multiplexeurs (40. 41). le premier multiplexeur (40) ayant une entrée recevant un état logique permanent. ulne 2 5 entrée reliée à la sortie du circuit (28) de soustraction, et une sortie reliée à une entrée du premier circuit (30) d'addition. le deuxième multiplexeur (41) avant une entrée reliée à la sortie du premier circuit (30) d'addition et une sortie reliée à l'entrée du deuxième registre ( 1). 3 - Dispositif selon la revendication 2, caractérisé en ce que le premier 3 multiplexeur (40) comprend une troisième entrée reliée à la sortie du deuxième registre ( l). 4 - Dispositif selon la revendication 1, caractérisé en ce que les movens de multiplexage comprennent un premier et un deuxième multiplexeurs (40, 41), le premier multiplexeur (40) ayant une entrée recevant un état logique permanent, une entrée reliée à la sortie du deuxième registre (11), et une sortie reliée à une entrée du circuit (28) de soustraction, le deuxième multiplexeur (41) avant une entrée reliée à la sortie du premier circuit (30) d'addition et une sortie reliée à l'entrée du deuxième registre ( 11). - Dispositif selon la revendication 1, caractérisé en ce que les moyens de multiplexage comprennent un premier et un deuxième multiplexeurs (40. 41), le premier multiplexeur (40) ayant une entrée recevant un état logique permanent, une entrée reliée à la sortie du deuxième registre (1l 1), et une sortie reliée à une première entrée du deuxième circuit (31) d'addition. le deuxième multiplexeur (41) avant une entrée reliée à la sortie du circuit (19) de multiplication et une sortie reliée à une 1 5 deuxième entrée du deuxième circuit (3 1) d'addition. 6 - Dispositif selon la revendication 1, caractérisé en ce que les moyens de multiplexage comprennent un premier et un deuxième multiplexeurs (40, 41). le premier multiplexeur (40) ayant une entrée recevant un état logique permanent, une entrée reliée à la sortie du circuit (28) de soustraction. et une sortie reliée à une première entrée du deuxième circuit (31) d'addition. le deuxième multiplexeur (41) ayant une entrée reliée à la sortie du circuit (19) de multiplication et une sortie reliée à une deuxième entrée du deuxième circuit (31) d'addition. 7 - Dispositif selon l'une des revendications 5 ou 6. caractérisé en ce que le premier multiplexeur (40) a une entrée reliée à une sortie de la cellule à retard (34). 2 5 8 - Dispositif selon l'une des revendications 5 à 7. caractérise en ce que l'entrée du deuxième registre (11) est reliée à la sortie d'un multiplexeur (14) avant une de ses entrées qui reçoit un état logique permanent. 9 - Dispositif selon l'une des revendications I à 8. caractérisé en ce que l'entrée du deuxième registre (11) est reliée à la sortie d'un multiplexeur (14) avant une de ses 3 o entrées reliée à une borne d'entrée (51). - Dispositif selon l'une des revendications I à 9. caractérisé en ce qu'il comprend un troisième circuit (42) d'addition permettant de réaliser en combinaison avec le premier ou le deuxième circuit (30, 31) d'addition une opération d'addition entre les données stockées dans les deuxième et quatrième registres (Il. 12) et la donnée produite par le circuit (19) de multiplication. I l - Dispositif selon la revendication 10, caractérisé en ce qu'il comprend des moyens (43) de multiplexage permettant de fournir au troisième circuit d'addition le contenu du quatrième registre ou un état logique permanent. 12 - Dispositif selon l'une des revendications 10 à 11. caractérisé en ce qu'il comprend un circuit (44) de gestion de retenue pour détecter un éventuel dépassement de capacité lors d'opérations intermédiaires telles que le résultat est codé sur un nombre de bits supérieur à la taille des données produites par le circuit (19) de multiplication. ce dépassement de capacité étant pris en compte lors d'opérations postérieures. 13 Dispositif (1) comprenant un processeur (2). une mémoire (3), unL bus de communication (5) et un dispositif (4) défini selon l'une des revendications 1 a I 12.