FR 2741973 A1 19970606 FR 9514614 A 19951204 Procédé de production d'un paramètre Jo associé à la mise en oeuvre d'opération modulaire selon la méthode de Montgomery L'invention concerne un procédé de production d'un paramètre de calcul intervenant dans la mise en oeuvre d'opérations modulaires selon la méthode de Montgomery. Les opérations modulaires selon la méthode de Montgomery permettent d'effectuer des calculs modulaires dans un corps fini GF(2n) (corps de Gallois de 2n éléments) sans effectuer de division. 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écrits par exemple dans la 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 SGS-THOMSON MICROELECTRONICS S.A. et référencé 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 multiplications modulaires, en utilisant la méthode de Montgomery. Il fait l'objet d'une demande de brevet européen, publiée sous la référence 0 601 907 A3, et est illustré figure 2 (cette figure correspondant à la figure 2 de la demande de brevet européen citée). La méthode de montgomery permet le calcul de l'opération de base, dite Pfield Cette opération de base consiste, à partir de trois données binaires, A (multiplicande), B (multiplieur inférieur à N) et N (modulo) un entier impair, codées sur un nombre entier n de bits, à produire une donnée binaire notée Pfield (A, B)N, codée sur n bits, telle que Pfield (A, B)N = A * B * I mod N, avec I = 2-n mod N. Classiquement, n est égal à 256, 512, et dans un futur très proche 1024. Pour la résolution de l'opération Pfield, on utilise une base de travail, c'est à dire que certains des calculs nécessaires à la résolution s'effectuent sur Bt bits au lieu de n bits, par exemple Bt = 32. On note qu'il existe un entier k tel que k * Bt > n > (k - 1) * Bt. L'utilisation d'une base de travail permet de réduire la surface des circuits de calcul, surtout des circuits de multiplication, tout en gardant une vitesse de traitement intéressante. Pour la résolution de l'opération Pfield(A, B)N = S, un algorithme très utilisé fait appel aux variables suivantes: - A un entier codé sur n bits et décomposé en k mots de Bt bits notés A0 à Ak_1, - B un entier codé sur n bits et représenté sur un mot de (k * Bt) bits, - N un entier impair codé sur n bits et représenté sur un mot de (k * Bt) bits. On notera NO le mot de Bt bits correspondant aux Bt bits de poids faible de N, - S(i) un entier codé sur (k * Bt) + 1 bits représentant une valeur actualisée du résultat S pendant une itération i, - X et Z deux entier codé sur ((k + 1) * Bt) + 1 bits, - Y0 un entier codé sur Bt bits - J0 un entier codé sur Bt bits et tel que ((J0 * NO) + 1) mod 2Bt = 0 L'algorithme mathématique qui est transposable aussi bien sur un circuit intégré que sur un traitement logiciel est le suivant: - mise à 0 de S(0), - mise en oeuvre d'une boucle indicé par i, i variant de 1 à k: Bl: calcul de X = S(i-1) + (B * Ai_-), B2: calcul de Y = (X * J0) mod 2Bt o l'opération mod 2Bt ne correspond qu'à une troncature, B3: calcul de Z = X + (Y *N), B4: calcul de S(i) = Z \ 2Bt, o le symbole \ représente une division entière, B5: si S(i) est supérieur à N alors on soustrait N à S(i), - on peut récupérer le résultat S = S(k) = Pfield(A, B)N. En cryptographie, lors du codage (ou du décodage) d'un message, on utilise de nombreuses fois ce type d'opération. Il est donc d'un grand intérêt de réaliser cet algorithme le plus rapidement possible. Dans le temps de calcul intervient le temps de calcul du paramètre J0. Actuellement, diverses méthodes de calcul théorique sont connues pour son calcul, il existe par exemple un algorithme d'Euclide étendu et également un algorithme de Stein étendu, il existe également une méthode par exponentiation modulaire et une autre méthode utilisant une division modulaire. Ces méthodes ne sont pas directement portables sur des circuits intégrés et le calcul de ce paramètre J0 se fait classiquement de manière logicielle avec l'aide d'un coprocesseur arithmétique. Il n'existe pas de publication révélant un circuit dédié au calcul de ce paramètre JO. L'invention a pour but de proposer deux procédés de production de ce paramètre de calcul JObug qui permet de réaliser ce calcul rapidement. Un premier procédé revient à effectuer J0*N0 pour déterminer J0 au cours du calcul afin d'obtenir -1 mod 2Bt. Un deuxième procédé revient à effectuer J0*N0+1 pour déterminer J0 au cours du calcul afin d'obtenir O mod 2Bt. Un autre but est de proposer un circuit peu encombrant dédié à ce calcul et donc pouvant être facilement intégrable dans un circuit ayant besoin de réaliser ce calcul. L'invention propose ainsi un premier procédé de production dans un circuit intégré d'un paramètre J0 associé à la mise en oeuvre d'opération modulaire selon la méthode de Montgomery, J0 étant codés sur Bt bits, caractérisé en ce que l'on effectue les étapes suivantes: El: chargement d'une information No codée sur Bt bits, le bit de poids faible de NObug étant égal à 1, dans un premier et un troisième registre de Bt bits, E2: chargement d'un 1 dans le bit de poids fort d'un deuxième registre de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt - 1, chaque itération comprenant les étapes suivantes: Bi: on décale le contenu du premier registre de une unité vers la droite, B2: on teste le bit de poids faible du premier registre: Tl: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre de une unité vers la droite et on charge un O sur le bit de poids fort, T2: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres dans un additionneur, une sortie de l'additionneur étant reliée à une entrée du premier registre, une sortie du troisième registre étant bouclée sur son entrée, E4: le troisième registre contient le paramètre J0 désire. L'invention propose aussi un deuxième procédé de production dans un circuit intégré d'un paramètre J0 associé à la mise en oeuvre d'opération modulaire selon la méthode de Montgomery, J0 étant codé sur Bt bits, caractérisé en ce que l'on effectue les étapes suivantes: El: chargement du nombre 1 représenté sur Bt bits dans un premier registre de Bt bits, E2: chargement d'une information No codée sur Bt bits, le bit de poids faible de No étant égal à 1, dans un troisième registre de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt, chaque itération comprenant les étapes suivantes: Bi: on teste le bit de poids faible du premier registre: Ti: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre de une unité vers la droite et on charge un 0 sur le bit de poids fort, T2: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres dans un additionneur, une sortie de l'additionneur étant reliée à une entrée du premier registre, une sortie du troisième registre étant bouclée sur son entrée, B2: on décale le contenu du premier registre de une unité vers la droite, E4: le deuxième registre contient le paramètre J0 désiré. Des variantes de ces deux procédés qui sont plus lentes que ces procédés mais plus rapide que l'art antérieur sont également proposées. En effet, l'homme du métier appréciera d'avoir des variantes plus simple à cadencer et, dans certains cas, d'avoir un procédé de durée fixe, le fait d'avoir une durée fixe pouvant apparaître comme un avantage sécuritaire dans certaines utilisations. L'invention a également comme autre but de proposer un circuit électronique de calcul d'un paramètre J0 codé sur Bt bits, J0 étant défini tel que ((J0 * NO) + 1) mod 2Bt = 0, No étant codé sur Bt bits, caractérisé en ce qu'il comporte: un premier, un deuxième et un troisième registres de n bits ayant chacun une entrée série et une sortie série, le troisième registre ayant son entrée reliée à sa sortie, un circuit additionneur ayant une première entrée série reliée à la sortie série du premier registre, et ayant une deuxième entrée série et une sortie série reliée à l'entrée série du premier registre, un circuit de multiplexage ayant une sortie reliée à la deuxième entrée série du circuit additionneur, une première entrée reliée à la sortie série du troisième registre et une deuxième entrée reliée à fil qui est à un potentiel correspondant à un zéro logique, un circuit de test ayant une entrée reliée à la sortie série du circuit additionneur et une sortie reliée à l'entrée série du deuxième registre. L'invention sera mieux comprise, et d'autres particularités et avantages apparaîtront dans la description ci-après lue conjointement aux dessins annexés, dans lesquels: - la figure 1 représente un circuit de cryptage dans lequel intervient le paramètre de calcul J0 - la figure 2 représente schématiquement un circuit permettant de mettre en oeuvre des opérations modulaires selon la méthode de Montgomery, - la figure 3 représente un circuit, selon l'invention, mis en oeuvre dans la production du paramètre de calcul J0, - les figures 4 et 5 représentent des registres de taille variable pouvant être utilisés avec l'invention. La figure 1 représente un circuit de cryptage 1 qui comporte un processeur de traitement 2, par exemple un microprocesseur 8, 16 ou 32 bits, une mémoire 3, un coprocesseur 4, un circuit dédié au calcul de J0 5 et un bus de communication 6. Le bus de communication 6 relie entre eux le processeur 2, la mémoire 3, le coprocesseur 4 et le circuit de calcul de Jo. Ce bus de communication 6 sert également à recevoir un message clair ou crypté qui après traitement va ressortir, après un certain temps de traitement, par ce même bus de communication 6 après avoir été crypté ou décrypté. Un tel circuit de cryptage 1 permet plusieurs possibilités de traitement. Le bus de communication 6 englobe tous les signaux qui s'échangent à l'intérieur du circuit de cryptage 1. Une première possibilité de traitement est purement logicielle. Le processeur de traitement 2 va effectuer tous les calculs du cryptage ou du décryptage à l'aide d'un programme stocké dans la mémoire 3. Un tel traitement ne nécessite pas la présence du coprocesseur 4 et du circuit de calcul de JO 5 mais prend un temps de traitement considérable. Une deuxième possibilité de traitement consiste à faire traiter tous les calculs par le coprocesseur 4, le processeur 2 ne sert qu'à contrôler le bon déroulement des opérations. Cette possibilité est très rapide mais limite le cryptage à des opérations utilisant des données compatibles avec le coprocesseur 4 et de ce fait empêche de faire certains calculs. L'utilisation d'un circuit de calcul de JO 5 permet d'optimiser le calcul spécifique du paramètre Jo. Une troisième possibilité de traitement consiste à une utilisation mixte du processeur 2, du coprocesseur 4 et du circuit de calcul de JO. Cela permet de pouvoir traiter tous les types de cryptage avec une durée inférieure à la première possibilité purement logicielle. La figure 2 représente le coprocesseur 4 d'arithmétique modulaire. Il comprend: - trois registres à décalage 10, 11 et 12 à entrée et sortie série. Ces registres comportent chacun un même nombre n de cellules, avec n = m * Bt. Ces registres pourront être subdivisables, par exemple en registres de n/2 cellules, et en registres de Bt bits. - des multiplexeurs 13, 14 et 15 sont placés respectivement devant les registres 10, 11 et 12. On placera également des multiplexeurs devant les subdivisions si celles ci existent. - trois registres 16, 17 et 18 comportant chacun Bt cellules. Les registres 16 et 17 et 18 sont des registres à sortie parallèle et entrée série. - deux circuits de multiplication 19 et 20 comprenant chacun une entrée série, une entrée parallèle et une sortie série. L'entrée parallèle du circuit de multiplication 19 est reliée à la sortie du registre 16 par le biais d'une bascule de mémorisation 21 de Bt cellules. L'entrée parallèle du circuit de multiplication est reliée à l'une des sorties des registres 17 ou 18, par le biais d'une bascule de mémorisation 22 de Bt cellules. Cette bascule 22 est elle-même reliée à l'une des sorties des registres 17 et 18, par le biais d'un multiplexeur 23 à deux entrées parallèles et une sortie parallèle. - des multiplexeurs 24, 25, 25', 26, 36 et 38. - un démultiplexeur 39. - des circuits de soustraction série 27, 28 et 29. - des circuits d'addition série 30 et 31. - des circuits de retardement 32, 33 et 34 pour retarder de Bt temps de cycle la propagation de données binaires. - un circuit 35 de stockage de résultat de comparaison. Pour plus de détails, on pourra se reporter à la demande de brevet européen citée (EP - 0 601 907 A3), et en particulier aux passages page 15 lignes 29 à 53 et page 17 ligne 51 à page 18 ligne 54 pour avoir plus de détail sur la description du circuit. Dans un tel circuit, lorsque l'on désire effectuer une opération Pfield (A, B)N, on procédera par exemple comme indiqué dans le brevet européen cité (EP - 0 601 907 A3) page 19 lignes. En résumé, on effectuera les étapes suivantes: - El: on charge les données de départ qui sont A0, représentant les Bt bits de poids faible de A, dans le registre 16, B dans le registre 10, N dans le registre 12, J0 qui a été calculé par un processeur de traitement 2 externe au coprocesseur 4, dans le registre 17, - E2: Calcul de la première itération o X, Y, et Z sont des données en transit dans le coprocesseur 4, et o S est chargé dans le registre 11: Bl: calcul de X = B * A0, B2: calcul de Y = (X * J0) mod 2Bt, o l'opération mod 2Bt ne correspond qu'à une troncature, B3: calcul de Z = X + (Y * N) B4: calcul de S = Z \ 2Bt o le symbole \ représente une division entière, B5: si S est supérieur à N alors on soustrait N à S, E3: Calcul des itérations suivantes ou i varie de 1 à m-l: Bl: chargement de Ai à la place de A0, B2: calcul de X = S + (B * Ai), B3: calcul de Y = (X * J0) mod 2Bt o l'opération mod 2Bt ne correspond qu'à une troncature, B4: calcul de Z = X + (Y *N), B5: calcul de S(i) = Z \ 2Bt, o le symbole \ représente une division entière, B6: si S(i) est supérieur à N alors on soustrait N à S(i), - E4: A la dernière itération, S est chargé dans le registre 10. Pour plus de détails, on se reportera au brevet européen citée (EP - 0 601 907 A3) et plus particulièrement aux passages page 2 ligne 42 à page 6 ligne 17 et page 19 lignes 1 à 49. Comme on peut le constater, J0 est calculé de manière externe au coprocesseur. Pour remplacer un calcul logiciel relativement lent, l'invention propose un circuit 5 dédié entre autre au calcul de J0. Une réalisation préférée de ce circuit 5 est visible figure 3 et il comporte entre autre: un premier, un deuxième et un troisième registre à décalage 40, 41 et 42 de Bt bits ayant chacun une entrée série et une sortie série, trois multiplexeurs 43, 44 et 45 ayant chacun une première et une deuxième entrée et une sortie, un additionneur 46 ayant une première et une deuxième entrée série et une sortie série et un circuit de test 47 ayant une entrée et une sortie. Ces différents éléments sont reliés entre eux comme suit: le premier registre 40 a son entrée reliée à la sortie du multiplexeur 43, le premier registre 40 a sa sortie reliée à la première entrée de l'additionneur 46, le deuxième registre 41 a son entrée reliée à la sortie du circuit de test 47, le deuxième registre a sa sortie reliée à une borne de sortie, le troisième registre a son entrée reliée à la sortie du multiplexeur 44, le troisième registre a sa sortie reliée d'une part à la première entrée du multiplexeur 44 et d'autre part à la première entrée du multiplexeur 45, le multiplexeur 43 a sa première entrée reliée d'une part à la sortie de l'additionneur 46 et d'autre part à l'entrée du circuit de test 47, le multiplexeur 43 a sa deuxième entrée reliée à une première borne d'entrée, le multiplexeur 44 a sa deuxième entrée reliée à une deuxième borne d'entrée, le multiplexeur 45 a sa deuxième entrée reliée à un zéro logique (en général OV). Les signaux de commande des multiplexeurs et des registres ne sont pas représenté afin de clarifier le schéma de la figure 3. Les différents signaux de commande sont générés par une machine d'état facilement réalisable par l'homme de l'art après avoir lu le déroulement du procédé de production du paramètre J0 utilisant ce circuit. Avec un tel circuit, ou l'une de ses variantes, plusieurs séquencements sont possibles mais très peu permettent d'obtenir le calcul de J0. Un premier procédé d'utilisation de ce circuit permettant le calcul de J0 utilise les étapes suivantes: El: chargement d'une information No codée sur Bt bits, le bit de poids faible de Nobug étant égal à 1, dans un premier et un troisième registre 40 et 42 de Bt bits, par l'intermédiaire des première et deuxième bornes d'entrée et par l'intermédiaire des multiplexeurs 43 et 44, E2: on décale le contenu du deuxième registre 41 de une unité vers la droite, on charge un 1 sur le bit de poids fort de ce deuxième registre 41, on additionne bit à bit le contenu du premier registre 40 avec un zéro dans l'additionneur 46 série, la sortie de l'additionneur 46 étant reliée à l'entrée du premier registre 40, on teste le deuxième bit de poids faible à la sortie de l'additionneur 46 à l'aide du circuit de test 47, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt - 1, autrement dit la machine d'état qui séquencera le circuit répètera (Bt 1) fois les étapes d'une itération de boucle, chaque itération comprenant les étapes suivantes: Bi: on décale le contenu du premier registre 40 de une unité vers la droite, ceci correspondant à une division par deux du contenu de ce registre en oubliant le reste, B2: suivant le résultat du dernier test effectuer, on réalise l'une des deux opérations suivantes: Tl: si le bit contrôlé était égal à 1, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 0, avec le circuit de test 47, sur le bit de poids fort du deuxième registre 41, on additionne bit à bit le contenu du premier registre 40 avec un zéro logique dans l'additionneur 46, la sortie de l'additionneur 46 étant reliée à l'entrée du premier registre 40, on teste le deuxième bit de poids faible à la sortie de l'additionneur 46 à l'aide du circuit de test 47, T2: si le bit contrôlé était égal à 0, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 1, avec le circuit de test 47, sur le bit de poids fort du deuxième registre 41, on additionne bit à bit le contenu des premier et troisième registres 40 et 42 dans un additionneur 46, une sortie de l'additionneur 46 étant reliée à l'entrée du premier registre 40, la sortie du troisième registre 42 étant bouclée sur son entrée, on teste le deuxième bit de poids faible à la sortie de l'additionneur 46 à l'aide du circuit de test 47, E4: le troisième registre contient le paramètre J0 désiré, on peut à présent récupérer le résultat sur la borne de sortie. L'utilisation de ce premier procédé de calcul de J0 n'est pas optimisé. En effet certaines étapes comportent des opérations inutiles qui visent à simplifier au maximum le séquencement du circuit. On notera cependant le temps mis pour réaliser un tel procédé, ce temps est mesuré en nombre de cycles d'horloge utilisé par le séquencement du procédé: - les étapes El et E2 utilisent chacune Bt cycles d'horloge, - l'étape E3 utilise (Bt - 1) fois les étapes B1 et B2, - l'étape B1 utilise un cycle d'horloge, l'étape B2 utilise soit l'étape T1 soit l'étape T2 qui utilisent chacune Bt cycles d'horloge, - l'étape E4 utilise Bt cycles d'horloge, - au total, le procédé utilise 2 * Bt + (Bt - 1) * (Bt + 1) + Bt = Bt2 + (3 * Bt) - 1 cycles d'horloge, en comptant l'étape E4. Si on décide d'intégrer un tel dispositif dans un coprocesseur, par exemple du type décrit dans le brevet européen cité (EP - 0 601 907 A3), le deuxième registre 41 peut coïncider avec le registre 17, cela permet de supprimer Bt cycles d'horloge et d'obtenir le paramètre J0 en BT2 + (2 * Bt) - 1 cycles d'horloge. Une deuxième utilisation du circuit permettant le calcul de J0 utilise les étapes suivantes: El: chargement du nombre 1 représenté sur Bt bits dans un premier registre 40, E2: chargement d'une information No codée sur Bt bits, le bit de poids faible de No étant égal à 1, dans un troisième registre 42 de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt, chaque itération comprenant les étapes suivantes: Bl: suivant le résultat du dernier test effectué, on réalise l'une des deux opérations suivantes, pour la première itération on effectue T2: Tl: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un O sur le bit de poids fort, on additionne bit à bit le contenu du premier registre 40 avec un zéro dans l'additionneur 46, la sortie de l'additionneur 46 étant reliée à l'entrée du premier registre 40, on teste le deuxième bit de poids faible à la sortie de l'additionneur 46 à l'aide du circuit de test 47, T2: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres 40 et 42 dans un additionneur 46, une sortie de l'additionneur 46 étant reliée à une entrée du premier registre 40, une sortie du troisième registre 42 étant bouclée sur son entrée, on teste le deuxième bit de poids faible à la sortie de l'additionneur 46 à l'aide du circuit de test 47, B2: on décale le contenu du premier registre 40 de une unité vers la droite, E4: le deuxième registre 41 contient le paramètre J0 désiré, on peut le récupérer sur la borne de sortie. L'utilisation de ce deuxième procédé de calcul de J0 n'est également pas optimisé. En effet certaines étapes comportent des opérations inutiles qui visent à simplifier au maximum le séquencement du circuit. On notera cependant le temps mis pour réaliser un tel procédé, ce temps est mesuré en nombre de cycles d'horloge utilisé par le séquencement du procédé: les étapes El et E2 utilisent chacune Bt cycles d'horloge, - l'étape E3 utilise Bt fois les étapes Bi et B2, - l'étape B1 utilise soit l'étape T1 soit l'étape T2 qui utilisent chacune Bt cycles d'horloge, - l'étape B2 utilise un cycle d'horloge, - l'étape E4 utilise Bt cycles d'horloge, - au total, le procédé utilise 2 * Bt + Bt * (Bt + 1) + Bt = Bt2 + (4 * Bt) cycles d'horloge, en comptant l'étape E4. Pour ce deuxième procédé, on peut également décider d'intégrer le dispositif dans un coprocesseur, par exemple du type décrit dans le brevet européen cité (EP - 0 601 907 A3), le deuxième registre 41 peut coïncider avec le registre 17, cela permet de supprimer Bt cycles d'horloge et d'obtenir le paramètre J0 en BT2 + (3 * Bt) cycles d'horloge. Ce deuxième procédé est légèrement plus lent que le premier procédé énoncé, on remarque toutefois que pour ce procédé, les étapes El et E2 peuvent être confondue ce qui permet encore d'économiser Bt cycles d'horloge. D'autres améliorations peuvent être apportées en modifiant le circuit 5. Le circuit de test 47 peut avoir son entrée reliée soit à la sortie du premier registre 40 soit directement à l'un des bits du premier registre 40, comme on peut le voir en pointillés sur la figure 3. Une telle modification permet de ne plus faire d'additions du premier registre 40 avec un zéro logique, ce qui est nécessaire si on place le circuit de test 47 en sortie de l'additionneur 46. On pourra alors se limiter à effectuer, pour le premier procédé, les étapes suivantes dont l'ordre peut être changé: El: chargement d'une information No codée sur Bt bits, le bit de poids faible de Nobug étant égal à 1, dans un premier et un troisième registre 40 et 42 de Bt bits, E2: chargement d'un 1 dans le bit de poids fort d'un deuxième registre de Bt bits 41, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt - 1, chaque itération comprenant les étapes suivantes: Bl: on décale le contenu du premier registre 40 de une unité vers la droite, B2: on teste le bit de poids faible du premier registre 40: Tl: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 0 sur le bit de poids fort, T2: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres 40 et 42 dans un additionneur 46, une sortie de l'additionneur 46 étant reliée à une entrée du premier registre 40, une sortie du troisième registre 42 étant bouclée sur son entrée, E4: le troisième registre 41 contient le paramètre J0 désiré, on peut le récupérer sur la borne de sortie. Bien sur l'homme de l'art comprendra que le test peut être également fait sur le deuxième bit de poids le plus faible du premier registre 40 à condition de réaliser le décalage de une unité vers la droite après avoir effectuer le test. Un tel procédé permet de réaliser le calcul du paramètre J0 en un nombre de cycles d'horloge variable qui décomposé ainsi: - l'étape El utilise Bt cycles d'horloge, l'étape E2 qui peut être réalisée en même temps que El n'utilise aucun cycle d'horloge, - l'étape E3 réalise bt - 1 fois les étapes B1 et B2, B1 utilisant 1 cycle d'horloge et B2 utilisant 1 ou Bt cycles d'horloge, - l'étape E4 utilise Bt cycles d'horloge. Au total, en comptant E4, on utilise entre 4 * Bt - 2 et Bt2 + (2 * Bt) - 1 cycles d'horloge. Bien entendu suivant le mode de réalisation, on peut ou non soustraire les Bt cycles d'horloge utilisés dans l'étape E4. On pourra également modifier le deuxième procédé en se limitant aux étapes suivantes: El: chargement du nombre 1 représenté sur Bt bits dans un premier registre 40 de Bt bits, E2: chargement d'une information No codée sur Bt bits, le bit de poids faible de No étant égal à 1, dans un troisième registre 42 de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt, chaque itération comprenant les étapes suivantes: Bl: on teste le bit de poids faible du premier registre 40: Tl: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 0 sur le bit de poids fort, T2: si le bit de poids faible est égal à 1, alors ondécale le contenu du deuxième registre 41 de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres 40 et 42 dans un additionneur 46, une sortie de l'additionneur 46 étant reliée à une entrée du premier registre 40, une sortie du troisième registre 42 étant bouclée sur son entrée, B2: on décale le contenu du premier registre 40 de une unité vers la droite, E4: le deuxième registre 41 contient le paramètre J0 désiré, on peut le récupérer sur la borne de sortie. Ici aussi, l'homme de l'art comprendra que le test peut être également fait sur le deuxième bit de poids le plus faible du premier registre 40 à condition de réaliser le décalage de une unité vers la droite après avoir effectuer le test. Ce procédé permet de réaliser le calcul du paramètre J0 en un nombre de cycles d'horloge variable qui décomposé ainsi: - les étapes El et E2 utilisent Bt cycles d'horloge que l'on ne compte qu'une seule fois, - l'étape E3 réalise bt fois les étapes B1 et B2, B1 utilisant 1 cycle d'horloge et B2 utilisant 1 ou Bt cycles d'horloge, - l'étape E4 utilise Bt cycles d'horloge. Au total, en comptant E4, on utilise entre 4 * Bt et Bt2 + (3 * Bt) cycles d'horloge. Bien entendu suivant le mode de réalisation, on peut ou non soustraire les Bt cycles d'horloge utilisés dans l'étape E4. Comme on peut le constater, ce deuxième procédé, même modifié, utilise Bt + 1 cycles d'horloge de plus que le premier procédé. Il est possible de supprimer ces cycles supplémentaires en modifiant les étapes El et E3 comme suit: El: chargement de (No + 1) mod 2Bt dans un premier registre 40 et chargement d'un 1 en bit de poids fort dans un deuxième registre, E3: mise en oeuvre d'une boucle indexée par un indice i, i variant de 1 à Bt 1, chaque itération comprenant les étapes B1 et B2 définies précédemment. Le fait d'utiliser No peut apparaître comme une étape de calcul qui ne serait pas comptabilisée. Il est tout à fait possible de réaliser ce calcul en "soft" dans le processeur de traitement 2 tout en effectuant le chargement des données No et No + 1. Si le processeur de traitement est peu performant et ne permet pas ces traitements simultanés, il est alors possible à l'homme du métier de rajouter un additionneur série supplémentaire entre une borne d'entrée et le multiplexeur 43, l'addition s'effectuant simultanément avec le chargement sans rajouter de délais supplémentaire. Classiquement les bases de calcul utilisées sont de 32 bits, cela revient dans l'invention à utiliser des registres de Bt = 32 bits. Il est fort possible d'avoir prochainement des circuits utilisant des bases de calcul de taille supérieure par exemple 64 bits. L'invention propose donc d'utiliser des registres de taille variable comme décrit figure 4. La figure 4 montre un registre 40, qui pourrait être le registre 41 ou 42 qui est décomposé en deux sous-registres à décalage 50 et 51 de Bt bits ayant chacun une entrée et une sortie série, un multiplexeur 52 ayant une première entrée reliée à la sortie du registre 50, une deuxième entrée reliée à l'entrée du registre 50 et une sortie reliée à l'entrée du registre 51. Un tel dispositif se comporte comme un registre à décalage 40 ayant son entrée confondue avec l'entrée du registre 50 et sa sortie confondue avec la sortie du registre 51. Cependant suivant la commande du multiplexeur, le registre à décalage 40 aura une taille variant de Bt ou de 2 * Bt bits. L'homme de l'art n'aura aucun mal à imaginer un registre découpé en trois, quatre ou plus de sous-registres. Une autre possibilité utilisant une taille de registre variable est possible. Cette possibilité est applicable sur les registre 40 et 42. On a vu dans les procédé de production de J0 que l'on effectue jusqu'à Bt additions sur Bt bits. Or chaque addition effectuée nécessite en réalité un calcul sur un bit de moins que la précédente. On a donc imaginé un calcul utilisant des registres de taille variable pendant le déroulement du procédé. Le troisième registre 42 constitué comme décrit précédemment à ceci près qu'il est constitué de Bt sous- registres de un bit et donc de Bt-1 multiplexeurs. le premier registre 40 est constitué d'un registre 53 de Bt bits ayant une entrée série et une sortie parallèle, et d'un multiplexeur 54 ayant Bt entrées reliées à la sortie parallèle du registre 53. Le registre 40 ayant en fait comme entrée série, l'entrée série du registre 53 et comme sortie série la sortie du multiplexeur 54. l'utilisation de tels registres permet de remplacer le décalage de une unité vers la droite du contenu du premier registre 40 par une décrémentation de la taille des registres 40 et 42. Cela a pour effet de supprimer un cycle d'horloge à chaque itération de la boucle par rapport à la précédente. On obtient alors les nombres de cycles suivant: - pour le premier procédé détaillé (Bt2 / 2) + (2 * Bt) - 2 en comptant l'étape E4, - pour le deuxième procédé détaillé (Bt2 / 2) + (3, 5 * Bt) en comptant l'étape E4, - pour le troisième procédé détaillé (Bt2 / 2) + Bt - 1 en comptant l'étape E4, - pour le quatrième procédé détaillé (Bt2 / 2) + (3,5 * Bt) en comptant l'étape E4, On notera que pour les troisième et quatrième procédés, il s'agit du nombre maximal cycles d'horloge utilisés, le nombre minimal de cycle ne variant pas. Quelque soit le circuit utilisé, il est préférable de l'intégrer sur un coprocesseur, par exemple le coprocesseur 4. Une première possibilité a déjà été envisagée précédemment, elle consistait à substituer le deuxième registre 41 de l'invention au registre 17 du coprocesseur 4. Une deuxième possibilité est d'utiliser un maximum d'éléments du coprocesseur 4. On peut par exemple utiliser le registre 10 comme premier registre 40 et le registre 12 comme troisième registre 42 à condition d'avoir des registre 10 et 12 de taille variable. Il sera facile à l'homme de l'art de comprendre comment les multiplexeurs 13, 15, 36 et 18 se substituent aux multiplexeurs 43, 44 et 45. Il faut remplacer le circuit de soustraction 27 par un circuit capable d'effectuer aussi bien des additions que des soustractions pour avoir la fonctionnalité de l'additionneur 46. Enfin il faut substituer le registre 17 au deuxième registre 41. Pour pouvoir réaliser la fonctionnalité du calcul de J0, il ne manque plus qu'un circuit de test 47 qui aura sa sortie connectée à l'entrée du registre 17 et son entrée connectée à un des bits du registre 10, il manque également une connexion entre la sortie du circuit d'addition/soustraction qui remplace le circuit de soustraction 27 et une quatrième entrée du multiplexeur 13. L'homme de l'art pourra réaliser le même type de démarche avec un processeur ou un coprocesseur arithmétique et le circuit décrit dans l'invention sans s'éloigner de l'esprit de l'invention. De même d'autre variante du circuit sont possibles aussi bien dans le séquencement que dans la réalisation du circuit. REVENDICATIONS 1. Procédé de production dans un circuit intégré d'un paramètre J0 associé à la mise en oeuvre d'opération modulaire selon la méthode de Montgomery, J0 étant codé sur Bt bits, caractérisé en ce que l'on effectue les étapes suivantes: El: chargement d'une information No codée sur Bt bits, le bit de poids faible de No étant égal à 1, dans un premier et un troisième registre (40 et 42) de Bt bits, E2: chargement d'un 1 sur le bit de poids fort d'un deuxième registre (41) de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt - 1, chaque itération comprenant les étapes suivantes: Bi: on décale le contenu du premier registre (40) de une unité vers la droite, B2: on teste le bit de poids faible du premier registre (40): Tl: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un 0 sur le bit de poids fort, T2: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres (40 et 42) dans un additionneur (46), une sortie de l'additionneur (46) étant reliée à une entrée du premier registre (40), une sortie du troisième registre (42) étant bouclée sur son entrée, E4: le deuxième registre (41) contient le paramètre Jo désiré. 2. Procédé selon la revendication 1 caractérisé en ce que le bit testé du premier registre (40) est le deuxième bit de poids le plus faible du premier registre (40). 3. Procédé selon l'une revendication 1 ou 2, caractérisé en ce que la première alternative du test se déroule comme suit: Ti: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un 0 sur le bit de poids fort, on additionne bit à bit le contenu du premier registre (40) avec un zéro dans l'additionneur (46), la sortie de l'additionneur (46) étant reliée à l'entrée du premier registre (40). 4. Procédé selon la revendication 3, caractérisé en ce que l'étape E2 est la suivante: E2: on décale le contenu du deuxième registre (41) de une unité vers la droite, on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu du premier registre (40) avec un zéro dans l'additionneur (46), la sortie de l'additionneur (46) étant reliée à l'entrée du premier registre (40). 5. Procédé selon la revendication 4, caractérisé en ce que le test effectué pendant l'étape B2 est réalisé avec le bit de poids 21 de l'addition précédente au test. 6. Procédé selon l'une des revendications 1 à 5, caractérisé en ce que les premier, deuxième et troisième registres (40, 41, 42) sont munis de plusieurs multiplexeurs (52, 54) permettant d'avoir une taille variable. 7. Procédé selon la revendication 6, caractérisé en ce que la taille des premier et troisième registres (40 et 42) diminue pendant la production du paramètre J0. 8. Procédé de production dans un circuit intégré d'un paramètre J0 associé à la mise en oeuvre d'opération modulaire selon la méthode de Montgomery, J0 étant codé sur Bt bits, caractérisé en ce que l'on effectue les étapes suivantes: El: chargement du nombre 1 représenté sur Bt bits dans un premier registre (40) de Bt bits, E2: chargement d'une information No codée sur Bt bits, le bit de poids faible de No étant égal à 1, dans un troisième registre (42) de Bt bits, E3: mise en oeuvre d'une boucle, indicée par i, i variant de 1 à Bt, chaque itération comprenant les étapes suivantes: Bl: on teste le bit de poids faible du premier registre (40): Ti: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un 0 sur le bit de poids fort, T2: si le bit de poids faible est égal à 1, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un 1 sur le bit de poids fort, on additionne bit à bit le contenu des premier et troisième registres (40 et 42) dans un additionneur (46), une sortie de l'additionneur (46) étant reliée à une entrée du premier registre (40), une sortie du troisième registre (42) étant bouclée sur son entrée, B2: on décale le contenu du premier registre (40) de une unité vers la droite, E4: le deuxième registre (41) contient le paramètre J0 désiré. 9. Procédé selon la revendication 8, caractérisé en ce que l'on modifie les étapes El et E3 comme suit: El: chargement de (No + 1) mod 2Bt dans un premier registre (40) et chargement d'un 1 en bit de poids fort dans un deuxième registre (41), E3: mise en oeuvre d'une boucle indexée par un indice i, i variant de 1 à Bt - 1, chaque itération comprenant les étapes B1 et B2 définies dans la revendication 8. 10. Procédé selon l'une des revendications 8 ou 9, caractérisé en ce que la première alternative du test se déroule comme suit: Ti: si le bit de poids faible est égal à 0, alors on décale le contenu du deuxième registre (41) de une unité vers la droite et on charge un O sur le bit de poids fort, on additionne bit à bit le contenu du premier registre (40) avec un zéro dans l'additionneur (46), la sortie de l'additionneur (46) étant reliée à l'entrée du premier registre (40). 11. Procédé selon la revendication 10, caractérisé en ce que le test effectué pendant l'étape B1 est réalisé avec le bit de poids 21 de l'addition précédente au test, et en ce que le test valide l'étape T2 à la première itération. 12. Procédé selon l'une des revendications 8 à 11, caractérisé en ce que les premier, deuxième et troisième registres (40, 41, 42) sont munis de plusieurs multiplexeurs (52, 54) permettant d'avoir une taille variable. 13. Procédé selon la revendication 12, caractérisé en ce que la taille des premier et troisième registres (40 et 42) diminue pendant la production du paramètre J0. 14. Circuit électronique de calcul (5) d'un paramètre J0 codé sur Bt bits, J0 étant défini tel que ((Jo * NO) + 1) mod 2Bt = 0, No étant codé sur Bt bits, caractérisé en ce qu'il comporte: - un premier, un deuxième et un troisième registres (40, 41, 42) de n bits ayant chacun une entrée série et une sortie série, le troisième registre (42) ayant son entrée reliée à sa sortie, - un circuit additionneur (46) ayant une première entrée série reliée à la sortie série du premier registre (40), et ayant une deuxième entrée série et une sortie série reliée à l'entrée série du premier registre, - un circuit de multiplexage (45) ayant une sortie reliée à la deuxième entrée série du circuit additionneur (46), une première entrée reliée à la sortie série du troisième registre (42) et une deuxième entrée reliée à un fil qui est à un potentiel correspondant à un zéro logique, un circuit de test (47) ayant une entrée reliée à la sortie série du circuit additionneur (46) et une sortie reliée à l'entrée série du deuxième registre (41). 15. Circuit selon la revendication 14 caractérisé en ce que une borne de sortie du circuit est reliée à la sortie série du deuxième registre (41). 16. Circuit selon l'une des revendications 14 ou , caractérisé en ce que les premier, deuxième et troisième registres (40, 41, 42) sont munis de multiplexeurs afin de leur permettre d'avoir une taille variable. 17. Circuit selon l'une des revendications 14 à 16, caractérisé en ce que le circuit est intégré dans un coprocesseur (4). 18. Circuit selon la revendication 17, caractérisé en ce que les différents éléments du circuit sont reliés à d'autre éléments du coprocesseur (4) pour effectuer d'autres opérations modulaires.