FR 3148850 A1 20241122 FR 2404377 A 20240426 Protection de l’intégrité Il est donné une solution pour générer une séquence de bits sur la base d’une amorce, dans laquelle un générateur est utilisé pour générer un premier ensemble de bits reposant sur l’amorce, dans laquelle le générateur est utilisé pour générer un deuxième ensemble de bits, dans laquelle le deuxième ensemble de bits repose sur le premier ensemble de bits ou sur une partie du premier ensemble de bits, et dans laquelle la séquence de bits comprend le premier ensemble bits et le deuxième ensemble de bits. Figure pour l’abrégé : Fig. 2 Protection de l’intégrité Les schémas cryptographiques à base de réseau Kyber [ABD + 21] et Dilithium [LDK + 21], qui sont choisis tous deux par NIST à des fins de normalisation, utilisent une grande matrice aléatoire. Cette matrice est spécifique pour chaque paire de clés, elle est définie pendant une génération de clé et elle inclut à la fois la clé publique et la clé privée. Ceci s’applique tant à Kyber qu’à Dilithium. Afin de s’accommoder d’un espace de mémoire limitée, on met en mémoire seulement une partie de la matrice . On génère une amorce ρ aléatoire et on la met en mémoire comme partie d’à la fois la clé publique et la clé privée. On (re-)compile ensuite la matrice , d’une manière déterministe à partir de cette amorce ρ , lorsqu’on en a besoin. D’une manière plus détaillée, on utilise l’amorce ρ pour alimenter un générateur de nombres pseudo-aléatoires (PRNG) pour générer une séquence de bits aléatoires, qui est ensuite soumise à un algorithme d’échantillonnage déduisant des valeurs suivant le format de sortie souhaité, c’est-à-dire des coefficients dans une plage [0, q -1]. Kyber et Dilithium utilisent SHAKE comme PRNG. Comme l’amorce ρ est publique (c’est-à-dire fait partie de la clé publique), la matrice recompilée peut ne pas avoir à être sécurisée à l’encontre d’attaques par canal latéral. Toutefois, il y a toujours le problème qu’une attaque peut injecter des défauts dans la matrice , ce qui exige des mesures donnant l’assurance que la matrice est compilée correctement. Un autre problème que l’on se pose est de trouver une solution efficace pour procurer des moyens de vérifier l’intégrité de longues séquences de bits. On y parvient selon les caractéristiques de l’invention. Les exemples qui sont proposés dans le présent mémoire peuvent reposer en particulier sur au moins l’une des solutions suivantes. Des combinaisons des caractéristiques suivantes peuvent être utilisées pour obtenir le résultat souhaité. Les caractéristiques du procédé pourraient être combinées avec n’importe quelle autre caractéristique du dispositif, de l’installation ou du système ou vice versa. On propose un procédé de génération d’une séquence de bits reposant sur une amorce, dans lequel on utilise un générateur pour générer un premier ensemble de bits reposant sur l’amorce, dans lequel on utilise le générateur pour générer un deuxième ensemble de bits, le deuxième ensemble de bits reposant sur le premier ensemble de bits ou sur une partie du premier ensemble de bits, dans lequel la séquence de bits comprend le premier ensemble de bits et le deuxième ensemble de bits. Cette solution permet une vérification de l’intégrité de la séquence de bits en recalculant le deuxième ensemble de bits. On peut utiliser une vérification de ce genre pour confirmer l’intégrité du générateur puisqu’elle peut en particulier détecter des défauts (injectés). On notera que « reposant sur X » ne limite pas la référence seulement à X ; cela signifie au contraire qu’il repose « aussi sur X », c’est-à-dire sur X et d’autres entrées ou X et des résultats intermédiaires. Le premier ensemble de bits repose par exemple sur l’amorce, le premier ensemble de bits pouvant être déterminé en parties de bits, chaque partie subséquente de bits reposant également sur l’amorce et (par exemple toutes) des parties précédentes de bits. En conséquence, le deuxième ensemble de bits repose sur le premier ensemble de bits (c’est-à-dire sur toutes ses parties) et sur l’amorce. On notera en outre que le générateur peut être désigné souvent comme un générateur de nombres aléatoires ou comme un générateur de nombres pseudo-aléatoires. Dans le contexte utilisé dans le présent mémoire, il n’est pas déterminant que l’aléatoiritée des nombres générés soit une aléatoiritée vraie, une pseudo-aléatoiritée ou même se rapporte à des nombres calculés d’une manière déterministe. Les nombres générés peuvent en particulier au moins sembler – dans une certaine mesure – arbitraires. A cet égard, il n’y a pas d’exigence particulière du niveau d’entropie. Avantageusement, la solution décrite dans le présent mémoire peut être utilisée dans le cas où la séquence de bits, qui peut en particulier être une séquence de bits au moins partiellement aléatoire, est générée ou régénérée à partir de n’importe quelle amorce. L’amorce peut comprendre plusieurs bits, tandis que la séquence de bits peut comprendre (sensiblement) plus de bits que l’amorce. On peut générer des bits dans des stades de traitement successifs, chaque stade subséquent reposant sur le résultat du stade précédent. Dans un exemple, le deuxième ensemble de bits peut être généré dans (au moins) un stade subséquent qui repose sur le premier ensemble de bits. En variante, le deuxième ensemble de bits peut reposer sur une partie du premier ensemble de bits qui provient de stades précédents, tandis que la partie restante du premier ensemble de bits et le deuxième ensemble sont le résultat du (dernier) stade de traitement récent. Suivant un mode de réalisation, le générateur opère par cycles, chaque cycle dépendant du cycle précédent et utilisant une fonction f. Ainsi, le générateur peut opérer comme une machine d’état comprenant plusieurs cycles (c’est-à-dire stades de traitement), dans lequel chaque cycle repose sur le calcul du cycle précédent. L’amorce est traitée dans une phase d’absorption. Le premier ensemble de bits et le deuxième ensemble de bits sont déterminés dans une phase de compression en éponge cryptographique. Suivant un mode de réalisation, le générateur est un générateur de nombres pseudo-aléatoires, PRNG, qui utilise une phase d’absorption absorbant l’amorce et une phase de compression pour déterminer le premier ensemble de bits et le deuxième ensemble de bits. Suivant un mode de réalisation, on utilise SHAKE comme PRNG. Suivant un mode de réalisation, le deuxième ensemble de bits sont des bits d’une somme de contrôle pour vérifier la séquence de bits. Les bits de la somme de contrôle peuvent ainsi être utilisés pour vérifier l’intégrité du générateur. Cette vérification peut être faite, par exemple pendant une décapsulation (dans le cas de Kyber) ou pendant une signature (dans le cas de Dilithium). Suivant un mode de réalisation, on vérifie la séquence de bits en recalculant le deuxième ensemble de bits reposant sur l’amorce et en comparant ce deuxième ensemble de bits recalculé aux bits de la somme de contrôle. Suivant un mode de réalisation, on calcule le deuxième ensemble de bits pendant une génération de clé et on le met en mémoire ensemble avec la clé. Suivant un mode de réalisation, on utilise le procédé dans le contexte d’une méthode de cryptographie à base de réseau. Suivant un mode de réalisation, on détermine la séquence de bits pour compiler une matrice pour une paire de clés qui est utilisée en particulier dans Kyber ou Dilithium. Suivant un mode de réalisation, on effectue au moins en partie le procédé sur l’un des suivants : un dispositif de sécurité, un nuage sécurisé, un service sécurisé, un circuit intégré, un module de sécurité matériel, un module de plateforme de confiance, une unité cryptographique, un FPGA, une unité de traitement, une unité de commande, une carte intelligente. On propose en outre un dispositif de génération d’une séquence de bits reposant sur une amorce, dans lequel le dispositif est agencé pour exécuter les stades suivants : création d’un premier ensemble de bits reposant sur l’amorce, création d’un deuxième ensemble de bits, le deuxième ensemble de bits reposant sur le premier ensemble de bits ou sur une partie du premier ensemble de bits, dans lequel la séquence de bits comprend le premier ensemble de bits et le deuxième ensemble de bits. Le dispositif peut être utilisé dans toute unité de traitement pour effectuer des stades de ce genre. Cette unité de traitement peut comprendre au moins un, en particulier plusieurs moyens qui sont agencés pour exécuter les stades du procédé décrits dans le présent mémoire. Les moyens peuvent être séparés logiquement ou physiquement ; en particulier on pourrait combiner plusieurs moyens séparés logiquement en au moins une unité physique. L’unité de traitement peut comprendre au moins un processeur et/ou une micro-unité de commande (MCU). Suivant un mode de réalisation, le dispositif est l’un des suivants ou comprend au moins l’un des suivants : un dispositif de sécurité, un nuage sécurisé, un service sécurisé, un circuit intégré, un module de sécurité matériel, un module de plateforme de confiance, une unité cryptographique, un FPGA, une unité de traitement, une unité de commande, une carte intelligente. Il est procuré également un produit de programme d’ordinateur qui peut chargé dans une mémoire d’un dispositif de traitement numérique, comprenant des parties de code logicielles pour effectuer les stades du procédé décrits dans le présent mémoire. Des modes de réalisation sont représentés et illustrés en se reportant aux dessins. Les dessins servent à illustrer le principe de base, de sorte que sont illustrés seulement des aspects nécessaires pour comprendre le principe de base. Les dessins ne sont pas à l’échelle. Dans les dessins, les mêmes caractères de référence désignent de mêmes caractéristiques. La représente un diagramme schématique d’états d’une construction en éponge utilisée dans SHAKE ; La est un diagramme schématique visualisant un mode de réalisation à titre d’exemple de détermination de bits de contrôle supplémentaires ; La représente un diagramme à titre d’exemple visualisant des stades de la façon dont on peut vérifier une intégrité d’une longue séquence de bits ; La représente un agencement à titre d’exemple d’un dispositif de traitement comprenant une CPU, une RAM, une mémoire non volatile, un crypto module, un module analogique, une interface d’entrée / sortie et un générateur de nombres aléatoires en matériel ; La représente une variante d’agencement ayant un module de sécurité en matériel (HSM). Des solutions décrites dans le présent mémoire permettent de donner un chemin efficace en coût pour détecter une injection de défaut pendant la compilation de la matrice . En particulier, l’exécution correcte du PRNG pendant que l’on transforme l’amorce ρ en une longue séquence de bits pseudo-aléatoires est assurée. Le PRNG peut ainsi passer sur un dispositif non protégé, par exemple un accélérateur. Cela est obtenu en utilisant le PRNG pour générer plus de bits de sortie qu’il n’est nécessaire. On peut alors utiliser ces bits de sortie supplémentaires comme somme de contrôle (c’est-à-dire des bits de la somme de contrôle) pour vérifier le calcul correct de (toute) la sortie du PRNG. En option, on peut calculer les bits de somme de contrôle pendant la génération de clé et les mettre en mémoire avec la clé secrète. Pendant une opération avec les clés secrètes (c’est-à-dire décapsulation dans le cas de Kyber ou signature dans le cas de Dilithium), on peut recalculer la somme de contrôle et la tester par rapport à ces bits de la somme de contrôle mis en mémoire précédemment. Les capacités de détection de défauts de cette solution dépendent du PRNG utilisé et de la position des bits de contrôle. Comme indiqué, Kyber et Dilithium utilisent SHAKE comme PRNG : SHAKE est une fonction de sortie extensible appartenant à la famille SHA-3 d’algorithmes. SHAKE est décrit dans FIPS PUB 202 [Nat15]. C’est une construction en éponge cryptographique, ce qui signifie qu’une phase ainsi dénommée d’absorption est suivie d’une phase ainsi dénommée de compression. La représente un diagramme schématique d’états d’une construction en éponge de SHAKE suivant [Nat15]. L’entrée N est d’abord remplie jusqu’à un multiple de la longueur r de bloc. Chaque tel bloc est envoyé en OU exclusif à une partie de l’état. Après chaque OU exclusif d’un bloc, une fonction f est appliquée à l’état respectif, ce qui conduit à une absorption pas à pas de l’entrée N reposant sur des fonctionnements de blocs précédents. Après que toute l’entrée N est absorbée, une sortie Z d’une longueur d est extraite dans des blocs, dans lequel, après chaque extraction de bloc de r bits, la fonction f est appliquée. Pour générer la matrice (dans Kyber ou Dilithium), l’entrée N est mise à l’amorce ρ. La sortie Z est envoyée à un algorithme d’échantillonnage transformant les bits aléatoires en des échantillons de la distribution souhaitée. La longueur d de sortie nécessaire n’est pas connue à priori. Au lieu de cela, une extraction de bloc se déroule dans la phase de compression jusqu’à ce que le nombre d de bits de sortie soit généré. En d’autres termes, pendant la phase de compression avec chaque application de la fonction f , un nombre de r bits sont générés, cela peut être fait jusqu’à ce qu’un nombre suffisant de bits soit disponible. Le paramètre c est un paramètre de sécurité : plus le paramètre c est grand, plus le niveau de sécurité est haut. Suivant un exemple, SHA-3/SHAKE utilise des états, qui ont chacun une dimension de 1600 bits, c’est-à-dire r + c = 1600 bits. Les dimensions réelles de r et c peuvent dépendre du cas d’utilisation particulier. Le paramètre r est désigné aussi comme « taux » et le paramètre c comme « capacité ». Des exemples décrits dans le présent mémoire proposent de déterminer e bits Y de contrôle supplémentaires en utilisant le PRNG, qui sont ensuite utilisés à des fins de détection de défauts. La représente un mode de réalisation, à titre d’exemple, de détermination et d’utilisation de e bits Y de contrôle supplémentaires. Après avoir déterminer tous les bits nécessaires pour la sortie Z , on appelle la fonction f (au moins) une fois de plus sur l’état en cours (le dernier), ce qui se traduit par un bloc supplémentaire de e bits Y de contrôle. Utiliser les bits Y de contrôle permet de détecter des défauts avec une grande probabilité, c’est-à-dire ne détecte pas des défauts au sein de la fonction f avec une probabilité de seulement 2 - e . Les bits Y de défauts sont déterminés dans un bloc 201 qui est ajouté par rapport à l’exemple représenté à la . Cette procédure peut être effectuée premièrement pendant une génération de clé, les bits Y de contrôle pourraient alors être mis en mémoire comme parties de la clé privée. Pendant des fonctionnements à clé secrète, la procédure peut être répétée et les bits Y de contrôle peuvent être comparées aux valeurs mises en mémoire précédemment. Dans Kyber et Dilithium, chaque entrée de matière est un polynôme, chaque tel polynôme est généré en utilisant un appel distinct à SHAKE, par exemple sous la forme SHAKE (ρ, indice de matrice). Ainsi, des bits de contrôle distincts peuvent avoir à être mis en mémoire pour chaque tel appel de SHAKE. La représente un diagramme à titre d’exemple visualisant des stades sur la façon dont on peut vérifier l’intégrité d’une longue séquence de bits. Une amorce est chargée au stade 301, ce qui permet à un générateur de générer (par exemple en plusieurs stades d’une phase d’absorption ou d’une phase suivante de compression) plusieurs bits A reposant sur cette amorce. Ensuite, dans un stade 302 des bits B peuvent être déterminés suivant l’une des solutions suivantes : 1) Les bits sont déterminés dans un stade subséquent (c’est-à-dire appel f de fonction). Ainsi, les bits B reposent sur tous les bits précédents, en particulier les bits A générés précédemment. 2) Les bits B sont pris parmi le dernier appel de fonction qui a contribué aussi aux bits A restants. Cet appel récent de fonction se traduit par plus de bits que nécessaire pour les bits A. Certains ou tous ces bits en surplus peuvent être utilisés comme bits B. 3) Une première partie des bits B est déterminée suivant la solution 2 et une deuxième partie des bits B est déterminée suivant la solution 1, c’est-à-dire dans un appel f subséquent de fonction. Cela peut être utile, si l’on a besoin de plus de bits que la première partie de bits. Dans un stade 305, les bits B sont mis en mémoire. Cela peut être fait ensemble avec les bits A ou sans les bits A. Dans un stade 303, des bits A* sont générés sur la base de l’amorce et dans un stade 304, des bits B* sont générés. Ces stades 303 et 304 de génération opèrent de manière semblable aux stades 301 et 302. Tous les stades 301 à 304 se passent de préférence sur un générateur et/ou peuvent utiliser le même algorithme de génération. Dans un stade 306, les bits B et les bits B* mis en mémoire sont comparés les uns aux autres. S’ils sont identiques, la vérification de l’intégrité du générateur est couronnée de succès (stade 307), sinon la vérification n’est pas couronnée de succès (stade 308). On notera que les bits B et les bits B* peuvent être désignés aussi comme étant des bits de contrôle. On notera en outre que le terme des bits X « reposent sur » des bits Y peut inclure une utilisation itérative d’une fonction, chaque appel (intermédiaire) de fonction utilisant la sortie de l’appel de fonction précédent. Ainsi, les bits X peuvent être considérés comme une entrée (directe ou indirecte) pour déduire les bits Y en plusieurs stades, chaque stade (par exemple appel de fonction) pouvant donner une partie des bits Y. Dans l’exemple de la , les bits Z sont « compressés » à partir des N bits d’entrée en appliquant la fonction f plusieurs fois. La sortie de chaque appel de fonction est utilisée comme entrée pour l’appel de fonction suivant. Dans cette mesure, les bits Z reposent sur l’entrée N, ainsi que sur tous les résultats intermédiaires des appels de fonction. Ainsi, les bits Y de contrôle (suivant la ) reposent sur l’entrée N , ainsi que sur les bits Z. Autres exemples et modes de réalisation Une solution générique de protection de l’intégrité comprend de multiples calculs de la même opération. C’est ainsi, par exemple, qu’une opération particulière peut être effectuée deux fois et que l’on vérifie l’équivalence de la sortie. La solution présentée dans le présent mémoire peut être utilisée en conséquence dans ce contexte. Les bits de contrôle des deux opérations peuvent être testés. C’est une autre option que des bits non utilisés, par exemple des bits du dernier bloc qui s’étendent au-delà de la simple sortie Z , définissent les bits Y de contrôle. Cela peut donner une solution encore moins coûteuse, mais certains défauts de la dernière phase de compression peuvent ne pas être détectés. Cela peut s’appliquer en particulier dans le cas où l’on utilise SHAKE comme un PRNG. La solution présentée dans le présent mémoire n’est pas limitée à la recompilation de la matrice . Au lieu de cela, cette solution peut être appliquée dans le cas où une donnée aléatoire est (re-)générée à partir d’une amorce. Une amorce de ce genre peut être en particulier connue à l’avance et peut être éventuellement constante. C’est ainsi, par exemple, que Kyber ainsi que Dilithium utilisent tous deux une génération de paire de clés reposant sur une amorce aléatoire (secrète). Toutefois, les stades restant de la génération de paire de clés, y compris la recompilation de toute la clé privée, se déroulent ensuite d’une manière déterministe et dépendent (seulement) de cette amorce initiale. Dans des scénarios à mémoire limitée pour mettre en mémoire des clés privées, une solution peut consister à mettre en mémoire seulement l’amorce secrète utilisée pour la génération de clé et à réutiliser cette amorce pour régénérer la clé (privée) si nécessaire. Une telle (re-)génération implique que le PRNG (SHAKE) opère avec une amorce secrète fixe, conformément à la solution décrite dans le présent mémoire. La représente un dispositif 500 de traitement comprenant une CPU 500, une RAM 502, une mémoire 503 non volatile (NVM), un crypto-module 504, un module 506 analogique, une interface 507 d’entrée / sortie et un générateur 512 de nombres aléatoires en matériel. Dans cet exemple, la CPU 501 a accès à au moins un crypto-module 504 par un bus 505 partagé, auquel chaque crypto-module 504 est relié. Chaque crypto-module 504 peut comprendre en particulier un ou plusieurs noyaux cryptos pour effectuer certaines opérations cryptographiques. Les exemples de noyaux cryptos sont : un noyau AES 509, un noyau SHA 510, un noyau ECC 511, et un crypto-noyau à base de réseau 508. La CPU 501, le générateur 512 de nombres aléatoires en matériel, le NVM 503, le crypto-module 504, la RAM 502 et l’interface 507 d’entrée / sortie sont connectés au bus 505. L’interface 507 d’entrée / sortie peut avoir une connexion à d’autres dispositifs qui peuvent être semblables au dispositif 500 de traitement. Le crypto-module 504 peut être ou peut ne pas être équipé de caractéristiques de sécurité reposant sur du matériel. Le bus 505 soi-même peut être masqué ou en clair. Des instructions pour procéder aux stades décrits dans le présent mémoire peuvent être en particulier mises en mémoire dans le NVM 503 et traitées par la CPU 505. Les données traitées peuvent être mises en mémoire dans le NVM 503 ou dans la RAM 502. Des fonctions de support peuvent être données par les crypto-modules 504 (par exemple expansion de données pseudo-aléatoires). Les stades du procédé décrits dans le présent mémoire peuvent être effectués exclusivement ou au moins en partie sur le crypto-module 504, par exemple sur le crypto-noyau 508 à base de réseau. Le dispositif 500 de traitement peut être une carte à puce alimentée par contact électrique direct ou par un champ électromagnétique. Le dispositif 500 de traitement peut être un circuit fixe ou reposer sur du matériel reconfigurable (par exemple un réseau pré-diffusé programmable par l’utilisateur, FPGA). Le dispositif 500 de traitement peut être relié à un ordinateur personnel, une micro-unité de commande, un FPGA ou un téléphone intelligent. La solution décrite dans le présent mémoire peut être utilisée par un client qui a l’intention de procurer une mise en œuvre sécurisée d’une cryptographie à base de réseau sur une carte intelligente ou sur tout élément de sécurisation. La représente un autre exemple d’un dispositif 600 de traitement. Le dispositif 600 de traitement comprend un module 601 de sécurité en matériel, une mémoire non volatile (NVM) 608, une mémoire vive (RAM) 609, une interface 610 de communication avec d’autres dispositifs et un processeur 607 d’application, qui est relié au module de sécurité en matériel (HSM) 601 à la RAM 609, au NVM 608 et à l’interface 610. Le HSM 601 comprend une unité 602 de commande, un générateur de nombres aléatoires en matériel (HRNG) 606 et au moins un crypto-module 603. Le crypto-module 603 comprend, à titre d’exemple, un noyau AES 604 et un crypto-noyau à base de réseau (LBC) 605. Suivant un mode de réalisation, le HSM 601 et le processeur 607 d’application peuvent être fabriqués sur la même puce physique en liaison étroite. Le HSM 601 donne des services cryptographiques et une mémoire de clé sécurisée, tandis que le processeur d’application peut effectuer des tâches informatiques intensives (par exemple reconnaissance d’image, communication, commande de moteur). Le HSM 601 peut être accessible seulement par une interface définie et est considéré comme indépendant du reste du système, en ce sens qu’un compromis sur la sécurité du processeur 607 d’application n’a qu’un impact limité sur la sécurité du HSM 601. Le HSM 601 peut effectuer toutes les tâches ou un sous-ensemble de tâches décrit à propos du dispositif 600 de traitement en utilisant l’unité 602 de commande, le LBC 605, supporté par, par exemple, un AES 604 et l’HRNG 606. Il peut exécuter les procédures décrites dans le présent mémoire (au moins en partie) soit commandées par une unité de commande interne, soit sous la forme d’un circuit CMOS. En outre, le processeur 607 d’application peut également effectuer les procédés décrits dans le présent mémoire (au moins en partie, par exemple en collaboration avec le HSM 601). Le dispositif 600 de traitement avec ce processeur 607 d’application et l’HSM 601 peut être utilisé comme passerelle centrale de communication ou comme unité (électrique) de commande de moteur dans des automobiles ou d’autres véhicules. Dans un exemple ou dans plusieurs exemples, les fonctions décrites dans le présent mémoire peuvent être mises en œuvre au moins en partie en matériel, tel que sous la forme de composants matériel précis ou d’un processeur. D’une manière plus générale, les techniques peuvent être mises en œuvre en matériel dans des processeurs, des logiciels, des micrologiciels ou leurs combinaisons. Si elles sont mises en œuvre en logiciel, les fonctions peuvent être mises en mémoire ou transmises sous la forme d’une ou de plusieurs instructions ou codes sur un support déchiffrable par ordinateur et exécutées par une unité de traitement à base de matériel. Des supports déchiffrables par ordinateur peuvent comprendre des supports de mémoire déchiffrables par ordinateur, qui correspondent à un support tangible, tels que des supports de mémoire de données ou des supports de communication comprenant tout support qui facilite un transfert de programme d’ordinateur d’un endroit à un autre, par exemple suivant un protocole de communication. Des supports déchiffrables par ordinateur peuvent ainsi, d’une manière générale, correspondre à (1) des supports de mémoire tangibles déchiffrables par ordinateur qui ne sont pas transitoires ou (2) un support de communication, tel qu’un signal ou une onde porteuse. Des supports de mémoire de données peuvent être tout support disponible, auquel peut accéder un ou plusieurs ordinateurs ou un ou plusieurs processeurs pour rechercher des instructions, un code et/ou des structures de données pour une mise en œuvre des techniques décrites dans le présent mémoire. Un produit de programme d’ordinateur peut comprendre un support déchiffrable par ordinateur. A titre d’exemple et sans limitation, des supports de mémoire déchiffrables par ordinateur de ce genre peuvent comprendre une RAM, une ROM, une EEPROM, une CD-ROM, ou d’autres mémoires à disque optique, mémoire à disque magnétique ou d’autres dispositifs de mémoire magnétique, une mémoire flash, ou tout autre support qui peut être utilisé pour mettre en mémoire un code de programme souhaité sous la forme d’instructions ou de structures de données et auquel un ordinateur peut accéder. Toute liaison est désignée également correctement comme un support déchiffrable par ordinateur, c’est-à-dire un support de transmission déchiffrable par ordinateur. Si, par exemple, des instructions sont transmises d’un site web, un serveur, ou une autre source éloignée utilisant un câble coaxial, un câble à fibre optique, une paire torsadée, une ligne de souscripteur numérique (DSL), ou des technologies sans fil, telles que l’infrarouge, la radio et la micro-onde, le câble coaxial, le câble à fibre optique, la paire torsadée, la DSL, ou des technologies sans fil, telles que l’infrarouge, la radio, et la micro-onde sont inclus dans la définition de support. Il va toutefois de soi que des supports de mémoire déchiffrables par ordinateur et des supports de mémoire de données n’incluent pas des connexions, des ondes porteuses, des signaux, ou d’autres supports transitoires, mais visent, au contraire, des supports de mémoire tangibles non transitoires. Disk et disque, tels qu’utilisés dans le présent mémoire, inclus un disque (CD) compact, un disque laser, un disque optique, un disque numérique polyvalent (DVD), un disk souple et un disque blu-ray, dans lesquels des disks reproduisent habituellement des données magnétiquement, tandis que des disques reproduisent des données optiquement par des lasers. Des combinaisons de ce qui précède doivent être également inclues dans la portée des supports déchiffrables par ordinateur. Des instructions peuvent être exécutées par un processeur ou par plusieurs processeurs, tels qu’une ou plusieurs unités de traitement central (CPU), processeurs de signal numérique (DSPs), microprocesseurs à usage général, circuits intégrés spécifiques d’application (ASICs), circuits diffusés programmables par l’utilisateur (FPGAs), ou autre circuit intégré équivalent ou circuit logique discret. En conséquence, le terme « processeur », tel qu’utilisé dans le présent mémoire, peut se reporter à n’importe laquelle des structures précédentes ou à toute autre structure propre à une mise en œuvre des techniques décrites dans le présent mémoire. En outre, par certains aspects, la fonctionnalité décrite dans le présent mémoire peut être obtenue dans des modules dédiés de matériel et/ou de logiciel configurés pour le codage et le décodage ou être incorporés dans un codec combiné. Les techniques peuvent aussi être mises en œuvre complètement dans un ou plusieurs circuits ou dans des éléments logiques. Les techniques de cet exposé peuvent être mises en œuvre dans une grande diversité de dispositifs ou installations, y compris dans un combiné sans fil, un circuit intégré (IC) ou un ensemble de circuits intégrés (par exemple un ensemble à puce). Divers composants, modules ou unités sont décrits dans ce mémoire pour mettre l’accent sur des aspects fonctionnels de dispositifs configurés pour effectuer les techniques décrites, mais n’exigent pas nécessairement une réalisation par des unités en matériel différentes. Bien au contraire, comme décrit ci-dessus, diverses unités peuvent être combinées en une unité en matériel unique ou obtenues par une collection d’unités inter-opératives en matériel, y compris un ou plusieurs processeurs, comme décrits ci-dessus, en liaison avec des logiciels et/ou des micrologiciels appropriés. Bien que l’on ait décrit divers modes de réalisation à titre d’exemples de l’invention, il va de soi pour l’homme du métier que l’on peut apporter divers changements et modifications qui procureront certains des avantages de l’invention, sans sortir de l’esprit et de la portée de l’invention. Il va de soi, pour l’homme du métier, que l’on peut les remplacer par d’autres constituants effectuant les mêmes fonctions. Il convient de mentionner que des caractéristiques expliquées en se reportant à une figure précise peuvent être combinées à des caractéristiques d’autres figures, même dans les cas où cela n’a pas été mentionné explicitement. En outre, les procédés de l’invention peuvent être exécutés dans tous les modes de réalisation logiciels en utilisant les instructions de processeur appropriées ou dans des modes de réalisation hybrides qui utilisent une combinaison de logique en matériel et de logique en logiciel pour obtenir les mêmes résultats. On entend que des modifications de ce genre du concept inventif soient inclues dans l’invention. Procédé de génération d’une séquence de bits reposant sur une amorce, dans lequel on utilise un générateur pour générer un premier ensemble de bits reposant sur l’amorce, dans lequel on utilise le générateur pour générer un deuxième ensemble de bits, le deuxième ensemble de bits reposant sur le premier ensemble de bits ou sur une partie du premier ensemble de bits, dans lequel la séquence de bits comprend le premier ensemble de bits et le deuxième ensemble de bits. Procédé suivant la revendication 1, dans lequel le générateur fonctionne par cycle, dans lequel chaque cycle dépend du cycle précédent et utilise une fonction f. Procédé suivant l’une quelconque des revendications précédentes, dans lequel le générateur est un générateur de nombres pseudo-aléatoires, PRNG, qui utilise une phase d’absorption absorbant l’amorce et une phase de compression déterminant le premier ensemble de bits et le deuxième ensemble de bits. Procédé suivant la revendication 3, dans lequel on utilise SHAKE comme PRNG. Procédé suivant l’une quelconque des revendications précédentes, dans lequel le deuxième ensemble de bits sont des bits de somme de contrôle pour vérifier la séquence de bits. Procédé suivant la revendication 5, dans lequel on vérifie la séquence de bits en recalculant le deuxième ensemble de bits reposant sur l’amorce et en comparant ce deuxième ensemble de bits recalculé aux bits de la somme de contrôle. Procédé suivant l’une quelconque des revendications précédentes, dans lequel on calcule le deuxième ensemble de bits pendant une génération de clé et on les met en mémoire ensemble avec la clé. Procédé suivant l’une quelconque des revendications précédentes, dans lequel on utilise le procédé dans le contexte d’une méthode de cryptographie à base de réseau. Procédé suivant l’une quelconque des revendications précédentes, dans lequel on détermine la séquence de bits pour compiler une matrice pour une paire de clés, qui est utilisée en particulier dans Kyber ou Dilithium. Procédé suivant l’une quelconque des revendications précédentes, dans lequel on effectue le procédé au moins en partie sur l’un des suivants : un dispositif de sécurité, un nuage sécurisé, un service sécurisé, un circuit intégré, un module de sécurité matériel, un module de plateforme de confiance, une unité cryptographique, un FPGA, une unité de traitement, une unité de commande, une carte intelligente. Dispositif de génération d’une séquence de bits reposant sur une amorce, dans lequel le dispositif est agencé pour exécuter les stades suivants : création d’un premier ensemble de bits reposant sur l’amorce, création d’un deuxième ensemble de bits, le deuxième ensemble de bits reposant sur le premier ensemble de bits ou sur une partie du premier ensemble de bits, dans lequel la séquence de bits comprend le premier ensemble de bits et le deuxième ensemble de bits. Dispositif suivant la revendication 11, dans lequel le dispositif est l’un des suivants, ou il comprend au moins l’un des suivants : un dispositif de sécurité, un nuage sécurisé, un service sécurisé, un circuit intégré, un module de sécurité matériel, un module de plateforme de confiance, une unité cryptographique, un FPGA, une unité de traitement, une unité de commande, une carte intelligente. Produit de programme d’ordinateur pouvant être chargé directement dans la mémoire d’un dispositif de traitement numérique, comprenant des parties de code logicielles pour effectuer les stades du procédé suivant l’une quelconque des revendications 1 à 10, lorsque les parties de code logicielles sont exécutées par une unité de traitement.