WO2007077142A2 - Procede de securisation de l'execution d'un programme d'ordinateur - Google Patents

Procede de securisation de l'execution d'un programme d'ordinateur Download PDF

Info

Publication number
WO2007077142A2
WO2007077142A2 PCT/EP2006/070061 EP2006070061W WO2007077142A2 WO 2007077142 A2 WO2007077142 A2 WO 2007077142A2 EP 2006070061 W EP2006070061 W EP 2006070061W WO 2007077142 A2 WO2007077142 A2 WO 2007077142A2
Authority
WO
WIPO (PCT)
Prior art keywords
instructions
instruction
neutral
counter
execution
Prior art date
Application number
PCT/EP2006/070061
Other languages
English (en)
Other versions
WO2007077142A3 (fr
Inventor
Olivier Benoit
Original Assignee
Gemplus
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Gemplus filed Critical Gemplus
Publication of WO2007077142A2 publication Critical patent/WO2007077142A2/fr
Publication of WO2007077142A3 publication Critical patent/WO2007077142A3/fr

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing

Definitions

  • the present invention relates to the field of securing the execution of computer programs, particularly in the context of smart cards, and more particularly to a method for securing the execution of such a program comprising instructions. branches inserted in a stream of neutral instructions to execute one after the other.
  • the detection of this type of fault by means of software mechanisms is complex and costly (in terms of performance) to implement. Indeed, the software must permanently keep in one or more rs variable variable (s) a value corresponding to the state in which it is located (state machine) and check at the appropriate times that there is coherence between the state in which it is and the state in which it should be.
  • the object of the present invention is to overcome this fastidious and penalizing management at the software level by integrating it directly into the hardware architecture of the component to be protected.
  • CPU central processing unit
  • the neutral instructions (which do not imply breaking of the program) are distinguished from the branching instructions (which imply an updating of the program pointer with an offset or an immediate value).
  • JSR subroutine
  • the object of the invention is first of all a method for securing the execution of a computer program comprising branch instructions inserted in a stream of neutral instructions to be executed. one after the other, said method comprising the steps of:
  • this method can secure the execution of the program against the attempts of diversion. It is assumed that a disturbance confuses the program by disrupting for example the address of a branch.
  • the instruction counter will be reset to zero or the program will jump to any ADDR address. If ADDR is a neutral instruction in a linear code field, then, when the program reaches the next branch instruction, the contents of the counter will be equal to the number of neutral instructions executed from ADDR and therefore necessarily different from the corresponding number. previously recorded, and the trap will be detected.
  • the recording in memory of the numbers of neutral instructions can be done either before the execution of the program for all the instructions of branching, or as and when this execution during the passage of each instruction of particular branching .
  • interruption is generally understood not only as an interruption proper to the execution of the program, but also any setting in the state of alert.
  • the invention also relates to a computer program for securing an application program comprising branch instructions inserted in a stream of neutral instructions to be executed one after the other, this program being arranged for :
  • This program can in particular be a compiler or an interpreter according to the language used for the application program.
  • this program may also be arranged to, when detecting a branch instruction determined, insert instructions consisting in: o reading the contents of an instruction counter that can be incremented during the execution of each neutral instruction; comparing said number of neutral instructions with the content of said instruction counter; and
  • instructions to read the contents of the instruction counter, to compare this content to the number of neutral instructions, to initialize the counter, and to generate an interrupt may actually be inserted in the modified application program, or be performed physically at the level of the central unit on which the modified program is running.
  • said security program is arranged to:
  • the security program can be arranged to, when detecting such a label, insert instructions consisting in: o reading the contents of said instruction counter; o comparing said number of neutral instructions with the contents of said instruction counter; and - in case of equality between said number of neutral instructions and the contents of said counter, initializing said counter and proceed to the next instruction; in case of inequality between said number of neutral instructions and the content of said counter, generating an interrupt.
  • the control instruction is therefore added just before a label corresponding to a branch instruction so as to take account of the fact that the program can enter the flow of neutral instructions at the level of the label and not at the level of the instruction previous connection.
  • This control instruction is handled by the processing unit as a branch instruction by comparing the contents of the memory of the number of neutral instructions to the instruction counter.
  • the invention also relates to a secure computer program comprising branching instructions inserted in a stream of neutral instructions to be executed one after the other, wherein said branching instructions comprise, as a parameter, the number of neutral instructions to execute from the previous branch instruction.
  • said secure program further comprises instructions consisting, at least during the execution of each branch instruction, in:
  • said computer program includes labels associated with branch instructions, and further comprises, upstream of said labels, a control instruction including, as a parameter, the number of neutral instructions to execute from the previous branch instruction or the previous label.
  • said computer program may further comprise, upstream of said labels, instructions consisting in: reading the content of said instruction counter; o comparing said number of neutral instructions with the contents of said instruction counter; and in case of equality between said number of neutral instructions and the contents of said counter, initializing said counter and proceeding to the next instruction; in case of inequality between said number of neutral instructions and the contents dud it counter, generate u no interruption.
  • the invention also relates to a computer processing unit comprising means for executing a computer program including branch instructions inserted in a stream of neutral instructions to be executed one after the other, respectively associated labels.
  • branching instructions in which the average means include:
  • a memory capable of containing the number of neutral instructions to be executed between each branch instruction, respectively between each label and the branch instruction or the preceding label, during the execution of said program;
  • the invention also has an electronic component comprising a processing unit as described above.
  • the invention also relates to a smart card comprising an electronic component as described above.
  • FIG. 1 is a flowchart illustrating the process according to the invention
  • FIG. 2 diagrammatically represents a modified application program according to the invention
  • FIG. 3 represents an electronic component according to the invention
  • FIG. 4 represents a smart card according to the invention.
  • FIG. 1 illustrates the method according to the invention as it can be implemented by the CPU represented at 1 in FIG. 3, and comprising:
  • a memory 2 containing the numbers of neutral instructions to be executed between each connection instruction of a program with secure execution
  • an instruction counter C1 3 that can be incremented by the CPU during the execution of each neutral instruction of the program; a comparator 4 for comparing the contents of the counter 3 with the contents of a location in the memory 2 corresponding to a determined branch instruction.
  • the numbers of neutral instructions to be executed between each branch instruction of the program are recorded at 10 in the respective locations of the memory, for example during compilation of the program. It will be seen below that the memory 2 may be none other than specific locations of the memory containing the sequence of instructions of the program to be executed, where these numbers appear in the form of parameters of the branch instructions.
  • the CPU It is possible for the CPU to read each instruction in a known manner after executing the program. For each new instruction read, the CPU determines in 1 1 whether it is a neutral instruction or a branch instruction.
  • the CPU reads the counter at 15 and compares its content to the contents of the memory corresponding to that particular branch instruction.
  • the counter is reset to 17 and, as before, the instruction is executed at 13 and the CPU switches to 14 at the end of the program. following instruction.
  • inequality there was an anomaly, and an interruption is generated in 1 8.
  • Figure 2 shows how an application program is modified to include in each particular branch instruction an additional parameter PNI (Preceding Neutral I nstructions) corresponding to the number of neutral instructions present in the program between the previous instruction of branch (or the beginning of the subroutine, or program) and this one.
  • PNI Preceding Neutral I nstructions
  • the program consists of x instructions before reaching a first branch instruction (which will therefore include the parameter PN I ⁇ x).
  • the code can then follow two branches which themselves consist of a first piece of linear code (composed of respectively y1 in 21 and z in 22 neutral instructions), etc.
  • the CTL instruction is managed by the CPU in the same way as a conventional branch instruction by comparing the value of PNI with the counter C1.
  • a software must undergo an operation of transformation to insert the CTL instruction where needed and generate the correct NIBP values for all branch instructions.
  • the value of Cl is saved when the interruption appears (in the same way as the bank of registers in general and the return address in all cases). Cl is reset so that the mechanism is still active during interrupt processing. The saved value of Cl is restored when the RTI instruction is executed.
  • the RTI instruction is considered a branch instruction and, as such, includes the NIBP parameter that will be validated before it is executed.
  • the counter 3 can be implemented in the form of a register of size N bytes, making it possible to count up to 2 ⁇ 8.N.
  • N 1 byte can be taken.
  • the parameter PNI is then coded in the memory 2 on the same number N of byte as the counter 3.
  • FIG. 3 also shows the CPU 1 as part of an electronic component 30, while FIG. 4 shows a smart card 31 comprising the component 30.
  • the present invention makes it possible to detect most of the perturbation-related sequencing errors, with: a low cost in code size (addition of the PNI parameter for all the branching instructions and the CTL instruction to the plug-in labels);

Abstract

Procédé de sécurisation de l'exécution d'un programme d'ordinateur comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres. Le procédé comprend des étapes consistant à : - enregistrer (10) dans une mémoire (2) le nombre d'instructions neutres à exécuter entre chaque instruction de branchement ; incrémenter (12) un compteur d'instructions (3) lors de l'exécution de chaque instruction neutre et lors de l'exécution de chaque instruction de branchement lire (15) le contenu dudit compteur d'instructions, comparer (16) le contenu dudit compteur d'instructions au nombre enregistré dans ladite mémoire, d'instructions neutres censées avoir été exécutées depuis l'instruction de branchement précédente, et si le contenu dudit compteur d'instructions est égal au nombre d'instructions neutres enregistré, initialiser (17) ledit compteur et poursuivre l'exécution dudit programme, et si le contenu dudit compteur d'instructions n'est pas égal au nombre d'instructions neutres enregistré, générer (18) une interruption.

Description

PROCEDE DE SECURISATION DE LΕXÉCUTION D'U N PROGRAMME D1O RD I NATE U R
La présente invention concerne le domaine de la sécurisation de l'exécution des programmes d'ordinateur, notamment dans le cadre des cartes à puce, et a plus particulièrement pour objet un procédé de sécurisation de l'exécution d'un tel programme comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres.
On sait que les cartes à puce font l'objet de nombreuses tentatives de piratage, notamment par des attaques actives au cours desquelles le pirate potentiel perturbe physiquement le circuit intégré de la puce en vue de modifier le comportement de cette dernière et de dérouter le code logiciel vers u n autre type d'exécution.
Pou r faire échec à ces tentatives, il est bien connu , dans un produit comprenant d'u ne manière plus générale un ou plusieurs composants électroniques et un logiciel embarqué, d'utiliser des contrôles d'intégrité sur les données et/ou de la redondance de code afin de détecter d'éventuelles pertu rbations involontaires (spatial) ou volontaire (hacker). Il s'avère toutefois que ces moyens de détection ne sont pas toujours suffisants pour détecter une erreur de séquencement du code : déroutement ou bien encore omission d'une instruction de branchement/saut/retour.
La détection de ce type de faute au moyen de mécanismes logiciels est complexe et coûteuse (en termes de performance) à mettre en œuvre. En effet, le logiciel doit en permanence conserver dans une ou plusieu rs variable(s) temporaire(s) une valeur correspondant à l'état dans lequel il se trouve (machine d'état) et vérifier aux moments opportuns qu'il y a bien cohérence entre l'état dans lequel il se trouve et l'état dans lequel il devrait être. La présente invention a pour objet de s'affranchir de cette gestion fastidieuse et pénalisante au niveau logiciel en l'intégrant directement dans l'architectu re matérielle (hardware) du composant à protéger.
On sait qu'u ne unité centrale de traitement CPU (central processing unit) a pou r mission, dans un composant électronique de type microprocesseur, de décoder et exécuter u ne à une les instructions qui composent le logiciel (software). Elle est donc au cœur du séquencement du code et, par là même, la mieux placée pour effectuer la vérification de cohérence d'état pour peu que, selon l'invention, on en modifie légèrement le fonctionnement.
On rappelle que la CPU lit à l'adresse pointée par le pointeur de programme (PC : program counter), le code opération de l'instruction à exécuter ainsi que les éventuels opérandes associés à cette instruction.
On distinguera dans ce qui suit les instructions neutres (qui n'impliquent pas de rupture du programme) des instructions de branchement (qui impliquent une mise à jour du pointeur de programme avec un décalage ou une valeu r immédiate).
On peut noter, à titre d'exemples d'instructions neutres :
- les instructions arithmétiques et logiques (ORL, AN D ... ) ;
- les instructions de lecture/écriture en mémoire ou dans des registres (MOV, LD, ... ) ; et à titre d'exemple d'instructions de branchements : - les branchements conditionnels ou non (BEQ, B RA ... ) ;
- les sauts (JM P) ;
- les sauts dans une sous-routine (JSR) ;
- les retours de sous-routine (RTS). Afin de pallier les inconvénients mentionnés ci-dessus, l'invention a tout d'abord pour objet un procédé de sécurisation de l'exécution d'un programme d'ordinateur comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, ledit procédé comprenant les étapes consistant à :
> enregistrer dans une mémoire, préalablement à l'exécution dudit programme, respectivement préalablement à l'exécution d'une instruction particulière dudit programme, le nombre d'instructions neutres à exécuter entre chaque instruction de branchement, respectivement entre ladite instruction de branchement particulière et l'instruction de branchement qui la précède ;
> lors de l'exécution du programme • lors de l'exécution de chaque instruction neutre o incrémenter un compteur d'instructions ; β et au moins lors de l'exécution de chaque instruction de branchement o lire le contenu dudit compteur d'instructions ; o comparer le contenu dudit compteur d'instructions au nombre enregistré dans ladite mémoire, d'instructions neutres censées avoir été exécutées depuis l'instruction de branchement précédente ; et
-si le contenu dudit compteur d'instructions est égal au nombre d'instructions neutres enregistré, initialiser ledit compteur et poursuivre l'exécution dudit programme ;
-si le contenu dudit compteur d'instructions n'est pas égal au nombre d'instructions neutres enregistré, générer une interruption.
On comprend que ce procédé puisse sécuriser l'exécution du programme contre les tentatives de déroutement. On suppose en effet qu'une perturbation déroute le programme en pertu rbant par exemple l'adresse d'un branchement. Le compteur d'instructions sera remis à zéro pu is le programme sautera à u ne adresse ADDR quelconque. Si ADDR correspond à u ne instruction neutre dans une zone de code linéaire, alors, lorsque le programme atteindra l'instruction de branchement suivante, le contenu du compteur sera égal au nombre d'instructions neutres exécutées depuis ADDR et donc nécessairement différent du nombre correspondant préalablement enregistré, et le déroutement sera détecté.
On observe que l'enregistrement en mémoire des nombres d'instructions neutres peut s'effectuer soit avant l'exécution du programme pour toutes les instructions de branchement, soit au fur et à mesure de cette exécution lors du passage de chaque instruction de branchement particulière.
Par ailleurs, on entend généralement par interruption non seulement une interruption proprement dite de l'exécution du programme, mais également toute mise en état d'alerte.
L'invention a également pour objet un programme d'ordinateur pour la sécu risation d'un programme d'application comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, ce programme étant agencé pour :
> lire les instructions dudit programme d'application ;
> détecter les instructions de branchement ;
> lors de la détection d'une instruction de branchement déterminée
« compter le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ; β insérer ledit nombre d'instructions neutres en tant que paramètre de ladite instruction de branchement déterminée. Ce programme peut notamment constituer un compilateur ou un interpréteur selon le langage utilisé pour le programme d'application .
Dans un mode de réalisation particulier, ce programme peut en outre être agencé pour, lors de la détection d'une instruction de branchement déterminée, insérer des instructions consistant à : o lire le contenu d'un compteur d'instructions susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre ; o comparer ledit nombre d'instructions neutres au contenu dud it compteur d'instructions ; et
- en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et exécuter ledit branchement ;
- en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, générer u ne interruption .
On observera que, lorsqu'un programme d'application est ainsi sécu risé lors de sa compilation ou de son interprétation , la mémoire d'enregistrement des nombres d'instructions neutres dont il est question ci-dessus n'est autre alors qu'une partie de la mémoire dans laquelle sont stockées les instructions de ce programme d'application, puisque ces nombres d'instructions apparaissent comme des paramètres des instructions de branchement.
Par ailleurs, les instructions consistant à lire le contenu du compteur d'instructions, à comparer ce contenu au nombre d'instructions neutres, à initialiser le compteur, et à générer une interruption peuvent être effectivement insérées dans le programme d'application modifié, ou être réalisées matériellement au niveau de l'u nité centrale sur laquelle s'exécute le programme modifié. Dans un mode de mise en œuvre particulier, ledit programme de sécurisation est agencé pour :
> détecter les labels associés à des instructions de branchement ;
> lors de la détection d'un tel label,
« compter le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ou le label précédent ; • insérer, en amont dudit label, une instruction de contrôle comportant ledit nombre d'instructions neutres en tant que paramètre.
Plus particulièrement, le programme de sécurisation peut être agencé pour, lors de la détection d'un tel label, insérer des instructions consistant à : o lire le contenu dudit compteur d'instructions ; o comparer ledit nombre d'instructions neutres au contenu dudit compteur d'instructions ; et - en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et passer à l'instruction suivante ; en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, générer une interruption.
L'instruction de contrôle est donc ajoutée juste avant un label correspondant à une instruction de branchement de manière à tenir compte du fait que le programme peut entrer dans le flux d'instructions neutres au niveau du label et non pas au niveau de l'instruction de branchement précédente. Cette instruction de contrôle est gérée par l'unité de traitement comme une instruction de branchement en comparant le contenu de la mémoire du nombre d'instructions neutres au compteur d'instructions. L'invention a également pour objet un programme d'ordinateur sécurisé, comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, dans lequel lesdites instructions de branchement comprennent, en tant que paramètre, le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente.
Dans un mode de réalisation particulier, ledit programme sécurisé comprend en outre des instructions consistant, au moins lors de l'exécution de chaque instruction de branchement, à :
• lire le contenu d'un compteur d'instructions susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre ; • comparer le contenu dudit compteur d'instructions audit paramètre ; et o si le contenu dudit compteur d'instructions est égal audit paramètre, initialiser ledit compteur et poursuivre l'exécution dudit programme ; o si le contenu dudit compteur d'instructions n'est pas égal audit paramètre, générer une interruption.
Également dans un mode de réalisation particulier, ledit programme d'ordinateur comporte des labels associés à des instructions de branchement, et comporte en outre, en amont desdits labels une instruction de contrôle comportant, en tant que paramètre, le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ou le label précédent.
Plus particulièrement, ledit programme d'ordinateur peut comporter en outre, en amont desdits labels, des instructions consistant à : o lire le contenu dudit compteur d'instructions ; o comparer ledit nombre d'instructions neutres au contenu dudit compteur d'instructions ; et en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et passer à l'instruction su ivante ; en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dud it compteur, générer u ne interruption.
L'invention a également pour objet une unité de traitement informatique comprenant des moyens pour exécuter un programme d'ordinateu r comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, respectivement des labels associés à des instructions de branchement, dans laquelle lesd its moyens comprennent :
> une mémoire susceptible de contenir le nombre d'instructions neutres à exécuter entre chaque instruction de branchement, respectivement entre chaque label et l'instruction de branchement ou le label précédent, lors de l'exécution dudit programme ;
> un compteur d'instructions susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre dudit programme ;
> des moyens pour comparer, préalablement à l'exécution d'une instruction de branchement, respectivement lors du passage d'un label, le contenu dudit compteur d'instructions au nombre enregistré dans lad ite mémoire d'instructions neutres censées avoir été exécutées depu is l'instruction de branchement ou le label précédent.
L'i nvention a également pou r objet un composant électronique comprenant une un ité de traitement telle que décrite ci-dessus.
L'i nvention a également pour objet u ne carte à puce comprenant un composant électronique tel que décrit ci-dessus. On décrira maintenant à titre d'exemple non limitatif des modes de réalisation de l'invention en référence aux dessins annexés dans lesquels :
- la figure 1 est un organigramme illustrant le procédé selon l'invention ;
- la figure 2 représente schématiquement un programme d'application modifié selon l'invention ;
- la figure 3 représente un composant électronique selon l'invention ; et - la figure 4 représente une carte à puce selon l'invention.
La figure 1 illustre le procédé selon l'invention tel qu'il peut être mis en œuvre par la CPU représentée en 1 à la figure 3, et comprenant :
- une mémoire 2, contenant les nombres d'instructions neutres à exécuter entre chaque instruction de branchement d'un programme à exécution sécurisée ;
- un compteur d'instructions Cl 3 susceptible d'être incrémenté par la CPU lors de l'exécution de chaque instruction neutre du programme ; - un comparateur 4 pour comparer le contenu du compteur 3 au contenu d'un emplacement de la mémoire 2 correspondant à une instruction de branchement déterminée.
Avant l'exécution du programme, les nombres d'instructions neutres à exécuter entre chaque instruction de branchement du programme sont enregistrés en 10 dans les emplacements respectifs de la mémoire, par exemple lors de la compilation du programme. On verra ci-après que la mémoire 2 peut n'être autre que des emplacements particuliers de la mémoire contenant la suite des instructions du programme à exécuter, où ces nombres apparaissent sous la forme de paramètres des instructions de branchement.
On a vu qu'en variante, l'enregistrement en mémoire des nombres d'instructions neutres peut s'effectuer au fur et à mesure de l'exécution d u programme lors du passage de chaque instruction de branchement particulière.
Pu is, au cou rs de l'exécution du programme, la CPU lit successivement chaque instruction de façon connue. Pour chaque nouvelle instruction lue, la CPU détermine en 1 1 s'il s'agit d'une instruction neutre ou d'une instruction de branchement.
S'il s'agit d'une instruction neutre, le compteur 3 est incrémenté en 12 , l'instruction est exécutée en 13, et la CPU passe à l'instruction suivante en 14.
S'il s'agit d'une instruction de branchement, la CPU lit le compteur en 1 5 et compare en 16 son contenu au contenu de la mémoire correspondant à cette instruction de branchement particulière. En cas d'égalité, il n'y a pas eu d'anomalie dans le déroulement du programme, le compteur est remis à zéro en 17 et, comme précédemment, l'instruction est exécutée en 13 et la CPU passe en 14 à l'instruction suivante. En cas d'inégalité, il y a eu une anomalie, et une interruption est générée en 1 8.
La figure 2 montre comment un programme d'application est modifié de sorte d'inclure dans chaque instruction de branchement particulière, un paramètre supplémentaire PNI (Preceding Neutral I nstructions) correspondant au nombre d'instructions neutres présentes dans le programme entre la précédente instruction de branchement (ou le début de la sous-routine, ou du programme) et celle-ci.
On constate par exemple en 20 que le programme consiste en x instructions avant d'atteindre une première instruction de branchement (qui inclura donc le paramètre PN I ≈x). Le code peut alors suivre deux branches qu i elles-mêmes consistent en un premier morceau de code linéaire (composé de respectivement y1 en 21 et z en 22 instructions neutres), etc..
On peut considérer comme autre exemple que l'instruction jsr(toto) n'est pas exécutée en 23 suite à une perturbation. Il en résulte donc que Cl ne sera pas remis à zéro et lorsque le programme atteindra en 24 l'instruction RTS(y2), il y aura incohérence entre Cl = y1+y2 et PNI = y2.
Afin de considérer le cas particulier du saut en 25 à un label dans le code (jmp label), il est nécessaire d'introduire en 26 une nouvelle instruction CTL. Cette instruction est insérée dans le code juste avant les labels correspondant à des jmp/branch.
L'instruction CTL est gérée par le CPU au même titre qu'une instruction de branchement classique en comparant la valeur de PNI au compteur Cl. Pour être exécutable sur une CPU telle que celle de la figure 3, un logiciel doit subir une opération de transformation afin d'insérer l'instruction CTL aux endroits nécessaires et de générer les bonnes valeurs de PNI pour toutes les instructions de branchement.
Il convient de noter le cas particulier des interruptions hardware qui se traduisent par une rupture du séquencement suivie habituellement de l'exécution du code correspondant à l'interruption et de l'instruction finale RTI (ReTurn from Interrupt) qui met fin au code de l'interruption et qui retourne à l'exécution du programme initial là ou il avait été interrompu. Ce type d'événement peut être géré de deux manières : - durant l'exécution de l'interruption, le mécanisme décrit ci- dessus est débrayé et Cl conserve sa valeur. Le mécanisme est réactivé par l'instruction RTI. Dans ce cas-là, l'exécution de l'interruption est transparente ; par contre elle n'est pas protégée car réalisée en dehors du mécanisme selon l'invention
- dans un autre mode de réalisation, la valeur de Cl est sauvegardée lorsque l'interruption apparaît (au même titre que la banque de registres en général et l'adresse de retour dans tous les cas). Cl est remis à zéro de sorte que le mécanisme est toujours actif durant le traitement de l'interruption. La valeur sauvegardée de Cl est restaurée lors de l'exécution de l'instruction RTI. Par ailleurs, l'instruction RTI est considérée comme une instruction de branchement et, comme telle, inclut le paramètre PNI qui sera validé avant son exécution.
Si l'on revient à la figure 3, le compteur 3 peut être réalisé sous la forme d'un registre de taille N bytes, permettant de compter jusqu'à 2Λ8.N. Dans un mode de réalisation de l'invention, on peut prendre N = 1 byte. Le paramètre PNI est alors codé dans la mémoire 2 sur le même nombre N de byte que le compteur 3.
La figure 3 montre par ailleurs la CPU 1 comme faisant partie d'un composant électronique 30, tandis que la figure 4 montre une carte à puce 31 comportant le composant 30.
La présente invention permet de détecter la plupart des erreurs de séquencement liées à une perturbation, avec : - un faible coût en taille de code (ajout du paramètre PNI pour toutes les instructions de branchement et de l'instruction CTL aux labels branchables) ;
- un faible coût en taille de silicium (ajout d'un compteur Cl et de la gestion par le décodeur d'instruction de la comparaison de Cl à PNI pour les instructions de branchement) ;
- un faible coût en temps d'exécution (éventuellement nul car la comparaison et l'incrémentation de Cl peuvent être fait en parallèle avec l'exécution de l'instruction).

Claims

REVENDICATIONS
1. Procédé de sécurisation de l'exécution d'un programme d'ordinateur comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, ledit procédé étant caractérisé par le fait qu'il comprend des étapes consistant à :
> enregistrer (10) dans une mémoire (2), préalablement à l'exécution dudit programme, respectivement préalablement à l'exécution d'une instruction particulière dudit programme, le nombre d'instructions neutres à exécuter entre chaque instruction de branchement, respectivement entre ladite instruction de branchement particulière et l'instruction de branchement qui la précède ; > lors de l'exécution du programme
• lors de l'exécution de chaque instruction neutre o incrémenter (12) un compteur d'instructions (3) ;
• et au moins lors de l'exécution de chaque instruction de branchement o lire (15) le contenu dudit compteur d'instructions ; o comparer (16) le contenu dudit compteur d'instructions au nombre enregistré dans ladite mémoire, d'instructions neutres censées avoir été exécutées depuis l'instruction de branchement précédente ; et - si le contenu dudit compteur d'instructions est égal au nombre d'instructions neutres enregistré, initialiser (17) iedit compteur et poursuivre l'exécution dudit programme ; si le contenu dudit compteur d'instructions n'est pas égal au nombre d'instructions neutres enregistré, générer (18) une interruption.
2. Produit programme d'ordinateur pour la sécurisation d'un programme d'application comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, caractérisé par Ie fait qu'il comprend des instructions pour réaliser, à l'exécution, les étapes suivantes:
> lire les instructions dudit programme d'application ; > détecter les instructions de branchement ;
> lors de la détection d'une instruction de branchement déterminée
• compter le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ; • insérer ledit nombre d'instructions neutres en tant que paramètre de ladite instruction de branchement déterminée.
3. Produit programme d'ordinateur selon la revendication 2, comprenant en outre des instructions pour réaliser, à l'exécution, les étapes suivantes, iors de la détection d'une instruction de branchement déterminée, insérer des instructions consistant à : o lire le contenu d'un compteur d'instructions susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre ; o comparer ledit nombre d'instructions neutres au contenu dudit compteur d'instructions ; et
- en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et exécuter ledit branchement ; - en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, générer une interruption.
4. Produit programme d'ordinateur selon l'une quelconque des revendications 2 et 3, comprenant des instructions pour réaliser, à l'exécution, les étapes suivantes:
> détecter les labels associés à des instructions de branchement ;
> lors de la détection d'un tel label, ® compter le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ou le label précédent ;
• insérer, en amont dudit label, une instruction de contrôle comportant ledit nombre d'instructions neutres en tant que paramètre.
5. Produit programme d'ordinateur selon la revendication 4, comprenant en outre des instructions pour réaliser, à l'exécution, les étapes suivantes, lors de la détection d'un tel label, insérer des instructions consistant à : o lire le contenu dudit compteur d'instructions ; o comparer ledit nombre d'instructions neutres au contenu dudit compteur d'instructions ; et - en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et passer à l'instruction suivante ; en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, générer une interruption.
6. Produit programme d'ordinateur sécurisé, comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres caractérisé par !e fait que, à l'exécution, lesdites instructions de branchement ont, en tant que paramètre, le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente.
7. Produit programme d'ordinateur selon la revendication 6, comprenant en outre des instructions pour, au moins lors de l'exécution de chaque instruction de branchement, réaliser, à l'exécution, les étapes suivantes: « lire le contenu d'un compteur d'instructions susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre
« comparer le contenu dudit compteur d'instructions audit paramètre ; et o si le contenu dudit compteur d'instructions est égal audit paramètre, initialiser ledit compteur et poursuivre l'exécution dudit programme ; o si le contenu dudit compteur d'instructions n'est pas égal audit paramètre, générer une interruption.
8. Produit programme d'ordinateur selon l'une quelconque des revendications 6 et 7, comportant des labels associés à des instructions de branchement et comportant en outre, en amont desdits labels une instruction de contrôle comportant, en tant que paramètre, le nombre d'instructions neutres à exécuter depuis l'instruction de branchement précédente ou le label précédent.
9. Produit programme d'ordinateur selon la revendication 8, comportant en outre, en amont desdits labels, des instructions pour réaliser, à l'exécution, les étapes suivantes: o lire le contenu dudit compteur d'instructions ; o comparer ledit nombre d'instructions neutres au contenu dudit compteur d'instructions ; et - en cas d'égalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, initialiser ledit compteur et passer à l'instruction suivante ;
- en cas d'inégalité entre ledit nombre d'instructions neutres et le contenu dudit compteur, générer une interruption.
10. Unité de traitement informatique comprenant des moyens pour exécuter un programme d'ordinateur comportant des instructions de branchement insérées dans un flux d'instructions neutres à exécuter les unes à la suite des autres, respectivement des labels associés à des instructions de branchement, caractérisée par le fait que lesdits moyens comprennent :
> une mémoire (2) susceptible de contenir le nombre d'instructions neutres à exécuter entre chaque instruction de branchement, respectivement entre chaque label et l'instruction de branchement ou le label précédent, lors de l'exécution dudit programme ;
> un compteur d'instructions (3) susceptible d'être incrémenté lors de l'exécution de chaque instruction neutre dudit programme ;
> des moyens (4) pour comparer, préalablement à l'exécution d'une instruction de branchement, respectivement lors du passage d'un label, le contenu dudit compteur d'instructions au nombre enregistré dans ladite mémoire d'instructions neutres censées avoir été exécutées depuis l'instruction de branchement ou le label précédent.
1 1 . Composant électronique, caractérisé par le fait qu'il comprend une u nité de traitement (1 ) selon la revendication 10.
12. Carte à puce, caractérisée par le fait qu'elle comprend un composant électronique (30) selon la revend ication 1 1 .
13. Carte à puce selon la revendication 12, comprenant u ne mémoire dans laquelle est enregistré u n programme sécurisé selon l'une quelconque des revendications 6 à 9.
PCT/EP2006/070061 2006-01-04 2006-12-21 Procede de securisation de l'execution d'un programme d'ordinateur WO2007077142A2 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0650026 2006-01-04
FR0650026A FR2895814A1 (fr) 2006-01-04 2006-01-04 Procede de securisation de l'execution d'un programme d'ordinateur

Publications (2)

Publication Number Publication Date
WO2007077142A2 true WO2007077142A2 (fr) 2007-07-12
WO2007077142A3 WO2007077142A3 (fr) 2009-03-19

Family

ID=38110446

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/EP2006/070061 WO2007077142A2 (fr) 2006-01-04 2006-12-21 Procede de securisation de l'execution d'un programme d'ordinateur

Country Status (2)

Country Link
FR (1) FR2895814A1 (fr)
WO (1) WO2007077142A2 (fr)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009144606A1 (fr) 2008-05-30 2009-12-03 Nxp B.V. Procédé permettant d'adapter et d'exécuter un programme informatique et architecture informatique correspondante
FR2977342A1 (fr) * 2011-06-30 2013-01-04 Proton World Int Nv Verification d'integrite d'un programme execute par un circuit electronique

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3438865A1 (fr) * 2017-08-02 2019-02-06 Texplained Détection d'attaque par comptage d'instruction de branchement
FR3118233B1 (fr) * 2020-12-18 2024-01-19 St Microelectronics Alps Sas Procédé de détection d’ingénierie inversée sur une unité de traitement utilisant un registre d’instruction et circuit intégré correspondant

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2790844A1 (fr) * 1999-03-09 2000-09-15 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
US20030188231A1 (en) * 2002-04-01 2003-10-02 Cronce Paul A. Method for runtime code integrity validation using code block checksums
FR2849226A1 (fr) * 2002-12-20 2004-06-25 Oberthur Card Syst Sa Procede et dispositif de securisation de l'execution d'un programme informatique.
EP1605333A1 (fr) * 2004-06-07 2005-12-14 Proton World International N.V. Contrôle de l'exécution d'un programme

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2790844A1 (fr) * 1999-03-09 2000-09-15 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
US20030188231A1 (en) * 2002-04-01 2003-10-02 Cronce Paul A. Method for runtime code integrity validation using code block checksums
FR2849226A1 (fr) * 2002-12-20 2004-06-25 Oberthur Card Syst Sa Procede et dispositif de securisation de l'execution d'un programme informatique.
EP1605333A1 (fr) * 2004-06-07 2005-12-14 Proton World International N.V. Contrôle de l'exécution d'un programme

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009144606A1 (fr) 2008-05-30 2009-12-03 Nxp B.V. Procédé permettant d'adapter et d'exécuter un programme informatique et architecture informatique correspondante
US9117070B2 (en) 2008-05-30 2015-08-25 Nxp, B.V. Method for adapting and executing a computer program and computer architecture therefore
FR2977342A1 (fr) * 2011-06-30 2013-01-04 Proton World Int Nv Verification d'integrite d'un programme execute par un circuit electronique

Also Published As

Publication number Publication date
WO2007077142A3 (fr) 2009-03-19
FR2895814A1 (fr) 2007-07-06

Similar Documents

Publication Publication Date Title
EP1161725B1 (fr) Procede de surveillance du deroulement d'un programme
WO2006045924A1 (fr) Protection contre les attaques par generation de fautes sur les instructions de saut
EP1605333B1 (fr) Contrôle de l'exécution d'un programme
FR2849226A1 (fr) Procede et dispositif de securisation de l'execution d'un programme informatique.
FR3000249A3 (fr) Systeme et procede de detection d'un code malveillant execute par une machine virtuelle
EP1904946B1 (fr) Detection d'une faute par perturbation longue
EP1659515A1 (fr) Protection d'un microcontrôleur
WO2007077142A2 (fr) Procede de securisation de l'execution d'un programme d'ordinateur
WO2014023894A1 (fr) Systeme de detection de modification d'une pile d'appel de sous-programme
EP1108249B1 (fr) Procede de securisation du traitement d'une information sensible dans un module de securite monolithique, et module de securite associe
FR2889005A1 (fr) Integrite materielle permanente des donnees
FR3070076B1 (fr) Procede de protection d'un dispositif electronique contre des attaques par injection de faute
FR2958764A1 (fr) Compteur d'evenements dans un systeme adapte au langage javacard
FR2814557A1 (fr) Protection contre l'exploitation abusive d'une instruction dans une memoire
EP2860668B1 (fr) Procédé et dispositif de réalisation de fonction par un microcircuit
EP1715436A2 (fr) Protection du déroulement d'un programme exécuté par un circuit intégré ou de données contenues dans ce circuit
WO2017102663A1 (fr) Procédé de sécurisation d'au moins une zone mémoire d'un dispositif électronique, module de sécurisation, dispositif électronique et programme d'ordinateur correspondants
EP1742162B1 (fr) Protection de l'exécution d'un programme
WO2006067319A1 (fr) Procede et dispositif de remplissage de securisation d'une memoire et memoire associee
EP1713023B1 (fr) Protection de données contenues dans un circuit intégré
EP2229648B1 (fr) Methode de transfert securise de donnees
EP4131041B1 (fr) Procédé de vérification d'une exécution d'un programme logiciel
WO2007006887A1 (fr) Protection contre les attaques par generation de fautes sur les instructions de saut
WO2023083776A1 (fr) Procédé de détection d'une tentative d'extraction linéaire du contenu d'une mémoire
EP4177780A1 (fr) Procede de detection d'une tentative d'extraction lineaire du contenu d'une memoire

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application
NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 06830776

Country of ref document: EP

Kind code of ref document: A2