Brevet FR2984551A1 — publié le 20130621

PROCEDE DE GENERATION DE NOMBRES PREMIERS PROUVES ADAPTE AUX CARTES A PUCE La présente invention concerne la cryptographie et en particulier la génération de nombres premiers. Elle concerne également les circuits intégrés tels que ceux équipant les cartes à puce, et la génération de nombres premiers dans de tels circuits intégrés. Depuis l'invention de Diffie et Hellman en 1976, la cryptographie à clé publique s'est considérablement développée depuis 1976. Aujourd'hui, elle est utilisée dans de nombreuses applications, telles que des applications de paiement, de commerce électronique, et d'identification, ainsi que pour chiffrer et signer des données, et dans de nombreux dispositifs tels que des cartes à puce, des clés USB et de nombreux microprocesseurs et ordinateurs. La plupart des systèmes de cryptographie comme RSA (Rivest, Shamir, Adleman), DSA (Digital Signature Algorithm) et DH (Diffie Hellman key exchange) sont basés sur l'utilisation de grands nombres premiers pour générer des clés cryptographiques, ou plus généralement des données secrètes susceptibles d'être utilisées dans des transactions nécessitant un certain degré de sécurité. La sécurité de ces systèmes de cryptographie est donc directement liée à la taille des nombres premiers utilisés. En raison de l'évolution permanente de la technologie et en particulier des capacités de calcul des ordinateurs, les systèmes de cryptographie utilisent des clés cryptographiques de plus en plus grandes et donc des nombres premiers également de plus en plus grands. Ainsi, certains organismes bancaires recommandent aujourd'hui d'utiliser des nombres premiers de 1024 bits, voire dans certaines applications, de 2048 bits. Habituellement, la génération d'un nombre premier consiste à choisir aléatoirement un nombre et à vérifier qu'il est premier, par exemple en appliquant un test de primalité tel que le crible d'Eratosthène ou le test de Miller-Rabin. Si le nombre choisi ne satisfait pas au test de primalité, un nouveau nombre est alors choisi. Le choix d'un nouveau nombre diffère d'une méthode à l'autre. Il s'avère que la génération d'un nombre premier constitue la tâche de calcul la plus lourde à mettre en oeuvre dans les systèmes de cryptographie couramment utilisés aujourd'hui. Il y a une dizaine d'années, il était impensable de faire réaliser cette tâche de génération de nombres premiers dans un microcircuit de carte à puce en raison des faibles capacités de calcul et de stockage de ce dernier. Cette tâche était donc réalisée par un puissant ordinateur, et la donnée secrète générée à partir du nombre premier était transmise de manière sécurisée au microcircuit lors d'une étape d'initialisation du circuit effectuée en usine. Les microcircuits de carte à puce actuels sont généralement équipés de coprocesseurs cryptographiques pour accélérer certaines opérations comme les multiplications de grands nombres et les opérations d'exponentiation modulaire, et présentent une capacité de stockage de plus en plus importante. Ces perfectionnements permettent d'envisager de générer de grands nombres premiers directement dans la carte à puce. Cette approche apporte une plus grande sécurité puisqu'elle s'affranchit du risque de piratage de l'ordinateur ayant généré la donnée secrète, ou de piratage de la transmission de cette dernière à la carte à puce. En outre, grâce à cette approche, l'entité émettrice de la carte à puce ne peut pas connaître la donnée secrète si celle-ci est générée dans la carte. Cette approche permet également au microcircuit de regénérer un nombre premier, ainsi que des données secrètes basées sur ce nombre premier, lorsque cela s'avère nécessaire. Cependant, les capacités de calcul et de mémorisation des microcircuits de carte à puce demeurent réduites comparativement à celles d'un ordinateur de bureau. Par ailleurs, en mode opérationnel, le temps de génération d'une clé doit rester inférieur à une limite acceptable pour l'utilisateur. Il apparaît donc souhaitable de développer un procédé de génération de grands nombres premiers qui nécessite de faibles moyens de calcul et de stockage, compatibles avec ceux équipant les cartes à puce. Les méthodes classiques de génération de nombres premiers reposent sur l'usage de tests de primalité probabilistes tels que les tests de Miller-Rabin et de Lucas. Cependant un test probabiliste n'offre pas par définition une certitude absolue qu'un nombre généré soit premier et donc ne permet pas d'obtenir des nombres premiers prouvés. Pourtant une telle certitude offrirait un niveau de sécurité supérieur, ce qui est généralement recherché dans les systèmes de cryptographie. Le niveau de confiance d'un tel test peut être augmenté en exécutant plusieurs itérations du test. Ainsi, la génération d'un nombre premier de 1024 bits avec un niveau de confiance suffisant requiert 40 itérations du test de Miller-Rabin. Ce nombre d'itérations peut être réduit à 3 lorsque le test de Miller-Rabin est suivi du test de Lucas. Le test de Lucas s'avère toutefois peu compatible avec les capacités des cartes à puce. Par ailleurs, en dépit des améliorations importantes apportées aux microcircuits intégrés dans les cartes à puces, le développement d'un logiciel adapté à un tel microcircuit reste délicat. Les microcircuits de carte à puce io constituent un environnement présentant de multiples contraintes comparativement aux ordinateurs de bureau ou aux microprocesseurs équipant des appareils multimédia. En effet, la capacité des mémoires présentes dans ces microcircuits reste réduite. Certaines opérations cryptographiques mises en oeuvre par les algorithmes cryptographiques tels 15 que DES (Digital Encryption System), AES (Advanced Encryption System), RSA et ECC (Elliptic Curve Cryptography) nécessitent d'être déportées dans un coprocesseur pour être réalisées suffisamment efficacement. Ainsi, les opérations d'exponentiation modulaire constituent les opérations les plus coûteuses dans les systèmes cryptographiques tels que RSA et DSA 20 embarqués dans un microcircuit de carte à puce. De telles opérations d'exponentiation peuvent être également nécessaires pour la génération de nombres premiers. Il est également nécessaire que le microcircuit reste protégé contre des attaques visant à découvrir les données secrètes mémorisées ou 25 manipulées par le microcircuit. Ces dernières années sont apparues un grand nombre de types d'attaques, si bien que le développement d'un microcircuit protégé contre tous les types d'attaques connus relève du défit. Il peut donc être souhaitable de générer des nombres premiers par une méthode sûre qui évite le recours à des tests de primalité probabilistes, 30 et qui puisse être embarquée dans un microcircuit de carte à puce. A cet effet, il existe des procédés itératifs de génération de grands nombres premiers prouvés à partir d'un nombre premier prouvé de relativement petite taille qui peut être inférieure 32 bits. Ainsi, les publications [3] et [4] décrivent de tels procédés. Il peut être souhaitable de réduire le temps d'exécution de tels procédés. Des modes de réalisation concernent un procédé de génération d'un nombre premier, mis en oeuvre dans un dispositif électronique, le procédé 5 comprenant des étapes consistant à : générer un nombre candidat premier ayant un nombre de bits souhaité, par la formule suivante : Pr = 2P.R + 1, P étant un nombre premier et R étant un nombre entier, appliquer le test de primalité de Pocklington au nombre candidat premier, le nombre candidat 10 premier étant rejeté s'il échoue au test de Pocklington. Selon un mode de réalisation, le procédé comprend des étapes de génération du nombre entier à partir d'un nombre inversible appartenant à un ensemble d'éléments inversibles modulo le produit de nombres appartenant à un groupe de petits nombres premiers supérieurs à 2, afin que le nombre candidat premier ne 15 soit divisible par aucun des nombres du groupe, le nombre premier P ayant un nombre de bits égal à un bit près à la moitié ou au tiers du nombre de bits du nombre candidat premier. Selon un mode de réalisation, le nombre entier est choisi égal à : R =-1mod + Zilv 20 X étant un nombre inversible modulo le produit des nombres premiers du groupe, P étant le nombre premier, et Z étant un nombre entier choisi de manière à ce que le nombre R ait une taille telle que le nombre candidat premier Pr ait le nombre de bits souhaité. Selon un mode de réalisation, le procédé comprend des étapes de 25 génération d'un nouveau nombre candidat premier à partir du nombre inversible multiplié par 2 modulo le produit, si le nombre candidat premier ne réussit pas le test de primalité de Pocklington, et d'application du test de primalité de Pocklington au nouveau nombre candidat premier. Selon un mode de réalisation, le nombre inversible est généré en 30 recherchant un nombre X inférieur au produit 1Iv vérifiant l'équation : XuN = 1 mod fly 2,1Iv étant l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit Liv. Selon un mode de réalisation, un nombre candidat inversible X est 35 choisi aléatoirement à une valeur inférieure au produit Ilv et incrémenté de un jusqu'à ce qu'il vérifie l'équation Xulv = 1 mod Flv. Selon un mode de réalisation, un nombre candidat inversible X est choisi aléatoirement à une valeur inférieure au produit et incrémenté de la quantité : R.(1 - Xxliv mod 11v), jusqu'à ce qu'il vérifie l'équation, R étant choisi aléatoirement à une valeur inférieure au produit. Selon un mode de réalisation, la taille en nombre de bits du nombre candidat premier est égale à trois fois la taille du nombre premier, à une unité près, le nombre candidat premier généré étant retenu comme nombre candidat premier uniquement si le quotient de la division entière du nombre entier par le nombre premier généré à l'étape de génération précédente est io impair. Selon un mode de réalisation, le nombre entier est choisi dans l'intervalle [I +1, 21] avec : 2L-1. 2P L étant le nombre de bits du nouveau nombre premier à générer. 15 Selon un mode de réalisation, le procédé comprend plusieurs étapes de génération d'un nouveau nombre premier, une première étape de génération fournissant un nombre premier à partir d'un premier nombre premier, chaque étape de génération suivante fournissant un nombre premier à partir du nombre premier obtenu à l'étape de génération 20 précédente, jusqu'à obtenir un nombre premier formé d'un nombre de bits souhaité, chaque étape de génération comprenant les étapes de génération d'un nombre candidat premier et de test de Pocklington. Selon un mode de réalisation, les premières étapes de génération d'un nouveau nombre premier comprennent : a - le calcul d'un nombre 25 candidat premier ayant un nombre de bits, par la formule suivante : Pr = 2P-R + 1 P étant un nombre premier prouvé ayant un nombre de bits égal à un bit près à la moitié ou au tiers du nombre de bits du nombre candidat premier, et R étant un nombre entier choisi aléatoirement, b - le test de la divisibilité 30 du nombre candidat premier par des petits nombres premiers, c - si le nombre candidat premier n'est pas divisible par les petits nombres premiers, l'application du test de primalité de Pocklington au nombre candidat premier Pr, d - si l'un des tests de divisibilité et de Pocklington a échoué pour le nombre candidat premier, l'incrémentation du nombre entier de un, 35 l'incrémentation du nombre candidat premier de deux fois le nombre premier, et à nouveau l'exécution des étapes b à d tant que le nombre candidat premier incrémenté échoue aux tests de divisibilité et de Pocklington. Selon un mode de réalisation, le test de la divisibilité du nombre candidat premier par des petits nombres premiers comprend des étapes consistant à : mémoriser en tant que premiers restes, les restes des divisions entières du nombre candidat premier par chacun des petits nombres premiers, le nombre candidat premier étant divisible par l'un des petits nombres premiers si le reste correspondant est nul, mémoriser en tant 10 que second restes, les restes des divisions entières de deux fois le nombre premier par chacun des petits nombres premiers, et si un nouveau nombre candidat premier est calculé à partir du nombre candidat premier en lui ajoutant deux fois le nombre premier, mettre à jour chacun des premiers restes en lui ajoutant le second reste correspondant au même petit nombre 15 premier modulo le même petit nombre premier. Selon un mode de réalisation, un nouveau nombre entier est choisi aléatoirement si le nombre entier incrémenté excède une certaine limite, et chacun des seconds restes est mis à jour en recevant le double du premier reste correspondant au même petit nombre premier modulo le même petit 20 nombre premier. Selon un mode de réalisation, le premier nombre premier est obtenu en choisissant aléatoirement un nombre formé du nombre réduit de bits et en lui appliquant successivement un nombre limité de tests de primalité comportant plusieurs tests de Miller-Rabin appliqués à différentes bases, 25 jusqu'à obtenir un nombre ayant passé avec succès les tests de Miller-Rabin, le nombre de bits maximum et les valeurs des bases étant choisis pour prouver la primalité du premier nombre premier. Selon un mode de réalisation, les tests de Miller-Rabin appliqués au nombre choisi aléatoirement, sont effectués en bases 2, 7 et 61 avec un 30 nombre de bits maximum choisi inférieur ou égal à 32, ou bien en bases 2, 3, 5, 7, 11, 13 et 17, avec un nombre de bits maximum choisi inférieur ou égal à 48. Selon un mode de réalisation, les tests de Miller-Rabin appliqués au nombre choisi aléatoirement sont précédés d'un test de divisibilité du 35 nombre choisi aléatoirement par des nombres d'une liste des plus petits nombres premiers. Des modes de réalisation concernent également un procédé de cryptographie mis en oeuvre dans un dispositif électronique et comprenant des étapes consistant à : générer des nombres premiers, générer des clés cryptographiques à partir des nombres premiers, les nombres premiers étant générés par le procédé tel que précédemment défini. Des modes de réalisation concernent également un dispositif électronique comprenant un bloc de calcul pour exécuter des multiplications de nombres de grande taille et/ou des opérations d'exponentiation modulaire, et configuré pour mettre en oeuvre le procédé de génération d'un nombre premier, tel que défini précédemment. Des modes de réalisation concernent également un circuit intégré sur microplaquette de semiconducteur, comprenant un dispositif tel que défini précédemment. Des exemples de réalisation de l'invention seront décrits dans ce qui suit, à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 représente une séquence d'étapes configurée pour générer un nombre premier de grande taille, selon un mode de réalisation, les figures 2 et 3 représentent des séquences d'étapes configurées pour générer un nombre premier de petite taille, selon un mode de réalisation, la figure 4 représente une séquence d'étapes configurée pour générer un nombre premier à partir d'un nombre premier de taille inférieure, selon un mode de réalisation, les figures 5 et 6 représentent des séquences d'étapes appelées par la séquence de la figure 4, les figures 7 et 8 représentent des séquences d'étapes mettant en oeuvre un test déterministe de primalité, selon des modes de réalisation, la figure 9 représente une séquence d'étapes configurée pour générer un nombre premier à partir d'un nombre premier de taille inférieure, selon un autre mode de réalisation, la figure 10 représente une séquence d'étapes configurée pour tester la divisibilité d'un nombre par une liste de nombres premiers, la figure 11 représente une séquence d'étapes configurée pour générer un nombre premier à partir d'un nombre premier de taille inférieure, selon un autre mode de réalisation, les figures 12 et 13 représentent des séquences d'étapes configurées pour tester la divisibilité d'un nombre par une liste de nombres premiers, les figures 14 à 16 représentent des séquences d'étapes configurées pour générer un nombre premier de grande taille, selon d'autres modes de s réalisation, les figures 17 à 19 représentent des séquences d'étapes configurées pour générer un nombre premier à partir d'un nombre premier de taille inférieure, adaptées à la séquence d'étapes de la figure 16, la figure 20 représente schématiquement un exemple de dispositif 10 électronique pouvant mettre en oeuvre les diverses séquences d'étapes présentées dans les figures 1 à 20, les figures 21 et 22 représentent des séquences d'étapes de génération de clés cryptographiques, utilisant des nombres premiers. Selon un mode de réalisation, il est proposé de générer un nombre 15 premier d'une certaine taille en nombre de bits en se basant sur un théorème dérivé du théorème de Pocklington, qui est formulé comme suit : Soient P un nombre premier supérieur à 2 et R un nombre entier inférieur à P, le nombre N obtenu par l'équation suivante N = 2R.P+1 (1) 20 est premier s'il existe un nombre entier A supérieur ou égal à 2 et inférieur à N tel que : AN-1 =1 mod N , et (2) GCD(A2R - 1, N) 1 , (3) mod représentant l'opération modulo et GCD(x,y) étant une fonction donnant 25 le plus grand commun diviseur des nombres x et y. Ce théorème permet d'obtenir un nombre premier à partir d'un nombre premier de taille inférieure. Ce théorème peut donc être appliqué en plusieurs itérations, à partir d'un nombre premier de petite taille obtenu par un autre procédé, puis à partir du nombre premier obtenu lors de l'itération 30 précédente, jusqu'à l'obtention d'un nombre premier de la taille souhaitée. Etant donné la relation entre les nombres N et P, un simple choix de la taille du nombre R peut permettre d'obtenir un nouveau nombre premier ayant une taille égale sensiblement au double de la taille du nombre premier P. Il est à noter que le caractère premier des nombres obtenus en appliquant ce 35 théorème est prouvé, par opposition au caractère probabiliste de nombres premiers obtenus par certains procédés connus, par exemple basés sur le test de Fermat ou de Miller-Rabin. Ainsi, la figure 1 représente des étapes S1 à S9 d'une procédure GNLP de génération d'un grand nombre premier. La procédure GNLP reçoit en tant que paramètre d'entrée la taille Ln en nombre de bits du nombre premier à générer. Les étapes S1 à S3 permettent de déterminer la taille L (en nombre de bits) d'un premier nombre premier à générer à partir de la taille Ln du nombre premier à générer. A l'étape S1, la taille Ln reçue en paramètre est chargée dans une 10 variable locale L. A l'étape S2, la variable L reçue en entrée de la procédure est comparée à une valeur maximum LL du premier nombre premier, par exemple égale à 32 ou 48 bits. Aux étapes S2 et S3, tant que la variable L est plus grande que la taille maximum LL, la valeur de la variable L est divisée par 2 (reçoit quotient de la division entière de L par 2). Lorsque la 15 variable L est inférieure à la taille maximum LL, la taille L est incrémentée de un à l'étape S4. Il est à noter que si la mémoire du circuit destiné à exécuter la procédure GNLP le permet, les étapes S2 à S4 peuvent être remplacées par la lecture d'une table indexée par taille Ln de nombre premier à générer et 20 donnant la taille LO du premier nombre à générer. En effet, la taille Ln est généralement limitée à un nombre réduit de valeurs possibles, notamment des puissances de 2. Un exemple de cette table lorsque la valeur maximum LL est égale à 32, est donné par la table 1 suivante : Table 1 Ln 512 768 1024 2048 LO 17 25 17 17 k 5 5 6 7 25 A l'étape S5 suivant l'étape S4, est appelée une procédure INTP de détermination d'un premier nombre premier prouvé ayant la taille L. La procédure reçoit en paramètre d'entrée la variable L et optionnellement le produit Ilv des v plus petits nombres premiers, par exemple inférieurs à 150 (v compris entre 10 et 30). La procédure INTP fournit un nombre premier 30 prouvé Pr de taille L. A l'étape S6, la variable L est comparée avec la taille Ln du nombre premier à générer. Cette étape marque l'entrée d'une boucle de traitement dans laquelle les étapes S7 à S9 sont exécutées à chaque itération de la boucle de traitement, jusqu'à ce que la taille Ln du nombre premier à générer soit atteinte. Les valeurs de k fournies dans la table 1 représentent le nombre d'itérations effectuées par la procédure GNLP, en fonction de la taille Ln du nombre premier à générer. A l'étape S6, si la variable L est inférieure à la taille Ln, les étapes S7 à S9 sont exécutées, sinon la procédure GNLP se termine en fournissant le dernier nombre Pr obtenu qui est un nombre premier prouvé de Ln bits. A l'étape S7, une variable P reçoit le dernier nombre premier Pr obtenu. A l'étape S8, la valeur de la variable L est doublée à une unité près (= 2L-1) 10 sans dépasser la taille Ln du nombre premier à générer. Le calcul de la taille L du nombre premier suivant à générer, effectué à l'étape S8, permet de réaliser la condition R Le test de Miller-Rabin consiste à décomposer un nombre candidat premier N à tester, diminué de 1, de la manière suivante : N -1 2s x D , (4) S étant un nombre entier, D étant un nombre impair, et en vérifiant, que pour un nombre A appelé "base", inférieur et premier avec N, l'une des équations lo suivantes est satisfaite : AD -1 mod N , (5) A2R D = - 1 mod N , (6) R étant un nombre entier compris entre 0 et S-1. Ainsi, selon le test de Miller-Rabin, le nombre N est probablement premier si l'une ou l'autre des 15 équations (4) et (5) est satisfaite. Le premier nombre premier est donc obtenu en appliquant trois fois le test de Miller-Rabin, avec le nombre A choisi successivement égal à 2, 7 et 61, et en écartant les nombres candidats N ne vérifiant pas le test en base 2, 7 ou 61. Selon un autre mode de réalisation, l'application des tests de Miller- 20 Rabin en bases 2, 7 et 11 est précédée d'une étape de test de la divisibilité du nombre candidat premier par les v plus petits nombres premiers, v étant compris par exemple entre 20 et 50. En d'autres termes, un nombre candidat N est écarté s'il est divisible par l'un des v plus petits nombres premiers. Selon un autre mode de réalisation, l'application du test de Miller- 25 Rabin en bases 2, 7 et 11 est précédé d'une étape d'application du test probabiliste de Fermat en base 2. Selon le test de Fermat, le nombre N est probablement premier si la condition suivante est satisfaite : AN-1 =1 mod N , (7) dans laquelle A est un nombre entier représentant la base (choisie égale à 30 2). Selon un mode de réalisation, le premier nombre premier de petite taille est obtenu en exécutant une séquence d'étapes telle que représentée sur la figure 2. La figure 2 représente une procédure INTP recevant en paramètre d'entrée la taille L du nombre premier à générer et le produit 35 Flv des v plus petits nombres premiers, et fournissant un nombre premier Pr de la taille L, L étant inférieur à 32. La procédure INTP comprend des étapes S21 à S24b. A l'étape S21, un nombre impair Pr de taille L est choisi aléatoirement à l'aide d'une fonction aléatoire ou pseudo-aléatoire RND. Les étapes S22 à S24b sont des tests de primalité appliqués successivement au nombre Pr. A l'étape S22, il est recherché si le nombre Pr est divisible par l'un des v nombres premiers du produit Flv et le test échoue si le nombre Pr est divisible par l'un des v nombres premiers du produit Ilv . Ce test peut être effectué en recherchant le plus grand commun diviseur GCD du nombre Pr 10 et du produit Flv , le nombre Pr n'étant divisible par aucun des v plus petits nombres premiers si le plus grand commun diviseur ainsi calculé est égal à 1. Le produit Flv peut ne pas comprendre le nombre 2 si le nombre Pr est choisi impair à l'étape S21. Au lieu de recevoir le produit Flv , la procédure peut recevoir les v premiers nombres premiers sous la forme d'une liste Q, et 15 l'étape 22 peut consister à tester successivement la divisibilité du nombre Pr par chacun des nombres premiers de la liste Q. Selon un autre mode de réalisation, Flv représente le produit des plus petits nombres entiers (éventuellement supérieurs à 2), et le test de la divisibilité du nombre Pr par l'un de ces nombres premiers peut consister à 20 calculer le plus grand commun diviseur des nombres Pr et flv . A l'étape S23, le test de Fermat en base 2 est appliqué au nombre Pr. Aux étapes S24, S24a et S24b, les tests de Miller-Rabin en bases 2, 7 et 61 sont respectivement et successivement appliqués au nombre Pr. Si l'un des tests échoue, l'étape S21 est à nouveau exécutée pour 25 choisir un autre nombre Pr. Si l'un des tests est exécuté avec succès à l'une des étapes S22 à S24a, l'étape suivante S23 à S24b est exécutée. Si le dernier test de primalité exécuté à l'étape S24b est exécuté avec succès, la procédure INTP se termine en fournissant le nombre Pr dont la primalité est ainsi prouvée. Au lieu de choisir aléatoirement un nouveau nombre Pr à 30 l'étape S21 si l'un des tests effectué aux étapes S23 à S24b échoue, le nombre Pr peut être incrémenté de deux. La figure 3 représente une procédure INTP1 de génération d'un premier nombre premier de petite taille, selon un autre mode de réalisation. Cette procédure est basée sur le fait qu'un nombre de moins de 48 bits 35 ayant été testé avec succès par les tests de Miller-Rabin en bases 2, 3, 5, 7, 11, 13 et 17, est avec certitude un nombre premier. La procédure INTP1 diffère de la procédure INTP en ce que les tests de primalité de Miller-Rabin en bases 7 et 61 sont remplacés par des tests de Miller-Rabin en bases 3, 5, 7, 11, 13 et 17, et en ce que le nombre premier obtenu peut avoir une taille pouvant atteindre 48 bits. La taille maximum LL dans les procédures GNLP, GNLP1, GNM et GNST peut alors être fixée à une valeur inférieure ou égale à 48. Ainsi, la procédure INTP1 comprend les étapes S21, S22 et S24 de la procédure INTP (figure 14). Ensuite la procédure INTP1 comprend des étapes S24c à S24h d'application du test de Miller-Rabin en bases 3, 5, 7, 11, 13 et 17. Si le nombre candidat premier Pr choisi à l'étape S21 réussi l'un des tests exécuté à l'une des étapes S22, S24, S24c à S24g, l'étape suivante S24, S24c à S24h est exécutée. Si le nombre premier Pr échoue à l'un des tests, un nouveau nombre candidat premier Pr est choisi à l'étape S21. Si le nombre candidat premier Pr vérifie tous les tests et en particulier le test de Miller-Rabin en base 17 exécuté à l'étape S24g, la procédure INTP1 se termine en fournissant le nombre Pr en tant que nombre premier prouvé. Comme la procédure INTP1 peut fournir un nombre premier proche de 48 bits au lieu d'un nombre premier proche de 32 bits pour la procédure INTP, cette procédure peut réduire le nombre d'itérations de la procédure GNLP. Il est à noter que l'étape S22 dans les procédures INTP et INTP1 est prévue pour éliminer des nombres candidats premiers plus facilement (à l'aide d'opérations moins coûteuses en ressources et en temps de calcul) qu'un test de Fermat ou de Miller-Rabin. L'étape S22 peut donc être omise sans que le caractère prouvé du nombre Pr fourni par la procédure INTP, INTP1 n'en soit affecté. Le test de Fermat exécuté à l'étape S23 de la procédure INTP est également prévu pour éliminer des nombres candidats premiers plus rapidement que le test de Miller-Rabin. Cette étape peut être également supprimée si les moyens de calcul utilisés pour mettre en oeuvre cette procédure peuvent exécuter efficacement (en un temps admissible pour l'utilisateur) les tests de Miller-Rabin. Le choix de la valeur du nombre v des plus petits nombres premiers utilisés à l'étape S22 peut être effectué en fonction de la durée globale 35 d'exécution de la procédure INTP ou INTP1, sachant que plus on augmente la valeur v, plus la durée d'exécution de l'étape S22 augmente, et plus la durée globale d'exécution (nombre d'exécutions) des tests effectués aux étapes S23 à S24b ou S24 à S24h diminue. La figure 4 représente des étapes S31 à S43 de la procédure GNSP, selon un mode de réalisation. Les étapes S31 à S39 permettent de générer un nombre entier R tel que le candidat premier Pr obtenu par la formule (1) n'est pas divisible par les petits nombres premiers de la liste Q. A cet effet, on se base sur la proposition suivante Pour tout nombre x appartenant à l'ensemble Z/nZ, Z étant l'ensemble 10 des entiers relatifs et Z/nZ étant l'ensemble des résidus modulo n, l'équation xitn = 1 mod n est vérifiée si et seulement si x appartient à (Z/nZ)*, c'est-à-dire si GCD(x, n) 1, 2n étant l'indicateur de Carmichael, c'est-à-dire le plus petit entier non nul tel que pour tout nombre x appartenant à (Z/nZ)*, x = 1 mod n. 15 En choisissant comme valeur de n, le produit riv des v premiers nombres premiers supérieurs à 2 (2 non compris), il est possible de générer directement par une séquence d'étapes linéaire, par opposition à une séquence itérative, un nombre qui n'est divisible par aucun des diviseurs du produit 11v, c'est-à-dire tous les nombres premiers formant le produit 11v. La 20 proposition précédente nécessite simplement une opération d'exponentiation modulaire à la puissance 2,I1v (indicateur de Carmichael de l'ensemble (Z/11vZ)*), et donc de mémoriser ce nombre ainsi que le produit Flv. Pour mettre en oeuvre cette proposition, il convient de générer un élément inversible de l'ensemble (Z/fIvZ)*, c'est-à-dire un nombre X tel que : 25 XXIlv = 1 mod UN. (8) Dans l'optique de l'application de la formule (1), la quantité 2P(X+Z.Ilv) ne présente pas non plus de diviseur commun avec le produitilv, Z étant un nombre entier. Il suffit donc de choisir comme nombre candidat premier Pr la quantité 2P(X+Z.11v). Il en résulte que le nombre entier R dans la formule (1) 30 est choisi égal à : R = (X - (2P)-1 mod flv) + Z-Ilv (9) le nombre Z étant choisi de manière à ce que le nombre R ait une taille telle que le nombre candidat premier Pr ait la taille L calculée à l'étape S8. Les étapes S31 à S38 de la procédure GNSP sont exécutées successivement. A l'étape S31, un nombre I est calculé par la formule suivante I= 2L -1 (10) 2P s P étant un nombre premier prouvé, L étant la taille d'un nouveau nombre premier à générer, P et L étant reçus en paramètres d'entrée de la procédure GNSP, et -x représentant le quotient de la division entière de x Y par y. A l'étape S32, un nombre J est calculé par la formule suivante : , I J - (11) Fiv 10 A l'étape S33, un nombre Z est choisi dans l'intervalle [J, 2J-1] à l'aide d'une fonction aléatoire ou pseudo-aléatoire RND. A l'étape S34, est généré un nombre inversible X de l'ensemble (Z/IlvZ)*. A cet effet, une procédure GINV est appelée avec en paramètres d'entrée le produit 11v et l'indicateur de Carmichael associé UN. La procédure GINV fournit un nombre inversible 15 X. Les étapes S35 à S41 permettent de calculer le nombre R. A l'étape S35, est calculé un nombre InvP qui est égal au nombre inverse modulo le produit FIv, de deux fois le nombre premier P (soit (2P)-1 mod flv). A l'étape S36, est calculé un nombre R égal au nombre X moins le nombre inverse 20 InvP modulo le produit Ylv. A l'étape S37, le nombre R est incrémenté de la quantité Z.1.1v. Aux étapes S39 à S41, on s'assure que le nombre R obtenu à l'étape S37 est compris dans l'intervalle [I +1,21], afin d'obtenir un nombre candidat premier Pr de la taille L. Ainsi, aux étapes S38 et S39, le nombre R est comparé aux nombres I +1 et 21. Si le nombre R est inférieur à I +1, les 25 étapes S40 et S42 sont exécutées. Si le nombre R est supérieur à 21, les étapes S41 et S42 sont exécutées. Si le nombre R est compris entre I +1 et 21, seulement l'étape S42 est exécutée. A l'étape S40, le nombre R est incrémenté de la quantité.11v. A l'étape S41, le nombre R est décrémenté de la quantitédiv. 30 A l'étape S42, un nombre candidat premier Pr est calculé à l'aide de la formule (1) en utilisant le nombre R obtenu à l'étape S37, S40 ou S41 et le nombre premier P reçu en paramètre d'appel de la procédure GNSP. A l'étape S43, une procédure d'application du test de Pocklington PCKT est appelée. Cette procédure reçoit le nombre Pr à tester et le nombre R utilisé pour calculer le nombre Pr à l'étape S42, ainsi qu'optionnellement la taille L en nombre de bits du nombre Pr. Cette procédure renvoie une variable booléenne à "Vrai" ("T" : "True") si le nombre Pr a passé avec succès le test de Pocklington, et à "Faux" ("F" : "False") dans le cas contraire. Si la procédure PCKT retourne "Vrai", le nombre Pr est avec certitude premier et la procédure GNSP se termine en fournissant le nombre Pr. Si la procédure PCKT retourne "Faux", l'étape S44 est exécutée et l'exécution de la 10 procédure est poursuivie à l'étape S36. A l'étape S44, le nombre X est multiplié par 2 modulo le produit liv. Un procédé de génération de nombres inversibles est décrit dans le document [7]. La figure 5 représente des étapes S11 à S13 de la procédure de génération d'un nombre inversible GINV, selon un mode de réalisation. 15 La procédure GINV permet de générer un élément inversible de l'ensemble (Z/IlvZ)* par un procédé itératif. A l'étape S11, un nombre entier X inférieur au produit Ilv est choisi à l'aide d'une fonction aléatoire ou pseudo-aléatoire. A l'étape S12, il est testé si le nombre X choisi à l'étape S11 vérifie l'équation (8), c'est-à-dire si le nombre X est inversible dans l'ensemble (Z/IlvZ)*. Si le 20 nombre X vérifie l'équation (8), la procédure GINV se termine en fournissant le nombre X, sinon l'étape S13 est exécutée. A l'étape S13, le nombre X est incrémenté de 1. Les étapes S12 et S13 forment une boucle de traitement qui est exécutée jusqu'à ce que la condition de l'étape S12 soit satisfaite. La figure 6 représente Un autre mode de réalisation GINV1 de la 25 procédure GINV. La procédure GINV1 diffère de la procédure GINV en ce que les étapes S12 et S13 sont remplacées par des étapes S14 à S17. A l'étape S14, un nombre Y est calculé par l'équation suivante : Y = 1 - X!11" mod Ilv. (12) A l'étape S15, le nombre Y est comparé à 0, et s'il est nul, le nombre X 30 vérifie l'équation (8). La procédure GINV1 se termine alors en fournissant le nombre X. Dans le cas contraire, les étapes S16, S17 sont exécutées. A l'étape S16, un nombre R inférieur au produit Ilv est choisi aléatoirement. A l'étape S17, le nombre X est incrémenté du produit des nombres R et Y. L'exécution de la procédure GINV1 est ensuite poursuivie à l'étape S14 pour 35 tester si le nombre X vérifie l'équation (8). La figure 7 représente des étapes S52 à S56 de la procédure PCKT, selon un mode de réalisation. Cette procédure applique successivement aux nombres P et R reçus en entrée par la procédure PCKT les tests correspondant aux équations (2) et (3). Si les nombres P et R réussissent les deux tests, la procédure PCKT retourne "Vrai", sinon "Faux". A l'étape S52, un nombre entier A est choisi à l'aide d'une fonction RND aléatoire ou pseudo-aléatoire dans l'intervalle [2, P-2]. A l'étape S53, si le nombre P vérifie à l'équation (2), l'étape S54 est exécutée, sinon l'étape S55 est exécutée. A l'étape S54, si les nombres P et R vérifient l'équation (3), l'étape S46 est exécutée, sinon l'étape S55 est exécutée. A l'étape S55, une variable booléenne TST est mise à "Faux". A l'étape S56, la variable TST est mise à "Vrai". La procédure PCKT se termine après l'étape S55 ou S56 en retournant la variable TST. Il est à noter que l'équation (3) testée à l'étape S54 peut être mise en oeuvre en calculant d'abord la quantité B = A2R - 1 mod P, puis en calculant GCD (B, P). La figure 8 représente un autre mode de réalisation PCKT1 de la procédure PCKT de la figure 7. La procédure PCKT1 diffère de la procédure PCKT en ce qu'elle comprend des étapes S50 et S51 supplémentaires permettant de forcer le nombre A à 2 (étape S51) si la taille L du nombre P reçu en paramètre d'entrée de la procédure est supérieure ou égale à une certaine valeur par exemple égale à 129 (étape S50). Le forçage du nombre A à 2 permet d'effectuer plus rapidement les opérations d'exponentiation modulaire aux étapes S53 et S54 lorsque les nombres P et R sont grands. En effet, lorsque le nombre A est fixé à 2, il s'agit alors de calculer des nombres de la forme 2n qui peuvent être effectuées par de simples décalages de bits dans un mot binaire, ce qui permet d'accélérer l'exécution des tests de Pocklington par un microcircuit. Si l'on suppose que la proportion de nombres premiers rejetés en fixant la valeur du nombre A, ne change pas en fonction de cette valeur, le fait de fixer la valeur de A à une valeur constante telle que 2 présente un impact négligeable sur la distribution des nombres premiers générés lorsque la taille du nombre P à tester est suffisamment grande (par exemple supérieure à 128 bits). En effet, il a été démontré que la probabilité pour que le choix d'une certaine valeur de A entraine le rejet d'un nombre premier à l'étape S53 est égale à 2 9 8 4 5 5 1 18 1/P. Par conséquent, plus le nombre P est grand, plus cette probabilité est faible. A partir de L = 128, ce qui correspond à un. nombre P de 64 bits, cette probabilité devient négligeable. Selon un mode de réalisation, une autre procédure de génération 5 d'un nombre premier peut être appelée à l'étape S9 pour les premières itérations de la procédure GNLP, la procédure GNSP n'étant appelée que lors des suivantes et dernières itérations. La procédure appelée aux premières itérations peut consister à choisir un nombre R pour calculer un nombre candidat premier Pr à l'aide de la formule (1), et à tester la divisibilité 10 du nombre Pr par les nombres premiers du produit Flv, au lieu de générer un nombre R tel que le nombre Pr obtenu n'est pas divisible par les nombres premiers de ce produit. La figure 9 représente des étapes S90 à S99 d'une telle procédure GNSP1, selon un mode de réalisation. Les étapes S90 à S94 sont 15 exécutées successivement. A l'étape S90, un nombre I est calculé par la formule (10). A l'étape S91, un nombre entier R est choisi à l'aide d'une fonction aléatoire ou pseudo-aléatoire RND dans l'intervalle [I +1, 21]. A l'étape S92, un nombre candidat premier Pr est calculé par la formule (1). A l'étape S93, une procédure DVT de test de la divisibilité du nombre Pr par 20 les nombre premiers de la liste Q est appelée. La procédure DVT reçoit en paramètres d'entrée le nombre Pr et la liste Q et fournit une variable booléenne TST à "Vrai" si le nombre Pr n'est pas divisible par les nombres de la liste IIv et à "Faux" ("False") dans le cas contraire. A l'étape S94, la variable TST est testée. Si la variable TST est à "Vrai" ("True"), l'étape S95 25 est exécutée, sinon l'étape S97 est exécutée. A l'étape S95, la procédure d'application du test de Pocklington PCKT (ou PCKT1) est appelée. Cette procédure reçoit le nombre Pr à tester et le nombre R utilisé pour calculer le nombre Pr à l'étape S92, ainsi qu'optionnellement la taille L en nombre de bits du nombre Pr. Cette 30 procédure renvoie une variable booléenne à "Vrai" si le nombre Pr a passé avec succès le test de Pocklington, et à "Faux" dans le cas contraire. Si la procédure PCKT retourne "Vrai", le nombre Pr est premier avec certitude, et la procédure GNSP se termine en fournissant le nombre Pr. Si la procédure PCKT retourne "Faux", la variable TST est initialisée à "Faux" à l'étape S96 35 et l'exécution de la procédure GNSP est poursuivie à l'étape S97. A l'étape S97, le nombre R est incrémenté de 1. A l'étape S98, le nombre R est comparé au nombre 21, pour que R reste dans l'intervalle [I +1,21]. Si le nombre R est supérieur au nombre 21, l'exécution de la procédure GNSP1 est poursuivie à l'étape S91 pour choisir un nouveau nombre R aléatoirement dans l'intervalle [I + 1,21], pour calculer un nouveau nombre candidat premier Pr et tester ce dernier. Si à l'étape S98, le nombre R est inférieur ou égal au nombre 21, l'étape S99 au lieu de l'étape S92 est exécutée pour mettre à jour le nombre Pr compte tenu de l'incrémentation du nombre R à l'étape S97. Ainsi à l'étape S99, le nombre Pr est simplement incrémenté de deux fois le nombre premier P. Ce calcul résulte de l'incrémentation du nombre R effectuée à l'étape S97 et de la formule (1). De cette manière, le nombre Pr peut être mis à jour simplement par un décalage binaire de P suivi d'une addition, au lieu d'effectuer la multiplication de grands nombres entiers à l'étape S92 mettant en oeuvre la formule (1). Après l'étape S99, l'exécution de la procédure GNSP1 est poursuivie à étape S93. Ainsi, les étapes S93 à S99 forment une première boucle de traitement dans laquelle le nombre R est incrémenté de un à chaque itération, jusqu'à la valeur 21 le cas échéant, et dans laquelle la primalité du nombre Pr correspondant au nombre R est testée de manière prouvée. Les étapes S91 à S99 forment une seconde boucle de traitement permettant d'exécuter la première boucle avec une nouvelle valeur de R choisie aléatoirement dans l'intervalle [I + 1,21]. Tant que le nombre Pr obtenu à l'étape S92 ou S99 ne satisfait pas aux tests de non divisibilité et de Pocklington, un nouveau nombre candidat premier est déterminé aux étapes S91 et S92 ou S99. Il est à noter que les étapes S97 à S99 peuvent être omises, l'étape S91 étant exécutée directement si la variable TST est à "Faux" à l'étape S94. La figure 10 représente des étapes S121 à S126 de la procédure DVT, selon un mode de réalisation. A l'étape S121, un indice de boucle j est initialisé à 0 et une variable booléenne TST est initialisée à "Vrai". L'étape S122 suivante, forme l'entrée d'une boucle comprenant les étapes S123 à S126. Cette boucle permet de tester la divisibilité du nombre Pr par chacun des nombres Qj de la liste Q. A l'étape S122, l'indice j est comparé au nombre v de nombres premiers dans la liste Q. Si l'indice j est inférieur au nombre y, une itération de boucle commençant à l'étape S123 est exécutée, sinon la procédure DVT se termine en fournissant la variable TST. A l'étape S123, une variable w reçoit le reste de la division entière du nombre Pr par le nombre Qj. La variable w peut ainsi être calculée par la formule suivante : w = Pr mod Qj (13) A l'étape S124, la variable w est comparée à O. Si la variable w est nulle, signifiant que le nombre candidat Pr est divisible par le nombre Qj, les étapes S125 et S126 sont exécutées, sinon seulement l'étape S126 est exécutée. A l'étape S125, la variable TST est mise à "Faux" pour indiquer que le nombre Pr n'est pas un nombre premier. A l'étape S126, l'indice j est incrémenté de un. L'étape S122 est exécutée après l'étape S126 soit pour exécuter une nouvelle itération, soit pour fournir la variable TST à la fin de l'exécution de la procédure DVT. La figure 11 représente un autre mode de réalisation GNSP2 de la procédure GNSP1 de la figure 5. La procédure GNSP2 diffère de la procédure GNSP1 en ce qu'elle comprend des optimisations de calcul dans les tests de la divisibilité du nombre Pr par les nombres premiers de la liste Q. Ainsi, la procédure GNSP2 comprend une étape 93' remplaçant l'étape S93, et une étape supplémentaire S100 exécutée à la suite de l'étape S99, l'étape S94 étant exécutée à la suite de l'étape S100. A l'étape S93', une procédure DVT1 est appelée avec en paramètres d'entrée le nombre Pr, le nombre premier P, la taille L du nombre Pr (en nombre de bits), la liste Q, et des tables de valeurs W et G. La table W est prévue pour recevoir les restes w des divisions du nombre Pr par chacun des nombres Qj de la liste Q (cf formule (13)). La table G est prévue pour recevoir les restes des divisions de deux fois le nombre P par chacun des nombres Qj. Le nombre de valeurs dans chaque table W, G correspond au nombre v de nombres premiers dans la liste Q. La procédure DVT1 fournit une variable booléenne qui est chargée dans la variable TST. A l'étape S100, une procédure DVT2 est appelée avec en paramètres d'entrée le nombre Pr, la liste Q, et les tables de valeurs W et G. La procédure DVT2 permet de mettre à jour la table W uniquement par des opérations faisant intervenir de petits nombres, et de tester la divisibilité du nombre candidat premier Pr mis à jour à l'étape S41. La figure 12 représente la procédure DVT1 qui diffère de la procédure 35 DVT en ce qu'elle comprend des étapes supplémentaires S127 à S129 exécutées à la suite de l'étape S122 dans la boucle formée des étapes S122 à S126. A l'étape S127, il est déterminé si la procédure GNSP2 est appelée pour la première fois par la procédure GNLP, autrement dit, si le nombre P reçu en paramètre d'appel de la procédure GNSP2 a été déterminé par exemple par la procédure INTP. Cette condition peut être déterminée à partir de la taille L du nombre premier P, fourni en paramètre d'appel de la procédure GNSP2, compte tenu du calcul de la taille du premier nombre premier par rapport à la taille maximum LL, effectué par la procédure GNLP (étapes S2 à S4). Si la taille L correspond à celle du premier nombre premier 10 fourni par la procédure INTP, les étapes S128 et S123 sont exécutées, sinon les étapes S129 et S123 sont exécutées. A l'étape S128, la valeur Gj d'indice j dans la table G est calculée par la formule suivante : Gj = 2P mod Qj (14) Qj étant un nombre premier de rang j dans la liste Q. A l'étape S129, la 15 valeur Gj est calculée par la formule suivante : Gj = 2VVj mod Qj (15) Wj étant une valeur d'indice j dans la table W obtenue précédemment à l'étape S123, ou à une autre étape S133 décrite dans ce qui suit, lors d'un appel précédent de la procédure GNLS2. Les tables W et G rassemblant les 20 valeurs Wj et Gj sont donc mémorisées dans des variables dites "globales" qui ne sont pas effacées à chaque appel de la procédure GNSP2. La mise en oeuvre de la formule (15) constitue également une simplification de calcul par rapport à la formule (14) exécutée à l'étape S128. En effet, la formule (15) consiste en une division de petits nombres, tandis que la formule (14) 25 consiste en une division d'un grand nombre (2P) par un petit nombre Qj. Il est à noter que l'étape S123 (figures 10 et 12) peut être également simplifiée en calculant d'abord la quantité Rj = R mod Qj, sachant que le nombre R présente une taille inférieure à la moitié du nombre candidat premier Pr. Chacun des nombres Wj de la table W est alors égal à (Gj-Rj + 30 1) mod Qj, les nombres Rj et Gj étant inférieurs au nombre Qj qui peut présenter une taille limitée à 8 ou 16 bits. La figure 13 représente des étapes S131 à S136 de la procédure DVT2, selon un mode de réalisation. A l'étape S131, un indice de boucle j est initialisé à 0 et une variable booléenne TST est initialisée à "Vrai". 35 L'étape S132 suivante forme le point d'entrée d'une boucle comprenant les étapes S133 à S136. Cette boucle permet de tester la divisibilité du nombre Pr par chacun des nombres Qj de la liste Q, lorsque le nombre Pr a été incrémenté de 2P à l'étape S99 de la procédure GNSP2. Cette boucle permet également de mettre à jour la table de valeurs W, compte tenu de la s modification du nombre Pr à l'étape S99. A l'étape S132, l'indice j est comparé au nombre v de nombres premiers dans la liste Q. Si l'indice j est inférieur au nombre y, une itération de boucle commençant à l'étape S133 est exécutée, sinon la procédure DVT2 se termine en fournissant la variable TST. A l'étape S133, la table W à 10 l'indice j est mise à jour par la formule suivante : Wj = Wj + Gj mod Qj (16) ce qui correspond à la formule (13) compte tenu de la mise à jour du nombre Pr effectuée à l'étape S99. La mise en oeuvre de la formule (16) constitue également une simplification de calcul par rapport à la formule (13) exécutée 15 à l'étape S133. En effet, la formule (16) ne comprend qu'une addition de petits nombres, éventuellement suivie d'une soustraction du petit nombre Qj si Wj+Gj > Qj, tandis que la formule (13) consiste en une division d'un grand nombre (Pr) par un petit nombre (Qj), une telle division nécessitant nettement plus de temps de calcul et de ressource mémoire. 20 A l'étape S134, la valeur Wj d'indice j dans la table W est comparée à O. Si la valeur Wj est nulle, signifiant que le nombre candidat Pr est divisible par le nombre Qj, les étapes S135 et S136 sont exécutées, sinon seulement l'étape S136 est exécutée. A l'étape S135, la variable TST est mise à "Faux", pour indiquer que le nombre Pr n'est pas un nombre premier. A 25 l'étape S136, l'indice j est incrémenté de un. L'étape S132 est exécutée après l'étape S136. Il est à noter que le choix du nombre v des plus petits nombres premiers utilisés aux étapes S123, S128, S129 et S133 peut également être effectué en fonction de la durée globale d'exécution de la procédure GNLP 30 appelant la procédure GNSP2, sachant que plus on augmente la valeur v, plus la durée d'exécution des procédures DVT1, DVT2 augmente, et plus la durée globale d'exécution des tests effectués à l'étape S95 diminue. Le nombre v peut être choisi à une valeur comprise entre 100 et 200. Il est à noter que le nombre v choisi pour la procédure GNSP2 peut être appliqué à 35 la procédure INTP ou INTP1 exécutée à l'étape S5. La figure 14 représente une autre procédure itérative GNM de génération d'un nombre premier de grande taille Ln. Cette procédure correspond sensiblement à la procédure de Maurer (cf. publication [3]). Sur la figure 14, cette procédure reçoit en tant que paramètre d'entrée une taille L de nombre premier à générer et fournit un nombre premier Pr. Cette procédure comprend des étapes S60 à S69. A l'étape S60, la taille L est comparée à une taille maximum LL de nombre premier en dessous de laquelle une procédure pour générer un premier nombre premier prouvé peut être utilisée sans nécessiter de ressources en temps et en capacité de 10 calcul excessives. Si la taille L est supérieure à la taille maximum LL, l'étape S61 est exécutée, sinon l'étape S62 est exécutée. A l'étape S61, un nombre premier Pr de taille inférieure à la taille LL est obtenu. La procédure GNM se termine ensuite en fournissant le nombre Pr. Le mode d'obtention d'un premier nombre premier de taille inférieure à la taille LL peut être l'un de 15 ceux décrits précédemment (étape S5). Les étapes S62 à S67 permettent de déterminer une séquence de tailles de nombres premiers intermédiaires entre la taille initiale du premier nombre premier et la taille du nombre premier à générer fournie en paramètre d'entrée de la procédure GNM. A l'étape S62, la taille L est 20 comparée à deux fois la taille maximum LL (2LL). Si la taille L est supérieure à 2LL, autrement dit, pour les grandes valeurs de L, les étapes S63 à S65 et S67 sont exécutées, sinon seules les étapes S66 et S67 sont exécutées. A l'étape S63, un nombre réel s entre 0 et 1 est choisi aléatoirement ou pseudo-aléatoirement. A l'étape S64, un nombre réel r est calculé en élevant 25 2 à la puissance s - 1. Ainsi, le nombre r est compris entre 1/2 et 1. A l'étape S65, la taille L multipliée par le nombre réel (1 - r) est comparée à la taille maximum LL. Si la quantité L(1 - r) est supérieure à la taille LL, l'étape S67 est exécutée, sinon les étapes S63 à S65 sont à nouveau exécutées. En d'autres termes, l'étape S63 marque l'entrée d'une boucle de traitement 30 comprenant les étapes S63 à S65 dans laquelle une nouvelle valeur de r est calculée jusqu'à ce que la condition de l'étape S65 soit vérifiée. A l'étape S66, pour les valeurs de L comprises entre LL et 2LL, le nombre réel r est fixé à 0.5. A l'étape S67, une nouvelle taille L est calculée en multipliant la 35 valeur courante de L par le nombre réel r, en prenant la partie entière du résultat obtenu, et en ajoutant 1 à la partie entière. A l'étape S68, la procédure GNM est appelée avec la nouvelle valeur de la taille L obtenue à l'étape S67. Ainsi, la procédure GNM est une procédure récursive. A l'étape S69, la procédure GNSP est appelée pour obtenir un nombre premier Pr de taille. L, à partir du nombre premier P obtenu à l'étape S68. La procédure GNM se termine à l'issue de l'étape S69 en fournissant le nombre premier Pr fourni par la procédure GNSP appelée à l'étape S69. La figure 15 représente une autre procédure itérative GNST de génération d'un nombre premier de grande taille Ln. Cette procédure correspond sensiblement à la procédure de Shawe-Taylor (cf. publication [4] ou [5]). Sur la figure 15, cette procédure reçoit en tant que paramètre d'entrée la taille L du nombre premier à générer, et fournit un nombre premier Pr. Cette procédure comprend des étapes S71 à S75. A l'étape S71, la taille L est comparée à la taille maximum LL. Si la taille L est supérieure à la taille LL, les étapes S73 à S75 sont exécutées, sinon l'étape S72 est exécutée. A l'étape S72, un petit nombre premier Pr de taille inférieure à la taille LL est généré et la procédure se termine en fournissant le nombre premier Pr. A l'étape S73, la taille L est diminuée en ajoutant 1 au plus petit nombre entier supérieur ou égal à la taille L divisée par deux. A l'étape S74, la procédure GNST est appelée avec la nouvelle valeur de L pour obtenir un nombre premier P de taille L. La procédure GNST est donc également récursive. A l'étape S75, la procédure GNSP est appelée pour obtenir un nombre premier Pr de taille L, avec en tant que la paramètres d'entrée, le nombre premier précédent P fourni par l'appel de la procédure GNST à l'étape S74, et la taille L obtenue à l'étape S73. Le nombre premier Pr obtenu à l'étape S75 est fourni en sortie de la procédure GNST qui se termine à l'issue de cette étape. Pour générer un premier petit nombre premier, les procédures GNM et GNST peuvent procéder de la même manière que la procédure GNLP. Comme la procédure GNLP, les procédures GNM et GNST peuvent également appeler à leurs premières itérations la procédure GNSP1 ou GNSP2, et à leurs dernières itérations, la procédure GNSP. La figure 16 représente un autre mode de réalisation GNLP1 de la procédure GNLP de la figure 1. La procédure GNLP1 diffère de la procédure GNLP en ce que les étapes S3, S8 et S9 sont remplacées par des étapes S3', S8' et S9'. A l'étape S3', la valeur de la variable L est divisée par 3 au lieu de 2. A l'étape S8', la valeur de la variable L est triplée (= 3L-1), à une unité près, sans dépasser la taille Ln du nombre premier à générer. A l'étape S9', une procédure GNSP3 est appelée avec pour paramètres d'entrée les variables P et L et optionnellement, la liste Q. La procédure GNSP3 fournit un nombre premier Pr ayant la taille L à partir du nombre premier P de taille inférieure. La procédure GNLP1 se base sur un théorème dérivé du théorème démontré par Brillhart, Lehmer, Selfridge, Tuckerman et Wagstaff en 1988 (cf. publication [6]). Le théorème dérivé est formulé comme suit : Soient P un nombre premier supérieur à 2 et R un nombre entier 10 inférieur à P2+1. Le nombre N = 2R.P+1 est premier sil existe un nombre entier A supérieur ou égal à 2 et inférieur ou égal à N tel que : (I) A, N et R satisfont aux équations (2) et (3), (il) [ , est impair. le quotient de la division entière de R par P, R p La condition R Selon un mode de réalisation, le bloc de calcul CRU peut être configuré pour effectuer sur demande de l'unité UC des multiplications de nombres de grande taille, par exemple de taille comprise entre 32 bits et 2048 bits, et en particulier celle effectuée aux étapes S42 et S92 des procédures GNSP, GNSP1 à GNSP5, ainsi que celles intervenant dans les calculs d'exponentiation modulaire des tests de Fermat et de Miller-Rabin exécutés dans les procédures INTP, INTP1, et du test de Pocklington exécuté dans les procédures PCKT et PCKT1. Selon un autre mode de réalisation, le bloc de calcul peut également être configuré pour effectuer sur demande de l'unité de traitement UC, directement les opérations d'exponentiation modulaire des tests de Fermat et de Miller-Rabin exécutés dans les procédures INTP, INTP1, et du test de Pocklington exécuté dans les procédures PCKT et PCKT1. Le dispositif DV peut également comprendre un générateur RGN aléatoire ou pseudo-aléatoire de mots binaires de M bits pour réaliser les étapes S21, S33, S11, S91 et S63. L'unité UC peut ainsi comprendre un module de génération de nombres premiers PGN mettant en oeuvre l'une des procédures GNLP, GNLP1, GNM, GNST. L'unité UC peut également comprendre un module de génération de données cryptographiques KGN telles que des clés cryptographiques, et des modules de signature SGN et de chiffrement ENC utilisant des données cryptographiques générées par le module KGN. Chacun des modules PGN, KGN, ENC, SGN peut faire appel au bloc CRU pour effectuer des opérations complexes, telles que des multiplications de nombres de grandes tailles ou des exponentiations modulaires. Les données cryptographiques générées sont mémorisées dans la mémoire MEM. Les modules KGN, SGN et ENC peuvent par exemple mettre en oeuvre l'algorithme RSA en générant deux nombres premiers de 512 ou 1024 bits à l'aide du module PGN. La figure 21 représente une procédure KGEN1 de génération d'une paire de clés secrète et publique, conforme à l'algorithme RSA, exécutée par le module KGN. La procédure KGEN1 comprend des étapes S141 à S146. Aux étapes S141 et S142, deux nombres premiers P et Q sont générés à l'aide d'une procédure PRGN recevant en paramètre d'entrée la taille L des nombres premiers à générer. La procédure PRGN correspond à l'une des procédures GNLP, GNLP1, GNM, GNST exécutée par le module PGN. A l'étape S143, les nombres P et Q sont multipliés l'un par l'autre pour obtenir un nombre N. A l'étape S144, un nombre impair E est choisi aléatoirement dans un certain intervalle, par exemple entre 3 et 2L - 1. A l'étape S145, si le nombre E choisi n'est pas inversible modulo la quantité (P-1)(Q-1), un nouveau nombre E est choisi à l'étape S144, sinon l'étape S146 est exécutée pour choisir un nombre D tel que E x D est égal à 1 modulo (P-1)(Q-1). La procédure KGEN1 se termine après l'étape S146 en fournissant en tant que clé privée la paire de nombres (N,D) et en tant que clé publique la paire de nombres (N,E). L'algorithme DSA peut également être mis en oeuvre par les modules KGN, SGN et ENC, en générant deux nombres premiers de tailles différentes, par exemple 256 et 2048 bits. La figure 22 représente une procédure KGEN2 de génération d'une paire de clés secrète et publique, conforme à l'algorithme DSA, exécutée par le module KGN. La procédure KGEN2 comprend des étapes S151 à S155. Aux étapes S151 et S152, deux nombres premiers P et Q sont générés à l'aide d'une procédure PRGN recevant en paramètre d'entrée, successivement les tailles L1, L2 des nombres premiers P et Q à générer. Les tailles L1 et L2 sont par exemple égales, respectivement à 2048 et à 256 bits. A l'étape S153, une procédure GGEN est appelée pour générer un nombre G qui constitue un nombre générateur du sous groupe d'ordre Q modulo P. A l'étape S154, une clé secrète SK est choisie aléatoirement dans l'intervalle [1, Q-1]. A l'étape S155, une clé publique PK est calculée en élevant le nombre G à la puissance SK modulo P. La procédure KGEN2 se termine après l'étape S155 en fournissant la paire de clés privée et publique (SK, PK). Il apparaîtra clairement à l'homme de l'art que la présente invention est susceptible de diverses variantes de réalisation et diverses applications, notamment diverses autres formes d'algorithmes et de dispositifs mettant en oeuvre de tels algorithmes. Ainsi, l'invention couvre toutes les combinaisons possibles des divers modes de réalisation décrits. L'invention n'est pas non plus limitée à un procédé itératif de génération d'un grand nombre premier. En effet, il peut être envisagé de mémoriser un nombre premier ayant une taille sensiblement égale à la moitié ou au tiers des nombres premiers à générer et de n'exécuter qu'une seule itération correspondant à l'exécution de l'une des procédures GNSP et GNSP1 à GNSP3. Par rapport à la solution consistant à directement mémoriser un nombre premier utilisable pour générer des clés cryptographiques, cette solution présente un gain en terme de capacité de stockage égal à la moitié ou aux deux tiers de la taille des nombres premiers utilisés. Cette solution présente également un avantage en termes de sécurité et de confidentialité, puisqu'il n'est pas possible de connaître à l'avance le ou les nombres premiers qui seront utilisés pour générer les clés cryptographiques. En effet, même si le nombre premier précédent est fixé, le choix aléatoire du nombre entier R permet d'obtenir en une seule itération la plupart des nombres premiers ayant la taille souhaitée. Liste des publications précédemment citées : [1] C. Pomerance, C. Selfridge, and J.L. Wagstaff. "The pseudoprimes to 25x10e9", Mathematics of Computation, 35:1003-1026, 1990. [2] G. Jaechke, "On strong pseudoprimes to several bases", Mathematics of Computation, 61:915-926, 1993. [3] U. M. Maurer, "Fast generation of prime numbers and secure public- key cryptographic parameters", J. Cryptology, 8(3):123-155, 1995. [4] J. Shawe-Taylor, "Generating strong primes", Electronic Letters, 22(16):875-877, 1986. [5] FIPS PUB 186-3, "Digital Signature Standard", National Institute of Standards and Technology, october 2009. [6] J. Brilihart, D. H. Lehmer, J. L. Selfridge, B. Tuckerman, and Jr. S. S. Wagstaff, "Factorization of bn ± 1, b = 2; 3; 5; 7; 10; 11; 12 Up to High Powers", vol. 22, American Mathematical Society, 1988. [7] M. Joye, P. Paillier, S. Vaudenay, "Generation of Prime Numbers", CHES 2000, p. 340-354 REVENDICATIONS1. Procédé de cryptographie dans un dispositif électronique (DV), le procédé comprenant des étapes consistant à : générer un nombre premier, générer un nombre entier, générer un nombre candidat premier (Pr) ayant un nombre de bits souhaité (L), par la formule suivante : Pr = 2P-R + 1, Pr étant le nombre candidat premier, P étant le nombre premier et ayant un nombre de bits inférieur au nombre de bits du nombre candidat premier et R Io étant le nombre entier, et fournir le nombre candidat premier en tant que nombre premier prouvé s'il réussit le test de primalité de Pocklington, caractérisé en ce qu'il comprend des étapes consistant à : mémoriser un groupe de petits nombres premiers (Qj) supérieurs à 2, 15 calculer et mémoriser un produit (IIv) des nombres premiers du groupe mémorisé, et générer un nombre inversible (X) appartenant à un ensemble d'éléments inversibles modulo le produit mémorisé , le nombre entier étant généré à partir du nombre inversible afin que le nombre candidat premier 20 (Pr) ne soit divisible par aucun des nombres du groupe mémorisé, le nombre premier ayant un nombre de bits égal à un bit près à la moitié ou au tiers du nombre de bits du nombre candidat premier. 2. Procédé selon la revendication 1, dans lequel le nombre entier R 25 est choisi égal à : R = (X - (2P)-1 mod IIv) + Z.Hv R étant le nombre entier, X étant un nombre inversible modulo le produit mémorisé, IIv étant le produit mémorisé, P étant le nombre premier, et Z étant un nombre entier choisi de manière à ce que le nombre entier ait une 30 taille telle que le nombre candidat premier ait le nombre de bits souhaité. 3. Procédé selon la revendication 1 ou 2, comprenant des étapes consistant à :générer un nouveau nombre candidat premier à partir du nombre inversible multiplié par 2 modulo le produit mémorisé, si le nombre candidat premier ne réussit pas le test de primalité de Pocklington, et appliquer le test de primalité de Pocklington au nouveau nombre candidat premier. 4. Procédé selon l'une des revendications 1 à 3, dans lequel le nombre inversible est généré de manière à être inférieur au produit mémorisé à partir de l'équation suivante : Xnlv = 1 mod 11v X étant le nombre inversible généré, 11v étant le produit mémorisé, My étant l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit mémorisé liv. 5. Procédé selon la revendication 4, dans lequel le nombre inversible est généré en choisissant aléatoirement un nombre candidat inversible inférieur au produit mémorisé, et en en l'incrémentant de un jusqu'à ce qu'il vérifie l'équation X?Jiv = 1 mod ilv, dans laquelle X est le nombre candidat inversible, 11v est le produit mémorisé, Xliv est l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit mémorisé Hv . 6. Procédé selon la revendication 4, dans lequel un nombre candidat inversible X est choisi aléatoirement à une valeur inférieure au produit mémorisé et incrémenté de la quantité : R-(1 - Xxnv mod Ilv), dans laquelle R est le nombre entier, X est le nombre candidat inversible, Hv est le produit mémorisé, My est l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit mémorisé flv, jusqu'à ce qu'il vérifie l'équation, le nombre entier R étant choisi aléatoirement à une valeur inférieure au produit mémorisé. 7. Procédé selon l'une des revendications 1 à 6, dans lequel la taille (L) en nombre de bits du nombre candidat premier (Pr) est égale à trois fois la taille du nombre premier (P), à une unité près, le procédé comprenant uneétape de calcul du quotient (U) d'une division entière du nombre entier (R) par le nombre premier, le nombre candidat premier généré étant retenu comme nombre candidat premier uniquement si le quotient est impair. 8. Procédé selon l'une des revendications 1 à 7, dans lequel le nombre entier R est choisi dans l'intervalle [I + 1, 2I] avec : I 21_4 2P L étant le nombre de bits souhaité du nombre candidat premier. 9. Procédé selon l'une des revendications 1 à 8, comprenant plusieurs étapes de génération d'un nouveau nombre premier, une première étape de génération fournissant un nombre premier à partir d'un premier nombre premier, chaque étape de génération suivante fournissant un nombre premier à partir du nombre premier obtenu à l'étape de génération précédente, jusqu'à obtenir un nombre premier formé du nombre de bits souhaité, chaque étape de génération comprenant les étapes de génération d'un nombre candidat premier et de test de Pocklington. 10. Procédé selon la revendication 9, dans lequel les premières 20 étapes de génération d'un nouveau nombre premier comprennent : a - le calcul d'un nombre candidat premier (Pr) ayant un nombre de bits (L), par la formule suivante : Pr = 2P-R + 1 P étant un nombre premier prouvé ayant un nombre de bits égal à un bit près 25 à la moitié ou au tiers du nombre de bits du nombre candidat premier, et R étant un nombre entier choisi aléatoirement, b - un test de la divisibilité du nombre candidat premier par les nombres premiers du groupe mémorisé (Qj), c - si le nombre candidat premier n'est pas divisible par les nombres 30 premiers du groupe mémorisé, l'application du test de primalité de Pocklington au nombre candidat premier Pr, d - si l'un des tests de divisibilité et de Pocklington a échoué pour le nombre candidat premier (Pr), l'incrémentation du nombre entier (R) de un, l'incrémentation du nombre candidat premier de deux fois le nombrepremier(P), et à nouveau l'exécution des étapes b à d tant que le nombre candidat premier incrémenté échoue aux tests de divisibilité et de Pocklington. 11. Procédé selon la revendication 10, dans lequel le test de la divisibilité du nombre candidat premier par des nombres du groupe (Qj) mémorisé comprend des étapes consistant à : mémoriser en tant que premiers restes, les restes (Wj) de divisions entières du nombre candidat premier (Pr) par chacun des nombres du Io groupe mémorisé, le nombre candidat premier n'étant pas premier si l'un des premiers restes est nul, mémoriser en tant que second restes, les restes (Gj) de divisions entières de deux fois le nombre premier (P) par chacun des nombres du groupe mémorisé, et 15 si un nouveau nombre candidat premier est calculé à partir du nombre candidat premier en lui ajoutant deux fois le nombre premier, mettre à jour chacun des premiers restes en lui ajoutant le second reste correspondant au même nombre premier du groupe mémorisé, modulo le même nombre premier du groupe mémorisé. 20 12. Procédé selon la revendication 11, dans lequel un nouveau nombre entier (R) est choisi aléatoirement si le nombre entier incrémenté excède une certaine limite (2I), et chacun des seconds restes (Gj) est mis à jour en recevant le double du premier reste (Wj) correspondant au même 25 nombre premier du groupe mémorisé (Qj) modulo le même nombre premier du groupe mémorisé. 13. Procédé selon la revendication 12, dans lequel le premier nombre premier (Pr) est obtenu en choisissant aléatoirement un nombre (P) formé 30 d'un nombre de bits inférieur à un nombre de bits maximum, et en lui appliquant successivement un nombre limité de tests de primalité comportant plusieurs tests de Miller-Rabin (MRA, A = 2, 7, 61 ; 3, 5, 7, 11, 13, 17) appliqués en différentes bases (A), jusqu'à obtenir un nombre ayant passé avec succès les tests de Miller-Rabin, le nombre de bits maximum et lesvaleurs des bases étant choisis pour prouver la primalité du premier nombre premier. 14. Procédé selon la revendication 13, dans lequel les tests de Miller- Rabin (MRA) appliqués au nombre (P) choisi aléatoirement, sont effectués en bases 2, 7 et 61 avec un nombre de bits maximum (LL) choisi inférieur ou égal à 32, ou bien en bases 2, 3, 5, 7, 11, 13 et 17, avec un nombre de bits maximum (LL) choisi inférieur ou égal à 48. 15. Procédé selon l'une des revendications 13 à 14, dans lequel les tests de Miller-Rabin (MRA) appliqués au nombre choisi aléatoirement sont précédés d'un test de divisibilité du nombre (P) choisi aléatoirement par des nombres d'une liste (Q) des plus petits nombres premiers. 16. Procédé selon l'une des revendications 1 à 15, comprenant des étapes de génération d'une clé cryptographique à partir de nombres premiers prouvés. 17. Dispositif électronique comprenant un bloc de calcul (CRU) pour 20 exécuter des multiplications de nombres de grande taille et/ou des opérations d'exponentiation modulaire, caractérisé en ce qu'il est configuré pour mettre en oeuvre le procédé selon l'une des revendications 1 à 16. 25 18. Circuit intégré sur microplaquette de semiconducteur, comprenant un dispositif selon la revendication 17.