Brevet FR3010561A1 — publié le 20150313

PROCEDE DE PROTECTION DE L'INTEGRITE DE DONNEES A L'AIDE D'UN NOMBRE IDEMPOTENT La présente invention concerne la protection contre l'injection de faute de données manipulées par un circuit de traitement de données. Elle s'applique notamment à la protection d'un processeur, qu'il soit intégré dans un microcircuit comme ceux implantés dans les cartes à puce, ou dans un ordinateur. L'injection de faute dans un circuit de traitement vise généralement à découvrir des données sensibles manipulées par le circuit. Parmi les attaques connues d'un circuit, les attaques par injection de faute consistent à introduire des perturbations dans le circuit en particulier pendant qu'il exécute des opérations sensibles telles que des algorithmes cryptographiques. Ces attaques peuvent entrainer la modification d'une donnée ou d'une adresse dans un registre, sachant que généralement, il n'est pas possible de détecter qu'une donnée ou une adresse est invalide. La perturbation d'un registre d'adresse peut perturber l'exécution d'un programme et par exemple déclencher l'exécution d'une routine de téléchargement émettant sur un port des données mémorisées par le circuit. Ces perturbations peuvent être réalisées en appliquant au circuit un ou plusieurs éclairages brefs par exemple par un faisceau laser, ou un ou plusieurs pics de tension sur l'un de ses contacts. Afin de lutter contre ces attaques variées par nature, de nombreuses solutions très différentes les unes des autres ont été apportées. L'invention concerne plus particulièrement la lutte contre les attaques portant atteinte à l'intégrité de données et d'adresses lors de leur manipulation par un circuit de traitement. A cet effet, il est connu d'associer à chaque donnée une signature par exemple du type CRC (Cyclic Redundancy Check), calculée à partir de la donnée. Une telle signature convient notamment pour détecter une erreur de transmission d'une donnée. En revanche, lorsque la donnée subit une transformation résultant par exemple de l'exécution de calculs, la signature d'origine de la donnée n'est plus cohérente avec la donnée en sortie du traitement. Une nouvelle signature doit donc être calculée à partir de la donnée de sortie si l'intégrité de la donnée de sortie doit être protégée. Il en résulte qu'une signature ne permet pas de détecter une perturbation se produisant durant un traitement. Il est donc souhaitable de protéger l'intégrité de données, y compris durant l'exécution d'un traitement portant sur ces données. Des modes de réalisation concernent un procédé de protection de l'intégrité d'une donnée dans un circuit de traitement, le procédé comprenant des étapes consistant à : choisir deux nombres entiers positifs, premiers entre eux, un premier des deux nombres étant supérieur à une donnée à protéger, encoder la donnée à protéger par une opération de multiplication par un nombre idempotent modulo le produit des deux nombres, le nombre idempotent étant choisi idempotent dans un anneau ayant un nombre d'éléments distincts égal au produit des deux nombres, et égal à un multiple d'un second des deux nombres et égal à un multiple du premier des deux nombres augmenté de un, et activer un signal d'erreur si une réduction modulaire modulo le second des deux nombres, de la donnée encodée n'est pas nulle. Selon un mode de réalisation, le procédé comprend des étapes de : fourniture de la donnée encodée en entrée d'un traitement réalisé par le circuit de traitement, le traitement comprenant une ou plusieurs opérations, chaque opération du traitement étant exclusivement soit une addition, soit une soustraction, soit une multiplication, application du traitement à la donnée encodée pour obtenir une nouvelle donnée encodée, les opérandes de chaque opération d'addition ou de soustraction du traitement étant encodées par l'opération de multiplication par le nombre idempotent modulo le produit des deux nombres, et activation du signal d'erreur si une réduction modulaire modulo le second des deux nombres, d'une des données encodées n'est pas nulle. Selon un mode de réalisation, le procédé comprend une étape de décodage d'une des données encodées en réalisant une réduction modulaire 30 modulo le premier des deux nombres, de la donnée encodée. Selon un mode de réalisation, le premier des deux nombres est choisi égal à 216 + 1, et le second des deux nombres est choisi égal à 28 - 1 ou 28 + 1. Selon un mode de réalisation, l'une des données encodées est fournie à l'entrée d'un coprocesseur générant le signal d'erreur en fonction de la donnée encodée fournie. Selon un mode de réalisation, le coprocesseur réalise le décodage de 5 la donnée encodée fournie en entrée du coprocesseur. Selon un mode de réalisation, la donnée encodée est une adresse d'accès à une donnée ou à une instruction de programme dans une mémoire, et est fournie à l'entrée d'une unité de contrôle de la mémoire, l'unité de contrôle générant le signal d'erreur en fonction de la donnée 10 encodée. Selon un mode de réalisation, l'unité de contrôle réalise le décodage de la donnée encodée fournie à l'unité de contrôle, pour obtenir une adresse d'accès à la mémoire ou une donnée à écrire dans la mémoire. Selon un mode de réalisation, chaque donnée encodée est décodée 15 seulement si le signal d'erreur généré à partir de la donnée encodée est à l'état inactif. Selon un mode de réalisation, la donnée encodée est une adresse d'instruction dans une mémoire programme, une adresse d'instruction consécutive suivante étant obtenue en ajoutant le nombre idempotent à la 20 donnée encodée. Des modes de réalisation concernent également un circuit de traitement de données, configuré pour : encoder une donnée à protéger par une opération de multiplication par un nombre idempotent modulo le produit de deux nombres entiers positifs, premiers entre eux, un premier des deux 25 nombres étant supérieur à la donnée reçue, le nombre idempotent étant choisi idempotent dans un anneau ayant un nombre d'éléments distincts égal au produit des deux nombres, et égal à un multiple d'un second des deux nombres et égal à un multiple du premier des deux nombres augmenté de un, et activer un signal d'erreur si une réduction modulaire modulo le second 30 des deux nombres, de la donnée résultante encodée n'est pas nulle. Selon un mode de réalisation, le circuit est configuré pour : transmettre la donnée encodée en entrée d'un traitement comprenant une ou plusieurs opérations, chaque opération du traitement étant exclusivement soit une addition, soit une soustraction, soit une multiplication, et appliquer le 35 traitement à la donnée encodée pour obtenir une nouvelle donnée encodée, les opérandes de chaque opération d'addition ou de soustraction du traitement étant encodées par l'opération de multiplication par le nombre idempotent modulo le produit des deux nombres. Selon un mode de réalisation, le circuit est configuré pour décoder l'une des données encodées en réalisant une réduction modulaire modulo le premier des deux nombres, de la donnée encodée. Selon un mode de réalisation, le circuit comprend un coprocesseur ou une unité de contrôle d'une mémoire configuré pour recevoir l'une des données encodées, et comprenant un circuit d'interface comportant un circuit de test configuré pour activer le signal d'erreur si une réduction modulaire modulo le second des deux nombres, de la donnée encodée reçue n'est pas nulle. Selon un mode de réalisation, le circuit d'interface comprend un circuit de décodage configuré pour appliquer une réduction modulaire modulo le 15 premier des deux nombres, à une donnée à décoder. Selon un mode de réalisation, le circuit comprend un coprocesseur réalisant les opérations de réduction modulaire modulo le produit des deux nombres. 20 Des exemples de réalisation de l'invention seront décrits dans ce qui suit, à titre non limitatif en relation avec les figures jointes parmi lesquelles : les figures 1 et 2 représentent schématiquement un processeur et un coprocesseur mettant en oeuvre un procédé de protection de l'intégrité de données, selon différents modes de réalisation, 25 les figures 3 à 5 représentent schématiquement un processeur et une mémoire, mettant en oeuvre le procédé de protection, selon divers modes de réalisation. Selon un mode de réalisation, le procédé de protection de l'intégrité de données met en oeuvre un nombre idempotent dans un anneau fini EN.R à 30 N-R (ou N x R) éléments distincts, N et R étant des nombres entiers positifs premiers entre eux et le nombre N étant plus grand que toutes les données à protéger. En d'autres termes, la taille en nombre de bits du nombre N (soit LOG2(N)) est choisie égale ou plus grande que la taille des données à protéger. Pour être idempotent, un nombre IP vérifie l'équation suivante : 35 IP-IP mod (N-R) = IP (1) dans laquelle mod représente l'opération de réduction modulaire. En outre, le nombre IP est choisi de manière à présenter les propriétés suivantes : IP = 1 mod N (2) IP = 0 mod R (3) II peut être démontré que les équations (2) et (3) sont équivalentes à l'équation suivante : IP = (R-1 mod N) - R (4) Il peut être également démontré que le nombre IP obtenu par l'équation (4) est idempotent dans l'anneau ZN.R. Ainsi, l'équation (4) peut être utilisée pour déterminer le nombre IP. A titre d'exemple extremement simplifié pour faciliter la compréhension, les nombres N et R peuvent être choisis égaux respectivement à 7 et 4 qui sont premiers entre eux. Le nombre inverse R-1 modulo N correspondant à R (= 4) peut être déterminé égal à 2 modulo 7. Il en résulte que IP est égal à 4x2 = 8. Le nombre IP vérifie l'équation (1) car IP- IP est égal à 64, soit 8 modulo 28 (28 = N-R). Le procédé comprend une étape d'encodage de chaque donnée (ou adresse) ID à protéger, consistant à multiplier la donnée par le nombre idempotent IP modulo (N-R), conformément à la relation suivante : ED = ID- IP mod (N-R) (5) ED étant la donnée encodée. Dans ce qui suit, le terme "donnée" peut également désigner une adresse d'une donnée ou d'une instruction exécutable par un processeur, dans une mémoire. L'intégrité de la donnée ED ainsi encodée peut être vérifiée à tout moment sur la base des relations (3) et (5), en calculant une donnée de contrôle T obtenue en appliquant l'opération de réduction modulaire modulo R à la donnée encodée ED et en comparant la donnée de contrôle à 0 : T = ED mod R (6) Ainsi, la donnée encodée ED est intègre si et seulement si la donnée T est nulle. La donnée encodée ED peut être décodée à tout moment sur la base des relations (2) et (5). Ainsi, la donnée D correspondant à la donnée encodée ED peut être calculée par application de l'opération de réduction modulo N à la donnée ED : D = ED mod N (7) Il s'avère qu'une donnée encodée peut subir un traitement comprenant plusieurs opérations arithmétiques élémentaires, sans devoir être décodée et à nouveau encodée. Cette propriété peut être vérifiée si les opérations arithmétiques élémentaires sont limitées à des opérations d'addition, de soustraction et de multiplication, en excluant les opérations de division. La donnée résultante du traitement doit être calculée modulo (N-R). Les données résultant d'opérations intermédiaires du traitement, peuvent également être calculées modulo (N-R). Chaque opérande des opérations d'addition et de soustraction du traitement G doit elle-même être encodée par la relation (5) ou résulter du produit d'un nombre entier relatif par une ou plusieurs données encodées par la relation (5). Ainsi un traitement G ayant les propriétés précitées peut être modélisé par la relation suivante : G(ID) = j ai IDmi-F Euk ai IDk' (8) dans laquelle les nombres ai sont des entiers relatifs, les nombres mi, i, j et k sont des nombres entiers positifs et IDk sont d'autres données. Si le traitement G est appliqué aux données encodées correspondantes modulo (N-R), on obtient : G(ED) = [Ei aiEDmi + ai EDI mod (N - R) (9) dans laquelle ED et EDk sont des données encodées obtenues en appliquant la relation (5) aux données ID et IDk. Il résulte des relations (1), (5) et (9) que : G(ED) = IP - [Ei j ai IDmi+ Eilk ai mod (N - R) (10) Il résulte des relations (8) et (10) que : G(ED) = IP-G(ID) mod (N-R) (1 1 ) Par conséquent, la donnée G(ED) résultant de l'application du traitement G modulo (N-R) aux données encodées ED, EDk est égale au résultat de l'encodage, par application de la relation (5), de la donnée G(ID) résultant de l'application du traitement G aux données non encodées ID, IDk correspondantes. D'après la relation (5), l'encodage d'une donnée produit une donnée encodée ayant une taille en nombre de bits augmentée de la taille en nombre de bits du nombre R (soit LOG2(R)). Si la taille du nombre N correspond à la taille des données à protéger, la taille des données encodées est égale à la somme de la taille du nombre N et de la taille du nombre R. L'ensemble EN.R comprend N-R nombres distincts modulo (N-R), parmi lesquels seuls N nombres sont valides, c'est-à-dire vérifient la condition T = 0 et sont susceptibles d'être décodés par la relation (7). Il en résulte que plus le nombre R est choisi grand, plus la probabilité (= 1/R) qu'une injection de faute génère une donnée valide est faible. La figure 1 représente un dispositif de traitement de données comprenant un processeur PRC associé à un coprocesseur CPR assurant pour le processeur PRC un traitement particulier CF1 tel qu'un traitement cryptographique. Le processeur PRC exécute un traitement FCT recevant en entrée des données ID1, ID2, IDp et fournissant en sortie une donnée résultante RD qui est transmise à un registre d'entrée RG1 du coprocesseur CPR pour être traitée par le traitement CF1 réalisé par le coprocesseur. Le traitement FCT est de la forme du traitement G tel que modélisé par la relation (8). En d'autres termes, le traitement FCT ne comporte que des opérations arithmétiques élémentaires (addition, soustraction, multiplication) à l'exclusion de la division. Selon un mode de réalisation, les données ID1, ID2, IDp sont encodées en leur appliquant la relation (5), de manière à obtenir des données encodées ED1, ED2, EDp. Les données encodées ED1-EDp sont fournies en entrée du traitement FCT. La donnée résultante fournie par le traitement FCT est ensuite réduite modulo (N-R) afin d'obtenir une donnée résultante encodée ERD qui est introduite dans le registre RG1 du coprocesseur CPR. L'opération de réduction modulo (N-R) peut être appliquée à des résultats intermédiaires du traitement FCT. Cette disposition permet notamment d'éviter que la taille d'éventuelles données résultant de traitements intermédiaires, dépasse celle de registres du processeur PRC utilisés pour réaliser le traitement FCT. Les données ID1, ID2, IDp peuvent être des adresses, sachant que les adresses ne subissent généralement que des opérations d'addition, de soustraction et de multiplication. Par ailleurs, le coprocesseur CPR comporte un circuit décodage INTF pouvant comprendre le registre RG1. Le circuit INTF comprend également des circuits MR, MN connectés à une sortie du registre RG1, et un interrupteur 11 commandé par le circuit MR. L'interrupteur 11 est connecté entre la sortie du registre RG1 et l'entrée du circuit MN. Le circuit MN est configuré pour décoder la donnée dans le registre RG1 en lui appliquant une opération de réduction modulaire modulo N conformément à la relation (7). La sortie du circuit MN est connectée à une entrée du traitement CF1 pour lui transmettre la donnée décodée RD correspondant à la donnée codée ERD figurant dans le registre RG1. Le circuit MR est configuré pour réaliser une réduction modulo R du contenu du registre RG1, pour comparer à 0 le résultat de la réduction modulo R (test de la relation (6) T = 0), et pour fournir un signal d'erreur FS dépendant du résultat de cette comparaison. Le signal FS est fourni en sortie du coprocesseur CPR et commande l'interrupteur 11. Si le signal FS est à l'état inactif, indiquant que la donnée dans le registre RG1 vérifie la relation T = 0, l'interrupteur 11 est fermé, sinon il reste ouvert. Ainsi, la donnée dans le registre RG1 est décodée et transmise en entrée du traitement CF1 seulement si elle est valide (relation T = 0 vérifée). Le coprocesseur CPR est donc configuré pour détecter qu'une donnée inscrite dans son registre d'entrée RG1 a subi une perturbation, soit parce qu'une donnée d'entrée du traitement FCT a subi une perturbation, soit pendant que le traitement FCT est actif, soit durant la transmission de cette donnée entre le processeur PRC et le coprocesseur CPR. L'interrupteur 11 permet d'éviter d'activer le traitement CF1 du coprocesseur CPR avec des données invalides. En effet, introduire des données invalides dans un circuit de traitement peut permettre de découvrir des données secrètes mises en oeuvre par le circuit de traitement. Toutefois l'interrupteur 11 peut être omis notamment pour permettre d'effectuer la vérification par le circuit MR et le décodage par le circuit MN en même temps. Le signal d'erreur FS peut être traité ultérieurement. L'interrupteur 11 peut être également omis si la donnée dans le registre RG1 peut ne pas être encodée dans certaines conditions notamment lorsque le traitement CF1 n'est pas appliqué à des données secrètes. A noter que le décodage effectué par le circuit MN, lorsqu'il est appliqué à une donnée non encodée, ne modifie pas la donnée. Lorsqu'une donnée doit subir des traitements plus complexes mettant en oeuvre d'autres opérations que des opérations d'addition, de soustraction et de multiplication, la donnée peut être décodée par exemple par le processeur PRC, à l'aide de la relation (7), avant d'être soumise à un traitement complexe. Chaque donnée résultant du traitement complexe peut ensuite être encodée à l'aide de la relation (5). Le processeur PRC peut 301056 1 9 également être configuré pour tester l'intégrité d'une donnée par la relation (6) à tout moment, en particulier avant de décoder une donnée. Le signal FS peut être transmis au processeur PRC et/ou à un circuit de traitement d'erreur, pour prendre toute mesure appropriée dépendant 5 notamment de l'objet dans lequel est intégré le processeur PRC. Ainsi, si le processeur PRC se trouve dans un circuit intégré, le signal FS peut révéler une attaque du circuit intégré. Dans ce cas, l'activation du signal FS peut par exemple déclencher une réinitialisation ou un blocage définitif du circuit intégré, et/ou un effacement complet d'une mémoire ou seulement de 10 données sensibles, etc. L'activation du signal FS peut aussi simplement déclencher le remplacement des données d'entrée du traitement CF1 par des données choisies aléatoirement. Selon un mode de réalisation, les nombres N et R sont choisis tels que le produit N-R puisse être stocké dans un registre du processeur PRC. 15 Selon un mode de réalisation, le nombre N est choisi égal à 216 + 1, et le nombre R est choisi égal à 28 - 1 ou 28 + 1. Dans ces conditions, les nombres N et R sont premiers entre eux, et les opérations de réduction modulaires modulo (N-R), modulo N et modulo R peuvent être réalisées par des calculs simples et peu couteux en termes de ressources et de temps de 20 calcul. Selon un mode de réalisation illustré par la figure 2, les opérations d'encodage des données, conformes à la relation (5), sont réalisées par un circuit de traitement du coprocesseur CPR (ou d'un autre coprocesseur connecté au processeur PRC). Ainsi, la figure 2 représente le processeur 25 PRC et un coprocesseur CPR1. Le coprocesseur CPR1 diffère du coprocesseur CPR en ce qu'il comprend en outre un circuit de traitement CF2. Le circuit CF2 comprend un circuit ECC réalisant l'opération d'encodage, et un registre d'entrée/sortie RG2 dans lequel le processeur PRC inscrit une donnée à encoder et dans lequel le circuit ECC inscrit la 30 donnée encodée correspondante. Par ailleurs, le processeur PRC est configuré pour faire réaliser les opérations d'encodage de données conformes à la relation (5) par le coprocesseur CPR1. Selon un mode de réalisation, les opérations de réduction modulaire modulo (N-R) effectuées par le circuit de traitement FCT et/ou sur la donnée 35 résultante fournie par le traitement FCT sont réalisées par le coprocesseur CPR1 ou un autre coprocesseur, notamment afin de décharger ce dernier d'opérations qui peuvent être couteuses en temps de calcul. Ainsi, dans l'exemple de la figure 2, le circuit CF2 du coprocesseur CPR1 comprend un circuit MRC réalisant l'opération de réduction modulaire modulo (N-R), et un registre d'entrée/sortie RG3 dans lequel le processeur PRC inscrit une donnée à traiter par le circuit MRC, et dans lequel le circuit MRC inscrit la donnée réduite correspondante. Par ailleurs, le processeur PRC est configuré pour faire réaliser les opérations de réduction modulaires modulo (N-R) par le coprocesseur CPR1. Les opérations de réduction modulaire réalisées par les circuits MR et 10 MN peuvent être également directement accessibles au processeur PRC pour pouvoir effectuer à tout moment des décodages et des tests d'intégrité de données, tout en limitant l'utilisation des ressources du processeur. Le procédé de protection de données décrit précédemment peut être également appliqué aux adresses d'accès à une mémoire. Ainsi, la figure 3 15 représente le processeur PRC, une mémoire MEM et une unité de contrôle de mémoire MCU reliant un bus d'adresse ADB et un bus de donnée DTB du processeur PRC à la mémoire MEM. Selon un mode de réalisation, l'unité MCU comprend le circuit de décodage INTF précédemment décrit. Le registre RG1 est relié au bus 20 d'adresse ADB du processeur PRC. Le circuit MN est connecté en sortie à une entrée d'adresse de la mémoire MEM. L'entrée d'adresse de la mémoire peut être connectée à un registre d'adresse ARG de la mémoire MEM. Les adresses transmises par le processeur PRC au bus d'adresse ADB, sont des adresses encodées à l'aide de la relation (5) ou des adresses calculées à 25 l'aide d'opérations d'addition, de soustraction et/ou de multiplication, modulo (N-R), portant sur des données encodées à l'aide de la relation (5). Selon un mode de réalisation, la mémoire MEM est une mémoire de données. Si le processeur PRC exécute un programme, toutes les adresses immédiates d'accès à une donnée dans la mémoire MEM et toutes les 30 valeurs immédiates ajoutées ou retranchées pour calculer une adresse d'accès à la mémoire MEM, figurant dans le programme peuvent être encodées à l'aide de la relation (5). L'encodage des adresses et valeurs immédiates figurant dans le programme exécuté par le processeur peut être effectué au moment de la génération du code exécutable par le processeur 35 PRC, par exemple par un compilateur. L'encodage des adresses et valeurs immédiates peut également être effectué au moment de l'exécution du programme par le processeur. Le compilateur peut alors insérer dans le programme les instructions nécessaires pour réaliser cet encodage. Le compilateur peut également ajouter dans le programme exécuté par le processeur PRC, des opérations de réduction modulaires modulo (N-R), à la suite d'opérations d'addition, de soustraction et de multiplication permettant de déterminer une adresse d'accès à la mémoire MEM. Certaines données manipulées par un processeur et devant être stockées dans une mémoire de données peuvent ne subir que des opérations d'addition, de soustraction et/ou de multiplication. Selon un mode de réalisation illustré par la figure 4, ces données sont encodées à l'aide de la relation (5) et les opérations qu'elles subissent sont réalisées modulo (N-R), les données résultant de ces opérations sont transmises sur le bus de données vers la mémoire MEM. Ainsi, la figure 4 représente le processeur PRC relié à la mémoire MEM par l'intermédiaire d'une unité de contrôle de mémoire MCU1. L'unité MCU1 diffère de l'unité MCU en ce que le circuit de décodage INTF est interposé sur le bus de données DTB. Les données transmises par le processeur PRC sur le bus DTB sont préalablement encodées en leur appliquant la relation (5). Selon un mode de réalisation, les données à transmettre à la mémoire MEM subissent un décodage par le circuit MN du circuit INTF avant d'être inscrites dans la mémoire MEM. Les données lues dans la mémoire MEM peuvent alors subir un encodage par le processeur PRC ou par un circuit d'encodage (non représenté) qui peut être intégré dans le circuit INTF, avant d'être utilisées dans des traitements. Selon un autre mode de réalisation, les données transmises à la mémoire MEM sont mémorisées dans cette dernière sans être préalablement décodées. Dans ce cas, les données sont transmises par le circuit de décodage INTF à la mémoire MEM sans être traités par le circuit MN. Les données peuvent être décodées seulement lorsqu'elles sont transmises à un circuit d'entrée/sortie connecté au processeur PRC pour être utilisées par un dispositif externe, ou avant de subir un traitement faisant intervenir d'autres opérations qu'une addition, soustraction ou multiplication. Selon un autre mode de réalisation illustré par la figure 5, l'unité de 35 contrôle MCU est connectée entre le processeur PRC et une mémoire programme PMM contenant un programme exécuté par le processeur PRC. Le processeur PRC comprend un registre IRG de pointeur d'instruction mémorisant une adresse d'instruction à lire dans la mémoire PMM et exécuter. Toutes les adresses d'accès à la mémoire PMM et toutes les valeurs ajoutées ou retranchées pour mettre à jour le registre IRG, figurant dans le programme exécuté par le processeur PRC, peuvent être encodées à l'aide de la relation (5) au moment de la génération du code exécutable par le processeur PRC, par exemple par un compilateur. Le compilateur peut également ajouter aux opérations d'addition, de soustraction et de multiplication permettant de générer une adresse d'accès à la mémoire PMM des opérations de réduction modulaire modulo (N-R). Par ailleurs, lorsque le processeur PRC doit accéder à une instruction suivante, en l'absence de saut d'adresse, le processeur est configuré pour incrémenter l'adresse contenue dans le registre IRG non pas de un, mais de la valeur du nombre idempotent IP modulo (N - R). De cette manière, une attaque visant à perturber le contenu du registre de pointeur d'instruction IRG du processeur a une probabilité faible de remplacer le contenu de ce registre par une adresse qui serait considérée valide par le circuit MR. Il est à noter que l'opération de vérification d'une donnée encodée, réalisée par le circuit MR, et l'opération de décodage réalisée par le circuit MN, peuvent être exécutées à tout moment, par le processeur PRC, le coprocesseur CPR, CPR1 ou l'unité de contrôle MCU. Par ailleurs, dans les modes de réalisation des figures 3 à 5, les adresses d'accès à la mémoire MEM, PMM peuvent être des adresses virtuelles qui sont traduites en adresses réelles par l'unité MCU. Les modes de réalisation des figures 3 à 5 peuvent être appliqués seulement à une zone particulière de la mémoire MEM, PMM, par exemple une zone mémoire mémorisant des données sensibles ou des instructions réalisant une fonction de cryptographie. Il apparaîtra clairement à l'homme de l'art que la présente invention est susceptible de diverses variantes de réalisation et diverses applications. Ainsi, l'opération de décodage d'une donnée encodée peut ne pas être nécessaire. En effet, dans certains traitements, la valeur réelle d'une donnée peut ne pas être utile. En outre, il n'est pas nécessaire d'appliquer un traitement à une donnée à protéger. En effet, la protection d'une donnée est assurée selon l'invention, dès lors qu'elle est mise sous une forme encodée par la relation (5). A noter également que les opérations de réduction modulo N-R ne sont effectuées que pour éviter que la taille des données encodées soit trop grande, par exemple pour limiter la taille des données encodées à la taille des registres internes du processeur PRC. Par conséquent, si les données traitées sont de suffisamment petite taille ou si les registres, bus et autres éléments matériels du processeur sont de tailles suffisantes relativement aux données traitées, il est possible qu'aucune opération de réduction modulaire modulo N-R ne doive être appliquée. Par ailleurs, tout ou partie des modes de réalisation précédemment décrits peuvent être combinés entre eux sans sortir du cadre de la présente invention, tel que défini par les revendications annexées. REVENDICATIONS1. Procédé de protection de l'intégrité d'une donnée dans un circuit de traitement (PRC), le procédé comprenant des étapes consistant à : choisir deux nombres entiers positifs (N, R), premiers entre eux, un premier (N) des deux nombres étant supérieur à une donnée à protéger (ID), encoder la donnée à protéger par une opération de multiplication par un nombre idempotent (IP) modulo le produit (N-R) des deux nombres, le nombre idempotent étant choisi idempotent dans un anneau ayant un nombre d'éléments distincts égal au produit des deux nombres, et égal à un multiple d'un second (R) des deux nombres et égal à un multiple du premier des deux nombres augmenté de un, et activer un signal d'erreur (FS) si une réduction modulaire modulo le second des deux nombres, de la donnée encodée (ED) n'est pas nulle. 2. Procédé selon la revendication 1, comprenant des étapes de : fourniture de la donnée encodée (ED) en entrée d'un traitement (FCT) réalisé par le circuit de traitement, le traitement comprenant une ou plusieurs opérations, chaque opération du traitement étant exclusivement soit une addition, soit une soustraction, soit une multiplication, application du traitement à la donnée encodée pour obtenir une nouvelle donnée encodée (ERD), les opérandes de chaque opération d'addition ou de soustraction du traitement étant encodées par l'opération de multiplication par le nombre idempotent (IP) modulo le produit (N-R) des deux nombres (N, R), et activation du signal d'erreur (FS) si une réduction modulaire modulo le 25 second (R) des deux nombres, d'une des données encodées n'est pas nulle. 3. Procédé selon la revendication 1 ou 2, comprenant une étape de décodage d'une des données encodées (ED, ERD) en réalisant une réduction modulaire modulo le premier (N) des deux nombres (N, R), de la 30 donnée encodée. 4. Procédé selon l'une des revendications 1 à 3, dans lequel le premier (N) des deux nombres (N, R) est choisi égal à 216 + 1, et le second (R) des deux nombres est choisi égal à 28 - 1 ou 28 + 1. 5. Procédé selon l'une des revendications 1 à 4, dans lequel l'une des données encodées (ED, ERD) est fournie à l'entrée d'un coprocesseur (CPR, CPR1) générant le signal d'erreur (FS) en fonction de la donnée encodée fournie. 6. Procédé selon la revendication 5, dans lequel le coprocesseur (CPR, CPR1) réalise le décodage de la donnée encodée (ED, ERD) fournie en entrée du coprocesseur. 7. Procédé selon l'une des revendications 1 à 6, dans lequel la donnée encodée est une adresse d'accès à une donnée ou à une instruction de programme dans une mémoire (MEM, PMM), et est fournie à l'entrée d'une unité de contrôle (MCU, MCU1) de la mémoire, l'unité de contrôle générant le signal d'erreur (FS) en fonction de la donnée encodée. 8. Procédé selon la revendication 7, dans lequel l'unité de contrôle (MCU, MCU1) réalise le décodage de la donnée encodée (ED, ERD) fournie à l'unité de contrôle, pour obtenir une adresse d'accès à la mémoire (MEM, PMM) ou une donnée à écrire dans la mémoire. 9. Procédé selon l'une des revendications 1 à 8, dans lequel chaque donnée encodée (ED, ERD) est décodée seulement si le signal d'erreur (FS) généré à partir de la donnée encodée est à l'état inactif. 10. Procédé selon l'une des revendications 1 à 9, dans lequel la 30 donnée encodée (ED, ERD) est une adresse d'instruction dans une mémoire programme (PMM), une adresse d'instruction consécutive suivante étant obtenue en ajoutant le nombre idempotent (IP) à la donnée encodée. 11. Circuit de traitement de données, configuré pour :encoder une donnée (ID) à protéger par une opération de multiplication par un nombre idempotent (IP) modulo le produit (N-R) de deux nombres entiers positifs (N, R), premiers entre eux, un premier des deux nombres (N) étant supérieur à la donnée reçue, le nombre idempotent étant choisi idempotent dans un anneau ayant un nombre d'éléments distincts égal au produit des deux nombres, et égal à un multiple d'un second (R) des deux nombres et égal à un multiple du premier des deux nombres augmenté de un, et activer un signal d'erreur (FS) si une réduction modulaire modulo le 10 second des deux nombres, de la donnée résultante encodée n'est pas nulle. 12. Circuit selon la revendication 11, configuré pour : transmettre la donnée encodée (ED) en entrée d'un traitement (FCT) comprenant une ou plusieurs opérations, chaque opération du traitement 15 étant exclusivement soit une addition, soit une soustraction, soit une multiplication, et appliquer le traitement à la donnée encodée pour obtenir une nouvelle donnée encodée (ERD), les opérandes de chaque opération d'addition ou de soustraction du traitement étant encodées par l'opération de multiplication 20 par le nombre idempotent modulo le produit (N - R) des deux nombres (N, R). 13. Circuit selon la revendication 11 ou 12, configuré pour décoder l'une des données encodées (ED, ERD) en réalisant une réduction modulaire modulo le premier (N) des deux nombres (N, R), de la donnée encodée. 25 14. Circuit selon l'une des revendications 11 à 13, comprenant un coprocesseur (CPR, CPR1) ou une unité de contrôle (MCU, MCU1) d'une mémoire (MEM, PMM) configuré pour recevoir l'une des données encodées (ED, ERD), et comprenant un circuit d'interface (INTF) comportant un circuit 30 de test (MR) configuré pour activer le signal d'erreur (FS) si une réduction modulaire modulo le second (R) des deux nombres (N, R), de la donnée encodée reçue n'est pas nulle. 15. Circuit selon la revendication 14, dans lequel le circuit d'interface 35 (INTF) comprend un circuit de décodage (MN) configuré pour appliquer uneréduction modulaire modulo le premier (N) des deux nombres (N, R), à une donnée à décoder. 16. Circuit selon l'une des revendications 11 à 15, comprenant un coprocesseur (CPR1) réalisant les opérations de réduction modulaire modulo le produit des deux nombres (N, R).