Brevet FR3048096A1 — publié le 20170825

PROCEDE DE PROTECTION D'UN CIRCUIT CONTRE UNE ANALYSE PAR CANAUX AUXILIAIRES La présente invention concerne un procédé de protection d'un circuit contre une analyse par canal auxiliaire, visant à découvrir la valeur d'une donnée secrète manipulée par le circuit, et en particulier une clé secrète utilisée par un algorithme de cryptographie pour transformer un message. La présente invention concerne notamment les circuits intégrés de carte à puce ou les composants cryptographiques matériels intégrés sur les cartes mères des ordinateurs et autres équipements électroniques et informatiques (clés USB, décodeurs de chaînes télévisées, consoles de jeu, etc.) mettant en oeuvre des algorithmes cryptographiques. La présente invention concerne également les logiciels incluant une opération de cryptographie, prévus pour être exécutés dans un environnement sécurisé ou non. La présente invention concerne notamment les circuits mettant en oeuvre un algorithme cryptographique tel qu'un algorithme de chiffrement comme DES (Data Encryption Standard) ou Triple DES, AES (Advanced Encryption Standard), RSA (Rivest, Shamir et Adleman), DSA (Digital Signature Algorithm), ECDSA (Elliptic Curve Digital Signature Algorithm). L'invention concerne également les circuits mettant en oeuvre une fonction de hachage telle HMAC (Keyed-Hash Message Authentication Code). De tels microcircuits sont équipés d'une unité centrale de traitement (CPU). Certains sont équipés de circuits dédiés au calcul cryptographique, par exemple un coprocesseur cryptographique. Ces microcircuits comportent des milliers de portes logiques qui commutent différemment en fonction des opérations exécutées. Ces commutations créent des variations de consommation de courant de courte durée, par exemple de quelques nanosecondes, qui sont mesurables. Notamment, les circuits intégrés de technologie CMOS comprennent des portes logiques qui ne consomment du courant que lors de leur commutation, correspondant au passage à 1 ou à 0 d'un noeud logique. Ainsi, la consommation de courant dépend des données manipulées par l'unité centrale et de ses différents périphériques : mémoire, 3048096 2 données circulant sur le bus de données ou d'adresse, coprocesseur cryptographique, etc. Par ailleurs, certains logiciels réalisés notamment par des techniques de cryptographie ou d'obfuscation, telle que la technique de la boite blanche 5 ("Whitebox Cryptography") peuvent intégrer une donnée secrète d'une manière telle qu'il soit très difficile de la déterminer par rétro-ingénierie. Certains logiciels peuvent également recevoir une donnée secrète de l'extérieur par un canal de communication sécurisé. De tels microcircuits peuvent être soumis à des attaques dites par canaux auxiliaires ("Side 10 Channel Analysis"), basées sur l'observation de leur consommation de courant, leur rayonnement magnétique ou électromagnétique. De telles attaques visent à découvrir les données secrètes qu'ils utilisent, notamment leurs clés de cryptographie. Les attaques par canaux auxiliaires les plus répandues mettent en oeuvre des méthodes d'analyse statistique telles que 15 l'analyse SPA ("Single Power Analysis"), et l'analyse DPA ("Differential Power Analysis"), CPA ("Correlation Power Analysis") ou l'analyse électromagnétique (EMA). L'analyse SPA (réf. [1]) ne nécessite normalement que l'acquisition d'une seule courbe de consommation de courant. Elle vise à obtenir de l'information sur l'activité du circuit intégré en observant la partie 20 de la courbe de consommation correspondant à un calcul cryptographique, puisque la courbe de courant varie suivant les opérations exécutées et les données manipulées. Les logiciels peuvent également subir de telles attaques par canaux auxiliaires durant leur exécution par un circuit. 25 Les analyses DPA (réf. [2]) et CPA permettent de retrouver la clé d'un algorithme de cryptographie grâce à l'acquisition de nombreuses courbes de consommation du circuit et l'analyse statistique de ces courbes pour trouver l'information recherchée. Elles reposent sur le postulat que la consommation d'un circuit intégré de technologie CMOS varie lorsqu'un bit passe de 0 à 1 30 dans un registre ou sur un bus, et ne varie pas lorsqu'un bit reste égal à 0, reste à égal 1 ou passe de 1 à 0 (décharge de la capacité parasite du transistor MOS). Alternativement, il peut être considéré que la consommation d'un circuit intégré de technologie CMOS varie lorsqu'un bit passe de 0 à 1 ou passe de 1 à 0 et ne varie pas lorsqu'un bit reste égal à 0 ou reste égal à 1. Cette seconde hypothèse permet d'utiliser les fonctions classiques 3048096 3 "distance de Hamming" ou "poids de Hamming" pour élaborer un modèle de consommation qui ne nécessite pas de connaître la structure du circuit intégré pour être applicable. L'analyse DPA consiste à amplifier cette différence de consommation grâce à un traitement statistique portant sur de 5 nombreuses courbes de consommation, visant à faire ressortir une différence de mesure entre deux familles de courbes de consommation distinguées en fonction d'hypothèses formulées. L'analyse CPA (réf. [3]) se base sur un modèle linéaire de consommation de courant et consiste à calculer un coefficient de corrélation 10 entre, d'une part, les points de consommation mesurée qui forment les courbes de consommation capturées et, d'autre part, une valeur estimée de consommation, calculée à partir du modèle de consommation linéaire et d'une hypothèse sur la variable à découvrir que manipule le microcircuit et sur la valeur de la clé de cryptographie. 15 L'analyse électromagnétique (EMA) se base sur le principe qu'un microcircuit peut émettre des informations sous la forme de radiations électromagnétiques en champ proche ou lointain. Étant donné que les transistors émettent des signaux électromagnétiques lorsqu'ils changent d'état, ces signaux peuvent être traités comme les signaux de variation de 20 consommation de courant par une analyse telle que l'une ou l'autre des analyses SPA, DPA et CPA. Un exemple de mise en pratique de cette analyse a été réalisé par Jean-Jacques Quisquater (réf [4]). Il existe d'autres attaques par canaux auxiliaires, telles que "Template attacks" (réf. [5]) et "Mutual Information Analysis" (MIA) (réf. [6]). Toutes les 25 attaques mentionnées précédemment se basent sur un alignement temporel de toutes les courbes analysées. En d'autres termes, toutes les mesures effectuées à un instant donné, par exemple à partir de l'instant d'activation de l'exécution d'une commande par le circuit, doivent correspondre à la même valeur manipulée par l'algorithme. 30 Afin de protéger de tels circuits et les algorithmes cryptographiques qu'ils exécutent, contre de telles attaques par canaux auxiliaires, des contre-mesures sont généralement prévues. Une famille de contre-mesures largement répandue vise à éviter un tel alignement temporel. A cet effet, ces contremesures introduisent des variations dans la fréquence d'horloge 35 cadençant les circuits de calcul, ou introduisent des cycles d'horloge factices 3048096 4 ou des opérations factices. Une autre famille de contre-mesures consiste à adapter l'algorithme à protéger pour rendre les données manipulées par le circuit indépendantes de leurs valeurs réelles. Certaines contremesures de cette famille dites "par masquage" utilisent un masque aléatoire (nombre 5 binaire) qui est combiné à une autre donnée telle que la clé et/ou le message pendant l'exécution du procédé de chiffrement. Ce type de contre-mesure est efficace mais nécessite de modifier l'algorithme, et donc nécessite un coprocesseur spécialement prévu pour sa mise en oeuvre dans le cas d'une exécution par un coprocesseur, ou un programme d'une plus grande 10 complexité dans le cas d'une exécution par l'unité centrale de traitement du microcircuit ou un coprocesseur programmé. Une contre-mesure par exécutions multiples peut être mise en oeuvre avec un coprocesseur conventionnel ne comportant pas de moyens de contre-mesure. Elle consiste simplement à exécuter le procédé de 15 chiffrement plusieurs fois au moyen de fausses clés. A cet effet, on prévoit par exemple un programme de contre-mesure qui contrôle le programme de chiffrement ou le coprocesseur, et lui fait exécuter le procédé de chiffrement plusieurs fois avec les fausses clés, dans un ordre aléatoire, de sorte que l'exécution du procédé de chiffrement avec la bonne clé (c'est-à-dire la clé 20 authentique) est "noyée" dans un ensemble d'exécutions factices. Il est parfois possible de rétablir cet alignement temporel, moyennant une expertise spécifique et un grand nombre d'essais, en particulier à l'aide d'un nombre élevé de courbes à réaligner. Il subsiste malgré tout des cas où il n'est pas possible de rétablir cet alignement temporel, si bien que les tests 25 par canaux auxiliaires échouent bien qu'une fuite de donnée secrète soit présente dans les courbes. Afin de vérifier le niveau de sécurité qu'offre un circuit intégré sécurisé destiné à être commercialisé, des tests de qualification et/ou de certification sont prévus avant la commercialisation du circuit, ces tests comprenant 30 notamment des tests de la robustesse du circuit intégré face à des analyses par canaux auxiliaires visant à découvrir les données secrètes manipulées par le circuit intégré. Il existe également des tests permettant d'évaluer la résistance d'un logiciel aux attaques par canaux auxiliaires. Il est donc souhaitable de proposer des moyens de contre-mesure 35 permettant à un circuit intégré ou un logiciel d'être considéré comme apte à 3048096 5 être utilisé dans un produit, au terme d'un processus de qualification et/ou de certification incluant un tel procédé de test. Des modes de réalisation concernent un procédé d'exécution par un circuit d'une opération combinant une donnée d'entrée à une donnée secrète 5 et fournissant une donnée de sortie, le procédé comprenant une étape de fourniture en tant que résultat de l'opération d'un premier ensemble de données de sortie dans lequel la donnée de sortie présente une probabilité d'apparition égale à la probabilité d'apparition dans le premier ensemble de chacune des autres données possibles susceptibles d'être fournies par 10 l'opération, ou d'un second ensemble de données de sortie incluant la donnée de sortie, tel que, dans un ensemble de transformées des données du second ensemble, par une fonction surjective choisie, la transformée de la donnée de sortie présente une probabilité d'apparition égale à la probabilité d'apparition de chacune des transformées des autres données du second 15 ensemble par la fonction surjective, la donnée de sortie ayant un rang dans le premier ou second ensemble de données, imprédictible, mais connu du circuit. Selon un mode de réalisation, l'opération comprend une opération de substitution utilisant une table de substitution, chaque élément de la table de 20 substitution susceptible d'être sélectionné à partir de la donnée d'entrée ou d'un résultat intermédiaire, étant un ensemble de données incluant la donnée de sortie et dont les transformées respectives par la fonction surjective sont toutes différentes et comprennent une seule fois toutes les données possibles susceptibles d'être obtenues par la fonction surjective, le procédé 25 comprenant la fourniture en tant que résultat de l'opération de substitution d'une partie de la table sélectionnée en fonction de la donnée d'entrée ou du résultat intermédiaire, la donnée de sortie ayant une position dans la partie de la table sélectionnée, imprédictible, mais connue du circuit. Selon un mode de réalisation, la fonction surjective est choisie en 30 fonction d'un modèle de fuite de donnée du circuit. Selon un mode de réalisation, la fonction surjective est l'une des fonctions suivantes : la fonction identité, et une fonction fournissant le poids de Hamm ing de la valeur appliquée à la fonction. Selon un mode de réalisation, l'opération comprend une opération de 35 substitution utilisant une table de substitution, le procédé comprenant la 3048096 6 fourniture en tant que résultat de l'opération de substitution de l'ensemble de la table de substitution, la donnée de sortie ayant une position dans la table, imprédictible, mais connue du circuit. Selon un mode de réalisation, le procédé comprend l'exécution par le 5 circuit de l'opération appliquée à chacune des données d'un troisième ensemble de données d'entrée défini de manière à obtenir par l'opération le premier ensemble de données qui est fourni en tant que résultat de l'opération. Selon un mode de réalisation, les données du troisième ensemble 10 sont obtenues par combinaison de données d'un quatrième ensemble de données avec la donnée d'entrée de l'opération ou avec la donnée secrète. Selon un mode de réalisation, chacune des valeurs du quatrième ensemble est concaténée au moins une fois avec elle-même avant d'être combinée avec la donnée d'entrée de l'opération ou avec la donnée secrète. 15 Selon un mode de réalisation, l'opération appliquée à la donnée secrète et à la donnée d'entrée, comprend au moins une des opérations suivantes : une opération de chiffrement ou de déchiffrement, symétrique ou asymétrique, une opération de signature, une multiplication, modulaire ou non, par la donnée secrète, une opération logique OU Exclusif avec la 20 donnée secrète, une opération d'exponentiation modulaire, la donnée secrète étant utilisée comme exposant, une opération de réduction modulaire, la donnée secrète étant utilisée comme module, une opération de substitution par une valeur sélectionnée dans une table de substitution à l'aide de la donnée d'entrée, et une opération combinant une opération 25 logique OU Exclusif appliquée à la donnée secrète et une opération de substitution remplaçant le résultat de l'opération logique par une valeur sélectionnée dans une table de substitution à l'aide du résultat de l'opération logique. Des modes de réalisation peuvent également concerner un circuit 30 configuré pour mettre en oeuvre le procédé défini précédemment, et comprenant un processeur. Selon un mode de réalisation, le circuit comprend un coprocesseur. Des modes de réalisation peuvent également concerner un dispositif comprenant un circuit tel que celui défini précédemment, agencé sur un 35 support. 3048096 7 Des modes de réalisation peuvent également concerner un produit programme d'ordinateur directement chargeable dans une mémoire interne d'un ordinateur et comprenant des portions de code qui lorsqu'elles sont exécutées par un ordinateur configurent l'ordinateur pour mettre en oeuvre 5 les étapes du procédé défini précédemment. Des exemples de réalisation de l'invention seront décrits dans ce qui suit, à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 représente schématiquement une architecture classique 10 d'un circuit sécurisé, la figure 2 représente schématiquement un exemple de système de test de circuit intégré, la figure 3 représente des courbes d'un signal acquis pendant l'exécution d'une opération cryptographique par le circuit sécurisé, 15 la figure 4 représente des étapes d'un procédé de test du circuit, selon un mode de réalisation, la figure 5 représente sous la forme d'un graphe, un exemple de fonction surjective, la figure 6 représente schématiquement un tableau construit selon un 20 mode de réalisation, pour effectuer un traitement statistique, la figure 7 représente des étapes d'un procédé de test du circuit, selon un autre mode de réalisation, les figures 8 et 9 représentent des étapes d'un procédé d'analyse statistique d'un ensemble de valeur obtenues par le procédé test, selon 25 divers modes de réalisation, les figures 10 et 11 représentent sous la forme de courbes des tableaux de résultat fournis par les procédés d'analyse des figures 8 et 9, les figures 12 et 13 représentent des étapes d'une opération cryptographique, incluant des étapes de contremesure, selon divers modes 30 de réalisation, la figure 14 représente une table de substitution, transformée selon un procédé de contremesure, selon un mode de réalisation, la figure 15 représente un circuit sécurisé, selon un mode de réalisation. 3048096 8 La figure 1 représente à titre d'exemple un circuit intégré CT sécurisé, par exemple agencé sur un support portable HD tel qu'une carte plastique ou tout autre support, ou dans un terminal tel qu'un terminal mobile. Le circuit intégré comprend un microprocesseur PRC, un circuit d'entrée/sortie 10C, 5 des mémoires M1, M2, M3 reliées au microprocesseur par un bus de données et d'adresse et, optionnellement, un coprocesseur CP1 de calcul cryptographique ou accélérateur arithmétique, et un générateur RGN de nombre aléatoire. La mémoire M1 est une mémoire de type RAM ("Random Access Memory") contenant des données d'application volatiles. La mémoire 10 M2 est une mémoire non volatile, par exemple une mémoire EEPROM ou Flash, contenant des programmes application et des données non volatiles. La mémoire M3 est une mémoire morte ou mémoire ROM ("Read Only Memory") contenant le système d'exploitation du microprocesseur ("Operating System"). 15 Le circuit d'interface de communication 10C peut être du type à contact, par exemple selon la norme ISO/IEC 7816, du type sans contact à couplage inductif, par exemple selon la norme ISO/IEC 14443A/B ou ISO/IEC 13693, du type sans contact par couplage électrique (circuit d'interface UHF), ou à la fois du type à contact et sans contact. Le circuit 20 d'interface 10C peut être également relié par l'intermédiaire d'une interface spécifique, à un autre circuit comme un contrôleur NFC, ou un circuit principal d'un terminal tel qu'un terminal mobile ou un objet connecté. Dans certains modes de réalisation, le circuit intégré CT peut être configuré pour exécuter des opérations de chiffrement, de déchiffrement ou 25 de signature de messages qui lui sont envoyés, au moyen d'une fonction de cryptographie. Cette fonction de cryptographie peut être exécutée par le processeur PRC du circuit CT ou "sous-traitée" partiellement ou totalement par le processeur PRC au coprocesseur CP1. La figure 2 représente un exemple de système de test de circuit 30 intégré prévu pour mettre en oeuvre le procédé de test, selon un mode de réalisation. Il sera supposé à titre d'exemple que le système de test est configuré pour tester le circuit intégré CT de la figure 1. Le système de test comporte une sonde de mesure PB reliée à un dispositif de mesure MD tel un oscilloscope numérique, pour acquérir des 35 courbes relatives à l'activité du circuit, telles que des courbes de consommation de courant ou de variation de signaux électromagnétiques, et un moyen de calcul tel un ordinateur personnel PC. L'ordinateur PC est relié 3048096 9 au dispositif de mesure et met en oeuvre un programme de test. Ce programme de test comprend notamment une interface de communication et un programme pour communiquer avec le circuit intégré et lui adresser des messages, un programme de traitement de signal et un programme pour 5 mettre en oeuvre des étapes de calcul du procédé selon l'invention. Dans le cas où le circuit intégré est un circuit sans contact, l'interface de communication peut comprendre un lecteur de carte sans contact. La sonde PB peut-être une sonde de courant (par exemple une résistance placée sur la borne d'alimentation Vcc du circuit intégré), ou une 10 sonde électromagnétique reliée au dispositif de mesure par un amplificateur de signal AMP. Alternativement, une sonde de courant peut être combinée à une sonde électromagnétique. L'étude des rayonnements électromagnétiques montre en effet qu'un rayonnement électromagnétique émis par un circuit en fonctionnement donne une information sur les 15 commutations de bits dans le circuit intégré, à l'image de la mesure du courant consommé. L'avantage d'une sonde électromagnétique est qu'elle peut être placée à proximité de la partie de circuit dont on veut analyser le fonctionnement (par exemple à proximité du coeur du microprocesseur PRC ou du coprocesseur de calcul cryptographique CP1). 20 Par ailleurs, dans le cas d'un circuit intégré sans contact, la sonde de courant peut être remplacée par une sonde inductive qui mesure l'absorption, par le circuit intégré, du champ magnétique émis par le lecteur. Une telle sonde inductive, par exemple une bobine d'antenne, peut elle-même être combinée avec une sonde de champ électromagnétique placée à 25 proximité des zones de circuit à étudier. Ainsi, dans la présente demande, le terme "consommation de courant", utilisé dans un souci de simplification du langage, désigne toute grandeur physique mesurable dont les variations en fonction du temps sont représentatives des commutations de données binaires au sein du circuit 30 intégré ou au sein ou de la partie du circuit intégré étudiée, la grandeur physique pouvant être mesurée aux bornes du circuit intégré ou à proximité de la partie étudiée du circuit intégré. Par ailleurs, la grandeur physique est échantillonnée avec une fréquence d'échantillonnage suffisamment élevée pour collecter plusieurs points par courbe, en pratique de 10 à quelques 35 centaines de milliers de points par courbe, mais il peut être envisagé de collecter jusqu'à plusieurs millions de valeurs par courbe. 3048096 10 Le test peut également viser un logiciel ou une application. Dans ce cas, le logiciel peut être exécuté directement par le système de test ou par un programme d'émulation exécuté par le système de test. Les courbes analysées peuvent donc être par exemple des séries de valeurs transmises à 5 une mémoire lors d'accès mémoire ou des données manipulées dans des registres du circuit, ou encore des données transmises à une interface de communication du circuit, ces transmissions étant commandées par le logiciel testé. 10 Procédé de test Des modes de réalisation du procédé de test reposent sur un examen détaillé de courbes de variation en fonction du temps de signaux ou de valeurs numériques, représentatifs du fonctionnement du circuit à tester pendant qu'il exécute une opération mettant en oeuvre une donnée secrète. 15 La figure 3 représente des courbes CO, C1, Cix de valeurs en fonction du temps, qui peuvent être acquises par le système de test. Chacune de ces courbes a été obtenue en faisant exécuter une opération par le circuit ou le logiciel à tester. Les opérations correspondant aux courbes CO, C1, Cix sont généralement toutes différentes. Ces opérations 20 sont distinctes par exemple parce qu'elles consistent à appliquer une même fonction à des données d'entrée distinctes, connues, par exemple des messages à chiffrer, déchiffrer ou signer ou une signature à vérifier. Alternativement, les données connues peuvent être non pas des données d'entrée de la fonction, mais des données de sortie de cette fonction, ou une 25 partie des données d'entrée et de sortie de cette fonction. La fonction peut être n'importe quelle fonction appliquée à une même donnée secrète SD, et à une donnée d'entrée M, telle qu'une opération de chiffrement ou de déchiffrement, symétrique ou asymétrique, ou encore une opération de signature, ou simplement une multiplication, modulaire ou non, 30 par la donnée secrète (M x SD), une fonction logique XOR (OU Exclusif) avec la donnée secrète (M XOR SD), une fonction d'exponentiation modulaire, la donnée secrète étant utilisée comme exposant (MSD mod n, n étant connu), ou une fonction de réduction modulaire, la donnée secrète étant utilisée comme le module (M mod SD). Un autre exemple de fonction 35 consiste à traiter le résultat d'une opération XOR avec une table de 3048096 11 substitution (SBOX[M XOR SD], SBOX étant la table de substitution), comme dans les algorithmes cryptographiques DES et AES. Plus généralement, cette fonction doit pouvoir permettre de calculer une partie de la valeur résultant de l'opération à partir d'une partie de la donnée secrète et d'une 5 donnée d'entrée. Dans l'exemple de la figure 3, les courbes CO, C1, Ci, Cix correspondent respectivement aux données d'entrée (ou de sortie) M[0], M[1], M[i], et M[ix]. La figure 4 représente des étapes S1 à S19 de traitement des valeurs 10 collectées par le système de test durant l'exécution d'une opération cryptographique OPRK supposée connue, appliquée à une donnée secrète à découvrir, et à des données d'entrée M[0]..M[ix] également connues. Selon un mode de réalisation, le but de ce test est de déterminer si la valeur de la donnée secrète fuit dans les valeurs collectées formant les courbes de la 15 figure 3, par exemple. L'unité de traitement PC exécute tout d'abord les étapes 51 à S8. A l'étape 51, l'unité de traitement PC du système de test initialise un indice i de boucle sur les données d'entrée M[0]..M[ix], ainsi qu'un tableau CH. A l'étape S2, l'unité de traitement PC active l'exécution d'une opération 20 OPRK par le circuit MCT ou le logiciel à tester, cette opération recevant la donnée M[i], la donnée secrète étant fournie à l'opération par le circuit MCT ou le logiciel. A l'étape S3, l'unité de traitement PC collecte les valeurs constituant la courbe Ci. A l'étape S4, une partie ECi des valeurs de la courbe Ci est sélectionnée, seule cette partie étant traitée dans les étapes de 25 traitement qui suivent (figure 3). Dans l'exemple de la figure 4, cette partie est délimitée par les valeurs de la courbe Ci correspondant aux indices k et kx, par souci de simplicité. En réalité, les indices k et kx peuvent varier d'une courbe Ci à l'autre. En outre, les valeurs ainsi sélectionnées dans chaque courbe ne sont pas nécessairement consécutives. Ainsi, il peut être choisi 30 par exemple d'extraire uniquement des maximums ou des minimums locaux de chaque courbe. A noter également que la partie ECi extraite peut être la totalité de la courbe Ci. Dans le traitement qui suit, on fait l'hypothèse que les données ainsi extraites contiennent une information concernant la donnée secrète recherchée. 3048096 12 A l'étape S5, l'unité de traitement PC initialise à 0 un indice de boucle j ainsi qu'un tableau HT. A l'étape S6, l'unité de traitement PC applique une fonction surjective F1 à la valeur ECi[j] d'indice j de la partie de courbe sélectionnée ECi et incrémente de un (1) une valeur dans le tableau HT, 5 repérée par un indice égal au résultat fourni par la fonction F1. A l'étape S7, l'indice j est incrémenté de un (1). A l'étape S8, l'indice j est comparé à sa valeur maximum pour déterminer si toutes les valeurs de l'ensemble ECi ont été ainsi traitées. Si toutes les valeurs de l'ensemble ECi ont été traitées, l'unité de traitement PC exécute les étapes S9 à S14, sinon elle exécute à 10 nouveau les étapes S6 à S8. De cette manière, les valeurs de l'ensemble ECi chargées dans le tableau HT se présentent sous la forme d'un histogramme spécifiant le nombre d'occurrences de chaque valeur possible retournée par la fonction F1, de sorte que la caractéristique temporelle liée aux valeurs de l'ensemble ECi ne figure pas dans le tableau HT : le contenu 15 du tableau HT ne permet pas de déterminer l'ordre dans lequel les valeurs de l'ensemble ont été collectées. La figure 5 représente un exemple de tableau HT sous la forme d'un graphe de valeurs (calculées à l'aide de la fonction F1) en abscisse, en fonction d'un nombre d'occurrences en ordonnée. 20 Aux étapes S9 et S10, l'unité de traitement PC initialise des indices g et I à 0. A l'étape S11, l'unité de traitement PC applique une opération OPR à la donnée M[i] et à une partie de la donnée secrète à déterminer SD, fixée égale à l'indice g. L'opération OPR(M, g) est supposée fournir une partie du résultat de l'opération OPRK(M) (=OPR(M, SD)) exécutée à l'étape S2. Le 25 résultat fourni par l'opération OPR est traité par une fonction surjective F2 qui fournit une valeur VL. A l'étape S12, l'unité de traitement PC incrémente une valeur stockée dans le tableau CH à trois dimensions, en un emplacement repéré par les indices g, VL et I, de la valeur HT[I] à l'indice I dans le tableau HT correspondant à la donnée M[i]. La figure 6 représente un exemple de 30 tableau CH dans lequel chaque emplacement CH[g,VL] repéré par les indices g et VL contient un tableau obtenu par le cumul de plusieurs tableaux HT en fonction de la valeur VL obtenue à l'étape S11. A l'étape S13, l'indice I est incrémenté de un (1). A l'étape S14, l'indice I est comparé à sa valeur maximum lx compte tenu du nombre de valeurs distinctes possibles fournies 35 par la fonction F1. Si l'indice I est inférieur à sa valeur maximum lx, les 3048096 13 étapes S12 à S14 sont à nouveau exécutées, sinon les étapes S15 et S16 sont exécutées. A l'étape S15, l'unité de traitement PC incrémente de un (1) l'indice g. A l'étape S16, l'unité de traitement PC compare l'indice g à sa valeur 5 maximum gx, compte tenu du nombre de valeurs distinctes possibles pour la partie de donnée secrète considérée. Si l'indice g est inférieur à la valeur maximum gx, une nouvelle itération des étapes S10 à S16 est exécutée, sinon les étapes S17 et S18 sont exécutées. A l'étape S17, l'unité de traitement PC incrémente de un (1) l'indice i pour traiter une autre courbe Ci. 10 A l'étape S18, l'unité de traitement PC compare l'indice i à sa valeur maximum ix correspondant au nombre de courbes Ci générées. Si l'indice i est inférieur à la valeur maximum ix, les étapes S2 à S18 sont à nouveau exécutées, sinon l'étape S19 est exécutée. A l'étape S19, chaque tableau de cumuls contenu dans le tableau CH à l'emplacement [g,VL] contient les 15 valeurs suivantes : CH[g, VL,O..lx] = IHTm[i][0..lx] M[i] (1) les données M[i] à prendre en compte dans la somme ci-dessus étant telles que F2(OPR(M[i],g)) = VL. A l'étape S19, l'unité de traitement PC effectue une analyse 20 statistique du tableau CH visant à déterminer si une valeur de l'indice g correspond à la partie de donnée secrète recherchée. A cet effet, il est considéré que les informations résultant d'une fuite de la donnée secrète ont été accumulées dans les emplacements d'une ligne g du tableau CH, tandis que les informations indépendantes de la donnée secrète sont réparties 25 d'une manière aléatoire ou uniforme dans le tableau CH. Par conséquent, si une ligne d'indice g du tableau CH contient des valeurs plus élevées que dans le reste de ce tableau, la valeur de l'indice g à cette ligne du tableau CH correspond à la valeur de la partie recherchée de la donnée secrète SD. Dans ce cas, il peut être considéré que la donnée secrète SD a fui dans les 30 données collectées formant les courbes Ci. Les fonctions F1 et F2 peuvent être choisies de manière à correspondre au modèle de fuite du circuit ou du logiciel à tester. Ainsi, les fonctions F1 et F2 peuvent être la fonction identité, ou une fonction qui calcule un poids de Hamming d'une valeur fournie en entrée de la fonction, 3048096 14 par exemple le nombre de bits à 1 de la valeur codée en binaire, ou encore une fonction qui calcule une distance de Hamm ing avec une autre valeur, par exemple l'écart entre les nombres de bits à un de ces deux valeurs. A noter que le choix des fonctions F1 et F2 peut avoir une influence à la fois sur la 5 complexité du traitement statistique du tableau CH à effectuer pour déterminer la partie de la donnée secrète considérée, et sur le succès du traitement statistique pour déterminer la valeur de la partie de donnée secrète recherchée. La partie de donnée secrète recherchée en exécutant les étapes S1 à 10 S19 peut être par exemple définie sur 8 ou 16 bits. Sur 8 bits, l'indice g est affecté successivement de toutes les valeurs comprises entre 0 et 255 (ou 1 et 256). A noter que l'ordre dans lequel les valeurs de g sont testées n'a pas d'importance pour le résultat du test. La partie de la donnée secrète recherchée peut également être définie sur 16 ou 32 bits. 15 Une autre partie de la donnée secrète SD peut être déterminée en exécutant les étapes S9 à S19 en utilisant les valeurs des parties de la donnée secrète déterminées précédemment, et en forçant une autre partie de la donnée secrète aux différentes valeurs possibles de l'indice g. A cet effet, les mêmes parties ECi des courbes Ci ou d'autres parties de ces 20 courbes peuvent être extraites à l'étape S4. A noter que les ensembles de valeurs formant les courbes Ci peuvent avoir été collectés (étapes S2 et S3) avant d'exécuter les autres étapes de la figure 4. En outre, un tableau HT peut avoir été constitué pour chacune des courbes Ci, avant d'exécuter les étapes S9 à S19. 25 L'opération OPR / OPRK appliquée à la donnée secrète SD et à la donnée d'entrée M[i], peut être l'une ou une combinaison des opérations suivantes : - une opération de chiffrement, ou de déchiffrement, symétrique ou asymétrique, la donnée secrète SD étant la clé de chiffrement ou de 30 déchiffrement - une opération de signature à l'aide de la donnée secrète SD, - une multiplication, modulaire ou non, par la donnée secrète (M[i] x SD), - une opération logique XOR (OU Exclusif) avec la donnée secrète (M[i] XOR SD), 3048096 15 - une opération d'exponentiation modulaire, la donnée secrète SD étant utilisée comme exposant (M[i]SD mod n, n étant connu), - une opération de réduction modulaire, la donnée secrète SD étant utilisée comme module (M[i] mod SD), 5 - une opération de substitution par une valeur sélectionnée dans une table de substitution à l'aide de la donnée d'entrée (SBOX[M[i]], SBOX étant la table de substitution), et - une opération combinant une opération logique XOR appliquée à la donnée secrète et l'opération de substitution remplaçant le résultat de l'opération 10 logique par une valeur sélectionnée dans une table de substitution à l'aide du résultat de l'opération XOR (SBOX[M[i] XOR SD]). Plus généralement, cette opération doit pouvoir permettre de calculer une partie de la valeur finale de l'opération à partir d'une partie seulement de la donnée secrète et d'une donnée d'entrée. 15 Pour mettre en évidence les valeurs accumulées correspondant aux informations relatives à la donnée secrète, les contenus de tous les tableaux HT peuvent être ajoutés entre eux pour obtenir un tableau de nombre d'occurrences cumulées par valeur possible retournée par la fonction F1. Les valeurs de ce tableau de cumuls sont retranchées de tous les tableaux 20 accumulés dans les emplacements du tableau CH[g,VL]. Ainsi, la séquence d'étapes de la figure 4 peut être modifiée conformément à la séquence représentée sur la figure 7. Les étapes montrées sur la figure 7 comprennent les étapes S9 à S19 précédemment décrites, ainsi que des étapes supplémentaires S21 et S22. A l'étape S9, on a précédemment rempli un 25 tableau à deux dimensions HT[0..ix,l] contenant tous les tableaux générés à l'étape S6 pour toutes des courbes Ci. L'étape S21 est insérée dans la boucle (entre les étapes S12 et S14) contrôlée par l'indice I permettant de sélectionner l'une des valeurs fournies par la fonction F1, par exemple après l'étape S12. A l'étape S21, l'unité de traitement PC accumule chaque valeur 30 HT[i,l] dans un tableau de cumul MHT en un emplacement repéré par l'indice I. De cette manière, le tableau MHT contiendra à l'issue du traitement, la somme de toutes les valeurs HT[i,l] d'indice i obtenues pour chacune des courbes Ci. L'étape S22 est exécutée une fois à chaque itération de la boucle contrôlée par l'indice i permettant de sélectionner l'une des courbes 35 Ci, par exemple après l'étape S14. L'étape S22 permet de compter le 3048096 16 nombre de tableaux HT[i,l] accumulés dans chaque emplacement CH[g,VL] du tableau CH. Le résultat de ce comptage est mémorisé dans un tableau CPT. La figure 8 représente des étapes S31 à S42 d'un exemple de 5 traitement statistique du tableau CH pour tenter de déterminer la valeur de la partie recherchée de la donnée secrète SD. Les étapes S31 à S36 sont exécutées successivement. A l'étape S31, l'indice VL est initialisé à 0 et tous les emplacements d'un tableau TT sont initialisés à 1. A l'étape S32, les indices g et I sont initialisés à 0 et tous les emplacements d'un tableau IT 10 sont initialisés à 0. A l'étape S33, une variable T, reçoit la valeur CH[g,VL,I] contenue dans le tableau CH, sélectionnée par les indices g, VL, et I, cette valeur étant divisée par la valeur de comptage située à l'emplacement CPT[g,VL] dans le tableau CPT. A l'étape S34, la valeur IT[g] à l'emplacement g dans le tableau IT incrémentée du résultat élevé au carré de 15 la division par le nombre total ix de courbes Ci, de la différence entre la valeur de la variable T et la valeur MHT[g,VL] mémorisée dans le tableau MHT, repérée par les indices g et VL. A l'étape S35, l'indice I est incrémenté de un (1). A l'étape S36, l'indice I est comparé à sa valeur maximum lx. Si l'indice I a atteint sa valeur maximum lx, les étapes S37 à S39 sont 20 exécutées, sinon une nouvelle itération est exécutée à partir de l'étape S33. A l'étape S37, la valeur TT[g] repérée par l'indice g dans le tableau TT est mise à jour en étant multipliée par la valeur IT[g] calculée aux étapes S34 à S36, exécutées lx fois. A l'étape S38, l'indice g est incrémenté de un (1). A l'étape S39, l'indice g est comparé à sa valeur maximum gx. Si l'indice g est 25 supérieur à sa valeur maximum gx, les étapes S40 et S41 sont exécutées, sinon une nouvelle itération est exécutée à partir de l'étape S33. A l'étape S40, l'indice VL est incrémenté de un (1). A l'étape S41, l'indice VL est comparé à sa valeur maximum VLx. Si l'indice VL est supérieur à sa valeur maximum VLx, l'étape S42 est exécutée, sinon une nouvelle itération est 30 exécutée à partir de l'étape S32. A l'étape S42, le tableau TT est retourné en tant que résultat de l'analyse statistique. Ainsi, à la dernière itération de la boucle de traitement incluant les étapes S32 à S41, les tableaux IT et TT contiennent les valeurs suivantes : 3048096 lx 17 MHT[I] 2 (2) IT[g, VL] = CH[g, VL, I] (3) VLx CPT[g, VL] VL] ix TT[g] = fJIT[g, VL=0 ix gx VLx CPT[g, VL] = (F2(OPR(M[i], g)) VL) MHT[1] = CH[g, VL, I] avec 1=0 et g=0 VL=0 l'opérateur "==" représentant le test d'égalité, le tableau IT étant initialisé à 5 l'étape S33 et chargé à l'étape S34 à chaque nouvelle valeur de l'indice VL. Ainsi, CPT[g,VL] représente le nombre de fois où la condition (F2(OPR(M[i],g)) == VL) est vraie. Si la donnée secrète SD a fui lors de l'exécution de l'opération OPRK, un emplacement du tableau TT contient une valeur nettement plus grande que les autres valeurs stockées dans ce 10 tableau. Il en résulte que la partie de la donnée secrète SD recherchée est égale à l'indice g de la plus grande valeur se trouvant dans le tableau TT. Il est à noter que les valeurs du tableau IT peuvent être additionnées au lieu d'être multipliées à l'étape S37 correspondant à l'équation (3). La mise en oeuvre d'une opération de multiplication permet simplement 15 d'amplifier les écarts entre les valeurs du tableau TT, et donc de faire mieux apparaître la plus grande valeur correspondant à la partie de donnée secrète recherchée. Il peut également être envisagé d'appliquer la fonction logarithme aux valeurs du tableau IT et d'effectuer un cumul additif des valeurs de logarithme obtenues, dans le tableau TT. 20 La figure 9 représente des étapes S51 à S66 d'un autre exemple de traitement statistique du tableau CH pour tenter de déterminer la valeur de la partie recherchée de la donnée secrète SD. Ce traitement est basé sur la fonction d'entropie de Shannon. Les étapes S51 à S55 sont exécutées successivement. A l'étape S51, l'indice g est initialisé à 0 et tous les 25 emplacements du tableau TT sont initialisés à 0. A l'étape S52, les indices VL et I et une variable SXY sont initialisés à 0. A l'étape S53, la variable SXY est incrémentée de la valeur CH[g,VL,l] sélectionnée dans le tableau CH, par les indices g, VL, et I. A l'étape S54, l'indice I est incrémenté de un (1). A l'étape S55, l'indice I est comparé à sa valeur maximum lx. Si l'indice I a 30 atteint sa valeur maximum lx, les étapes S56 à S60 sont exécutées, sinon une nouvelle itération est exécutée de l'étape S53 à l'étape S55. A l'étape 3048096 18 S56, l'indice I et une variable PXY sont initialisés à 0. A l'étape S57, une variable VXY, reçoit la valeur CH[g,VL,I] sélectionnée dans le tableau CH par les indices g, VL, et I, cette valeur étant divisée par la variable SYX calculée par les itérations S53 à S55. A l'étape S58, la variable PXY est incrémentée 5 du produit de la variable VXY par le logarithme (par exemple en base 2) de la variable VXY. A l'étape S59, l'indice I est incrémenté de un (1). A l'étape S60, l'indice I est comparé à sa valeur maximum lx. Si l'indice I a atteint sa valeur maximum lx, les étapes S61 à S63 sont exécutées, sinon une nouvelle itération est exécutée de l'étape S57 à l'étape S60. 10 A l'étape S61, la valeur TT[g] repérée par l'indice g dans le tableau TT est mise à jour en lui retranchant le produit de la valeur CPT[g,VL] divisée par le nombre de courbes ix, par la variable PXY, la valeur CPT[g,VL] étant repérée par les indices g et VL dans le tableau CPT rempli à l'étape S22. A l'étape S62, l'indice VL est incrémenté de un (1). A l'étape S63, l'indice VL 15 est comparé à sa valeur maximum VLx. Si l'indice VL est supérieur à sa valeur maximum VLx, les étapes S64 et S65 sont exécutées, sinon une nouvelle itération est exécutée à partir de l'étape S53. A l'étape S64, l'indice g est incrémenté de un (1). A l'étape S65, l'indice g est comparé à sa valeur maximum gx. Si l'indice g est supérieur à sa valeur maximum gx, l'étape S66 20 est exécutée, sinon une nouvelle itération est exécutée à partir de l'étape S52. A l'étape S66, le tableau TT est retourné en tant que résultat de l'analyse statistique. Ainsi, à la dernière itération, après l'étape S65, le tableau TT contient les valeurs suivantes : lx lx TT[g] = C PT[g, VL] C H[g, VL, I] log' C H[g, VL, l] 25 1=0 ix 1=0 SXY SXY (4) Ix SXY = C H[g, VL,1] où 1=0 est calculée pour chacune des valeurs des indices g et VL, et chaque valeur de l'indice g représente une valeur possible de la partie de clé recherchée. Si la donnée secrète SD a fui lors du traitement de l'opération OPRK, un emplacement du tableau TT contient une valeur 30 nettement plus grande que les autres valeurs stockées dans ce tableau. Il en résulte que la partie de la donnée secrète SD recherchée est égale à l'indice g de la plus grande valeur se trouvant dans le tableau TT. 3048096 19 Les figures 10 et 11 représentent des courbes C1, C2 représentant un exemple de contenu du tableau TT en fonction de l'indice g, ce dernier ayant une longueur de un octet (donc variant de 0 à 255). Les courbes Cl et C2 ont été obtenues à partir d'un nombre de courbes Ci de l'ordre de 500 000. 5 La courbe Cl a été obtenue en exécutant les étapes de la figure 8, et la courbe C2, les étapes de la figure 9. Les courbes Cl et C2 présentent un pic marqué à la valeur g = 168 par rapport aux autres valeurs contenues dans le tableau TT. La valeur du pic dans la courbe Cl est supérieure à une trentaine de fois les autres valeurs du tableau TT. Dans la courbe C2, la 10 valeur du pic est supérieure à 3 fois les autres valeurs du tableau TT, Selon le traitement statistique du tableau CH, on peut considérer que la partie de la donnée secrète recherchée fuit lorsqu'on obtient un pic qui se maintient à une valeur supérieure à 0.9 fois la valeur la plus proche, en augmentant le nombre de courbes Ci analysées. 15 Efficacité des contre-mesures classiques vis-à-vis du procédé de test selon l'invention Pour que les circuits tels que les circuits intégrés puissent passer avec succès les procédures de qualification ou de certifications connues, les 20 concepteurs de ces circuits prévoient des contre-mesures dont les plus classiques consistent à introduire un aléa temporel. Cette disposition peut être effectuée en faisant varier aléatoirement la durée du cycle d'horloge cadençant le circuit, ou en introduisant des cycles de traitement ou des opérations factices à des instants choisis aléatoirement. Le calcul des 25 valeurs des tableaux HT permet de supprimer l'aspect temporel des valeurs analysées, et permet d'éviter d'avoir à synchroniser les différentes courbes des valeurs analysées. Dès lors que des informations relatives à la donnée secrète recherchée se trouvent dans les données analysées, le procédé de test décrit précédemment peut permettre de déterminer tout ou partie de la 30 donnée secrète. Contre-mesures appropriées Des modes de réalisation concernent des moyens de contre-mesure permettant à un circuit d'être considéré comme apte à être utilisé, au cours 3048096 20 d'un test de qualification ou de certification incluant le procédé de test décrit précédemment. On propose ici de protéger une opération cryptographique contre une analyse mise en oeuvre par le procédé de test tel que décrit précédemment. 5 Dans ce contexte, l'opération reçoit une donnée d'entrée, et fournit une donnée de sortie en fonction de la valeur de la donnée d'entrée. Une contremesure selon un mode de réalisation, consiste à exécuter l'opération à protéger pour toutes les données d'un ensemble de données d'entrée comprenant une seule fois toutes les données possibles susceptibles d'être 10 traitées par l'opération et donc comprenant la donnée à traiter par l'opération. Plus généralement, la donnée à traiter présente une probabilité d'apparition dans l'ensemble de données d'entrée, égale à la probabilité d'apparition dans cet ensemble de chacune des autres données possibles susceptibles d'être traitées par l'opération. 15 Une autre contremesure consiste à fournir en tant que résultat de l'opération un ensemble de données de sortie comprenant une seule fois toutes les données possibles susceptibles d'être fournies par l'opération. Plus généralement, la donnée de sortie présente une probabilité d'apparition dans l'ensemble de données de sortie, égale à la probabilité d'apparition 20 dans cet ensemble de chacune des autres données possibles susceptibles d'être fournies par l'opération. L'ensemble de données de sortie peut être réduit à un sous-ensemble de données dont les données transformées par une fonction surjective choisie comprennent une seule fois toutes les données susceptibles d'être obtenues par cette fonction, y compris la donnée 25 de sortie attendue de l'opération, correspondant à la donnée d'entrée. Plus généralement, ce sous-ensemble est tel que dans un ensemble de transformées des données du sous-ensemble, par la fonction surjective, la transformée de la donnée de sortie présente une probabilité d'apparition égale à la probabilité d'apparition de chacune des transformées des autres 30 données de ce sous-ensemble. La fonction surjective choisie peut correspondre au modèle de fuite du circuit ou du logiciel à protéger. Contrairement aux contremesures de l'art antérieur consistant à "noyer" l'opération à protéger dans un flot d'opérations identiques portant sur des données aléatoires et donc décorrélées de la donnée d'entrée de 35 l'opération à protéger, il s'agit ici de faire exécuter l'opération sur d'autres 3048096 21 données qui ne sont pas choisies aléatoirement. En effet, ces autres données sont corrélées à la donnée d'entrée dans la mesure où l'ensemble formé de ces autres données et de la donnée à traiter comprend toutes les données susceptibles d'être traitées par l'opération. 5 La figure 12 représente des étapes S71 à S77 d'un procédé de calcul d'une opération cryptographique faisant intervenir une donnée secrète SD, selon un mode de réalisation. Ce procédé est configuré pour passer avec succès le test décrit précédemment. Les étapes S71 à S76 sont exécutées successivement. A l'étape S71, une variable RN reçoit une valeur aléatoire 10 comprise entre 0 et une valeur maximum nx déterminée en fonction du nombre de bits utilisés pour coder cette variable en binaire. Ainsi, si la variable RN est codée sur 8 bits, nx est égal à 255. A l'étape S72, un indice n est initialisé à 0. A l'étape S73, une variable IRN est calculée en combinant l'indice n à la variable RN par une opération OU Exclusif. A l'étape S74, une 15 donnée de sortie RS[n] repérée par l'indice n dans un tableau de résultat RS est calculée en appliquant l'opération cryptographique OPR telle que définie précédemment, à une donnée d'entrée M, et à la donnée secrète SD. Selon un mode de réalisation, la donnée secrète SD est ici combinée par exemple par une opération XOR (OU Exclusif) à la variable IRN : 20 RS[n] = OPR(M,SD 0 IRN) (5) " représentant l'opérateur OU Exclusif. Alternativement, la donnée d'entrée M peut être combinée à la variable IRN : RS[n] = OPR(M 0 IRN, SD) (6) ou au résultat de l'opération : 25 RS[n] = OPR(M,SD) 0 IRN (7) A l'étape S75, l'indice n est incrémenté de un (1). A l'étape S76, l'indice n est comparé à la valeur maximum nx, et s'il est inférieur à la valeur nx, une nouvelle itération du calcul est exécutée aux étapes S73 à S76. Dans le cas contraire, l'étape S77 est exécutée. A l'étape S77, la donnée de 30 sortie recherchée, figurant dans le tableau RS à un indice n1 est retourné, cet indice n1 ayant la valeur de l'indice n de l'itération où la variable IRN était à 0, si l'opération de combinaison avec la valeur IRN à l'étape S74 est une opération XOR. En effet, le résultat de l'opération OU Exclusif appliquée à une donnée D et 0 ne transforme pas la donnée D. A noter que l'extraction 35 de la donnée de sortie recherchée dans le tableau RS, effectuée à l'étape 3048096 22 S77, peut être réalisée à la suite d'autres opérations. Dans ce cas, toutes les données mémorisées dans le tableau RS sont traitées par ces autres opérations. Ainsi, dans le cas de l'algorithme AES par exemple, l'opération OPR est par exemple l'opération XOR combinant une donnée d'entrée avec 5 une première clé utilisée lors d'une première ronde de l'algorithme. Les opérations suivantes de l'algorithme AES peuvent être exécutées sur toutes les données stockées dans le tableau RS, et les résultats successifs de ces opérations stockés dans le tableau RS. Ainsi, les opérations de décalage des lignes (Shift Rows) et de mélange des colonnes (Mix Columns) peuvent être 10 appliquées sur chaque élément du tableau RS. La donnée de sortie recherchée peut être extraite du tableau de résultat RS à une étape ultérieure du traitement jugée moins sensible aux attaques. Ces dispositions sont applicables également à l'algorithme DES ou Triple DES. Par ailleurs, la donnée d'entrée M et la donnée secrète SD sont 15 codées par des mots binaires ayant un même nombre de bits. Chaque valeur donnée à la variable IRN doit également présenter le même nombre de bits que les données M et SD. Si les données M et SD sont codées par des mots de 8 bits, la variable IRN est également codée sur 8 bits. Le nombre d'itérations nx devant être exécutées entre les étapes S73 à S76 est égal à 20 2x, x étant la taille en nombre de bits des données M et SD. Si les données M et SD sont codées par des mots de 16, 32 ou 64 bits, il peut être souhaitable de limiter ce nombre d'itérations. A cet effet, la variable IRN peut être codée sur 8 bits, et les opérations de combinaison de la donnée secrète SD ou de la donnée d'entrée avec la variable IRN peuvent être effectuées en 25 concaténant plusieurs fois la variable IRN avec elle-même pour former un mot de la taille de la donnée secrète SD ou de la donnée d'entrée M. Ainsi, dans le cas où les données M et SD sont codées sur 16 bits, la variable IRN sur 8 bits est concaténée avec elle-même pour obtenir une donnée sur 16 bits. L'opération exécutée à l'étape S73 devient alors : 30 RS[n] = OPR(M,SD 0 IRN//IRN) (8) "Ir représentant l'opérateur de concaténation de mots binaires. Dans le cas où les données M et SD sont codées sur 32 bits, chaque valeur de la variable IRN sur 8 bits est concaténée avec elle-même 3 fois pour obtenir une valeur sur 32 bits. L'opération exécutée à l'étape S73 devient alors : 35 RS[n] = OPR(M,SD 0 IRN//IRN//IRN//IRN) (9) 3048096 23 Plus généralement, lorsque la variable IRN est combinée à chaque itération à la donnée de sortie de l'opération OPR, les valeurs de la variable IRN peuvent être choisies de telle manière que leurs transformées par une fonction surjective choisie F3 comprennent une seule fois toutes les valeurs 5 possibles susceptibles d'être obtenues par cette fonction. La fonction F3 peut être la fonction identité, comme c'est le cas pour les étapes de la figure 12, ou une fonction dont l'ensemble image est plus réduit comme dans la figure 13. Ainsi, la figure 13 représente des étapes S80 à S90 d'un procédé de 10 calcul d'une opération cryptographique faisant intervenir une donnée secrète SD, selon un autre mode de réalisation. Ce procédé est configuré pour passer avec succès le test décrit précédemment. Les étapes S80 à S84 sont exécutées successivement. L'étape S80 est identique à l'étape S71. A l'étape S81, un indice n est initialisé à 1 et un indice m est initialisé à 0. A 15 l'étape S82, la valeur à l'indice 0 d'un tableau RS1 reçoit le résultat de l'opération OPR appliquée à la donnée d'entrée M et à la donnée secrète SD, ce résultat étant combiné à la donnée aléatoire RN par l'opération OU Exclusif. L'étape S83 est identique à l'étape S73. L'étape S84 est identique à l'étape S74 à la différence que le résultat du calcul effectué à cette étape est 20 mémorisé par une variable RES. En outre, la donnée IRN calculée à l'étape S83 est combinée par une opération OU Exclusif au résultat fourni par l'opération OPR. A l'étape S85, la transformée par la fonction F3 de la variable RES est comparée avec les autres données stockées dans le tableau RS aux emplacements désignés par des indices inférieurs ou égaux 25 à l'indice m. Si la variable RES est différente de ces autres données, l'indice m est incrémenté de un (1) et la variable RES est stockée dans le tableau RS1 à l'emplacement repéré par l'indice m, aux étapes S86 et S87 et l'indice n est incrémenté de un (1) à l'étape S88, sinon seul l'indice n est incrémenté de un (1) à l'étape S88. A l'étape S89 suivante, l'indice n est comparé à la 30 valeur maximum nx, et s'il est inférieur à la valeur nx, une nouvelle itération du calcul est exécutée aux étapes S83 à S89. Dans le cas contraire, l'étape S90 est exécutée. L'étape S90 est identique à l'étape S77, à la différence qu'elle est appliquée au tableau RS1. 3048096 24 La fonction F3 peut être choisie de manière à correspondre au modèle de fuite du circuit ou du logiciel à protéger. Ainsi, la fonction F3 peut être par exemple la fonction de Hamming. Une autre contremesure peut être mise en oeuvre lorsque l'opération 5 à protéger comprend une opération de lecture d'une table de correspondance ("lookup table"), à un indice correspondant à la donnée d'entrée de l'opération et à la donnée secrète à protéger ou à une donnée à partir de laquelle la donnée secrète peut être déterminée. Selon un mode de réalisation, toute la table de correspondance est lue et par exemple chargée 10 dans un ensemble de données résultantes, tel que le tableau RS. Comme précédemment, l'ensemble des données stockées dans le tableau RS peut être appliqué en entrée d'une opération suivante, chaque donnée du tableau étant transformée par cette opération. Connaissant 1"emplacement de la donnée de sortie dans le tableau RS, le circuit peut à tout moment extraire la 15 donnée de sortie. Selon un mode de réalisation, la table de correspondance est transformée en une nouvelle table dans laquelle chaque emplacement contient toutes les valeurs possibles susceptibles d'être contenues dans la table de correspondance. Ainsi, la figure 14 représente une table de 20 correspondance T1 permettant de déterminer le résultat d'une opération cryptographique en fonction de valeurs d'entrées variant de 0 à p. Selon un mode de réalisation, la table T1 est remplacée par une nouvelle table T2, présentant une dimension supplémentaire telle que T2[i,k0] = T1 [i] pour toutes les valeurs possibles de l'indices i comprises entre 0 et p. Par ailleurs, 25 toutes les valeurs T2[i,k] lorsque k varie de 0 à r comprennent toutes les valeurs possibles des valeurs susceptibles d'être mémorisées dans la table T1. Ainsi, si ces valeurs sont codées sur un octet, la valeur maximum r de l'indice k est égal à 255 et toutes les valeurs T2[i,k] lorsque l'indice i est fixé, et l'indice k varie de 0 à r, sont toutes différentes. Ainsi, toutes les tables 30 T2[i,j] désignées par l'indices i contiennent les mêmes valeurs, mais ordonnées différemment. A titre d'exemple, les données dans la table peuvent être définies de la manière suivante : T2[i,k] = T1 [i] 0 (k + k0) mod (r +1) (10) pour toutes les valeurs k de 0 à r. 3048096 25 L'exécution de l'opération à protéger consiste donc à charger dans un tableau de résultat (le tableau RS par exemple), toutes les valeurs de la table T2 repérées par les l'indice i défini à partir de la donnée d'entrée (et éventuellement de la donnée secrète) : 5 RS[0..r] = T2[i3O..r] Comme précédemment, l'étape S77 ou S90 peut ensuite être exécutée pour obtenir la donnée de sortie recherchée dans le tableau de résultat RS. La valeur de l'indice k0 tel que T2[i,k0] = T1[i], c'est-à-dire contenant les données de sortie de l'opération, peut être fixe pour toute la table T2 ou 10 varier à chaque ligne de la table. Par exemple, la colonne T2[0..p,k0] peut contenir le tableau T1. Dans un autre exemple, l'élément de table T2[0,k0] peut être égal à l'élément T1[0], l'élément T2[1,k0+1] peut être égal à l'élément T1[1], et ainsi de suite jusqu'à l'élément T2[p, (k0+p) mod(r+1)] égal à l'élément T1 [p]. Si dans cet exemple, le pas de décalage d'une ligne à 15 l'autre de la table T2 est de un, il peut être fixé à n'importe quelle autre valeur comprise entre 1 et r-2. Au lieu de contenir toutes les valeurs entre 0 et r, chaque élément de tableau T2[i] sélectionné par l'indice i, peut ne contenir que des valeurs telles que leurs transformées par la fonction surjective choisie F3 soient toutes 20 différentes et comprennent toutes les valeurs possibles susceptibles d'être obtenues par cette fonction, y compris la donnée de sortie attendue. Cette disposition, permet de réduire la taille de la table T2, sans pour autant réduire la robustesse du procédé, si la fonction F3 reproduit le modèle de fuite de la donnée secrète. 25 Bien entendu, si la table T1 est à deux dimensions, la table T2 est à trois dimensions, chaque élément de la table T1 étant remplacé par une table à une dimension contenant toutes les valeurs possibles des éléments de la table Tl. La figure 15 représente un circuit intégré CT1 agencé sur un support 30 portatif HD tel une carte plastique, et équipé d'une contre-mesure selon un mode de réalisation. Le circuit intégré comporte les mêmes organes que le circuit intégré CT décrit plus haut en relation avec la figure 1, et se distingue de celui-ci en ce que le coprocesseur CP1 est remplacé par un coprocesseur CP2 mettant en oeuvre l'une et/ou l'autre des contremesures décrites 35 précédemment. Ainsi, selon un mode de réalisation, le coprocesseur CP2 est 3048096 26 configuré pour fournir, non pas un unique résultat d'une opération cryptographique, mais un tableau de valeurs résultantes comprenant uniquement des valeurs telles que leurs transformées respectives par une fonction surjective choisie soient toutes différentes et comprennent toutes les 5 valeurs possibles susceptibles d'être obtenues par la fonction surjective, y compris le résultat attendu de l'opération cryptographique. Le processeur PRC est apparié avec le coprocesseur CP2 de manière à connaitre l'emplacement du résultat de l'opération cryptographique se trouvant dans le tableau de valeurs résultantes fourni par le coprocesseur CP2. 10 Le coprocesseur CP2 peut aussi être configuré pour exécuter une partie de l'opération cryptographique. Dans ce cas, le processeur PRC est configuré pour produire le tableau de valeurs résultantes comprenant uniquement des valeurs telles que leurs transformées respectives par une fonction surjective choisie soient toutes différentes et comprennent toutes les 15 valeurs possibles susceptibles d'être obtenues par la fonction surjective, y compris le résultat de l'opération cryptographique. 3048096 27 Références citées [1] P. C. Kocher, "Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other systems" In Neal Koblitz, editor, Advances in Cryptology 5 CRYPTO '96, volume 1109 of Lecture Notes in Computer Science, pages 104-113. Springer, 1996. [2] P. C. Kocher, J. Jaffe, and B. Jun, "Differential Power Analysis" In M. J. Wiener, editor, Advances in Cryptology - CRYPTO '99, volume 1666 of 10 Lecture Notes in Computer Science, pages 388-397. Springer, 1999. [3] E. Brier, C. Clavier, and F. Olivier, "Correlation Power Analysis with a Leakage Model" In M. Joye and J-J. Quisquater, editors, Cryptographic Hardware and Embedded Systems - CHES 2004, volume 3156 of Lecture 15 Notes in Computer Science, pages 16-29. Springer, 2004. [4] J.-J. Quisquater, "ElectroMagnetic Analysis (EMA): Measures and Counter-measures for Smart Cards", Smart Card Programming and Security, Springer Berlin / Heidelberg, vol. 2140,2001, p. 200-210 20 [5] S. Chari, J. R. Rao, and P. Rohatgi, "Template Attacks", Kaliski Jr., B.S., Koç, Ç.K., Paar, C. (eds.) CHES 2002. LNCS, vol. 2523, pp. 172-186. Springer, Heidelberg (2003) 25 [6] B. Gierlichs, L. Batina, P. Tuyls, and B. Preneel, "Mutual Information Analysis", CHES 2008, volume 5154 of LNCS, pages 426-442, Springer, 2008 30 REVENDICATIONS1. Procédé d'exécution par un circuit (CT1) d'une opération (OPR) combinant une donnée d'entrée (M) à une donnée secrète (SD) et fournissant une donnée de sortie, le procédé comprenant une étape de fourniture en tant que résultat de l'opération d'un premier ensemble de 5 données de sortie (RS) dans lequel la donnée de sortie présente une probabilité d'apparition égale à la probabilité d'apparition dans le premier ensemble de chacune des autres données possibles susceptibles d'être fournies par l'opération, ou d'un second ensemble de données de sortie (RS1) incluant la donnée de sortie, tel que, dans un ensemble de 10 transformées des données du second ensemble, par une fonction surjective choisie (F3), la transformée de la donnée de sortie présente une probabilité d'apparition égale à la probabilité d'apparition de chacune des transformées des autres données du second ensemble par la fonction surjective, la donnée de sortie ayant un rang dans le premier ou second ensemble de 15 données, imprédictible, mais connu du circuit. 2. Procédé selon la revendication 1, dans lequel l'opération (OPR) comprend une opération de substitution utilisant une table de substitution (T2), chaque élément de la table de substitution susceptible d'être 20 sélectionné à partir de la donnée d'entrée (M) ou d'un résultat intermédiaire, étant un ensemble de données (T2[i3O..r]) incluant la donnée de sortie et dont les transformées respectives par la fonction surjective (F3) sont toutes différentes et comprennent une seule fois toutes les données possibles susceptibles d'être obtenues par la fonction surjective, le procédé 25 comprenant la fourniture en tant que résultat de l'opération de substitution d'une partie (T2[i]) de la table sélectionnée en fonction de la donnée d'entrée ou du résultat intermédiaire, la donnée de sortie ayant une position dans la partie de la table sélectionnée, imprédictible, mais connue du circuit. 30 3. Procédé selon l'une des revendications 1 et 2, dans lequel la fonction surjective (F3) est choisie en fonction d'un modèle de fuite de donnée du circuit (CT1). 3048096 29 4. Procédé selon l'une des revendications 1 à 3, dans lequel la fonction surjective (F3) est l'une des fonctions suivantes : la fonction identité, et une fonction fournissant le poids de Hamming de la valeur appliquée à la fonction. 5. Procédé selon la revendication 1, dans lequel l'opération (OPR) comprend une opération de substitution utilisant une table de substitution (T1), le procédé comprenant la fourniture en tant que résultat (RS) de l'opération de substitution de l'ensemble de la table de substitution, la donnée de sortie ayant une position dans la table, imprédictible, mais connue du circuit. 6. Procédé selon la revendication 1, comprenant l'exécution par le circuit (CT1) de l'opération (OPR) appliquée à chacune des données d'un troisième ensemble de données d'entrée (SD 0 IRN, M) défini de manière à obtenir par l'opération le premier ensemble de données (RS) qui est fourni en tant que résultat de l'opération. 7. Procédé selon la revendication 6, dans lequel les données du troisième ensemble (SD 0 IRN, M) sont obtenues par combinaison de données d'un quatrième ensemble de données (IRN) avec la donnée d'entrée (M) de l'opération (OPR) ou avec la donnée secrète (SD). 8. Procédé selon la revendication 7, dans lequel chacune des valeurs du quatrième ensemble est concaténée au moins une fois avec elle-même avant d'être combinée avec la donnée d'entrée (M) de l'opération (OPR) ou avec la donnée secrète (SD). 9. Procédé selon l'une des revendications 1 à 8, dans lequel l'opération (OPR) appliquée à la donnée secrète (SD) et à la donnée d'entrée (M), comprend au moins une des opérations suivantes : une opération de chiffrement ou de déchiffrement, symétrique ou asymétrique, une opération de signature, 3048096 30 une multiplication, modulaire ou non, par la donnée secrète, une opération logique OU Exclusif avec la donnée secrète, une opération d'exponentiation modulaire, la donnée secrète étant utilisée comme exposant, 5 une opération de réduction modulaire, la donnée secrète étant utilisée comme module, une opération de substitution par une valeur sélectionnée dans une table de substitution à l'aide de la donnée d'entrée, et une opération combinant une opération logique OU Exclusif appliquée 10 à la donnée secrète et une opération de substitution remplaçant le résultat de l'opération logique par une valeur sélectionnée dans une table de substitution à l'aide du résultat de l'opération logique. 10. Circuit (CT1) configuré pour mettre en oeuvre le procédé selon 15 l'une des revendications 1 à 9, et comprenant un processeur (PRC). 11. Circuit (CT1) selon la revendication 10, comprenant un coprocesseur (CP2). 20 12. Dispositif comprenant un circuit selon la revendication 10 ou 11, agencé sur un support (HD). 13. Produit programme d'ordinateur directement chargeable dans une mémoire interne d'un ordinateur et comprenant des portions de code qui 25 lorsqu'elles sont exécutées par un ordinateur configurent l'ordinateur pour mettre en oeuvre les étapes du procédé selon l'une des revendications 1 à 9.