Brevet FR3059119A1 — publié le 20180525

DOMAINE DE L'INVENTION La présente invention concerne un procédé de protection d'un dispositif électronique exécutant un programme contre des attaques par injection de faute et par confusion de type mises en oeuvre sur une variable destinée à être utilisée par le programme. ETAT DE LA TECHNIQUE De façon connue, une attaque par injection de faute consiste à perturber l'environnement physique d'un dispositif électronique qui exécute un programme, de sorte à modifier la valeur mémorisée par le dispositif d'une variable destinée à être utilisée par le programme. De telles perturbations peuvent être produites de différentes manières: variation d'une tension d'alimentation, variation d'une fréquence d'horloge du dispositif, émission de rayonnement électromagnétique ou laser, etc. Pour protéger une variable contre une attaque par injection de faute, plusieurs types de contremesures existent. Une première contremesure pour protéger une variable contre une attaque par injection de faute consiste à simplement dupliquer le contenu de la pile d'exécution dans une pile de sauvegarde. Pour vérifier l'intégrité d'une variable, on compare la valeur de la variable mémorisée dans la pile d'exécution et la valeur de sa copie dans la pile de sauvegarde. Si les deux valeurs comparées sont différentes, une faute est détectée. Une deuxième contremesure, décrite dans le document EP1960934B1, consiste à calculer une donnée de contrôle d'intégrité Q sur la variable et mémoriser cette donnée de contrôle d'intégrité dans une pile de contrôle dédiée. Pour appliquer ce principe de protection, deux piles indépendantes sont allouées dans la mémoire du dispositif, comme cela est représenté en figure la : - une pile d'exécution P1 contenant la valeur de chaque variable destinée à être utilisée par le programme, et - une pile de contrôle P2 contenant les données de contrôle d'intégrité Q sur chaque variable. Sont également prévus deux registres d'index : - un premier registre d'index ind1 contenant des données d'adressage adaptées pour localiser les variables contenues dans la pile d'exécution P1, et - un deuxième registre d'index ind2 contenant des données d'adressage adaptées pour localiser les données de contrôle d'intégrité contenues dans la pile de contrôle P2. 3059119 2 Pour vérifier l'intégrité d'une variable, on lit la valeur courante de cette variable présente dans la pile d'exécution (cette valeur étant localisée grâce à une donnée d'adressage associée à la variable, présente dans le premier registre d'index indl ), on met en oeuvre un calcul d'intégrité sur la base de la valeur lue et on compare le résultat de ce 5 calcul à la donnée d'intégrité associée à la variable qui est présente dans la pile de contrôle (la donnée d'intégrité étant localisée grâce à une donnée d'adressage correspondante dans le deuxième registre d'index ind2). Si les deux valeurs comparées sont différentes, une faute est détectée. Cependant, la solution présentée dans le document EP1960934B1 ne permet pas de 10 protéger une variable contre une attaque dite par - confusion de type », par exemple mise en oeuvre pour attaquer un programme JavaCard exécuté par une machine virtuelle. Une attaque par confusion de type consiste à forcer une référence d'un type donné vers un objet de type différent ensuite à accéder à un objet au travers d'une référence de type invalide afin de réaliser des opérations interdites par la machine virtuelle, par exemple 15 accéder à la mémoire au-delà des bornes de l'objet. Ainsi, pour protéger des variables contre des attaques par injection de faute et également par confusion de type, il pourrait être envisagé d'utiliser, conformément à la figure 1 b : - trois piles différentes : la pile d'exécution P1 pour mémoriser la valeur V d'une 20 variable, et une pile de contrôle P2 pour mémoriser une donnée de contrôle d'intégrité Q représentative du type de la variable, et une pile de sauvegarde P3 pour mémoriser une copie de la valeur V; - trois registres d'index différents : indl , ind2 et ind3 contenant des données d'adressage A, A2, A3 pour localiser les données respectivement contenues dans les 25 trois piles Pl, P2 et P3. Dans ce cadre, un attaquant devrait modifier la valeur V dans la pile Pl, la copie de cette valeur dans la pile P3, et la donnée Q dans la pile P2 de façon cohérente afin de réussir son attaque. Or, la probabilité de déclencher de telles modifications cohérentes est faible. La cohérence des informations contenues dans les trois piles P1, P2, P3 offre donc 30 un haut niveau de protection de la variable. Toutefois, une telle solution aurait pour inconvénient d'être consommatrice en mémoire. En particulier, un dispositif électronique tel qu'une carte à puce, le nombre de registres d'index utilisables simultanément peut être fortement limité (par exemple seulement 8 registres d'index), et ces registres d'index peuvent s'avérer être déjà utilisés 3059119 3 à d'autres fins par un tel dispositif ; la solution envisagée sur la figure 1 b peut alors s'avérer tout simplement non possible. EXPOSE DE L'INVENTION 5 Un but de l'invention est de protéger une variable mémorisée dans une pile d'exécution contre des attaques par injection de faute et par confusion de type moyennant une consommation de mémoire supplémentaire réduite. Il est dès lors proposé, selon un premier aspect de l'invention, un procédé de protection d'un dispositif électronique exécutant un programme contre des attaques par 10 injection de faute et par confusion de type susceptibles d'affecter une variable destinée à être utilisée par le programme, le procédé comprenant des étapes de : - calcul de données de contrôle d'intégrité de la variable, les données de contrôle d'intégrité dépendant: o d'un type de la variable, et 15 o d'une valeur de la variable mémorisée dans une pile d'exécution et/ou d'une première donnée d'adressage mémorisée dans un premier registre d'index, la première donnée d'adressage étant adaptée pour localiser la valeur mémorisée dans la pile d'exécution, - mémorisation des données de contrôle d'intégrité sur la variable dans au moins une 20 pile de contrôle différente de la pile d'exécution, - mémorisation, dans un deuxième registre d'index, d'une unique deuxième donnée d'adressage adaptée pour localiser les données de contrôle d'intégrité dans la ou chaque pile de contrôle. Le fait que les données de contrôle d'intégrité mémorisées dépendent non seulement 25 de la valeur de la variable et/ou de la première donnée d'adressage, mais également du type de la variable permet de protéger la variable contre des attaques par injection de faute mais également contre des attaques par confusion de type. En outre, une économie de consommation mémoire supplémentaire pour assurer cette double protection est offerte par le procédé proposé, cette économie étant de nature 30 différente selon le nombre de piles de contrôle utilisées : - Dans le cas où les données de contrôles d'intégrité sont mémorisées dans une seule et même pile de contrôle, cette économie réside dans l'unicité même de cette pile de contrôle venant en supplément de la pile d'exécution. - Dans le cas où les données de contrôles d'intégrité sont mémorisées dans plusieurs piles de contrôles, une économie de nombre de registre d'index est obtenue. En 3059119 4 effet, dans la mesure où une seule donnée d'adressage sert à localiser les données de contrôle dans les différentes piles de contrôles utilisées, seul un registre d'index supplémentaire est nécessaire. Le procédé selon ce premier aspect de l'invention peut en outre comprendre les 5 caractéristiques suivantes, prises seules ou en combinaison lorsque cela est techniquement possible. Les données de contrôle d'intégrité calculées peuvent dépendre de, ou comprendre : - une première donnée de contrôle d'intégrité dépendant du type de la variable, - une deuxième donnée de contrôle d'intégrité dépendant de la valeur de la variable 10 et/ou de la première donnée d'adressage. La première donnée de contrôle d'intégrité peut être calculée par application d'une première fonction prédéterminée à la valeur de la variable et à la donnée d'adressage. L'application de la première fonction prédéterminée comprend le calcul d'un code de contrôle d'erreur à une donnée dépendant de la valeur de la variable et/ou de la donnée 15 d'adressage de la variable. Le code de contrôle d'erreur est un code de redondance longitudinal. L'application de la première fonction prédéterminée comprend le calcul de la disjonction exclusive de la valeur de la variable et de la donnée d'adressage de la variable. La deuxième donnée de contrôle d'intégrité peut être calculée par encodage du type 20 de la variable sur un nombre de bits prédéterminé, le nombre de bits étant fonction d'un nombre total de types de variables susceptibles d'être mémorisées dans la pile d'exécution. Les données de contrôle d'intégrité de variable peuvent être ou dépendre du résultat de l'application d'une deuxième fonction prédéterminée à la première donnée de contrôle 25 d'intégrité et à la deuxième donnée de contrôle d'intégrité. La deuxième fonction prédéterminée peut être une concaténation appliquée à la première donnée de contrôle d'intégrité et à au moins une portion de la deuxième donnée de contrôle d'intégrité. Comme indiqué précédemment, les données de contrôle d'intégrité peuvent 30 mémorisées dans une seule et même pile de contrôle. Alternativement, - la première donnée de contrôle d'intégrité est mémorisée dans une première pile de contrôle - la deuxième donnée de contrôle d'intégrité est mémorisée dans une deuxième pile 35 de contrôle différente de la première pile de contrôle, 3059119 5 - l'unique donnée d'adressage est adaptée pour localiser d'une part la première donnée de contrôle d'intégrité dans la première pile de contrôle et pour localiser d'autre part la deuxième donnée de contrôle d'intégrité dans la deuxième pile de contrôle. 5 Il peut en outre prévu que : - la première donnée de contrôle d'intégrité soit mémorisée à une première adresse décalée d'un écart par rapport à une adresse de référence de la première pile de contrôle, l'écart étant compté en nombre de mots adressables dans la première pile de contrôle, 10 - la deuxième donnée de contrôle d'intégrité soit mémorisée à une deuxième adresse décalée dudit écart par rapport à une adresse de référence de la deuxième pile de contrôle, - l'unique deuxième donnée d'adressage comprend, est, ou dépend dudit écart. La deuxième donnée de contrôle d'intégrité peut être ou peut comprendre une copie 15 de la valeur de la variable. La première donnée de contrôle d'intégrité peut avoir une taille inférieure ou égale à la taille d'un mot adressable dans la première pile de contrôle. Un mot adressable dans la première pile de contrôle peut avoir une taille inférieure à un mot adressable dans la deuxième pile de contrôle. 20 Le procédé peut en outre comprendre une vérification d'intégrité de la variable mise en oeuvre lorsqu'un programme commande une lecture de la donnée d'adressage de la variable et/ou une lecture de la valeur de la variable, ladite vérification comprenant une comparaison entre les données de contrôle d'intégrité mémorisées dans la ou chaque pile de contrôle et de nouvelles données de contrôle d'intégrité calculées sur la base : 25 - d'un type de la variable vu par le programme lors de la commande de lecture, et - de la valeur de la variable présente dans la pile d'exécution et/ou de la donnée d'adressage présente dans le registre d'index lors de la commande de lecture. Il est également proposé, selon un deuxième aspect de l'invention, un produit programme d'ordinateur comprenant des instructions de code de programme pour 30 l'exécution des étapes du procédé selon le premier aspect de l'invention, lorsque ce procédé est exécuté par au moins un processeur. Il est également proposé, selon un troisième aspect de l'invention, un dispositif électronique, tel qu'une carte à puce, comprenant : - au moins un processeur configure pour exécuter un programme, 3059119 6 - au moins une mémoire adaptée pour contenir une pile d'exécution et au moins une pile de contrôle, dans lequel le processeur est configure pour : - calculer de données de contrôle d'intégrité d'une variable mémorisée dans la pile 5 d'exécution et destinée à être utilisée par le programme, les données de contrôle d'intégrité dépendant: o du type de la variable, et o de la valeur de la variable et/ou d'une première donnée d'adressage mémorisée dans un premier registre d'index, la première donnée 10 d'adressage étant adaptée pour localiser la variable dans la pile d'exécution, - commander la mémorisation, dans la ou chaque pile de contrôle, des données de contrôle d'intégrité de la variable, - commander la mémorisation, dans un deuxième registre d'index, d'une unique deuxième donnée d'adressage adaptée pour localiser les données de contrôle 15 d'intégrité dans la ou chaque pile de contrôle. DESCRIPTION DES FIGURES D'autres caractéristiques, buts et avantages de l'invention ressortiront de la description qui suit, qui est purement illustrative et non limitative, et qui doit être lue en 20 regard des dessins annexés sur lesquels : - La figure la, déjà discutée, représente schématiquement le contenu d'une mémoire au cours de la mise en oeuvre d'un procédé connu de l'état de la technique, protégeant une variable contre des attaques par injection de faute. - La figure 1 b, déjà discutée, représente schématiquement le contenu d'une mémoire 25 au cours de la mise en oeuvre d'un procédé susceptible de protéger une variable contre des attaques par injection de faute et par confusion de type, - La figure 2 représente schématiquement un dispositif électronique selon un mode de réalisation de l'invention, - La figure 3 représente schématiquement le contenu d'une mémoire au cours de la 30 mise en oeuvre d'un procédé de protection une variable contre des attaques par injection de faute et par confusion de type, selon un premier mode de réalisation de l'invention, - La figure 4 est un organigramme d'étapes du procédé selon le premier mode de réalisation de l'invention, 3059119 7 - La figure 5 représente schématiquement le contenu d'une mémoire au cours de la mise en oeuvre d'un procédé de protection une variable contre des attaques par injection de faute et par confusion de type, selon un deuxième mode de réalisation de l'invention 5 - La figure 6 est un organigramme d'étapes du procédé selon le premier mode de réalisation de l'invention. Sur l'ensemble des figures, les éléments similaires portent des références identiques. DESCRIPTION DETAILLEE DE L'INVENTION 10 Dispositif électronique de protection contre des attaques par injection de faute et par confusion de type En référence à la figure 2, un dispositif électronique 1 comprend au moins un processeur 2 et au moins une mémoire 4. La mémoire 4 comprend au moins une mémoire volatile 6, par exemple de type RAM. 15 La mémoire volatile 6 a pour fonction de mémoriser temporairement des données, par exemple des données calculées par le processeur 2. Le contenu de la mémoire volatile 6 est effacé lors d'une mise hors tension du dispositif électronique 1. La mémoire 4 comprend en outre au moins une mémoire non volatile 8, par exemple de type disque dur, SSD, flash, EEPROM, etc. La mémoire non volatile 8 a pour fonction de 20 mémoriser des données de manière persistante, au sens où une mise hors tension du dispositif électronique 1 n'efface pas le contenu de la mémoire non volatile. Le processeur 2 est adapté pour exécuter des instructions de code de programme appartenant à un jeu d'instructions prédéterminé. Par extension, le processeur 2 est adapté pour exécuter un programme se présentant 25 sous la forme d'un binaire compilé comprenant des instructions de codes appartenant à ce jeu d'instructions prédéterminé. On prendra l'exemple dans la suite d'un programme de type machine virtuelle. La machine virtuelle est configurée pour interpréter un programme cible, le programme cible se présentant sous la forme d'un binaire comprenant des instructions de 30 code dans un format différent du jeu d'instruction précité, lorsque la machine virtuelle est exécutée par le processeur 2. Par exemple, une machine virtuelle JavaCard est configurée pour interpréter un bytecode » issue d'un code source dans le langage de programmation JavaCard, qui est un langage de programmation orienté objet. 3059119 8 On suppose dans la suite que la machine virtuelle est mémorisée dans la mémoire non volatile 8, de même qu'un programme cible interprétable par la machine virtuelle. Le dispositif électronique 1 est par exemple une carte à puce, telle qu'une carte SIM. 5 Procédé de protection contre des attaques par injection de faute et par confusion de type (premier mode de réalisation) En référence aux figures 3 et 4, un procédé de protection selon un premier mode de réalisation comprend les étapes suivantes. Le processeur 2 démarre l'exécution de la machine virtuelle. 10 La machine virtuelle alloue dans la mémoire volatile 6 une pile d'exécution P1 associée à un processus du programme cible à exécuter. Cette pile d'exécution P1 a vocation à contenir des variables dont le processus du programme cible a besoin au cours de son exécution par la machine virtuelle. La pile d'exécution P1 est caractérisée par : une adresse de pile AP1 , une taille, et 15 une taille m de mot adressable dans la pile Pl. Dans le présent texte, on considère qu'un mot adressable (« word-adressable ») dans une pile est une plus petite unité disposant d'une adresse mémoire propre dans la pile. Par conséquent, la taille d'un mot adressable est égale à l'écart entre deux adresses consécutives dans la pile. 20 L'adresse de pile AP1 est une adresse de début de la pile P1, comme représenté en figure 3, ou bien une adresse de fin de la pile P1. La taille de la pile P1 est égale au nombre de mots adressables mémorisables dans la pile d'exécution P1 multiplié par la taille d'un de ces mots adressables. Par exemple, si la taille m d'un mot adressable dans la pile P1 est de 32 bits et que le nombre de mots 25 adressables simultanément mémorisables dans la pile P1 est 1024, la taille de la pile d'exécution P1 est de 32 x 1024 = 32768 bits. La machine virtuelle alloue en outre dans la mémoire volatile 6 un premier registre d'index indl associé à la pile d'exécution Pl. Le premier registre d'index indl est distinct de la pile d'exécution Pl. 30 La machine virtuelle alloue en outre dans la mémoire volatile 6 une pile de contrôle P2, distincte de la pile d'exécution P1 et du premier registre d'index indl. Comme on le verra dans la suite, cette pile de contrôle P2 sert à détecter la présence d'attaques par injection de faute et la présence d'attaques par confusion de type. 3059119 9 La machine virtuelle alloue en outre dans la mémoire volatile 6 un deuxième registre d'index ind2 associé à la pile de contrôle P2. Ce deuxième registre d'index ind2 est distinct de la pile d'exécution P1, de la pile de contrôle P2 et du premier registre d'index indl . Comme la pile d'exécution P1, la pile de contrôle P2 est caractérisée par : une 5 adresse de pile AP2 (par exemple un adresse de début ou de fin de pile), une taille, et une taille n de mot adressable dans la pile de contrôle P2. La taille de mot adressable n dans la pile de contrôle P2 est de préférence inférieure à la taille de mot adressable m dans la pile d'exécution Pl, afin de limiter la consommation mémoire supplémentaire induite par l'allocation de la pile de contrôle P2, en sus de la pile 10 d'exécution Pl. Au cours de l'exécution du processus du programme cible par la machine virtuelle, la machine virtuelle commande la mémorisation d'une variable Z dans la mémoire volatile 6. La variable Z a une valeur V, une donnée d'adressage A et un type T. La machine virtuelle mémorise la donnée d'adressage A dans le premier registre 15 d'index indl , la donnée d'adressage A étant adaptée pour localiser la valeur V de la variable Z dans la pile d'exécution P1 (étape 102). La machine virtuelle mémorise la valeur V de la variable Z dans la pile d'exécution P1, à l'emplacement mémoire indiqué par la donnée d'adressage A (étape 104). Par exemple, la donnée d'adressage A est un écart (ou adresse relative ou - offset » 20 en anglais) entre l'adresse de la pile d'exécution P1 et l'adresse de la variable Z, cet écart étant compté en nombre de mot adressable dans la pile d'exécution P1. Ainsi, il suffit d'ajouter (ou retrancher) à l'adresse de la pile d'exécution P1 cet écart multiplié par la taille m de mot adressable dans la pile d'exécution P1 pour obtenir l'adresse de la variable Z, et ainsi accéder à la valeur V de cette variable Z. 25 Alternativement, la donnée d'adressage A est directement l'adresse de la valeur V dans la pile d'exécution Pl. De façon connue en soi, le type d'une variable définit les valeurs que peut prendre la variable ainsi que les opérateurs qui peuvent lui être appliqués lorsque celle-ci est utilisée par la machine virtuelle. A titre d'exemple, le type - char » est codé sur 8 bits et une 30 variable de ce type peut donc prendre 256 valeurs différentes. Le nombre total de types des variables susceptibles d'être mémorisées dans la pile d'exécution P1 par la machine virtuelle est prédéterminé. La machine virtuelle détermine le type T de la variable Z dont la valeur A et la zone d'adressage sont mémorisées. Cette détermination est mise en oeuvre par la machine 35 virtuelle par interprétation du - bytecode ». 3059119 10 La machine virtuelle calcule des données de contrôle d'intégrité sur la variable Z (étape 106). Ces données de contrôle d'intégrité sont mémorisées dans la pile de contrôle P2 (étape 108). 5 La machine virtuelle mémorise par ailleurs une deuxième donnée d'adressage A2 dans le deuxième registre d'index ind2, la deuxième donnée d'adressage A2 étant adaptée pour localiser les données de contrôle d'intégrité dans la pile de contrôle P2 (étape 110). La deuxième donnée d'adressage A2 est par exemple de même format que la donnée d'adressage A. 10 La deuxième donnée d'adressage A2 peut en variante résulter de l'application d'une fonction prédéterminée h à la donnée d'adressage A, conformément à la formule suivante : A2 = h(A) La fonction h peut être la fonction identité ou bien une autre fonction, par exemple une permutation. Les données de contrôle d'intégrité dépendent : 15 - d'une part du type T de la variable, et - d'autre part de la valeur V de la variable Z et/ou de la donnée d'adressage A de la variable Z adaptée pour localiser la valeur V dans la pile d'exécution P1. Dans ce qui suit, on décrit un mode de réalisation particulier dans lequel les données de contrôle d'intégrité dépendent du type T de la variable Z, de la valeur V de la variable 20 Z, et aussi de la donnée d'adressage A adaptée pour localiser la valeur V de la variable Z dans la pile d'exécution P1. Le calcul 106 des données de contrôle d'intégrité comprend les étapes suivantes. La machine virtuelle calcule une donnée X, représentative du type de la variable Z. La donnée X est un encodage du type de la variable Z sur un nombre de bits 25 prédéterminé n1, ce nombre de bits étant fonction du nombre total k de types de variables susceptibles d'être mémorisées dans la pile d'exécution P1. De préférence, on choisit n1 comme suit : n1 = [log2 kl où [x] désigne la partie entière par excès du nombre réel x (également appelé - plafond » de x ou - ceiling » en anglais). Autrement dit, on a : [x] - 1 REVENDICATIONS1. Procédé de protection d'un dispositif électronique (1) exécutant un programme contre des attaques par injection de faute et par confusion de type susceptibles d'affecter une variable (Z) destinée à être utilisée par le programme, le procédé étant caractérisé en ce qu'il comprend des étapes de : - calcul de données de contrôle d'intégrité (X, Y) de variable (Z), les données de contrôle d'intégrité dépendant: o d'un type (T) de la variable (Z), et o d'une valeur (V) de la variable (Z) mémorisée dans une pile d'exécution (P1) et/ou d'une première donnée d'adressage (A) mémorisée dans un premier registre d'index (ind1), la première donnée d'adressage (A) étant adaptée pour localiser la valeur (V) mémorisée dans la pile d'exécution (P1), - mémorisation des données de contrôle (X, Y) d'intégrité sur la variable (Z) dans au moins une pile de contrôle (P2, P3) différente de la pile d'exécution (P1), - mémorisation, dans un deuxième registre d'index (ind2), d'une unique deuxième donnée d'adressage (A2) adaptée pour localiser les données de contrôle d'intégrité (X, Y) dans la ou chaque pile de contrôle (P2, P3). 2. Procédé selon la revendication précédente, dans lequel les données de contrôle d'intégrité calculées dépendent de ou comprennent : - une première donnée de contrôle d'intégrité (X) dépendant du type de la variable, - une deuxième donnée de contrôle d'intégrité (V, Y) dépendant de la valeur de la variable et/ou de la première donnée d'adressage (A). 3. Procédé selon la revendication précédente, dans lequel la première donnée de contrôle d'intégrité (Y) est calculée par application d'une première fonction prédéterminée à la valeur (V) de la variable (Z) et à la donnée d'adressage (A). 4. Procédé selon la revendication précédente, dans lequel l'application de la première fonction prédéterminée comprend le calcul d'un code de contrôle d'erreur à une donnée dépendant de la valeur (V) de la variable (Z) et/ou de la donnée d'adressage (A) de la variable (Z). 3059119 18 5. Procédé selon la revendication précédente, dans lequel le code de contrôle d'erreur est un code de redondance longitudinal. 6. Procédé selon l'une des revendications 3 à 5, dans lequel l'application de la première 5 fonction prédéterminée comprend le calcul de la disjonction exclusive de la valeur (V) de la variable (Z) et de la donnée d'adressage (A) de la variable (Z). 7. Procédé selon l'une des revendications 2 à 6, dans lequel la deuxième donnée de contrôle d'intégrité (X) est calculée par encodage du type de la variable (Z) sur un nombre 10 de bits prédéterminé, le nombre de bits étant fonction d'un nombre total de types de variables susceptibles d'être mémorisées dans la pile d'exécution (P1). 8. Procédé selon l'une des revendications 2 à 7, dans lequel les données de contrôle d'intégrité de variable (Z) sont ou dépendent du résultat de l'application d'une deuxième 15 fonction prédéterminée à la première donnée de contrôle d'intégrité et à la deuxième donnée de contrôle d'intégrité. 9. Procédé selon la revendication précédente, dans lequel la deuxième fonction prédéterminée est une concaténation appliquée à la première donnée de contrôle 20 d'intégrité et à au moins une portion de la deuxième donnée de contrôle d'intégrité. 10. Procédé selon l'une des revendications précédentes, dans lequel les données de contrôle d'intégrité (X, Y) sont mémorisées dans une seule et même pile de contrôle (P2). 25 11. Procédé selon l'une des revendications 2 à 9, dans lequel - la première donnée de contrôle d'intégrité (X) est mémorisée dans une première pile de contrôle (P2), - la deuxième donnée de contrôle d'intégrité (V, Y) est mémorisée dans une deuxième pile de contrôle (P3) différente de la première pile de contrôle (P2), 30 - l'unique donnée d'adressage (A2) est adaptée pour localiser d'une part la première donnée de contrôle d'intégrité dans la première pile de contrôle (P2) et pour localiser d'autre part la deuxième donnée de contrôle d'intégrité dans la deuxième pile de contrôle (P3). 12. Procédé selon la revendication précédente, dans lequel : 3059119 19 - la première donnée de contrôle d'intégrité (X) est mémorisée à une première adresse décalée d'un écart par rapport à une adresse de référence de la première pile de contrôle, l'écart étant compté en nombre de mots adressables dans la première pile de contrôle, 5 - la deuxième donnée de contrôle d'intégrité (V, Y) est mémorisée à une deuxième adresse décalée dudit écart par rapport à une adresse de référence de la deuxième pile de contrôle, - l'unique deuxième donnée d'adressage (A2) comprend, est ou dépend dudit écart. 10 13. Procédé selon l'une des revendications 11 à 12, dans lequel la deuxième donnée de contrôle d'intégrité est ou comprend une copie de la valeur (V) de la variable (Z). 14. Procédé selon l'une des revendications 11 à 13, dans lequel la première donnée de contrôle d'intégrité (X) a une taille inférieure ou égale à la taille d'un mot adressable dans 15 la première pile de contrôle (P2). 15. Procédé selon l'une des revendications 11 à 14, dans lequel un mot adressable dans la première pile de contrôle (P2) a une taille inférieure à un mot adressable dans la deuxième pile de contrôle (P3). 20 16. Procédé selon l'une des revendications précédentes, comprenant en outre une vérification d'intégrité de la variable (Z) mise en oeuvre lorsqu'un programme commande une lecture de la donnée d'adressage (A) de la variable (Z) et/ou une lecture de la valeur (V) de la variable (Z), ladite vérification comprenant une comparaison entre les données de 25 contrôle d'intégrité mémorisées dans la ou chaque pile de contrôle (P2, P3) et de nouvelles données de contrôle d'intégrité calculées sur la base : - d'un type (T, T') de la variable (Z) vu par le programme lors de la commande de lecture, et - de la valeur (V, V') de la variable (Z) présente dans la pile d'exécution (P1) et/ou 30 de la donnée d'adressage (A, A') présente dans le registre d'index (ind1) lors de la commande de lecture. 17. Produit programme d'ordinateur comprenant des instructions de code de programme pour l'exécution des étapes du procédé selon l'une des revendications précédentes, lorsque 35 ce procédé est exécuté par au moins un processeur (2). 3059119 20 18. Dispositif électronique, tel qu'une carte à puce, comprenant : - au moins un processeur (2) configuré pour exécuter un programme, - au moins une mémoire (4) adaptée pour contenir une pile d'exécution (P1) et au 5 moins une pile de contrôle (P2), le dispositif étant caractérisé en ce que le processeur (2) est configuré pour : - calculer de données de contrôle d'intégrité (X, Y) d'une variable (Z) mémorisée dans la pile d'exécution (P1) et destinée à être utilisée par le programme, les données de contrôle d'intégrité dépendant: 10 o du type de la variable (Z), et o de la valeur (V) de la variable (Z) et/ou d'une première donnée d'adressage (A) mémorisée dans un premier registre d'index (ind1), la première donnée d'adressage (A) étant adaptée pour localiser la variable (Z) dans la pile d'exécution (P1), 15 - commander la mémorisation, dans la ou chaque pile de contrôle (P2), des données de contrôle d'intégrité (X, Y) de la variable (Z), - commander la mémorisation, dans un deuxième registre d'index (ind2), d'une unique deuxième donnée d'adressage (A2) adaptée pour localiser les données de contrôle d'intégrité (X, Y) dans la ou chaque pile de contrôle (P2, P3). 20