Brevet FR2984547A1 — 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. 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 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 en usine. Les microcircuits de carte à puce actuels sont généralement équipés 10 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. 15 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 20 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 25 d'un ordinateur de bureau, et 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. 30 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 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 que DES (Digital Encryption System), AES (Advanced Encryption System), RSA (Rivest, Shamir, Adleman) 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 (Digital Signature Algorithm) 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 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 pour les fabricants de produits de sécurité embarqués. Pourtant, il peut être souhaitable de générer des nombres premiers par une méthode 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. Toutefois, ces procédés font appel à la technique du crible d'Eratosthène pour générer un premier nombre premier de petite taille. Cette technique consiste à choisir aléatoirement un nombre candidat premier de la taille souhaitée et à tester la divisibilité du nombre candidat par tous les nombres premiers inférieurs à la racine carrée du nombre candidat premier. Même si elle est appliquée à des nombres candidats premiers de taille comprise entre 16 et 32 bits, cette technique s'avère inadaptée aux capacités de calcul et de mémorisation des microcircuits équipant les cartes à puces actuelles. Il peut donc être donc souhaitable de pouvoir générer un nombre premier prouvé de petite taille, inférieure à 50 bits, par un procédé qui puisse être mis en oeuvre dans un microcircuit de carte à puce. Des modes de réalisation concernent un procédé itératif de génération d'un nombre premier, mis en oeuvre dans un dispositif électronique, le procédé comprenant des étapes consistant à : générer un premier nombre premier formé d'un nombre réduit de bits inférieur à un nombre de bits maximum, et exécuter plusieurs étapes de génération d'un nouveau nombre premier, à partir d'un nombre premier obtenu à une étape de génération précédente, jusqu'à obtenir un nombre premier formé d'un nombre de bits souhaité, chaque nouveau nombre premier obtenu étant formé d'un nombre de bits supérieur au nombre de bits du nombre premier obtenu à l'étape de génération précédente. 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, 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, chacune des étapes du procédé comprenant des opérations d'exponentiation modulaire exécutées au moyen d'un bloc de calcul du dispositif électronique. 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, et le nombre de bits maximum est choisi inférieur ou égal à 32. Selon un mode de réalisation, les tests de Miller-Rabin sont précédés 5 d'un test de Fermat en base 2. Selon un mode de réalisation, les tests de Miller-Rabin appliqués au nombre choisi aléatoirement, sont effectués en bases 2, 3, 5, 7, 11, 13 et 17, et le nombre de bits maximum est choisi inférieur ou égal à 48. Selon un mode de réalisation, les tests de Miller-Rabin appliqués au 10 nombre choisi aléatoirement sont précédés d'un test de divisibilité du nombre choisi aléatoirement par des nombres d'une liste des plus petits nombres premiers. Selon un mode de réalisation, la génération d'un nouveau nombre premier comprend des étapes de : calcul d'un nombre candidat premier Pr 15 par la formule suivante : Pr = 2P.R +1 P étant le nombre premier obtenu à l'étape de génération précédente, et R étant un nombre entier choisi dans l'intervalle [I + 1, 21] avec : 2L-1 2P 20 L étant le nombre de bits du nouveau nombre premier à générer, et application du test de primalité de Pocklington au nombre candidat premier Pr, le nombre candidat premier étant le nouveau nombre premier s'il vérifie le test de Pocklington. Selon un mode de réalisation, si le nombre candidat premier ne 25 vérifie par le test de Pocklington, un nouveau nombre candidat premier est calculé à partir d'un nouveau nombre entier choisi dans l'intervalle [I +1, 21] . Selon un mode de réalisation, le nouveau nombre entier est choisi aléatoirement ou en incrémentant le nombre entier utilisé pour calculer le 30 nombre candidat premier précédent ne vérifiant pas le test de Pocklington. Selon un mode de réalisation, la taille en nombre de bits du nombre candidat premier suivant est égale à deux fois la taille du nombre premier généré à l'étape de génération précédente, à une unité près. Selon un mode de réalisation, la taille en nombre de bits du nombre 35 candidat premier suivant est égale à trois fois la taille du nombre premier généré à l'étape de génération précédente, à une unité près, le nombre I= candidat premier généré n'étant retenu que 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 impair. 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, la figure 2 représente une séquence d'étapes configurée pour générer un nombre premier de petite taille, selon un mode de réalisation, la figure 3 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, la figure 4 représente une séquence d'étapes mettant en oeuvre un test déterministe de primalité, selon un mode de réalisation. la figure 5 représente une séquence d'étapes configurée pour générer un premier nombre premier de petite taille, selon un autre mode de réalisation, les figures 6 et 7 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, selon d'autres modes de réalisation, la figure 8 représente une séquence d'étapes configurée pour tester la divisibilité d'un nombre par une liste de nombres premiers, la figure 9 représente une séquence d'étapes mettant en oeuvre un test déterministe de primalité, selon un autre mode de réalisation. la figure 10 représente une séquence d'étapes configurée pour générer un nombre premier de grande taille, selon un autre mode de réalisation, 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, adaptée à la séquence d'étapes de la figure 9, les figures 12 et 13 représentent des séquences d'étapes configurées pour générer un nombre premier de grande taille, selon d'autres modes de réalisation, la figure 14 représente schématiquement un exemple de dispositif électronique pouvant mettre en oeuvre les diverses séquences d'étapes présentées dans les figures 1 à 13, les figures 15 et 16 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 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) 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 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 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 2 98454 7 8 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 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 5 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 10 (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 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 15 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 variable L est inférieure à la taille maximum LL, la taille L est incrémentée de un à l'étape S4. 20 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 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 25 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 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 30 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 à 100 ou 200 (y compris entre 25 et 46). La procédure INTP fournit un nombre premier Pr de la 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) 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 Ainsi, la procédure INTP1 comprend les étapes S21, S22 et S24 de la procédure INTP (figure 3). 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 affecter la primalité du nombre Pr fourni par la procédure INTP, INTP1. 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 d'exécution de la procédure INTP ou INTP1, sachant que plus on augmente la valeur y, 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 6 représente un autre mode de réalisation GNSP1 de la procédure GNSP de la figure 4. La procédure GNSP1 diffère de la procédure GNSP en ce qu'elle comprend trois étapes supplémentaires S35 à S37. Les étapes S35 à S37 sont exécutées au lieu de l'étape S32, si la procédure PCKT appelée à l'étape S34 retourne "Faux". A l'étape S35, le nombre R est incrémenté de 1. A l'étape S36, le nombre R est comparé au nombre 21, pour que R reste dans l'intervalle [I +1, 2I]. Si le nombre R est supérieur au nombre 21, les étapes S32 à S34 sont à nouveau exécutées pour choisir un nouveau nombre R aléatoirement dans l'intervalle [I +1, 2I], pour calculer un nouveau nombre candidat premier Pr et tester ce dernier. Si à l'étape S36, le nombre R est inférieur ou égal au nombre 21, l'étape S37, puis l'exécution de la procédure GNSP1 est poursuivie à l'étape S33. A l'étape S37, 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 S38 et de la formule (1). De cette manière, le nombre Pr peut être mis à jour simplement par un décalage binaire du nombre P suivi d'une addition, au lieu d'une multiplication de grands nombres entiers comme dans la formule (1) mise en oeuvre à l'étape S33. L'étape S34 est exécutée après l'étape S37. Ainsi, les étapes S34 à S37 forment une première boucle de traitement dans laquelle le nombre R varie à partir de la valeur qui lui est attribuée à l'étape S33 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 S32 à S37 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 [1+1,21]. La figure 7 représente un autre mode de réalisation GNSP2 de la procédure GNSP1 de la figure 6. La procédure GNSP2 diffère de la procédure GNSP1 en ce qu'avant d'appliquer le test de Pocklington au nombre candidat premier Pr à l'étape S34, elle vérifie d'abord que le nombre Pr n'est divisible par aucun des nombres premiers de la liste Q. A cet effet, la procédure GNSP2 reçoit en paramètre d'entrée la liste Q en plus des paramètres P et L. La procédure GNSP2 comprend les étapes S31 à S37 de la figure 6, ainsi que des étapes supplémentaires S38 à S40. Les étapes S31 à S33 sont tout d'abord exécutées successivement. Les étapes S38 et S39 sont exécutées à la suite de l'étape S33. A l'étape S38, est appelée une procédure DVT de test de la divisibilité du nombre Pr par les nombre premiers de la liste Q. 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 Q et à "Faux" ("False") dans le cas contraire. A l'étape S39, la variable TST est testée. Si la variable TST est à "Vrai" ("True"), l'étape S34 est exécutée, sinon l'exécution de la procédure GNSP2 est poursuivie à l'étape S35. Selon le résultat de la comparaison effectuée à l'étape S36, la procédure GNSP2 se poursuit comme dans la procédure GNSP1 soit à l'étape S32 pour choisir aléatoirement une nouvelle valeur de R, soit à l'étape S35 pour calculer un nouveau nombre candidat premier Pr. Si à l'étape S39, la variable TST est à "Vrai", l'étape S34 est exécutée pour appliquer le test de Pocklington au nombre Pr en appelant la procédure PCKT. Si le nombre Pr vérifie le test de Pocklington, et donc est avec certitude un nombre premier, la procédure GNSP2 se termine en retournant le nombre Pr. Dans le cas contraire, la variable TST est mise à "Faux" à l'étape S40, et l'exécution de la procédure GNSP2 est poursuivie à l'étape S35. La figure 8 représente des étapes S61 à S66 de la procédure DVT, selon un mode de réalisation. A l'étape S61, un indice de boucle j est initialisé à 0 et une variable booléenne TST est initialisée à "Vrai". L'étape S62 qui forme le point d'entrée d'une boucle comprenant les étapes S63 à S66, compare l'indice j au nombre v de nombres premiers dans la liste Q. Cette boucle permet de tester la divisibilité du nombre Pr reçu en paramètre d'entrée de la procédure DVT, par chacun des nombres Qj de la liste Q. Il n'est pas nécessaire que la liste Q comprenne le nombre 2 étant donné que compte tenu de l'équation (1), le nombre Pr est nécessairement impair. Si l'indice j est inférieur au nombre v à l'étape S62, une itération de boucle commençant à l'étape S63 est exécutée, sinon la procédure DVT se termine en fournissant la variable TST. A l'étape S63, une variable w reçoit le reste de la division entière du nombre Pr par le nombre Qj, calculé par la formule suivante : W = Pr mod Qj (9) A l'étape S64, la valeur w est comparée à O. Si la valeur w est nulle, signifiant que le nombre candidat Pr est divisible par le nombre Qj, les étapes S65 et S66 sont exécutées, sinon seulement l'étape S66 est exécutée. A l'étape S65, la variable TST est mise à "Faux", pour indiquer 2 98454 7 16 que le nombre Pr n'est pas un nombre premier. A l'étape S66, l'indice j est incrémenté de un. L'étape S62 est exécutée après l'étape S66. Le choix de la valeur du nombre v des plus petits nombres premiers utilisés à l'étape S53 peut également être effectué en fonction de la durée 5 globale d'exécution de la procédure GNLP appelant la procédure GNSP2, sachant que plus on augmente la valeur y, plus la durée d'exécution des étapes S52 à S56 augmente, et plus la durée globale d'exécution des tests effectués à l'étape 34 diminue. La figure 9 représente un autre mode de réalisation PCKT1 de la 10 procédure PCKT de la figure 4. 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 15 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 2" 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 20 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 à 25 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 à 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 30 probabilité devient négligeable. La figure 10 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', S_' 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 à une unité près (= 3L-1) 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. 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 JLS (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 inférieur à P2+1, le nombre N = 2R.P+1 est premier s'il existe un nombre 10 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), (ii) le quotient de la division entière de R par P, , est impair, La condition R Selon un mode de réalisation, la procédure INTP (ou INTP1) est appelée à l'étape S81 pour obtenir un nombre premier Pr de taille inférieure à la taille LL. Les étapes S82 à S87 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 S82, la taille L est comparée à deux fois la taille LL (2LL). Si la taille L est supérieure à 2LL, autrement dit, pour les grandes valeurs de L, les étapes S83 à S85 et S87 sont exécutées, sinon seules les étapes S86 et S87 sont exécutées. A l'étape S83, un nombre réel s entre 0 et 1 est choisi aléatoirement ou pseudo-aléatoirement. A l'étape S84, un nombre réel r est calculé en élevant 2 à la puissance s - 1. Ainsi, le nombre r est compris entre 1/2 et 1. A l'étape S85, la taille L multipliée par le nombre réel (1 - r) est comparée à la taille LL. Si la quantité L(1 - r) est supérieure la taille LL, l'étape S87 est exécutée, sinon les étapes S83 à S85 sont à nouveau exécutées. En 2 98454 7 19 d'autres termes, l'étape S83 marque l'entrée d'une boucle de traitement comprenant les étapes S83 à S85 dans laquelle une nouvelle valeur de r est calculée jusqu'à ce que la condition de l'étape S85 soit vérifiée. A l'étape S86, pour les valeurs de L comprises entre LL et 2LL, le nombre réel r est 5 fixé à 0.5. A l'étape S87, une nouvelle taille L est calculée en multipliant la 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 S88, la procédure GNM est appelée avec la nouvelle valeur de la taille L obtenue à 10 l'étape S87. Ainsi, la procédure GNM est une procédure récursive. A l'étape S89, la procédure GNSP (ou l'une des variantes GNSP1 et GNSP2) est appelée pour obtenir un nombre premier Pr de taille L, à partir du nombre premier P obtenu à l'étape S88. La procédure GNM se termine à l'issue de l'étape S89 en fournissant le nombre premier Pr fourni par la procédure 15 GNSP (ou GNSP1 ou GNSP2) appelée à l'étape S89. La figure 13 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 13, cette procédure reçoit en tant que paramètre 20 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 à 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 25 capacité de calcul excessives. 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. Selon un mode de réalisation, la procédure INTP (ou INTP1) est 30 appelée à l'étape S72 pour obtenir un nombre premier Pr de taille inférieure à la taille LL. 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 35 nombre premier P de taille L. La procédure GNST est donc également récursive. A l'étape S75, la procédure GNSP (ou l'une des variantes GNSP1 et GNSP2) 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. La figure 14 représente un exemple de dispositif électronique DV dans lequel les divers modes de réalisation du procédé de génération de nombre premier décrits précédemment peuvent être mis en oeuvre. Le dispositif DV peut être un circuit intégré sur microplaquette de semiconducteur, formant de manière générale un microprocesseur. La microplaquette peut par exemple être agencée sur un support tel qu'une carte en plastique, l'ensemble formant une carte à puce. Le dispositif DV comprend une unité de traitement UC, un bloc de calcul cryptographique CRU, et une ou plusieurs mémoires MEM pouvant comprendre une mémoire volatile et une mémoire non volatile. Le dispositif électronique DV comprend également une interface de communication 101 à contact ou sans contact, par exemple un circuit RF ou UHF fonctionnant par couplage inductif ou par couplage électrique. Le bloc CRU peut être un coprocesseur équipé d'une unité centrale de commande programmable de type machine d'état, un coprocesseur entièrement hardware, ou des sous-programmes exécutés par l'unité UC. 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 à l'étape S33 des procédures GNSP, GNSP1 à GNSP3, 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. 2 98454 7 21 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, S32, S42 et S85. L'unité UC peut ainsi comprendre un module de génération de 5 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. 10 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 15 oeuvre l'algorithme RSA en générant deux nombres premiers de 512 ou 1024 bits à l'aide du module PGN. La figure 15 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 S101 à S106. Aux étapes S101 et S102, deux 20 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 S103, les nombres P et Q sont multipliés l'un par l'autre pour obtenir un nombre N. A l'étape S104, 25 un nombre impair E est choisi aléatoirement dans un certain intervalle, par exemple entre 3 et 21- - 1. A l'étape S105, si le nombre E choisi n'est pas inversible modulo la quantité (P-1)(Q-1), un nouveau nombre E est choisi à l'étape S104, sinon l'étape S106 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 30 après l'étape S106 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 16 représente une 35 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 S111 à S115. Aux étapes S111 et S112, 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 S113, 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 S14, une clé secrète SK est choisie aléatoirement dans l'intervalle [1, Q-1]. A l'étape S115, 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 S115 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 couvre également toutes les combinaisons possibles de taille maximum du premier nombre premier généré et de bases de tests de Miller-Rabin, pour prouver la primalité de ce nombre, sachant que la capacité de telles combinaisons à prouver la primalité d'un nombre, peut être démontrée par de simples tests exhaustifs. 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. Brillhart, D. H. Lehmer, J. L. Selfridge, B. Tuckerman, and Jr. S. S. Wagstaff, "Factorization of b" ± 1, b = 2; 3; 5; 7; 10; 11; 12 Up to High Powers", vol. 22, American Mathematical Society, 1988. REVENDICATIONS1. Procédé de cryptographie dans un dispositif électronique (DV), le procédé comprenant des étapes consistant à : générer un premier nombre premier (Pr) formé d'un nombre réduit de bits (L) inférieur à un nombre de bits maximum (LL), et exécuter plusieurs étapes de génération d'un nouveau nombre premier, à partir d'un nombre premier obtenu à une étape de génération précédente, jusqu'à obtenir un nombre premier formé d'un nombre de bits souhaité, chaque nouveau nombre premier obtenu étant formé d'un nombre de bits supérieur au nombre de bits du nombre premier obtenu à l'étape de génération précédente, caractérisé en ce que la génération du premier nombre premier (Pr) comprend des étapes consistant à : choisir aléatoirement un nombre (P) formé du nombre réduit de bits, et appliquer au nombre choisi un ensemble limité de tests de primalité de Miller-Rabin (MRA, A = 2, 7, 61 ; 3, 5, 7, 11, 13, 17) en différentes bases (A), jusqu'à ce que le nombre choisi passe avec succès l'ensemble de tests de Miller-Rabin, le nombre de bits maximum et les valeurs des bases étant choisis pour prouver la primalité du premier nombre premier, chacune des étapes du procédé comprenant des opérations d'exponentiation modulaire exécutées au moyen d'un bloc de calcul (CRU) du dispositif électronique. 2. Procédé selon la revendication 1, 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, et le nombre de bits maximum (LL) est choisi inférieur ou égal à 32. 3. Procédé selon la revendication 2, dans lequel les tests de Miller-Rabin (MR,) sont précédés d'un test de Fermat (F2) en base 2. 4. Procédé selon la revendication 1, dans lequel les tests de Miller-Rabin (MRA) appliqués au nombre (P) choisi aléatoirement, sont effectués enbases 2, 3, 5, 7, 11, 13 et 17, et le nombre de bits maximum (LL) est choisi inférieur ou égal à 48. 5. Procédé selon l'une des revendications 1 à 4, 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. 6. Procédé selon l'une des revendications 1 à 5, dans lequel la 10 génération d'un nouveau nombre premier comprend des étapes de : calcul d'un nombre candidat premier Pr par la formule suivante : Pr = 2P.R +1 P étant le nombre premier obtenu à l'étape de génération précédente, et R étant un nombre entier choisi dans l'intervalle [I +1, 21] avec : [2L-1 '5 I - 2P L étant le nombre de bits du nouveau nombre premier à générer, et application du test de primalité de Pocklington au nombre candidat premier Pr, le nombre candidat premier étant le nouveau nombre premier s'il vérifie le test de Pocklington. 7. Procédé selon la revendication 6, comprenant une étape de calcul d'un nouveau nombre candidat premier à partir d'un nouveau nombre entier (R) choisi dans l'intervalle [1+ 1, 21] si le nombre candidat premier (Pr) ne vérifie pas le test de Pocklington. 8. Procédé selon la revendication 7, dans lequel le nouveau nombre entier (R) est choisi aléatoirement ou en incrémentant le nombre entier utilisé pour calculer le nombre candidat premier précédent ne vérifiant pas le test de Pocklington (Pr). 9. Procédé selon l'une des revendications 1 à 8, dans lequel la taille (L) en nombre de bits du nombre candidat premier (Pr) suivant est égale à deux fois la taille du nombre premier (P) généré à l'étape de génération précédente, à une unité près. 20 25 30 10. Procédé selon l'une des revendications 1 à 8, dans lequel la taille (L) en nombre de bits du nombre candidat premier (Pr) suivant est égale à trois fois la taille du nombre premier (P) généré à l'étape de génération précédente, à une unité près, le procédé comprenant des étapes de calcul d'un quotient (U) d'une division entière du nombre entier (R) par le nombre premier généré à l'étape de génération précédente, et de rejet du nombre candidat premier généré si le quotient est pair. 11. Procédé selon l'une des revendications 1 à 10, comprenant des étapes consistant à générer une clé cryptographique à partir du nombre premier formé du nombre de bits souhaité. 12. Dispositif électronique comprenant un bloc de calcul (CRU) pour 15 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 à 11. 20 13. Circuit intégré sur microplaquette de semiconducteur, comprenant un dispositif selon la revendication 12.