FR2984550A1 - Procede de generation de nombres premiers prouves adapte aux cartes a puce - Google Patents

Procede de generation de nombres premiers prouves adapte aux cartes a puce Download PDF

Info

Publication number
FR2984550A1
FR2984550A1 FR1161742A FR1161742A FR2984550A1 FR 2984550 A1 FR2984550 A1 FR 2984550A1 FR 1161742 A FR1161742 A FR 1161742A FR 1161742 A FR1161742 A FR 1161742A FR 2984550 A1 FR2984550 A1 FR 2984550A1
Authority
FR
France
Prior art keywords
prime
candidate
integer
steps
procedure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1161742A
Other languages
English (en)
Other versions
FR2984550B1 (fr
Inventor
Benoit Feix
Christophe Clavier
Pascal Paillier
Loic Thierry
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Rambus Inc
Original Assignee
Inside Secure SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority to FR1161742A priority Critical patent/FR2984550B1/fr
Application filed by Inside Secure SA filed Critical Inside Secure SA
Priority to EP12815733.6A priority patent/EP2791783B1/fr
Priority to PCT/FR2012/052901 priority patent/WO2013088065A1/fr
Priority to IN4637CHN2014 priority patent/IN2014CN04637A/en
Priority to US14/365,899 priority patent/US9596080B2/en
Priority to US14/365,671 priority patent/US9577826B2/en
Priority to CN201280062261.5A priority patent/CN104067217A/zh
Priority to PCT/FR2012/052902 priority patent/WO2013088066A1/fr
Priority to EP12815734.4A priority patent/EP2791784A1/fr
Publication of FR2984550A1 publication Critical patent/FR2984550A1/fr
Application granted granted Critical
Publication of FR2984550B1 publication Critical patent/FR2984550B1/fr
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/72Indexing scheme relating to groups G06F7/72 - G06F7/729
    • G06F2207/7204Prime number generation or prime number testing

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

L'invention concerne un procédé de génération d'un nombre premier, mis en oeuvre dans un dispositif électronique (DV), le procédé comprenant des étapes de génération d'un nombre premier à partir d'un autre nombre premier par la formule Pr = 2P?R + 1, P étant un nombre premier ayant un nombre de bits inférieur à celui du nombre candidat premier, et R étant un nombre entier, et d'application du test de primalité de Pocklington au nombre candidat premier, le nombre candidat premier étant premier prouvé s'il réussit le test de Pocklington. Selon l'invention, 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 nombre candidat premier généré étant retenu comme nombre candidat premier uniquement si le quotient (U) de la division entière du nombre entier (R) par le nombre premier est impair.

Description

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.
Grâce à Diffie et Hellman notamment, 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 crible d'Eratosthène ou le test de Fermat. 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. Jusqu'à récemment, 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. 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. Une telle certitude s'avère cependant nécessaire lorsqu'un niveau de sécurité élevé est requis comme par exemple pour les applications de paiement et d'identification. 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 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 embarqués dans un microcircuit de carte à puce. De telles opérations d'exponentiation sont é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 déterministe qui par définition offre une certitude absolue que les nombres obtenus sont premiers, 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é 10 comprenant des étapes de génération d'un nombre premier à partir d'un autre nombre premier par la formule suivante : Pr = 2P.R + 1 P étant un nombre premier ayant un nombre de bits inférieur à un nombre de bits souhaité du nombre candidat premier, et R étant un nombre entier, et 15 d'application du test de primalité de Pocklington au nombre candidat premier, le nombre candidat premier étant premier prouvé s'il réussit le test de Pocklington. 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 20 nombre candidat premier uniquement si le quotient de la division entière du nombre entier par le nombre premier est impair. Selon un mode de réalisation, le procédé comprend des étapes consistant à incrémenter le nombre entier de un ou d'une certaine quantité selon la parité du quotient pour que le quotient soit impair, modifier le 25 nombre candidat premier en lui ajoutant deux fois le nombre premier, et appliquer le test de primalité de Pocklington au nombre candidat premier modifié, si le nombre candidat premier n'est pas retenu comme nombre candidat premier ou s'il ne réussit pas le test de Pocklington. Selon un mode de réalisation, le procédé comprend une étape de test 30 de la divisibilité du nombre candidat premier par des petits nombres premiers, le nombre candidat premier généré n'étant retenu comme nombre candidat premier que s'il n'est pas divisible par les petits nombres premiers. Selon un mode de réalisation, le procédé comprend des étapes consistant à : mémoriser en tant que premiers restes, les restes des 35 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 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 respectivement le second reste correspondant au 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 io chacun des seconds restes est mis à jour en recevant le double du premier reste correspondant au même petit nombre premier. Selon un mode de réalisation, le nombre entier est choisi 1I + 21 aléatoirement dans l'intervalle []avec : I= 2P 15 L étant le nombre de bits souhaité du nouveau nombre premier à générer. 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 20 que le nombre candidat premier ne soit divisible par aucun des nombres du groupe, le nombre premier P ayant un nombre de bits égal à un bit près au tiers du nombre de bits souhaité du nombre candidat premier. Selon un mode de réalisation, le nombre entier est choisi égal à : R = X - ((2P)-1 mod 11v) +Z.1-1v, 25 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 ait le nombre de bits souhaité. Selon un mode de réalisation, le nombre entier est choisi de manière 30 à être pair et de manière à ce que le reste de sa division entière par le nombre premier soit impair. Selon un mode de réalisation, le nombre entier est choisi égal à : R = K + (K mod 2)P.Hv + 2P.Z.11v, avec K = (((X - (2P)-1 - S)/P) mod flv)P+S, S étant le reste de la division 35 entière du nombre entier R par le nombre premier P, X étant un nombre inversible modulo le produit Ilv 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 ait le nombre de bits souhaité.
Selon un mode de réalisation, si le nombre candidat premier ne réussit pas le test de primalité de Pocklington, il comprend des étapes de génération d'un nouveau nombre candidat premier en ajoutant au nombre candidat premier un multiple du nombre inversible modulo le produit, le multiple étant non divisible par l'un des nombres formant le produit, 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 recherchant un nombre X inférieur au produit Ilv vérifiant l'équation suivante : Xun" = 1 mod Ilv, UN étant l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit Ilv. Selon un mode de réalisation, un nombre candidat inversible est choisi aléatoirement à une valeur inférieure au produit Ilv et incrémenté de un ou de la quantité R. jusqu'à ce qu'il vérifie l'équation : Xun" = 1 mod Ilv, R étant le nombre entier. 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 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 les étapes de test de Pocklington. 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.
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 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. Des modes de réalisation concernent également un procédé de cryptographie comprenant des étapes consistant à : générer des nombres premiers, générer des clés cryptographiques à partir des nombres premiers, ce procédé étant mis en oeuvre dans un dispositif électronique, les nombres premiers étant générés par le procédé tel que défini précédemment. 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, ce dispositif étant configuré pour mettre en oeuvre le procédé de génération de nombres premiers 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 précédemment défini.
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, les figures 4 et 5 représentent des séquences d'étapes mettant en oeuvre un test déterministe de primalité, selon des modes de réalisation, la figure 6 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, les figures 7 et 8 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, la figure 9 représente une séquence d'étapes configurée pour tester la divisibilité d'un nombre par une liste de nombres premiers, la figure 10 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 11 et 12 représentent des séquences d'étapes configurées pour tester la divisibilité d'un nombre par une liste de nombres premiers, la figure 13 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 14 représente une séquence d'étapes d'initialisation appelée par la séquence de la figure 13, la figure 15 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 16 représente une séquence d'étapes d'initialisation appelée par la séquence de la figure 15, la figure 17 représente une séquence d'étapes appelée par la séquence de la figure 15 et configurée pour tester la divisibilité d'un nombre par une liste de nombres premiers, la figure 18 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 19 et 20 représentent des séquences d'étapes de génération d'un nombre inversible, appelées par la séquence de la figure 13, selon des modes de réalisation, la figure 21 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 22 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 à 21, les figures 23 et 24 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 démontré par Brillhart, Lehmer et Selfridge (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 tel que : N = 2R.P+1 (1) est premier, (i) s'il existe un nombre entier A supérieur ou égal à 2 et inférieur ou égal à N tel que : AN-1 =1 mod N, et (2) GCD(A2R - 1, N) =1, (3) (ii) le quotient de la division entière de R par P, R P , est impair, mod représentant l'opération modulo et GCD(x,y) étant une fonction donnant 15 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 20 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 triple de la taille du nombre premier P. Il est à noter que le caractère premier des nombres obtenus en appliquant ce 25 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 51 à S9 d'une procédure GNLP de génération d'un grand nombre premier. La procédure GNLP reçoit 30 en tant que paramètre d'entrée la taille Ln en nombre de bits du nombre premier à générer. Les étapes 51 à S4 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 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 le quotient de la division entière de L par 3). Lorsque la 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 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 20 29 14 26 k 3 3 4 4 A l'étape S5 suivant l'étape S4, est appelée une procédure INTP de détermination d'un premier nombre premier ayant la taille L. La procédure reçoit en paramètre d'entrée la variable L et le produit Ilv de v plus petits nombres premiers, et fournit un nombre premier Pr. Les v petits nombres premiers dans le produit Ilv sont par exemple ceux inférieurs à 100 ou 200 (y compris entre 25 et 46), le nombre 2 pouvant être exclu. 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. 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.
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 triplée à une unité près (= 3L-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 < P2+1 du théorème énoncé précédemment. A l'étape S9, une procédure GNSP est appelée avec pour paramètres d'entrée les variables P et L. La procédure GNSP fournit un nombre premier Pr ayant la taille L à partir du nombre premier P de taille inférieure fourni en entrée. A cet effet, la procédure GNSP se base sur le théorème dérivé énoncé précédemment. Il est à noter que les valeurs de k fournies dans la table 1 représentent le nombre d'itérations effectuées par la procédure GNLP. La condition R < P2+1 du théorème dérivé énoncé précédemment est satisfaite sensiblement par l'opération exécutée à l'étape S8 pour déterminer la taille du nombre premier à générer suivant. Selon un mode de réalisation, la procédure INTP peut mettre en oeuvre le crible d'Eratosthène, c'est-à-dire, choisir aléatoirement un nombre candidat premier présentant une petite taille par exemple comprise entre 16 et 24 bits, et tester la divisibilité du nombre candidat premier par tous les nombres premiers inférieurs à la racine carrée du nombre candidat premier. Selon un autre mode de réalisation, le premier nombre premier Pr obtenu à l'étape S5 peut être fixé à une certaine valeur. Selon un autre mode de réalisation, la procédure INTP peut consister à choisir aléatoirement un nombre premier dans une liste préétablie de nombres premiers de même taille fixée à une valeur inférieure à 33 ou 49 bits. Selon un autre mode de réalisation, le premier nombre premier de petite taille fourni par la procédure INTP à l'étape S5 est obtenu en choisissant de manière aléatoire un nombre ayant une taille inférieure à 32 bits, et en appliquant le test probabiliste de Miller-Rabin, successivement avec les bases 2, 7 et 61. En effet, Pomerance et al. (cf. publication [1]) et Jaechke (cf. publication [2]) ont démontré que tout nombre entier ayant une taille inférieure à 32 bits est premier de manière prouvée, s'il passe avec succès le test de Miller-Rabin pour les bases 2, 7 et 61. Le paramètre LL dans les procédures GNLP, GNLP1, GNM et GNST est alors fixé à 32 et représente la taille maximum en nombre de bits que peut avoir le nombre premier généré par la procédure INTP. 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 suivantes est satisfaite : AD =1 mod N , A2RD - 1 mod N , 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 é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-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-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 à 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 Ilv 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 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 Ilv et le test échoue si le nombre Pr est (5) (6) divisible par l'un des v nombres du produit fIv . Ce test peut être effectué en recherchant le plus grand commun diviseur GCD du nombre Pr et du produit fIv , 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 fIv peut ne pas comprendre le nombre 2 si le nombre Pr est choisi impair à l'étape S21. Au lieu de recevoir le produit fIv , la procédure peut recevoir les v premiers nombres premiers sous la forme d'une liste Q, et l'étape 22 peut consister à tester successivement la divisibilité du nombre Pr par chacun des nombres premiers d'une liste Q contenant les v nombres premiers du produit fIv . Selon un autre mode de réalisation, le test de la divisibilité du nombre Pr par l'un de ces nombres premiers peut consister à calculer le plus grand commun diviseur des nombres Pr et LN ,. 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 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. La figure 3 représente des étapes S31 à S36 de la procédure GNSP, selon un mode de réalisation. Les étapes S31 à S36 sont exécutées successivement. A l'étape S31, un nombre I est calculé par la formule suivante : I 2L-1 (8) 2P P étant un nombre premier, 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 par y. A l'étape Y S32, un nombre entier R est choisi à l'aide d'une fonction RND aléatoire ou pseudo-aléatoire dans l'intervalle [I +1, 21]. Les étapes suivantes S33 et S34 sont prévues pour mettre en oeuvre le test (ii) du théorème énoncé précédemment, sachant que le test (i) est mis en oeuvre par l'étape S36. A l'étape S33, le quotient U de la division entière du nombre R par le nombre P est calculé. A l'étape S34, si le quotient U est pair, l'exécution de la procédure est reprise à l'étape S33 pour déterminer un nouveau nombre entier R. Si le quotient U est impair, l'étape S35 est exécutée pour déterminer un nombre candidat premier Pr par la formule (1). A l'étape S36, la primalité du nombre candidat premier Pr est testée à l'aide du test (i) correspondant au test de Pocklington. Ce test est mis en oeuvre par une procédure PCKT. Cette procédure reçoit en paramètres d'entrée, le nombre Pr à tester et le nombre R utilisé pour calculer le nombre Pr à l'étape S35, ainsi qu'optionnellement la taille L en nombre de bits du nombre Pr. Cette procédure renvoie une variable booléenne à "Vrai" si le nombre Pr a passé avec succès le test, et à "Faux" dans le cas contraire. Si la procédure PCKT retourne "Vrai", le nombre Pr est premier et la procédure GNSP se termine en fournissant le nombre Pr. Si la procédure PCKT retourne "Faux", l'exécution de la procédure GNSP est reprise à l'étape S33 pour déterminer un nouveau nombre entier R. La figure 4 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 5 représente un autre mode de réalisation PCKT1 de la 35 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 2" qui peuvent être effectuées par un microcircuit, pardes calculs de carrés et d'additions modulaires. 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 à 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.
La figure 6 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 ayant été testé avec succès par les tests de Miller-Rabin en bases 2, 3, 5, 7, 11, 13 et 17, est un nombre premier de manière prouvée. 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 à 48. Ainsi, la procédure INTP1 comprend les étapes S21, S22 et S24 de la procédure INTP (figure 2). 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 facilement que le test de Fermat. 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 des tests effectués aux étapes S23 à S24b ou S24 à S24h diminue. La figure 7 représente un autre mode de réalisation GNSP1 de la procédure GNSP de la figure 3. La procédure GNSP1 diffère de la procédure GNSP en ce qu'elle comprend deux étapes supplémentaires S37 et S38. Les étapes S37 et S38 sont exécutées au lieu de l'étape S32, si le quotient U est pair ou si la procédure PCKT appelée à l'étape S36 retourne "Faux". A l'étape S37, le nombre R est incrémenté de 1. A l'étape S38, le nombre R est comparé à la quantité 21, pour que R reste dans l'intervalle [1+1,21]. Si le nombre R est supérieur à la quantité 21, l'exécution de la procédure est poursuivie à l'étape S32 pour choisir un nouveau nombre R aléatoirement dans l'intervalle [1+1,21], pour calculer un nouveau nombre candidat premier Pr et tester ce dernier. Si à l'étape S38, le nombre R est inférieur ou égal à la quantité 21, l'exécution de la procédure est poursuivie à l'étape S33. Ainsi, les étapes S33 à S36 forment une première boucle de traitement dans laquelle le nombre R varie 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. Les étapes S32 à S36 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].
De cette manière, si les tests de Pocklington exécutés à l'étape S36 échouent, on évite la multiplication de grands nombres effectuée à l'étape S35 tant que le nombre entier R est inférieur à la quantité 21. La figure 8 représente un autre mode de réalisation GNSP2 de la procédure GNSP de la figure 3. La procédure GNSP2 diffère de la 15 procédure GNSP en ce qu'elle comprend des étapes supplémentaires S39 à S42. Les étapes S39 et S40 sont exécutées après l'étape S35. A l'étape S39, une procédure DVT de test de la divisibilité du nombre Pr par les nombres 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 20 booléenne TST à "Vrai" si le nombre Pr n'est pas divisible par les nombres de la liste 11v et à "Faux" ("False") dans le cas contraire. A l'étape S40, la variable TST est testée. Si la variable TST est à "Vrai" ("True"), l'étape S33 est exécutée, sinon l'étape S37 est exécutée. Si à l'étape S38, le nombre R est inférieur à la quantité 21, les étapes S41, S39 et S40 sont 25 successivement exécutées. A l'étape S41, le nombre Pr est mis à jour compte tenu de l'incrémentation du nombre R à l'étape S37. Ainsi à l'étape S40, 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 S37 et de la formule (1). De cette manière, le nombre Pr peut être 30 mis à jour simplement par un décalage binaire de P suivi d'une addition, au lieu de mettre en oeuvre une multiplication de grands nombres entiers comme dans la formule (1) mis en oeuvre à l'étape S35. Après l'étape S41, l'exécution de la procédure GNSP2 est poursuivie à étape S39. Ainsi, les étapes S33, S34 et S36 à S42 forment une première boucle 35 de traitement dans laquelle le nombre R est incrémenté de un à chaque itération jusqu'à la quantité 21, le cas échéant, et dans laquelle la primalité du nombre Pr correspondant au nombre R est testée. Les étapes S32 à S42 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 S35 ou S41 ne satisfait pas aux tests de non divisibilité et de Pocklington, un nouveau nombre candidat premier est déterminé aux étapes S32 et S35 ou S41. La figure 9 représente des étapes S71 à S76 de la procédure DVT, selon un mode de réalisation. A l'étape S71, un indice de boucle j est initialisé à 0 et une variable booléenne TST est initialisée à "Vrai". L'étape S72 qui forme l'entrée d'une boucle comprenant les étapes S73 à S76, compare l'indice j au nombre v de petits nombres premiers dans la liste Q. Cette boucle permet de tester la divisibilité du nombre Pr par chacun des nombres Qj de la liste Q. Si l'indice j est inférieur au nombre v à l'étape S72, une itération de boucle commençant à l'étape S73 est exécutée, sinon la procédure DVT se termine en fournissant la variable TST. A l'étape S73, 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 (9) A l'étape S74, 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 S75 et S76 sont exécutées, sinon seulement l'étape S76 est exécutée. A l'étape S75, la variable TST est mise à "Faux", pour indiquer que le nombre Pr n'est pas un nombre premier. A l'étape S76, l'indice j est incrémenté de un. L'étape S72 est exécutée après l'étape S76. La figure 10 représente un autre mode de réalisation GNSP3 de la procédure GNSP. La procédure GNSP3 diffère de la procédure GNSP2 en ce qu'elle comprend des optimisations de calcul dans les tests de divisibilité du nombre Pr par les nombres premiers de la liste Q. Ainsi, la procédure GNSP3 comprend une étape S39' remplaçant l'étape S39, et une étape supplémentaire S43 exécutée à la suite de l'étape S41, l'étape S42 étant exécutée à la suite de l'étape S43. A l'étape S39', 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 (calculés à l'étape S73) des divisions du nombre Pr par chacun des nombres Qj de la liste Q (cf formule (9)). La table G est prévue pour recevoir les restes Gj 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 S43, 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 11 représente la procédure DVT1 qui diffère de la procédure DVT en ce qu'elle comprend des étapes supplémentaires S77 à S79 exécutées à la suite de l'étape S72. A l'étape S77, 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 fourni par la procédure INTP, les étapes S78 et S73 sont exécutées, sinon les étapes S79 et S73 sont exécutées. A l'étape S78, la valeur Gj est calculée par la formule suivante : Gj = 2P mod Qj (10) Qj étant un nombre premier de rang j dans la liste Q. A l'étape S79, la valeur Gj est calculée par la formule suivante : Gj = 2Wj mod Qj (11) Wj étant une valeur obtenue précédemment à l'étape S73, ou à une autre étape S83 décrite dans ce qui suit, lors d'un appel précédent de la procédure GNSP2. Les tables W et Q rassemblant les valeurs Wj et Gj qui sont successivement chargées aux étapes S73 et S78 ou S79, sont donc mémorisés 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 (13) constitue également une simplification de calcul par rapport à la formule (10) exécutée à l'étape S78. En effet, la formule (13) consiste en une division de petits nombres, tandis que la formule (10) consiste en une division d'un grand nombre (2P) par un petit nombre Qj. Il est à noter que l'étape S73 (figures 9 et 11) 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 + 1) mod Qj, les nombres Rj et Gj étant inférieurs au nombre premier Qj qui peut présenter une taille limitée à 8 ou 16 bits.
La figure 12 représente des étapes S81 à S86 de la procédure DVT2, selon un mode de réalisation. A l'étape S81, un indice de boucle j est initialisé à 0 et une variable booléenne TST est initialisée à "Vrai". L'étape S82 qui forme le point d'entrée d'une boucle comprenant les étapes S83 à S86, compare l'indice j au nombre v de nombres premiers dans la liste Q.
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 S41 de la procédure GNSP2. Cette boucle permet également de mettre à jour la table de valeurs W, compte tenu de la modification du nombre Pr à l'étape S41.
Si l'indice j est inférieur au nombre v à l'étape S82, une itération de boucle commençant à l'étape S83 est exécutée, sinon la procédure DVT2 se termine en fournissant la variable TST. A l'étape S83, la table W à l'indice j est mise à jour par la formule suivante : Wj = Wj + Gj mod Qj (12) ce qui correspond à la formule (9) compte tenu de la mise à jour du nombre Pr effectuée à l'étape S41. La mise en oeuvre de la formule (12) constitue également une simplification de calcul par rapport à la formule (9) exécutée à l'étape S83. En effet, la formule (12) ne comprend qu'une addition de petits nombres, éventuellement suivie d'une soustraction par Qj, tandis que la formule (9) consiste en une division d'un grand nombre (Pr) par un petit nombre (Qj). A l'étape S84, la valeur Wj est comparée à 0. Si la valeur Wj est nulle, signifiant que le nombre candidat Pr est divisible par le nombre Qj, les étapes S85 et S86 sont exécutées, sinon seulement l'étape S86 est exécutée. A l'étape S85, la variable TST est mise à "Faux", pour indiquer que le nombre Pr n'est pas un nombre premier. A l'étape S86, l'indice j est incrémenté de un. L'étape S82 est exécutée après l'étape S86. Il est à noter que le choix du nombre v des plus petits nombres premiers utilisés aux étapes S73, S78, S79 et S83 peut également être effectué en fonction de la durée globale d'exécution de la procédure GNLP appelant la procédure GNSP3, sachant que plus on augmente la valeur y, 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 S36 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 GNSP3 peut être appliqué à la procédure INTP ou INTP1 exécutée à l'étape S5. La figure 13 représente un autre mode de réalisation GNSP4 de la procédure GNSP de la figure 3. La procédure GNSP4 permet de ne calculer qu'une fois le quotient U, le nombre entier R étant modifié pour que le quotient U reste impair. La procédure GNSP4 diffère de la procédure GNSP1 de la figure 7 en ce qu'elle comprend des étapes supplémentaires S39", S40, et S43 à S49, l'étape S37 étant supprimée. Les étapes S44, S39" et S40 sont exécutées successivement après l'étape S34 si le nombre U est impair. Les étapes S45 et S38 sont exécutées successivement après l'étape S34 si le nombre U est pair. A l'étape S44, une procédure d'initialisation INIT des tables W et G est appelée. Cette procédure reçoit comme paramètres le nombre premier P, la taille L du nombre candidat premier Pr courant, et les tables de valeurs W et G. A l'étape S39", une procédure DVT' est appelée, cette procédure retournant une variable booléenne TST. La procédure DVT' diffère de la procédure DVT seulement en ce qu'elle mémorise dans la table W qui est passée en paramètre d'appel de la procédure DVT', les restes Wj des divisions entières du nombre Pr par les nombres premiers Qj de la liste Q. A l'étape S45 (si le nombre U est pair), le nombre R est incrémenté de P, ce qui correspond à une incrémentation du quotient U de un, qui devient de ce fait impair. A l'étape S38, le nombre R est comparé à la quantité 21, pour que R reste dans l'intervalle [1+1,21]. Si le nombre R est supérieur à la quantité 21, l'exécution de la procédure est poursuivie à l'étape S32 pour choisir un nouveau nombre R aléatoirement dans l'intervalle [I +1, 2I], pour calculer un nouveau nombre candidat premier Pr (étape S35) et tester ce dernier. Si à l'étape S38, le nombre R est inférieur ou égal à la quantité 21, les étapes S46, S44 et S39" sont exécutées successivement. A l'étape S46, le nombre candidat premier Pr est incrémenté de deux fois le nombre premier P élevé au carré (2P2), ce qui correspond à l'incrémentation de R à l'étape S45, compte tenu de l'équation (1).
A l'étape S40, la variable TST est testée. Si la variable TST est à "Vrai" la procédure PCKT (ou PCKT1) est appelée en retournant la variable TST (étape S36). Si la procédure PCKT appelée à l'étape S36 retourne "Faux", l'étape S40 est exécutée, et dans le cas contraire, le nombre Pr est premier avec certitude et la procédure GNSP4 se termine en fournissant le nombre Pr. Si à l'étape S40, la variable TST est à "Faux", les étapes S47 et S48 sont exécutées. A l'étape S48, le nombre R est incrémenté de deux fois le nombre premier P, ce qui correspond à une incrémentation du quotient U de deux, pour que U reste impair. A l'étape S48, le nombre R est comparé à la quantité 21, pour que R reste dans l'intervalle [I +1, 2I]. Si le nombre R est supérieur à la quantité 21, l'exécution de la procédure est poursuivie à l'étape S32. Dans le cas contraire, les étapes S49, S43 et S40 sont exécutées. A l'étape S49, le nombre candidat premier Pr est incrémenté de quatre fois le nombre premier P élevé au carré, ce qui correspond à l'incrémentation du nombre R à l'étape S47. A l'étape S43, la procédure DVT2 est appelée pour tester la divisibilité du nombre Pr par les nombres premiers de la liste Q en utilisant les tables de valeurs W et G. De cette manière, les opérations effectuées aux étapes S35 et S33, faisant intervenir de grands nombres ne sont effectuées que lors de l'activation de la procédure GNSP4 et lorsque le nombre R n'est plus dans l'intervalle [I +1, 2I]. Lorsque le nombre candidat premier Pr est détecté non premier aux étapes S36, S39" et S43, le nombre R est incrémenté de P ou de 2P pour maintenir le quotient U impair et les tests de divisibilité effectués par les procédures DVT' et DVT2 sont effectués en évitant autant que possible les opérations faisant intervenir de grands nombres comme Pr et P.
La figure 14 représente la procédure INIT selon un mode de réalisation. La procédure INIT comprend des étapes S91 à S97. A l'étape S91, un indice de boucle j est initialisé à O. A l'étape S92 suivante, il est déterminé si l'indice j a atteint sa valeur de fin de boucle. Si tel est le cas, la procédure INIT se termine, sinon l'étape S93 est exécutée. A l'étape S93, il est déterminé si la procédure GNSP4 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 GNSP4, 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 fourni par la procédure INTP, les étapes S94 et S96 sont exécutées, sinon les étapes S95 et S96 sont exécutées. A l'étape S94, une variable B reçoit le reste de la division du nombre P par le nombre premier Qj de rand j de la liste Q. A l'étape S95, la variable B reçoit le nombre Wj figurant à l'indice j dans la table de valeurs W obtenues précédemment lors d'un appel précédent de la procédure DVT' ou DVT2. A l'étape S96, la valeur Gj à l'indice j dans la table G est calculée par la formule suivante : Gj = (2B)2 mod Qj (13) Qj étant un nombre premier de rang j dans la liste Q. La mise en oeuvre de la formule (13) constitue également une simplification de calcul par rapport à la formule (10) exécutée à l'étape S78. En effet, la formule (13) consiste en une division de petits nombres.
La figure 15 représente un autre mode de réalisation GNSP5 de la procédure GNSP de la figure 3. La procédure GNSP5 diffère de la procédure GNSP4 de la figure 13 en ce qu'elle comprend des étapes supplémentaires S50 à S60, les étapes S47 à S49 étant supprimées, et l'étape S44 étant remplacée par une étape S44'. A l'étape S50 qui est exécutée entre les étapes S33 et S34, une variable S reçoit le reste de la division entière du nombre R par le nombre premier P. A l'étape S44', une procédure d'initialisation INT1 est appelée pour initialiser les tables W et G, ainsi qu'une table supplémentaire H. Cette procédure reçoit comme paramètres le nombre premier P, la taille L du nombre candidat premier Pr courant, et les tables de valeurs W, G et H. A l'étape S51 qui est exécutée après l'étape S40 si la variable TST est à "Faux", le reste S est comparé au nombre P. Si le reste S est égal au nombre P décrémenté de un, les étapes S53 et S57 sont exécutées. Si le reste S est inférieur au nombre P décrémenté de un, les étapes S52 et S54 sont exécutées. A l'étape S52, le nombre R est incrémenté de un. A l'étape S53, le nombre R est incrémenté du nombre entier P et de un. Aux étapes S54 et S57, le nombre R est comparé à la quantité 21. Si aux étapes S54 et S57, le nombre R est supérieur à la quantité 21, l'exécution de la procédure GNSP5 est poursuivie à l'étape S32. Si à l'étape S54, le nombre R est inférieur à la quantité 21, les étapes S55, S56, S43 et S40 sont exécutées. A l'étape S55, le reste S est incrémenté de un, ce qui correspond à l'incrémentation du nombre R à l'étape S54. A l'étape S57, le nombre candidat premier Pr est incrémenté de deux fois le nombre P, ce qui correspond à l'incrémentation du nombre R à l'étape S52, compte tenu de l'équation (1). A l'étape S43, la procédure DVT2 est appelée. Si à l'étape S57, le nombre R est inférieur à la quantité 21, les étapes S58 à S60, puis S40 sont exécutées. A l'étape S58, le reste S est mis à O. A l'étape S59, le nombre candidat premier Pr est incrémenté de deux fois le nombre P et de deux fois ce nombre élevé au carré, ce qui correspond à l'incrémentation du nombre R à l'étape S55, compte tenu de l'équation (1). A l'étape S60, une procédure DVT3 est appelée avec en paramètres les tables Q, W, G et H. La procédure DVT3 retourne une valeur booléenne qui est chargée dans la variable TST et dont la valeur indique si le nombre candidat premier Pr est ou non divisible par l'un des nombres premiers de la liste Q.
La figure 16 représente la procédure INT1 selon un mode de réalisation. La procédure INT1 diffère de la procédure INIT en ce qu'elle reçoit en paramètre d'entrée en outre la table H, en ce que l'étape S96 est remplacée par une étape S96' et en ce qu'elle comprend une étape supplémentaire S98. A l'étape S96', la valeur d'indice j dans la table G reçoit deux fois la valeur B modulo le nombre premier Qj d'indice j dans la liste Q. A l'étape S98 qui est exécutée entre les étapes S96' et S97, la valeur d'indice j dans la table H reçoit la valeur B multipliée par la valeur Gj modulo le nombre Qj. La figure 17 représente des étapes de la procédure DVT3, selon un 30 mode de réalisation. La procédure DVT3 diffère de la procédure DVT2 en ce que l'étape S83 est remplacée par l'étape S83'. A l'étape S83', la valeur à l'indice j dans la table W est mise à jour par la formule suivante : Wj = (Wj + Gj + Hj) mod Qj (14) ce qui correspond à la mise à jour du nombre candidat premier effectuée à 35 l'étape S60. La mise en oeuvre de la formule (14) constitue également une simplification de calcul par rapport à la formule (9) exécutée à l'étape S73 (figure 9). En effet, la formule (14) ne comprend que deux additions de petits nombres, éventuellement suivies d'une soustraction du nombre Qj, tandis que la formule (9) consiste en une division du grand nombre Pr par le nombre Qj. La figure 18 représente des étapes S101 à S115 d'une procédure GNSP6 qui peut être appelée à l'étape S9 (figure 1), selon un mode de réalisation. Les étapes S101 à S108 permettent de générer un nombre 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, au lieu de choisir un nombre R pour calculer un nombre candidat premier Pr à l'aide de la formule (1), et tester la divisibilité du nombre Pr par les nombres premiers de la liste Q. A cet effet, on se base sur la proposition suivante : Pour tout nombre c appartenant à l'ensemble Z/nZ, Z étant 15 l'ensemble des entiers relatifs et Z/nZ étant l'ensemble des résidus modulo n, l'équation e= 1 mod n est vérifiée si et seulement si x appartient à (Z/nZ)*, c'est-à-dire si GCD(x, n) = 1, An étant l'indicateur de Carmichael, c'est-à-dire le plus petit entier non nul tel que pour tout nombre x appartenant à (Z/nZ)*, 20 e= 1 mod n. En choisissant comme valeur de n, le produit Ilv 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 est premier avec tous les diviseurs du 25 produit Ilv, c'est-à-dire tous les nombres premiers formant le produit Ilv. La proposition précédente nécessite simplement une élévation à la puissance UN, et donc de mémoriser ce nombre ainsi que le produit Ilv. Pour mettre en oeuvre cette proposition, il convient de générer un élément inversible de l'ensemble (Z/lIvZ)*, c'est-à-dire un nombre x tel que : 30 = 1 mod Ilv. (15) Dans l'optique de l'application de la formule (1), la quantité 2P(X+Z.11v) 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) 35 est choisi égal à : R = X - ((2P)-1 mod flv) +Z.Ilv (16) 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 S101 à S108 de la procédure GNSP sont exécutées successivement. A l'étape S101, un nombre I est calculé par la formule suivante : I 2L-1 (17) 2P P étant un nombre premier, 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 par y. A l'étape Y_ S82, un nombre I est calculé par la formule suivante : J = (18)IÎv A l'étape S103, est généré un nombre inversible X de l'ensemble (Z/HvZ)*. A cet effet, une procédure GINV est appelée avec en paramètres 15 d'entrée le produit flv et le nombre UN. La procédure GINV fournit un nombre inversible X. Les étapes S104 à S110 permettent de calculer le nombre R. A l'étape S104, est calculé un nombre I2P qui est égal au nombre inverse modulo le produit flv, de deux fois le nombre premier P, soit ((2P)-1 mod flv). 20 A l'étape S105, est calculé un nombre R égal au nombre X moins le nombre inverse I2P modulo le produit fIv. l'étape S106, 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 S107, le nombre R est incrémenté de la quantité ZIlv. Aux étapes S108 à S110, on s'assure que le nombre R obtenu à l'étape S107 est 25 compris dans l'intervalle [I +1,21]. Ainsi, aux étapes S108 et S109, le nombre R est comparé aux nombres I +1 et 2 I . Si le nombre R est inférieur à I +1, les étapes S110 et S111 sont exécutées. Si le nombre R est supérieur à 21, les étapes S106 à S108 sont à nouveau exécutées. Si le nombre R est compris entre I +1 et 21, seulement l'étape S111 est 30 exécutée. A l'étape S110, le nombre R est incrémenté de la quantité.11v. Les étapes suivantes S111 et S112 mettent en oeuvre le test (ii) du théorème énoncé précédemment, sachant que le test (i) est mis en oeuvre par l'étape S114. A l'étape S111, le quotient U de la division entière du nombre R par le nombre P est calculé. A l'étape S112, si le quotient U est pair, l'étape S115 est exécutée pour générer une nouvelle valeur de X. La procédure GNSP6 est ensuite poursuivie à l'étape S105 pour générer une nouvelle valeur de R, sinon l'étape S113 est exécutée. A l'étape S113, un nombre candidat premier Pr est calculé à l'aide de la formule (1). A l'étape S114, 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 S113, ainsi qu'optionnellement la taille L en nombre de bits du nombre Pr. Si la procédure PCKT retourne "Vrai", le nombre Pr est premier et la procédure GNSP6 se termine en fournissant le nombre Pr. Si la procédure PCKT retourne "Faux", l'étape S115 est exécutée et l'exécution de la procédure est poursuivie à l'étape S105. A l'étape S115, le nombre X est multiplié par un nombre modulo le produit Ilv, ce nombre étant non divisible par l'un des nombres Qj formant le produit Ilv, par exemple égal à 2. Un procédé de génération de nombres inversibles est décrit dans le document [7]. La figure 19 représente des étapes S121 à S123 de la procédure de génération d'un nombre inversible GINV, selon un mode de réalisation. La procédure GINV permet de générer un élément inversible de l'ensemble (Z/lIvZ)* par un procédé itératif. A l'étape S121, un nombre de taille I inférieur au produit Ilv est choisi à l'aide d'une fonction aléatoire ou pseudo-aléatoire. A l'étape S122, il est testé si le nombre X choisi à l'étape S121 vérifie l'équation (15), c'est-à-dire si le nombre X est inversible dans l'ensemble (Z/lIvZ)*. Si le nombre X vérifie l'équation (15), la procédure GINV se termine en fournissant le nombre X, sinon l'étape S123 est exécutée. A l'étape S123, le nombre X est incrémenté de 1. Les étapes S122 et S123 forment donc une boucle de traitement qui est exécutée jusqu'à ce que la condition de l'étape S122 soit satisfaite.
La figure 20 représente un autre mode de réalisation GINV1 de la procédure GINV. La procédure GINV1 diffère de la procédure GINV en ce que les étapes S122 et S123 sont remplacées par des étapes S124 à S127. A l'étape S124, un nombre Y est calculé par l'équation suivante : Y = 1 - Xun" mod Ilv. (19) A l'étape S125, le nombre Y est comparé à 0, et s'il est nul, le nombre X vérifie l'équation (15). La procédure GINV1 se termine alors en fournissant le nombre X. Dans le cas contraire, les étapes S126, S127 sont exécutées et l'exécution de la procédure GINV1 est poursuivie à l'étape S124. A l'étape S126, un nombre R inférieur au produit Ilv est choisi aléatoirement à l'étape S126. A l'étape S127, 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 tester si le nombre X vérifie l'équation (15). La figure 21 représente un autre mode de réalisation GNSP7 de la procédure GNSP6. La procédure GNSP7 est configurée pour générer un nombre entier R qui non seulement n'est pas divisible par les diviseurs du produit Ilv, mais également qui vérifie la condition que le quotient U de la division entière du nombre R par le nombre premier P soit impair. A cet effet, on se base sur la propriété selon laquelle le nombre R et le reste S de la division entière du nombre R par le nombre P sont de parités opposées si et seulement si le quotient U de la division entière de R par P est impair. La procédure GNSP7 choisit donc aléatoirement le reste S impair et bien sûr inférieur au nombre P. Il suffit ensuite de s'assurer que le nombre entier R obtenu est pair pour que le quotient U soit impair. Pour cela le nombre R est généré en faisant appel au théorème des restes chinois. Il s'agit en effet de trouver un nombre R qui vérifie simultanément les équations suivantes : R = X - 1/(2P) mod Ilv (20) R = S mod P (21) R = 0 mod 2 (22) Ce problème peut être résolu par l'algorithme de Garner ou l'algorithme de Gauss. Par l'algorithme de Garner, en calculant un nombre K et le nombre R par les formules suivantes : K = (((X - (2P)-1 - S)/P) mod Ilv).P+S, (23) R = K + (K mod 2).P.Ilv. (24) La procédure GNSP7 diffère de la procédure GNSP6 en ce que les étapes S111 et S112 ont été supprimées et remplacées par des étapes S116 à S119, et les étapes S102, S107 et S110 sont remplacées par des étapes S102', S10' et S110'. L'étape S113 de calcul d'un nouveau nombre candidat premier Pr est exécutée immédiatement après l'étape S109 ou S110. A l'étape S102', le nombre J est calculé en prenant la partie entière de la division du nombre I par deux fois le nombre premier P et par le produit Ilv. Les étapes S116 à S119 sont exécutées successivement entre les étapes S104 et S106. A l'étape S116, un nombre entier S inférieur au nombre P et impair est choisi à l'aide d'une fonction aléatoire ou pseudo- aléatoire RND. Aux étapes S117 et S118, un nombre entier K est calculé par la formule (23). A l'étape S119, le nombre entier R est calculé par la formule (24). A l'étape S107', la quantité 2P.Z.Ilv est ajoutée au nombre R pour que ce dernier soit compris dans l'intervalle [I +1,21] sans changer sa parité.
A l'étape S108, si le nombre R n'est pas supérieur ou égal à I +1, la quantité 2P.Ilv est ajoutée au nombre R à l'étape S110'. L'exécution de la procédure GNSP7 est poursuivie à l'étape S117 après l'étape S115. Selon un mode de réalisation, des procédures différentes de génération d'un nombre premier peuvent être appelées à l'étape S9 de la procédure GNLP, en fonction de l'itération. Ainsi, l'une des procédures GNSP, GNSP1 à GNSP5 peut être appelée lors des premières itérations de la procédure GNLP, et l'une des procédures GNSP6 et GNSP7 est appelée lors des dernières itérations. La figure 22 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 aux étapes S35 et S114 des procédures GNSP, GNSP1 à GNSP6, 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, S32, S52, S103 et S121. L'unité UC peut ainsi comprendre un module de génération de nombres premiers PGN mettant en oeuvre la procédure GNLP appelant l'une et/ou l'autre des procédures GNSP, GNSP1 à GNSP6. 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 23 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 216 et 2256. A l'étape S145, si le nombre E choisi est divisible par 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 24 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. 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 à GNSP7. 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 publickey 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. [7] M. Joye, P. Paillier, S. Vaudenay, "Generation of Prime Numbers", CHES 2000, p. 340-35430

Claims (19)

  1. REVENDICATIONS1. Procédé de cryptographie dans un dispositif électronique (DV), le procédé comprenant des étapes consistant à : générer un nombre candidat premier à partir d'un autre nombre premier par la formule suivante : Pr = 2P .R + 1 dans laquelle Pr est le nombre candidat premier, P est un nombre premier ayant un nombre de bits inférieur à un nombre de bits souhaité du nombre candidat premier, et R est un nombre entier, appliquer le test de primalité de Pocklington au nombre candidat to premier, et fournir le nombre candidat premier en tant que nombre premier prouvé s'il réussit le test de Pocklington, caractérisé en ce que la taille (L) en nombre de bits du nombre candidat premier (Pr) est égale à trois fois la taille du nombre premier (P), à 15 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, et de rejet du nombre candidat premier généré si le quotient est pair.
  2. 2. Procédé selon la revendication 1, dans lequel, si le nombre 20 candidat premier n'est pas retenu comme nombre candidat premier ou s'il ne réussit pas le test de Pocklington, le procédé comprend des étapes consistant à : incrémenter le nombre entier (R) de un ou d'une certaine quantité selon la parité du quotient (U) pour que le quotient soit impair, 25 modifier le nombre candidat premier (Pr) en lui ajoutant deux fois le nombre premier (P), et appliquer le test de primalité de Pocklington au nombre candidat premier modifié. 30
  3. 3. Procédé selon l'une des revendications 1 à 2, comprenant une étape de test de la divisibilité du nombre candidat premier (Pr) par des petits nombres premiers (Qj), le nombre candidat premier généré n'étant retenucomme nombre candidat premier que s'il n'est pas divisible par les petits nombres premiers.
  4. 4. Procédé selon la revendication 3, comprenant des étapes consistant à : mémoriser en tant que premiers restes, les restes (Wj) des divisions entières du nombre candidat premier (Pr) par chacun des petits nombres premiers (Qj), le nombre candidat premier étant divisible par l'un des petits nombres premiers si le reste correspondant est nul, mémoriser en tant que second restes, les restes (Gj, Hj) des divisions entières de deux fois le nombre premier (P) par chacun des petits nombres premiers (Qj), et si un nouveau nombre candidat premier est calculé à partir du nombre candidat premier en lui ajoutant deux fois le nombre premier (P), mettre à jour chacun des premiers restes (Wj) en lui ajoutant respectivement le second reste (Gj) correspondant au même petit nombre premier.
  5. 5. Procédé selon la revendication 4, dans lequel si le nombre entier incrémenté excède une certaine limite (2I ), le procédé comprend des étapes consistant à : choisir aléatoirement un nouveau nombre entier (R), et mettre à jour chacun des seconds restes (Gj) avec le double du premier reste (Wj) correspondant au même petit nombre premier.
  6. 6. Procédé selon l'une des revendications 1 à 5, dans lequel le nombre entier (R) est choisi aléatoirement dans l'intervalle [I + 1, 21] avec : [1_4 I - 2 2P L étant le nombre de bits souhaité du nouveau nombre premier à générer.
  7. 7. Procédé selon la revendication 1, comprenant des étapes de génération du nombre entier (R) à partir d'un nombre inversible (X) appartenant à un ensemble d'éléments inversibles modulo un produit (llv) de nombres (Qj) appartenant à un groupe de petits nombres premiers supérieurs à 2, afin que le nombre candidat premier (Pr) ne soit divisible paraucun des nombres du groupe, le nombre premier (P) ayant un nombre de bits égal à un bit près au tiers du nombre de bits souhaité du nombre candidat premier. s
  8. 8. Procédé selon la revendication 7, dans lequel le nombre entier (R) est choisi égal à : R = X - ((2P)-1 mod nv) + Z.IIv, X étant un nombre inversible modulo le produit (IIv) des nombres premiers (Qj) du groupe, P étant le nombre premier, et Z étant un nombre entier choisi 10 de manière à ce que le nombre R ait une taille telle que le nombre candidat premier (Pr) ait le nombre de bits souhaité.
  9. 9. Procédé selon la revendication 8, dans lequel le nombre entier (R) est choisi de manière à être pair et de manière à ce que le reste (S) de sa 15 division entière par le nombre premier (P) soit impair.
  10. 10. Procédé selon la revendication 8, dans lequel le nombre entier (R) est choisi égal à : R = K + (K mod 2)P-IIv + 2P-Z.Ilv, 20 Avec K = (((X - (2P)-1 - S)/P) mod Ilv)P+S, S étant le reste de la division entière du nombre entier R par le nombre premier P, X étant un nombre inversible modulo le produit nv des nombres premiers (Qj) 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 25 nombre de bits souhaité.
  11. 11. Procédé selon la revendication 7 ou 10, dans lequel si le nombre candidat premier (Pr) ne réussit pas le test de primalité de Pocklington, il comprend des étapes de génération d'un nouveau nombre candidat premier 30 en ajoutant au nombre candidat premier (Pr) un multiple du nombre inversible (X) modulo le produit (llv), le multiple étant non divisible par l'un des nombres formant le produit, et d'application du test de primalité de Pocklington au nouveau nombre candidat premier.
  12. 12. Procédé selon l'une des revendications 7 à 11, dans lequel le nombre inversible (X) est généré en recherchant un nombre candidat inversible X inférieur au produit Yb/ vérifiant l'équation suivante : Xun" = 1 mod rIv, nIv étant l'indicateur de Carmichael de l'ensemble des éléments inversibles modulo le produit IN.
  13. 13. Procédé selon la revendication 12, dans lequel un nombre candidat inversible est choisi aléatoirement à une valeur inférieure au produit 10 IN et incrémenté de un ou de la quantité R.(1 - Xxnv mod LM jusqu'à ce qu'il vérifie l'équation : Xxnv = 1 mod IIv, R étant le nombre entier. 15
  14. 14. Procédé selon l'une des revendications 1 à 13, 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 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 d'application dutest de Pocklington au nombre candidat premier. 25
  15. 15. Procédé selon la revendication 14, dans lequel 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 Miller- 30 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'ensemblre 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.
  16. 16. Procédé selon la revendication 15, 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.
  17. 17. Procédé selon l'une des revendications 1 à 16, comprenant de génération d'une clé cryptographique à partir du nombre premier prouvé,
  18. 18. Dispositif électronique comprenant un bloc de calcul (CRU) pour 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 à 17.
  19. 19. Circuit intégré sur microplaquette de semiconducteur, comprenant un dispositif selon la revendication 18.20
FR1161742A 2011-12-15 2011-12-15 Procede de generation de nombres premiers prouves adapte aux cartes a puce Expired - Fee Related FR2984550B1 (fr)

Priority Applications (9)

Application Number Priority Date Filing Date Title
FR1161742A FR2984550B1 (fr) 2011-12-15 2011-12-15 Procede de generation de nombres premiers prouves adapte aux cartes a puce
PCT/FR2012/052901 WO2013088065A1 (fr) 2011-12-15 2012-12-12 Procede de generation de nombres premiers prouves adapte aux cartes a puce
IN4637CHN2014 IN2014CN04637A (fr) 2011-12-15 2012-12-12
US14/365,899 US9596080B2 (en) 2011-12-15 2012-12-12 Method of generating prime numbers proven suitable for chip cards
EP12815733.6A EP2791783B1 (fr) 2011-12-15 2012-12-12 Procédé de génération de nombres premiers prouvés adapté aux cartes a puce
US14/365,671 US9577826B2 (en) 2011-12-15 2012-12-12 Method of generating proven prime numbers suitable for being implemented in a smart card
CN201280062261.5A CN104067217A (zh) 2011-12-15 2012-12-12 生成被验证适用于芯片卡的素数的方法
PCT/FR2012/052902 WO2013088066A1 (fr) 2011-12-15 2012-12-12 Procede de generation de nombres premiers prouves adapte aux cartes a puce
EP12815734.4A EP2791784A1 (fr) 2011-12-15 2012-12-12 Procede de generation de nombres premiers prouves adapte aux cartes a puce

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1161742A FR2984550B1 (fr) 2011-12-15 2011-12-15 Procede de generation de nombres premiers prouves adapte aux cartes a puce

Publications (2)

Publication Number Publication Date
FR2984550A1 true FR2984550A1 (fr) 2013-06-21
FR2984550B1 FR2984550B1 (fr) 2015-10-02

Family

ID=46489262

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1161742A Expired - Fee Related FR2984550B1 (fr) 2011-12-15 2011-12-15 Procede de generation de nombres premiers prouves adapte aux cartes a puce

Country Status (1)

Country Link
FR (1) FR2984550B1 (fr)

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
C. CLAVIER, B. FEIX, L. THIERRY, P. PAILLIER: "Generating Provable Primes Efficiently on Embedded Devices", PUBLIC KEY CRYPTOGRAPHY - PKC 2012. 15TH INTERNATIONAL CONFERENCE ON PRACTICE AND THEORY IN PUBLIC KEY CRYPTOGRAPHY, 21 May 2012 (2012-05-21) - 23 May 2012 (2012-05-23), Springer Verlag Berlin, Germany, pages 372 - 389, XP002683867, ISBN: 978-3-642-30056-1, DOI: 10.1007/978-3-642-30057-8_22 *
CHENGHUAI LU ET AL: "Implementation of Fast RSA Key Generation on Smart Cards", APPLIED COMPUTING 2002: PROCEEDINGS OF THE 2002 ACM SYMPOSIUM ON APPLIED COMPUTING ; UNIVERSIDAD CARLOS III DE MADRID, MADRID, SPAIN, MARCH 11 - 14, 2002, ACM. ASSOCIATION FOR COMPUTING MACHINERY, US, 1 January 2002 (2002-01-01), pages 214 - 220, XP002415054, ISBN: 978-1-58113-445-2 *
G. JAESCHKE: "On strong pseudoprimes to several bases", MATHEMATICS OF COMPUTATION, vol. 61, 31 October 1993 (1993-10-31), pages 915 - 926, XP002681159 *
J. BRILLHART, D.H. LEHMER, J.L. SELFRIDGE, B. TUCKERMAN, S.S. WAGSTAFF JR.: "Factorizations of b^n+-1 - b=2,3,5,6,7,10,11,12 - Up to High Powers", vol. 22, 31 December 1988, AMERICAN MATHEMATICAL SOCIETY, Providence, Rhode Island, ISBN: 0-8218-5078-4, article "Developments in Primality Testing", pages: lviii - lxvii, XP002682976 *
JOYE M ET AL: "EFFICIENT GENERATION OF PRIME NUMBERS", CRYPTOGRAPHIC HARDWARE AND EMBEDDED SYSTEMS. 2ND INTERNATIONAL WORKSHOP, CHES 2000, WORCHESTER, MA, AUG. 17 - 18, 2000 PROCEEDINGS; [LECTURE NOTES IN COMPUTER SCIENCE], BERLIN : SPRINGER, DE, vol. VOL. 1965, 17 August 2000 (2000-08-17), pages 340 - 354, XP001049142, ISBN: 978-3-540-41455-1 *
SHAWE-TAYLOR J: "Generating strong primes", ELECTRONICS LETTERS UK, vol. 22, no. 16, 31 July 1986 (1986-07-31), pages 875 - 877, XP002681158, ISSN: 0013-5194 *

Also Published As

Publication number Publication date
FR2984550B1 (fr) 2015-10-02

Similar Documents

Publication Publication Date Title
EP2791783B1 (fr) Procédé de génération de nombres premiers prouvés adapté aux cartes a puce
EP2256987B1 (fr) Protection d&#39;une génération de nombres premiers pour algorithme RSA
EP2296086B1 (fr) Protection d&#39;une génération de nombres premiers contre des attaques par canaux cachés
EP2415199B1 (fr) Procede pour effectuer une tache cryptographique dans un composant electronique
WO2009112686A2 (fr) Procede et dispositifs de contre-mesure pour cryptographie asymetrique
EP1419610B1 (fr) Procede de realisation d&#39;une unite cryptographique pour un systeme de cryptographie asymetrique utilisant une fonction logarithme discret
EP2731006B1 (fr) Procédé de cryptographie comprenant une opération d&#39;exponentiation modulaire
WO2009109715A2 (fr) Procede et dispositifs de contre-mesure pour cryptographie asymetrique a schema de signature
WO2006070092A1 (fr) Procede de traitement de donnees et dispositif associe
FR2888690A1 (fr) Procede cryptographique pour la mise en oeuvre securisee d&#39;une exponentiation et composant associe
EP1804161A1 (fr) Détection de perturbation dans un calcul cryptographique
EP2983083B1 (fr) Procede de cryptographie sur courbe elliptique comprenant une detection d&#39;erreur
EP1804160B1 (fr) Protection d&#39;un calcul cryptographique effectué par un circuit intégré
FR2979725A1 (fr) Procede de calculs cryptographique resistant aux defaillances materielles
FR2984550A1 (fr) Procede de generation de nombres premiers prouves adapte aux cartes a puce
EP1520370B1 (fr) Procédé et dispositifs cryptographiques permettant d&#39;alleger les calculs au cours de transactions
FR2984551A1 (fr) Procede de generation de nombres premiers prouves adapte aux cartes a puce
FR2984548A1 (fr) Procede de generation de nombres premiers prouves adapte aux cartes a puce
FR2984547A1 (fr) Procede de generation de nombres premiers prouves adapte aux cartes a puce
EP0980607A1 (fr) Generateur pseudo-aleatoire base sur une fonction de hachage pour systemes cryptographiques necessitant le tirage d&#39;aleas
WO2015132524A2 (fr) Génération de message pour test de génération de clés cryptographiques
FR3015076A1 (fr) Generation de cles cryptographiques
FR3015079A1 (fr) Verification d&#39;integrite de paire de cles cryptographiques
EP1832034A2 (fr) Procede de generation rapide d&#39;un nombre aleatoire non divisible par un ensemble predetermine de nombres premiers
FR3010562A1 (fr) Procede de traitement de donnees et dispositif associe

Legal Events

Date Code Title Description
CA Change of address

Effective date: 20131112

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9

CD Change of name or company name

Owner name: VERIMATRIX, FR

Effective date: 20191119

CA Change of address

Effective date: 20191209

TP Transmission of property

Owner name: RAMBUS INC., US

Effective date: 20200402

ST Notification of lapse

Effective date: 20210805