FR 2836312 A1 20030822 FR 0201883 A 20020215 PROCEDE DE GENERATION DE CLES SECURISEES POUR UN ALGORITHME CRYPTOGRAPHIQUE L'invention concerne un procédé de génération de clés sécurisées pour un algorithme cryptographique. L'invention, très générale, peut être utilisée pour sécuriser tout algorithme cryptographique totalement ou partiellement cassé. Les algorithmes cryptographiques sont le plus souvent utilisés dans des applications où l'accès à des données ou à des services est sévèrement contrôlé. Ces algorithmes sont notamment utilisés dans les cartes à puce pour certaines applications de celles-ci. Ce sont par exemple des applications d'accès à certaines banques de données, des applications bancaires, des applications de télépéage, par exemple pour la télévision, la distribution d'essence ou encore le passage de péages d'autoroute. Ces algorithmes sont également utilisés dans les cartes dites cartes SIM, pour des applications de téléphonie mobile. Les algorithmes cryptographiques sont généralement mis en oeuvre dans des composants électroniques ayant une architecture formée autour d'un microprocesseur et de mémoires, dont une mémoire non volatile qui contient la clé secrète. De manière générale et succincte, ces algorithmes ont pour fonction de calculer un message chiffré à partir de la clé secrète contenue dans la carte et d'un message en clair appliqué en entrée (du composant) par un système hôte (serveur à distance, distributeur bancaire, etc.), et de fournir en retour au système hôte le message chiffré obtenu. Ceci permet au système hôte d'authentifier le composant avant d'échanger des données. Le message chiffré est accessible depuis l'extérieur. Cependant, le message clair ne peut être retrouvé sans la connaissance de la clé secrète utilisée pour obtenir le message chiffré. Les algorithmes cryptographiques les plus connus sont les algorithmes DES, AES et RSA. Dans le cadre de la téléphonie mobile, l'algorithme le plus utilisé est le Compl28. Cette liste n'est bien sûr pas exhaustive. Les caractéristiques des algorithmes cryptographiques sont supposées connues : opérations effectuées, paramètres utilisés. Seule reste inconnue la clé secrète qui est spécifique à chaque composant et qui ne peut être déduite de la simple connaissance du message clair et/ou du message chiffré. L'invention peut s'appliquer aussi bien à un algorithme symétrique (tel que DES ou AES) qu'à un algorithme asymétrique (tel que RSA). On désigne par le terme"clé secrète"aussi bien la clé unique d'un algorithme symétrique que la clé privée d'un algorithme asymétrique. Dans le cadre des algorithmes symétriques, la clé secrète est un nombre binaire dont la taille NO dépend de l'algorithme utilisé. Par exemple, l'algorithme DES utilise des clés de NO=56 bits, l'algorithme Compl28 utilise des clés de NO=128 bits. Pour un tel algorithme, il existe donc un ensemble comprenant N=2NO clés possibles. Au cours d'une phase de personnalisation du composant, une clé secrète est générée, qui est ensuite mémorisée dans une mémoire non volatile du composant. La génération de clé se fait de manière connue à partir d'un générateur de nombres aléatoires apte à produire des nombres de la taille NO souhaitée. Un composant, et l'algorithme qu'il utilise, peuvent être vulnérables à des analyses ayant pour but de "casser"l'algorithme, c'est à dire de trouver la clé secrète qu'il utilise. Une telle action, si elle aboutit, peut avoir des conséquences graves allant jusqu'au clonage du composant. Ces analyses, du moins celles qui sont connues actuellement, sont essentiellement de deux types : la cryptanalyse et les attaques à canaux cachés (en anglais : side chanel attacks). Une cryptanalyse consiste à mener un processus mathématique ou statistique n'utilisant que la connaissance de l'algorithme et d'une ou plusieurs paires clair/chiffré pour retrouver la clé secrète utilisée par cet algorithme. Une attaque à canal caché consiste en une analyse simple ou différentielle (statistique) d'un paramètre physique spécifique lié au composant lorsqu'il exécute l'algorithme. Cette attaque repose sur le fait que la trace (la variation du paramètre physique spécifique, par exemple la consommation de courant, le rayonnement électromagnétique, etc. ) du composant exécutant des instructions varie en fonction des données qu'il manipule, et donc en fonction de la clé secrète utilisée. En particulier, lorsque le composant exécute l'algorithme, la trace du composant dépend du message clair, de la clé secrète et/ou du message chiffré. A partir de mesures de cette trace et d'études statistiques de ces mesures, il est possible de retrouver la clé secrète. Enfin, dans tous les cas de figures, une attaque par recherche exhaustive est possible. Elle consiste à rechercher la clé secrète de manière systématique. Pour cela, à partir d'un message clair et d'un message chiffré associé connu, l'algorithme est exécuté de manière systématique avec l'ensemble des clés, une à une, jusqu'à obtention de la clé secrète utilisée. La recherche exhaustive demande un temps très important (temps croissant de manière exponentielle avec la longueur en bits des clés) et/ou un matériel particulièrement performant pour être menée à terme. Contrairement à la recherche exhaustive, la durée d'une cryptanalyse ou d'une attaque à canal caché peut dépendre de la valeur de la clé secrète. La sécurité ou résistance d'un algorithme est sa capacité à résister à une attaque quelle qu'elle soit et quelle que soit la clé qu'il utilise. Un algorithme est dit sûr si le temps nécessaire pour le casser est prohibitif (de l'ordre de quelques semaines à quelques années). La sécurité d'un algorithme augmente fortement avec la taille des clés utilisées. En revanche, la sécurité d'un algorithme diminue dans le temps car les performances des matériels susceptibles d'être utilisés pour le casser augmentent, de même que les connaissances d'éventuels attaquants. Des solutions sont connues pour renforcer la sécurité d'un algorithme contre les attaques à canaux cachés : elles consistent à intervenir au niveau de l'implantation de l'algorithme et à le modifier de sorte que sa trace devienne imprédictible : par exemple, il est possible d'intervertir des étapes du procédé de manière aléatoire, de mélanger des données manipulées par l'algorithme avec un ou des paramètres aléatoires, etc. Ces solutions sont efficaces. Cependant elles sont plus ou moins difficiles à mettre en oeuvre car elles nécessitent de modifier en partie l'implantation de l'algorithme. Ces solutions sont également coûteuses en termes de temps d'exécution de l'algorithme, car le plus souvent le nombre total d'étapes de l'algorithme est augmenté. S'il s'avère impossible ou non souhaitable de sécuriser par ces méthodes l'implantation d'un algorithme, il peut être envisagé de remplacer cet algorithme par un algorithme plus sûr. Cependant, ce remplacement dans un composant existant nécessite de surcroît de modifier l'infrastructure dans laquelle le composant s'inscrit, ce qui peut nécessiter des investissements techniques prohibitifs. Au vu des problèmes exposés ci-dessus, un but de l'invention est de mettre en oeuvre un procédé de sécurisation d'un algorithme cryptographique particulièrement simple et peu onéreux. Ainsi, l'invention concerne un procédé de génération de clés secrètes sécurisées pour un algorithme cryptographique, le procédé étant caractérisé en ce qu'il comprend les étapes suivantes : El : analyse de l'ensemble (IK) des clés possibles, E2 : extraction d'un sous-ensemble (SK) de clés à partir de l'ensemble (IK), E3 : génération des clés secrètes à partir du sousensemble (SK). L'invention est applicable pour tout algorithme cryptographique sensible à au moins une attaque identifiée, lorsque ledit algorithme se comporte différemment vis-à-vis de l'attaque identifiée selon la valeur de la clé qu'il utilise. Cela suppose que les notions de clé forte et de clé faible soient pertinentes pour l'attaque identifiée. Une clé est dite forte si le temps nécessaire, pour ladite clé, à l'aboutissement de l'attaque identifiée est prohibitif. Une clé est dite faible dans le cas contraire. Selon l'invention, on génère ainsi des clés secrètes parmi un sous-ensemble de clés présélectionnées pour leur résistance à l'attaque identifiée. On diminue ainsi fortement les chances de réussite de cette attaque contre un composant et/ou un algorithme utilisant de telles clés secrètes. Au cours de l'étape El d'analyse, on évalue la force des clés possibles vis-à-vis de l'attaque identifiée. Puis on classe les clés de l'ensemble de clés selon un ordre de force décroissant. Dans le cas où plusieurs attaques sont identifiées, on détermine au cours de l'étape El la force des clés vis-à-vis de chaque attaque identifiée. Ensuite, on détermine la force résultante d'une clé comme étant le minimum des forces de cette clé vis-à-vis de l'ensemble des attaques identifiées. Enfin, on classe les clés de l'ensemble de clés selon un ordre de force résultante décroissant. Au cours de l'étape E2 d'extraction d'un sousensemble de clés, dans le cas où une seule attaque est identifiée, on extrait un nombre de clés suffisant parmi les clés les plus fortes de l'ensemble de clés possibles. Selon une première variante, le nombre de clés extraites est fixé. Selon une autre variante, le nombre de clés à extraire est fonction de la force moyenne des clés extraites, comme on le verra mieux par la suite dans un exemple. Au cours de l'étape E2 d'extraction d'un sousensemble de clés, dans le cas où plusieurs attaques sont identifiées, on extrait un nombre de clés suffisant parmi les clés dont les forces résultantes sont les plus grandes parmi l'ensemble de clés possibles. Selon une première variante, le nombre de clés extraites est fixé. Selon une autre variante, le nombre de clés à extraire est fonction de la valeur moyenne de la force résultante des clés extraites. Au cours de l'étape E3 de génération de la clé secrète, la clé secrète est choisie aléatoirement parmi le sous-ensemble de clés. La clé ainsi obtenue est mémorisée finalement dans une mémoire non volatile du composant à personnaliser. La clé secrète obtenue selon le procédé de l'invention est ainsi nécessairement une clé forte vis-àvis de l'attaque ou des attaques identifiées. L'attaque identifiée ne donne donc pas de résultat si elle est appliquée à un composant utilisant la clé secrète. Par ailleurs, la clé secrète ayant été choisie dans le sousensemble de clés comprenant un nombre suffisant de clés, une recherche exhaustive ne donne pas non plus de résultat. Le procédé de l'invention permet ainsi de générer des clés telles que l'attaque identifiée ou la recherche exhaustive appliquée sur un composant utilisant la clé ne peut aboutir. L'invention peut être appliquée pour la génération de clés secrètes pour tout algorithme pour lequel au moins une attaque possible est identifiée et pour lequel les clés sont plus ou moins sensibles vis-à-vis de l'attaque identifiée. Dans un exemple de réalisation, l'invention est appliqué à l'algorithme de type Compl28. L'invention et les avantages qui en découlent apparaîtront plus clairement à la lecture de la description qui suit. Un exemple de mise en oeuvre d'un procédé de génération de clés sécurisées sera donné. La description est à lire en référence aux dessins annexés dans lesquels : - la figure 1 est un schéma bloc d'une architecture d'un dispositif dans lequel est implémenté le procédé de l'invention, et - la figure 2 est un diagramme d'un procédé selon l'invention. La figure 1 représente sous forme de schéma bloc un dispositif électronique 1 apte à mettre en oeuvre un procédé de génération de clés selon l'invention. Dans l'exemple, le dispositif 1 est un lecteur destiné à la personnalisation de cartes à puce de type cartes SIM. Le dispositif 1 comprend une interface de communication 10 et des moyens de calcul programmés composés d'une unité centrale 2 reliée fonctionnellement à un ensemble de mémoires dont : - une mémoire 4 accessible en lecture seulement, dans l'exemple du type ROM masque, aussi connue sous l'appellation anglaise"mask read-only memory (mask ROM)", une mémoire 6 re-programmable électriquement, dans l'exemple du type EEPROM (de l'anglais "electrically erasable programmable ROM"), et - une mémoire de travail 8 accessible en lecture et en écriture, dans l'exemple du type RAM (de l'anglais"random access memory"). Cette mémoire comprend notamment les registres utilisés par le dispositif 1. Le code exécutable correspondant au procédé de l'invention pour la génération de clé secrète destinée à la carte à personnaliser est contenu en mémoire programme. Ce code peut en pratique être contenus en mémoire 4, accessible en lecture seulement, et/ou en mémoire 6, réinscriptible. L'unité centrale 2 est reliée à l'interface de communication 10 qui assure l'échange de signaux avec la carte à personnaliser et l'alimentation de sa puce. L'interface de communication 10 est en contact avec la puce de la carte à personnaliser (non représentée sur la figure 1) par l'intermédiaire d'une liaison physique (carte à contact) ou d'une liaison radio-fréquence (carte sans contact). On suppose dans l'exemple suivant que l'algorithme utilisé est de type Compl28. Il utilise des clés de taille NO = 128 bits composées de 8 sous-clés de 16 bits. Le nombre total de clés possibles pour cet algorithme est donc égal à N = (216) 8 = 2128 clés possibles. Il est connu que cet algorithme est sensible à une cryptanalyse nommée"attaque par collision". Cette attaque consiste à trouver des messages clairs distincts fournissant un même message chiffré. Ce phénomène s'appelle une collision et permet de retrouver la valeur d'une sous-clé. Cette recherche de collision peut être répétée jusqu'à obtention de la valeur de la clé secrète utilisée. Dans la description qui suit, le procédé de l'invention produit des clés secrètes sécurisées contre cette attaque identifiée (attaque par collision). Lors de la mise en oeuvre d'un procédé de génération de clés selon l'invention, on réalise (figure 2) les étapes suivantes : El : analyse de l'ensemble des clés possibles, E2 : extraction d'un sous-ensemble de clés à partir dudit ensemble de clés possibles, E3 : génération d'une clé secrète à partir du sous- ensemble de clés. La clé secrète générée peut alors être mémorisée dans une mémoire non volatile de la carte à personnaliser. Les étapes El et E2 peuvent être réalisées une fois pour toutes. L'étape E3 est à répéter pour chaque carte à personnaliser. Au cours de l'étape El, on examine l'ensemble (IK) des clés possibles. En particulier, on évalue la force de ces clés, c'est à dire l'effort T (Ki) nécessaire à l'aboutissement de l'attaque considérée dans le cas d'une clé Ki. Cet effort est déterminé en fonction des connaissances et des performances techniques du matériel disponible que l'attaquant est supposé avoir. On classe ensuite toutes les clés par ordre décroissant de force T (Ki), de sorte que l'on ait : T (Ki) 2 T (Kj) pour tout i La première étape El permet ainsi de classer les clés selon leur force et ainsi de distinguer les clés fortes des clés faibles. L'évaluation de la force des clés ne nécessite pas d'être effectuée avec précision. De même, si la distinction entre clés fortes et clés faibles est primordiale, le classement des clés peut ne pas être fait de façon absolument rigoureuse. Dans la deuxième étape E2, on extrait de l'ensemble IK des clés possibles un sous-ensemble SK de clés de sorte que : les clés du sous-ensemble SK soient aussi fortes que possible pour résister à l'attaque identifiée, et - les clés du sous-ensemble SK soient en nombre suffisant pour résister à une recherche exhaustive. Dans la suite, il est présenté une méthode pour optimiser le processus d'extraction du sous-ensemble de clés SK décrit dans l'étape E2. Néanmoins, une telle optimisation n'est pas obligatoire pour tirer bénéfice de l'invention. On peut en effet extraire un sous-ensemble de clés SK arbitraire et non optimal contenant suffisamment de clés fortes pour contrer aussi bien l'attaque identifiée (grâce à la force des clés) que la recherche exhaustive (grâce au nombre de clés). Concrètement, l'effort moyen à fournir pour que l'attaque identifiée aboutisse est égal à la somme des efforts à fournir pour toutes les clés du sous-ensemble SK divisée par le nombre de clés du sous-ensemble SK, soit : Tl = (1/NS) x ET (Ki), pour i variant entre 1 et NS, NS étant le nombre d'éléments dans le sous-ensemble de clés SK. Par ailleurs, l'effort à fournir pour mener à son terme une recherche exhaustive sur la base du sousensemble SK de clés est égal à : où TO est le temps d'exécution de l'algorithme. Dans la mesure où un attaquant peut choisir de mener une recherche exhaustive ou l'attaque identifiée, l'effort moyen à fournir pour obtenir une clé du sousensemble SK est donné par la formule : T3 = Min [Tl ; T2] = Min [ (l/NS) x ET (Ki) ; NS x TO)] Pour durcir l'algorithme, on cherche à maximiser l'effort moyen T3. Pour cela, on insère des clés dans le sous-ensemble SK par ordre décroissant de force T (Ki), jusqu 1 à ce que le nombre de clés dans SK atteigne un nombre NSO optimal. La fonction Tl = (1/NS) x ET (Ki) est une fonction décroissante de NS, dans la mesure où les clés insérées dans le sous ensemble SK ont une force décroissante. Inversement, la fonction T2 = NS * TO est une fonction croissante, linéaire de NS. Une étude mathématique rapide permet de montrer que, dans ce cas, T3 est maximum lorsque Tl = T2. Ceci permet, dans le cas général, de calculer le nombre NSO optimum de clés à insérer dans le sous ensemble de clés SK selon la relation : TO * (NSO) = ET (Ki), pour i variant entre 1 et NSO Au cours de l'étape E3, on génère ensuite une clé secrète choisie de manière aléatoire dans le sousensemble de clés obtenu au cours de l'étape E2. La clé secrète choisie est finalement mémorisée dans une mémoire non volatile du composant à personnaliser. Dans le cas pratique d'un composant utilisant l'algorithme Compl28, une clé est composée de 8 sous-clés de 16 bits et une clé est forte si et seulement si les huit sous-clés qui la composent sont elles-mêmes fortes. Au cours de l'étape El, on analyse les 216 sous-clés de 16 bits et on identifie 769 d'entre elles comme étant des sous-clés fortes. Ces 769 sous-clés sont celle présentant la propriété de ne pas donner lieu aux collisions considérées par l'attaque identifiée. L'étape E2 consiste alors à définir le sousensemble SK comme l'ensemble des clés dont toutes les sous-clés font partie de l'ensemble des 769 sous-clés fortes identifiées à l'étape El. Au cours de l'étape E3, on choisit aléatoirement 8 sous-clés dans le sous-ensemble des 769 sous-clés fortes, pour former finalement une clé secrète forte. Les 8 sous-clés étant fortes, la clé secrète ainsi obtenue est résistante à l'attaque identifiée (attaque par collision). Par ailleurs, la clé secrète obtenue est également résistante à une recherche exhaustive car la taille du sous-espace SK (dont elle est issue) identifié 76. 7 est égale à 769"# 2 '\ REVENDICATIONS 1. Procédé de génération de clés secrètes sécurisées pour un algorithme cryptographique, le procédé étant caractérisé en ce qu'il comprend les étapes suivantes : El : analyse de l'ensemble (IK) des clés possibles, E2 : extraction d'un sous-ensemble (SK) de clés à partir de l'ensemble (IK), E3 : génération des clés secrètes à partir du sousensemble (SK) de clés. 2. Procédé selon la revendication 1, caractérisé en ce que, au cours de l'étape (El) d'analyse, on évalue la force des clés de l'ensemble (IK) des clés possibles vis-à-vis d'une attaque identifiée. 3. Procédé selon les revendications 1 et 2, caractérisé en ce que, au cours de l'étape (E2) d'extraction d'un sous-ensemble (SK), on extrait de l'ensemble des clés (IK) un nombre suffisant de clés fortes vis-à-vis de l'attaque identifiée. 4. Procédé selon la revendication 3, caractérisé en ce que le nombre suffisant (NSO) est fixé. 5. Procédé selon la revendication 3, caractérisé en ce que le nombre suffisant est déterminé en fonction de la force moyenne des clés du sous-ensemble de clés (SK). 6. Procédé selon la revendication 1, caractérisé en ce que, face à plusieurs attaques identifiées au cours de l'étape (El) d'analyse, on évalue la force des clés de l'ensemble des clés (IK) vis-à-vis de chacune de ces dites attaques. 7. Procédé selon la revendication 6, caractérisé en ce qu'on définit la force résultante d'une clé comme étant le minimum des forces de ladite clé vis-à-vis de toutes lesdites plusieurs attaques identifiées. 8. Procédé selon l'une quelconque des revendications 1, 6 ou 7, caractérisé en ce que, au cours de l'étape (E2) d'extraction d'un sous-ensemble (SK), on extrait de l'ensemble des clés (IK) un nombre suffisant de clés fortes vis-à-vis desdites plusieurs attaques identifiées. 9. Procédé selon la revendication 8, caractérisé en ce que le nombre suffisant (NSO) est fixé. 10. Procédé selon la revendication 8, caractérisé en ce que le nombre suffisant (NSO) est déterminé en fonction de la valeur moyenne des forces résultantes desdites clés vis-à-vis desdites plusieurs attaques identifiées. 11. Procédé selon l'une des revendications 1 à 5, caractérisé en ce que, au cours de l'étape (El) d'analyse, on classe ensuite les clés de l'ensemble de clés (IK) selon un ordre de force décroissant. 12. Procédé selon l'une quelconque des revendications 1, 6 à 10 caractérisé en ce que, au cours de l'étape (El) d'analyse, on classe ensuite les clés de l'ensemble de clés (IK) selon un ordre de force résultante décroissant. 13. Dispositif pour la personnalisation d'un composant électronique par une clé secrète choisie aléatoirement dans un sous-ensemble (SK) de clés, caractérisé en ce qu 1 il comprend des moyens programmés (1) pour la mise en oeuvre d'un procédé selon l'une quelconque des revendications 1 à 12, les moyens programmés comprenant une unité centrale (2) et une mémoire de programme.