WO2005008451A1 - Procede de securisation de l’execution d’un programme informatique, notamment dans une carte a microcircuit - Google Patents

Procede de securisation de l’execution d’un programme informatique, notamment dans une carte a microcircuit Download PDF

Info

Publication number
WO2005008451A1
WO2005008451A1 PCT/FR2004/001755 FR2004001755W WO2005008451A1 WO 2005008451 A1 WO2005008451 A1 WO 2005008451A1 FR 2004001755 W FR2004001755 W FR 2004001755W WO 2005008451 A1 WO2005008451 A1 WO 2005008451A1
Authority
WO
WIPO (PCT)
Prior art keywords
program
execution
line
instruction
instructions
Prior art date
Legal status (The legal status 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 status listed.)
Ceased
Application number
PCT/FR2004/001755
Other languages
English (en)
Inventor
Jean-Bernard Fischer
Hugues Thiebeauld De La Crouee
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Idemia France SAS
Original Assignee
Oberthur Card Systems SA France
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 Oberthur Card Systems SA France filed Critical Oberthur Card Systems SA France
Priority to US10/563,554 priority Critical patent/US8707424B2/en
Priority to CA2531789A priority patent/CA2531789C/fr
Priority to EP04767590.5A priority patent/EP1644797B1/fr
Priority to JP2006518286A priority patent/JP4644820B2/ja
Publication of WO2005008451A1 publication Critical patent/WO2005008451A1/fr
Anticipated expiration legal-status Critical
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy

Definitions

  • the present invention relates to a method for securing the execution of a computer program and to a secure electronic entity implementing such a method.
  • the invention can in particular be used to secure a microcircuit card (also called a "smart card").
  • a microcircuit card also called a "smart card”
  • the term “securing” of a computer program will be understood to mean: - the detection of malicious attacks aimed at modifying the normal behavior of a computer program; but also - any processing aimed at making the progress of a computer program more reliable, and in particular that of a program executing in a very disturbed environment, such as a satellite, or that of a computer program with high reliability requirements, such as , for example, a cardiac implant monitoring program.
  • the term "computer program” will be understood to mean any program, whatever the computer language and the storage means used.
  • the computer program can be written in machine language, assembler, C, C ++, Java, VHDL.
  • the program can be stored in a permanent memory, for example in a ROM or EEPROM memory or on a hard disk, or in a volatile memory, for example of RAM type.
  • the program can also be materialized by an integrated circuit, for example of the FPGA type or by an ASIC (Application Specifies Integrated Circuit) circuit.
  • the present invention allows the detection of an attack intended to modify the execution sequence of a computer program executing on a secure electronic entity, for example a microcircuit card, a secure PCMIA card (for example an IBM4758 card ), a USB key or a passport incorporating a contactless chip in one of its pages. It also allows the triggering of a countermeasure to this attack.
  • the present invention makes it possible, in particular, to detect attacks by disturbing the operation of an electronic entity, for example attacks of the “attack by fault generation” type (in English “Fault Attack”). These attacks are aimed at illegally modifying the content or reading the content of a register, memory or bus, or at forcing a processor not, or badly, to execute certain instructions of a computer program.
  • the attacked computer program can then run in a very different way from that which was planned at the time of its conception.
  • These attacks can, among other things and in a known manner, be carried out: - by generating a voltage peak at one of the power supply terminals of the processor; - by suddenly raising its temperature; - by rapidly changing its clock frequency or its supply voltage; - by applying a flash of light, a laser beam, or an electromagnetic field, on a part of the silicon which composes it.
  • a first method consists in installing, in the components of the microcircuit cards, sensors which make it possible to detect such attacks.
  • a second known security method implemented in most operating systems of microcircuit cards is based on the use of "semaphore".
  • Such a method comprises: a step of modifying the content of a memory area during the execution of a set of critical instructions; and a verification step during which it is verified, by reading the content of the aforementioned memory area, that the aforementioned modification step has been carried out. If the memory area has not been modified, this means that the modification step has not been carried out, and that, consequently, the abovementioned critical instructions have not been correctly executed.
  • semaphores are traditionally implemented by variables residing in working memory (RAM) and their manipulation (positioning, reading) is relatively slow or costly in memory space. This constraint is particularly penalizing when the program is run on systems with limited resources (memory, computing power, ...) such as smart cards.
  • the present invention relates to a software security method which does not have the above drawbacks.
  • a stack of instructions is an area of the memory for temporarily storing data.
  • the values are stacked in the stack and unstacked by means of two specific instructions, called PUSH and POP respectively in the rest of the description. These instructions only handle values of fixed size, for example one byte.
  • the use of the stack follows a LIFO ("Last In First Out") type algorithm.
  • the security method according to the invention therefore uses the execution stack to store a value allowing the detection of an execution anomaly.
  • An execution stack being, on the one hand quick access to read and write and, on the other hand, inexpensive in memory space, the securing method according to the invention is particularly suitable for securing computer programs running on systems with limited resources. This new use of the instruction stack has other advantages which will be described later.
  • the stacking and unstacking steps are respectively associated with elements of at least one subset of instructions of said program.
  • the stacking step can be associated with the "open (file)" instruction to open a file and the unstacking step with the "close (file)” instruction to close this file .
  • This characteristic is particularly advantageous, because it makes it possible to automate the writing of the securing instructions, by associating, for example with the aid of an editor, the operations of stacking and unstacking with the aforementioned elements, namely in the previous example, the instructions
  • the elements of the instruction subset are respectively an opening parenthesis and a closing parenthesis of a system of parentheses. It is recalled for this purpose, that in language theory, and in a manner known to those skilled in the art of computer languages, it is said that we are in the presence of a system of parentheses when a text comprises as many opening parentheses as closing parentheses and that the beginning of this text contains a number of opening parentheses greater than or equal to the number of closing parentheses.
  • the stacking and unstacking steps can respectively be associated with the instructions: - "(" and ")”; or - " ⁇ " and “ ⁇ ”; or - “begin” and “end”; or - “repeat” and "until”.
  • the unstacking step is associated with an instruction to return to the execution of the program or of a subroutine of this program. This characteristic advantageously makes it possible to use the normal operations of unstacking carried out traditionally at the return of a program or a subroutine (during the execution of the return instruction) to detect an execution anomaly, if the unstacked values on this occasion do not correspond to those which should have been depilated in case of normal execution of the program.
  • the program is in a programming language which comprises a first instruction whose execution implements the stacking step and / or a second instruction whose execution implements said unstacking step.
  • new instructions are integrated into the programming language, these instructions each having a its own function and either a stacking function or a unstacking function for securing the program.
  • a new instruction called "open (file)" can be created, this new instruction allowing both the opening of the file and the stacking of a predetermined value in the stack. program instructions.
  • the second instruction ends the program or a subroutine of this program.
  • This embodiment has the same advantages as the embodiment previously introduced and in which the stacking and unstacking instructions are associated, and not integrated, with elements of a subset of instructions of the program. Consequently, it will not be described in detail below.
  • the predetermined value is representative of a subset of critical instructions of the program. This characteristic is particularly advantageous when the securing method is used to secure several subsets of instructions of the program. It makes it possible to detect, during the unstacking step, that a particular subset of instructions has been executed correctly, and not another subset of instructions whose execution would have resulted in the stacking of 'another predetermined value. Those skilled in the art will readily understand that this characteristic can be used to secure different branches of a test
  • the securing method according to the invention comprises a step of processing an anomaly, implemented if, during from the unstacking step, a value different from the predetermined value is unstacked.
  • This characteristic advantageously makes it possible to implement the anomaly processing step, as soon as an attack has had the consequence of modifying the normal execution of the program and in particular the call or the return of execution of a function of This program.
  • This securing process is then particularly effective.
  • the treatment of the anomaly may for example, in the case of the use of the security method in a microcircuit card, consist in rendering the card inoperative, by destroying the operating system of this card.
  • the stacking step is performed before this call, and the predetermined value deleted from the stack during the execution of this subroutine.
  • the instruction stack will keep the predetermined value stacked.
  • the subsequent unraveling of this value will lead to the detection of the execution anomaly, as explained below with reference to Appendices B and C.
  • the predetermined value can advantageously be the address of a function for processing an anomaly.
  • the predetermined value can advantageously be the address of a function for processing an anomaly.
  • this characteristic makes it possible to trigger the processing function if the program undergoes any attack the consequence of which is to avoid the execution of the subroutine. It is therefore particularly useful for securing critical functions, for example an authentication procedure.
  • An example of implementation of this characteristic will be given with reference to Annex E.
  • the invention also relates to an information medium readable by a computer system, possibly totally or partially removable, in particular CD-ROM or magnetic medium, such as a hard disk or a floppy disk, or transmissible medium such as an electrical or optical signal, this information medium comprising instructions from a computer program allowing the implementation of a security method as briefly described above, when this program is loaded and executed by a computer system.
  • the invention also relates to a computer program stored on an information medium, this program comprising instructions allowing the implementation of a security method as briefly described above, when this program is loaded and executed by a computer system.
  • the invention also relates to a secure electronic entity and a microcircuit card comprising means for implementing a security method as briefly described above.
  • Annex A comprises 33 numbered instruction lines / * a1 * / to / * a33 * / a computer program whose execution is secured by a securing method according to the invention in a preferred embodiment.
  • the / * a17 line is not a statement per se. It symbolizes the fact that the program in appendix A can contain a certain number of instructions, in place of the character string "", in addition to the instructions used to secure this program. It represents a set of instructions unrelated to the present invention.
  • the line / * a2 * / includes a #pragma asm directive, telling the compiler that the following instruction lines are in 80c51 assembler.
  • the line / * a37 includes an instruction whose execution implements a step of stacking the predetermined value 0 (in hexadecimal notation) in the instruction stack of the program of appendix A. For simplicity, we will say by Following that we stack the value 0 at the line / * a3 * /. Then, stack the value 1 on the line / * a47.
  • the predetermined values OOh and 01 h respectively represent the most significant and least significant bytes of the value 1 (in hexadecimal notation) coded on 2 bytes.
  • the line / * a5 * / includes a #pragma endasm directive, telling the compiler that the following instruction lines are no longer in 80c51 assembler, but in C language.
  • the line / * a87 contains an instruction during which it is tested whether the content of the variable "test" is equal to "TRUE". In a known manner, if this is the case at the time of the execution of the program of appendix A, the processor will execute the instructions / * a97 to / * a237 following the test of the line
  • the line / * a97 is identical to the line / * a27 previously described.
  • the lines / * a107 and / * a117 are similar to the lines / * a37 and / * a47 already described. They allow the value 1 (in hexadecimal notation) coded on two bytes to be stacked in two stages.
  • the line / * a127 is identical to the line / * a57 previously described.
  • the line / * a157 is identical to the line / * a27 previously described.
  • the line / * a167 comprises an instruction, the execution of which implements a step of unstacking the stack of instructions, the unstacked value being stored in a register A. For simplicity, it will be said later that we unstack in the register A at line / * a167.
  • the register A memorizes consequently the last value stacked in the stack, the latter operating according to a LIFO mechanism.
  • the line / * a177 contains an instruction making it possible to compare the contents of register A with the value 02H. Normally, if the program has not been attacked during its execution since the end of the instruction of the line
  • the content of register A contains the value 02H stacked during the instruction of the line / * a117.
  • the step of unstacking the line / * a167 thus allows the detection of an execution anomaly, in accordance with the present invention. If, during the step of comparing the line - / * a177 we find that the value of register A is different from the value 02H, the program of appendix A connects to the address "anomaly" during the instruction of the line / * a187.
  • This “anomaly” address is, in the embodiment described here, the address of an anomaly processing step of the security method according to the invention.
  • the address "anomaly" is an address in hexadecimal notation directly interpretable by the processor.
  • the program of appendix A executes the instruction of the line / * a197.
  • Lines a197 to / * a217 are lines similar to lines
  • the lines / * a267 to / * a337 are lines similar to the lines
  • the instruction subset consisting of lines A * a67 and 1 * 3.25 * 1 is secured thanks to: -the stacking step (lines / * a37 and 1 * 34 * 1) of the predetermined value 1 coded on 2 bytes; and - at the step of unstacking the lines / * a277 and / * a307.
  • the instruction subset consisting of lines / * a137 and / * a147 is secured thanks to: -the stacking step (lines / * a107 and / * a117) of the predetermined value 2 coded on 2 bytes; and - at the step of unstacking the lines / * a167 and / * a197.
  • Annex B comprises 28 lines of instructions numbered / * b17 to / * b287 of a computer program whose execution is secured by a securing method according to the invention in a preferred embodiment.
  • the lines / * b17 and / * b27 constitute the first two lines of declaration of the function "function" in C language, this function comprising neither input parameter nor return value.
  • Line / * b117 contains the last instruction to declare this function.
  • Line / * b37 similar to line / * a17 previously described with reference to Annex A, represents a set of instructions unrelated to the present invention.
  • Line / * b47 is identical to line / * a27 previously described with reference to appendix A.
  • a stacking step d is carried out in two stages. '' a predetermined value coded on two bytes, this predetermined value being, in this preferred mode of creation of the address of an OS_killcard function for processing an anomaly.
  • the address "OS_killcard” is an address in hexadecimal notation directly interpretable by the processor.
  • the OS_killcard function can for example inhibit the operation of the card by destroying its operating system.
  • Line / * b77 is identical to line / * a57 previously described with reference to appendix A.
  • Line / * b97 includes an instruction to call a critical function "critical_function", the code of which will be described with reference to lines / * b127 to / * b287.
  • calling a subroutine automatically causes the return address of this subroutine to be stacked in the instruction stack. This return address, coded on 2 bytes, therefore occupies two registers in the stack.
  • this address corresponds to the address of the instruction in line / * b107, this line must be executed on return from the "critical_function" function.
  • the lines / * b127 and / * b137 on the one hand and / * b287 on the other hand constitute the first two lines and the last line of declaration of the "critical_function" function, this function having neither input parameter nor value back.
  • the last four values stacked in the instruction stack are, in chronological order: - the most significant byte of the address of the OS_killcard function (line / * b57); - the least significant byte of the address of the OS_killcard function (line
  • the line / * b147 similar to the line / * a17 previously described with reference to appendix A, represents a set d instructions unrelated to the present invention. As described above with reference to lines / * a137 and / * a147 in appendix A, it will be assumed that these instructions leave the instruction stack, in the state it was in before the / * b147 instruction.
  • Line / * b157 is identical to line / * a27 previously described with reference to appendix A.
  • the stack of instructions is unstacked in register A, the content of this register A then being saved in an R7 register at step / * b177.
  • the stack of instructions is again unstacked in register A, the content of this register A being saved in a register R6 at step / * b197.
  • the registers R6 and R7 therefore contain respectively, at the end of the execution of the instruction of the line / * b197 : - the most significant byte of the address of the first instruction in the line / * b107; and - the least significant byte of the address of the first instruction of the line / * b 107.
  • we stack twice in the register A the stack of instructions on the lines / * b207 and / * b217, which amounts, in the event of normal execution of the program of appendix B, to delete the address on two bytes of the function OS_killcard from the stack of instructions during the execution of the subroutine "critical_function".
  • Annex C comprises 32 lines of instructions numbered / * c1 to / * c327 of a computer program whose execution is secured by a securing method according to the invention in a preferred embodiment.
  • the lines / * c17 to / * c117 are similar to the lines / * b1 to / * b117 described with reference to appendix B, except that we stack in the instruction stack, the predetermined value 05F1 H coded in hexadecimal on two bytes, instead of the address of the OS_killcard function (lines / * c57 and
  • this stacking step is also performed before the call to the critical_function subroutine.
  • this predetermined value 05F1 H is representative of the subset constituted by the instructions of the lines / * c127 to / * c197.
  • the lines / * c127 to A * c197 are similar to the lines / * b127 to / * b197 described with reference to Annex B.
  • the registers R6 and R7 therefore contain respectively, at the end of the execution of the instruction of the line / * c197, the most significant byte and the least significant byte of the address of the first instruction of the line / * c107 corresponding to the return address of the "critical_function" function. We then unstack the stack of instructions in register A at line
  • the register A contains the value F1 H stacked during the instruction of the line / * c57.
  • the step of unstacking the line / * c207 thus allows the detection of an execution anomaly, in accordance with the present invention. If, during the step of comparing the line / * c21 it is found that the value of register A is different from the value F1H, the program of appendix C connects to the address "OS_killcard" during the instruction of the line / * c227.
  • the OS_killcard anomaly processing program is therefore implemented, if, during the step of unstacking the instruction / * c207, a value is unstacked different from the predetermined value F1 H stacked at instruction
  • Lines / * c267 to / * c297 are similar to lines A * b227 to / * b257 previously described with reference to appendix B. They allow the values stored in registers R6 and R7 to be stacked in the instruction stack. when executing the instructions in lines / * c177 and ⁇ * c197, namely respectively: - the most significant byte of the address of the first instruction in the line / * c107; and - the least significant byte of the address of the first instruction in the line * c10 * /.
  • the lines / * c307 to / * c327 are similar to the lines / * b267 to
  • This particular embodiment makes it possible to reinforce the securing of the program, because even if an attack occurs during the execution of the test of the lines / * c207 to / * c257, this attack would be detected by the subsequent implementation of this anomaly processing function.
  • several addresses of anomaly processing functions can be used, each of them being a predetermined value associated with a set of critical instructions.
  • Annex D comprises 32 lines of instructions numbered / * d17 to / * d327 of a computer program whose execution is secured by a securing method according to the invention in a preferred embodiment.
  • the program comprises, at line / * d47, a call to a “critical_function” subroutine.
  • This call automatically causes the return address of this subroutine to be stacked, namely the address of the instruction on the line / * d57.
  • the first values of the instruction stack namely the return address, coded in two, are stored in the registers R6 and R7. bytes, of this subroutine.
  • the predetermined value 05F1 H is stacked on the lines / * d247 and / * d257. It will be noted that in this embodiment, this stacking step is carried out during the execution of the "critical_function" subroutine.
  • the lines / * d77 to / * d127 are similar to the lines / * c207 to / * c257 described above with reference to appendix C: - unraveling in the register A on lines / * d77 and / * d107; - comparison of register A, with the predetermined values F1 H and 05H on lines / * d87 and 1 * 6117; - connection to the address "OS_killcard" during the instruction / * d97 (respectively / * d127) if the register A does not contain the value F1 H (respectively 05H) at the time of the execution of the instruction of the line / * d97 (respectively l * to 127).
  • the anomaly processing routine OS_killcard is thus implemented, if, for example, during the unstacking step / * d77, a value different from the predetermined value F1H is unstacked.
  • the deletion of the predetermined value 05F1 H from the execution stack is carried out after execution of the "critical_function" subroutine and not following an attack taking place during the execution of another subroutine, this attack resulting in the execution of lines / * d67 to / * d137.
  • This implementation therefore makes it possible to ensure that the execution of the instructions of the lines / * d67 to / * d137 is carried out after the execution of the subroutine "critical_function".
  • Lines / * d147 and / * d157 end the program in appendix D.
  • Appendix E contains 28 lines of instructions numbered / * e17 to / * e287 of a computer program whose execution is secured by a process security according to the invention in a preferred embodiment.
  • Lines / * e17 to A * e57 and / * e127 to / * e287 are respectively similar to lines / * d17 to / * d57 and / * d167 to / * d327 described with reference to Annex D, with the difference that we stack in the instruction stack the address of the OS_killcard fault handling function (lines ⁇ * e207 and
  • FIG. 1 represents a microcircuit card 100 according to the invention in a preferred embodiment. To simplify, only the content of the microcircuit is shown, and this schematically.
  • the microcircuit card according to the invention 100 also comprises conventional hardware and software elements of a microcircuit card, namely in particular a support made of semi-rigid material and supply means. These elements will not be described here.
  • the microcircuit card according to the invention 100 includes means for implementing a security method as described above with reference to appendices A to E. In the preferred embodiment described here, these means consist of a processor 110, associated in particular with a non-volatile memory of the EEPROM type, with a random access memory RAM comprising a stack of instructions STACK, and with a ROM read only memory comprising an operating system OS.
  • the semi-volatile memory EEPROM comprises in particular the programs of appendices A to E, these programs being read by the processor 100 for their execution.
  • the EEPROM memory also contains the two subroutines "anomaly" and "OS_killcard”. • During the execution of the programs of appendices A to E, the registers R6, R7 and test are memorized in the RAM. In the embodiment described here, register A is the accumulator of processor 110.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Ce procédé de sécurisation de l'exécution d'un programme informatique comporte : une étape d'empilement d'une valeur prédéterminée dans une pile d'instructions du programme ; et une étape de dépilement de la pile, cette étape de dépilement étant adaptée, le cas échéant, à permettre la détection d'une anomalie d'exécution.

Description

Procédé de sécurisation de l'exécution d'un programme informatique, notamment dans une carte à microcircuit
La présente invention se rapporte à un procédé de sécurisation de l'exécution d'un programme informatique et à une entité électronique sécurisée mettant en œuvre un tel procédé. L'invention peut notamment être utilisée pour sécuriser une carte à microcircuit (autrement appelée "carte à puce"). Dans la suite de ce document, on entendra par « sécurisation » d'un programme informatique : - la détection d'attaques mal intentionnées visant à modifier le comportement normal d'un programme informatique ; mais aussi - tout traitement visant à fiabiliser le déroulement d'un programme informatique, et notamment celui d'un programme s'exécutant dans un environnement très perturbé, comme un satellite, ou celui d'un programme informatique à forte exigence de fiabilité, comme, par exemple, un programme de contrôle d'un implant cardiaque. Par ailleurs, on entendra par "programme informatique", tout programme, quel que soit le langage informatique et les moyens de mémorisation utilisés. Par exemple, et de façon non limitative, le programme informatique peut être écrit en langage machine, assembleur, C, C++, Java, VHDL. Le programme peut être mémorisé dans une mémoire permanente, par exemple dans une mémoire ROM ou EEPROM ou sur un disque dur, ou dans une mémoire volatile, par exemple de type RAM. Le programme peut être également matérialisé par un circuit intégré, par exemple de type FPGA ou par un circuit ASIC ( Application Spécifie Integrated Circuit ). La présente invention permet la détection d'une attaque destinée à modifier le déroulement de l'exécution d'un programme informatique s'exécutant sur une entité électronique sécurisée, par exemple une carte à microcircuit, une carte PCMIA sécurisée (par exemple une carte IBM4758), une clef USB ou un passeport intégrant une puce sans contact dans une de ses pages. Elle permet aussi le déclenchement d'une contre-mesure à cette attaque. La présente invention permet, en particulier, de détecter des attaques par perturbation du fonctionnement d'une entité électronique, par exemple les attaques de type « attaques par génération de fautes » (en anglais "Fault Attack"). Ces attaques visent à modifier illicitement le contenu ou la lecture du contenu d'un registre, d'une mémoire ou d'un bus, ou à obliger un processeur à ne pas, ou mal, exécuter certaines instructions d'un programme informatique. Le programme informatique attaqué peut alors se dérouler d'une façon très différente de celle qui avait été prévue au moment de sa conception. Ces attaques peuvent, entre autres et de façon connue, être effectuées : - en générant un pic de tension à l'une des bornes d'alimentation du processeur ; - en élevant brusquement sa température ; - en changeant rapidement sa fréquence d'horloge ou sa tension d'alimentation ; - en appliquant un flash de lumière, un rayon laser, ou un champ électromagnétique, sur une partie du silicium qui le compose. Selon l'état actuel de la technique, l'homme du métier dispose de différents moyens pour sécuriser un programme informatique, et notamment pour lutter contre les attaques par génération de fautes dans une carte à microcircuit. Une première méthode consiste à installer, dans les composants des cartes à microcircuit, des capteurs qui permettent de détecter de telles attaques. L'efficacité d'une telle méthode est néanmoins restreinte car il est en pratique impossible de mettre des capteurs sur toute la surface de ce composant. Par ailleurs ces capteurs étant également composés de silicium, il est également possible de les perturber ou de modifier les informations qu'ils transmettent. Un deuxième procédé de sécurisation connu et mis en œuvre dans la plupart des systèmes d'exploitation des cartes à microcircuit repose sur l'utilisation de "sémaphore". Un tel procédé comporte : -une étape de modification du contenu d'une zone mémoire durant l'exécution d'un ensemble d'instructions critiques ; et - une étape de vérification au cours de laquelle on vérifie, en lisant le contenu de la zone mémoire précitée, que l'étape de modification précitée à été réalisée. Si la zone mémoire n'a pas été modifiée, cela signifie que l'étape de modification n'a pas été effectuée, et que, par conséquent, les instructions critiques précitées n'ont pas été correctement exécutées. On notera que le terme "sémaphore" fait référence dans le présent document à une notion différente de celle connue dans le domaine de la programmation des processus concurrents, et qui porte néanmoins le même nom. Cette deuxième méthode dont la mise en œuvre s'effectue par logiciel ne présente pas les inconvénients de la première méthode précitée. Néanmoins, et de façon connue, les sémaphores sont traditionnellement implémentés par des variables résidant en mémoire de travail (RAM) et leur manipulation (positionnement, lecture) est relativement lente ou coûteuse en espace mémoire. Cette contrainte est particulièrement pénalisante lorsque le programme s'exécute sur des systèmes disposant de ressources limitées (mémoire, puissance de calcul, ...) tels que des cartes à puce. La présente invention vise une méthode de sécurisation logicielle ne présentant pas les inconvénients précédents. A cet effet, elle concerne un procédé de sécurisation de l'exécution d'un programme informatique, ce procédé comportant : - une étape d'empilement d'une valeur prédéterminée dans une pile d'instructions du programme ; et - une étape de dépilement de cette pile, cette étape de dépilement étant adaptée, le cas échéant, à permettre la détection d'une anomalie d'exécution. On rappellera ici qu'une pile d'instructions est une zone de la mémoire pour conserver provisoirement des données. Les valeurs sont empilées dans la pile et dépilées aux moyens de deux instructions spécifiques, respectivement appelées PUSH et POP dans la suite de la description. Ces instructions ne manipulent que des valeurs de taille fixe, par exemple d'un octet. L'utilisation de la pile suit un algorithme de type LIFO ("Last In First Out"). De façon connue, elle mémorise, en particulier, l'adresse de retour d'une procédure (instruction RET en assembleur 80x86, par exemple). Le procédé de sécurisation selon l'invention utilise donc la pile d'exécution pour mémoriser une valeur permettant la détection d'une anomalie d'exécution. Une pile d'exécution étant, d'une part d'accès rapide en lecture et écriture et, d'autre part, peu coûteuse en espace mémoire, le procédé de sécurisation selon l'invention est particulièrement adapté pour sécuriser des programmes informatiques s'exécutant sur des systèmes disposant de ressources limitées. Cette utilisation nouvelle de la pile d'instructions présente d'autres avantages qui seront décrits ultérieurement. Dans un mode préféré de réalisation, les étapes d'empilement et de dépilement sont respectivement associées à des éléments d'au moins un sous-ensemble d'instructions dudit programme. Par exemple, l'étape d'empilement peut être associée à l'instruction "open (fichier)" d'ouverture d'un fichier et l'étape de dépilement à l'instruction "close(fichier)" de fermeture de ce fichier. Cette caractéristique est particulièrement avantageuse, car elle permet d'automatiser l'écriture des instructions de sécurisation, en associant, par exemple à l'aide d'un éditeur, les opérations d'empilement et de dépilement aux éléments précités, à savoir dans l'exemple précédent, les instructions
"open" et "close". Selon une première variante de ce mode préféré de réalisation, les éléments du sous-ensemble d'instructions sont respectivement une parenthèse ouvrante et une parenthèse fermante d'un système de parenthèses. On rappelle à cet effet, qu'en théorie des langages, et de façon connue par l'homme du métier des langages informatiques, on dit que l'on se trouve en présence d' un système de parenthèses lorsqu'un texte comporte autant de parenthèses ouvrantes que de parenthèses fermantes et que tout début de ce texte contient un nombre de parenthèses ouvrantes supérieur ou égal au nombre de parenthèses fermantes. Selon cette caractéristique particulièrement avantageuse, les étapes d'empilement et de dépilement peuvent respectivement être associées aux instructions : - "(" et ")" ; ou - "{" et "}" ;ou - "begin" et "end" ; ou - "repeat" et "until". Dans une autre variante de ce mode préféré de réalisation, l'étape de dépilement est associée à une instruction de retour d'exécution du programme ou d'un sous-programme de ce programme. Cette caractéristique permet avantageusement d'utiliser les opérations normales de dépilement effectuées traditionnellement au retour d'un programme ou d'un sous programme (lors de l'exécution de l'instruction return) pour détecter une anomalie d'exécution, si les valeurs dépilées à cette occasion ne correspondent pas à celles qui auraient dû être dépilées an cas d'exécution normale du programme. Selon une autre caractéristique, le programme est dans un langage de programmation qui comporte une première instruction dont l'exécution met en œuvre l'étape d'empilement et/ou une deuxième instruction dont l'exécution met en œuvre ladite étape de dépilement. Dans ce mode de réalisation, des instructions nouvelles sont intégrées au langage de programmation, ces instructions ayant chacune une fonction propre et, soit une fonction d'empilement, soit une fonction de dépilement en vue de la sécurisation du programme. Pour reprendre l'exemple brièvement introduit ci-dessus, une nouvelle instruction baptisée "open(fichier)", peut être créée, cette nouvelle instruction permettant à la fois l'ouverture du fichier et l'empilement d'une valeur prédéterminée dans la pile d'instructions du programme. Ainsi, le programmateur est assuré que des fonctions de sécurisation sont mises en œuvre à chaque ouverture de fichier, sans même qu'il ait besoin de s'en occuper et sans qu'un outil logiciel particulier soit nécessaire. Préférentiellement, la deuxième instruction termine le programme ou un sous-programme de ce programme. Ce mode de réalisation présente les mêmes avantages que le mode de réalisation introduit précédemment et dans lequel les instructions d'empilement et de dépilement sont associées, et non pas intégrées, à des éléments d'un sous-ensemble d'instructions du programme. En conséquence, il ne sera pas décrit en détails ci-après. Dans un mode préféré de réalisation, la valeur prédéterminée est représentative d'un sous-ensemble d'instructions critiques du programme. Cette caractéristique 'est particulièrement avantageuse lorsque le procédé de sécurisation est utilisé pour sécuriser plusieurs sous-ensembles d'instructions du programme. Elle permet de détecter, au cours de l'étape de dépilement, qu'un sous-ensemble d'instructions particulier a été exécuté correctement, et non pas un autre sous-ensemble d'instructions dont l'exécution aurait entraîné l'empilement d'une autre valeur prédéterminée. L'homme du métier comprendra aisément que cette caractéristique peut être utilisée pour sécuriser différentes branches d'un test
(du type, "if, "then", "else" en langage C), une valeur prédéterminée différente étant empilée dans chacune des branches, et l'étape de dépilement étant effectuée à la fin de ce test. Lorsque le programme fait appel à un sous-programme, cette caractéristique permet aussi de s'assurer, pendant l'exécution de ce sous- programme, que l'on est entré dans ce sous-programme suite à cet appel et non pas suite à une attaque par génération de fautes. Deux exemples de mise en œuvre de cette caractéristique seront détaillés ultérieurement en référence aux annexes A et C. Selon une autre caractéristique, le procédé de sécurisation selon l'invention comporte une étape de traitement d'anomalie, mise en œuvre, si, au cours de l'étape de dépilement, on dépile une valeur différente de la valeur prédéterminée. Cette caractéristique permet avantageusement de mettre en œuvre l'étape de traitement d'anomalie, dés qu'une attaque a eu pour conséquence de modifier l'exécution normale du programme et notamment l'appel ou le retour d'exécution d'une fonction de ce programme. Ce procédé de sécurisation est alors particulièrement efficace. Le traitement de l'anomalie peut par exemple, dans le cas de l'utilisation du procédé de sécurisation dans une carte à microcircuit, consister à rendre la carte inopérante, par destruction du système d'exploitation de cette carte. Trois exemples de mise en œuvre de cette caractéristique seront détaillés ultérieurement en référence aux annexes A, C et D. Dans un mode de réalisation particulier dans lequel le programme comporte au moins un appel à un sous-programme, l'étape d'empilement est effectuée avant cet appel, et la valeur prédéterminée supprimée de la pile pendant l'exécution de ce sous-programme. Cette caractéristique permet ainsi de contrôler que le sous- programme a effectivement été exécuté et correctement exécuté. En effet, si l'appel à ce sous-programme a été sauté, ou si l'étape de dépilement n'a pas été effectuée, la pile d'instructions conservera la valeur prédéterminée empilée. Le dépilement ultérieur de cette valeur entraînera la détection de l'anomalie d'exécution, comme explicité infra en référence aux annexes B et C. Dans ce mode de réalisation particulier, la valeur prédéterminée peut avantageusement être l'adresse d'une fonction de traitement d'une anomalie. Ainsi, si le valeur prédéterminée n'est pas dépilée pendant l'exécution du sous-programme, par exemple suite à une attaque ayant pour conséquence la non exécution de ce sous-programme, le dépilement ultérieur par le processeur de cette valeur entraînera, la mise en œuvre de cette fonction de traitement. Un exemple sera détaillé ultérieurement à l'annexe B. Cette caractéristique permet de déclencher la fonction de traitement si le programme subit une attaque quelconque dont la conséquence est d'éviter l'exécution du sous-programme. Elle est donc particulièrement utile pour sécuriser des fonctions critiques, par exemple une procédure d'authentification. Dans un autre mode de réalisation particulier dans lequel le programme comporte au moins un appel à un sous-programme, l'étape d'empilement est effectuée pendant l'exécution du sous-programme, et la valeur prédéterminée supprimée après exécution de ce sous-programme. Cette caractéristique permet ainsi de contrôler que le retour de ce sous-programme s'effectue correctement. En effet, si le retour de ce sous-programme a été perturbé, la pile d'instructions conservera la valeur prédéterminée empilée. Ce mode de réalisation particulier sera détaillé en référence à l'annexe D. Dans cet autre mode de réalisation particulier, la valeur prédéterminée peut avantageusement être l'adresse d'une fonction de traitement d'une anomalie. Pour les raisons évoquées précédemment, cette caractéristique permet de déclencher la fonction de traitement si le programme subit une attaque quelconque dont la conséquence est d'éviter l'exécution du sous- programme. Elle est donc particulièrement utile pour sécuriser des fonctions critiques, par exemple une procédure d'authentification. Un exemple de mise en œuvre de cette caractéristique sera donné en référence à l'annexe E. L'invention vise aussi un support d'informations lisible par un système informatique, éventuellement totalement ou partiellement amovible, notamment CD-ROM ou support magnétique, tel un disque dur ou une disquette, ou support transmissible tel un signal électrique ou optique, ce support d'informations comportant des instructions d'un programme informatique permettant la mise ne œuvre d'un procédé de sécurisation tel que décrit brièvement ci-dessus, lorsque ce programme est chargé et exécuté par un système informatique. L'invention vise également un programme d'ordinateur stocké sur un support d'informations, ce programme comportant des instructions permettant la mise en œuvre d'un procédé de sécurisation tel que décrit brièvement ci-dessus, lorsque ce programme est chargé et exécuté par un système informatique. L'invention vise également une entité électronique sécurisée et une carte à microcircuit comportant des moyens de mise en œuvre d'un procédé de sécurisation tel que décrit brièvement ci-dessus. Les avantages et caractéristiques particulières propres aux support d'information, au programme d'ordinateur et à la carte à microcircuit étant les mêmes que ceux exposés ci-dessus concernant le procédé de sécurisation selon l'invention, ils ne seront pas rappelés ici. D'autres aspects et avantages de la présente invention apparaîtront plus clairement à la lecture de la description de modes particuliers de réalisation qui va suivre, cette description étant donnée uniquement à titre d'exemple non limitatif et faite en référence aux annexes A à E qui comportent cinq exemples de programmes informatiques sécurisés conformément à l'invention. Ces programmes sont écrits en langage C et en assembleur 80c51. Afin d'en faciliter la description, chaque ligne est précédée d'un commentaire compris entre les chaînes de caractères "/*" et "*/". La description d'une carte à microcircuit conforme à l'invention dans un mode préféré de réalisation sera effectuée en référence à la figure 1. L'annexe A comporte 33 lignes d'instructions numérotées /*a1*/ à /*a33*/ d'un programme informatique dont l'exécution est sécurisée par un procédé de sécurisation conforme à l'invention dans un mode préféré de réalisation. La ligne /*a17 n'est pas une instruction à proprement parler. Elle symbolise le fait que le programme de l'annexe A peut contenir un certain nombre d'instructions, en lieu et place de la chaîne de caractères "...", en plus des instructions servant à la sécurisation de ce programme. Elle représente un ensemble d'instructions sans rapport avec la présente invention. La ligne /*a2*/ comporte une directive #pragma asm, indiquant au compilateur que les lignes d'instructions qui suivent sont en assembleur 80c51. La ligne /*a37 comporte une instruction dont l'exécution met en œuvre une étape d'empilement de la valeur prédéterminée 0 (en notation hexadécimale) dans la pile d'instructions du programme de l'annexe A. Pour simplifier, on dira par la suite qu'on empile la valeur 0 à la ligne /*a3*/. Puis, on empile la valeur 1 à la ligne /*a47. Dans le mode préféré de réalisation décrit ici, les valeurs prédéterminées OOh et 01 h représentent respectivement les octets de poids fort et de poids faible de la valeur 1 (en notation hexadécimale) codée sur 2 octets. La ligne /*a5*/ comporte une directive #pragma endasm, indiquant au compilateur que les lignes d'instructions qui suivent ne sont plus en assembleur 80c51 , mais en langage C. Les lignes /*a67 et /*a77 similaires à la ligne /*a17 précédemment décrite, représentent un ensemble d'instructions sans rapport avec la présente invention. La ligne /*a87 comporte une instruction au cours de laquelle on teste si le contenu de la variable "test" est égal à "VRAI". De façon connue, si tel est le cas au moment de l'exécution du programme de l'annexe A, le processeur exécutera les instructions /*a97 à /*a237 suite au test de la ligne
/*a87. Sinon, il exécutera directement l'instruction de la ligne /*a247. La ligne /*a97 est identique à la ligne /*a27 précédemment décrite. Les lignes /*a107 et /*a117 sont similaires aux lignes /*a37 et /*a47 déjà décrites. Elles permettent d'empiler en deux temps la valeur 1 (en notation hexadécimale) codée sur deux octets. La ligne /*a127 est identique à la ligne /*a57 précédemment décrite. Les lignes /*a137 et A*a147 similaires à la ligne /*a1 précédemment décrite, représentent un ensemble d'instructions sans rapport avec la présente invention. Ces instructions peuvent bien entendu manipuler la pile d'instructions, à condition de laisser cette pile d'instructions, à l'issue de la ligne /*a147 dans l'état où elle se trouvait avant l'instruction /*a137. La ligne /*a157 est identique à la ligne /*a27 précédemment décrite. La ligne /*a167 comporte une instruction dont l'exécution met en œuvre une étape de dépilement de la pile d'instructions, la valeur dépilée étant mémorisée dans un registre A. Pour simplifier, on dira par la suite qu'on dépile dans le registre A à la ligne /*a167. A l'issue de l'instruction /*a167, le registre A mémorise en conséquence la dernière valeur empilée dans la pile, celle-ci fonctionnant selon un mécanisme LIFO. La ligne /*a177 comporte une instruction permettant de comparer le contenu du registre A avec la valeur 02H. Normalement, si le programme n'a pas subi d'attaque lors de son exécution depuis la fin de l'instruction de la ligne
/*a11 , le contenu du registre A contient la valeur 02H empilée au cours de l'instruction de la ligne /*a117. L'étape de dépilement de la ligne /*a167 permet ainsi la détection d'une anomalie d'exécution, conformément à la présente invention. Si, au cours de l'étape de comparaison de la ligne -/*a177 on trouve que la valeur du registre A est différente de la valeur 02H, le programme de l'annexe A se branche à l'adresse "anomalie" au cours de l'instruction de la ligne /*a187. Cette adresse "anomalie" est, dans le mode de réalisation décrit ici, l'adresse d'une étape de traitement d'anomalie du procédé de sécurisation selon l'invention. Dans la pratique, l'adresse "anomalie" est une adresse en notation hexadécimale directement interprétable par le processeur. En revanche, si, au cours de l'étape de comparaison de la ligne /*a177 on trouve que le registre A mémorise la valeur 02H, le programme de l'annexe A exécute l'instruction de la ligne /*a197. Les lignes a197 à /*a217 sont des lignes similaires aux lignes
/*a167 à /*a187 précédemment décrites : - dépilement dans le registre A à la ligne /*a197 ; - comparaison du registre A, avec la valeur OOH à la ligne /*a207, la valeur OOH correspondant à la valeur prédéterminée empilée à la ligne /*a107 ; et - branchement à l'adresse "anomalie" au cours de l'instruction de la ligne 1*3.21*1 si le registre A ne contient pas la valeur OOH au moment de l'exécution de l'instruction de la ligne 1*3.20*1. En revanche, si le registre A contient la valeur OOH, le programme exécute l'instruction de la ligne /*a227 identique à la ligne /*a57 précédemment décrite. Les lignes /*a247 et /*a257 similaires à la ligne /*a17 précédemment décrite, représentent un ensemble d'instructions sans rapport avec la présente invention. Les lignes /*a267 à /*a337 sont des lignes similaires aux lignes
/*a157 à Λ*a227 précédemment décrites : Elles comportent des étapes /*a287 et /*a307 de dépilement permettant de détecter une anomalie d'exécution du programme si la pile a été corrompue et qu'elle ne contient pas, juste avant l'exécution de l'instruction de la ligne /*a277 les valeurs prédéterminées 01 H et OOH empilées respectivement aux lignes /*a47 et /*a37. En conclusion, les deux sous-ensembles d'instructions, respectivement constitués par les lignes /*a67 à /*a257 et /*a137 à /*a147 sont sécurisés. Le sous-ensemble d'instructions constitué par les lignes A*a67 et 1*3.25*1 est sécurisé grâce : -à l'étape d'empilement (lignes /*a37 et 1*34*1) de la valeur prédéterminée 1 codée sur 2 octets ; et - à l'étape de dépilement des lignes /*a277 et /*a307. De même, le sous-ensemble d'instructions constitué par les lignes /*a137 et /*a147 est sécurisé grâce : -à l'étape d'empilement (lignes /*a107 et /*a117) de la valeur prédéterminée 2 codée sur 2 octets ; et - à l'étape de dépilement des lignes /*a167 et /*a197. Cette implémentation n'est nullement limitative, les valeurs prédéterminées 1 et 2 auraient aussi pu être identiques ou choisies de façon aléatoire. L'annexe B comporte 28 lignes d'instructions numérotées /*b17 à /*b287 d'un programme informatique dont l'exécution est sécurisée par un procédé de sécurisation conforme à l'invention dans un mode préféré de réalisation. Les lignes /*b17 et /*b27 constituent les deux premières lignes de déclaration de la fonction "function" en langage C, cette fonction ne comportant ni paramètre d'entrée ni valeur de retour. La ligne /*b117 comporte la dernière instruction de la déclaration de cette fonction. La ligne /*b37 similaire à la ligne /*a17 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. La ligne /*b47 est identique à la ligne /*a27 précédemment décrite en référence à l'annexe A. Au cours des instructions des lignes /*b57 et /*b67, on effectue, en deux temps, une étape d'empilement d'une valeur prédéterminée codée sur deux octets, cette valeur prédéterminée étant, dans ce mode préféré de réalisation l'adresse d'une fonction OS_killcard de traitement d'une anomalie. Dans la pratique, l'adresse "OS_killcard" est une adresse en notation hexadécimale directement interprétable par le processeur. Dans le cas de l'utilisation du procédé de sécurisation dans une carte à microcircuit, la fonction OS_killcard peut par exemple inhiber le fonctionnement de la carte par destruction de son système d'exploitation. La ligne /*b77 est identique à la ligne /*a57 précédemment décrite en référence à l'annexe A. La ligne /*b87 similaire à la ligne /*a17 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. La ligne /*b97 comporte une instruction d'appel à une fonction critique "fonction_critique", dont le code sera décrit en référence aux lignes /*b127 à /*b287. De façon connue, l'appel à un sous-programme entraîne automatiquement l'empilement de l'adresse de retour de ce sous-programme dans la pile d'instructions. Cette adresse de retour, codée sur 2 octets, occupe donc deux registres de la pile. Dans l'exemple décrit ici, cette adresse correspond à l'adresse de l'instruction de la ligne /*b107, cette ligne devant être exécutée au retour de la fonction "fonction_critique". Les lignes /*b127 et /*b137 d'une part et /*b287 d'autre part constituent les deux premières lignes et la dernière ligne de déclaration de la fonction "fonction_critique", cette fonction ne comportant ni paramètre d'entrée ni valeur de retour. Après l'exécution des instructions des lignes /*b127 et /*b137, les quatre dernières valeurs empilées dans la pile d'instructions sont, dans l'ordre chronologique : - l'octet de poids fort de l'adresse de la fonction OS_killcard (ligne /*b57) ; - l'octet de poids faible de l'adresse de la fonction OS_killcard (ligne
/*b67) ; - l'octet de poids fort de l'adresse de la première instruction de la ligne /*b107 ; et - l'octet de poids faible de l'adresse de la première instruction de la ligne /*b 107. La ligne /*b147 similaire à la ligne /*a17 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. De même que décrit précédemment en référence aux lignes /*a137 et /*a147 de l'annexe A, on supposera que ces instructions laissent la pile d'instructions, dans l'état où elle se trouvait avant l'instruction /*b147. La ligne /*b157 est identique à la ligne /*a27 précédemment décrite en référence à l'annexe A. A la ligne /*b167, on dépile la pile d'instructions dans le registre A, le contenu de ce registre A étant ensuite sauvegardé dans un registre R7 à l'étape /*b177. De même, à la ligne /*b187, on dépile à nouveau la pile d'instructions dans le registre A, le contenu de ce registre A étant sauvegardé dans un registre R6 à l'étape /*b197. Avec ce qui a été dit précédemment, et en cas d'exécution normale du programme de l'annexe B, les registres R6 et R7 contiennent donc respectivement, à l'issue de l'exécution de l'instruction de la ligne /*b197 : - l'octet de poids fort de l'adresse de la première instruction de la ligne /*b107 ; et - l'octet de poids faible de l'adresse de la première instruction de la ligne /*b 107. Ensuite, on dépile deux fois dans le registre A, la pile d'instructions aux lignes /*b207 et /*b217, ce qui revient, en cas d'exécution normale du programme de l'annexe B, à supprimer l'adresse sur deux octets de la fonction OS_killcard de la pile d'instructions pendant l'exécution du sous- programme "fonction_critique". A la ligne /*b227, on mémorise dans le registre A, le contenu du registre R6, à savoir l'octet de poids fort de la première instruction de la ligne /*b107, cette valeur étant empilée dans la pile d'instructions à l'étape de la ligne /*b237. De façon identique, on empile l'octet de poids faible de la première instruction de la ligne /*b107, cet octet étant mémorisé dans le registre R7, aux lignes /*b247 et /*b257. La ligne /*b267 est identique à la ligne /*a57 précédemment décrite en référence à l'annexe A. La ligne /*b277 similaire à la ligne /*a17 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. La ligne /*b287 est la dernière ligne du sous-programme
"fonction_critique". De façon connue, elle se traduit en assembleur par une instruction de type "RETURN" ou "RET" dont l'exécution entraîne le saut du programme à l'adresse mémorisée dans les deux premiers registres de la pile d'instruction. S'il ne subit pas d'attaque lors de son exécution, le programme se branche donc à la première instruction de la ligne /*b107, l'adresse de cette instruction ayant été empilée aux lignes /*b237 et /*b257 La ligne /*b107 similaire à la ligne /*a17 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. La ligne /*b117 termine la fonction "function". En conclusion, dans le mode de réalisation particulier de l'annexe
B, l'étape d'empilement de l'adresse de la fonction OS_killcard est effectuée avant l'appel au sous-programme "fonction_critique", cette adresse étant supprimée de la pile pendant l'exécution de ce sous-programme, aux lignes
/*b207 et /b217 Ce mode de réalisation permet ainsi de contrôler que le sous- programme "fonction_critique" a été effectivement exécuté. Par exemple, si l'appel à ce sous-programme a été perturbé, ou, plus généralement, si l'étape de dépilement n'a pas été effectuée, la pile d'instructions conservera la valeur de la fonction OS_killcard, le dépilement ultérieur de cette valeur, par exemple lors d'une instruction de retour d'exécution, entraînant la détection de cette anomalie d'exécution, et l'exécution de la fonction OS_killcard de traitement d'une anomalie. L'annexe C comporte 32 lignes d'instructions numérotées /*c1 à /*c327 d'un programme informatique dont l'exécution est sécurisée par un procédé de sécurisation conforme à l'invention dans un mode préféré de réalisation. Les lignes /*c17 à /*c117 sont similaires aux lignes /*b1 à /*b117 décrites en référence à l'annexe B, à la différence près que l'on empile dans la pile d'instruction, la valeur prédéterminée 05F1 H codée en hexadécimal sur deux octets, au lieu de l'adresse de la fonction OS_killcard (lignes /*c57 et
/*c67). Cette étape d'empilement est là aussi effectuée avant l'appel au sous-programme fonction_critique. Dans ce mode de réalisation particulier, cette valeur prédéterminée 05F1 H est représentative du sous-ensemble constitué par les instructions des lignes /*c127 à /*c197. Les lignes /*c127 à A*c197 sont similaires aux lignes /*b127 à /*b197 décrites en référence à l'annexe B. En cas d'exécution normale du programme de l'annexe C, les registres R6 et R7 contiennent donc respectivement, à l'issue de l'exécution de l'instruction de la ligne /*c197, l'octet de poids fort et l'octet de poids faible de l'adresse de la première instruction de la ligne /*c107 correspondant à l'adresse de retour de la fonction "fonction_critique". On dépile ensuite la pile d'instructions dans le registre A à la ligne
/*c207, le contenu de ce registre étant ensuite comparé avec la valeur hexadécimale F1 H à la ligne /*c217. Normalement, si le programme n'a pas subi d'attaque, notamment au moment de l'appel à la fonction "fonction_critique", le registre A contient la valeur F1 H empilée au cours de l'instruction de la ligne /*c57. L'étape de dépilement de la ligne /*c207 permet ainsi la détection d'une anomalie d'exécution, conformément à la présente invention. Si, au cours de l'étape de comparaison de la ligne /*c21 on trouve que la valeur du registre A est différente de la valeur F1H, le programme de l'annexe C se branche à l'adresse "OS_killcard" au cours de l'instruction de la ligne /*c227. Cela peut notamment se produire à la suite d'une attaque par génération de faute qui entraînerait l'exécution de la fonction "fonction_critique" sans qu'elle ait été appelée. Dans ce mode de réalisation du procédé de sécurisation selon l'invention, le programme de traitement d'anomalie OS_killcard est donc mis en œuvre, si, au cours de l'étape de dépilement de l'instruction /*c207, on dépile une valeur différente de la valeur prédéterminée F1 H empilée à l'instruction
/*c67. En revanche, si, au cours de l'étape de comparaison de la ligne /*c21 on trouve que le registre A mémorise la valeur F1H, le programme de l'annexe C exécute l'instruction de la ligne /*c237. Les lignes /*c237 à /*c257 sont des lignes similaires aux lignes
/*c207 à /*c227 précédemment décrites : - dépilement dans le registre A à la ligne /*c237 ; - comparaison du registre A, avec la valeur 05H à la ligne /*c247, la valeur 05H étant la valeur prédéterminée empilée à la ligne /*c57 ; et - branchement à l'adresse "OS_killcard" au cours de l'instruction de la ligne /*c257 si le registre A ne contient pas la valeur 05H au moment de l'exécution de l'instruction de la ligne /*c257. En revanche, si le registre A contient la valeur 05H, le programme exécute l'instruction de la ligne /*c267. Quoiqu'il en soit, l'exécution des instructions des lignes /*c207 et
/*c-237 supprime la valeur prédéterminée 05F1 H de la pile d'exécution. Les lignes /*c267 à /*c297 sont similaires aux lignes A*b227 à /*b257 précédemment décrites en référence à l'annexe B. Elles permettent d'empiler dans la pile d'instructions les valeurs mémorisées dans les registres R6 et R7 lors de l'exécution des instructions des lignes /*c177 et Λ*c197, à savoir respectivement : - l'octet de poids fort de l'adresse de la première instruction de la ligne /*c107 ; et - l'octet de poids faible de l'adresse de la première instruction de la ligne *c10*/. Les lignes /*c307 à /*c327 sont similaires aux lignes /*b267 à
/*b287 précédemment décrites en référence à l'annexe B. S'il n'y a pas eu d'attaque, le programme se branche donc à la première instruction de la ligne /*c107, l'adresse de cette instruction ayant été empilée aux lignes /*c277 et /*c297 La ligne /*c107 similaire à la ligne /*a1 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention, et la ligne A*c117 termine la fonction "functionl" de l'annexe C. Dans ce mode de réalisation, la valeur 05F1 H aurait pu être l'adresse d'une fonction de traitement d'anomalie. Ce mode particulier de réalisation permet de renforcer la sécurisation du programme, car même si une attaque se produit au cours de l'exécution du test des lignes /*c207 à /*c257, cette attaque serait détectée par la mise en œuvre ultérieure de cette fonction de traitement d'anomalie. En variante, plusieurs adresses de fonctions de traitement d'anomalie peuvent être utilisées, chacune d'entre elles étant une valeur prédéterminée associée à un ensemble d'instructions critiques. L'annexe D comporte 32 lignes d'instructions numérotées /*d17 à /*d327 d'un programme informatique dont l'exécution est sécurisée par un procédé de sécurisation conforme à l'invention dans un mode préféré de réalisation. Dans ce mode de réalisation particulier, le programme comporte, à la ligne /*d47, un appel à un sous-programme "fonction_critique". Cet appel entraîne automatiquement l'empilement de l'adresse de retour de ce sous-programme, à savoir l'adresse de l'instruction de la ligne /*d57. Au cours des instructions des lignes /*d207 à Λ*d237 du sous- programme "fonction_critique", on mémorise dans les registres R6 et R7 les premières valeurs de la pile d'instructions, à savoir l'adresse de retour, codée sur deux octets, de ce sous-programme. Puis, on empile la valeur prédéterminée 05F1 H aux lignes /*d247 et /*d257. On notera que dans ce mode de réalisation, cette étape d'empilement est effectuée pendant l'exécution du sous-programme "fonction_critique". Enfin, on empile, au cours de l'exécution des instructions des lignes /*d277 et /*d297, le contenu des registres R6 et R7, ces registres contenant l'adresse de l'instruction de la ligne /*d57, comme expliqué supra. Le programme de l'annexe D se branche donc à la ligne A*d57 à l'issue du sous-programme "fonction_critique". Avant l'exécution de l'instruction de la ligne /*d57, les deux premières valeurs de la pile d'instructions sont normalement les valeurs prédéterminées 05H et F1 H empilées aux lignes 1*624*1 et /*d257. La ligne /*d57 similaire à la ligne /*a1 précédemment décrite en référence à l'annexe A, représente un ensemble d'instructions sans rapport avec la présente invention. On supposera que ces instructions laissent la pile d'instructions, dans l'état où elle se trouvait avant la ligne Λ*d57. Les lignes /*d77 à /*d127 sont similaires aux lignes /*c207 à /*c257 décrites précédemment en référence à l'annexe C : - dépilement dans le registre A aux lignes /*d77 et /*d107; - comparaison du registre A, avec les valeurs prédéterminées F1 H et 05H aux lignes /*d87 et 1*6117 ; - branchement à l'adresse "OS_killcard" au cours de l'instruction /*d97 (respectivement /*d127) si le registre A ne contient pas la valeur F1 H (respectivement 05H) au moment de l'exécution de l'instruction de la ligne /*d97 (respectivement l*à 127). Le sous-programme OS_killcard de traitement d'anomalie est ainsi mis en œuvre, si, par exemple, au cours de l'étape de dépilement /*d77, on dépile une valeur différente de la valeur prédéterminée F1H. On notera que dans ce mode de réalisation, la suppression de la valeur prédéterminée 05F1 H de la pile d'exécution est effectuée après exécution du sous-programme "fonction_critique" et non pas suite à une attaque ayant lieu lors de l'exécution d'un autre sous-programme, cette attaque ayant pour conséquence l'exécution des lignes /*d67 à /*d137. Cette implémentation permet donc de s'assurer que l'exécution des instructions des lignes /*d67 à /*d137 est effectuée après l'exécution du sous-programme "fonction_critique". Les lignes /*d147 et /*d157 terminent le programme de l'annexe D. L'annexe E comporte 28 lignes d'instructions numérotées /*e17 à /*e287 d'un programme informatique dont l'exécution est sécurisée par un procédé de sécurisation conforme à l'invention dans un mode préféré de réalisation. Les lignes /*e17 à A*e57 et /*e127 à /*e287 sont respectivement similaires aux lignes /*d17 à /*d57 et /*d167 à /*d327 décrites en référence à l'annexe D, à la différence près que l'on empile dans la pile d'instruction l'adresse de la fonction de traitement d'anomalie OS_killcard (lignes Λ*e207 et
/*e217) au lieu de la valeur prédéterminée 05F1 H. Cette étape d'empilement est là aussi effectuée pendant l'exécution du sous-programme "fonction_critique". Le programme de l'annexe E se branche donc à la ligne /*e57 à l'issue du sous-programme "fonction_critique". Avant l'exécution de l'instruction de la ligne /*e57, les deux premières valeurs de la pile d'instructions sont normalement les adresses de poids faible et de poids fort de la fonction OS_killcard, ces valeurs prédéterminées ayant été empilées aux lignes /*e217 et /*e207. Ces valeurs sont dépilées au cours de l'exécution des instructions des lignes /*e77 et Λe87. Ce mode de réalisation particulier permet de s'assurer que la fonction "fonction_critique" est exécutée après avoir été effectivement appelée, et non à la suite d'une attaque par génération de faute. Dans le cas contraire en effet, le dépilement de l'adresse de la fonction OS_killcard, au moment inévitable du retour d'exécution d'un sous- programme, permettrait la détection d'une anomalie de d'exécution, notamment par la mise en œuvre de cette fonction. Les lignes /*e107 et /*e117 terminent le programme de l'annexe E. La figure 1 représente une carte à microcircuit 100 conforme à l'invention dans un mode préféré de réalisation. Pour simplifier, seul le contenu du microcircuit est représenté, et ce de façon schématique. De façon connue, la carte à microcircuit selon l'invention 100 comporte en outre des éléments matériels et logiciels classiques d'une carte à microcircuit, à savoir notamment un support en matière semi-rigide et des moyens d'alimentation. Ces éléments ne seront pas décrits ici. La carte à microcircuit selon l'invention 100 comporte des moyens de mise en œuvre d'un procédé de sécurisation tel que décrit précédemment en référence aux annexes A à E. Dans le mode de réalisation préféré décrit ici, ces moyens sont constitués par un processeur 110, associé notamment à une mémoire non- volatile de type EEPROM, à une mémoire vive RAM comportant une pile d'instructions STACK, et à une mémoire morte ROM comportant un système d'exploitation OS. La mémoire semi-volatile EEPROM comporte notamment les programmes des annexes A à E, ces programmes étant lus par le processeur 100 pour leur exécution. La mémoire EEPROM comporte également les deux sous- programmes "anomalie" et "OS_killcard". Lors de l'exécution des programmes des annexes A à E, les registres R6, R7 et test sont mémorisés dans la mémoire vive RAM. Dans le mode de réalisation décrit ici, le registre A est l'accumulateur du processeur 110.
ANNEXE A
/*a1
1*32*1 #pragma asm
/*a37 push #00h
/*a47 push #01h
/*a57 #pragma endasm
/*a67
/*a77
/*a87 if (test = VRAI) {
/*a97 #pragma asm fa 107 push #00h
Ea117 push #02h
/*a127 #pragma endasm fa 137
/*a147 ... fa157 #pragma asm
/*a167 pop A fa177 XRL A,#02h
/*a187 JNZ anomalie fa197 pop A
/*a207 XRL A,#00h
/*a217 JNZ anomalie
/*a227 #pragma endasm
/*a237 }
/*a247
/*a257 ...
/*a267 #pragma asm
/*a277 pop A
/*a287 XRL A,#01h
/*a297 JNZ anomalie
/*a307 pop A
/*a317 XRL A,#00h
/*a327 JNZ anomalie
/*a337 #pragma endasm
ANNEXE B
/*b17 void function(void)
/*b27 {
/*b37
/*b47 #pragma asm
/*b57 push #HIGH(OS killcard)
/*b67 push #LOW(OS_killcard)
/*b77 #pragma endasm
/*b87
/*b97 fonction_critique();
/*b107
/*b117 }"
/*b127 void fonction critique(void)
/*b137 {
/*b147
/*b157 #pragma asm
/*b167 pop A
/*b177 mov R7JA
/*b187 pop A
/*b197 mov R6,A
/*b207 pop A
/*b217 pop A
/*b227 mov A,R6
/*b237 push A
/*b247 mov A,R7
/*b257 push A
Λb267 #pragma endasm
Λb277
/*b287 }
ANNEXE C
/*c17 void function 1 (void)
/*c27 {
/*c37
/*c47 #pragma asm
/*c57 push #05h
/*c67 push #F1 h
/*c77 #pragma endasm
/*c87
/*c97 fonction_critique();
/*c107
/*c117 }"
/*c127 void fonction critique(void)
/*c137 {
/*c147
/*c157 #pragma asm
/*c167 pop A
/*c177 mov R7,A
/*c187 pop A
/*c197 mov R6,A
/*c207 pop A
/*c217 XRL A, #F1h
/*c227 JNZ OS_killcard
/*c237 pop A
Λc247 XRL A, #05h
/*c257 JNZ OS_killcard
/*c267 mov A,R6
1*0.21*1 push A
/*c287 mov A,R7 c297 push A
/*c307 #pragma endasm
/*c317
/*c327 ANNEXE D
/*d17 void function(void)
/*d27 {
/*d37
/*d47 fonction_critique();
/*d57
/*d67 #pragma asm
1*67*1 pop A
1*68*/ XRL A, #F1h
/*d97 JNZ OS_killcard
/*d107 pop A
/*d117 XRL A, #05h
/*d127 JNZ OS_killcard
/*d137 #pragma endasm
/*d147
/*d157 }"
/*d167 void fonction critique(void)
/*d177 {
/*d187
/*d197 #pragma asm fd207 pop A
1*621*1 mov R7,A
1*622*1 pop A
1*623*/ mov R6,A
1*624*1 push #05h
1*625*1 push #F1h
1*626*1 mov A,R6
1*627*1 push A
1*628*/ mov A,R7
/*d297 push A
/*d307 #pragma endasm
/*d317 , , ,
ANNEXE E
/*e17 void function(void) fe27 { e37 e47 fonction_critique()
Λe57
/*e67 #pragma asm
/*e77 pop A
/*e87 pop A
/*e97 #pragma endasm
/*e107
/*e117 }
/*e127 void fonction_critique(void)
/*e137 {
/*e147
/*e157 #pragma asm
/*e167 pop A *e177 mov R7,A
/*e187 pop A
/*e197 mov R6,A
/*e207 push #HIGH(OS_killcard)
/*e21 push #LOW(OS_killcard) e227 mov A,R6
/*e237 push A
/*e247 mov A,R7
/*e257 push A
/*e267 #pragma endasm fe277

Claims

REVENDICATIONS
1. Procédé de sécurisation de l'exécution d'un programme informatique, le procédé étant caractérisé en ce qu'il comporte : - une étape d'empilement d'une valeur prédéterminée dans une pile d'instructions du programme ; et - une étape de dépilement de ladite pile, cette étape de dépilement étant adaptée, le cas échéant, à permettre la détection d'une anomalie de ladite exécution.
2. Procédé de sécurisation selon la revendication 1 , caractérisé en ce que lesdites étapes d'empilement et de dépilement sont respectivement associées à des éléments d'au moins un sous-ensemble d'instructions dudit programme.
3. Procédé de sécurisation selon la revendication 2, caractérisé en ce que lesdits éléments sont respectivement une parenthèse ouvrante et une parenthèse fermante dans un système de parenthèses.
4. Procédé de sécurisation selon la revendication 2, caractérisé en ce que ladite étape de dépilement est associée à une instruction de retour d'exécution dudit programme ou d'un sous-programme dudit programme.
5. Procédé de sécurisation selon l'une quelconque des revendications 1 à 4, caractérisé en ce que ledit programme est écrit dans un langage de programmation, ce langage comportant une première instruction dont l'exécution met en œuvre ladite étape d'empilement et/ou une deuxième instruction dont l'exécution met en œuvre ladite étape de dépilement.
6. Procédé de sécurisation selon la revendication 5, caractérisé en ce que la deuxième instruction termine ledit programme ou un sous-programme dudit programme.
7. Procédé de sécurisation selon l'une quelconque des revendications 1 à 6, caractérisé en ce que ladite valeur prédéterminée est représentative d'un sous-ensemble d'instructions critiques dudit programme.
8. Procédé de sécurisation selon l'une quelconque des revendications 1 à 7, caractérisé en ce qu'il comporte une étape de traitement d'anomalie, mise en œuvre, si, au cours de ladite étape de dépilement, on dépile une valeur différente de ladite valeur prédéterminée.
9. Procédé de sécurisation selon l'une quelconque des revendications 1 à 8, dans lequel ledit programme comporte au moins un appel à un sous-programme, caractérisé en ce que ladite étape d'empilement est effectuée avant ledit appel, et en ce qu'on supprime ladite valeur prédéterminée de ladite pile pendant l'exécution dudit sous-programme.
10. Procédé de sécurisation selon la revendication 9, caractérisé en ce que ladite valeur prédéterminée est l'adresse d'une fonction de traitement d'une anomalie.
11. Procédé de sécurisation selon l'une quelconque des revendications 1 à 8, dans lequel ledit programme comporte au moins un appel à un sous-programme, caractérisé en ce que ladite étape d'empilement est effectuée pendant l'exécution dudit sous-programme, et en ce qu'on supprime ladite valeur prédéterminée de ladite pile après l'exécution dudit sous- programme.
12. Procédé de sécurisation selon la revendication 11 , caractérisé en ce que ladite valeur prédéterminée est l'adresse d'une fonction de traitement d'une anomalie.
13. Support d'informations lisible par un système informatique, éventuellement totalement ou partiellement amovible, notamment CD-ROM ou support magnétique, tel un disque dur ou une disquette, ou support transmissible tel un signal électrique ou optique, caractérisé en ce qu'il comporte des instructions d'un programme informatique permettant la mise ne œuvre d'un procédé de sécurisation selon l'une quelconque des revendications 1 à 12, lorsque ce programme est chargé et exécuté par un système informatique.
14. Programme d'ordinateur stocké sur un support d'informations, ledit programme comportant des instructions permettant la mise en œuvre d'un procédé de sécurisation selon l'une quelconque des revendications 1 à 12, lorsque ce programme est chargé et exécuté par un système informatique.
15. Entité électronique sécurisée caractérisée en ce qu'elle comporte des moyens de mise en œuvre d'un procédé de sécurisation selon l'une quelconque des revendications 1 à 12.
16. Entité électronique selon la revendication 15 caractérisée en ce qu'elle est une carte à microcircuit.
PCT/FR2004/001755 2003-07-11 2004-07-06 Procede de securisation de l’execution d’un programme informatique, notamment dans une carte a microcircuit Ceased WO2005008451A1 (fr)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US10/563,554 US8707424B2 (en) 2003-07-11 2004-07-06 Method for making secure execution of a computer programme, in particular in a smart card
CA2531789A CA2531789C (fr) 2003-07-11 2004-07-06 Procede de securisation de l'execution d'un programme informatique, notamment dans une carte a microcircuit
EP04767590.5A EP1644797B1 (fr) 2003-07-11 2004-07-06 Procede de securisation de l'execution d'un programme informatique, notamment dans une carte a microcircuit
JP2006518286A JP4644820B2 (ja) 2003-07-11 2004-07-06 特にスマートカードにおけるコンピュータプログラムの実行を保護する方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0308550A FR2857473B1 (fr) 2003-07-11 2003-07-11 Procede de securisation de l'execution d'un programme informatique, notamment dans une carte a microcircuit
FR03/08550 2003-07-11

Publications (1)

Publication Number Publication Date
WO2005008451A1 true WO2005008451A1 (fr) 2005-01-27

Family

ID=33522982

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/FR2004/001755 Ceased WO2005008451A1 (fr) 2003-07-11 2004-07-06 Procede de securisation de l’execution d’un programme informatique, notamment dans une carte a microcircuit

Country Status (7)

Country Link
US (1) US8707424B2 (fr)
EP (1) EP1644797B1 (fr)
JP (1) JP4644820B2 (fr)
CN (1) CN100361036C (fr)
CA (1) CA2531789C (fr)
FR (1) FR2857473B1 (fr)
WO (1) WO2005008451A1 (fr)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2910144A1 (fr) * 2006-12-18 2008-06-20 St Microelectronics Sa Procede et dispositif de detection errones au cours de l'execution d'un programme.
US8117063B2 (en) 2006-11-15 2012-02-14 University Of Florida Research Foundation, Inc. System and methods for creating probabilistic products and for facilitating probabilistic selling
EP2453356A1 (fr) 2010-11-10 2012-05-16 Oberthur Technologies Procédé, programme d'ordinateur et dispositif de sécurisation de code intermédiaire de programmation pour son exécution par une machine virtuelle

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2869486B1 (fr) * 2004-04-21 2007-08-31 Oberthur Card Syst Sa Procede de traitement de donnees securise et dispositif associe
US7607122B2 (en) * 2005-06-17 2009-10-20 Microsoft Corporation Post build process to record stack and call tree information
JP2008152452A (ja) * 2006-12-15 2008-07-03 Toshiba Corp 携帯可能電子装置、携帯可能電子装置の制御方法およびicカード
US20080271142A1 (en) * 2007-04-30 2008-10-30 Texas Instruments Incorporated Protection against buffer overflow attacks
EP2354993A1 (fr) * 2009-12-30 2011-08-10 Gemalto SA Protection d'exécution de code octet JCVM contre les attaques de défauts
US12248560B2 (en) * 2016-03-07 2025-03-11 Crowdstrike, Inc. Hypervisor-based redirection of system calls and interrupt-based task offloading
US12339979B2 (en) 2016-03-07 2025-06-24 Crowdstrike, Inc. Hypervisor-based interception of memory and register accesses
JP6798157B2 (ja) * 2016-06-24 2020-12-09 大日本印刷株式会社 電子情報記憶媒体、異常検知方法、及び異常検知プログラム
WO2020114937A1 (fr) * 2018-12-07 2020-06-11 Koninklijke Philips N.V. Dispositif informatique doté d'une résistance accrue contre le sondage d'adresse
US11128644B2 (en) * 2019-03-19 2021-09-21 Five Media Marketing Limited Automatic security scanning of advertisements during runtime of software applications

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
FR2757972A1 (fr) * 1996-12-31 1998-07-03 Bull Cp8 Procede de securisation d'un module de securite, et module de securite associe
DE19944991A1 (de) * 1999-09-20 2001-04-12 Giesecke & Devrient Gmbh Verfahren zur Sicherung eines Programmablaufs

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6931552B2 (en) * 2001-05-02 2005-08-16 James B. Pritchard Apparatus and method for protecting a computer system against computer viruses and unauthorized access
ES2218484T3 (es) * 2002-03-26 2004-11-16 Soteres Gmbh Un metodo de proteger la integridad de un programa de ordenador.
CN1292356C (zh) * 2002-04-17 2006-12-27 松下电器产业株式会社 非易失性半导体存储装置及其机密保护方法
US7228563B2 (en) * 2003-02-06 2007-06-05 Symantec Corporation Shell code blocking system and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
FR2757972A1 (fr) * 1996-12-31 1998-07-03 Bull Cp8 Procede de securisation d'un module de securite, et module de securite associe
DE19944991A1 (de) * 1999-09-20 2001-04-12 Giesecke & Devrient Gmbh Verfahren zur Sicherung eines Programmablaufs

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8117063B2 (en) 2006-11-15 2012-02-14 University Of Florida Research Foundation, Inc. System and methods for creating probabilistic products and for facilitating probabilistic selling
FR2910144A1 (fr) * 2006-12-18 2008-06-20 St Microelectronics Sa Procede et dispositif de detection errones au cours de l'execution d'un programme.
WO2008075166A1 (fr) * 2006-12-18 2008-06-26 Stmicroelectronics Sa Procede et dispositif de detection de sauts errones au cours de l'execution d'un programme
US8495734B2 (en) 2006-12-18 2013-07-23 Stmicroelectronics Sa Method and device for detecting an erroneous jump during program execution
EP2453356A1 (fr) 2010-11-10 2012-05-16 Oberthur Technologies Procédé, programme d'ordinateur et dispositif de sécurisation de code intermédiaire de programmation pour son exécution par une machine virtuelle
US9129137B2 (en) 2010-11-10 2015-09-08 Oberthur Technologies Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine
KR101875225B1 (ko) 2010-11-10 2018-07-05 아이데미아 프랑스 가상 머신에 의한 실행을 위한 프로그래밍의 중간 코드의 보안 프로세스, 컴퓨터 프로그램 및 장치
EP2453356B1 (fr) * 2010-11-10 2020-07-15 IDEMIA France Procédé, programme d'ordinateur et dispositif de sécurisation de code intermédiaire de programmation pour son exécution par une machine virtuelle

Also Published As

Publication number Publication date
CN1823317A (zh) 2006-08-23
CN100361036C (zh) 2008-01-09
JP2007516490A (ja) 2007-06-21
US8707424B2 (en) 2014-04-22
EP1644797B1 (fr) 2013-12-11
CA2531789A1 (fr) 2005-01-27
FR2857473A1 (fr) 2005-01-14
FR2857473B1 (fr) 2005-09-16
JP4644820B2 (ja) 2011-03-09
EP1644797A1 (fr) 2006-04-12
CA2531789C (fr) 2014-04-01
US20060242700A1 (en) 2006-10-26

Similar Documents

Publication Publication Date Title
WO2005008451A1 (fr) Procede de securisation de l’execution d’un programme informatique, notamment dans une carte a microcircuit
EP1161725B1 (fr) Procede de surveillance du deroulement d'un programme
EP1702268B1 (fr) Procede de controle d'integrite d'execution de programmes par verification d'empreintes de traces d'execution
US8104089B1 (en) Tracking memory mapping to prevent packers from evading the scanning of dynamically created code
FR2849226A1 (fr) Procede et dispositif de securisation de l'execution d'un programme informatique.
EP1662379A1 (fr) Procede de prevention de faux code et programme de prevention
JP5996145B1 (ja) プログラム、情報処理装置、及び情報処理方法
EP4123492B1 (fr) Mise en partage d'une fonction d'une application définie en langage orienté objet
Lakhotia et al. Abstracting stack to detect obfuscated calls in binaries
EP3392791B1 (fr) Procédé d'exécution d'un programme destiné à être interprété par une machine virtuelle protégée contre des attaques par injection de faute
EP1960934A1 (fr) Procede pour securiser l'execution d'un code logiciel en langage intermediaire dans un appareil portatif
FR3072477B1 (fr) Securisation d’instructions de branchement conditionnel compose dans un programme informatique en code intermediaire
US12547404B2 (en) Storing a duplicated return address and stack pointer in registers to prevent overflow attacks
WO2006067319A1 (fr) Procede et dispositif de remplissage de securisation d'une memoire et memoire associee
US20260127266A1 (en) Systems and Methods for Detecting Malicious Modifications of a Loaded Software Module
CN1155700A (zh) 计算机软件保护方法
Dai et al. Dynamic instruction sequences monitor for virus detection
WO2026093572A1 (fr) Systèmes et procédés pour la détection de modifications malveillantes d'un module logiciel chargé
WO2026093574A1 (fr) Systèmes et procédés pour la détection de bibliothèques logicielles malveillantes
Pridgen Exploiting Generational Garbage Collection: Using Data Remnants to Improve Memory Analysis and Digital Forensics
Bugeja Cracking, The Anti
Yu-An et al. Method of preventing buffer overflow attacks by intercepting DLL functions
谭毓安 et al. Method of Preventing Buffer Overflow Attacks by Intercepting DLL Functions
Hildebrandt et al. A computer architecture with hardwarebased malware detection
DeepakGupta TIED, LibsafePlus: Tools for Runtime Buffer Overflow Protection

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 200480019877.X

Country of ref document: CN

AK Designated states

Kind code of ref document: A1

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BW BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE EG ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NA NI NO NZ OM PG PH PL PT RO RU SC SD SE SG SK SL SY TJ TM TN TR TT TZ UA UG US UZ VC VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A1

Designated state(s): BW GH GM KE LS MW MZ NA SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IT LU MC NL PL PT RO SE SI SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
ENP Entry into the national phase

Ref document number: 2531789

Country of ref document: CA

WWE Wipo information: entry into national phase

Ref document number: 2006518286

Country of ref document: JP

WWE Wipo information: entry into national phase

Ref document number: 2004767590

Country of ref document: EP

WWP Wipo information: published in national office

Ref document number: 2004767590

Country of ref document: EP

WWE Wipo information: entry into national phase

Ref document number: 2006242700

Country of ref document: US

Ref document number: 10563554

Country of ref document: US

WWP Wipo information: published in national office

Ref document number: 10563554

Country of ref document: US