DISPOSITIF DE PROTECTION D'UNE MEMOIRE CONTRE LES ATTAQUES PAR INJECTION D'ERREUR
La présente invention concerne la protection des circuits intégrés contre les attaques par injection d'erreur, et notamment la protection des circuits intégrés présents dans les cartes à puce. La présente invention concerne plus particulièrement un procédé pour sécuriser la lecture d'une mémoire.
Elle s'applique notamment, mais non exclusivement aux mémoires non volatiles telles que les mémoires ROM, EEPROM et FLASH.
Ces dernières années, les techniques de piratage des circuits intégrés sécurisés à microprocesseur
(microprocesseurs, microcontrôleurs, mémoires à microprocesseur, circuits intégrés à coprocesseurs...) ont considérablement évolué. A l'heure actuelle, les méthodes de piratage les plus avancées consistent à injecter des erreurs en des points déterminés d'un circuit intégré lors de l'exécution d'opérations dites sensibles, par exemple des opérations d' authentification ou des opérations d'exécution d'un algorithme de cryptographie. De telles attaques par injection d'erreur, appelées également attaques par injection de faute, permettent, en combinaison avec des modèles mathématiques, de déduire la structure d'un algorithme de cryptographie à logique câblée et/ou les clefs secrètes qu'il utilise. L'injection d'erreur peut être faite de diverses manières, en introduisant des perturbations ("glitches") dans la tension d'alimentation du circuit intégré, en introduisant des perturbations dans le signal d'horloge du circuit intégré, en exposant le circuit intégré à des radiations ou un faisceau laser, etc.
II est connu de procéder à des vérifications d'intégrité du contenu de la mémoire, par exemple au démarrage du circuit intégré ou durant le fonctionnement de celui-ci. Toutefois, ces vérifications ne permettent pas de détecter des attaques qui ne modifient pas le contenu de la mémoire, mais qui visent à modifier les données au moment où elles sont lues dans la mémoire, c'est-à-dire sur le chemin de lecture de la mémoire.
La présente invention a pour but de protéger une mémoire contre des attaques visant à modifier une donnée durant le cycle de lecture. Cet objectif est atteint en prévoyant à chaque lecture de la mémoire une seconde lecture d'une donnée de référence dont l'intégrité est vérifiée . Plus particulièrement, l'invention prévoit un procédé pour détecter une erreur de lecture lors de la lecture d'une donnée dans une mémoire. Selon l'invention une phase de lecture d'une donnée dans la mémoire comprend des étapes consistant à : — lire la donnée dans la mémoire,
— lire une donnée de référence stockée dans la mémoire,
— comparer la donnée de référence lue avec une valeur attendue, et
— signaler une erreur de lecture si la donnée de référence lue est différente de la valeur attendue.
Selon un mode de réalisation de l'invention, la lecture de la donnée de référence est effectuée immédiatement après la lecture de la donnée à lire dans la mémoire. Selon un mode de réalisation de l'invention, la lecture de la donnée de référence est effectuée au cours d' un cycle d' horloge suivant la lecture de la donnée à lire dans la mémoire.
Selon un mode de réalisation de l'invention, la lecture de la donnée de référence est effectuée au cours
d'un même cycle d'horloge que la lecture de la donnée à lire dans la mémoire.
Selon un mode de réalisation de l'invention, la mémoire comprend des cellules mémoire connectées à des lignes de mot agencées en lignes, et à des lignes de bit agencées en colonnes de bits, les lignes de mot étant connectées à un décodeur de ligne, les lignes de bit étant reliées à des amplificateurs de lecture, la phase de lecture d'une donnée dans la mémoire comprenant des étapes consistant à :
- sélectionner une ligne de mot correspondant à une adresse reçue de la donnée à lire,
- lire des cellules mémoires de la ligne de mot sélectionnée, — appliquer le contenu des cellules mémoire lues sur un bus de données de sortie de la mémoire,
- sélectionner une ligne de mot correspondant à l'adresse de la donnée de référence,
- lire des cellules mémoire de la ligne de mot sélectionnée pour lire la donnée de référence,
- comparer le contenu des cellules mémoire lues à des valeurs attendues respectives, et
- placer la mémoire dans un mode d' erreur si la donnée lue est différente de la valeur attendue. Selon un mode de réalisation de l'invention, la mémoire émet un signal d'erreur en mode d'erreur.
L' invention concerne également une mémoire sécurisée en lecture. Selon l'invention, la mémoire comprend : — des moyens pour lire dans la mémoire une donnée et une donnée de référence, en réponse à une commande de lecture de la donnée dans la mémoire,
- des moyens pour comparer la donnée de référence lue avec une valeur attendue, et
- des moyens pour générer un signal d'erreur si la donnée de référence lue est différente de la valeur attendue.
Selon un mode de réalisation de l'invention, la lecture de la donnée et de la donnée de référence est effectuée durant un même cycle d'horloge.
Selon un mode de réalisation de l'invention, la lecture de la donnée et de la donnée de référence est effectuée durant deux cycles d'horloge successifs.
Selon un mode de réalisation de l'invention, la mémoire comprend :
- des cellules mémoire connectées à des lignes de mot agencées en lignes et à des lignes de bit agencées en colonnes de bits,
- un décodeur de ligne connecté aux lignes de mot pour sélectionner une ligne de mot correspondant à une adresse reçue de la donnée à lire,
- des moyens pour sélectionner durant une phase de lecture d'un mot dans la mémoire, une ligne de mot à laquelle sont connectées des cellules mémoire contenant la donnée de référence, et pour déclencher la lecture des cellules mémoire sélectionnées, et
- des moyens pour comparer le contenu des cellules mémoire lues à des valeurs attendues respectives, le signal d'erreur étant émis sur une sortie de signal d'erreur si le contenu d'une cellule mémoire de la ligne de mot de référence est différente d'une valeur attendue respective.
Selon un mode de réalisation de l'invention, les cellules mémoires sont disposées dans un plan mémoire, la ligne de mot de référence étant située sur un bord du plan mémoire à l'opposé de liaisons des lignes de bit avec des amplificateurs de lecture.
Selon un mode de réalisation de l'invention, un décodeur de colonne pour sélectionner un groupe de lignes de bit formant un mot correspondant à l'adresse reçue de
la donnée à lire, les cellules mémoire de la ligne de mot dans laquelle la donnée de référence est stockée, mémorisant la donnée de référence dans chaque groupe de ligne de bit. Ces objets, caractéristiques et avantages ainsi que d'autres de la présente invention seront exposés plus en détail dans la description suivante de l'invention faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : - la figure 1 représente schématiquement l'architecture d'une mémoire selon la présente invention ; la figure 2 représente un circuit de la mémoire représentée sur la figure 1 ;
- la figure 3 est un organigramme illustrant le procédé selon l'invention ;
- la figure 4A est un chronogramme illustrant un cycle de lecture d'une mémoire classique ;
- la figure 4B est un chronogramme illustrant un cycle de lecture de la mémoire selon l'invention. La figure 1 représente une mémoire 1 comprenant un plan mémoire MA, un décodeur de ligne de mot RDEC, un décodeur de colonne CDEC, et un circuit de contrôle CTL. Le plan mémoire MA comprend des cellules mémoire MC(i,j,k) connectées à des lignes de mot WL (i) disposées en rangées, et à des lignes de bit BL(j,k) disposées en colonnes. Les lignes de mot WL (i) sont contrôlées par le décodeur de ligne RDEC. Chaque ligne de bit BL(J, k) est reliée à un amplificateur de lecture SA(J ) (j étant un nombre entier compris entre 0 et m-1) par l'intermédiaire d'un transistor de sélection TS (k) de colonne de mot de rang k, et d'un bus de multiplexage MB.
Les transistors de sélection TS (k) sont pilotés par un signal SEL(k) émis par le décodeur de colonne CDEC. Les amplificateurs de lecture SA(j) qui sont connectés en entrée au bus de multiplexage MB et en sortie à un bus DB
de sortie de la mémoire, permettent de lire m bits d'un mot sélectionné dans une ligne de mot WL (i), et d' appliquer les valeurs de ces bits sur une ligne respective du bus DB. Le circuit de contrôle CTL reçoit en entrée une adresse AD de lecture, ainsi que des signaux d'horloge CLK et de sélection de circuit CS (Chip Select) permettant d'activer la mémoire, et délivre en sortie un signal RD de déclenchement des amplificateurs de lecture, et des adresses ADH et ADL qui sont appliquées respectivement au décodeur de ligne RDEC et au décodeur de colonne CDEC. Typiquement, l'adresse ADH appliquée au décodeur de ligne regroupe les bits de poids fort de l'adresse AD appliquée en entrée de la mémoire, et l'adresse ADL appliquée au décodeur de colonne les bits de poids faible. A partir des adresses ADH et ADL, les décodeurs de ligne et de colonne sélectionnent une ligne de mot de rang i et une colonne de mot de rang k regroupant plusieurs lignes de bits BL(J7Ic). Le circuit de contrôle délivre en sortie de la mémoire un signal RB (Ready / Busy) permettant d'indiquer aux circuits extérieurs, si la mémoire est occupée ou prête à recevoir un nouvel ordre de lecture.
Selon l'invention, un groupe de cellules mémoire MC(ref,j,k) connectées à une ligne de mot WL(ref) du plan mémoire MA est réservée au stockage d'un mot de référence qui est lu à chaque phase de lecture d'un mot dans la mémoire. Le circuit de contrôle CTL est conçu pour récupérer le mot de référence lu et pour le comparer à une valeur attendue mémorisée par le circuit de contrôle. Si le mot de référence lu n'a pas la valeur attendue, le circuit de contrôle place la mémoire en mode d'erreur, par exemple en émettant un signal d' erreur sur une sortie ER de la mémoire prévue à cet effet.
La figure 2 représente un exemple de réalisation d'un circuit de comparaison permettant d'effectuer une comparaison bit à bit entre le mot de référence lu, figurant sur le bus de donnée DB, et une valeur de référence par exemple mémorisée dans un registre REG interne au circuit de contrôle CTL. Le circuit de comparaison est conçu pour produire sur une sortie ER un signal à 1 si une différence sur au moins un bit est détectée entre le mot de référence lu et la valeur attendue de ce mot de référence. A cet effet, le circuit de comparaison comprend un ensemble de portes OU Exclusif XG(j) (j étant un nombre entier compris entre 0 et m-1) . Chaque porte XG(j) comprend une première entrée connectée à une cellule respective du registre REG et une seconde entrée connectée à une ligne respective correspondante du bus DB. La sortie de chacune des portes XG(j) est connectée à une entrée respective d'une porte OU OG dont la sortie est connectée à la sortie ER du circuit de comparaison. Si tous les bits du registre contenant la valeur de référence sont identiques aux bits respectifs du mot de référence lu dans la ligne de mot WL(ref) figurant sur le bus DB, les sorties des portes XG(J ) sont à 0. La sortie ER de la porte OU OG est également à 0. Par contre, si au moins l'un des bits du registre REG est différent du bit lu sur la ligne correspondante du bus de donnée DB, la porte XG(j) correspondante délivre un signal à 1, et la sortie ER de la porte OU OG passe à 1.
De préférence, la ligne de mot WL(ref) choisie pour mémoriser le mot de référence est située dans le plan mémoire MA à l'opposé du point de connexion des amplificateurs de lecture SA(j) aux lignes de bit BL(j,k). De cette manière, quelle que soit la zone du chemin de lecture où est appliquée la perturbation, la donnée de référence lue subira également la perturbation et sera donc différente de la valeur attendue.
La figure 3 illustre le procédé selon l'invention mis en œuvre dans le circuit de contrôle CTL. Le procédé est activé lorsque le signal CS appliqué à la mémoire passe à 1 (étape 11) . La levée de ce signal déclenche une phase de lecture d'une donnée dans la mémoire à l'adresse fournie sur le bus AD d'entrée d'adresse de la mémoire
(étape 12) . Simultanément, le circuit de contrôle place la mémoire à l'état occupé en levant le signal RB (étape
13) . A l'étape 14 suivante, le circuit de contrôle envoie les adresses ADH et ADL correspondant à l'adresse reçue sur le bus d' adresse AD aux décodeurs de ligne RDEC et de colonne CDEC, ce qui a pour effet de sélectionner les cellules mémoire MC(i,j,k) appartenant à une ligne de mot WL (i) et au groupe de ligne de bit BL(j,k) d'une colonne de mot de rang k.
A l'étape suivante 15, le circuit de contrôle lève un signal RD de déclenchement de la lecture qui est appliqué aux amplificateurs de lecture SA(j) . Le mot lu est alors appliqué sur le bus de donnée DB par les amplificateurs de lecture SA(j). A la suite de la lecture d'un mot dans la mémoire, le circuit de contrôle envoie au décodeur de ligne RDEC, l'adresse du mot de référence stocké par la mémoire (étape 16) . La colonne de mot de rang k sélectionnée pour accéder au mot de référence est de préférence celle qui a été sélectionnée à l'étape 14 pour pouvoir détecter une perturbation quelle que soit la ligne de bit BL(j,k) du chemin de lecture de la donnée, où elle a été appliquée. Dans ce cas, tous les mots stockés dans les cellules mémoire de la ligne de mot de référence WL(ref) sont identiques et présentent la valeur stockée dans le registre REG.
A l'étape 17 suivante, le signal RD de déclenchement de lecture est à nouveau levé. Les
amplificateurs de lecture appliquent alors la donnée de référence lue sur le bus de donnée. A l'étape 18 suivante, le circuit de contrôle compare le mot de référence lu avec la valeur de référence mémorisée dans le registre REG, et si une différence est détectée, le circuit de contrôle CTL met à 1 le signal appliqué sur la sortie ER de signal d'erreur.
La figure 4A illustre sous la forme de chronogrammes une séquence classique de lecture d'un mot situé sur la ligne de mot WL (i) et dans la colonne de mot de rang k de la mémoire. Cette figure montre le signal d'horloge CLK, le signal CS d' activation de la mémoire, les signaux d'adresse AD, le signal WL (i) de sélection de ligne de mot, le signal SEL(k) de sélection de la colonne de mot de rang k, le signal Data de la donnée lue en sortie des amplificateurs de lecture SA(J ), et le signal de donnée sur le bus DB.
Pendant un cycle d'horloge CLK, le signal CS d' activation de la mémoire est à 1, tandis que l'adresse de lecture est présente sur le bus AD. L'adresse de lecture est traitée par les décodeurs de ligne RDEC et de colonne CDEC pour déterminer quels sont les signaux WL (i) et SEL(k) de sélection de la ligne et de la colonne de mot à passer à 1 durant le même cycle d'horloge. Dès que les signaux WL (i) et SEL(k) passent à 1, les cellules mémoire correspondantes sont lues par les amplificateurs de lecture SA(j). Au cycle d'horloge suivant, la donnée lue Data(i,k) est transmise au bus de donnée DB. Si une perturbation P est appliquée au chemin de lecture, c'est- à-dire aux lignes de bit BL(j,k) ou aux amplificateurs de lecture, la donnée Data(i,k) transmise au bus de données DB est erronée.
Pour détecter une telle perturbation, les signaux CS de sélection de la mémoire et SEL(k) de sélection d'une colonne de mot de rang k sont maintenus à 1 durant
deux cycles d'horloge, comme illustré sur la figure 4B. Comme dans la procédure de lecture classique (figure 4A) , le signal WL (i) de sélection de la ligne de mot à lire est positionné à 1 pendant le premier cycle d'horloge. Durant le second cycle d'horloge, le signal WL(ref) de lecture de la ligne de mot de référence est placé à 1, pour lire le mot de référence Data(ref,k) stocké dans les cellules mémoire de la ligne WL(ref) et de la colonne de mot de rang k (signal SEL(k) à 1) . Il en résulte qu'en sortie des amplificateurs de lecture SA(J ), la donnée Data (i,. k) apparaît à la fin du premier cycle d'horloge, et la donnée de référence Data(ref,k) lue dans la ligne de mot de référence apparaît à la fin du second cycle d'horloge. Si la valeur lue de la donnée de référence est différente de la valeur attendue, le signal d'erreur appliqué sur la sortie ER passe à 1.
Avantageusement, le circuit de contrôle CTL effectue la lecture de la donnée à lire et la lecture de la donnée de référence en un seul cycle du signal d'horloge CLK appliqué à la mémoire 1. A cet effet, le circuit de contrôle génère à partir du signal d'horloge CLK un signal d'horloge interne de séquencement des opérations de lecture dont la fréquence est égale au double de celle du signal d'horloge CLK. II apparaîtra clairement à l'homme de l'art que le procédé selon l'invention est susceptible de diverses variantes, notamment en ce qui concerne le traitement du signal d'erreur. Notamment, il n'est pas nécessaire que l'erreur soit signalée au milieu extérieur à la mémoire. Toute mesure appropriée peut ainsi être prise, comme l'effacement de données sensibles dans la mémoire. Si l'erreur est signalée au milieu extérieur, toute mesure appropriée peut être prise, comme l'initialisation de l'unité de traitement qui accède à la mémoire, ou la mise
hors service définitive du circuit intégré incorporant la mémoire selon l'invention.
Par ailleurs, la lecture de la donnée de référence peut également être effectuée avant la lecture de la donnée correspondant à l'adresse appliquée sur le bus d'adresse de la mémoire.
En outre, l'invention est applicable à tout type de mémoire dans laquelle les cellules mémoire sont rangées en lignes et en colonnes, et dans laquelle une lecture est effectuée en sélectionnant une ligne et en lisant une ou simultanément plusieurs cellules mémoire de la ligne sélectionnée. Bien entendu, les notions de ligne et de colonne peuvent être inversées.