PROCEDE DE VERIFICATION DE L'INTEGRITE DES DONNEES DANS LE TRAITEMENT DES DONNEES DE DISPOSITIFS ELECTRONIQUES
Domaine de l'invention
La présente invention concerne le traitement de données de dispositifs électroniques. Plus précisément, la présente invention concerne un procédé de vérification de l'intégrité des données stockées dans un dispositif électronique. Arrière-plan technologique de l'invention Les dispositifs électroniques utilisés pour traiter des données comprennent classiquement différents types de mémoire. Les données sont habituellement transférées depuis une première mémoire de "stockage" vers une deuxième mémoire de "traitement" .
Les cartes à puce, en tant que mode de réalisation particulier de dispositifs électroniques, ont été conçues initialement pour améliorer la sécurité de systèmes répartis. Les applications de cartes à puce englobent par exemple les cartes d'appel, les cartes d'identification, les cartes médicales, les cartes de transaction (cartes bancaires de crédit/débit, cartes de fidélité de magasin, restaurant) et les cartes de sécurité. La totalité de ces applications exige que certaines données sensibles et confidentielles soient gérées à l'intérieur de la carte à puce.
Comme le montre la figure 1, qui porte le titre "Technique antérieure", un dispositif électronique 10
comprend classiquement une Unité Central de Traitement (CPU) 12, qui est le contrôleur/processeur principal du dispositif électronique 10. La CPU 12 peut, de façon optionnelle, comprendre un grand nombre de registres internes 13 comme par exemple dans les processeurs RISC (ordinateur à jeu d'instructions réduit).
Le dispositif électronique 10 comprend également une mémoire volatile sous la forme d'une mémoire vive
(RAM) 14, d'une mémoire morte (ROM) 16, d'une mémoire morte programmable effaçable électriquement 18 et, de façon optionnelle, une antémémoire 15, toutes couplées à la CPU 12. Pour une meilleure compréhension de la description suivante, les termes de "mémoire volatile" renvoient en particulier mais de façon non exclusive à de telles RAM, registres internes et/ou antémémoires.
Un dispositif entrée/sortie (E/S) , tel qu'un terminal 20, permet à la carte à puce 10 de partager des données avec un système réparti (non représenté) en contrôlant les entrées/sorties vers et depuis le dispositif électronique 10, par l'intermédiaire de la CPU 12. La carte à puce 10 comprend un port E/S (non représenté) pour transférer des données vers et depuis le dispositif entrée/sortie 20.
La CPU 12 traite des instructions pour gérer des données stockées dans le dispositif électronique, et elle comprend un programme qui assure la protection contre l'accès aux données sensibles et/ou confidentielles qui sont contenues et traitées dans la carte à puce 10, par des entités non autorisées, telles que des hackers (pirates informatiques) . En fait, dans
de nombreux cas, les information sensibles et/ou confidentielles contenues ou traitées dans le dispositif représentent une valeur importante (financière ou autre) pour leur détenteur. Des moyens de maintenir le secret et la confidentialité des données sont requis pour garantir la sécurité adéquate de cartes à puce. En fait, ces cartes sont confrontées à différents types de tentatives frauduleuses externes d'accéder aux données qui y sont stockées.
La cryptographie, l'art et la science de maintenir des données secrètes, est devenue l'un des principaux outils pour maintenir le secret, la confiance, le contrôle d'accès et la sécurité des entreprises, entre autres choses. La transformation cryptographique de données confidentielles est habituellement appelée chiffrement. Cette transformation comprend le codage des données contenues dans la carte de telle façon que leur signification claire est cachée pour les personnes extérieures. D'autre part, le processus consistant à récupérer les données claires à partir du texte chiffré (les données cryptées) est habituellement appelé déchiffrement.
Comme indiqué précédemment, les systèmes cryptographiques, c'est-à-dire les systèmes utilisant la technologie cryptographique, sont exposés à différents types de tentatives extérieures visant à accéder aux données cryptées qui y sont contenues . Les tentatives frauduleuses d'accès externes, généralement désignées sous le terme d'attaques, forment la
cryptoanalyse, qui est l'art de déchiffrer des données cryptées, c'est-à-dire le décryptage des données sans connaître les clés appropriées.
Il existe de nombreuses techniques cryptoanalytiques connues ou attaques qui peuvent être lancées contre des algorithmes cryptographiques. Au cours de ces dernières années, de nouveaux types d'attaque ont eu lieu pour casser la mise en œuvre de dispositifs cryptographiques au niveau matériel plutôt qu'au niveau des algorithmes. Les "attaques par induction de défaut" et les "attaques par voie latérale" constituent des exemples de telles attaques portant sur le matériel .
Une attaque par induction de défaut suppose que, en exposant un dispositif électronique scellé, par exemple une carte à puce, à certains effets physiques
(par ex. ionisation ou rayonnement hyperfréquence) , on peut, avec une probabilité raisonnable, induire un défaut à un emplacement de bit aléatoire, par exemple dans la RAM 14 ou dans un des registres 13 à l'un certain étage intermédiaire aléatoire dans l'algorithme cryptographique .
Ce qu'on appelle les "attaques par voie latérale" comprennent par exemple "l'analyse de puissance" et "l'analyse radiofréquence (RF) " .
L'analyse de puissance est basée sur la mesure de la consommation de puissance pendant le traitement d'informations confidentielles codées en binaire dans une carte à puce. L'analyse RF consiste à intercepter et analyser la fréquence radio émise pendant le
transfert de données confidentielles. Ces deux types d'attaques utilisent soit la variation de la consommation d'énergie soit la variation de rayonnements RF émis pendant le traitement des données confidentielles. La connaissance d'une de ces variations permet mathématiquement de récupérer les données confidentielles.
Par conséquent, des moyens de vérification de l'intégrité et de maintien de la confidentialité des données sont requis et sont importants pour garantir une sécurité adéquate des cartes à puce.
La figure 2, qui est également intitulée "technique antérieure", illustre la forme classique de données numériques qui sont traitées par des dispositifs électroniques tels que des cartes à puce.
Les données numériques 22 comprennent des données confidentielles 24 et une somme de contrôle 26. Les données confidentielles 24 comprennent des informations devant être traitées par la CPU 12, telles qu'une clé secrète, un code secret, etc. Ces informations sont naturellement sous forme numérique et ont une longueur variable en octets. La somme de contrôle 26 est une valeur de contrôle qui est calculée quand les données confidentielles 24 sont enregistrées et qui sont placées en annexe aux données confidentielles 24 pour vérifier leur intégrité.
Il convient de noter que l'expression "octet" n'a pas pour objet de viser ici uniquement les mots ayant une longueur de 8 bits mais ont pour but d' inclure des mots ayant n'importe quelle longueur en bits.
La figure 3, également intitulée "technique antérieure", illustre un procédé classique 30 destiné à vérifier que les données confidentielles 24 devant être traitées dans la carte à puce 10 ne sont pas corrompues .
Classiquement, les données numériques devant être traitées dans une carte à puce sont initialement stockées dans 1 ' EEPROM 18 avant d'être transférées vers la mémoire volatile 14 pour un traitement par la CPU 12.
À l'étape 32, une somme de contrôle est calculée par la CPU 12 à l'aide d'une fonction de somme de contrôle prédéterminée stockée à l'intérieur de la carte à puce 10 et des données confidentielles 24. À l'étape 34, la somme de contrôle calculée est comparée à la somme de contrôle 26 stockée dans l'EEPROM 18.
Si les deux valeurs ne sont pas identiques, une erreur par défaut est détectée et le traitement des données confidentielles 24 est arrêté (étape 36) .
Si les deux valeurs sont identiques, les données confidentielles 24 sont transférées à la RAM (étape 38) en vue de leur accès et de leur traitement par la CPU 12 (étape 40) . Un important inconvénient de ce procédé de vérification 30 est qu'il ne permet pas la détection d'un défaut qui pourrait être survenu pendant le transfert depuis l'EEPROM 18 vers la RAM 14.
Le procédé classique de vérification de l'intégrité de données confidentielles devant être
traitées dans une carte à puce n'est pas suffisamment sûr pour respecter les exigences de protection attendues de la part d'une carte à puce.
Un procédé de vérification de l'intégrité de données numériques transférées vers un emplacement de mémoire pour être traitées est donc souhaitable. Résumé de l'invention
Plus précisément, selon la présente invention, il est proposé un procédé de vérification de l'intégrité de données confidentielles pendant leur traitement, une somme de contrôle étant annexée aux données confidentielles, le procédé comprenant : la fourniture d'une fonction de somme de contrôle prédéterminée ; l'initialisation d'une valeur d'intégrité ; la division des données confidentielles en un ensemble d'octets ; le traitement d'un premier octet de l'ensemble ; le calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, du premier octet et de la valeur d'intégrité initiale ; pour chaque autre octet de l'ensemble : traitement de l'autre octet ; et calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, de l'autre octet et de la valeur d'intégrité calculée à l'aide de l'octet précédent; comparaison de la nouvelle valeur d'intégrité calculée en dernier avec la valeur de la somme de contrôle ; et
détection d'un défaut quand la nouvelle valeur d'intégrité calculée en dernier est différente de la valeur de la somme de contrôle.
Selon un autre aspect de la présente invention, il est proposé un procédé de vérification de l'intégrité de données confidentielles pendant leur transfert depuis une première mémoire vers une deuxième mémoire, une valeur de la somme de contrôle étant annexée aux données confidentielles, le procédé comprenant la fourniture d'une fonction de somme de contrôle prédéterminée ; l'initialisation d'une valeur d'intégrité ; la division des données confidentielles en un ensemble d'octets ; le transfert d'un premier octet de l'ensemble depuis la première mémoire vers la deuxième mémoire ; le calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, du premier octet et de la valeur d'intégrité initiale ; pour chaque autre octet de l'ensemble : le transfert de l'autre octet depuis la première mémoire vers la deuxième mémoire ; et le calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, de l'autre octet et de la valeur d'intégrité calculée à l'aide de l'octet précédent ; comparaison de la nouvelle valeur d' intégrité calculée en dernier avec la valeur de la somme de contrôle ; et
la détection d'un défaut quand la nouvelle valeur d'intégrité calculée en dernier est différente de la valeur de la somme de contrôle.
Selon encore un autre aspect de la présente invention, il est proposé un procédé de vérification de l'intégrité d'un code secret pendant sa comparaison avec un code de validation, une valeur de la somme de contrôle étant annexée au code secret, le procédé comprenant : la fourniture d'un code secret dans le dispositif électronique ; la fourniture d'un code de validation ; la fourniture d'une fonction de somme de contrôle prédéterminée ; l'initialisation d'une valeur d'intégrité ; la division du code de validation en un premier ensemble d'octets ; la division du code secret en un deuxième ensemble d'octets ; la comparaison d'un premier octet du premier ensemble avec un premier octet du deuxième ensemble ; la détection d'un code de validation erroné et l'arrêt de la vérification quand les premiers octets comparés sont différents ; le calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, du premier octet du deuxième ensemble et de la valeur d' intégrité ; pour chaque autre octet du premier ensemble et autre octet correspondant du deuxième ensemble :
la comparaison de l'autre octet du premier ensemble avec l'autre octet correspondant du deuxième ensemble ; la détection d'un code de validation erroné et l'arrêt de la vérification si les autres octets sont différents ; le calcul d'une nouvelle valeur d'intégrité à l'aide de la fonction de somme de contrôle, de l'autre octet du deuxième ensemble et de la valeur d'intégrité calculée à l'aide de l'octet précédent du deuxième ensemble ; la comparaison de la nouvelle valeur d' intégrité calculée en dernier avec la valeur de la somme de contrôle ; et la détection d'un défaut quand la nouvelle valeur d'intégrité calculée en dernier est différente de la valeur de la somme de contrôle.
Selon un aspect final de la présente invention, il est également proposé un dispositif électronique pour traiter des données confidentielles reçues depuis un dispositif entrée/sortie, une valeur de la somme de contrôle étant annexée aux données confidentielles, le dispositif comprenant : une première mémoire pour recevoir les données confidentielles et la valeur de la somme de contrôle depuis le dispositif entrée/sortie ; un port entrée/sortie pour transférer les données depuis le dispositif entrée/sortie vers la première mémoire ;
une deuxième mémoire pour stocker les données confidentielles pendant le traitement ; et une CPU pour traiter simultanément les données confidentielles et vérifier leur intégrité ; la CPU ayant une fonction de somme de contrôle qui y est programmée ; la CPU étant configurée pour diviser les données confidentielles en un ensemble d'octets, pour calculer par itération une valeur d'intégrité à l'aide de la fonction de somme de contrôle et de l'ensemble d'octets et pour comparer la valeur d'intégrité à la valeur de la somme de contrôle.
D'autres objets, avantages et caractéristiques de la présente invention deviendront plus apparents à la lecture de la description suivante, non restrictive, de ses modes de réalisation préférés, donnée en guise d'exemple uniquement, en référence aux dessins d' accompagnement .
Brève description des dessins
Sur les dessins en annexe : la figure 1, qui est intitulée "technique antérieure", est un schéma fonctionnel des principaux éléments d'un dispositif électronique ; la figure 2, qui est intitulée "technique antérieure", est un schéma fonctionnel illustrant la structure classique de données numériques devant être traitées par le dispositif électronique de la figure 1 ; la figure 3, qui est intitulée "technique antérieure", est un ordinogramme d'un procédé classique de vérification de l'intégrité des données numériques devant être traitées par le dispositif électronique de la figure 1 ; la figure 4 est un ordinogramme d'un procédé de vérification de l'intégrité des données numériques devant être traitées dans le dispositif électronique de la figure 1, selon un premier mode de réalisation de la présente invention ; et la figure 5 est un ordinogramme d'un procédé de vérification de l'intégrité des données numériques devant être traitées dans le dispositif électronique de la figure 1, selon un deuxième mode de réalisation de la présente invention.
Description du mode de réalisation préféré
En référence maintenant à la figure 4 des dessins en annexe, un procédé 100 pour vérifier l'intégrité de données numériques devant être traitées dans une carte
à puce, selon un premier mode de réalisation de la présente invention, va être décrite.
D'une façon générale, le procédé 100 permet la vérification de l'intégrité des données numériques pendant qu'elles sont transférées depuis une première mémoire vers une deuxième mémoire. Dans le cas d'une carte à puce 10, la première mémoire est l'EEPROM, où sont stockées les données numériques 22 après avoir été transférées depuis un autre dispositif électronique (non représenté), et la deuxième mémoire est la RAM 14, la CPU 12 étant destinée à accéder aux données confidentielles 24. Dans une autre solution, la première mémoire peut se présenter sous la forme d'une mémoire flash ou d'une autre mémoire non volatile. La première étape 102 consiste à diviser les données confidentielles (CD) 24 qui sont stockées dans l'EEPROM 18 en un ensemble d'octets.
À l'étape 104, une valeur d'intégrité et une position d'octet sont initialisées . Selon ce mode de réalisation préféré, l'initialisation consiste de façon avantageuse à régler la valeur d' intégrité et la position d'octet sur zéro. La valeur d'intégrité rCHK est la somme de contrôle qui sera calculée à l'aide d'une fonction de somme de contrôle prédéterminée G qui est programmée dans la carte à puce 10, qui sera utilisée par la CPU 12 pour vérifier l'intégrité des données confidentielles 24.
La fonction de somme de contrôle G est naturellement prédéterminée. En fait, cette fonction est stockée et programmée dans la carte à puce 10 avant
de traiter toute donnée qui y est contenue. Comme cela est connu de façon classique, cette procédure n'est effectuée qu'une fois, au moment où la carte à puce est initialisée. Toute donnée numérique 22 devant être traitée comprend une somme de contrôle 26 qui est calculée à l'aide des données confidentielles 24 et de la fonction de somme de contrôle G.
La fonction de somme de contrôle G peut prendre n'importe quelle forme, depuis une simple somme de chaque octet formant les données confidentielles 24 ou bien un OU logique jusqu'à des fonctions mathématiques plus complexes effectuées sur les données confidentielles 24.
À l'étape 106, le premier octet des données confidentielles 24 est transféré depuis l'EEPROM 18 vers la RAM 14.
À l'étape 108, une nouvelle valeur d'intégrité rCHK est ensuite calculée à l'aide de la fonction de somme de contrôle G, de la valeur du premier octet CD[0] et de la valeur d'intégrité initiale rCHKprevious •
Par conséquent, rCHK=G (CD [i] , rCHKpreviouS) , où i est la position de l'octet qui est traité à ce moment -là, qui va depuis 0 à la longueur des données confidentielles moins 1.
La position d'octet des données confidentielles
24 est incrémentêe (étape 110). À l'étape 112, la vérification est effectuée pour déterminer si l'octet qui vient d'être traité est le dernier octet des données confidentielles 24. Si ce n'est pas le cas, les
étapes 106 à 112 sont répétées pour chaque octet restant CD[i] des données confidentielles 24.
Pour chacun des autres octets, une nouvelle valeur d'intégrité rCHK est calculée à l'aide de l'octet actuel CD [il et de la valeur d'intégrité précédente rCHKprevious, calculée lors de l'itération précédente .
À l'étape 114, la nouvelle valeur d'intégrité calculée en dernier et la valeur de la somme de contrôle stockée dans l'EEPROM 18 sont comparées. Si les deux valeurs sont identiques, l'intégrité des données confidentielles 24 dans la RAM 14 est supposée et les données confidentielles peuvent être traitées par la CPU 12 (étape 116). Si la valeur d'intégrité rCHK et la somme de contrôle sont différentes, une erreur par défaut est détectée (étape 118) .
Le procédé 100 est avantageux dans la mesure où la vérification de l'intégrité est effectuée pendant que les données confidentielles 24 sont transférées dans la RAM 14, ce qui garantit que les données traitées dans la RAM 14 par la CPU 12 sont les mêmes que celles initialement transférées dans le dispositif électronique 10.
Etant donné que l'intégrité des données confidentielles 24 est vérifiée octet par octet pendant leur transfert vers la RAM 14, la CPU 12 peut, alternativement, commencer le traitement des octets des données confidentielles 24 qui sont déjà dans la RAM, même si la vérification de l'intégrité des octets non transférés est en cours d'exécution.
Bien que le procédé 100 ait été décrit en référence au transfert de données confidentielles depuis l'EEPROM d'une carte à puce vers sa RAM, il peut être utilisé pour vérifier l'intégrité de données confidentielles transférées depuis n'importe quelle première mémoire vers n' importe quelle deuxième mémoire. Par exemple, chacun des deux emplacements de mémoire peut faire partie d'un dispositif électronique différent . En considérant maintenant la figure 5, un procédé
200, selon un deuxième mode de réalisation de la présente invention, va être décrit.
D'une façon générale, le procédé 200 permet la validation et la vérification de l'intégrité d'un code secret requis, par exemple, pour accéder à un dispositif électronique.
Un exemple d'un tel code secret est un numéro d'identification personnel (PIN), connu d'un ou de plusieurs utilisateurs restreints, et qui donne accès à une carte à puce. Comme cela est connu communément, le PIN doit être entré et mis en mémoire par l'utilisateur dans la carte à puce au cours d'un processus de validation initial. La carte à puce est programmée pour requérir un tel code avant de traiter toute information.
Le procédé de la figure 5 permet la vérification simultanée de l'intégrité du code secret et sa comparaison avec un code rival fourni par l'utilisateur (et qui est désigné plus bas par les termes de code de validation) .
La première étape 202 consiste à diviser en un ensemble d'octets le code secret qui a été mis en mémoire dans l'EEPROM 18 et le code de validation entré . À l'étape 204, une valeur d'intégrité rCHK et une position d'octet i sont initialisées . Par exemple, l'initialisation de la valeur d'intégrité rCHK consiste à régler cette valeur d' intégrité sur 0.
À l'étape 206, le premier octet rVC [i] du code de validation est comparé au premier octet SC[i] du code secret. Si les deux valeurs sont différentes, le code de vérification est erroné et la vérification cesse
(étape 208) .
Si les deux valeurs sont identiques, une nouvelle valeur d'intégrité rCHK est calculée (étape 210) à l'aide de la fonction de somme de contrôle G (telle qu'elle a été décrite plus haut), de la valeur du premier octet SC[i] et de la valeur d'intégrité initiale rCHKprevious • Par conséquent, rCHK=G(SC[i] , rCHKpreVιous) , où i est la position de l'octet qui est en cours de traitement, qui va depuis 0 à la longueur des données confidentielles moins 1.
À l'étape 212, la position d'octet est incrémentée. L'étape 214 effectue une vérification pour déterminer si l'octet qui vient d'être traité est le dernier octet du code de validation. Si ce n'est pas le cas, les étapes 206 à 214 sont répétées pour chaque octet restant i .
Pour chacun des autres octets, la nouvelle valeur d'intégrité rCHK est calculée à l'aide de l'octet actuel SC[i] et de la valeur d'intégrité précédente rCHKprevious calculée lors de l'itération précédente à l'aide de l'octet précédent (SC[i-l]).
La nouvelle valeur d'intégrité rCHK et la valeur de la somme de contrôle stockée dans l'EEPROM 18 sont ensuite comparées (étape 216) . Si les deux valeurs sont identiques, l'intégrité du code secret est supposée. Si la valeur d' intégrité rCHK et la somme de contrôle sont différentes, un défaut est détecté (étape 218) .
Le procédé 200 permet simultanément la vérification de l'intégrité et la validation du code secret . Le procédé 200 est avantageux étant donné que le processus de vérification est arrêté à chaque fois qu'une différence est détectée entre un octet provenant du code de validation et l'octet correspondant provenant du code secret, tel qu'il est écrit dans la carte à puce, grâce à quoi aucun calcul superflu n'est effectué par la CPU 12.
Comme cela paraîtra évident au spécialiste, la nature du dispositif électronique ne se limite pas aux cartes à puce comme décrit plus haut. En fait, le procédé de la présente invention pourrait être avantageux dans d'autres types de dispositifs électroniques tels que par exemple les assistants numériques personnels (PDA) et les téléphones cellulaires .
En outre, un procédé selon la présente invention permet de vérifier l'intégrité de données confidentielles pendant que ces données sont soumises à une variété de processus et il ne se limite pas à la vérification d'un code secret et au transfert de données depuis des emplacements de mémoire.
Bien que la présente invention ait été décrite ci-dessus en guise de ses modes de réalisation préférés, elle peut être modifiée sans quitter l'esprit et la nature de l'invention en question, telle qu'elle est définie dans les revendications jointes.