FR 2983597 A1 20130607 FR 1161029 A 20111201 PROCEDE DE DETECTION D'UNE ERREUR DE LECTURE D'UNE DONNEE [001] L'invention concerne un procédé de détection d'une erreur de lecture d'une donnée et un procédé de protection d'un processeur de sécurité. L'invention 5 concerne également un support d'enregistrement d'informations ainsi qu'un processeur de sécurité pour la mise en oeuvre de ces procédés. [002] Des procédés connus détectent une erreur de lecture en réalisant les étapes suivantes : a) l'enregistrement d'un premier exemplaire de la donnée dans une première zone 10 d'une mémoire électronique et l'enregistrement d'un second exemplaire de la donnée dans une seconde zone d'une mémoire électronique, en réponse à une demande de lecture de la donnée : b) la lecture des valeurs des premier et second exemplaires de la donnée dans, respectivement, les première et seconde zones, 15 c) la comparaison des valeurs lues des premier et second exemplaires de la donnée, d) si les valeurs lues des premier et second exemplaires sont identiques, alors aucune erreur de lecture de cette donnée n'est détectée, [003] Une zone mémoire ou zone de mémoire est une mémoire électronique ou une portion d'une mémoire électronique divisée en plusieurs blocs mémoires. Chaque 20 bloc mémoire est destiné à contenir une donnée. Typiquement, un bloc mémoire est une page ou un multiple entier d'une page. Une page est le plus petit nombre d'octets qui peut être écrit en une seule opération d'écriture. Ainsi, même si la donnée enregistrée dans une page a une taille plus petite que la page, la totalité de la page est considérée comme étant occupée par cette donnée et il n'est pas possible 25 d'enregistrer dans cette page une donnée supplémentaire. [004] De l'état de la technique relatif à ces procédés connus est par exemple divulgué dans les demandes de brevet suivantes : GB 2 404 261, US 2006 053308, WO 2008 23297, US 2007 0033417 et US 2005 0160310. [005] Les procédés connus visent uniquement à se prémunir des conséquences 30 d'une défaillance d'un bloc mémoire. Ainsi, si les valeurs des premier et second exemplaires sont différentes, alors une erreur est signalée et des mesures correctives sont déclenchées. Une des mesures correctives classiques consiste à corriger la valeur de la donnée enregistrée. Toutefois, ces procédés détectent aussi une erreur de lecture de la donnée. Dans le cas d'une erreur de lecture de données, l'absence 35 d'égalité entre les valeurs des premier et second exemplaires de la donnée ne provient pas d'une corruption des données enregistrées dans les zones mémoires mais d'une erreur pendant le processus de lecture de ces données. Ici, on parle de corruption ou de données corrompues lorsque la valeur physiquement enregistrée de cette donnée est erronée à cause d'une défaillance d'un bloc mémoire. Ainsi, bien que les valeurs enregistrées des premier et second exemplaires soient parfaitement identiques, lors de l'étape c) ci-dessus, on constate que les valeurs sont différentes. Par exemple, une erreur de lecture peut être provoquée par une perturbation des signaux du bus de lecture ou par une corruption des données copiées dans une mémoire non volatile après avoir été lues dans une zone mémoire non volatile. [006] Les procédés connus ne font pas la distinction entre ces deux types d'erreur et lancent systématiquement, après la détection d'une erreur, la même mesure corrective. Typiquement, la mesure corrective consiste à corriger la valeur erronée. Or, dans le cas d'une erreur de lecture, une telle correction est inutile et se traduit par un gaspillage de ressources informatiques tels que du temps d'un microprocesseur mettant en oeuvre ce procédé. [007] Dans le domaine des processeurs de sécurité, il existe également une autre bonne raison pour distinguer ces deux types d'erreur. Un processeur de sécurité est un processeur électronique qui est renforcé pour être le plus résistant possible vis-à- vis des attaques de pirates informatiques. Il est donc généralement utilisé pour stocker des données confidentielles. Or, une attaque classique contre un processeur de sécurité consiste à corrompre les données enregistrées pour provoquer un comportement non prévu du processeur de sécurité qui peut révéler tout ou partie des données confidentielles qu'il contient. Toutefois, il est plus simple pour les pirates informatiques de provoquer une erreur de lecture que de corrompre les données enregistrées. Lorsque le pirate informatique provoque volontairement des erreurs de lecture en utilisant des pics de tension ou un faisceau laser ou autres, on dit que le processeur de sécurité est victime d'une attaque en lecture. Ainsi, dans le contexte des processeurs de sécurité, une erreur de lecture permet de détecter assez sûrement une tentative de cryptanalyse alors qu'une défaillance d'un bloc mémoire peut être une défaillance accidentelle causée, par exemple, par le vieillissement. [008] L'invention vise à remédier à cet inconvénient. Elle a donc pour objet un procédé de détection d'une erreur de lecture d'une donnée dans lequel : e) si les valeurs lues des premier et second exemplaires sont différentes, alors les 30 étapes b) et c) précédentes sont réitérées, puis f) si les valeurs lues lors de l'étape e) sont identiques, alors une erreur de lecture de cette donnée est détectée et, sinon, aucune erreur de lecture de cette donnée n'est détectée. [009] Le procédé ci-dessus permet de distinguer, et donc de détecter, une erreur 35 de lecture d'une erreur causée par la corruption des données enregistrées. En effet, lors de la seconde itération des étapes b) et c) ci-dessus, les valeurs des premier et second exemplaires sont nécessairement différentes si au moins l'une de ces valeurs est corrompue. A l'inverse, l'identité de ces valeurs lors de la seconde itération des étapes b) et c) identifie de façon certaine une erreur de lecture de la donnée. [cm cl Dès lors, il est possible de mettre en oeuvre des mesures appropriées différentes pour répondre à une erreur de lecture ou à une corruption des données enregistrées. Par exemple, le fait de détecter une erreur de lecture permet d'éviter de mettre en oeuvre inutilement des mesures visant à corriger les données enregistrées alors que celles-ci ne sont pas corrompues. De plus, dans le cas d'un processeur de sécurité, la détection d'une erreur de lecture permet de déclencher la mise en oeuvre de contre-mesure pour empêcher la cryptanalyse. [0011] Les modes de réalisation de ce procédé de détection peuvent comporter une ou plusieurs des caractéristiques suivantes : ^ le procédé comporte : - l'association à la valeur du premier exemplaire de la donnée d'un code de détection d'erreur ajoutant de la redondance à la donnée et permettant de détecter une erreur dans la valeur de cette donnée, - si lors de l'étape f), les valeurs lues des premier et second exemplaires sont différentes, alors le procédé comporte la vérification si la valeur lue du premier exemplaire est erronée ou au contraire correcte à l'aide du code de détection d'erreur associé cette valeur, et - si la valeur lue du premier exemplaire est correcte, l'enregistrement de la valeur du premier exemplaire dans un bloc mémoire de la seconde zone de mémoire différente du bloc mémoire où se trouvait le précédent second exemplaire de cette donnée de manière à former un nouveau second exemplaire de la donnée, puis - l'utilisation du nouveau second exemplaire en lieu et place du précédent second exemplaire de la donnée lors de toute nouvelle itération des étapes b) et c) , ^ le procédé comporte : - l'association aux premier et second exemplaires de la donnée d'un code de correction d'erreur ajoutant suffisamment de redondance aux valeurs des premier et second exemplaires pour permettre de corriger un ou plusieurs bits erronés dans la valeur de chacun de ces exemplaires de la donnée, - si lors de l'étape f), les valeurs lues des premier et second exemplaires sont différents, alors le procédé comporte : - la correction à l'aide du code de correction d'erreur des valeurs des premier et second exemplaires de la donnée pour obtenir des valeurs corrigées pour ces premier et second exemplaires, puis - la comparaison des valeurs corrigées des premier et second exemplaires, et - si les valeurs corrigées sont identiques, l'enregistrement de la valeur corrigée du premier exemplaire de la donnée dans des nouveaux blocs mémoires, respectivement, des première et de la seconde zones de mémoires différents des blocs mémoires où se trouvaient les précédents premier et second exemplaires de cette donnée de manière à former des nouveaux premier et second exemplaires de la donnée, puis - l'utilisation des nouveaux premier et second exemplaires en lieu et place des précédents premier et second exemplaires lors de toute nouvelle itération des étapes b) et c) ; ^ pour chaque bloc mémoire où se trouvait un précédent exemplaire de la donnée, le procédé comporte : - la mémorisation de ce bloc mémoire comme étant défectueux, et - lors de l'allocation d'un nouveau bloc mémoire dans l'une des zones de mémoire pour y enregistrer une information, le choix de ce bloc mémoire uniquement parmi les blocs mémoires de cette zone non mémorisés comme étant défectueux ; ^ lors de l'enregistrement du premier exemplaire de la donnée, la valeur de la donnée est d'abord transformée à l'aide d'une fonction de masquage inversible pour obtenir une valeur transformée différente de la valeur non transformée et différente de la valeur enregistrée du second exemplaire, puis c'est cette valeur transformée qui est enregistrée dans la première zone, et lors de la lecture du premier exemplaire, la transformation inverse est appliquée à la valeur transformée enregistrée pour obtenir la valeur lue du premier exemplaire. [0012] Les modes de réalisation du procédé de détection ci-dessus présentent en outre les avantages suivants. - l'utilisation d'un code de détection d'erreur permet de restaurer le fonctionnement du procédé de détection d'une erreur de lecture même après une défaillance d'un bloc mémoire, - l'utilisation d'un code de correction d'erreur permet de restaurer le fonctionnement du procédé de détection d'erreur de lecture même après que les valeurs des premier et second exemplaires de la donnée aient été corrompues tout en limitant le nombre de codes de correction d'erreur enregistrés, - le choix de blocs mémoires pour y enregistrer une nouvelle donnée uniquement 35 parmi les blocs mémoires non mémorisés comme étant défectueux permet d'éviter de réutiliser des blocs mémoires défectueux pour l'enregistrement de données, - l'enregistrement d'une valeur transformée dans la première zone mémoire différente de la valeur enregistrée dans la seconde zone mémoire permet d'augmenter la probabilité que les valeurs lues pour les premier et second exemplaires soient différentes en cas d'attaques en lecture. [0013] L'invention a également pour objet un procédé de protection d'un processeur de sécurité contre une attaque en lecture, ce processeur de sécurité exécutant une routine de chiffrement ou de déchiffrement d'une information à l'aide d'une donnée confidentielle enregistrée dans des première et seconde zones de mémoire de ce processeur de sécurité, dans lequel: - le processeur de sécurité détecte une erreur de lecture de la donnée confidentielle en mettant en oeuvre le procédé de détection ci-dessus, - si aucune erreur de lecture de la donnée confidentielle n'est détectée, le processeur de sécurité procède au chiffrement ou au déchiffrement de l'information à l'aide de la donnée confidentielle lue, sinon - en réponse à la détection d'une erreur de lecture, le processeur de sécurité déclenche automatiquement une contre-mesure limitant le chiffrement ou le 15 déchiffrement de l'information à l'aide de la donnée confidentielle lue, par rapport au cas où aucune erreur de lecture de cette donnée confidentielle n'est détectée. [0014] L'invention a également pour objet un support d'enregistrement d'informations comportant des instructions pour la mise en oeuvre du procédé de détection ou de protection ci-dessus lorsque ces instructions sont exécutées par un 20 calculateur électronique. [0015] Enfin, l'invention a également pour objet un processeur de sécurité comportant : - une première et une seconde zones d'une mémoire électronique, - un calculateur électronique programmé pour : 25 a) enregistrer un premier exemplaire de la donnée dans la première zone et enregistrer un second exemplaire de la donnée dans la seconde zone, en réponse à une demande de lecture de la donnée : b) lire les valeurs des premier et second exemplaires de la donnée dans, respectivement, les première et seconde zones, 30 c) comparer les valeurs lues des premier et second exemplaires de la donnée, et d) si les valeurs lues des premier et second exemplaires sont identiques, alors ne détecter aucune erreur de lecture de cette donnée, e) si les valeurs lues des premier et second exemplaires sont différentes, réitérer les étapes b) et c) précédentes, puis 35 f) si les valeurs lues lors de l'étape e) sont identiques, alors détecter une erreur de lecture de cette donnée et, sinon, n'indiquer aucune erreur de lecture. [0016] Les modes de réalisation de ce processeur de sécurité peuvent comporter une ou plusieurs des caractéristiques suivantes : ^ le processeur de sécurité est le processeur de sécurité d'une carte à puce ; 2 9 83 5 9 7 6 ^ la mémoire électronique, dite première mémoire, est une mémoire non volatile et le processeur de sécurité comporte une seconde mémoire volatile dans laquelle sont systématiquement copiées les données lues dans la première mémoire afin d'être traitées par le calculateur électronique. 5 [0017] L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif et faite en se référant aux dessins sur lesquels : - la figure 1 est une illustration schématique d'un terminal de réception de contenus multimédias embrouillés associé à un processeur de sécurité, 10 - la figure 2 est une illustration schématique d'une organisation d'une mémoire du processeur de sécurité de la figure 1 ; - la figure 3 est un organigramme d'une phase d'écriture de données dans la mémoire de la figure 2 ; - la figure 4 est un organigramme d'un procédé de protection du processeur de sécurité de la figure 1; et - la figure 5 est un organigramme d'un autre mode de réalisation d'un procédé de protection du processeur de sécurité de la figure 1. [0018] Dans ces figures les mêmes références sont utilisées pour désigner les mêmes éléments. [0019] Dans la suite de cette description, les caractéristiques et fonctions bien connues de l'homme du métier ne sont pas décrites en détail. De plus, la terminologie utilisée est celle des systèmes d'accès conditionnels à des contenus multimédias. Pour plus d'informations sur cette terminologie, le lecteur peut se reporter au document suivant : « Functional Model of Conditional Access System », EBU Review, Technical European Broadcasting Union, Brussels, BE, n° 266, 21 décembre 1995. [0020] L'invention s'applique en particulier au domaine du contrôle d'accès pour la fourniture de contenus multimédias payants tels que la télévision payante. [0021] Il est connu de diffuser plusieurs contenus multimédias en même temps. Pour cela, chaque contenu multimédia est diffusé sur son propre canal ou « chaine ». Un canal correspond typiquement à une chaine de télévision. [0022] Dans cette description, on désigne plus spécifiquement par « contenu multimédia » un contenu audio et/ou visuel destiné à être restitué sous une forme directement perceptible et compréhensible par un être humain. Typiquement, un contenu multimédia correspond à une succession d'images formant un film, une émission de télévision ou de la publicité. Un contenu multimédia peut également être un contenu interactif tel qu'un jeu. [0023] Pour sécuriser et soumettre la visualisation des contenus multimédias à certaines conditions, comme la souscription d'un abonnement payant par exemple, 40 les contenus multimédias sont diffusés sous forme embrouillée et non pas en clair. [0024] Plus précisément, chaque contenu multimédia est divisé en une succession de cryptopériodes. Pendant toute la durée d'une cryptopériode, les conditions d'accès au contenu multimédia embrouillé demeurent inchangées. En particulier, pendant toute la durée d'une cryptopériode, le contenu multimédia est embrouillé avec le même mot de contrôle. Généralement, le mot de contrôle varie d'une cryptopériode à l'autre. [0025] De plus, le mot de contrôle est généralement spécifique à un contenu multimédia, ce dernier étant aléatoirement ou pseudo aléatoirement tiré. [0026] Ici, les termes « embrouiller » et « chiffrer » sont considérés comme des synonymes. Il en est de même pour les termes « désembrouiller » et « déchiffrer ». [0027] Le contenu multimédia en clair correspond au contenu multimédia avant que celui-ci ne soit embrouillé. Celui-ci peut être rendu directement compréhensible par un être humain sans avoir recours à des opérations de désembrouillage et sans que sa visualisation soit soumise à certaines conditions. [0028] Les mots de contrôle nécessaires pour désembrouiller les contenus multimédias sont transmis de manière synchronisée avec les contenus multimédias. Pour cela, par exemple, les mots de contrôle sont multiplexés avec le contenu multimédia embrouillé. [0029] Pour sécuriser la transmission des mots de contrôle, ceux-ci sont transmis aux terminaux sous forme de cryptogrammes contenus dans des messages ECM (Entitlement Control Message). On désigne ici par « cryptogramme » une information insuffisante à elle seule pour retrouver le mot de contrôle en clair. Ainsi, si la transmission du mot de contrôle est interceptée, la seule connaissance du cryptogramme du mot de contrôle ne permet pas de retrouver le mot de contrôle permettant de désembrouiller le contenu multimédia. [0030] Pour retrouver le mot de contrôle en clair, c'est-à-dire le mot de contrôle permettant de désembrouiller directement le contenu multimédia, celui-ci doit être combiné avec une information secrète. Par exemple, le cryptogramme du mot de contrôle est obtenu en chiffrant le mot de contrôle en clair avec une clé cryptographique. Dans ce cas, l'information secrète est la clé cryptographique permettant de déchiffrer ce cryptogramme. Le cryptogramme du mot de contrôle peut aussi être une référence à un mot de contrôle stocké dans une table contenant une multitude de mots de contrôle possibles. Dans ce cas, l'information secrète est la table associant à chaque référence un mot de contrôle en clair. [0031] L'information secrète doit être préservée en lieu sûr. Pour cela, il a déjà été proposé de stocker l'information secrète dans des processeurs de sécurité tels que des cartes à puce directement connectées à chacun des terminaux. [0032] La figure 1 représente un terminal 8 destiné à être utilisé dans un tel système de contrôle d'accès conditionnel. Le terminal 8 désembrouille un canal pour l'afficher 40 en clair sur un afficheur. [0033] Le terminal 8 comprend un récepteur 10 de contenus multimédias diffusés. Ce récepteur 10 est raccordé à l'entrée d'un démultiplexeur 12 qui transmet le contenu multimédia à un désembrouilleur 14 et les messages ECM et EMM (Entitlement Management Message) à un processeur de sécurité 16. [0034] Le désembrouilleur 14 désembrouille le contenu multimédia embrouillé à partir du mot de contrôle transmis par le processeur 16. Le contenu multimédia désembrouillé est transmis à un décodeur 18 qui le décode. Le contenu multimédia décompressé ou décodé est transmis à une carte graphique 20 qui pilote l'affichage de ce contenu multimédia sur un afficheur 22 équipé d'un écran 24. L'afficheur 22 affiche en clair le contenu multimédia sur l'écran 24. Par exemple, l'afficheur 22 est une télévision, un ordinateur ou encore un téléphone fixe ou mobile. Ici, l'afficheur 22 est une télévision. [0035] Typiquement, l'interface entre le terminal 8 et le processeur 16 comprend un lecteur 26 géré par un module 28 de contrôle d'accès. Ici, le lecteur 26 est un lecteur 15 de cartes à puce. Le module 28 gère notamment : - la transmission des messages ECM et EMM démultiplexés au processeur 16, et - la réception des mots de contrôle déchiffrés par le processeur 16 et leur transmission au désembrouilleur 14. [0036] Le processeur 16 traite des informations confidentielles telles que des clés 20 cryptographiques ou des titres d'accès aux contenus multimédias. Pour préserver la confidentialité de ces informations, il est conçu pour être le plus robuste possible vis-à-vis des tentatives d'attaques menées par des pirates informatiques. Il est donc plus robuste vis-à-vis de ces attaques que les autres composants du terminal 8. En particulier, les mémoires qu'il comporte sont uniquement accessibles et utilisées par 25 ce processeur 16. Ici, le processeur 16 est le processeur de sécurité d'une carte à puce 30. [0037] Le processeur 16 comprend notamment un calculateur électronique 32 programmable raccordé par l'intermédiaire d'un bus 34 de transmission d'informations à une mémoire électronique volatile 36 et à une mémoire électronique 30 non volatile 38. [0038] La mémoire 36 est typiquement connue sous l'acronyme de RAM (Random Access Memory). La mémoire 38 conserve les données qui sont enregistrées même en absence d'alimentation du processeur 16. De plus, la mémoire 38 est une mémoire réinscriptible. Typiquement, il s'agit d'une EEPROM (Electrically Erasable 35 Programmable Read Only Memory) ou d'une mémoire flash. La mémoire 38 contient des informations confidentielles nécessaires au désembrouillage des contenus multimédias. Ici, elle contient aussi les instructions nécessaires à l'exécution du procédé de la figure 4 ou 5. [0039] La figure 2 représente plus en détail différentes zones de la mémoire 38. Ici, 40 la mémoire 38 comprend les zones de mémoire suivantes : - une zone 42 de contrôle, - une première zone 44 d'enregistrement de données, et - une seconde zone 46 d'enregistrement de données. [0040] Chaque zone de mémoire est définie par une adresse de début et une 5 adresse de fin. Ici chaque zone occupe une plage d'adresses contiguës dans la mémoire 38. Chaque zone est divisée en plusieurs blocs mémoires. Par exemple, les zones 42, 44 et 46 contiennent chacune plus de 100 ou 400 blocs mémoires. La taille de chaque bloc mémoire fait plusieurs octets. Ici, les blocs mémoires de ces zones font tous la même taille. Par exemple, cette taille est supérieure ou égale à 64o ou 10 1280. Les tailles des zones 44 et 46 sont identiques. [0041] La zone 44 est divisée en P blocs mémoires B1J de même taille où l'indice j identifie la position du début du bloc B1J par rapport à l'adresse de début de la zone 44. [0042] La zone 46 est également divisée en P blocs mémoires B2, de même taille 15 que les blocs B1J. L'indice j identifie la position du début du bloc B2, par rapport à l'adresse de début de la zone 46. Ici, pour simplifier la réalisation, le décalage entre le début du bloc B2, et l'adresse de début de la zone 46 est identique au décalage qui existe entre le début du bloc B1J et l'adresse de début de la zone 44. Dans ces conditions, les blocs B1J et B2, sont dit « appariés ». 20 [0043] La zone 42 comprend 2P blocs mémoires CBu de mêmes tailles. Chaque bloc CBu est associé à un bloc Bu de la zone 44 ou 46. L'indice i prend la valeur « 1 » pour identifier la zone 44 et la valeur « 2 » pour identifier la zone 46. [0044] Ici, chaque bloc CB comprend notamment les informations suivantes : - l'indication si le bloc Bu associé est libre, c'est-à-dire qu'il peut être utilisé pour 25 enregistrer une nouvelle donnée, - éventuellement, l'indication du bloc mémoire suivant lié à ce bloc Bu ou l'indication que ce bloc Bu est le dernier bloc d'une chaîne de blocs liés, - un code CD;; de détection d'erreur, - un masque MRu de recouvrement, et 30 - une marque MD;; indiquant si le bloc Bu est défectueux ou non. [0045] Le code CD;; est construit uniquement à partir de la valeur de la donnée contenue dans le bloc Bu. Ce code CD;; rajoute suffisamment de redondance à la donnée contenue dans le bloc Bu pour qu'il soit possible de détecter un ou plusieurs bits erronés dans la valeur de la donnée enregistrée dans ce bloc. 35 [0046] Par exemple, le code CD;; est un contrôle de redondance cyclique plus connu sous l'acronyme CRC (Cyclic Redundancy Check). Par exemple, le code CD;; est un CRC 32. [0047] Le masque MRu de recouvrement est une valeur utilisée pour transformer de façon réversible la valeur Du de la donnée à enregistrer dans le bloc Bu en une valeur 40 transformée D'u qui est enregistrée dans ce bloc Bu. Cette transformation est 2 9 83 5 9 7 10 réversible de sorte que, à partir de la valeur du masque dMRu et de la valeur transformée D'u, il est possible de retrouver la valeur Du de la donnée. [0048] La marque MD;; permet de mémoriser si le bloc Bu est défectueux ou non. Un bloc Bu défectueux est par exemple un bloc mémoire comportant des bits 5 d'informations dont les valeurs ne peuvent plus être réinscrites ou modifiées, ce qui entraîne l'apparition d'erreurs dans la valeur enregistrée dans ce bloc mémoire. [0049] La zone 42 comprend également des codes correcteurs d'erreur CCo, CC1 et CC2. Le Code CCo est construit à partir du contenu des zones 44 et 46. Il ajoute suffisamment de redondance au contenu mémorisé dans les zones 44 et 46 pour qu'il 10 soit possible non seulement de détecter mais également de corriger un ou plusieurs bits erronés des données enregistrées dans ces zones 44 et 46. De façon similaire, les codes CC1 et CC2 ajoutent suffisamment de redondances au contenu, respectivement, des zones 44 et 46, pour permettre de corriger k bits erronés dans les zones, respectivement, 44 et 46, où k est un entier naturel supérieur ou égal à un 15 et, de préférence, supérieur ou égal à cinq ou dix. Contrairement au code CCo, les codes CC1 et CC2 permettent uniquement de corriger des bits erronés dans, respectivement, les zones 44 et 46. Par exemple, ces codes de correction d'erreur sont des codes de Reed Solomon. [0050] La figure 3 représente une phase 50 d'enregistrement d'une donnée 20 confidentielle dans la mémoire 38. La donnée confidentielle est typiquement une clé cryptographique pour déchiffrer des mots de contrôle ou des titres d'accès autorisant ou non l'accès et le désembrouillage de contenus multimédias. [0051] Si la taille de la donnée est supérieure à la taille d'un bloc mémoire, alors celle-ci est d'abord divisée en plusieurs portions de taille inférieure chacune à la taille 25 d'un bloc mémoire pour se ramener au cas d'une donnée dont la taille est inférieure à la taille d'un bloc mémoire. Dans ce cas, les différentes portions de la même donnée sont par exemple chaînées les unes avec les autres en indiquant dans chaque bloc BC,, l'adresse du bloc mémoire suivant. [0052] Initialement, lors d'une étape 52, le calculateur 32 choisit parmi les différents 30 blocs mémoires des zones 44 et 46 une paire de blocs mémoires Bu satisfaisant aux conditions suivantes : - les blocs B1, et B2, sont appariés, - les blocs B1, et B2, sont libres, et - les blocs B1, et B2, ne sont pas marqués comme étant défectueux. 35 [0053] Le calculateur 32 vérifie si les blocs B1, et B2, choisis sont libres et non défectueux à partir des informations contenues dans les blocs BC1, et BC2, de la zone de contrôle 42. [0054] Par la suite, la valeur de la donnée à enregistrer dans les blocs B1, et B2, est notée, respectivement, Dl, et D2J. Ces valeurs sont identiques. [0055] Lors d'une étape 54, le calculateur 32 calcule la nouvelle valeur des codes CD1, et CD22 permettant de détecter une erreur, respectivement, dans les valeurs Di, et D2J. Lors de cette étape 54, le calculateur 32 calcule également les nouvelles valeurs des codes CCo, CC1 et CC2 de correction d'erreur et les enregistre dans la 5 zone 42. [0056] Les nouvelles valeurs des codes CD1, et CD2, sont enregistrées, respectivement, dans les blocs BC1, et BC2,. [0057] Le calculateur 32 enregistre également dans ses blocs BC1, et BC2, une indication selon lequel les blocs mémoires Bi, et B2, ne sont plus libres. 10 [0058] Ensuite, lors d'une étape 56, les valeurs Di, et D2, sont transformées, respectivement, en valeur D'i, et D'2, en fonction de la valeur des masques, respectivement, MR1, et MR2,. La valeur des masques MR1, et MR2, est contenue dans les blocs BC1, et BC2,. Les valeurs des masques MR1, et MR2, sont différentes de manière à ce que les valeurs transformées D'i, et D'2, soient différentes. 15 [0059] Par exemple, la transformation est réalisée à l'aide de la relation suivante : D'u = Du 0 MRu, où « 0 » est l'opération XOR. [0060] Ensuite, lors d'une étape 58, les valeurs D'i, et D'2, sont physiquement enregistrées, respectivement, dans les blocs mémoires Bi, et B2J. La phase 50 se termine alors. 20 [0061] Lors de son utilisation, le processeur 16 exécute un programme par exemple pour déchiffrer des mots de contrôle. Lors de l'exécution de ce programme, des instructions requièrent la lecture d'une donnée enregistrée dans la mémoire 38, telle qu'une clé cryptographique ou un titre d'accès. Le procédé de la figure 4 est alors exécuté. 25 [0062] Initialement, lors d'une étape 66, l'adresse du bloc mémoire à lire est enregistrée dans un registre non volatile d'adresse de lecture. Par exemple, ce registre est contenu dans la mémoire 38. [0063] Ensuite, on procède à une étape 68 de lecture de la donnée dans la mémoire 38 à l'adresse spécifiée. Plus précisément, lors d'une opération 70, les valeurs D'i, et 30 D'2, contenues dans les blocs mémoires appariés, respectivement, Bi, et B2, sont lues. [0064] Ensuite, lors d'une opération 72, le calculateur 32 applique la transformation inverse à celle appliquée lors de l'étape 56 du procédé de la figure 3. Pour cela, il utilise les valeurs des masques MR1, et MR2,. Les valeurs obtenues par application de cette transformation inverse pour les valeurs D'i, et D'2, sont notées par la suite, 35 respectivement, valeurs Di, et D2J. On notera qu'en cas d'erreur de lecture ou de corruption des données enregistrées, les valeurs Di, et D2, ne sont pas nécessairement identiques aux valeurs Di, et D2, enregistrées lors de la phase 50 d'écriture. [0065] Lors d'une étape 74, les valeurs Di, et D2, lues sont comparées. Si ces 40 valeurs sont égales, alors on procède à une étape 76 lors de laquelle le programme exécuté par le processeur 16 traite la valeur Dl, et poursuit son exécution normale. Par exemple, le calculateur 32 déchiffre un mot de contrôle à l'aide de la valeur Dl,. Lors de l'étape 76, aucune erreur de lecture n'est détectée. De plus, lors de l'étape 76, le registre d'adresse de lecture est effacé. [0066] A l'inverse, si les valeurs Dl, et D2, lues ne sont pas identiques, alors le programme en cours d'exécution est interrompu et une routine de vérification est exécutée par le calculateur 32. Par exemple, le processeur de sécurité est réinitialisé et lors du redémarrage du processeur de sécurité, la routine de vérification est systématiquement exécutée si le registre d'adresse de lecture n'est pas vide. La routine de vérification peut également être lancée par un déroutement sur erreur de l'exécution du programme. [0067] Une fois cette routine de vérification lancée, lors d'une étape 78, le calculateur 32 procède à une nouvelle tentative de lecture de la donnée enregistrée dans la mémoire 38. La nouvelle tentative de lecture consiste à lire la donnée correspondant à l'adresse enregistrée dans le registre d'adresse de lecture. L'étape 78 est par exemple identique à l'étape 68. [0068] Ensuite, lors d'une étape 80, le calculateur procède à une nouvelle comparaison des nouvelles valeurs Dl, et D2, lues lors de l'étape 78. [0069] Si cette fois-ci, les valeurs Dl, et D2, sont identiques, lors d'une étape 82, une erreur de lecture est détectée. En effet, la différence entre les valeurs Dl, et D2, lues lors de l'étape 68 ne provient pas d'une corruption des données enregistrées dans la mémoire 38. En fait, la détection d'une erreur de lecture indique dans le cas d'un processeur de sécurité, avec une très forte probabilité, que la première tentative de lecture lors de l'étape 68 a échouée à cause d'une attaque en lecture. [0070] Dès lors, en réponse, lors d'une étape 84, le calculateur 32 déclenche une contre-mesure limitant le désembrouillage des contenus multimédias. Ici, il empêche temporairement ou définitivement le désembrouillage des contenus multimédias à l'aide du processeur 16. Typiquement, pour cela le déchiffrement des mots de contrôle est inhibé. [0071] Plus précisément, la contre-mesure peut être l'une des contre-mesures suivantes : - l'effacement des données confidentielles contenues dans la mémoire 38 telles que les clés cryptographiques et les titres d'accès, - le déclenchement de l'autodestruction du processeur 16 de manière à le 35 rendre définitivement inutilisable, et - l'arrêt du déchiffrement des mots de contrôle temporairement ou définitif. [0072] Lors de l'étape 84, si le processeur 16 est encore utilisable malgré la mise en oeuvre d'une contre-mesure, le registre d'adresse de lecture est effacé. 2 9 83 5 9 7 13 [0073] Si les valeurs D1, et D2, lues lors de l'étape 78 sont différentes, alors cela signifie que les données enregistrées sont certainement corrompues. Il ne s'agit donc pas d'une erreur de lecture. [0074] Dans ce cas, lors d'une étape 86, le calculateur 32 vérifie à l'aide du code 5 CD,; si la valeur D1, est erronée. [0075] Si la valeur D1, n'est pas erronée, alors on procède à une étape 88 d'enregistrement de la valeur D1, dans de nouveaux blocs mémoires appariés des zones 44 et 46. Par exemple, l'étape 88 est réalisée de façon similaire à la phase 50 d'écriture. Dès, lors c'est la valeur enregistrée dans ces nouveaux blocs qui sera 10 utilisée lors de la prochaine lecture de la même donnée. [0076] Ensuite, lors d'une étape 90, les marques MD,; et MD2, sont mises à jour pour indiquer et mémoriser que les précédents blocs B1, et B2, sont défectueux. Ici, le bloc B1, est indiqué comme étant défectueux alors que la valeur qui y était enregistrée était correcte. Cela permet de conserver une gestion simple de l'appariement des blocs 15 mémoires. [0077] Lors de l'étape 90, le registre d'adresse de lecture est également effacé. Ensuite, la valeur D1, est traitée par le programme qui poursuit son exécution par l'étape 76. [0078] Si lors de l'étape 86, la valeur D1, est erronée, alors on procède à une étape 20 92 de vérification à l'aide du code CD2, si la valeur D2, est erronée ou correcte. [0079] Si la donnée D2, est correcte, alors on procède à une étape 94 identique à l'étape 88 sauf que c'est la valeur D2, qui est utilisée à la place de la valeur D1. L'étape 94 se poursuit également par l'étape 90. posol Si les valeurs D1, et D2, sont erronées, alors, le calculateur procède à une 25 étape 98 lors de laquelle il effectue une première tentative de correction de ces valeurs en utilisant le code CCo. Cette étape 98 permet au calculateur 32 de corriger k bits erronés répartis dans les zones 44 et 46. S'il y a moins de k bits erronés, la correction est alors considérée comme ayant réussi. Dans ce cas, on obtient des valeurs Dc, et Dc2, corrigées, respectivement, pour les valeurs D1, et D2, 30 [0081] Dans ce cas, lors d'une étape 100, le calculateur 32 compare les valeurs Dc, et Dc2j- [0082] Si les valeurs Dc, et Dc2, sont identiques, lors d'une étape 102, la valeur Dc1, est enregistrée dans deux nouveaux blocs mémoires, respectivement, des zones 44 et 46. Cette étape est par exemple identique à l'étape 88 sauf que c'est la valeur Dc, 35 qui est utilisée à la place de la valeur Dl,. [0083] Ensuite, on procède à une étape 104 lors de laquelle les blocs B1, et B2, sont marqués comme étant défectueux. Cette étape 104 est par exemple identique à l'étape 90. Le procédé retourne ensuite à l'étape 76. [0084] Si les valeurs Dc1, et Dc2, sont différentes ou si la correction d'erreur avec le 40 code CCo n'a pas réussi, le calculateur 32 procède à une étape 108 lors de laquelle il essaie de corriger les données de la zone 44 à l'aide du code CC1. Si la correction réussit, le calculateur 32 obtient une valeur Dc, corrigée de la valeur Dl,. Il est alors procédé à une étape 110 identique à l'étape 102. L'étape 110 se poursuit par l'étape 104. [0085] Si l'étape 108 est infructueuse et ne permet pas de corriger la valeur D1J, alors le calculateur exécute une étape 112 lors de laquelle il tente de corriger la valeur D2, à l'aide du code CC2. Si cette étape 112 réussit, le calculateur 32 obtient une valeur corrigée Dc2J. Il est alors procédé à une étape 114 identique à l'étape 94 sauf que c'est la valeur Dc2, qui est utilisée à la place de la valeur D2J. L'étape 114 se poursuit par l'étape 104. [0086] S'il n'a pas été possible de corriger ni la valeur Dl, ni la valeur D2J, alors, lors d'une étape 116, le calculateur 32 établit que la donnée est perdue puisque celle-ci est erronée et ne peut pas être corrigée. Lors de cette étape 116, le calculateur 32 marque les blocs mémoires B1, et B2, comme étant défectueux. Cette opération est réalisée comme décrit en regard de l'étape 90. Ensuite, soit le programme est capable de gérer l'absence de valeur pour cette donnée et dans ce cas-là l'exécution du programme se poursuit. Si l'exécution du programme ne peut pas se poursuivre sans la valeur de la donnée, alors l'exécution du programme est arrêtée et le processeur de sécurité est par exemple réinitialisé. [0087] La figure 5 représente un procédé de protection du processeur 16 identique au procédé de la figure 4 sauf que les codes de correction d'erreur ne sont pas utilisés. Ainsi, dans ce procédé, les étapes 98 à 114 sont omises. De plus, dans le cas où les valeurs Dl, et D2, sont détectées comme étant toutes les deux erronées, on procède directement à l'étape 116. [0088] De nombreux autres modes de réalisation sont possibles. Par exemple, les opérations de transformation de la valeur enregistrée peuvent être omises. Dans ce cas, les étapes 56 et 72 sont omises. [0089] L'allocation de mémoire peut être une allocation de mémoire logique ou physique. [0090] L'algorithme utilisé pour détecter une erreur dans la valeur Dl, peut être différent de l'algorithme utilisé pour détecter une erreur dans la valeur D2J. Dans ce cas, les valeurs des codes CD1, et CD2, sont différentes. [0091] En variante, le code de détection d'une erreur est aussi utilisé après la correction de la valeur enregistrée à l'aide du code de correction d'erreur. Cela 35 permet de vérifier, si nécessaire, que la valeur corrigée est correcte. [0092] Dans une autre variante, le code CCo est omis, ou à l'inverse, les codes CC1 et CC2 sont omis ou aucun code correcteur d'erreur n'est utilisé. [0093] Dans une autre variante, un code correcteur d'erreur est uniquement utilisé pour une seule des zones mémoires. 2 98359 7 15 [0094] Le code correcteur d'erreur n'est pas nécessairement commun pour toute une zone de mémoire. En variante, le code correcteur d'erreur est construit pour un groupe restreint de plusieurs blocs d'une zone mémoire. Un code correcteur d'erreur peut également être construit pour chaque bloc mémoire et uniquement pour ce bloc 5 mémoire. Dans ce cas, de préférence, le code correcteur d'erreur remplace le code de détection d'erreur. En effet, quasiment tous les codes de correction d'erreur permettent également la détection d'une erreur. [0095] Le code correcteur d'erreur peut également être commun aux valeurs Dl, et 10 [0096] Le code correcteur d'erreur peut être construit selon d'autres algorithmes tels que l'algorithme de Hamming ou un turbocode. [0097] Lorsqu'un bloc mémoire B1, est détecté comme étant défectueux, il n'est pas nécessaire que le bloc mémoire B2, qui lui est apparié soit également systématiquement marqué comme étant également défectueux. En variante, le bloc 15 B2, est marqué comme étant défectueux uniquement si le code CD2, associé à ce bloc confirme que la donnée qu'il contient est également erronée. Dans le cas contraire, une table associe à l'adresse de chaque bloc B1, l'adresse du bloc apparié B2J. Dans ce cas, cette table est modifiée pour associer un nouveau bloc B'1, utilisé pour remplacer le précédent bloc B1, à l'adresse du bloc B2J. 20 [0098] La zone 42 de contrôle peut être enregistrée dans les blocs de la zone 44. Dans ces conditions, comme tous les blocs de cette zone 44, elle est dupliquée dans la zone 46. Cela permet donc de protéger la zone de contrôle contre la corruption de données ou les erreurs de lecture de la même façon que de n'importe quel autre bloc de ces zones 44 et 46. 25 [0099] La transformation de la valeur Du en une valeur D'u peut être omise ou uniquement mise en oeuvre pour l'une des zones 44 ou 46. [cm 00] L'ordre de certaines opérations ou étapes des procédés décrits ici peut être modifié. Par exemple, le calcul du code de détection d'erreur est réalisé après la transformation de la valeur Du en une valeur transformée D'u. Dans ce cas, lors de la 30 lecture, la vérification que la donnée lue est correcte ou erronée est réalisée à partir de la valeur D'u et non pas de la valeur Du. [00101] En variante, avant de mettre à jour la marque MD;; d'un bloc défectueux, le calculateur vérifie que le bloc Bu est réellement défectueux. Par exemple, il réalise les opérations suivantes : a) Ecriture d'une valeur Du dans le bloc Bu concerné, puis b) Lecture de la valeur Du enregistrée dans ce bloc Bu, c) Comparaison des valeurs écrite et lue, puis d) Si ces valeurs sont égales, les opérations a) à c) sont réitérées au moins N fois. Sinon, la marque MD;; est mise à jour pour indiquer que le bloc Bu est défectueux. 2983 597 16 [00102] Typiquement, le nombre N est supérieur à deux et, de préférence, supérieur à dix. [00103] Si les opérations précédentes a) à d) sont souvent mises en oeuvre pour un même bloc Bu mais que la vérification précédente conduit à chaque fois à laisser le 5 bloc Bu comme étant utilisable, une valeur particulière peut être affectée à la marque MD,, indiquant que ce bloc Bu est peu sûr. Dans ces conditions, tant que cela est possible, le bloc Bu n'est pas choisi pour y enregistrer de nouvelles données. Par contre, s'il n'existe plus d'autres blocs mémoires plus sûrs disponibles, ce bloc Bu sera alors utilisé pour enregistrer une donnée. 10 [00104] Chacune des mémoires décrites ici peut être réalisée sous la forme d'un seul composant électronique ou d'une association de plusieurs composants électroniques raccordés indépendamment les uns des autres au calculateur 32. Par exemple, les zones 44 et 46 peuvent correspondre à deux mémoires physiquement distinctes reliées chacune par son propre bus de lecture au calculateur 32. 15 [00105] Plus de deux zones mémoires redondantes peuvent être mises en oeuvre. Dans ce cas, la valeur de la donnée copiée dans cette mémoire est copiée dans chacune de ces zones mémoires. Les procédés décrits ci-dessus peuvent facilement être adaptés au cas de W zones mémoires où W est un entier strictement supérieur à deux. 20 [00106] Ce qui a été décrit précédemment peut également s'appliquer à une mémoire non volatile.