FR 2910145 A1 20080620 FR 0610990 A 20061218 1 PROCEDE ET DISPOSITIF POUR SECURISER LA LECTURE D'UNE MEMOIRE 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. La figure 1 illustre un exemple d'application de l'invention à un circuit intégré IC pour carte à puce ou étiquette électronique. Le circuit intégré IC comprend une unité centrale UC de microprocesseur, une ou plusieurs mémoires non volatiles MEM1 (ROM, EEPROM, FLASH...), une mémoire volatile MEM2 (RAM), un circuit de cryptographie CRYCT permettant au circuit intégré de s'authentifier au cours d'une transaction, et un circuit d'interface INTCT lui permettant de communiquer avec des lecteurs de carte à puce ou d'étiquette électronique externes (EXT). L'unité centrale UC, les mémoires MEM1, MEM2 et le circuit CRYCT sont reliés entre eux par un bus de données DTB et un bus d'adresse ADB. Le circuit d'interface INTCT peut être du type à contact et comprendre par exemple des contacts ISO 7816 (contacts d'horloge, de données, d'alimentation, de masse...). Le circuit d'interface INTCT peut aussi être du type sans contact RFID (Radio Frequency Identification) et comprendre une bobine d'antenne RF ou un circuit d'antenne UHF, des circuits de modulation et démodulation de données sortantes et entrantes, un circuit extracteur d'horloge, etc. Les circuits logiques présents dans les circuits intégrés sécurisés, comme les circuits intégrés pour carte à puce, font l'objet de diverses attaques de la 2910145 2 part de fraudeurs qui cherchent à découvrir leur structure et/ou les secrets qu'ils comprennent. Il s'agit par exemple de circuits de cryptographie de type DES, AES, RSA..., de microprocesseurs programmés pour exécuter 5 des algorithmes de cryptographie, de banques de registres contenant des clefs secrètes, etc. A l'heure actuelle, les méthodes de piratage les plus avancées consistent à injecter des erreurs dans un circuit intégré lors de l'exécution d'opérations dites 10 sensibles, par exemple des opérations d'authentification ou des opérations d'exécution d'un algorithme de cryptographie. De telles attaques, appelées attaques par injection d'erreur ou injection de faute, peuvent intervenir 15 pendant des phases de calculs dits sensibles, par exemple pendant des phases de calcul d'un code d'identification ou pendant la lecture d'une clef de cryptographie dans une mémoire. Elles permettent, en combinaison avec des modèles mathématiques et à partir de résultats faux 20 obtenus intentionnellement grâce à des perturbations, de définir un élément secret comme une clef de cryptage ou un mot de passe, de déduire la structure d'un algorithme de cryptographie et/ou les clefs secrètes que l'algorithme utilise, etc. 25 En particulier, les attaques localisées consistent à introduire des perturbations (glitches) en un point déterminé du circuit, par exemple au moyen d'un faisceau laser ou un faisceau de rayon X. Une attaque localisée peut concerner la tension d'alimentation, un chemin de 30 données, ou le signal d'horloge du circuit intégré. La mémoire ROM ou EEPROM d'une carte à puce qui contient généralement des données ou des programmes sensibles sont particulièrement visées par ce type d'attaque. Bien qu'il soit impossible de modifier le contenu d'une mémoire ROM, une perturbation appliquée sur 2910145 3 les étages de sortie ou les décodeurs d'adresse de la mémoire peut modifier la valeur d'une donnée ou d'une instruction de programme au moment de sa lecture dans la mémoire ou de sa transmission vers l'unité de traitement. 5 Pour contrer ce type d'attaque, il a déjà été envisagé de mémoriser pour chaque donnée stockée dans la mémoire une information de contrôle calculée à partir des bits de la donnée, et de vérifier à chaque lecture d'une donnée que l'information de contrôle mémorisée pour cette 10 donnée correspond à l'information de contrôle calculée à partir des bits de la donnée lue. Selon la valeur de la donnée lue et les bits affectés par l'injection d'erreur, l'information de contrôle calculée sur la donnée corrompue peut correspondre à celle qui est mémorisée 15 pour la donnée lue. Cette solution présente donc des failles. La présente invention vise une protection plus efficace des données lues dans une mémoire contre des attaques par injection d'erreur. 20 Ainsi, une idée de l'invention est de mémoriser une donnée lue avec son adresse de lecture et de vérifier que la donnée mémorisée correspond à la donnée figurant à l'adresse mémorisée lorsque la mémoire n'est pas accédée. Plus précisément, l'invention concerne un procédé 25 de lecture d'une donnée enregistrée dans une mémoire, le procédé comprenant des étapes de sélection d'une adresse de la mémoire où est enregistrée une donnée à lire, et de lecture de la donnée dans la mémoire à l'adresse sélectionnée. 30 Selon un mode de réalisation de l'invention, le procédé comprend des étapes consistant à : ù enregistrer la donnée lue dans un espace de stockage, et ù lorsque la mémoire n'est pas accédée, lire la donnée 35 dans la mémoire, lire la donnée enregistrée si la 2910145 4 donnée lue dans la mémoire est différente de la donnée enregistrée. Selon un mode de réalisation de l'invention, chaque donnée lue dans la mémoire est enregistrée dans l'espace 5 de stockage en association avec son adresse dans la mémoire. Selon un mode de réalisation de l'invention, plusieurs données lues à des adresses consécutives dans la mémoire sont enregistrées dans l'espace de stockage en 10 association avec une seule adresse et un nombre correspondant au nombre de données enregistrées en association avec l'adresse. Selon un mode de réalisation de l'invention, les données enregistrées dans l'espace de stockage sont 15 vérifiées suivant un ordre aléatoire. Selon un mode de réalisation de l'invention, les données lues dans la mémoire sont enregistrées aléatoirement dans l'espace de stockage. Selon un mode de réalisation de l'invention, le 20 procédé comprend une étape d'interruption de la lecture de la mémoire lorsque l'espace de stockage est plein, pour vérifier si les données enregistrées dans l'espace de stockage sont identiques aux données correspondantes dans la mémoire. 25 Selon un mode de réalisation de l'invention, l'interruption de la lecture de la mémoire est effectuée soit en bloquant le signal d'horloge cadençant une unité de traitement accédant à la mémoire, soit en déclenchant l'exécution par l'unité de traitement d'une routine 30 d'attente mémorisée dans une autre mémoire. L'invention concerne également un dispositif de protection de la lecture d'une mémoire. Selon un mode de réalisation de l'invention, le dispositif comprend : 2910145 5 ù un espace de stockage pour enregistrer une donnée lue dans la mémoire, et une adresse de la mémoire en association avec la donnée enregistrée, ù des moyens pour lire la donnée dans la mémoire en 5 utilisant l'adresse enregistrée, ù un comparateur pour comparer la donnée enregistrée dans l'espace de stockage à la donnée lue dans la mémoire, et ù des moyens pour activer un signal d'erreur si la donnée 10 enregistrée est différente de la donnée lue dans la mémoire. Selon un mode de réalisation de l'invention, l'espace de stockage mémorise pour chaque donnée enregistrée, l'adresse de la donnée dans la mémoire. 15 Selon un mode de réalisation de l'invention, l'espace de stockage mémorise une seule adresse pour un ensemble de données enregistrées se trouvant à des adresses consécutives dans la mémoire, et un nombre correspondant au nombre de données dans l'ensemble de 20 données. Selon un mode de réalisation de l'invention, les données sont enregistrées dans l'espace de stockage dans une pile gérée en mode FIFC ou LIFO. Selon un mode de réalisation de l'invention, les 25 adresses sont enregistrées dans l'espace de stockage dans une pile gérée en mode FIFO ou LIFO. Selon un mode de réalisation de l'invention, le dispositif est intégré à la mémoire à protéger. L'invention concerne également un circuit intégré 30 comprenant une unité de traitement et une mémoire lue par l'unité de traitement. Selon un mode de réalisation de l'invention, le circuit intégré comprend un dispositif de protection tel que défini précédemment, pour enregistrer chaque donnée lue dans la mémoire par l'unité de 2910145 6 traitement et pour vérifier chaque donnée enregistrée lorsque l'unité de traitement n'accède pas à la mémoire. Selon un mode de réalisation de l'invention, le dispositif de protection comprend un multiplexeur disposé 5 sur un bus d'adresse connecté en entrée à un bus d'adresse de l'unité centrale et à l'espace de stockage, et en sortie au bus d'adresse de la mémoire, pour appliquer à la mémoire une adresse de lecture provenant soit de l'unité centrale, soit de l'espace de stockage. 10 Selon un mode de réalisation de l'invention, le dispositif de protection comprend des moyens pour commander la lecture de la mémoire lorsque l'unité centrale n'accède pas à la mémoire. 15 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 d'un mode de réalisation de l'invention, faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : 20 - la figure 1 décrite précédemment représente sous forme de blocs un circuit intégré, - la figure 2 représente sous forme de blocs un circuit intégré équipé d'un dispositif de protection selon l'invention, 25 - la figure 3 représente sous forme de blocs le dispositif de protection, - la figure 4 représente un dispositif de protection selon un premier mode de réalisation de l'invention, - la figure 5 représente un dispositif de protection 30 selon un second mode de réalisation de l'invention, - la figure 6 représente un dispositif de protection selon un troisième mode de réalisation de l'invention, - la figure 7 est un schéma électronique d'un circuit séquenceur du dispositif de protection représenté sur la 35 figure 6, 2910145 7 - la figure 8 est un schéma électronique d'un circuit du circuit séquenceur représenté sur la figure 7, - la figure 9 représente un dispositif de protection selon un quatrième mode de réalisation de l'invention. 5 La figure 2 représente un circuit intégré ICI pour carte à puce ou étiquette électronique. Le circuit intégré ICI comprend une unité centrale UC de microprocesseur, une ou plusieurs mémoires non volatiles MEM1 (ROM, EEPROM, FLASH...), une mémoire volatile MEM2 10 (RAM), un circuit de cryptographie CRYCT permettant au circuit intégré de s'authentifier au cours d'une transaction, et un circuit d'interface INTCT lui permettant de communiquer avec des lecteurs de carte à puce ou d'étiquette électronique externes (EXT). L'unité 15 centrale UC, les mémoires MEM1, MEM2 et le circuit CRYCT sont reliés entre eux par un bus de données DTB et un bus d'adresse ADB. Le circuit d'interface INTCT peut être du type à contact et comprendre par exemple des contacts ISO 7816 (contacts d'horloge, de données, d'alimentation, de 20 masse...). Le circuit d'interface INTCT peut aussi être du type sans contact RFID (Radio Frequency Identification) et comprendre une bobine d'antenne RF ou un circuit d'antenne UHF, des circuits de modulation et démodulation de données sortantes et entrantes, un 25 circuit extracteur d'horloge, etc. Selon l'invention, le circuit intégré ICI est équipé d'un dispositif de protection RPCT, assurant la détection d'erreurs dans les données lues dans la mémoire MEM1. Le dispositif RPCT est interposé sur les bus de 30 donnée et d'adresse d'entrée/sortie de la mémoire MEM1. Le dispositif RPCT reçoit également du l'unité centrale UC le signal de sélection CS1 de la mémoire MEM1 et transmet à la mémoire MEM1 un signal CS d'activation qui est déterminé en fonction du signal CS1. Le dispositif 2910145 8 RPCT fournit un signal d'erreur ERR qui est par exemple envoyé sur une entrée de l'unité centrale UC. Il est à noter que le dispositif RPCT peut être intégré à la mémoire MEM1. 5 Sur la figure 3, le dispositif RPCT comprend un multiplexeur MUX1, un séquenceur SEQ, un espace de stockage REGB d'adresses et de données lues dans la mémoire MEM1, un comparateur COMP et une porte logique OG1 de type OU. Une entrée du multiplexeur MUX1 est 10 connectée au bus d'adresse ADB interconnectant l'unité centrale UC et les autres circuits (INTCT, MEM1, MEM2, CRYCT) du circuit intégré ICI. La sortie du multiplexeur MUX1 est connectée à l'entrée de bus d'adresse de la mémoire MEM1. L'espace de stockage REGB est connecté en 15 entrée aux bus d'adresse ADB et de donnée DTB. L'espace de stockage REGB comprend une sortie d'adresse connectée à une entrée du multiplexeur MUX1 et une sortie de donnée connectée à une entrée du comparateur COMP dont une autre entrée est connectée au bus DTB. Le 20 comparateur fournit le signal d'erreur ERR. Le séquenceur SEQ commande l'accès aux registres REGB et reçoit de l'unité centrale UC un signal de sélection CS1 de la mémoire MEM1. Le séquenceur SEQ génère un signal de sélection CS2 de la mémoire MEM1. Les signaux de 25 sélection CS1, CS2 sont fournis aux entrées de la porte OG1 dont la sortie fournit un signal de sélection CS qui est appliqué à la mémoire MEM1. L'espace de stockage REGB comprend par exemple un ensemble de registres comportant chacun un champ 30 d'adresse et un champ de donnée. Chacun des registres de l'espace REGB est constitué de n bits, n étant égal à la somme du nombre de bits d'une donnée et du nombre de bits d'une adresse. Le nombre de registres de l'espace REGB est limité à quelques unités. Lorsqu'une donnée est 35 lue par l'unité centrale UC dans la mémoire MEM1, elle est stockée dans le champ de donnée de l'un des registres de l'espace de stockage REGB. L'adresse à laquelle 2910145 9 la donnée est lue est stockée dans le champ d'adresse du registre où est stockée la donnée correspondante. Lorsque la mémoire MEM1 n'est pas accédée par l'unité centrale UC (signal CS1 inactif), le séquenceur 5 SEQ active la lecture de la mémoire MEM1 en activant le signal CS2 et en commandant la lecture d'une donnée et d'une adresse correspondante dans l'espace REGB. L'adresse est appliquée à la mémoire par l'intermédiaire du multiplexeur MUX1 et la donnée 10 est fournie au comparateur COMP. La donnée se trouvant dans la mémoire MEM1 à l'adresse est ainsi appliquée au comparateur COMP qui la compare à la donnée lue dans l'espace REGB. Si une différence entre les données reçues par le comparateur est détectée, 15 le signal ERR en sortie du comparateur passe à l'état actif, signalant une erreur de lecture de la mémoire MEM1. Le signal d'erreur ERR est par exemple envoyé par le circuit RPCT à l'unité centrale UC pour lui permettre 20 de prendre des mesures d'urgence en réponse à l'activation du signal ERR. Le signal d'erreur ERR peut ainsi être appliqué à un décodeur d'interruption qui fournit à l'unité centrale UC un vecteur d'interruption lorsque le signal d'erreur ERR présente la valeur active. 25 L'unité centrale exécute alors une routine d'interruption dédiée. Alternativement, le signal d'erreur ERR peut être appliqué à un circuit de protection à logique câblée spécifiquement prévu à cet effet. Les mesures d'urgence, qu'elles soient mises en oeuvre par une routine 30 d'interruption exécutée par l'unité centrale ou par un circuit externe, peuvent consister par exemple à provoquer une remise à zéro hardware de l'unité centrale, un effacement, une destruction ou un verrouillage de certaines parties des mémoires, etc. 35 L'espace de stockage REGB comprend avantageusement un nombre de registres permettant d'enregistrer toutes les données correspondant à une ou plusieurs instructions 2910145 10 et aux paramètres de celles-ci. En outre, le programme exécuté par l'unité centrale UC est de préférence conçu de manière que le nombre de cycles successifs de lecture de la mémoire MEM1 soit inférieur ou égal au nombre de 5 registres dans l'espace de stockage, et que le nombre de cycles durant lesquels la mémoire MEM1 est sélectionnée (signal CS1 actif) soit plus faible que le nombre de cycles durant lesquels la mémoire n'est pas sélectionnée (signal CS1 inactif). Ainsi, on évite que l'espace de 10 stockage REGS soit saturé. Dans le cas contraire, on peut prévoir d'activer un signal d'arrêt HLT lorsque l'espace de stockage REGB est plein. Le signal HLT peut être utilisé pour arrêter l'horloge qui cadence l'unité centrale UC, sans arrêter 15 celle qui cadence la mémoire MEM1 et le dispositif RPCT. Alternativement, le signal HLT peut être fourni à l'unité centrale UC pour déclencher une interruption du programme qu'elle exécute. Lorsque l'unité UC est interrompue, le dispositif RPCT peut accéder à la mémoire MEM1 afin de 20 vérifier toutes les données stockées dans l'espace de stockage REGB. L'interruption de l'unité centrale UC peut être effectuée de deux manières. Soit le signal HLT est appliqué à l'unité centrale UC comme un signal d'interruption, soit l'unité centrale surveille 25 périodiquement l'état de ce signal (polling). Dans le cas où le signal HLT est un signal d'interruption de l'unité centrale UC, les vecteurs d'interruption sont stockés dans une autre mémoire. Dans les deux cas, lorsque le signal HLT est activé, l'unité centrale exécute une 30 routine d'attente durant laquelle l'unité centrale n'accède pas à la mémoire MEM1. A cet effet, la routine d'attente est mémorisée dans une autre mémoire que la mémoire MEM1. La durée de la routine d'attente est avantageusement ajustée à la durée prévue de la phase de 2910145 11 vérification des données enregistrées par le dispositif RPCT lorsque l'espace de stockage REGB est plein. Dans la description qui suit de modes de réalisation du dispositif RPCT, divers signaux dont la 5 prévision est à la portée de l'homme de l'art n'ont pas été décrits dans un souci de simplicité, seuls les signaux nécessaires à la compréhension de l'invention étant décrits. Ainsi, si les signaux permettant d'initialiser les registres et les bascules du dispositif 10 RPCT n'ont pas été décrits, il va de soi que de tels signaux d'initialisation doivent être prévus. La figure 4 représente un premier mode de réalisation du dispositif RPCT et en particulier de l'espace de stockage REGB et du séquenceur SEQ. 15 L'espace de stockage REGS comprend plusieurs registres d'adresse ADl-ADn montés en série comprenant chacun une entrée et une sortie, et autant de registres de donnée DT1-DTn montés en série comprenant chacun également une entrée et une sortie. L'entrée d'un premier 20 registre d'adresse AD1 est connectée au bus ADB, et l'entrée d'un premier registre de donnée DT1 est connectée au bus de donnée DTB. L'entrée de chacun des autres registres d'adresse AD2-ADn est connectée à la sortie d'un registre d'adresse précédent AD1-ADn-l. De 25 même, l'entrée de chacun des autres registres de donnée DT2-DTn est connectée à la sortie d'un registre de donnée précédent DT1-DTn-l. La sortie de chaque registre AD1-ADn est également connectée à l'entrée d'un multiplexeur MUX2 dont la sortie est connectée à l'entrée du multiplexeur 30 MUX1. La sortie de chaque registre DT1-DTn est connectée à l'entrée d'un multiplexeur MUX3 dont la sortie est connectée à l'entrée du comparateur COMP. Les registres d'adresse AD1-ADn et de donnée DT1-DTn sont gérés à la manière d'une pile de type FIFO 35 (First In, First Out) : à chaque fois qu'une nouvelle 2910145 12 donnée et son adresse sont mémorisées dans les premiers registres AD1, DT1, le contenu des registres est décalé dans le même sens (de AD1 vers AD2 et de DT1 vers DT2). Le séquenceur SEQ comprend un compteur CPT qui 5 commande les multiplexeurs MUX2 et MUX3 de manière à lire successivement les registres. Le séquenceur comprend également deux portes logiques AGI, AG2 de type ET recevant un signal d'horloge CK cadençant la lecture de la mémoire MEM1. La porte AGI reçoit le signal de 10 sélection CS1. Le compteur fournit un signal de dépassement lorsqu'il est à 0, ce signal étant inversé par un inverseur Il pour produire le signal CS2 qui est fourni à la porte AG2. La porte AGI fournit un signal de commande d'écriture WR et la porte AG2 fournit un signal 15 de commande de lecture RD. Les signaux RD et WR commandent le compteur CPT. Le signal RD commande le multiplexeur MUX1. Le signal WR commande l'écriture des registres AD1-ADn et DT1-DTn. Le dispositif RPCT comprend une bascule FFI 20 recevant le signal de sortie du comparateur COMP et le signal RD sur une entrée de signal d'horloge, et fournissant le signal d'erreur ERR. La bascule FFI permet de synchroniser le signal ERR avec les cycles de lecture et de mémoriser l'activation du signal ERR en cas de 25 détection d'une erreur. Lorsque l'unité centrale UC lit une donnée dans la mémoire MEM1 (signaux CS1 à 1, CS2 à 0, RD à 0 et WR à 1), la donnée lue et l'adresse de lecture sont stockées respectivement dans le registre DT1 et dans le registre 30 AD1. Avant qu'une autre adresse et une autre donnée soient stockées dans les registres AD1 et DT1, les contenus des registres AD1-ADn-1 et DT1-DTn-1 sont transférés dans les registres suivants AD2-ADn et DT2- DTn. Les contenus des derniers registres ADn et DTn sont 35 donc perdus. Le compteur CPT est incrémenté de 1 à chaque 2910145 13 nouvelle écriture dans les registres AD1 et DT1 par le signal RD à 1. Si lors d'un cycle, la mémoire MEM1 n'est pas lue (CS1 = 0 lorsque CK passe à 1), les signaux CS2 et RD passent à 1 et le signal WR passe à O. Le compteur 5 CPT est alors décrémenté de 1 et le registre dont la position correspond à la valeur du compteur est lu par les multiplexeurs MUX2, MUX3. L'adresse contenue dans le registre d'adresse lu est ainsi envoyée à la mémoire MEM1 par le multiplexeur MUX2, et la donnée 10 contenue dans le registre de donnée lu est fournie au comparateur COMP. La donnée lue dans la mémoire MEM1 à l'adresse est envoyée sur l'autre entrée du comparateur COMP. La bascule FFI mémorise l'état du signal ERR en sortie du comparateur au front montant du 15 signal RD. Pour éviter de perdre des données à chaque décalage du contenu des registres ADl-ADn, DT1-DTn, la lecture et la vérification des données mémorisées dans l'espace de stockage REGB peuvent être effectuées à une cadence plus 20 rapide que la lecture de la mémoire MEM1 par l'unité UC, si la mémoire le permet. Alternativement, le programme exécuté par l'unité centrale peut comprendre des boucles d'attente mémorisées dans une autre mémoire (activée par un autre signal de sélection). Une autre solution 25 consiste à générer un signal HLT lorsque le compteur a atteint la valeur du nombre n de registres ADI-ADn ou DT1-DTn. Le signal HLT est envoyé à l'unité centrale UC ou à l'horloge générale du circuit intégré ICI (distincte de l'horloge qui cadence la relecture de la mémoire MEM1 30 et la bascule FFI), de manière à interrompre l'exécution du programme et à permettre au dispositif RPCT de vérifier les données stockées dans l'espace de stockage. Lorsque tout ou partie des données stockées dans l'espace de stockage REGB a été vérifiée (valeur du compteur CPT 2910145 14 inférieure à n), le signal HLT repasse à 0 pour permettre à l'unité UC de poursuivre l'exécution du programme. La figure 5 représente un autre mode de réalisation du dispositif RPCT. Sur la figure 5, le dispositif RPCT 5 comprend, comme le dispositif représenté sur la figure 3, un espace de stockage REGB1, un séquenceur SEQ1, le multiplexeur MUX1, le comparateur COMP, la bascule FF1 et la porte OG1. L'espace de stockage REGB1 comprend plusieurs registres R1-Rn comportant chacun un champ 10 d'adresse AD, un champ de donnée DT et un champ d'état F indiquant si le registre est libre ou occupé. Le champ d'adresse AD d'un premier registre R1 est connecté en entrée au bus d'adresse ADB, le champ de donnée DT du registre R1 est connecté en entrée au bus DTB, et le 15 champ F de ce registre reçoit la valeur du signal de sélection CS1. Chacun des registres Rl-Rn-1 sauf un dernier registre Rn comprend une sortie connectée à l'entrée d'un registre suivant R2-Rn. Le dernier registre Rn comprend une sortie d'adresse connectée à une entrée 20 du multiplexeur MUX1, et une sortie de donnée connectée à une entrée du comparateur COMP. Lorsque le registre R1 est accédé en écriture, le champ d'état F de ce registre est mis à 1. Les registres Rl-Rn sont gérés à la manière d'une pile de type FIFO (First In, First Out). 25 Le dispositif RPCT comprend également une porte logique AG3 de type ET et une porte logique OG2 de type OU, recevant chacune en entrée la valeur de chacun des champs d'état F des registres Rl-Rn. La sortie de chacune des portes logiques AG3, OG2 est connectée au séquenceur 30 SEQ1. La sortie de la porte AG3 fournit un signal FL à 1 lorsque tous les registres de l'ensemble REGB1 sont occupés (champ F à 1). La sortie de la porte OG2 fournit un signal EY à 0 lorsque tous les registres de l'ensemble REGB1 sont libres (champ F à 0). 2910145 15 Le séquenceur SEQ1 fournit un signal HLT qui passe à 1 lorsque tous les registres de l'ensemble REGB1 sont occupés et qui passe à 0 lorsque tous les registres Rl-Rn sont libres. 5 Lorsque tous les registres sont remplis (signal FL à 1), si le programme exécuté par l'unité centrale UC n'accède pas à la mémoire MEM1 au cycle de lecture suivant, la donnée la plus ancienne stockée dans le registre Rn est vérifiée. Si le programme tente d'accéder 10 à la mémoire MEM1 au cycle de lecture suivant, le signal HLT passe à 1, ce qui interrompt l'exécution du programme par l'unité UC. Le séquenceur SEQ1 commande l'ensemble de registres REGB1 pour déclencher la lecture du premier registre 15 écrit (registre Rn), et ainsi comparer la donnée stockée dans le registre à la donnée lue dans la mémoire MEM1 à l'adresse stockée dans le registre Rn. A chaque lecture d'un registre, le contenu des registres R1-Rn est décalé. A chaque décalage du contenu 20 des registres, le contenu du champ F du premier registre R1 est mis à O. Lorsque le signal EY passe à 0, toutes les données stockées dans les registres Rl-Rn ont ainsi été vérifiées, et le signal HLT passe à O. Le séquenceur SEQ1 peut être réalisé à l'aide d'une 25 bascule FF2 dont l'entrée est forcée à 1 et d'une porte logique AG4 de type ET. Le signal FL est transmis à l'entrée de signal d'horloge de la bascule FF2 pour déclencher la bascule lorsque le signal FL passe à 1. Le signal EY est transmis à une entrée d'initialisation de 30 la bascule FF2 pour initialiser cette dernière lorsque le signal EY passe à O. La sortie directe de la bascule FF2 fournit le signal CS2 qui est envoyé à une entrée de la porte AG4. La porte AG4 reçoit également en entrée le signal CS1 et fournit le signal HLT. Ainsi, le signal HLT 2910145 16 passe à 1 lorsque les signaux CS1 et CS2 sont simultanément à 1. La figure 6 représente un autre mode de réalisation du dispositif RPCT. Sur la figure 6, le dispositif RPCT 5 comprend, comme le dispositif représenté sur la figure 3, un espace de stockage REGB2 des données à vérifier avec leurs adresses, un séquenceur SEQ2, le multiplexeur MUX1, le comparateur COMP, la bascule FF1, et la porte OG1. L'espace de stockage REGB2 comprend une pile de 10 stockage d'adresses ADA et une pile de stockage de données DTA,ces deux piles étant gérées en mode LIFO (Last In - First Out). La pile ADA peut stocker m adresses AD1-ADm chacune en association avec la valeur d'un compteur CP1-CPm. La pile DTA peut stocker n données 15 DT1-DTn, n étant égal à m fois la valeur de comptage maximum des compteurs CP1-CPm. Le dispositif RPCT comprend également un circuit additionneur pour additionner la valeur de la dernière adresse AD1 mémorisée dans la pile ADA à la valeur du 20 compteur CP1 associé. La sortie de l'additionneur ADD est connectée à l'entrée du multiplexeur MUX1. Ainsi, l'adresse qui est fournie par le multiplexeur MUX1 est égale à AD1 + CP1. Lors de la lecture de la mémoire, la pile 25 d'adresses ADA est décalée vers le bas à chaque front montant d'un signal Psh fourni par le séquenceur SEQ2, et la pile de données DTA est décalée vers le bas à chaque front montant du signal CS1. Lors de la vérification des données stockées dans l'espace de stockage REGB2, la pile 30 d'adresses ADA est décalée vers le haut à chaque front montant d'un signal UF1 fourni par le séquenceur SEQ2, et la pile données DTA est décalée vers le haut à chaque front montant du signal CS2. La figure 7 représente un mode de réalisation du 35 séquenceur SEQ2. Le séquenceur SEQ2 comprend un circuit 2910145 17 de détection de saut d'adresses JDCT, un additionneur ADD1, un inverseur I2, une porte logique OG3 de type OU, deux portes logiques AG5, AG6 de type ET, et un compteur d'adresses CPTA. Le séquenceur SEQ2 comprend également un 5 multiplexeur MUX4, et une porte logique OG4 de type OU. Le circuit JDCT détecte les sauts d'adresses lors de la lecture de la mémoire MEM1, et fournit un signal de détection de saut qui est envoyé à l'entrée de l'inverseur I2 et à l'entrée de la porte OG3. Le signal 10 de sortie de l'inverseur 12 est envoyé à une entrée de la porte OG4 dont la sortie permet de déclencher l'additionneur ADD1. L'additionneur ADD1 reçoit sur une entrée la valeur du premier compteur CP1 de la pile ADA et sur une autre 15 entrée, une valeur égale à +1 ou - 1 sélectionnée par le multiplexeur MUX4. A chaque fois que l'additionneur ADD1 est déclenché, il fournit en sortie la valeur du compteur CP1 incrémentée ou décrémentée de 1, qui est inscrite dans zone de mémorisation du compteur CP1 dans la pile 20 ADA. L'additionneur ADD1 fournit un signal de retenue CY qui est activé lorsque l'additionneur est en dépassement de capacité par valeur supérieure, c'est-à-dire lorsque le compteur CP1 dépasse sa valeur maximum. Le signal CY est fourni à l'entrée de la porte OG3. La sortie de la 25 porte OG3 est connectée à l'entrée de la porte AG5 dont la sortie fournit le signal. Psh envoyé par le séquenceur SEQ2 à la pile ADA. Le signal Psh est envoyé à l'entrée du compteur CPTA pour déclencher un comptage. Le signal CS1 est envoyé sur une entrée inversée de la porte AG6 30 dont la sortie fournit le signal CS2. Le signal CS2 est envoyé à une entrée de la porte OG4 et à une entrée de commande du multiplexeur MUX4. Ainsi, la valeur du compteur CP1 est incrémentée ou décrémentée de 1 à chaque fois qu'il est déclenché selon la valeur du signal CS2 35 commandant le multiplexeur MUX4. L'additionneur ADD1 2910145 18 fournit un signal de dépassement de capacité UF1 qui est activé lorsque l'additionneur est en dépassement de capacité par valeur inférieure, c'est-à-dire lorsque le compteur dépasse sa valeur minimum, soit O. Le signal UF1 5 déclenche un décomptage du compteur OPTA. Le compteur OPTA fournit un signal NZ qui s'active lorsque le compteur n'est plus à 0, et un signal de dépassement de capacité correspondant au signal HLT fourni par le séquenceur SEQ2. Le signal NZ est fourni à l'entrée de la 10 porte AG6. A l'initialisation du circuit intégré, l'ensemble de l'espace de stockage REGB2 est vide. A la première lecture dans la mémoire MEM1, l'adresse de lecture dans la mémoire MEM1 est stockée dans un premier registre 15 AD1 de la pile d'adresse ADA et le compteur CP1 associé est incrémenté de 1. La donnée lue dans la mémoire MEM1 à l'adresse est stockée dans un premier registre DT1 de la pile de donnée DTA. A la seconde lecture dans la mémoire MEM1, si 20 l'adresse lue est égale à l'adresse de lecture précédente incrémentée de 1 (signal JDT à 0), l'adresse de lecture n'est pas mémorisée, mais le compteur CP1 associé au premier emplacement de la zone ADA est incrémenté, et la nouvelle donnée lue dans la mémoire MEM1 est 25 stockée dans le premier registre DT1 de la pile de donnée DTA après décalage de cette dernière. Ainsi, tant que des adresses successives sont lues dans la mémoire MEM1, aucune nouvelle adresse n'est mémorisée dans la pile ADA. Le compteur CP1 est simplement incrémenté et les données 30 lues sont mémorisées successivement dans la pile de donnée DTA. Si un saut d'adresse est détecté par le circuit JDCT (signal JDT à 1), ou si le compteur CP1 arrive en dépassement de capacité (signal CY à 1), le signal Psh 35 passe à 1, ce qui déclenche un comptage du compteur OPTA, 2910145 19 et un décalage de la pile ADA. L'adresse de lecture ADi est alors stockée dans le registre AD1 de la pile ADA et le compteur CP1 à 0 est incrémenté de 1 par l'additionneur ADD1. Comme le compteur OPTA n'est plus à 5 0, le signal NZ passe à 1. Il en résulte que si le signal CS1 passe à 0, le signal CS2 passe à 1 déclenchant une phase de vérification des données mémorisées dans la pile DTA. Lorsque la pile d'adresse ADA est pleine et que le 10 signal CS1 est encore à 1, si un comptage du compteur OPTA est déclenché (signal Psh à 1), le comptage se trouve alors en dépassement de capacité, ce qui fait passer le signal HLT à 1. Il en résulte que lorsque la mémoire MEM1 n'est pas 15 lue ou que le signal HLT passe à 1, les données mémorisées dans l'espace de stockage REGB2 sont vérifiées. A cet effet, le séquenceur SEQ2 lit la donnée mémorisée dans le premier registre DT1 de la pile DTA, ainsi que l'adresse AD1 et la valeur du compteur associé 20 CP1 mémorisés dans le premier registre de la pile ADA. L'adresse lue AD1 est additionnée par l'additionneur ADD à la valeur lue du compteur CP1. L'adresse ainsi obtenue (= AD1 + CP1) correspond à l'adresse dans la mémoire MEM1 de la donnée lue DT1 dans la pile DTA. Le 25 comparateur COMP compare la donnée DT1 à la donnée lue dans la mémoire MEM1 à l'adresse . A chaque lecture d'une donnée dans la pile DTA, la valeur du premier compteur CP1 mémorisé dans la pile ADA est décrémentée par l'additionneur ADD1. Lorsque l'additionneur ADD1 30 fournit un résultat négatif (UF1 = 1), le compteur OPTA est décrémenté de 1 et la pile ADA est décalée vers le haut (signal Psh à 1). Lorsque le compteur OPTA atteint la valeur 0, le signal NZ passe à 0, ce qui fait passer le signal CS2 à O. 2910145 20 La figure 8 représente un mode de réalisation du circuit JDCT. Le circuit JDCT comprend deux registres d'adresse RGAD1, RGAD2 en série, un circuit additionneur ADD2 et un comparateur COMP1. Le registre RGAD1 est 5 connecté au bus d'adresse ADB du circuit intégré ICI. Le registre RGAD2 est connecté à la sortie du registre RGAD1. La sortie du registre RGAD2 est connectée à une entrée de l'additionneur ADD2 dont une autre entrée reçoit la valeur 1. Les registres RGAD1 et RGAD2 sont 10 commandés en écriture par le signal CS1. Ainsi, au début de chaque cycle de lecture de la mémoire programme, indiqué par le signal CS1, le registre RGAD1 est chargé avec l'adresse circulant sur le bus d'adresse ADB, et le registre RGAD2 est chargé avec l'adresse mémorisée dans 15 le RGAD1 au cycle de lecture précédent. L'adresse mémorisée dans le registre RGAD2 est incrémentée de un par le circuit additionneur ADD2, puis appliquée à une entrée du comparateur COMP1. L'adresse mémorisée dans le registre RGAD1 est appliquée sur une autre entrée du 20 comparateur COMP1. De cette manière, le signal JDT fourni par le comparateur COMP1 indique si les deux dernières adresses successives de lecture de la mémoire MEM1 sont ou non consécutives. Au début de l'exécution d'un programme, à la suite 25 de l'initialisation du circuit JDCT, les deux registres RGAD1 et RGAD2 mémorisent une valeur initiale qui ne correspond pas à la première adresse de lecture de la mémoire programme MEM1. Il est donc préférable d'inhiber le circuit pendant deux cycles de lecture nécessaires au 30 chargement du registre RGAD2 avec la première adresse de lecture de la mémoire programme MEM1. Les mécanismes de mémorisation et de vérification mis en oeuvre par le dispositif RPCT sont déterministes. S'il est possible de reproduire une injection d'erreur au 35 moment de la vérification d'une donnée précédemment lue 2910145 21 dans la mémoire MEM1, l'injection d'erreur ne sera pas détectée. Bien qu'une telle attaque apparaisse difficile à réaliser puisqu'il faut injecter deux fois la même erreur précisément aux moments où une donnée est lue puis 5 vérifiée dans la mémoire MEM1, il peut être avantageux de supprimer ce risque de ne pas détecter une injection d'erreur. Dans cette optique, la figure 9 représente un autre mode de réalisation du dispositif de protection selon 10 l'invention. Dans ce mode de réalisation, le dispositif de protection RPCT comprend l'un des circuits RPCT précédemment décrits en référence aux figures 3 à 6. Le dispositif de protection comprend également un générateur de donnée binaire aléatoire RNG connecté à une entrée 15 d'une porte logique AG7 de type ET dont une autre entrée reçoit le signal de sélection CS1. La sortie de la porte AG7 est connectée à une entrée du signal CS1 du séquenceur SEQ (SEQ, SEQ1 ou SEQ2). De cette manière, les données qui sont lues dans la mémoire MEM1 et qui sont 20 fournies au circuit RPCT sont choisies aléatoirement. Ainsi tous les accès à la mémoire MEM1 ne sont pas sauvegardés et donc vérifiables. Alternativement, une composante aléatoire peut être introduite, non pas dans la mémorisation des données et 25 des adresses lues dans la mémoire MEM1, mais dans le séquenceur SEQ (ou SEQ1) pour agir sur l'ordre de lecture suivant lequel les données et les adresses dans l'espace de stockage REGS (ou REGB1) durant la phase de vérification. 30 Pour modifier l'ordre suivant lequel les données sont lues dans l'espace de stockage, on peut par exemple initialiser avec une valeur aléatoire le compteur CPT représenté sur la figure 4, de manière à choisir aléatoirement la première donnée à vérifier. Dans ce cas, 35 un second compteur est prévu pour décompter le nombre de 2910145 22 données à vérifier et arrêter la phase de vérification lorsque toutes les données enregistrées ont été vérifiées. Dans le cas où l'espace de stockage est accédé en 5 écriture ou en lecture d'une manière aléatoire, il peut être réalisé à partir d'une mémoire dont chaque emplacement est adressable individuellement. Dans tous les modes de réalisation précédemment décrits, il peut être prévu d'effectuer plusieurs fois la 10 vérification de la même donnée dans la mémoire MEM1, ceci afin d'améliorer l'étendue de la vérification et d'éviter attaques par synchronisation. Le nombre de vérifications de la même donnée est choisi aléatoirement. Dans les modes de réalisation dans lequel l'espace de stockage 15 (REGB1 ou REGB2) est une pile FIFO ou LIFO (figures 5 et 6), il convient de bloquer la pile lors de sa relecture, lorsque d'autres vérifications de la même donnée doivent être effectuées. Il apparaîtra clairement à l'homme de l'art que la 20 présente invention est susceptible de diverses variantes de réalisation et d'applications. En particulier, l'invention s'applique à tout type de mémoire non volatile, et pas uniquement à des instructions de programme, sachant que les données enregistrées dans 25 l'espace de stockage ne doivent pas être modifiées entre le moment où elles sont lues et le moment où elles sont vérifiées. On peut ainsi prévoir d'effectuer une vérification des données de manière à "vider" l'espace de stockage avant d'effectuer une écriture dans la mémoire. 30 La prévision du signal HLT n'est pas indispensable. En effet, selon les applications, il peut être acceptable de ne pas vérifier toutes les données enregistrées dans l'espace de stockage. Alternativement, le programme exécuté par l'unité de traitement UC peut comporter des 35 instructions d'attente mémorisées dans une autre mémoire 2910145 23 que la mémoire MEM1, pour permettre au dispositif RPCT de vérifier les données enregistrées dans la mémoire MEM1. REVENDICATIONS 1. Procédé de lecture d'une donnée enregistrée dans une mémoire (MEM1), le procédé comprenant des étapes de sélection d'une adresse ( )de la mémoire où est enregistrée une donnée à lire ( ), et de lecture de la donnée dans la mémoire à l'adresse sélectionnée, caractérisé en ce qu'il comprend des étapes consistant à : enregistrer la donnée lue ( ) dans un espace de stockage (REGS), et lorsque la mémoire n'est pas accédée, lire la donnée ( ) dans la mémoire, lire la donnée enregistrée ( , et activer un signal d'erreur (ERR) si la donnée lue dans la mémoire est différente de la donnée enregistrée. 2. Procédé selon la revendication 1, dans lequel chaque donnée lue ( ) dans la mémoire (MEM1) est enregistrée dans l'espace de stockage (REGB) en association avec son adresse (( ) dans la mémoire. 3. Procédé selon la revendication 1, dans lequel plusieurs données lues ( ) à des adresses consécutives ( ) dans la mémoire (MEM1) sont enregistrées dans l'espace de stockage (REGB2) en association avec une seule adresse et un nombre (CPT1-CPTn) correspondant au nombre de données enregistrées en association avec l'adresse. 4. Procédé selon l'une des revendications 1 à 2, dans lequel les données ( ) enregistrées dans l'espace de stockage (REGB) sont vérifiées suivant un ordre aléatoire. 24 2910145 25 5. Procédé selon l'une des revendications 1 à 2, dans lequel les données ( ) lues dans la mémoire (MEM) sont enregistrées aléatoirement dans l'espace de stockage. 5 6. Procédé selon l'une des revendications 1 à 5, comprenant une étape d'interruption de la lecture de la mémoire (MEM1) lorsque l'espace de stockage (REGB) est plein, pour vérifier si les données enregistrées dans 10 l'espace de stockage sont identiques aux données correspondantes dans la mémoire. 7. Procédé selon la revendication 5, dans lequel l'interruption de la lecture de la mémoire est effectuée 15 soit en bloquant le signal d'horloge cadençant une unité de traitement (UC) accédant à la mémoire (MEM1), soit en déclenchant l'exécution par l'unité de traitement d'une routine d'attente mémorisée dans une autre mémoire. 20 8. Dispositif de protection de la lecture d'une mémoire (MENU, caractérisé en ce qu'il comprend : ù un espace de stockage (REGB) pour enregistrer une donnée ( ) lue dans la mémoire (MENU, et une 25 adresse ( ) de la mémoire en association avec la donnée enregistrée, ù des moyens pour lire la donnée dans la mémoire en utilisant l'adresse enregistrée, ù un comparateur (COMP) pour comparer la donnée 30 enregistrée ( ) dans l'espace de stockage à la donnée ( ) lue dans la mémoire, et ù des moyens pour activer un signal d'erreur (ERR) si la donnée enregistrée est différente de la donnée lue dans la mémoire. 2910145 26 9. Dispositif selon la revendication 8, dans lequel l'espace de stockage (REGS, REGB1) mémorise pour chaque donnée enregistrée ( ), l'adresse ( ) de la donnée dans la mémoire (MEM1). 5 10. Dispositif selon la revendication 8, dans lequel l'espace de stockage (REGB2) mémorise une seule adresse pour un ensemble de données enregistrées se trouvant à des adresses consécutives dans la mémoire 10 (MEM1), et un nombre (CPT1-CPTn) correspondant au nombre de données dans l'ensemble de données. 11. Dispositif selon l'une des revendications 8 à 10, dans lequel les données ( ) sont enregistrées 15 dans l'espace de stockage (REGB) dans une pile (DTA) gérée en mode FIFO ou LIFO. 12. Dispositif selon l'une des revendications 8 à 11, dans lequel les adresses ( ) sont enregistrées 20 dans l'espace de stockage (REGB) dans une pile (ADA) gérée en mode FIFO ou LIFO. 13. Dispositif selon l'une des revendications 8 à 12, intégré à la mémoire (MEM1) à protéger. 25 14. Circuit intégré (ICI) comprenant une unité de traitement (UC) et une mémoire (MEM1) lue par l'unité de traitement, caractérisé en ce qu'il comprend un dispositif de 30 protection (RPCT) selon l'une des revendications 8 à 13 pour enregistrer chaque donnée ( ) lue dans la mémoire (MEM1) par l'unité de traitement (UC) et pour vérifier chaque donnée enregistrée ( ) lorsque l'unité de traitement n'accède pas à la mémoire. 35 2910145 27 15. Circuit intégré selon la revendication 14, dans lequel le dispositif de protection (RPCT) comprend un multiplexeur (MUX1) disposé sur un bus d'adresse (ADB) connecté en entrée à un bus d'adresse de l'unité centrale 5 (UC) et à l'espace de stockage (REGB), et en sortie au bus d'adresse de la mémoire (MEM1), pour appliquer à la mémoire une adresse de lecture provenant soit de l'unité centrale, soit de l'espace de stockage. 10 16. Circuit intégré selon l'une des revendications 14 et 15, dans lequel le dispositif de protection (RPCT) comprend des moyens (OG1) pour commander la lecture de la mémoire (MEM1) lorsque l'unité centrale (UC) n'accède pas à la mémoire. 15