FR 3030084 A1 20160617 FR 1462355 A 20141212 1 DOMAINE TECHNIQUE AUQUEL SE RAPPORTE L'INVENTION La présente invention concerne la protection contre les attaques par injection de fautes. Elle concerne plus particulièrement un procédé d'exécution d'un programme par un processeur et une entité électronique comportant un tel processeur. L'invention s'applique particulièrement avantageusement dans le cas où 10 un tel programme fait appel à un sous-programme avec passage de données en paramètres. ARRIERE-PLAN TECHNOLOGIQUE Lors de l'exécution d'un programme (dénommé dans la suite "programme appelant") par un processeur, il est courant qu'une au moins des 15 instructions du programme fasse appel à un sous-programme (ou fonction appelée) pour mettre en oeuvre certaines fonctionnalités (en général des traitements de données) prévues dans ce sous-programme. L'appel au sous-programme se fait en général avec passage de données en paramètres, technique qui permet au programme appelant de communiquer les 20 données à traiter au sous-programme. Le passage de paramètre est toutefois la cible particulière d'attaques par injection de fautes. En effet, des modifications des données passées en paramètre (du fait par exemple d'une perturbation physique du processeur par un attaquant) ne sont détectables ni par le programme appelant (qui émet les données 25 correctes), ni par le sous-programme (qui n'a connaissance que des données modifiées). Pour lutter contre ce type d'attaque, il a déjà été proposé, par exemple dans le document EP 1 739 519, que le sous-programme produise un résultat supplémentaire dépendant des données reçues et renvoie ce résultat 30 supplémentaire au programme appelant dans le but de vérifier l'intégrité des données traitées. OBJET DE L'INVENTION Dans ce contexte, la présente invention propose un procédé d'exécution d'un programme par un processeur, comprenant les étapes suivantes : 3030084 2 - appel, par un programme appelant, d'un sous-programme avec passage d'au moins un paramètre ; - détermination, par le sous-programme, d'un indicateur d'état de retour ; - détermination, par le sous-programme, d'un mot de retour en 5 combinant au moins, au moyen d'une fonction prédéterminée, l'indicateur d'état de retour et le paramètre ; - retour au programme appelant avec pour résultat le mot de retour déterminé ; - comparaison, par le programme appelant, du mot de retour et d'un mot 10 déterminé en combinant au moins, au moyen de la fonction prédéterminée, une valeur possible de l'indicateur d'état de retour et le paramètre passé lors de l'appel du sous-programme. Selon des caractéristiques optionnelles (et donc non limitatives) envisageables : 15 - ladite valeur possible est indicative d'un fonctionnement normal, auquel cas une étape de traitement d'attaque est par exemple mise en oeuvre si une différence entre le mot de retour et ledit mot déterminé est détectée à l'étape de comparaison ; - le traitement d'attaque comprend une étape d'écriture de données de 20 blocage dans une mémoire non-volatile réinscriptible associée au processeur ; - ladite valeur possible est indicative d'une erreur de fonctionnement, auquel cas une étape de traitement d'erreur peut être mise en oeuvre si le mot de retour et ledit mot déterminé sont égaux à l'étape de comparaison ; - le paramètre est une adresse de mémorisation d'une donnée utilisée 25 par le sous-programme ; - le processeur effectue, du fait de l'exécution d'instructions du sous-programme, un traitement de données utilisant le paramètre ; - le traitement desdites données comprend l'application d'un algorithme cryptographique auxdites données. 30 L'invention propose également une entité électronique comportant un processeur et une mémoire dans laquelle est mémorisé un programme apte à mettre en oeuvre un procédé tel que proposé ci-dessus lorsque le programme est exécuté par le processeur. DESCRIPTION DETAILLEE D'UN EXEMPLE DE REALISATION 3030084 3 La description qui va suivre en regard des dessins annexés, donnés à titre d'exemples non limitatifs, fera bien comprendre en quoi consiste l'invention et comment elle peut être réalisée. Sur les dessins annexés : 5 - la figure 1 représente schématiquement les éléments principaux d'une entité électronique au sein de laquelle est mise en oeuvre l'invention ; - la figure 2 représente les étapes principales d'un procédé mis en oeuvre par l'entité électronique du fait de l'exécution d'instructions de programme par un microprocesseur de l'entité électronique. La figure 1 représente schématiquement les éléments principaux d'une entité électronique 1 au sein de laquelle est mise en oeuvre l'invention. Cette entité électronique est par exemple un module électronique, tel qu'une carte à microcircuit ou un élément sécurisé (ou SE pour "Secure Element")- par exemple un microcontrôleur sécurisé. En variante, il pourrait s'agir d'un dispositif électronique portatif (ou "hand-held electronic device" selon l'appellation anglo- saxonne), tel qu'un terminal de communication ou un passeport électronique, ou d'un ordinateur. L'entité électronique 1 comprend un processeur (ici un microprocesseur 2), une mémoire vive 4 et une mémoire non-volatile réinscriptible 6 (par exemple de type EEPROM pour "Electrically Erasable and Programmable Read-Only Memory"). L'entité électronique 1 pourrait éventuellement comprendre en outre une mémoire morte. La mémoire vive 4 et la mémoire non-volatile réinscriptible 6 (ainsi que le cas échéant la mémoire morte) sont chacune liées au microprocesseur 2 de sorte que le microprocesseur 2 peut lire ou écrire des données dans chacune de ces mémoires. Une de ces mémoires, par exemple la mémoire non-volatile réinscriptible 6, mémorise des instructions de programme d'ordinateur qui permettent la mise en oeuvre du procédé décrit ci-dessous en référence à la figure 2 lorsque ces instructions sont exécutées par le microprocesseur 2. On prévoit par exemple que ces instructions soient mémorisées dans la mémoire non-volatile réinscriptible 6 (afin d'y être conservées même lorsque l'entité électronique n'est pas alimentée électriquement), puis chargées dans la mémoire vive 4 (par exemple lors d'une phase d'initialisation mise en oeuvre au démarrage du fonctionnement de l'entité électronique) afin d'être exécutées par le 3030084 4 microprocesseur 2. Ainsi, comme cela est schématiquement représenté en figure 2, on prévoit lors du fonctionnement de l'entité électronique 1 qu'un programme appelant (ou fonction appelante) soit mémorisé dans la mémoire vive 4 à partir 5 d'une adresse A0 dans la mémoire vive et qu'un sous-programme (ou fonction appelée) soit mémorisé à partir d'une adresse A1 dans la mémoire vive 4. Les mémoires 4,6 mémorisent également des données utilisées lors de la mise en oeuvre de procédés de traitement de données par le microprocesseur 2, par exemple lors de la mise en oeuvre du procédé décrit ci-dessous en 10 référence à la figure 2. Par exemple, la mémoire non-volatile réinscriptible 6 mémorise une clé cryptographique utilisée ici pour le chiffrement d'un message, comme expliqué ci-après. Par ailleurs, comme également expliqué plus loin, la mémoire vive 4 mémorise des données traitées ou produites au cours des procédés décrits ci- 15 dessous, notamment un message m (mémorisé à une adresse M dans la mémoire vive 4) et une version chiffrée c du message m (version chiffrée c mémorisée à une adresse C dans la mémoire vive 4). L'entité électronique 1 peut comprendre en outre une interface de communication 8 avec des dispositifs électroniques externes. Dans le cas décrit ici 20 où l'entité électronique 1 est une carte à microcircuit, l'interface de communication 8 comprend par exemple des contacts affleurant sur une face de la carte à microcircuit. En variante, l'interface de communication 8 pourrait être réalisée par un module de communication sans contact. De manière générale, l'interface de communication 8 peut être un module de communication (filaire ou sans fil) avec 25 une autre entité électronique. Le microprocesseur 2 peut ainsi recevoir des données (par exemple un message m) de l'autre entité électronique via l'interface de communication 8 et émettre en réponse des données (par exemple une version chiffrée c du message m) à l'autre entité électronique via l'interface de communication 8. 30 La figure 2 représente les étapes principales d'un procédé mis en oeuvre par l'entité électronique 1 du fait de l'exécution d'instructions de programme par le microprocesseur 2. Ce procédé débute à l'étape E0 par la réception d'un message m via l'interface de communication 8 en provenance d'une autre entité électronique, tel 3030084 5 qu'un lecteur de carte à microcircuit. Comme schématiquement représenté en figure 2, l'étape E0 est mise en oeuvre du fait de l'exécution par le microprocesseur 2 d'instructions du programme appelant déjà mentionné, mémorisé dans la mémoire vive à l'adresse Ao. Ces 5 instructions comprennent par exemple une boucle d'attente (parfois dénommée "idle loop") d'une commande, par exemple conforme à la norme IS07816, en provenance de l'autre entité électronique. Une fois le message reçu, il est mémorisé dans la mémoire vive 4 à une adresse M, comme déjà mentionné (étape El ). 10 Après des prétraitements éventuels (non représentés), le microprocesseur 2 effectue ensuite à l'étape E2 un appel au sous-programme déjà mentionné, du fait de l'exécution par le microprocesseur 2 d'une instruction correspondante du programme appelant (instruction d'appel). Cet appel au sous-programme se fait avec passage de paramètres, ici 15 l'adresse M de mémorisation du message reçu m, une adresse C à utiliser par le sous-programme pour mémoriser la version chiffrée c du message m et la longueur I (par exemple en octets) du message m. À titre d'exemple, une telle instruction d'appel correspond en langage C à un appel à une fonction du type : 20 retval = fonctionChiffrement(message, chiffré, longueur); OÙ fonctionChiffrement est une fonction (ou sous-programme) définie comme suit : unsigned short fonctionChiffrement( unsigned char *message, 25 unsigned char *chiffré, unsigned char longueur, 1 // Instructions du sous-programme mémorisé à l'adresse Al // 30 // Voir ci-dessous description des étapes E4 à El2 // Du fait de l'appel au sous-programme mémorisé à l'adresse A1, le microprocesseur 2 exécute à l'étape E4 les instructions du sous-programme mémorisées à partir de l'adresse At L'exécution de certaines instructions du sous-programme permettent notamment la mise en oeuvre d'une étape E6 de traitement des données reçues (ici du message reçu m) au moyen d'un algorithme cryptographique (ici un 3030084 6 algorithme de chiffrement utilisant la clé cryptographique mémorisée comme déjà indiqué dans la mémoire non-volatile réinscriptible 6). Comme schématiquement représenté en figure 2, l'étape E6 effectue notamment (du fait de l'exécution par le microprocesseur 2 d'instructions du sous- 5 programme mémorisé à l'adresse A1) des opérations de lecture d'une partie au moins du message m mémorisé à l'adresse M (reçue en paramètre) avec une longueur I (reçue en paramètre), des opérations de calcul cryptographique utilisant la partie lue et une partie au moins de la clé cryptographique, et des opérations d'écriture d'une partie au moins de la version chiffrée c du message (ou message 10 chiffré) mémorisée à l'adresse C (également reçue en paramètre). Le microprocesseur 2 détermine par ailleurs à l'étape E8 (ici encore du fait de l'exécution d'instructions du sous-programme) un indicateur d'état de retour représentatif de l'état de retour (en anglais "retum status") du sous-programme. Un tel indicateur d'état de retour est par exemple déterminé sur la base 15 des données traitées lors des étapes précédentes, notamment lors de l'étape E6, et/ou en vérifiant certains aspects du fonctionnement de l'entité électronique 1. En fonction de sa valeur, l'indicateur d'état de retour peut indiquer un déroulement correct du sous-programme ou une erreur dans le déroulement du sous-programme, avec indication éventuelle dans ce cas d'un code d'erreur. 20 Du fait de l'exécution d'instructions du sous-programme, le microprocesseur 2 détermine ensuite à l'étape E10 un mot de retour R en combinant, au moyen d'une fonction prédéterminée, l'indicateur d'état de retour et certaines au moins des données passées en paramètre, ici toutes les données passées en paramètres, à savoir l'adresse M de mémorisation du message m, 25 l'adresse C de mémorisation de la version chiffrée c et la longueur I du message m. Dans l'exemple décrit ici, le mot de retour est la somme de ces différents éléments, à savoir la somme de l'indicateur d'état de retour et des données passées en paramètres, c'est-à-dire la somme de l'indicateur d'état de retour, de 30 l'adresse M de mémorisation du message m, de l'adresse C de mémorisation de la version chiffrée c et de la longueur I du message m. En variante, la fonction prédéterminée utilisée pour combiner l'indicateur d'état de retour et certaines au moins des données passées en paramètre pourrait utiliser d'autres types d'opérateur que l'addition, par exemple la soustraction, une 3030084 7 opération de "ou exclusif' (parfois dénommé XOR ou somme booléenne) ou une fonction de hachage. Le microprocesseur exécute à l'étape E12 une instruction de retour au programme appelant, en retournant le mot de retour R. Une telle instruction de 5 retour termine le sous-programme (c'est-à-dire constitue la dernière instruction du sous-programme) et provoque l'exécution par le microprocesseur 2 de l'instruction du programme appelant qui suit immédiatement l'instruction d'appel (voir l'étape E2 ci-dessus), c'est-à-dire l'exécution de l'instruction mémorisée dans la mémoire vive 4 immédiatement après l'instruction d'appel, ce qui débute la mise en oeuvre 10 de l'étape E14 décrite ci-dessous. Sur la figure 2, les étapes E6, E8, E10 et E12 sont représentées comme des étapes séparées pour clarifier l'exposé. On remarque toutefois qu'en pratique certaines étapes pourraient être regroupées ou réalisées en parallèle. Dans le cadre de l'exemple en langage C donné ci-dessus, les étapes 15 E10 et E12 pourraient par exemple être réalisées au moyen de la ligne suivante, placée à la fin de la fonction fonctionChiffrement introduite ci-dessus : return ((unsigned short)( (unsigned short) message + (unsigned short) chiffré + longueur + status) ) où status est l'indicateur d'état de retour déterminé à l'étape E8. 20 Lors de l'étape E14, le microprocesseur 2 détermine, du fait de la reprise de l'exécution du programme appelant, une première valeur de comparaison V1 en combinant, au moyen de la fonction prédéterminée, une valeur d'erreur de l'indicateur d'état de retour et celles des données passées en paramètre utilisées pour la détermination du mot de retour R à l'étape E10, soit ici toutes les données 25 passées en paramètres, à savoir l'adresse M de mémorisation du message m, l'adresse C de mémorisation de la version chiffrée c et la longueur I du message m. On remarque que l'étape E14 est mise en oeuvre comme déjà indiqué par le programme appelant et que les données utilisées pour le calcul de la 30 première valeur de comparaison V1 sont par conséquent celles passées en paramètre par le programme appelant lors de l'appel de l'étape E2 ; elles peuvent donc différer des valeurs reçues par passage en paramètre par le sous-programme, notamment lors d'une attaque par injection de fautes lors de l'appel. Le microprocesseur 2 procède alors à un test Ti d'égalité entre le mot de 3030084 8 retour R retourné par le sous-programme à l'étape E12 et la première valeur de comparaison V1 déterminée à l'étape E14. Lorsque le passage de paramètres s'est correctement effectué à l'étape E2, le test d'égalité Ti est positif lorsque l'indicateur d'état de retour déterminé à 5 l'étape E8 a la valeur d'erreur utilisée dans le calcul de la première valeur de comparaison V1 à l'étape E14. (Le cas d'un problème dans le passage de paramètres est détecté ci-dessous par le test T2.) Ainsi, lorsque le test d'égalité Ti a un résultat positif (flèche P), on procède à l'étape E16 au traitement de l'erreur signalée par la valeur d'erreur 10 utilisée dans le calcul de la première valeur de comparaison V1 à l'étape E14. Une telle erreur peut par exemple être une impossibilité pour le sous-programme de lire et/ou d'écrire dans la mémoire vive 4 (au cours de l'étape E6) ; le traitement de l'erreur est par exemple dans ce cas l'émission, via l'interface de communication 8, d'un message d'erreur destiné à l'autre entité électronique (lecteur). 15 Lorsque le test d'égalité T2 a un résultat négatif (flèche N), le microprocesseur 2 détermine à l'étape E18 une seconde valeur de comparaison V2 en combinant, au moyen de la fonction prédéterminée, une valeur de l'indicateur d'état de retour indicative du fonctionnement normal (souvent désignée valeur "ok") et celles des données passées en paramètre utilisées pour la 20 détermination du mot de retour R à l'étape E10, soit ici toutes les données passées en paramètres, à savoir l'adresse M de mémorisation du message m, l'adresse C de mémorisation de la version chiffrée c et la longueur I du message m. Comme déjà indiqué pour l'étape E14, l'étape E16 est mise en oeuvre 25 par le programme appelant et les données utilisées pour le calcul de la seconde valeur de comparaison V2 sont par conséquent celles passées en paramètre par le programme appelant lors de l'appel de l'étape E2 ; elles peuvent donc différer des valeurs reçues par passage en paramètre par le sous-programme, notamment lors d'une attaque par injection de fautes lors de l'appel. 30 Le microprocesseur 2 procède alors à un test T2 d'égalité entre le mot de retour R retourné par le sous-programme à l'étape E12 et la seconde valeur de comparaison V2 déterminée à l'étape E18. Lorsque le passage de paramètres s'est correctement effectué à l'étape E2 et que l'indicateur d'état de retour déterminé à l'étape E8 a la valeur indicative 3030084 9 du fonctionnement normal, le mot de retour R et la seconde valeur de comparaison V2 sont égales puisqu'elles ont été déterminées au moyen de la même fonction prédéterminée et sur la base des mêmes données. Ainsi, si le test d'égalité T2 a un résultat positif (flèche P), aucun 5 problème n'est détecté et on peut procéder à l'étape E22 à l'émission de la version chiffrée c du message m, via l'interface de communication 8 et à destination de l'autre entité électronique (ici un lecteur de carte à microcircuit). En revanche, si le test d'égalité T2 a un résultat négatif (flèche N), ceci indique soit que le passage de paramètres ne s'est pas correctement effectué (les 10 données utilisées pour le calcul du mot de retour R à l'étape E10 différant au moins partiellement des données correspondantes utilisées dans le programme appelant), soit que l'indicateur d'état de retour déterminé à l'étape E8 a une valeur distincte de celle du fonctionnement normal (et ici distincte en outre de la valeur d'erreur utilisée à l'étape E14). 15 Il existe donc dans ce cas une possibilité qu'une attaque se soit produite pour perturber le passage de paramètres à l'étape E2 et le procédé se poursuit par conséquent, dans le cas d'un résultat négatif au test d'égalité T2, par une étape E20 de traitement d'attaque. Le traitement d'attaque de l'étape E20 comprend par exemple l'écriture 20 de données de blocage (parfois dénommées "verrou") dans la mémoire non-volatile réinscriptible 6 et/ou l'effacement d'une partie au moins de la mémoire non-volatile et/ou la réinitialisation du microprocesseur 2. L'entité électronique 1 est par exemple conçue de manière à consulter la mémoire non-volatile réinscriptible 6 lors de chaque réinitialisation du microprocesseur 2 et à 25 interrompre son fonctionnement en présence desdites données de blocage (en général à un emplacement prédéterminé) dans la mémoire non-volatile réinscriptible 6. En variante, le traitement d'attaque E20 peut comprendre l'écriture d'un drapeau en mémoire non-volatile réinscriptible 6 et/ou la modification d'une valeur 30 mémorisée en mémoire non-volatile réinscriptible 6. L'entité électronique 1 peut alors être conçue de manière à consulter ce drapeau ou cette valeur et, sous certaines conditions (par exemple le dépassement d'un seuil par la valeur précitée), à écrire en mémoire non-volatile réinscriptible 6 des données de blocage telles que celles mentionnées ci-dessus. 3030084 10 Dans le cadre de l'exemple de programme en langage C donné ci-dessus, l'étape E18, le test T2 et l'étape E20 correspondent par exemple à des instructions comme suit dans le programme appelant : if(retval != (unsigned short)( (unsigned short) message 5 + (unsigned short) chiffré + longueur + OK) ) securityAction(); OÙ retval est le mot de retour R déterminé par appel à la fonction fonctionChiffrement comme expliqué plus haut (voir l'étape E2), OK est la valeur de l'indicateur de fonctionnement indicative du fonctionnement normal et 10 securityAction() est une fonction de traitement d'attaque, telle que celle décrite ci-dessus (étape E20). Comme expliqué ci-dessus, le test Ti permet de vérifier si l'indicateur d'état de retour déterminé par le sous-programme à l'étape E8 avait une certaine valeur d'erreur (valeur utilisée à l'étape E14) afin d'effectuer un traitement 15 spécifique pour ce type d'erreur. Le test T2 permet principalement de détecter un problème lors du passage de paramètres à l'étape E2. Selon une variante envisageable, plusieurs valeurs de comparaison peuvent être calculées comme à l'étape E14, mais en utilisant à chaque fois une valeur d'erreur différente de l'indicateur d'état de retour, et des tests d'égalité 20 correspondants peuvent être mis en oeuvre afin d'effectuer un traitement d'erreur spécifique pour chaque type d'erreur associé à une valeur d'erreur. Selon une autre variante envisageable, les étapes E14 et E16 et le test Ti ne sont pas mis en oeuvre. On procède dans ce cas directement à l'étape E18 lors du retour au programme appelant. Selon cette variante, on procède à l'étape 25 de traitement d'attaque E20 dès lors que les données n'ont pas été correctement passées en paramètre à l'étape E2 ou que l'indicateur d'état de retour n'est pas indicatif du fonctionnement normal. Autrement dit, dans ce cas, le traitement des attaques et des erreurs n'est pas différencié. 30 REVENDICATIONS1. Procédé d'exécution d'un programme par un processeur (2), comprenant les étapes suivantes : - appel (E2), par un programme appelant (Ao), d'un sous-programme (A1) avec passage d'au moins un paramètre (M ; C ; I) ; - détermination (E8), par le sous-programme (A1), d'un indicateur d'état de retour ; - détermination (E10), par le sous-programme (A1), d'un mot de retour (R) en combinant au moins, au moyen d'une fonction prédéterminée, l'indicateur d'état de retour et le paramètre (M ; C; I) ; - retour (E12) au programme appelant (A0) avec pour résultat le mot de retour déterminé (R) ; - comparaison (Ti ; T2), par le programme appelant (Ao), du mot de retour (R) et d'un mot déterminé en combinant au moins, au moyen de la fonction prédéterminée, une valeur possible de l'indicateur d'état de retour et le paramètre (M ; C ; I) passé lors de l'appel (E2) du sous-programme (A1). 2. Procédé selon la revendication 1, dans lequel ladite valeur possible est indicative d'un fonctionnement normal. 3. Procédé selon la revendication 2, dans lequel une étape de traitement d'attaque (E20) est mise en oeuvre si une différence entre le mot de retour (R) et ledit mot déterminé est détectée à l'étape de comparaison (T2). 4. Procédé selon la revendication 3, dans lequel le traitement d'attaque (E20) comprend une étape d'écriture de données de blocage dans une mémoire non-volatile réinscriptible (6) associée au processeur (2). 5. Procédé selon la revendication 1, dans lequel ladite valeur possible est indicative d'une erreur de fonctionnement. 6. Procédé selon la revendication 5, dans lequel une étape de traitement d'erreur (E16) est mise en oeuvre si le mot de retour (R) et ledit mot déterminé 30 sont égaux à l'étape de comparaison (Ti). 7. Procédé selon l'une des revendications 1 à 6, dans lequel le paramètre (M ; C) est une adresse de mémorisation d'une donnée (m ; c) utilisée par le sous-programme (A1). 8. Procédé selon l'une des revendications 1 à 7, dans lequel le 3030084 12 processeur (2) effectue, du fait de l'exécution d'instructions du sous-programme (A1), un traitement de données (m) utilisant le paramètre (M ; C; I). 9. Procédé selon la revendication 8, dans lequel le traitement desdites données (m) comprend l'application d'un algorithme cryptographique auxdites 5 données (m). 10. Entité électronique (1) comportant un processeur (2) et une mémoire (4 ; 6) dans laquelle est mémorisé un programme apte à mettre en oeuvre un procédé selon l'une des revendications 1 à 9 lorsque le programme est exécuté par le processeur. 10