FR 2789774 A1 20000818 FR 9901650 A 19990211 Procédé de comparaison sécurisé de deux registres mémoire, et module de sécurité mettant en oeuvre ce procédé L'invention concerne un procédé de comparaison sécurisé de deux registres mémoire, et un module de sécurité mettant en oeuvre ce procédé. Le terme "module de sécurité" doit être pris, soit dans son sens classique dans lequel il désigne un dispositif ayant vocation, dans un réseau de communication ou d'information, à être détenu par un organisme supervisant le réseau et à stocker de façon protégée des paramètres secrets et fondamentaux du réseau tels que des clés cryptographiques, soit comme désignant plus simplement un dispositif attribué à divers usagers du réseau et permettant à chacun d'eux d'avoir accès à celui-ci, ce dernier dispositif étant lui aussi susceptible de détenir des paramètres secrets. Le module de sécurité pourra prendre la forme d'un objet portatif du type carte à puce. On sait qu'un fraudeur est susceptible de déduire certaines informations sur les traitements effectués dans un module de sécurité en étudiant précisément la consommation de courant électrique du module de sécurité. En ce qui concerne notamment l'opération de comparaison de deux registres mémoire, le fraudeur peut chercher à étudier l'évolution de ce courant électrique et tenter d'en déduire le résultat positif ou négatif de cette comparaison. Dans la technique connue, I'opération de comparaison de deux registres mémoire, qui s'effectue en comparant deux à deux différents mots composant les registres, comporte une opération d'écriture du résultat de chaque comparaison effectuée entre mots: cette écriture consiste en une mise à 0 ou à 1 d'un bit dans un registre auxiliaire, en fonction du résultat de la comparaison. Or, cette traduction directe du résultat par une mise à 0 ou à 1 d'un bit est susceptible d'être repérée par un fraudeur. Le but de l'invention est de proposer un procédé de comparaison de deux registres mémoire qui n'implique pas une écriture directe du résultat de la comparaison dans un registre auxiliaire. L'invention concerne à cet effet un procédé de comparaison de deux registres mémoire principaux, ces registres comprenant un même nombre de mots ayant chacun une valeur définie par plusieurs éléments logiques, caractérisé en ce qu'il comprend les étapes consistant à: -définir au moins un registre mémoire auxiliaire comprenant plusieurs mots ayant chacun une valeur définie par plusieurs éléments logiques; -positionner les éléments logiques du registre mémoire auxiliaire à des valeurs aléatoires; - calculer une première somme des valeurs des mots du registre mémoire auxiliaire; -comparer deux à deux les mots respectifs des registres mémoire principaux et, pour chaque comparaison de deux mots respectifs, sélectionner aléatoirement l'un des mots du registre mémoire auxiliaire, et modifier d'une première valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier d'une seconde valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents; -calculer une seconde somme des valeurs des mots du registre mémoire auxiliaire, et la modifier d'une valeur égale à ladite première valeur multipliée par le nombre de mots des registres mémoire principaux; et - comparer lesdites première et seconde sommes et, en cas d'égalité, déclarer que lesdits registres mémoire principaux sont identiques tandis que, en cas d'inégalité, déclarer que lesdits registres mémoire principaux sont différents. D'autres détails et avantages de la présente invention apparaîtront au cours de la description suivante d'un mode d'exécution préféré mais non limitatif, en regard des dessins annexés sur lesquels: La figure 1 représente un dispositif de traitement de données coopérant avec un module de sécurité; La figure 2 représente une variante de la figure 1; La figure 3 représente deux registres principaux à comparer; La figure 4 représente deux registres auxiliaires A et B utilisés pour comparer les registres principaux; La figure 5 représente un octet de sécurité utilisé pour comparer les registres principaux; La figure 6 est un organigramme de la procédure de comparaison des registres principaux et d'écriture correspondante dans les registres auxiliaires A et B; et La figure 7 est un organigramme de la procédure d'analyse du résultat de la comparaison des registres principaux, au moyen des registres auxiliaires A et B. La figure 1 représente un dispositif de traitement de données 1 coopérant avec un module de sécurité sous la forme d'un objet portatif 8. Le dispositif de traitement de données comprend de façon connue en soi un microprocesseur 2 auquel sont reliés une mémoire ROM 3, et une mémoire RAM 4, des moyens 5 pour coopérer, avec ou sans contact physique, avec l'objet portatif 8, et une interface de transmission 7 permettant au dispositif de traitement de données de communiquer avec un réseau de communication de données. Le dispositif de traitement de données 1 peut en outre être équipé de moyens de stockage tels que des disquettes ou disques amovibles ou non, de moyens de saisie (tels qu'un clavier et/ou un dispositif de pointage du type souris) et de moyens d'affichage, ces différents moyens n'étant pas représentés sur la figure 1. Le dispositif de traitement de données peut être constitué par tout appareil informatique installé sur un site privé ou public et apte à fournir des moyens de gestion de l'information ou de délivrance de divers biens ou services, cet appareil étant installé à demeure ou portable. Il peut notamment s'agir aussi d'un appareil dédié aux télécommunications. Par ailleurs, I'objet portatif 8 porte une puce incluant des moyens de traitement de l'information 9, une mémoire non volatile 10, une mémoire volatile de travail RAM 14, et des moyens 13 pour coopérer avec le dispositif de traitement de données 1. Cette puce est agencée pour définir, dans la mémoire 10, une zone secrète 11 dans laquelle des informations une fois enregistrées, sont inaccessibles depuis l'extérieur de la puce mais seulement accessibles aux moyens de traitement 9, et une zone accessible 12 qui est rendue accessible depuis l'extérieur de la puce par le microprocesseur 9 pour une lecture et/ou une écriture d'informations. Chaque zone de la mémoire non volatile 10 peut comprendre une partie non modifiable ROM et une partie modifiable EPROM, EEPROM, ou constituée de mémoire RAM du type "flash" ou FRAM (cette dernière étant une mémoire RAM ferromagnétique), c'est-à- dire présentant les caractéristiques d'une mémoire EEPROM avec en outre des temps d'accès identiques à ceux d'une RAM classique. En tant que puce, on pourra notamment utiliser un microprocesseur autoprogrammable à mémoire non volatile, tel que décrit dans le brevet américain n 4.382.279 au nom de la Demanderesse. Comme indiqué en colonne 1, lignes 13-25 de ce brevet, le caractère autoprogrammable de la puce correspond à la possibilité pour un programme fi situé dans une mémoire ROM, de modifier un autre programme fj situé dans une mémoire programmable en un programme gj. Dans une variante, le microprocesseur de la puce est remplacé - ou tout du moins complété - par des circuits logiques implantés dans une puce à semi-conducteurs. En effet, de tels circuits sont aptes à effectuer des calculs, notamment d'authentification et de signature, grâce à de l'électronique câblée, et non microprogrammée. Ils peuvent notamment être de type ASIC (de l'anglais " Application Specific Integrated Circuit "). Avantageusement, la puce sera conçue sous forme monolithique. Une variante de la figure 1 est illustrée sur la figure 2, o le dispositif de traitement de données 16 comprend, outre les éléments du dispositif de traitement de données 1 de la figure 1, ceux de l'objet portatif 8 disposés dans un module de sécurité 15, les éléments communs aux deux figures 1,2 portant les mêmes références. Toutefois, les moyens de coopération 5,13 de la figure 1 sont remplacés par une liaison permanente entre le microprocesseur 2 et le microprocesseur 9. Selon une variante de la figure 2, le dispositif de traitement de données est constitué par le module de sécurité 15 de la figure 2 luimême. Sur la figure 3, sont représentés deux registres mémoire principaux de la mémoire volatile RAM 14 du module de sécurité précité, comprenant chacun un même nombre de n mots constitués par des octets (typiquement huit), repérés (1,2,....i,..... n). L'un des deux registres est un registre de référence stockant provisoirement une valeur de référence telle que par exemple un code d'usager ou PIN (de l'anglais Personal Identification Number) ou une signature, ou tout autre grandeur sensible, conservée en mémoire non volatile 10 et permettant de procéder à une authentification. Quant à l'autre registre, il s'agit d'un registre a vérifier, par comparaison avec le registre de référence: il contient une grandeur généralement reçue de l'extérieur du module de sécurité. La mémoire volatile RAM 14 contient encore (figure 4) deux registres auxiliaires A,B comprenant chacun un certain nombre d'octets (typiquement le même nombre que pour les registres principaux), repérés (1,2,JA..... m) et (1,2,.,jB......p). Ces registres vont être utilisés pour enregistrer le résultat de la comparaison entre les registres mémoire principaux, comme précisé en regard de la figure 6. La mémoire volatile RAM 14 contient encore (figure 5) un octet de sécurité comprenant deux bits significatifs x et y. La valeur du bit x définit, comme précisé en regard de la figure 6, I'une ou l'autre de deux façons de traduire l'égalité entre les deux registres mémoire principaux. La valeur du bit y définit lequel des deux registres auxiliaires A et B sera effectivement utilisé pour obtenir le résultat de la comparaison entre les registres mémoire principaux. Le procédé de comparaison du registre de référence et du registre à vérifier va maintenant être exposé en regard de la figure 6. Tout d'abord, on génère aléatoirement l'octet de sécurité en utilisant un générateur aléatoire connu en soi et prévu de manière matérielle ou logicielle dans le module de sécurité (étape 61). On génère aussi aléatoirement les deux registres auxiliaires A et B (étape 62). On calcule ensuite une première somme SA, de tous les octets du registre auxiliaire A et une première somme SB1 de tous les octets du registre auxiliaire B (étape 63). On initialise à 0 un indice i définissant le rang d'un octet courant du registre de référence ou du registre à vérifier (étape 65), puis on ajoute 1 à cet indice (étape 65). On compare ensuite i au nombre total n d'octets de ces registres (étape 66): dans le cas o i n'est pas supérieur à n, on génère aléatoirement (étape 67) deux indices jA et jB, jA étant compris entre 1 et m et jB étant compris entre 1 et p, correspondant respectivement au rang d'un octet courant du registre auxiliaire A, et au rang d'un octet courant du registre auxiliaire B. On compare ensuite les deux octets de rang i du registre de référence et du registre à vérifier (étape 68). On détermine ensuite la valeur du bit x de l'octet de sécurité (étape 69). On considère d'abord le cas o x est différent de 1, c'est-à-dire possède la valeur 0. A l'étape 70, on étudie s'il y a égalité entre les deux octets de rang i. Dans la négative (étape 72), on incrémente d'une unité l'octet d'indice jA du registre auxiliaire A et on décrémente d'une unité l'octet d'indice jB du registre auxiliaire B. Dans l'affirmative (étape 71), on effectue les opérations inverses, à savoir on décrémente d'une unité l'octet d'indice jA du registre auxiliaire A et on incrémente d'une unité l'octet d'indice je du registre auxiliaire B. Si en revanche à l'étape 69, x vaut 1, on effectue des opérations inverses de celles effectuées lorsque x vaut 0. A l'étape 73, on étudie s'il y a égalité entre les deux octets de rang i. Dans la négative (étape 75), on décrémente d'une unité l'octet d'indice jA du registre auxiliaire A et on incrémente d'une unité l'octet d'indice jB du registre auxiliaire B. Dans l'affirmative (étape 74), on effectue les opérations inverses, à savoir on incrémente d'une unité l'octet d'indice jA du registre auxiliaire A et on décrémente d'une unité l'octet d'indice jB du registre auxiliaire B. A la fin de l'une quelconque des quatre étapes 71,72,74,75, on remonte à l'étape 65 pour augmenter d'une unité l'indice i: il s'ensuivra donc une comparaison des deux octets suivants du registre de référence et du registre à vérifier. Une fois que tous les octets de ces deux registres ont été comparés, i devient supérieur à n à l'étape 66, ce qui clôt la procédure. La façon dont vont être exploités les résultats obtenus en figure 6 va être exposée en regard de la figure 7. On détermine d'abord la valeur du bit y de l'octet de sécurité (étape 81). Si y est différent de 1, on va utiliser, pour rechercher le résultat de la comparaison entre les deux registres principaux, le registre auxiliaire A et on ignorera le registre auxiliaire B. Pour ce faire, on va calculer à nouveau la somme des octets du registre auxiliaire A (étape 82), ce qui donne une seconde somme SA2.On étudie ensuite la valeur du bit x de l'octet de sécurité (étape 83). Si x est différent de 1, on retranche la valeur n de la première somme SA, des octets du registre auxiliaire A (étape 84), c'est- à-dire qu'on modifie cette somme de la valeur (-n). Cette valeur (-n) est obtenue en multipliant par le nombre n d'octets du registre de référence la valeur dont on a modifié auparavant l'octet jA du registre auxiliaire A (voir figure 6, étape 71), soit en l'espèce (-1)xn=(-n). Enfin, à l'étape 85, on compare les première et seconde sommes SA, et SA2 du registre auxiliaire A: l'égalité entre ces sommes signifie l'égalité entre le registre de référence et le registre à vérifier, tandis qu'une différence entre ces sommes signifie que le registre de référence et le registre à vérifier sont différents. Si, à l'étape 83, x vaut 1, on ajoute la valeur n à la première somme SA, des octets du registre auxiliaire A (étape 86), c'est-à-dire qu'on modifie cette somme de la valeur (+n). Cette valeur (+n) est obtenue en multipliant par le nombre n d'octets du registre de référence la valeur dont on a modifié auparavant l'octet jA du registre auxiliaire A (voir figure 6, étape 74), soit en l'espèce (+1)xn=(+n). Enfin, à l'étape 87, on compare les première et seconde sommes SA, et SA2 du registre auxiliaire A: l'égalité entre ces sommes signifie I'égalité entre le registre de référence et le registre à vérifier, tandis qu'une différence entre ces sommes signifie que le registre de référence et le registre à vérifier sont différents. Si en revanche, à l'étape 81, y est égal à 1, on va utiliser, pour rechercher le résultat de la comparaison entre les deux registres principaux, le registre auxiliaire B et on ignorera le registre auxiliaire A. Pour ce faire, on va calculer à nouveau la somme des octets du registre auxiliaire B (étape 88), ce qui donne une seconde somme SB2.On étudie ensuite la valeur du bit x de l'octet de sécurité (étape 89). Si x est différent de 1, on ajoute la valeur n à la première somme Ssi des octets du registre auxiliaire B (étape 90). Enfin, à l'étape 91, on compare les première et seconde sommes SB, et S82 du registre auxiliaire B: l'égalité entre ces sommes signifie l'égalité entre le registre de référence et le registre à vérifier, tandis qu'une différence entre ces sommes signifie que le registre de référence et le registre à vérifier sont différents. Si, à l'étape 89, x vaut 1, on retranche la valeur n de la première somme SB1 des octets du registre auxiliaire B (étape 92). Enfin, à l'étape 93, on compare les première et seconde sommes SB1 et SB2 du registre auxiliaire B: l'égalité entre ces sommes signifie l'égalité entre le registre de référence et le registre à vérifier, tandis qu'une différence entre ces sommes signifie que le registre de référence et le registre à vérifier sont différents. On constate que l'utilisation de deux registres auxiliaires A et B permet avantageusement de générer un même nombre d'incrémentations et de décrémentations, ce qui ne fournit aucun renseignement à un éventuel fraudeur. On constate aussi que le nombre d'octets manipulés durant le procédé est a priori différent pour le registre auxiliaire A et le registre auxiliaire B, puisqu'un même octet peut éventuellement être manipulé plusieurs fois. En variante au procédé décrit ci-dessus, on n'utilise qu'un seul registre auxiliaire: dans ce cas, ce registre auxiliaire sera forcément utilisé lors de l'exploitation des résultats. Selon une autre variante au procédé décrit ci-dessus, les octets des registres auxiliaires A et B sont modifiés, lors des étapes 72,75, d'une valeur différente de l'unité; on évitera toutefois la valeur 0 qui ne modifie pas l'octet considéré, ce qui engendre une dissymétrie de comportement vis-à-vis d'une valeur différente de 0. Par ailleurs, les deux modifications sur les registres auxiliaires A et B pourraient s'effectuer dans un même sens mais d'une valeur différente (alors que selon la figure 6, ces modifications s'effectuaient en sens inverse). Selon une autre variante au procédé décrit ci-dessus, on procède, avant chacune des étapes 71,72,74,75 de modification des registres auxiliaires A et B, à un tirage aléatoire pour déterminer lequel de ces deux registres sera modifié en premier. Dans ce qui précède, les registres utilisés se trouvaient dans la mémoire RAM 14 du module de sécurité. En variante, ils pourraient se trouver dans la mémoire non volatile 10. Dans ce qui précède, les mots du registre de référence et du registre à vérifier comportaient plusieurs éléments logiques (huit bits); en variante, ce nombre pourrait être ramené à un. REVENDICATIONS 1. Procédé de comparaison de deux registres mémoire principaux, ces registres comprenant un même nombre de mots ayant chacun une valeur définie par au moins un élément logique, caractérisé en ce qu'il comprend les étapes consistant à: -définir au moins un registre mémoire auxiliaire (A) comprenant plusieurs mots ayant chacun une valeur définie par plusieurs éléments logiques; -positionner les éléments logiques du registre mémoire auxiliaire (A) à des valeurs aléatoires; -calculer une première somme (SAl) des valeurs des mots du registre mémoire auxiliaire; -comparer deux à deux les mots respectifs (i) des registres mémoire principaux et, pour chaque comparaison de deux mots respectifs, sélectionner aléatoirement l'un des mots du registre mémoire auxiliaire, et modifier d'une première valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier d'une seconde valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents; - calculer une seconde somme (SA2) des valeurs des mots du registre mémoire auxiliaire, et la modifier d'une valeur égale à ladite première valeur multipliée par le nombre de mots (n) des registres mémoire principaux; et -comparer lesdites première et seconde sommes (SA,SA2) et, en cas d'égalité, déclarer que lesdits registres mémoire principaux sont identiques tandis que, en cas d'inégalité, déclarer que lesdits registres mémoire principaux sont différents. 2. Procédé selon la revendication 1, dans lequel on affecte aléatoirement à I'identité entre les mots des registres mémoire principaux l'une desdites première et seconde valeurs prédéterminées, et l'on affecte à la différence entre les mots des registres mémoire principaux l'autre desdites première et seconde valeurs prédéterminées, I'étape de modification de ladite seconde somme (SA2) des valeurs des mots du registre mémoire auxiliaire (A) consistant à la modifier d'une valeur égale à ladite une desdites première et seconde valeurs prédéterminées, multipliée par le nombre de mots (n) des registres mémoire principaux. 3. Procédé selon la revendication 1, qui utilise un premier et un second registres auxiliaires (A,B) et comprend les étapes consistant à: positionner les éléments logiques des registres mémoire auxiliaires à des valeurs aléatoires; -calculer une première somme (SAl,SB1) des valeurs des mots des registres mémoire auxiliaires; -comparer deux à deux les mots respectifs des registres mémoire principaux et, pour chaque comparaison de deux mots respectifs, sélectionner aléatoirement l'un des mots du premier registre mémoire auxiliaire, et modifier d'une première valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier d'une seconde valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents, puis sélectionner aléatoirement l'un des mots du second registre mémoire auxiliaire, et modifier d'une troisième valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier d'une quatrième valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents; - sélectionner aléatoirement l'un des deux registres mémoire auxiliaires et, dans le cas du premier registre mémoire auxiliaire, calculer une seconde somme (SA2) des valeurs de ses mots, et la modifier d'une valeur égale à ladite première valeur multipliée par le nombre de mots des registres mémoire principaux et, dans le cas du second registre mémoire auxiliaire, calculer une seconde somme (SB2) des valeurs de ses mots, et la modifier d'une valeur égale à ladite troisième valeur multipliée par le nombre de mots des registres mémoire principaux; et comparer lesdites première et seconde sommes du registre mémoire auxiliaire sélectionné et, en cas d'égalité, déclarer que lesdits registres mémoire principaux sont identiques tandis que, en cas d'inégalité, déclarer que lesdits registres mémoire principaux sont différents. 4. Procédé selon la revendication 3, dans lequel l'étape de modification des mots des registres mémoire auxiliaires (A,B) consiste à sélectionner aléatoirement l'un des mots du premier registre mémoire auxiliaire et à modifier d'une valeur dans un premier sens la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier de cette même valeur dans un second sens opposé au premier la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents, puis à sélectionner aléatoirement l'un des mots du second registre mémoire auxiliaire et à modifier de ladite valeur dans le second sens la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier de cette même valeur dans le premier sens la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents; 5. Procédé selon la revendication 3, dans lequel pour le premier registre mémoire auxiliaire (A) on affecte aléatoirement à l'identité entre les mots des registres mémoire principaux l'une desdites première et seconde valeurs prédéterminées, et l'on affecte à la différence entre les mots des registres mémoire principaux l'autre desdites première et seconde valeurs prédéterminées, l'étape de modification de ladite seconde somme (SA2) des valeurs des mots du premier registre mémoire auxiliaire consistant à la modifier d'une valeur égale à ladite une desdites première et seconde valeurs prédéterminées, multipliée par le nombre de mots (n) des registres mémoire principaux, tandis que pour le second registre mémoire auxiliaire (B) on affecte aléatoirement à l'identité entre les mots des registres mémoire principaux l'une desdites troisième et quatrième valeurs prédéterminées, et l'on affecte à la différence entre les mots des registres mémoire principaux l'autre desdites troisième et quatrième valeurs prédéterminées, l'étape de modification de ladite seconde somme (SB2) des valeurs des mots du second registre mémoire auxiliaire consistant à la modifier d'une valeur égale à ladite une desdites troisième et quatrième valeurs prédéterminées, multipliée par le nombre de mots des registres mémoire principaux. 6. Procédé selon la revendication 3, dans lequel l'étape de modification des mots des registres auxiliaires (A,B) est précédée d'une étape de sélection aléatoire de celui des deux registres auxiliaires dont on modifiera les mots en premier. 7. Module de sécurité comprenant des moyens de traitement d'information (9) et des moyens de stockage d'information (10,14), ces moyens de stockage comprenant au moins deux registres mémoire principaux, ces registres comprenant un même nombre (n) de mots ayant chacun une valeur définie par au moins un élément logique, caractérisé en ce que les moyens de traitement comprennent: -des moyens pour définir au moins un registre mémoire auxiliaire (A) comprenant plusieurs mots ayant chacun une valeur définie par plusieurs éléments logiques; -des moyens pour positionner les éléments logiques du registre mémoire auxiliaire à des valeurs aléatoires; -des moyens pour calculer une première somme (SA1) des valeurs des mots du registre mémoire auxiliaire; -des moyens pour comparer deux à deux les mots respectifs (i) des registres mémoire principaux et, pour chaque comparaison de deux mots respectifs, sélectionner aléatoirement l'un des mots du registre mémoire auxiliaire, et modifier d'une première valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont identiques, et modifier d'une seconde valeur prédéterminée la valeur de ce mot si lesdits mots des registres mémoire principaux sont différents; -des moyens pour calculer une seconde somme (SA2) des valeurs des mots du registre mémoire auxiliaire, et la modifier d'une valeur égale à ladite première valeur multipliée par le nombre de mots des registres mémoire principaux; et -des moyens pour comparer lesdites première et seconde sommes (SAl ,SA2) et, en cas d'égalité, déclarer que lesdits registres mémoire principaux sont identiques tandis que, en cas d'inégalité, déclarer que lesdits registres mémoire principaux sont différents.