EP0919026A1 - Procede de modification de sequences de code et dispositif associe - Google Patents

Procede de modification de sequences de code et dispositif associe

Info

Publication number
EP0919026A1
EP0919026A1 EP98930843A EP98930843A EP0919026A1 EP 0919026 A1 EP0919026 A1 EP 0919026A1 EP 98930843 A EP98930843 A EP 98930843A EP 98930843 A EP98930843 A EP 98930843A EP 0919026 A1 EP0919026 A1 EP 0919026A1
Authority
EP
European Patent Office
Prior art keywords
program
sequence
memory
address
value
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.)
Withdrawn
Application number
EP98930843A
Other languages
German (de)
English (en)
Inventor
Azad Nassor
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.)
CP8 Technologies SA
Original Assignee
Bull CP8 SA
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 Bull CP8 SA filed Critical Bull CP8 SA
Publication of EP0919026A1 publication Critical patent/EP0919026A1/fr
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/66Updates of program code stored in read-only memory [ROM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/268Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs

Definitions

  • the present invention relates to a method for modifying code sequences and the associated device.
  • the present invention makes it possible to mask certain so-called sensitive operations carried out by the central unit.
  • the address windows [Adrdeb_i, Adrfin_1] are stored by increasing addresses, this facilitating the reading of the table. Consequently, the values located in the intervals] Adrfin_i, Adrdeb_i + 1 [are address values of the non-sensitive program.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

La présente invention concerne un procédé de modification de séquences de code et le dispositif associé. Le dispositif de modification de séquences de code inscrites dans une mémoire (2) d'un support comprenant une unité centrale (1), ladite mémoire contenant un programme principal exécutable par l'unité centrale (1) qui comporte également une seconde mémoire (3) programmable non volatile, et une troisième mémoire de travail (4), est caractérisé en ce qu'une table de déroutement TAB_DER contenue dans la seconde mémoire programmable contient au moins un champ contenant une donnée de référence d'une nouvelle séquence de code, des moyens de déroutement permettant le déroutement différé de la séquence de code exécutée vers la nouvelle séquence de code inscrite dans une des trois mémoires et des moyens dans la nouvelle séquence de code permettant le retour en un point de la séquence de code exécutée avant le déroutement.

Description

PROCEDE DE MODIFICATION DE SEQUENCES DE CODE ET
DISPOSITIF ASSOCIE
La présente invention concerne un procédé de modification de séquences de code et le dispositif associé.
La présente invention concerne les programmes d'ordinateur et notamment ceux destinés à être enregistrés dans un support de façon non modifiable, du moins facilement. Ces supports sont intégrés dans un système informatique comprenant entre autres, une unité centrale, une mémoire de travail, une mémoire non volatile et des moyens d'entrée/sortie. Plus spécifiquement, ce système informatique peut être incorporé dans une carte à puce. Dans ce cas, la carte contient un circuit comportant au moins un microprocesseur, une mémoire morte contenant un programme et éventuellement des données, une mémoire de travail et une mémoire non volatile programmable. Avantageusement, le circuit est conçu sous une forme monolithique. La mémoire non volatile peut stocker des données et/ou du code ; ainsi, le microprocesseur peut exécuter ce code de la même façon que celui enregistré en mémoire morte. On trouve donc dans une carte deux types de mémoire ; le contenu de la première est inscrit dès la fabrication du circuit et non modifiable. Le contenu de la seconde est vierge au départ, les valeurs seront inscrites au cours de l'utilisation normale de l'objet.
De nos jours, les cartes à puce peuvent répondre techniquement à de nombreux besoins. Le programme incorporé dans la carte, appelé aussi "système d'exploitation", permet d'adapter les fonctions de la carte à son usage final. Actuellement, le système d'exploitation est stocké dans une mémoire ROM qui est gravée lors de l'élaboration du circuit intégré. La modification du programme en vue de répondre à de nouveaux besoins est une opération longue qui pose un gros problème lorsque le client est pressé. De plus, cette opération est très coûteuse ; c'est pourquoi beaucoup de "petits" clients qui désireraient acheter quelques milliers de cartes sont découragés et souvent se contentent d'une carte qui ne répond que partiellement à leur attente. Une solution consisterait à utiliser un masque existant et à rajouter les fonctions que demande le client dans la mémoire programmable, ou à modifier celles existantes en ROM.
La possibilité d'introduire et d'exécuter un code supplémentaire en mémoire programmable offre l'avantage de pouvoir facilement rajouter de nouvelles fonctions à un programme ancien ou d'adapter d'anciennes fonctions à des besoins spécifiques.
La demande de brevet FR 96/05454 de la demanderesse décrit un mécanisme particulier pour dérouter un programme lors de l'exécution de certaines instructions. La précédente invention consiste à établir à certains emplacements de la mémoire ROM, par des instructions respectives, des points d'interrogation et des points d'orientation. Un point d'interrogation est référencé par un numéro et permet d'accéder à une routine dans la mémoire programmable s'il existe une séquence de code correspondant à l'adresse indiquée par ce numéro. Dans l'affirmative, un drapeau est positionné et une adresse de déroutement est mémorisée en mémoire RAM. Un point d'orientation est actif si un point d'interrogation a préalablement été exécuté. Dans le cas favorable, le déroutement est déclenché en faisant effectuer au programme normal un saut à l'adresse programmée. La séquence de code à exécuter peut être en mémoire programmable ou en mémoire morte.
Ce mode de réalisation comporte cependant plusieurs problèmes, si de nombreuses modifications dans le déroulement du programme doivent pouvoir être prises en compte. Dans ce dernier cas, il faut implémenter un grand nombre de points d'orientation dans la mémoire morte. A l'extrême limite, si l'on veut une grande adaptabilité, le programme contient plus de code permettant d'effectuer des déroutements que de code constituant le programme principal. La multiplicité de ces points est un inconvénient majeur si la taille de la mémoire morte est limitée. D'autre part, le temps d'exécution s'en trouve augmenté proportionnellement au nombre de points. Si on limite le nombre de points de déroutement pour tenir compte des contraintes, le mode de réalisation perd en souplesse, car il ne permet pas de dérouter un programme lors de l'exécution de n'importe quelle instruction.
La présente invention a pour objet un dispositif permettant de corriger certaines anomalies de fonctionnement d'un programme figé et permettre ainsi un déroulement correct, ou de rajouter facilement des fonctionnalités à un programme existant, tout en optimisant la séquence de code à écrire.
Ce but est atteint par le fait que le dispositif de modification de séquences de code inscrites dans une mémoire d'un support comprenant une unité centrale capable d'exécuter ces séquences de code, ladite mémoire contenant un programme principal exécutable par l'unité centrale qui comporte également une seconde mémoire programmable non volatile contenant éventuellement des nouvelles séquences de code exécutable, et une troisième mémoire de travail, est caractérisé en ce qu'une table de déroutement TAB_DER contenue dans la seconde mémoire programmable contient au moins un champ contenant une donnée de référence d'une nouvelle séquence de code, des moyens de déroutement permettant le déroutement différé de la séquence de code exécutée vers la nouvelle séquence de code inscrite dans une des trois mémoires et des moyens dans la nouvelle séquence de code permettant le retour en un point de la séquence de code exécutée avant le déroutement.
Selon un autre but, la présente invention peut interrompre le déroulement normal d'un programme avant l'exécution de n'importe quelle instruction, même avec un nombre de points d'orientation limité.
Ce but est atteint par le fait que les moyens de déroutement consistent en des instructions d'orientation (lORi) activables et implantées au préalable dans la mémoire contenant le code du programme principal, chaque instruction d'orientation étant associée à une référence i de la table de déroutement TAB_DER inscrite en mémoire programmable.
Selon une autre particularité, chaque instruction d'orientation (lORi) activée déclenche l'exécution d'une séquence nouvelle de code comportant :
- des moyens de lire dans la table TAB_DER de la mémoire programmable un délai de temporisation ΔTi correspondant à la référence de l'instruction d'orientation, ce délai de temporisation permettant de différer le déclenchement d'une interruption qui effectue un branchement à une séquence nouvelle de code dont l'adresse (Adri) est indiquée dans la table, en association avec le délai de temporisation,
- des moyens de mémoriser l'adresse (Adri) dans une mémoire du dispositif et
- des moyens de lancer un compteur de temps du dispositif pour décompter le temps nécessaire au délai de temporisation du branchement.
Selon un autre but, la présente invention permet de masquer certaines opérations dites sensibles effectuées par l'unité centrale.
Ce but est atteint par le fait que le dispositif de modification de séquences de code comporte une seconde table TAB_SEC mémorisée dans la mémoire du dispositif et associant à chaque point (i) de déroutement un intervalle de temps [ΔTmini ; ΔTmaxi] associé au délai de temporisation ΔTi préalable à l'exécution d'une nouvelle séquence de code, et des moyens de vérification que le délai de temporisation est autorisé par l'intervalle de temps associé fourni par cette table.
Selon une autre particularité, le dispositif de modification de séquences de code comporte des moyens permettant le décalage du délai ΔTi de temporisation de la valeur de l'intervalle de temps [ΔTmini ; ΔTmaxi]. Selon une autre particularité, le dispositif de séquences de code comporte des moyens de déclencher un message d'erreur lorsque le délai de temporisation ΔTi est dans l'intervalle de temps.
Selon une autre particularité, le dispositif de séquences de code comporte, consécutivement à la fin du délai de temporisation (ΔTi), lorsque le compteur atteint la valeur nulle, des moyens de déclencher une interruption, des moyens de mémorisation de la valeur actuelle d'un registre compteur programme PC dans une pile, puis des moyens de dérouter le programme à l'adresse définie dans la partie de la mémoire ROM contenant des vecteurs d'interruption, qui fournissent l'adresse du début de la séquence de code de l'interruption, des moyens de vérification que la valeur du registre compteur programme PC Val_PC mémorisée dans la pile n'est pas une valeur d'adresse de séquence sensible contenue dans une table TAB_SEC, et des moyens de modifier le déroulement des opérations. Selon une autre particularité, les moyens de vérification testent si la valeur du registre compteur programme est contenue par TAB_SEC dans l'intervalle [Adrdeb_i , Adrfin_1 ], correspondant à une interruption du programme pendant une séquence sensible et les moyens de modifier le déroulement des opérations de la carte renvoient un message indiquant que sa sécurité est atteinte et se bloque, soit les moyens de vérification testent si la valeur du registre compteur programme Val_PC est contenue dans l'intervalle ]Adrfin_i , Adrdeb_i+1 [ correspondant à une interruption du programme pendant une séquence non sensible et les moyens de modifier le déroulement des opérations autorisent le programme à exécuter alors la nouvelle séquence de code dont l'adresse de début a été mémorisée lors du traitement de l'instruction d'orientation (lORi).
Selon une autre particularité, le dispositif de modification de séquences de code comporte une source de fréquence pour le compteur différente d'une source de fréquence permettant à l'unité centrale d'exécuter le programme, la valeur du délai de temporisation (ΔTi) programmée dans la table de déroutement TAB_DER étant calculée pour permettre d'interrompre le programme à une adresse déterminée, la table TAB_DER comporte pour chaque valeur du délai de temporisation, un élément supplémentaire contenant cette adresse déterminée et des moyens de comparer l'adresse de l'instruction interrompue par l'interruption, à celle indiquée dans la table, et de provoquer une alarme.
Selon une autre particularité, le dispositif de séquences de code comporte des moyens de déclencher une alarme pour bloquer le support et indiquer une tentative de fraude par une écriture dans la mémoire.
Selon une autre particularité, chaque séquence nouvelle de code se termine par une instruction d'orientation pour recharger le compteur avec une nouvelle valeur de délai de temporisation (ΔTi).
Un dernier but est un procédé de modification de séquences de code figées inscrites dans un support comportant une unité centrale et une mémoire.
Ce but est atteint par le fait que le procédé de modification de séquences de code figées inscrites dans un support comportant une unité centrale et une mémoire consiste à prévoir dans au moins une séquence de code figée, au moins une instruction d'orientation (lORi), permettant de dérouter l'exécution par une interruption différée d'un délai de temporisation du programme contenu dans la mémoire de vers une adresse déterminée, par une table de déroutement TAB_DER, en fonction d'une référence i associée à l'instruction d'orientation et dans un délai de temporisation, déterminé par le contenu d'une ligne de table correspondant à la référence i de l'instruction d'orientation, une séquence nouvelle de code exécutable lors de l'interruption générée à la fin du délai de temporisation étant implantée à l'adresse contenue dans la table (TAB_DER).
Selon une autre particularité, une étape déclenchant l'interruption est précédée d'une étape de de vérification et le délai de temporisation n'est pas inclus dans un intervalle défini par une seconde table TAB_SEC dite sécuritaire inscrite dans la mémoire non volatile du support.
D'autres caractéristiques et avantages de la présente invention apparaîtront plus clairement à la lecture de la description ci-après faite en référence aux dessins annexés dans lesquels :
la figure 1 représente une vue schématique des circuits électroniques nécessaire à la mise en oeuvre de la présente invention ;
la figure 2A représente le schéma temporel des séquences de code nécessaire à la mise en oeuvre de la présente invention ;
la figure 2B représente le logigramme de la séquence de code correspondant à l'activation d'un point de déroutement ;
la figure 2C représente la séquence de code correspondant au traitement de l'interruption générée par le compteur ;
la figure 2D représente la table de déroutement TAB_DER ;
la figure 3 représente un diagramme temporel de l'imbrication des séquences de code du programme d'application de traitement de l'instruction d'orientation et de traitement de l'interruption, dans un exemple d'application de l'invention ;
la figure 4A représente la table de sécurité TAB_SEC ;
la figure 4B représente la modification du logigramme de la séquence de déroutement dans le cas d'une utilisation d'une table de sécurité conjointement avec la table de déroutement de l'invention.
La figure 5 représente le logigramme du programme d'écriture dans la table de déroutement. La présente invention va maintenant être explicitée à l'aide d'un exemple qui se situe dans le domaine des "cartes à puce" et plus particulièrement des cartes à microprocesseurs. Ces cartes possèdent généralement un circuit intégré dont le schéma général est représenté dans la figure 1. Ce circuit dispose d'une Unité Centrale (1 ) reliée par un bus d'adresse et de donnée à une mémoire non volatile par exemple de type ROM (2), contenant le programme principal, une mémoire programmable non volatile de type EEPROM (3), une mémoire de travail RAM (4), une interface d'entrée/sortie I/O (5) et un compteur (6). Le compteur peut générer une interruption et interrompre ainsi le déroulement normal du programme exécuté par l'Unité Centrale L'interruption est associée à un vecteur. Ce dernier est l'adresse de début de la routine d'interruption. C'est l'adresse de la première instruction de la séquence qui gère l'interruption. De façon intégrée ou externe au compteur, un moyen d'inhibition de l'interruption permet de retarder et même d'annuler l'interruption. Celle-ci sera alors prise en compte plus tard ou pas du tout.
La mémoire programmable (3) est divisée en plusieurs parties. Une première partie, appelée zone système, contient des informations systèmes non lisibles de l'extérieur, cette partie contient notamment les valeurs des pointeurs permettant de délimiter chacune des autres parties de la mémoire. Une seconde partie (32) est notée zone de donnée, elle est accessible de l'extérieur et contient principalement les données utilisateurs. Une troisième partie (33) contient une table d'orientation TAB_DER, cette table contient des éléments aux formats identiques composés d'au moins trois champs (N°Réf, ΔTi et Adri). Une quatrième partie (34), notée zone de séquences, contient les séquences de code pouvant être appelées par le programme principal à partir des numéros de référence (N°Réf) du point d'orientation et de l'adresse (Adri) lue dans la table. Il est à noter que dans une variante de l'invention, la table d'orientation, ou une ou plusieurs séquences de code, peuvent être chargées en mémoire de travail RAM plutôt qu'en mémoire programmable non volatile.
L'adresse de début, appelée AD_TAB, de la table d'orientation
TAB_DER est mémorisée dans la zone système (31 ). Un emplacement précis est prévu pour contenir cette valeur. L'écriture effective de cet emplacement constitue en soi l'indication que la table est bien présente et que les points d'orientation peuvent être opérationnels.
La mémoire ROM(2) qui contient, entre autres, le programme principal, est divisée en trois parties. La première (21 ) réalise l'initialisation du programme lors d'une mise sous tension. La seconde partie (22) contient le programme d'application. La troisième partie (23) contient du code
"dormant" dont le rôle est expliqué par la suite.
Lorsque le programme arrive à un point de déroutement ou d'orientation (220), il exécute une séquence de déroutement représentée à la figure 2B, laquelle consiste en une première étape dans laquelle le programme examine si une interruption est déjà en cours. Dans le cas affirmatif, le programme est avorté. Dans le cas négatif, le programme se poursuit par l'étape 2202, à laquelle il examine si un indicateur correspondant au point de déroutement i est actif.
Dans la négative, le programme fait un traitement d'erreur du type décrit dans la demande précédente. Dans l'affirmative, le programme se poursuit par l'étape de recherche dans la table TAB_DER inscrite dans la troisième partie (33) de la mémoire EEPROM, la valeur (ΔTi) de programmation du compteur correspondant au déroutement i et l'adresse de saut (Adrsi).
L'étape suivante 2205 permet le chargement du compteur de temporisation (6) avec la valeur (ΔTi) de temporisation donnée par la ligne i de la table TAB_DER. Puis l'étape suivante du programme 2206 permet le lancement du compteur de temporisation. Sur certains microprocesseurs l'écriture d'une nouvelle valeur dans le compteur entraîne son activation, et dans ce cas les deux étapes 2205 et 2206 sont confondues. Après cette étape, la séquence de déroutement se rebranche par l'étape 2207 à l'instruction suivante du programme qu'elle était en train d'exécuter lorsqu'elle a rencontré une instruction (IOR) de déroutement ou d'orientation, matérialisant un point de déroutement.
Lorsque le compteur, lancé à l'étape 2206, a écoulé le temps (ΔTi) fourni par la ligne i de la table TAB_DER, le compteur (6) déclenche sur le microprocesseur (1 ) une interruption qui donne lieu au traitement d'une séquence d'interruption (221 ; figure 2A). Cette séquence d'interruption, dont le détail est donné à la figure 2C, commence par une étape d'empilement éventuel du contexte de saut (2210) dans la mémoire RAM(4). Puis le traitement de l'interruption se poursuit par une étape (2211 ) d'exécution de la nouvelle séquence de code contenue, soit dans la quatrième partie (34) de l'EEPROM(3), soit dans la troisième partie (23) de la ROM, à l'adresse mémorisée précédemment à l'étape 2204. Puis l'interruption se termine par l'étape (2212) d'utilisation éventuelle du contexte empilé pour revenir au programme principal, soit à l'instruction suivante (2212A) de celle exécutée avant l'interruption en utilisant, par exemple, une instruction RTI de retour d'interruption, soit en faisant un saut (par exemple, par une instruction JUMP), comme représenté par la référence 2212B de la figure 2A.
On comprend ainsi que par l'enregistrement d'une table dans l'EEPROM, d'une séquence d'interruption dans la ROM et d'une séquence de déroutement dans une mémoire volatile ou non, on peut intervenir en tout point du programme d'application mémorisé dans la ROM, et modifier ou ajouter des fonctionnalités nouvelles par la mise en oeuvre des parties de code dormant, ou de nouvelles parties de code inscrites en EEPROM par exemple. Le point d'orientation existait avant la partie de programme que l'on veut maintenant modifier. Ce point d'orientation est doté d'un numéro de référence qui lui est propre, dans le cas présent "1".
La table TAB_DER a été introduite en mémoire programmable et l'entrée correspondant au numéro de référence « 1 » renseigné de la façon suivante par exemple :
ΔT1 a été calculée pour que cela corresponde à la durée nécessaire pour interrompre le déroulement du programme principal à l'adresse désirée Adr_2 (figure 3). Pour faire ce calcul, on prend en compte le nombre d'instructions pour « atteindre » l'adresse Adr_2 et la fréquence de décompte du compteur.
Dans un premier temps, la présence de la table d'orientation est testée. On a dit précédemment que cela peut revenir à tester l'écriture ou non de l'emplacement contenant l'adresse de début de la table TAB_DER. Ensuite, la présence d'une interruption en cours du compteur est testée. Si le compteur est en cours, il faut interdire l'exécution du point de déroutement, seule la séquence de code correspondant à un précédent point d'orientation sera exécutée. Sinon, le programme recherche les valeurs écrites dans les deuxième et troisième éléments correspondant au point d'orientation numéro 1. Les valeurs ΔT1 et Adr_1 sont extraites respectivement du premier et second champ de l'élément. Le registre de donnée du compteur est alors chargé avec la valeur ΔT1 et, le vecteur d'interruption associé à l'interruption provoquée par le compteur est chargé avec la valeur Adr _1. Enfin, juste avant de sortir de la séquence du point d'orientation, le compteur est lancé et la valeur stockée dans son registre de donnée décroît en fonction du temps. La valeur ΔT1 doit être déterminée avec une grande précision, elle dépend directement du nombre de cycles qui sépare le moment des exécutions de l'instruction de lancement du compteur et de la première instruction que l'on ne veut pas exécuter. Si le compteur est synchronisé avec l'horloge de l'Unité Centrale, il suffit d'additionner le nombre de cycles de chacune des instructions séparant les deux instructions précédemment nommées. Si le compteur n'est pas synchronisé avec la même fréquence que l'U.C. le calcul étant approximatif est délicat.
Si la source de fréquence du compteur est différente de celle permettant de dérouler le programme, alors le procédé de l'invention permet d'effectuer par exemple une tâche contrôle sécuritaire. En effet, les valeurs programmées dans la table TAB_DER permettent d'interrompre à une adresse déterminée, laquelle adresse a été indiquée comme élément supplémentaire dans la table TAB_DER, et une fois l'interruption active, on peut comparer l'adresse de l'instruction interrompue à celle indiquée dans la table. Si elles ne sont pas égales, alors on peut conclure qu'il y a un dérèglement des sources de fréquence, dû peut être à une tentative de fraude, et le programme peut agir de la façon qui convient (en se bloquant par exemple).
Une façon préférée de réaliser l'invention consiste à élaborer une table (figure 2D) en mémoire programmable, le premier élément de cette table est le numéro de référence du point d'orientation, le second élément est une valeur de chargement du compteur et, le troisième élément est l'adresse de la séquence de code à exécuter.
Cette table (figure 2D) possède une taille maximale de 30 octets répartis en 6 lignes de 5 octets. Le premier élément de la table comprend un octet, ce qui permet d'installer dans le code ROM, 255 points d'orientation, numérotés de 1 à 255. La valeur zéro indique qu'il n'y a plus de valeur et la fin de table est alors atteinte. La seconde valeur s'exprime sur deux octets, ce qui autorise 65536 valeurs différentes de chargement du compteur. Enfin, l'adresse de saut est notée sur deux octets, valeur traditionnelle pour des microprocesseurs de type carte à puce. Cette adresse doit permettre de faire exécuter des séquences de codes écrites en mémoire programmable EEPROM aussi bien que du code en ROM (code dormant).
On peut remarquer que la sixième ligne de cette table TAB_DER (figure 2D) est à "00", il n'y a donc, dans le cas présent que 5 points d'orientation opérationnels : Les n°1 ,3 4 (2 entrées) et 6. Les points d'orientation 3 et 6 ont la même adresse de saut Adr_3, ce qui veut dire que la modification de programme est la même pour ces deux points. Trois séquences de déroutement sont donc prévues. Ces séquences de déroutement peuvent être mémorisées dans la mémoire programmable et dans une partie du code ROM, ce code "dormant" pouvant être ainsi exécuté à l'aide des points d'orientation.
Une autre façon de gérer la table d'orientation, qui évite au programmeur de prévoir en mémoire une information correspondant à la taille de la table, consiste à prévoir un champ supplémentaire, qui contient la valeur d'adresse de l'élément suivant de la table d'orientation. Pour plus de détails, on pourra se référer à la demande de brevet référencée plus haut.
Avantageusement, une séquence nouvelle de code peut se terminer par un point d'orientation ce qui permet de recharger le compteur et donc de rajouter une nouvelle temporisation, comme le montre le tableau précédent pour le numéro de référence « 4 ». Cela est particulièrement utile pour réaliser des temporisations très longues qui dépassent la capacité du compteur. On implemente alors dans la séquence de code, la gestion d'un compteur d'interruption qui est initialisé à une certaine valeur de départ, cette valeur représente le nombre de temporisations maximales à effectuer avant de programmer dans le compteur du temporisateur la valeur inscrite dans TAB_DER. A la suite de cette dernière temporisation, la partie de la séquence de code relative à la modification du programme principal est exécutée
Un exemple d'application de l'invention est représenté à la figure 3, dans laquelle un programme d'application écrit en mémoire ROM peut contenir un certain nombre d'instructions d'interrogation (Ni), SUIVI de séquences de code les séparant de l'instruction d'orientation (IOI) correspondante, selon le principe de la demande de brevet français n° 96/05454 déposée par la demanderesse
Ces instructions d'interrogation (Ni) permettent de déterminer si l'instruction d'orientation (lORi) correspondante est active ou non, et dans le cas où elle est active, lorsque le programme arrive sur l'instruction d'orientation, de dérouter le programme vers un point d'orientation (i) ou déroutement, dont le numéro de référence pour l'instruction d'orientation (IOi) est i
L'exécution de l'instruction d'orientation (lORi) déclenche plusieurs opérations Elle déclenche d'abord la lecture de la table de dérivation ou de déroutement TAB_DER inscrite dans la zone 33 de la mémoire EEPROM pour déterminer si, à l'adresse i de cette table, les valeurs ΔT1 de compteur et d'adresse (Adri) de saut ont été remplies et dans le cas où ces valeurs sont présentes, les informations correspondantes ΔTi valeur de compteur et Adri adresse de saut, sont mémorisées temporairement, par exemple, dans la mémoire RAM(4) Puis, l'instruction d'orientation se termine par le lancement du compteur de temps 6
Une fois l'instruction d'orientation exécutée, le programme d'application continue à dérouler sa séquence dans l'ordre, arrive à l'exécution de l'instruction repérée par l'adresse Adr_1 correspondant à l'exemple de code exécutable figurant en annexe 1 , exécute la série d'instruction de cette séquence, puis arrive à l'instruction repérée par l'adresse Adr_2, pour laquelle on a choisi de modifier la valeur correspondante utilisée dans l'opération ultérieure de l'instruction de la séquence du programme normalement enregistré en mémoire ROM par une autre valeur. Pour cela on détermine ΔT1 de façon que l'interruption se produise avant que le programme exécute l'instruction de l'adresse (Adr_2) et l'interruption déroute le programme vers une séquence de code à l'adresse Adri. Ainsi, dans l'exemple donné du programme de l'annexe 1 , on veut remplacer la valeur 10 par la valeur 20 dans la multiplication qui est effectuée ensuite à l'adresse Adr_3.
Ceci est obtenu par la séquence de code figurant à l'annexe 2. On conçoit ainsi que l'accumulateur B a été chargé avec la valeur 20 à la place de la valeur 10, ce qui va changer le résultat de la multiplication sans avoir à modifier le programme inscrit en ROM.
Ainsi par des inscriptions de séquences nouvelles de code en EEPROM dans la zone 34, comme celle représentée à la figure 3, dans le carré 341 , par l'inscription d'une table de déroutement TAB_DER dans la zone 33 de l'EEPROM (3) et, par la mise en place d'instructions d'orientation dans le programme d'exploitation (Operating System) mémorisé dans la ROM de la carte à puce, on va pouvoir intervenir et modifier à volonté toutes les instructions par le choix de la temporisation ΔTi et de l'adresse d'intervention Adri, à laquelle va se trouver la nouvelle séquence de code inscrite dans une des mémoires de la carte.
Le début de cette partie de programme de l'annexe 1 comporte l'appel à un point d'orientation, numéroté "01 ". Des instructions existent ensuite. Puis, une séquence particulière est décrite. Tout d'abord, la valeur de l'octet pointé par X est multipliée par la valeur 10, le résultat sur deux octets est stocké dans deux registres, puis le sous-programme d'écriture en mémoire programmable est exécuté. Le programme étant figé en ROM il n'est plus modifiable, or il s'avère que la valeur "10" doit être changée en "20". Nous allons maintenant décrire comment la présente invention peut résoudre ce problème.
L'Unité Centrale continue alors l'exécution du programme principal (PP ; figure 3). Au moment où le microprocesseur va lancer l'exécution de l'instruction de l'adresse notée adr_2, le registre de donnée du compteur (6) initialisé au point de déroutement avec la valeur ΔTi, atteint la valeur nulle, ce qui déclenche une interruption (IT ; figure 3) qui permet le branchement de l'adresse Adri. L'instruction "LDB #01 Od" n'est donc pas exécutée. L'Unité Centrale est déroutée vers l'adresse Adri où l'on trouve la séquence de code qui figure en annexe 2 :
Cette petite séquence de code décrite dans l'annexe 2 permet de charger la valeur "20" dans le registre B qui sert à la multiplication, puis de revenir dans le programme principal, c'est à dire l'adresse adr_3, immédiatement après l'instruction que l'on veut modifier ou ne pas exécuter. L'instruction de multiplication à cette adresse prend en compte non plus la valeur "10" contenue à l'instruction précédente dans le code ROM, mais la valeur "20" contenue dans la nouvelle séquence de code.
La variante de l'invention ci-après prend en compte les besoins sécuritaires. Pour des raisons sécuritaires, il peut être important de ne pouvoir arrêter l'exécution d'une partie de programme par une interruption. C'est le cas par exemple d'une authentification avec calcul cryptographique et comparaison entre des valeurs reçues et calculées. Ainsi, tant que la clé secrète est en mémoire de travail et donc visible par une séquence de déroutement, il ne faut pas autoriser d'interruptions. Ceci est possible en inhibant au cours de l'exécution d'un programme "sensible" toutes les interruptions ou au moins celles du compteur.
L'inhibition des interruptions et leur réactivation s'effectuent chacune par une instruction interprétable par la quasi totalité des microprocesseurs. Ces instructions modifient généralement un bit du registre d'état du microprocesseur qui, tant qu'il est actif, empêche le déclenchement de l'interruption, et tant qu'il est inactif, autorise les interruptions. La présence d'une instruction d'inhibition d'interruption en mémoire ROM avant une séquence sensible a pour conséquence que la séquence sensible est définitivement protégée si l'instruction de réactivation est placée après la séquence sensible.
Une autre méthode pour interdire le déclenchement des interruptions lors de l'exécution d'une séquence sensible est de tester, lors de l'exploitation de la table TAB_DER, et ceci pour chaque point d'orientation, la valeur de programmation du timer. Une table TAB_SEC est donc prévue en mémoire ROM ou en mémoire E2PROM verrouillée qui comprend pour chaque point d'orientation du programme principal, un couple de valeur [Δ Tmini, ΔTmaxi] définissant un intervalle dans lequel toute valeur de programmation du compteur est interdite. Avantageusement, la table TAB_SEC peut comprendre plusieurs couples [ΔTmini, ΔTmaxi] pour le même point d'orientation, comme représenté à la figure 4A.
La présence de la table TAB_SEC en ROM fige les séquences sensibles, comme précédemment, alors que la présence en E2PROM permet de modifier les zones de séquence sensible jusqu'au verrouillage par une clé.
Pour les points d'orientation 3 et 5, deux intervalles de temps sont programmés.
Lors de l'exploitation des informations dans la table TAB_DER, le système d'exploitation teste si la valeur ΔTi à écrire correspondant au point d'orientation i n'appartient pas à des intervalles [ΔTmini, ΔTmaxi]. Si c'est le cas, une séquence sensible serait interrompue, cela étant interdit, le système d'exploitation refuse l'écriture et renvoie un message d'erreur. Si par contre, correspondant à ce point d'orientation, la valeur ΔTi n'est pas incluse dans l'intervalle de temps non autorisé, l'écriture est menée à bien et le point d'orientation devient opérationnel.
Dans la variante où on utilise une table sécuritaire TAB_SEC, la séquence de déroutement correspond à la figure 4B. Cette séquence comporte, outre les étapes de la figure 2B, les étapes suivantes, ajoutées entre l'étape 2204 et l'étape 2205 de la figure 2B :
- une première étape 22041 , qui consiste à lire la table de sécurité TAB_SEC à la ligne i pour déterminer l'intervalle [ΔTmini, ΔTmaxi], et vérifier, par exemple, que la valeur ΔTi d'initialisation du compteur de temporisation n'est pas incluse dans cet intervallef ΔTmaxi, ΔTmini]. La logique opposée est également possible. Si la valeur ΔTi n'est pas incluse, on poursuit par l'étape 2205. Si la valeur (ΔTi) est incluse, on poursuit, soit par l'étape 22043A qui permet l'affichage d'un message d'erreur, soit par l'étape 22043B, qui exécute une instruction permettant de recharger le timer avec la valeur (ΔTi) augmentée de l'intervalle. Ceci diffère le déclenchement de l'interruption de la longueur de l'intervalle.
Cette dernière variante permet malgré tout de déclencher les interruptions, mais de ne pas pouvoir intervenir sur des séquences du programme d'application qui doivent être protégées car faisant partie des portions sécuritaires.
Pour le reste, la séquence de déroutement se poursuit de la même façon que pour la figure 2B.
Enfin, le programme d'application ou une partie du code dormant peut inclure le programme d'écriture qui peut être appelé, par exemple, par une orientation à une adresse fixe initiale, de façon à permettre par l'orientation à ce programme d'écriture, l'écriture de la table de déroutement TAB_DER selon la séquence décrite à la figure 5. Ce programme commence par une étape de réception d'ordre d'inscription d'un ou plusieurs éléments dans la table TAB_DER, les éléments ΔTi, et Adri devant être écrits à la ligne i de l'élément dans la table. Cette étape est poursuivie par une étape de test sur le drapeau d'écriture de la table ECA pour vérifier s'il est actif ou inactif. Dans le cas où ECA est actif, le programme se poursuit par un message d'erreur à l'étape 61 . Dans le cas où ECA est inactif, le programme se poursuit par une étape 53 d'analyse de chaque élément ΔTi par rapport à la valeur correspondante dans la table de sécurité TAB_SEC. Cette étape comporte un test 54 pour déterminer si la valeur ΔTi est dans l'intervalle [ΔTmaxi, ΔTmini]. Dans l'affirmative, le programme se poursuit à l'étape 22043B par une modification du ΔTi représentant la valeur de l'intervalle, de façon à différer l'interruption pour ne pas tomber dans la séquence interdite. Une variante représentée en parallèle consiste à envoyer un message d'erreur 22043A. Ceci est représenté à l'étape 59 par l'opération consistant à remplacer
(ΔTi) par la valeur (ΔTi+x), x étant l'intervalle (ΔTmaxi-ΔTmini). Dans le cas où le ΔT n'est pas dans l'intervalle ou après modification de la valeur ΔTi, le programme se poursuit par l'étape 55, où on positionne à l'état actif, le drapeau ECA d'écriture de la table. Cette étape effectuée, le programme se poursuit par l'étape 56 de mise à jour de la table de déroutement et de vérification d'écriture. Cette vérification s'effectue par un test représenté à l'étape 57, dans le cas où le test confirme l'écriture correcte, le programme se poursuit par l'examen de savoir s'il y a un autre élément à écrire, dans la négative, le programme se termine à l'étape 62, dans l'affirmative, le programme se reboucle à l'étape 53.
Si le test de vérification est négatif, le programme se poursuit par l'étape 60 de positionnement du drapeau d'écriture à l'état inactif. Dans une variante de l'invention par la table TAB_DER il est même possible de protéger certaines parties de codes sans gêner les possibilités de modification des autres parties.
Une troisième variante consiste à stocker dans la table TAB_SEC en ROM les adresses début et fin associées à chacune des séquences sensibles. Les valeurs d'adresses se déterminent aisément et ne sont pas le résultat d'un calcul pour déterminer une durée comme précédemment.
Par exemple
TAB_SEC : où chaque ligne représente les adresses de début et de fin des séquences sensibles
Avantageusement, les fenêtres d'adresses [Adrdeb_i , Adrfin_1] sont mémorisées par adresses croissantes, ceci facilitant la lecture de la table. Par conséquent, les valeurs situées dans les intervalles ]Adrfin_i , Adrdeb_i+1 [ sont des valeurs d'adresses du programme non sensible.
La vérification de l'interruption d'une séquence sensible s'effectue consécutivement à la fin de la durée de temporisation. Lorsque le compteur atteint la valeur nulle, une interruption est déclenchée et la valeur actuelle du PC est mise dans la pile, puis le programme se déroute à l'adresse définie dans la partie de la mémoire ROM plus communément appelée : "vecteur d'interruption". Le concepteur du programme a pris soin d'initialiser la valeur du vecteur correspondant à l'interruption générée par la fin du comptage avec l'adresse du début de la séquence de code de l'interruption. Ladite routine est en ROM, et donc non modifiable, ceci pour des raisons de sécurité, elle sera donc toujours exécutée.
Au début de ladite séquence de code de l'interruption, on vérifie que la valeur du PC : Val_PC mémorisée dans la pile (c'est-à-dire l'adresse de l'instruction que le microprocesseur devait exécuter s'il n'y avait pas eu d'interruption) n'est pas une valeur d'adresse de séquence sensible. Si la table TAB_SEC n'existe pas ou est vide, le test n'est pas effectué et le programme exécute directement la nouvelle séquence de code. Sinon, le programme de la routine extrait la valeur Val_PC de la pile et recherche dans la table TAB_SEC entre quelles valeurs d'adresse elle se situe.
Si les valeurs sont du type [Adrdeb_i , AdrfinJ], le programme a été interrompu pendant une séquence sensible, la carte peut renvoyer un message indiquant que sa sécurité est atteinte et peut se bloquer. Si les valeurs sont du type ]Adrfin_i , Adrdeb_i+1 [ le programme a été interrompu pendant une séquence non sensible, le programme exécute alors la nouvelle séquence de code dont l'adresse de début a été mémorisée lors du traitement du point d'orientation.
D'autres modifications font également partie de l'esprit de l'invention.
Annexe 1
Voici ci-dessous une partie de code exécutable d'un programme principal, est écrit en assembleur MOTOROLA 6805 :
adr 0 LDX #01 Chargement du pointeur avec numéro du point d'orientation
JSR INS ORT Saut au point d'orientation NOP
adr 1 LDX #080H Chargement de la valeur hexadécimale 80 dans le pointeur X.
LDA ,χ Chargement de l'accumulateur A avec le contenu de l'adresse 80.
BEQ V ZERO Branchement si égal zéro à V_ZERO, sinon instruction suivante adr_2 LDB #01 Od Chargement de l'accumulateur B avec la valeur décimale 10 adr_3 MUL multiplication de A par B
STA Reg_H Mémorisation du contenu de H dans l'accumulateur A.
STB Reg_L Mémorisation du contenu de L dans l'accumulateur B.
JSR Ecrit_Mot V ZERO JMP Suite
Annexe 2
Adri LDB #020d JMP adr 3

Claims

REVENDICATIONS
1. Dispositif de modification de séquences de code dans un support comprenant une unité centrale (1 ) capable d'exécuter ces séquences de code, une première mémoire (2) contenant un programme comprenant au moins une séquence de code exécutable par l'unité centrale (1 ), et une seconde mémoire programmable (3), caractérisé en ce qu'une table de déroutement TAB_DER contenue dans la seconde mémoire programmable contient au moins un champ contenant une donnée de référence d'une nouvelle séquence de code stockée dans une desdites mémoires, des moyens de déroutement permettant un déroutement différé depuis une séquence de code dudit programme en cours d'exécution vers ladite nouvelle séquence de code, et des moyens prévus dans la nouvelle séquence de code pour permettre, une fois la nouvelle séquence de code exécutée, un retour en un point de ladite séquence de code du programme.
2. Dispositif de modification de séquences de code selon la revendication 1 caractérisé en ce que les moyens de déroutement consistent en des instructions d'orientation (lORi) activables et implantées au préalable dans la mémoire contenant le code du programme, chaque instruction d'orientation étant associée à une référence i de la table de déroutement TAB_DER inscrite en mémoire programmable (3).
3. Dispositif de modification de séquences de code selon la revendication 2, caractérisé en ce que chaque instruction d'orientation (lORi) activée déclenche l'exécution d'une séquence nouvelle de code comportant :
- des moyens de lire dans la table TAB_DER de la mémoire programmable (3) un délai de temporisation ΔTi correspondant à la référence de l'instruction d'orientation, ce délai de temporisation permettant de différer le déclenchement d'une interruption qui effectue un branchement à une séquence nouvelle de code dont l'adresse (Adri) est indiquée dans la table, en association avec le délai de temporisation,
- des moyens de mémoriser l'adresse (Adri) dans une mémoire du dispositif et
- des moyens de lancer un compteur (6) de temps du dispositif pour décompter le temps nécessaire au délai de temporisation du branchement.
4. Dispositif de modification de séquences de code selon la revendication 3, caractérisé en ce qu'il comporte une seconde table TAB_SEC mémorisée dans la mémoire du dispositif et associant à chaque point (i) de déroutement un intervalle de temps [ΔTmini ; ΔTmaxi] associé au délai de temporisation ΔTi préalable à l'exécution d'une nouvelle séquence de code, et des moyens de vérification que le délai de temporisation est autorisé par l'intervalle de temps associé fourni par cette table.
5. Dispositif de modification de séquences de code selon la revendication 4, caractérisé en ce qu'il comporte des moyens permettant le décalage du délai ΔTi de temporisation de la valeur de l'intervalle de temps [ΔTmini ; ΔTmaxi].
6. Dispositif de modification de séquences de code selon la revendication 4, caractérisé en ce qu'il comporte des moyens de déclencher un message d'erreur lorsque le délai de temporisation ΔTi est dans l'intervalle de temps.
7. Dispositif de modification de séquences de code selon la revendication 3, caractérisé en ce qu'il comporte consécutivement à la fin du délai de temporisation (ΔTi), lorsque le compteur (6) atteint la valeur nulle, des moyens de déclencher une interruption, des moyens de mémorisation de la valeur actuelle d'un registre compteur programme PC dans une pile, puis des moyens de dérouter le programme à l'adresse définie dans la partie de la mémoire ROM contenant des vecteurs d'interruption, qui fournissent l'adresse du début de la séquence de code de l'interruption, des moyens de vérifier que la valeur du registre compteur programme PC Val_PC mémorisée dans la pile n'est pas une valeur d'adresse de séquence sensible contenue dans une table TAB_SEC, et des moyens de modifier le déroulement des opérations.
8. Dispositif de modification de séquences de code selon la revendication 7, caractérisé en ce que, soit les moyens de vérification testent si la valeur du registre compteur programme est contenue par TAB_SEC dans l'intervalle [Adrdeb_i , Adrfin_1 ], correspondant à une interruption du programme pendant une séquence sensible et les moyens de modifier le déroulement des opérations de la carte renvoient un message indiquant que sa sécurité est atteinte et se bloque, soit les moyens de vérification testent si la valeur du registre compteur programme Val_PC est contenue dans l'intervalle ]Adrfin_i , Adrdeb_i+1 [ correspondant à une interruption du programme pendant une séquence non sensible et les moyens de modifier le déroulement des opérations autorisent le programme à exécuter alors la nouvelle séquence de code dont l'adresse de début a été mémorisée lors du traitement de l'instruction d'orientation (lORi).
9. Dispositif de modification de séquences de code selon la revendication 1 , caractérisé en ce qu'il comporte une source de fréquence pour le compteur (6), différente d'une source de fréquence permettant à l'unité centrale (1 ) d'exécuter le programme, la valeur du délai de temporisation (ΔTi) programmée dans la table de déroutement TAB_DER étant calculée pour permettre d'interrompre le programme à une adresse déterminée, la table TAB_DER comporte pour chaque valeur du délai de temporisation, un élément supplémentaire contenant cette adresse déterminée et des moyens de comparer l'adresse de l'instruction interrompue par l'interruption, à celle indiquée dans la table, et de provoquer une alarme.
10. Dispositif de modification de séquences de code selon la revendication précédente, caractérisé en ce qu'il comporte des moyens de déclencher une alarme pour bloquer le support et indiquer une tentative de fraude par une écriture dans la mémoire.
11. Dispositif de modification de séquences de code selon la revendication 1 ou 3, caractérisé en ce que chaque séquence nouvelle de code se termine par une instruction d'orientation pour recharger le compteur (6) avec une nouvelle valeur de délai de temporisation (ΔTi).
12. Procédé de modification de séquences de code figées inscrites dans un support comportant une unité centrale et une mémoire (2), caractérisé en ce qu'il consiste à prévoir dans au moins une séquence de code figée, au moins une instruction d'orientation (lORi), permettant de dérouter, par une interruption différée d'un délai de temporisation, l'exécution d'un programme contenu dans la mémoire vers une adresse déterminée, par une table de déroutement TAB_DER, en fonction d'une référence i associée à l'instruction d'orientation et dans un délai de temporisation, déterminé par le contenu d'une ligne de table correspondant à la référence i de l'instruction d'orientation, une séquence nouvelle de code exécutable lors de l'interruption générée à la fin du délai de temporisation étant implantée à l'adresse contenue dans la table (TAB_DER).
13. Procédé selon la revendication 12, caractérisé en ce qu'une étape déclenchant l'interruption est précédée d'une étape de vérification, consistant à vérifier que le délai de temporisation n'est pas inclus dans un intervalle défini par une seconde table TAB_SEC dite sécuritaire inscrite dans la mémoire non volatile du support.
EP98930843A 1997-06-13 1998-06-12 Procede de modification de sequences de code et dispositif associe Withdrawn EP0919026A1 (fr)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
FR9707321 1997-06-13
FR9707321A FR2764716B1 (fr) 1997-06-13 1997-06-13 Procede de modification de sequences de code et dispositif associe
PCT/FR1998/001228 WO1998057255A1 (fr) 1997-06-13 1998-06-12 Procede de modification de sequences de code et dispositif associe

Publications (1)

Publication Number Publication Date
EP0919026A1 true EP0919026A1 (fr) 1999-06-02

Family

ID=9507918

Family Applications (1)

Application Number Title Priority Date Filing Date
EP98930843A Withdrawn EP0919026A1 (fr) 1997-06-13 1998-06-12 Procede de modification de sequences de code et dispositif associe

Country Status (5)

Country Link
US (1) US6536034B1 (fr)
EP (1) EP0919026A1 (fr)
JP (1) JP3563412B2 (fr)
FR (1) FR2764716B1 (fr)
WO (1) WO1998057255A1 (fr)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2995030B2 (ja) * 1998-03-31 1999-12-27 三洋電機株式会社 コンピュータシステム、並びにコンピュータシステムにおけるプログラム及びデータの修正方法
US6260157B1 (en) * 1999-02-16 2001-07-10 Kurt Schurecht Patching of a read only memory
GB2349485B (en) * 1999-04-23 2003-12-10 Ibm Application management
FR2795838B1 (fr) * 1999-06-30 2001-08-31 Bull Cp8 Procede de securisation du traitement d'une information sensible dans un module de securite monolithique, et module de securite associe
US7152224B1 (en) * 2000-11-21 2006-12-19 Microsoft Corporation Versioned project associations
FR2818766A1 (fr) * 2000-12-21 2002-06-28 Bull Cp8 Procede de securisation de l'execution d'un programme implante dans un module electronique a microprocesseur, ainsi que le module electronique et la carte a microcircuit associes
JP2005332221A (ja) * 2004-05-20 2005-12-02 Renesas Technology Corp 記憶装置
JP4038216B2 (ja) * 2005-05-10 2008-01-23 ファナック株式会社 シーケンスプログラム編集装置
US9348730B2 (en) * 2007-01-31 2016-05-24 Standard Microsystems Corporation Firmware ROM patch method
FR2928754B1 (fr) * 2008-03-13 2012-05-18 Sagem Securite Carte a circuit integre ayant un programme d'exploitation modifiable et procede de modification correspondant
US8200888B2 (en) * 2008-06-30 2012-06-12 Intel Corporation Seek time emulation for solid state drives
US9348597B2 (en) * 2008-06-30 2016-05-24 Infineon Technologies Ag Device and method for bypassing a first program code portion with a replacement program code portion
US8930894B2 (en) * 2008-10-08 2015-01-06 Oracle America, Inc. Method and system for executing an executable file
FR2999845A1 (fr) * 2012-12-14 2014-06-20 Thomson Licensing Methode d'activation d'un mode de maintenance dans un dispositif electronique et dispositif associe
DE102015211458A1 (de) * 2015-06-22 2016-12-22 Robert Bosch Gmbh Verfahren und Vorrichtung zum Absichern einer Programmzählerstruktur eines Prozessorsystems und zum Überwachen der Behandlung einer Unterbrechungsanfrage
US9892024B2 (en) 2015-11-02 2018-02-13 Sony Interactive Entertainment America Llc Backward compatibility testing of software in a mode that disrupts timing
CN116643140A (zh) * 2022-02-15 2023-08-25 华为技术有限公司 集成电路及集成电路的测试方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4542453A (en) * 1982-02-19 1985-09-17 Texas Instruments Incorporated Program patching in microcomputer
JPS5969749A (ja) * 1982-10-14 1984-04-20 Sharp Corp 電子写真複写機の光学装置
US4831517A (en) * 1986-10-10 1989-05-16 International Business Machines Corporation Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
US5623665A (en) * 1992-01-13 1997-04-22 Sony Corporation Electronic apparatus for patching a read-only memory
US5748981A (en) * 1992-10-20 1998-05-05 National Semiconductor Corporation Microcontroller with in-circuit user programmable microcode
US5485629A (en) * 1993-01-22 1996-01-16 Intel Corporation Method and apparatus for executing control flow instructions in a control flow pipeline in parallel with arithmetic instructions being executed in arithmetic pipelines

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See references of WO9857255A1 *

Also Published As

Publication number Publication date
FR2764716A1 (fr) 1998-12-18
FR2764716B1 (fr) 2001-08-17
WO1998057255A1 (fr) 1998-12-17
US6536034B1 (en) 2003-03-18
JP2000500897A (ja) 2000-01-25
JP3563412B2 (ja) 2004-09-08

Similar Documents

Publication Publication Date Title
WO1998057255A1 (fr) Procede de modification de sequences de code et dispositif associe
EP0626664B1 (fr) Système de communication avec cartes à puce
FR2977694A1 (fr) Microprocesseur protege contre un debordement de pile
EP1161725A1 (fr) Procede de surveillance du deroulement d'un programme
EP1904946B1 (fr) Detection d'une faute par perturbation longue
FR2471000A1 (fr) Procede et dispositif de controle du nombre de tentatives d'acces a une memoire electronique, notamment celle d'un circuit integre d'un objet comme une carte de credit ou une carte d'achat
EP3018609A1 (fr) Procédé de chargement de fichier en mémoire vive dans un appareil électronique et appareil électronique associé
FR2843466A1 (fr) Procede pour empecher la falsification d'un systeme de traitement de donnees, et ce systeme
EP1108249B1 (fr) Procede de securisation du traitement d'une information sensible dans un module de securite monolithique, et module de securite associe
EP2158557B1 (fr) Procédé et dispositif de détection de sauts erronés au cours de l'éxecution d'un programme
FR2528196A1 (fr) Appareil de protection de programmes d'ordinateur
FR3055992A1 (fr) Gestion d'index dans une memoire flash
EP1939745B1 (fr) Procédé et dispostif pour sécuriser la lecture d'une mémoire
EP1258004B1 (fr) Ecriture en temps reel securisee pour memoire non volatile
EP0838053A1 (fr) Procede et dispositif permettant a un programme fige de pouvoir evoluer
EP3042334B1 (fr) Procédé de mise en place de moyens de sécurité en fonction d'un indice de confiance variant avant et après l'exécution de commandes sous la forme ddans un dispositif électronique à mémoire, et dispositif pour la mise en oeuvre dudit procédé
EP3246819B1 (fr) Compteur en mémoire flash
EP1357459B1 (fr) Processeur securisé contre les deroutements
EP1742162B1 (fr) Protection de l'exécution d'un programme
EP4086801B1 (fr) Procédé d'exécution d'une fonction, sécurisé par désynchronisation temporelle
FR2662830A1 (fr) Procede de dialogue entre les processeurs d'un systeme, systeme pour sa mise en óoeuvre et utilisation pour la repartition des processus aux processeurs.
FR2632093A1 (fr) Memoire modulaire
WO2007006887A1 (fr) Protection contre les attaques par generation de fautes sur les instructions de saut
EP4078418A1 (fr) Système électronique et procédés d'activation dynamique de contre-mesures
FR2740236A1 (fr) Dispositif de controle de l'utilisation d'un logiciel, systeme comprenant plusieurs de ces dispositifs et procede de controle correspondant

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): BE CH DE DK ES FI FR GB IE IT LI NL PT SE

17P Request for examination filed

Effective date: 19990617

RAP1 Party data changed (applicant data changed or rights of an application transferred)

Owner name: CP8 TECHNOLOGIES

17Q First examination report despatched

Effective date: 20071005

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20150106