FR 3011657 A1 20150410 FR 1359805 A 20131009 L'invention concerne un procédé mis en oeuvre par un processeur, ainsi qu'une entité électronique associée. Afin d'améliorer la sécurité des données et programmes stockés dans des modules embarqués, par exemple des cartes à microcircuits, on cherche à se prémunir contre les divers types d'attaques envisageables. Une catégorie importante d'attaques à contrecarrer est constituée par les attaques dites par injection de fautes (ou attaque par fautes), consistant à perturber physiquement le microcircuit, par exemple via un laser, afin de le faire dévier de son fonctionnement normal, et donc sécurisé. A ce titre, aussi bien le fabricant que les développeurs d'applications pour ces microcircuits mettent en place des mécanismes de détection des attaques. Par exemple, le fabricant peut inclure des détecteurs de conditions anormales d'alimentation (e.g. glitches) ou encore de lumière et les développeurs peuvent implémenter des contre-mesures consistant par exemple à vérifier l'intégrité des variables manipulées, ou encore tester la redondance des informations. Lorsqu'une anomalie de sécurité est détectée, il est intéressant d'en garder une trace en mémoire. Typiquement, cette trace permet d'identifier l'origine de l'anomalie, et est sauvegardée dans une zone mémoire appelée zone d'écriture sécuritaire ou zone sécuritaire. Lorsque certaines conditions sont remplies par le contenu de cette zone sécuritaire (généralement consultée à chaque démarrage de la carte), le microcircuit peut déclencher la mise en oeuvre de fonctions de protection, ayant par exemple pour effet de supprimer les données et/ou programmes stockés dans le microcircuit, ou encore d'empêcher tout fonctionnement ultérieur de celui-ci. En analysant la consommation de courant, un attaquant peut détecter une écriture en zone sécurisée. En effet, le nombre d'octets d'une trace (souvent 1 seul octet) est généralement inférieur au nombre d'octets écrits lors d'une écriture classique (c'est-à-dire réalisée en fonctionnement normal, lorsqu'aucune attaque n'est détectée). Or, le nombre d'octets écrits influence directement la consommation, ce qui rend détectable l'écriture de la trace. L'attaquant peut éviter la sauvegarde de cette trace, par exemple en coupant brusquement l'alimentation de la carte lorsque l'écriture de la trace est détectée. Par ailleurs, des procédés de sécurisation connus, par exemple du document FR2935823, consistent à mettre en oeuvre, lorsque le microcircuit ne 10 détecte pas d'anomalie, des écritures leurres simulant l'écriture en zone sécuritaire. Toutefois, ces fausses écritures impliquent un temps de traitement supplémentaire susceptible de ralentir le fonctionnement global de la carte à microcircuits. 15 Dans ce contexte, l'invention propose un procédé mis en oeuvre par un processeur équipant une entité électronique, caractérisé en ce qu'une étape d'écriture, dans une première zone mémoire d'une mémoire physique de l'entité électronique, d'une pluralité d'octets comprend les étapes suivantes : - lancement par le processeur d'une opération d'écriture dans la 20 première zone mémoire d'un premier nombre d'octet(s) parmi ladite pluralité, le premier nombre étant égal à un nombre d'octet(s) écrit(s) dans une seconde zone mémoire en cas de détection d'une attaque visant l'entité électronique ; - lancement par le processeur d'une opération d'écriture dans la première zone mémoire d'un second nombre d'octet(s). 25 L'écriture de la pluralité d'octets débutera donc par l'écriture du même nombre d'octet(s) qu'en cas de détection d'attaque ; ainsi, bien qu'une écriture d'une pluralité quelconque d'octets ait lieu, un attaquant ne pourra pas distinguer au début une telle écriture et une écriture en zone sécuritaire en cas de détection d'attaque. Il sera donc incapable d'interrompre l'alimentation de la 30 carte pour éviter l'écriture en zone sécuritaire. Dans certains cas, comme d'ailleurs dans l'exemple décrit ci-après, l'étape de lancement de l'opération d'écriture du premier nombre d'octet(s) peut être précédée d'une étape de préparation de l'écriture dudit premier nombre d'octet(s). De manière similaire, l'étape de lancement de l'opération d'écriture du second nombre d'octet(s) peut être précédée d'une étape de préparation de l'écriture dudit second nombre d'octet(s). Selon un mode de réalisation envisageable, la seconde zone mémoire est une zone mémoire de la mémoire physique. La zone mémoire où a lieu l'écriture de la pluralité d'octets (zone mémoire fonctionnelle) est ainsi située sur la même mémoire physique que la zone où a lieu l'écriture en cas de détection d'attaque (zone mémoire sécuritaire) ; cette mémoire physique est par exemple une mémoire non-volatile réinscriptible (e.g. de type EEPROM ou Flash) ou inscriptible une fois (e.g. de type OTP pour "One Time Programmable»). Le procédé peut également comprendre par la suite une étape de lancement par le processeur d'une opération de lecture de ladite pluralité d'octets et/ou une étape d'utilisation par l'entité électronique d'un mot formé par ladite pluralité d'octets (au cours de laquelle la totalité des octets de la pluralité susmentionnée est utilisée). Le procédé peut donc comprendre, en cas de détection d'une attaque, une étape d'écriture du premier nombre d'octet(s) dans la seconde zone mémoire (zone sécuritaire). Le(s) octet(s) écrit(s) peut(peuvent) être représentatifs du type d'anomalie détectée et ainsi permettre de garder trace de cette anomalie même si l'alimentation de l'entité électronique est coupée ; il peut également s'agir d'un verrou qui empêche toute utilisation ultérieure de l'entité électronique. La détection d'attaque est par exemple basée sur une mesure d'au moins un paramètre de la liste suivante : température, tension d'alimentation, désadaptation (glitches), lumière, sommes de vérification, parité, fréquence d'horloge. La détection d'attaque peut également être basée sur une étape de comparaison des résultats de deux exécutions, ou une étape de vérification d'une relation entre deux variables de calcul, ou une étape de vérification d'une propriété d'une variable. Selon un mode de réalisation, l'étape d'écriture de la pluralité d'octets est commandée lors de l'exécution d'un programme par appel à un sous-programme d'écriture ; dans ce cas, ce peut être l'exécution du sous-programme d'écriture qui comprend le lancement de l'opération d'écriture du premier nombre d'octet(s) et le lancement de l'opération d'écriture du second nombre d'octet(s). Selon un autre mode de réalisation, l'écriture d'une pluralité d'octets est commandée par un module applicatif à un module de gestion d'écriture ; le module de gestion d'écriture peut alors effectuer le lancement de l'opération d'écriture du premier nombre d'octet(s) et le lancement de l'opération d'écriture du second nombre d'octet(s). L'invention concerne également une entité électronique équipée d'un processeur et mémorisant un programme apte à mettre en oeuvre un procédé comme évoqué ci-dessus lorsque le programme est exécuté par le processeur. L'entité électronique est par exemple une carte à microcircuit. Il peut toutefois s'agir d'un autre type d'entité électronique, tel qu'un module embarqué, un document d'identité sécurisé, un assistant personnel numérique, etc. D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lumière de la description qui suit, faite en référence aux dessins 20 annexés dans lesquels : - la figure 1 représente un exemple d'entité électronique conforme aux enseignements de l'invention ; - la figure 2 représente des étapes mises en oeuvre par l'entité électronique de la figure 1 conformément aux enseignements de l'invention ; 25 - la figure 3 représente des étapes mises en oeuvre lors du démarrage de l'entité électronique. La figure 1 représente une carte à microcircuit 105 comportant les éléments suivants reliés entre eux par un bus 155 : - un microprocesseur - ou unité de traitement - 110, 30 - des entrées/sorties 115, - une ou plusieurs mémoires non volatile - ou mémoire morte - 120 par exemple ROM (acronyme de Read Only Memory en terminologie anglo- saxonne) stockant un système d'exploitation 125 et pouvant constituer un support au sens de l'invention, c'est-à-dire pouvant comprendre un programme informatique comprenant des instructions pour la mise en oeuvre du procédé selon l'invention dont des exemples sont décrits ci-après en référence aux Figures 2 et 3 ; cette mémoire non volatile peut également être une mémoire EEPROM (acronyme de Electrically Erasable Read Only Memory en terminologie anglo-saxonne) ou encore une mémoire Flash; - une mémoire vive 16 ou mémoire cache ou mémoire volatile par exemple RAM (acronyme de Random Access Memory en terminologie anglo- saxonne) comprenant des registres adaptés à l'enregistrement des variables et paramètres créés et modifiés au cours de l'exécution du programme précité ; lors de la mise en oeuvre de l'invention. Les codes d'instructions du programme stocké en mémoire non volatile (ex. EEPROM ou flash) sont chargés en mémoire RAM en vue d'être exécutés par le microprocesseur 110; - une mémoire non-volatile 130, par exemple une mémoire EEPROM ou non réinscriptible (OTP) ou Flash, comportant une matrice de mémoire 135 et directement contrôlée par le microprocesseur 110. Dans son principe et tel qu'illustré sur la figure 2, un procédé selon l'invention comprend une étape 205 de vérification de l'état de fonctionnement du 20 microcircuit. En pratique cette étape consiste par exemple à mesurer un paramètre de fonctionnement du circuit afin de vérifier que sa valeur se situe dans une plage normale (c'est-à-dire caractéristique d'un fonctionnement normal du microcircuit) de valeurs. 25 Le ou les paramètres mesurés sont par exemple : - la température (une surchauffe par exemple peut révéler une attaque), - la tension d'alimentation (une surtension par exemple peut être causée par un attaquant), 30 - les glitches, qui sont des variations de tension brusques et courtes généralement non perceptible par une simple mesure de la tension d'alimentation, 301 1 6 5 7 6 - la lumière, permettant par exemple de détecter une attaque par laser, - la fréquence d'horloge (une modification de la fréquence d'horloge, parfois utilisée comme signal de base pour les calculs, peut-être être le fruit d'une 5 attaque par faute). L'étape de vérification peut également consister par exemple à vérifier une somme de contrôle ou de vérification (ou "checksum" selon la terminologie anglo-saxonne), c'est-à-dire à vérifier que des données inscrites en mémoire sont bien cohérentes avec la somme de vérification associée à ces données. 10 En outre, il est aussi possible de vérifier si une variable présente bien certaines propriétés (e.g. parité, valeur). Cette étape peut également être basée sur la comparaison des résultats obtenus par deux mises en oeuvre d'un même algorithme. Si l'étape de vérification 205 permet de conclure que le microcircuit 15 fonctionne normalement, le processus se poursuit jusqu'au moment où le déroulement du fonctionnement normal implique l'écriture d'un mot de N octets dans une zone fonctionnelle de la mémoire non-volatile 130 (par exemple une mémoire de type EEPROM comme déjà indiqué). Cette étape d'écriture du mot de N octets est par exemple commandée lors de l'exécution d'un programme exécuté par le microprocesseur 110 par appel à un sous-programme d'écriture. Dans ce contexte, l'exécution du sous-programme d'écriture provoque la mise en oeuvre des étapes 220, 230, 240, 250 décrites ci-dessous. Selon un autre mode de réalisation envisageable, l'écriture du mot de N octets est commandée par un module applicatif résidant sur l'entité électronique à un module de gestion d'écriture. Le module applicatif permet par exemple de mettre en oeuvre une application particulière de l'entité électronique. Dans cet exemple, le module de gestion d'écriture commande le microprocesseur 110 afin qu'il effectue les étapes 220, 230, 240, 250 décrites ci-dessous. Pour réaliser l'écriture du mot de N octets, on propose ici d'écrire tout d'abord un nombre d'octet(s) identique au nombre d'octet(s) écrit(s) dans la mémoire non-volatile 130 (comme expliqué plus bas en référence aux étapes 210 et 215) en cas de sortie du fonctionnement normal, c'est-à-dire de détection d'une attaque, à l'étape 205. Dans le présent exemple, on commence par écrire un octet dans la mémoire non-volatile 130, à l'adresse prévue par le fonctionnement (adresse fonctionnelle - du fait que, comme expliqué ci-dessous, on écrit un octet dans une zone sécuritaire de la mémoire non-volatile 130 lors de la détection d'une attaque. Le microprocesseur 110 prépare (étape 220) l'écriture d'un octet (afin d'écrire le premier octet du mot de N octets). Après préparation de la mémoire, le microprocesseur 110 commande à l'étape 230 l'écriture du premier octet du mot de N octets dans la mémoire non-volatile 130. Une fois cette écriture réalisée, le microprocesseur 110 prépare l'écriture des (N-1) octets restants (étape 240) à l'adresse fonctionnelle incrémentée d'un octet (afin que les N-1 octets soient écrits à la suite de l'octet écrit à l'étape 230). Une fois la mémoire préparée, le microprocesseur commande (étape 250) l'écriture des (N-1) octets restants prévus par le fonctionnement de l'entité électronique. Les étapes 220 à 250 qui viennent d'être décrites sont par exemple mises en oeuvre du fait de l'exécution d'un programme (ici en langage C) du type suivant : EE_control = 1 (char*) adr_fonct = ox1A (char*) adr_fonct++ EE_control = 2 while (EE_control == 2); EE_control = 1 (char*) adr_fonct = oxF4 (char*) adr_fonct++ (char*) adr_fonct = 0x01 (char*) adr_fonct++ 301 1 6 5 7 8 (char*) adr_fonct = 0x00 EE_control = 2 while (EE_control == 2); Dans cet exemple, la mise à la valeur 1 de la variable EE_control 5 commande la préparation de l'écriture, tandis que la mise à la valeur 2 de cette variable EE_control lance effectivement l'écriture (c'est-à-dire commande l'écriture). Dans l'exemple, on prépare ainsi tout d'abord l'écriture de la valeur hexadécimale 1A à l'adresse fonctionnelle adr_fonct, puis on lance cette écriture 10 (instruction "EE_control = 1"). L'instruction "white (EE_control == 2)" permet d'attendre la fin de l'écriture avant de poursuivre. On prépare ensuite une écriture de (N-1) octets (ici 3 octets), dans l'exemple de valeur hexadécimale F40100, écriture qui est lancée par la seconde instruction "EE_control = 1". (On remarque que l'adresse où doit s'effectuer 15 l'écriture est incrémentée entre deux octets successifs au moyen de l'instruction " adr fonct++".) Le programme qui précède permet donc d'écrire le mot de N octets (ici N = 4) suivant : 1AF40100 (en hexadécimal) dans la mémoire non-volatile 130; cette écriture de N octets prévue par le fonctionnement normal commence 20 toutefois par l'écriture d'un octet de manière indépendante des 3 autres octets, de telle sorte qu'un attaquant ne pourra distinguer cette écriture de l'écriture d'un octet en zone sécuritaire de la mémoire 130, comme décrit plus bas en référence l'étape 215. Le fonctionnement normal se poursuit après l'écriture des N octets 25 comme elle vient d'être décrite, jusqu'à ce que ce fonctionnement normal prévoit la lecture puis l'utilisation de ces N octets. Précisément, au cours d'une étape 260, le microprocesseur 110 commande la lecture des N octets à l'adresse fonctionnelle (dans l'exemple ci-dessus, des 4 octets écrits à l'adresse adr_fonct). 30 Les N octets lus peuvent ainsi être utilisés à l'étape 270 par la fonction qui a demandé leur lecture, par exemple une fonction de chiffrement, une fonction de déchiffrement ou une fonction d'authentification. 301 1 6 5 7 9 Lorsque les mesures réalisés à l'étape 205 indiquent une sortie du fonctionnement normal, et que l'on considère alors qu'une attaque est détectée, on procède à l'écriture d'un octet dans une zone dite sécuritaire de la mémoire non-volatile 130, et ce au moment où on écrit, lors du fonctionnement normal, le 5 premier octet du mot de N octets. Selon une possibilité de réalisation, l'octet écrit est représentatif du type d'anomalie détectée et permet de garder trace de cette anomalie (même si l'alimentation de l'entité électronique est coupée). Selon une autre possibilité de réalisation, l'octer écrit est un verrou qui 10 empêche toute utilisation future de l'entité électronique. Dans les deux cas, la valeur écrite en zone sécuritaire est lue à chaque démarrage de l'entité électronique comme expliqué ci-après en référence à la figure 3. L'écriture de l'octet en zone sécuritaire est réalisée en pratique comme 15 suit. Tout d'abord, au cours d'une étape 210, le microprocesseur 110 prépare l'écriture de cet octet. Cette étape 210 est effectuée au moment où, en fonctionnement normal, on prépare l'écriture du premier octet comme expliqué ci-dessus pour l'étape 220. 20 Ensuite, au cours d'une étape 215, le microprocesseur 110 commande le lancement de l'écriture dans la mémoire non-volatile 130. Cette étape 215 est effectuée au moment où, en fonctionnement normal, on commande l'écriture du premier octet comme expliqué ci-dessus pour l'étape 230. Ces étapes sont par exemple mises en oeuvre du fait de l'exécution 25 par la microprocesseur 110 d'un programme (ici en langage C) comme suit : EE_control = 1 (char*) adr_secu = 0x40 EE_control = 2 while (EE_control == 2); 30 Un tel programme prépare (instruction "EE_control = 1") l'écriture d'un octet de valeur 40 (en hexadécimal) à l'adresse adr_secu (définissant la zone sécuritaire), puis lance cette écriture (instruction "EE_control = 2'). On peut naturellement prévoir en variante que l'on puisse écrire plusieurs octets en zone sécuritaire (sans atteindre toutefois le nombre N d'octets précité). On prévoit alors que l'écriture des étapes 220 et 230 visent un nombre égal d'octets (parmi les octets du mot de N octets), les étapes 240 et 250 effectuant l'écriture des octets restants. La figure 3 représente certaines étapes mises en oeuvre lors du démarrage de l'entité électronique. Lorsque l'entité électronique redémarre à l'étape 310 (par exemple, dans le cas d'une carte à microcircuit, lorsque celle-ci est inséré dans un lecteur et est donc alimentée), le microprocesseur procède à l'étape 320, de préférence immédiatement après le rédémarrage de l'étape 310, à la consultation de la zone sécuritaire, c'est-à-dire à la lecture de la zone sécuritaire, ici une lecture à l'adresse adr_secu dans la mémoire non-volatile 130. Le microprocesseur 110 vérifie alors si la valeur lue (par exemple la valeur de l'octet lu à l'adresse adr_secu) vérifie certains conditions (test 330). Dans le cas présenté ci-dessus où des traces d'anomalie sont conservées dans la zone sécuritaire, ces conditions peuvent être la présence d'un ensemble de valeurs que l'on considère indicatrices d'une attaque. Dans le cas où l'octet inscrit est un verrou, on vérifie seulement si la valeur lue est égale à ce verrou. Lorsque les conditions de détection d'une attaque sont vérifiées (réponse OUI au test 330), on met en oeuvre une fonction de protection à l'étape 340, par exemple en arrêtant l'avancée du programme executée par le microprocesseur (blocage de l'entité électronique) et/ou en effaçant toutes les données écrites sur l'entité électronique (par exemple en commandant l'effacement de la mémoire non-volatile 130). Lorsque les conditions de détection d'une attaque ne sont pas vérifiées (réponse NON au test 330), le microprocesseur 110 débute les opérations fonctionnelles prévues par l'entité électronique, c'est-à-dire le fonctionnement normal. Les exemples qui précèdent ne sont que des modes de réalisation envisageables pour la présente invention, qui ne s'y limite pas. REVENDICATIONS1. Procédé mis en oeuvre par un processeur (110) équipant une entité électronique (105), caractérisé en ce qu'une étape d'écriture, dans une première zone mémoire d'une mémoire physique (130) de l'entité électronique (110), d'une pluralité d'octets comprend les étapes suivantes : - lancement (230) par le processeur (110) d'une opération d'écriture dans la première zone mémoire d'un premier nombre d'octet(s) parmi ladite pluralité, le premier nombre étant égal à un nombre d'octet(s) écrit(s) dans une seconde zone mémoire en cas de détection d'une attaque visant l'entité électronique ; - lancement (250) par le processeur (110) d'une opération d'écriture dans la première zone mémoire d'un second nombre d'octet(s). 2. Procédé selon la revendication 1, caractérisé en ce que l'étape de lancement (230) de l'opération d'écriture du premier nombre d'octet(s) est précédée d'une étape de préparation (220) de l'écriture dudit premier nombre d'octet(s). 3. Procédé selon la revendication 1 ou 2, caractérisé en ce que l'étape de lancement (250) de l'opération d'écriture du second nombre d'octet(s) est précédée d'une étape de préparation (240) de l'écriture dudit second nombre d'octet(s). 4. Procédé selon l'une des revendications 1 à 3, caractérisé en ce que la seconde zone mémoire est une zone mémoire de la mémoire physique (130). 5. Procédé selon l'une des revendications 1 à 4, caractérisée par une étape de lancement (260) par le processeur (110) d'une opération de lecture de ladite pluralité d'octets. 6. Procédé selon l'une des revendications 1 à 5, caractérisé par une étape d'utilisation (270) par l'entité électronique (105) d'un mot formé par ladite pluralité d'octets. 7. Procédé selon l'une des revendications 1 à 6, caractérisé par une étape d'écriture (210, 215) du premier nombre d'octet(s) dans la seconde zone mémoire en cas de détection d'une attaque. 8. Procédé selon l'une des revendications 1 à 7, caractérisé en ce que la détection d'attaque (205) est basée sur une mesure d'au moins un paramètre de la liste suivante : température, tension d'alimentation, désadaptation (glitches), lumière, sommes de vérification, parité, fréquence d'horloge. 9. Procédé selon l'une des revendications 1 à 7, caractérisé en ce que la détection d'attaque (205) est basée sur une étape de comparaison des résultats de deux exécutions, ou une étape de vérification d'une relation entre deux variables de calcul, ou une étape de vérification d'une propriété d'une variable. 10. Procédé selon l'une des revendications 1 à 9, caractérisé en ce que l'étape d'écriture de la pluralité d'octets est commandée lors de l'exécution d'un programme par appel à un sous-programme d'écriture. 11. Procédé selon la revendication 10, caractérisé en ce que l'exécution du sous-programme d'écriture comprend le lancement de l'opération d'écriture du premier nombre d'octet(s) et le lancement de l'opération d'écriture du second nombre d'octet(s). 30 12. Procédé selon l'une des revendications 1 à 9, caractérisé en ce que l'écriture d'une pluralité d'octets est commandée par un module applicatif àun module de gestion d'écriture, et en ce que le module de gestion d'écriture effectue le lancement de l'opération d'écriture du premier nombre d'octet(s) et le lancement de l'opération d'écriture du second nombre d'octet(s). 13. Entité électronique équipée d'un processeur et mémorisant un programme apte à mettre en oeuvre un procédé selon l'une des revendications 1 à 12 lorsque le programme est exécuté par le processeur.10