FR2973130A1 - Mise a jour de signature par transformation de code - Google Patents

Mise a jour de signature par transformation de code Download PDF

Info

Publication number
FR2973130A1
FR2973130A1 FR1200807A FR1200807A FR2973130A1 FR 2973130 A1 FR2973130 A1 FR 2973130A1 FR 1200807 A FR1200807 A FR 1200807A FR 1200807 A FR1200807 A FR 1200807A FR 2973130 A1 FR2973130 A1 FR 2973130A1
Authority
FR
France
Prior art keywords
instructions
program
sequence
modification
signature
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.)
Granted
Application number
FR1200807A
Other languages
English (en)
Other versions
FR2973130B1 (fr
Inventor
Berndt Gammel
Stefan Mangard
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.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
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 Infineon Technologies AG filed Critical Infineon Technologies AG
Publication of FR2973130A1 publication Critical patent/FR2973130A1/fr
Application granted granted Critical
Publication of FR2973130B1 publication Critical patent/FR2973130B1/fr
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)
  • Programmable Controllers (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Procédé de production d'une suite (404') d'instructions pour une unité informatique qui peut être commandée par un programme, dans lequel des valeurs (SIG , SIG' ) de signature sont calculées sur la base des instructions (I , I , I , I , I , I ) exécutées et sont comparées à des valeurs de référence qui comprend la détermination d'une valeur (SIG ) de signature cible ; la détermination d'une suite (404) d'instructions initiale menant en un point (P) du programme, l'exécution de la suite (404) initiale d'instructions à partir d'une valeur de signature de début ayant pour conséquence le calcul d'une valeur (SIG ) initiale de la signature cible ; et la détermination d'une modification de la suite (404) initiale d'instructions pour obtenir une suite (404') modifiée d'instructions.

Description

Mise à jour de signature par transformation de code
Des exemples de réalisation de la présente invention procurent un procédé de production d'une suite d'instructions pour une unité informatique qui peut être commandée par un programme comprenant au moins la suite d'instructions.
Des exemples de réalisation de la présente invention procurent, en outre, un procédé d'exécution d'un programme sur une unité informatique commandée par programme, dans lequel le programme comprend au moins une suite d'instructions qui a été produite par le procédé mentionné en premier. D'autres exemples de réalisation de la présente invention procurent un programme informatique comprenant un code de programme pour la mise en oeuvre du procédé mentionné en premier et un compilateur pour l'établissement d'un programme informatique, qui applique le procédé de production d'une suite d'instructions.
Le principe de base de signatures d'instruction consiste à sommer, au temps d'exécution d'un programme, les instructions exécutées dans une somme de contrôle (signature) et de la contrôler en des emplacements prescrits par rapport à des valeurs de référence. S'il se produit dans l'organigramme du programme, qui peut être considéré comme la représentation graphique du déroulement du programme, des bifurcations, on peut utiliser des mises à jour de signature pour unifier les signatures dans deux trajets parallèles ou dans plusieurs trajets parallèles de l'organigramme du programme.
Si un programme (logiciel) est exécuté sur une unité informatique (matériel) on s'attend en règle générale à ce que le programme soit exécuté aussi en fait tel qu'il était prévu par le compilateur lors de la compilation. En réalité, l'exécution d'un programme ou d'un code s'écarte toutefois du déroulement du programme planifié à l'origine. En sont responsables, par exemple, des défauts du matériel, des signaux parasites ou aussi des manipulations délibérées sur l'unité informatique. Des défauts du matériel peuvent. être mis au compte, par exemple, de court-circuits de ligne intempestifs, d'interruptions de ligne ou d'éléments de commutation pendant (ce que l'on appelle des « stuck-at faults ») pour citer quelques types de défauts de matériel les plus courants. Des signaux parasites peuvent se produire pendant le fonctionnement de l'unité informatique, par exemple, sous l'effet de champs électromagnétiques ou également sous la forme de températures extrêmes qui sont en dehors de la plage de température prévue pour l'unité informatique. Des manipulations délibérées du matériel peuvent se produire par exemple par un court-circuitage de contacts sélectionnés, par des interruptions de ligne ou par une exposition au rayonnement laser de l'unité informatique et/ou d'une mémoire raccordée à l'unité informatique. Les types d'erreurs mentionnés peuvent se produire par exemple au sein de l'unité informatique soi-même, au sein d'une mémoire dans laquelle le programme est mémorisé, au sein d'autres composants d'un système qui comprend l'unité informatique ou dans des liaisons électriques entre les composants du système informatique. Pour détecter des erreurs de ce genre pendant l'exécution du programme, on peut effectuer un contrôle du flux d'instruction.
En vu d'effectuer le contrôle du flux d'instruction, on calcule, en règle générale, pendant l'établissement du programme, une valeur de contrôle (la signature), qui provient des instructions du programme à l'unité informatique. On peut par exemple ajouter les codes d'opération (opcodes) des instructions pour former ainsi une somme de contrôle. Dans un programme linéaire qui est exécuté en règle générale du début du programme jusqu'à la fin du programme, y compris toutes les informations intermédiaires, on peut ainsi calculer une somme de contrôle unique (ou d'une manière générale : valeur de contrôle), qui peut être contrôlée à la fin du programme ou après la fin du programme. Pour ce contrôle, on calcule, parallèlement à l'exécution de chaque instruction par l'unité informatique, la valeur de cette instruction (sous la forme de l'opcode présent en tant que motif de bit) par le contenu d'un registre spécial, par exemple en l'ajoutant au contenu du registre ou en le combinant en ou exclusif (XOR) bit à bit au contenu du registre. Dès que toutes les valeurs d'instruction ont été ainsi prises en compte dans le registre spécial, la valeur ressortant du registre spécial peut être comparée à une valeur de contrôle de référence pour constater si les deux valeurs coïncident. S'il y a coïncidence, on peut en déduire, en règle générale, que le programme est exécuté en bon ordre, c'est-à-dire que le programme a été réellement exécuté comme cela était planifié au moment de l'établissement du programme. La valeur de contrôle peut être enregistrée dans le code de programme sous la forme d'une constante. Suivant la façon dont le programme a été établi et suivant la langue de programmation qui a été utilisée, la valeur de contrôle de référence peut être calculée par un compilateur (« compiler ») et être inscrite dans le code de programme.
Les programmes ont souvent des bifurcations dans l'organigramme, qui peuvent être considérées aussi comme des « sauts conditionnels ». Après une bifurcation, le programme peut se continuer sur au moins deux trajets, la décision du point de savoir celui des deux trajets possibles ou des plusieurs trajets possibles qui est suivi n'étant prise qu'au moment où le programme se déroule par l'évaluation d'une condition. On observera que des points de bifurcation, ayant plus de deux trajets de bifurcation possibles, peuvent être décomposés, en règle générale, en points de bifurcation élémentaires, c'est-à-dire en des points de bifurcation, qui ont respectivement deux trajets de bifurcation possibles.
Pour la valeur qui est calculée pendant que le programme se déroule, cela signifie qu'elle dépend de la fréquence des trajets qui ont été parcourus. Afin de pouvoir effectuer, par exemple vers la fin du programme ou en un autre point au sein du déroulement de programme, une comparaison entre la valeur de contrôle présente et une valeur de contrôle de référence définie pour ce point, on a la possibilité d'ajuster l'une à l'autre les valeurs de contrôle dans les trajets différents qui peuvent être parcourus. Cela peut s'effectuer sous la forme suivant laquelle le compilateur introduit dans un trajet une instruction ou plusieurs instructions en soi superflues pour le déroulement du programme, instruction qui modifie la valeur de contrôle de sorte que ledit trajet a, en un point de réunion avec un autre trajet, la même valeur de contrôle que cet autre trajet. Il est prévu typiquement de détecter des mises à jour spéciales au moyen d'un modèle de bit déterminé et de les éliminer par filtrage du flux d'instruction normal pour les utiliser d'une manière spéciale pour la mise à jour.
L'enseignement technique exposé dans le présent mémoire concerne, suivant ce qui a été dit plus haut, un procédé de mise en oeuvre de mises à jour de signatures implicites, au moyen d'une transformation de code pour des procédés de signature d'instructions.
Des exemples de réalisation de l'enseignement technique exposé dans le présent mémoire procurent un procédé d'une production d'une suite d'instructions pour une unité informatique qui peut être commandée par un programme comprenant au moins la suite d'instructions, dans lequel, au temps d'exploitation du programme, des valeurs de signature sont calculées sur la base des instructions exécutées et sont comparées à des valeurs de référence, le procédé étant caractérisé en ce qu'il comprend : la détermination d'une valeur de signature cible ; la détermination d'une suite d'instructions initiales pour une partie de programme menant en un point du programme, l'exécution de la suite initiale d'instruction à partir d'une valeur de signature de début ayant pour conséquence le calcul d'une valeur initiale de la signature cible, qui est différente de la valeur de signature cible ; et la détermination d'une modification de la suite initiale d'instructions pour obtenir une suite modifiée d'instructions de manière à ce que la réalisation de la suite modifiée d'instructions ait pour conséquence le calcul d'une valeur de signature, qui correspondant à la valeur de signature cible, et un résultat d'un traitement de données utiles par la suite modifiée d'instructions, qui correspond à un résultat d'un traitement des données utiles par la suite initiale d'instructions au point du programme, toutes les instructions de la suite modifiée d'instructions entrant suivant le même procédé dans le calcul de signature.
Suivant le procédé selon l'enseignement technique exposé, on peut renoncer ainsi à des instructions explicites pour la mise à jour de la signature, puisque la mise à jour de la signature s'effectue de manière inhérente par la suite modifiée d'instructions. En relation avec un module de signature, on peut renoncer ainsi à des accès explicites en écriture au registre de signature du module de signature, accès qui sont utilisés dans certains procédés de signature d'instruction, pour ajuster la signature dans un trajet de programme à la signature dans un trajet de programme parallèle. Le calcul de signature au temps d'exécution traite toutes les instructions de la même façon, c'est-à-dire que toutes les instructions entrent suivant le même procédé ou la même prescription de calcul dans le calcul de signature. Les instructions prévues pour la mise à jour de la signature ne doivent ainsi pas être éliminées par filtrage au temps d'exploitation.
D'ailleurs, au moins certaines instructions de la suite modifiée d'instructions assument une fonction double, à savoir le traitement des données utiles et la mise à jour de la signature de la manière prévue, de sorte que pour ces instructions il ne serait pas judicieux de distinguer entre des instructions normales et des instructions de mise à jour. Des instructions explicites de mise à jour de la signature ne sont pas nécessaires suivant l'enseignement exposé ici, bien que cela néanmoins possible.
Le type proposé de mise à jour de la signature se distingue ainsi d'autres procédés de mise à jour de signature, dans lesquels un ordre de mise à jour entre d'une autre façon dans le calcul de signature, par exemple par addition explicite d'une certaine valeur à la valeur de signature présente. A cette fin, des modules de signature, qui assistent d'autres procédés de ce genre de mise à jour de signature, ont typiquement au moins deux interfaces : les codes d'opération d'instruction normale sont envoyés au module de signature par une première interface, ces instructions entrant ainsi dans le calcul normal de signature. Des instructions de mise à jour explicites sont transmises au module de signature par une deuxième interface. Ces instructions de mise à jour explicites ne sont typiquement pas incluses dans le calcul de la somme Hash et n'entrent pas dans le calcul normal de signature. Suivant l'enseignement technique exposé, un module de signature ne doit pas comporter absolument la deuxième interface. Il n'est pas non plus nécessaire que le module de signature fasse une distinction entre des instructions « normales » et des instructions de mise à jour.
Suivant l'enseignement exposé, par exemple toutes les instructions ou les valeurs peuvent être prises en compte dans le cadre d'un calcul de valeur Hash (« hashées ») ou un ordre tout entier est ajouté (au lieu de seulement l'argument qui est spécifié dans l'ordre d'addition).
La valeur de signature de début est associée à un point au début ou avant la suite d'instructions. Par le calcul de signature, on transforme cette signature de début en une valeur de signature de fin, qui est associée à un point à la fin de la suite d'instructions ou à un point après celle-ci. La valeur initiale de signature est la valeur à la fin de la suite initiale d'instructions (ou en un point après), qui provient de la suite initiale d'instructions. La valeur de signature cible est la valeur à la fin de la suite modifiée d'instructions.
La modification de la suite d'instructions peut consister aussi, par exemple, en ce que des bits non utilisés sont modifiés en un ordre pour modifier la signature. On peut ainsi modifier des bits de manière ciblée dans la signature.
Dans des exemples de réalisation, la détermination de la modification peut comprendre une modification de l'ordre de deux instructions ou de plusieurs instructions, une insertion d'une instruction, un remplacement d'une instruction et/ou une répartition d'une instruction en deux sous-instructions ou en plusieurs sous-instructions.
Dans d'autres exemples de réalisation, la détermination de la modification peut comprendre une affectation d'une valeur constante à une registre ou à un élément de mémoire (adresse de mémoire) de l'unité informatique, sans que la valeur constante après l'affectation soit utilisée pour le traitement des données utiles. Typiquement le registre ou l'élément de mémoire, sur lequel la valeur constante est écrite, n'est pas le registre de signature, mais un registre ou un élément de mémoire prévu pour des données utiles.
La détermination de la modification peut comprendre en outre : la comparaison de la différence avec au moins une valeur de modification de signature pour au moins une option de modification ; la sélection d'une option de modification ; la détermination d'une différence restante ; et si la différence restante est différente de zéro : la répétition des stades de la comparaison, de la sélection et de la détermination de la différence restante. Par une itération de plusieurs modifications de la suite initiale d'instructions, on peut obtenir aussi des valeurs de signature cible pour la signature, qui ne peuvent pas être produites par une modification unique. La suite initiale d'instruction peut comporter dans certaine circonstance quelques degrés de liberté, de sorte qu'une modification appropriée peut éventuellement être difficile à trouver.
Suivant d'autres exemples de réalisation, la détermination peut comprendre une sélection d'une option de modification sélectionnée parmi une pluralité d'options de modification, la suite modifiée d'instructions suivant l'option de modification sélectionnée ayant, par rapport à la suite initiale d'instructions, un coût supplémentaire de traitement plus petit que d'autres options de modification. En évaluant une fonction coût se rapportant au coût du calcul, on peut extraire par filtrage des options de modification, qui obtiennent la mise à jour de signature souhaitée en ayant un coût de calcul supplémentaire le plus petit possible pour l'unité informatique.
La sélection de l'option de modification sélectionnée peut comprendre en outre une interrogation d'une base de données, dans laquelle des prescriptions de modification sont mémorisées pour la pluralité des options de modification et au moyen de laquelle la pluralité des options de modification peut être déterminée pour la partie du programme. Les prescriptions de modification peuvent spécifier aussi des conditions à remplir qui indiquent si et de quelle façon une instruction déterminée ou un groupe d'instructions peut être modifié.
Une analyse de dépendance de données peut entrer dans cette évaluation.
Suivant d'autres exemples de réalisation, la détermination de la valeur d'instruction cible comprend au point du programme la détermination d'une valeur d'instruction pour un trajet de programme alternatif par rapport à la partie du programme.
La détermination de la modification peut comprendre en outre : une indentification d'une instruction pouvant être répartie dans la partie du programme, une décomposition d'un argument de l'instruction pouvant être répartie en au moins deux sous-arguments et un remplacement de l'instruction pouvant être répartie par au moins deux sous-instructions ayant respectivement l'un des au moins deux sous-arguments.
Suivant d'autres exemples de réalisation on peut s'efforcer, lors de la détermination de la modification de la suite initiale d'instructions, de provoquer une modification qui ne provoque pas d'allongement de la suite d'instructions. Lorsque l'on ne peut pas trouver une modification de ce genre (à un coût acceptable), le procédé peut comporter au moins l'une des actions suivantes : détermination d'une modification qui provoque un allongement de la suite d'instructions ; insertion d'une instruction pour une mise à jour explicite de code ; et modification de la valeur de signature cible et/ou de la signature initiale.
En ce qui concerne l'option « modification de la valeur de signature cible et/ou de la signature initiale », on mentionnera que la signature cible souhaitée peut représenter pour ainsi dire une condition aux limites supplémentaire, lors de l'optimisation. La possibilité de modifier la valeur de signature cible et/ou la signature initiale offre un degré de liberté supplémentaire pour la modification. Une modification de la valeur de signature cible et/ou de la signature initiale peut signifier dans certaines circonstances qu'il faut modifier aussi la suite d'instructions dans un trajet de programme parallèle. . 10 Des exemples de réalisation en variante de l'invention procurent un procédé d'exécution d'un programme sur une unité informatique commandée par programme, le programme comprenant au moins une suite d'instructions, qui a été 15 produite par le procédé de production d'une suite d'instructions pour une unité informatique. Pendant l'exécution du programme, il se produit typiquement un calcul de signature pour chaque signature exécutée par l'unité informatique et, en des points prévus pour cela 20 dans l'organigramme du programme, un contrôle de la valeur de signature calculée au temps d'exécution par une valeur de référence. Comme il n'y a pas d'instruction explicite pour la mise à jour du registre de signature ou de la valeur de signature, par exemple des manipulations 25 délibérées du registre de signature sont plus difficiles à effectuer par un pirate potentiel.
Un autre exemple de réalisation de l'enseignement technique exposé procure un programme informatique ayant 30 un code de programme pour la mise en oeuvre du procédé décrit ci-dessus de production d'une suite d'instructions, lorsque le programme informatique se déroule sur un ordinateur.
Un autre exemple de réalisation de l'enseignement technique exposé procure un compilateur d'établissement d'un programme informatique de ce genre.
Un autre exemple de réalisation procure un dispositif comprenant : une détermination de signature cible pour la détermination d'une valeur de signature cible ; une détermination d'une suite d'instructions pour la détermination d'une suite initiale d'instructions pour une partie de programme menant au point de programme ; une détermination de signature pour la détermination d'une valeur de signature initiale, qui est associée au point de programme sur la base de la suite initiale d'instructions, qui est différente de la valeur de signature cible ; et une détermination de modification pour la détermination d'une modification de la suite initiale d'instructions pour l'obtention d'une suite modifiée d'instructions de manière à ce que l'exécution de la suite modifiée d'instructions ait pour résultat le calcul de la valeur de signature cible et de manière à ce qu'un résultat d'un traitement de données utiles par la suite modifiée d'instructions corresponde, au point de programme, à un résultat d'un traitement des données utiles par la suite initiale d'instructions, toutes les instructions de la suite modifiée d'instructions entrant suivant le même procédé dans le calcul de signature.
Dans les procédés de signature d'instructions connus jusqu'ici, les mises à jour de signature ou « updates » sont effectuées par des instructions explicites ou par des accès en mémoires explicites. Cela emporte un coût supplémentaire lors de la prise en charge du programme. Dans certaines circonstances, des modifications d'architecture du système sont aussi nécessaires pour supporter des instructions de mise à jour explicites ou des registres explicites.
Suivant l'enseignement technique exposé, on peut transformer le code de programme de manière à pouvoir effectuer par une transformation de code une mise à jour ciblée (prescrite) de la signature d'instruction.
Des exemples de réalisation de la présente invention sont 10 décrits d'une manière plus précise dans ce qui suit au moyen des figures annexées. Aux dessins :
La figure 1 est une illustration d'une transformation de code au moyen d'une transposition ;
La figure 2 est une illustration d'une transformation de code au moyen d'une insertion ;
La figure 3 est une illustration d'une transformation de code au moyen d'un remplacement ;
La figure 4 représente une partie d'un organigramme schématique d'une suite initiale d'instructions et d'une suite modifiée d'instructions qui peut remplacer la suite initiale d'instructions ;
La figure 5 est un organigramme d'un procédé de production d'une suite d'instructions suivant un exemple de réalisation de l'enseignement technique ici exposé ; .15 20 25 30 La figure 6 est un organigramme d'un détail de procédé de production d'une suite d'instructions suivant un autre exemple de réalisation de l'enseignement technique ici exposé ;
La figure 7 est un schéma synoptique d'un dispositif de production d'une suite d'instructions pour une unité informatique suivant un exemple de réalisation de l'enseignement technique ici exposé.
Avant d'expliciter dans ce qui suit des exemples de réalisation au moyen des figures annexées, on indiquera que de mêmes éléments ou des éléments ayant une même 15 fonction sont dotés des mêmes repères ou de repères analogues et que l'on renoncera à les décrire de manière répétée. Les descriptions d'éléments ayant de mêmes repères ou des repères analogues peuvent donc être échangées entre elles. 20 Dans les procédés de signature d'instruction connus jusqu'ici, on effectue les mises à jour de la signature par des instructions ou par des accès en mémoire explicites. Mais, les mises à jour peuvent s'effectuer 25 aussi sans modification de la structure du matériel d'une manière efficace par des transformations de code. Pour mettre en oeuvre une certaine fonction sur un processeur, on dispose le plus souvent de plusieurs possibilités. Notamment si l'on est prêt à permettre au moins une 30 instruction supplémentaire (il peut aussi y en avoir plusieurs) par rapport au code optimal, on a une pluralité de possibilités pour écrire le code. On peut utiliser cette pluralité pour effectuer implicitement une mise à jour par un choix approprié du code de programme. 10 Par une modification du code de programme, qui ne modifie pas le résultat du programme, on peut mettre la signature, en un point autre que celui où la modification a lieu, à une valeur de signature cible souhaitée.
Trouver des transformations de code qui laissent intacte la fonction logique d'un programme est bien connu de l'homme du métier et ne nécessite pas ici de plus amples explications. Dans des exemples de réalisation, on sélectionne, dans un procédé de signature de flux de contrôle, à dessein une transformation invariante parmi le grand nombre de transformations possibles, de manière à transformer la signature en une valeur prescrite.
Finalement, chaque compilateur produit des transformations de code différentes, un code différent mais identique fonctionnellement étant produit dans des stades d'optimisation différents. Dans des exemples de réalisation de l'invention, on utilise l'une des transformations qui se traduit par une signature souhaitée.
Dans des exemples de réalisation de l'invention, les transformations du code qui mènent à la signature cible souhaitée peuvent dépendre de l'algorithme de signature prescrit sélectionné, des transformations différentes pour des algorithmes de signature différents pouvant conduire à la signature cible.
Dans des exemples de réalisation de l'invention, il est prescrit une signature de début et une signature cible et on recherche une transformation de code adéquate. Dans le cas où des instructions sont insérées, il peut y avoir aussi plusieurs solutions. Mais, dans des exemples de réalisation de l'invention, on n'insère pas d'instruction, mais on échange des instructions présentes pour que le code-overhead reste petit.
Des exemples de réalisation de l'invention peuvent comporter une modification de la signature de début ou de la signature cible, lorsque les degrés de liberté de la transformation qui sont à disposition ne suffisent pas pour trouver des transformations compatibles avec des conditions limites données (par exemple des longueurs de code donné). Dans des exemples de réalisation de l'invention, on s'efforce d'effectuer une transformation telle que le code de programme transformé ne soit pas plus long par bloc élémentaire (basic block), par exemple par un simple échange d'instructions. Si, on ne trouve pas une solution de ce genre, on peut, dans des exemples de réalisation, soit a) insérer une instruction de mise à jour de signature explicite, soit b) insérer une opération supplémentaire, comme par exemple deux additions au lieu d'une addition, soit c) effectuer une modification de la signature de début et/ou de la signature cible.
Dans des exemples de réalisation de l'invention, une modification de la suite initiale d'instructions peut comporter une ou plusieurs des transformations suivantes, cela ne constituant pas cependant une énumération exhaustive : - modification de l'ordre de deux instructions ou de plusieurs instructions insertion d'une instruction ou de plusieurs instructions ; - remplacement d'une instruction ou de plusieurs instructions ; - répartition d'une instruction en deux sous-instructions ou en plusieurs sous-instructions ; - affectation d'une valeur constante à un registre ou un élément de mémoire de l'unité informatique sans que la valeur constante après l'affectation soit utilisée pour le traitement des données utiles ; - on effectue une permutation de registre par exemple par échange des registres de processeurs utilisés (comme par exemple de R1, R2, R3 en R2, R1, R3 ou R3, R2, R1). On prendra garde que les registres aient dans des blocs de base dépendants ou suivants aient également les bonnes valeurs, c'est-à-dire qu'il faut produire une adaptation globale au-delà du bloc élémentaire ; - utilisation de registres libres, une analyse et une adaptation allant au-delà du bloc élémentaire étant à nouveau nécessaires ; - remplissage de champs utilisés dans des instructions ayant des bits sélectionnés librement ; et - on effectue des modifications de signe d'opérande pour une addition ou une soustraction et un échange correspondant d'addition et de soustraction. - mais il est clair pour l'homme du métier qu'outre les modifications mentionnées sont possibles aussi d'autres modifications ou transformations qui conduisent à une signature cible.
La figure 1 montre une première option pour une transformation de code, qui consiste à modifier l'ordre de deux instructions ou de plusieurs instructions, c'est-à-dire la modification de valeurs de signature, par décalage d'instructions. Cette option de la modification est dénommée dans le présent mémoire « transposition ». La colonne de gauche à la figure 1 représente le code initial dans lequel les instructions sont exécutées dans l'ordre Instrl, Instr2, Instr3, Instr4, .... InstrN. Cet ordre a été fixé et provoqué par exemple par un compilateur ou par un optimiseur de code. Des données utiles sont traitées de la façon prévue par les instructions. La colonne de droite montre le résultat de deux transpositions qui ont été effectuées. Une première transposition consiste en ce que les instructions Instrl, Instr3 ont échangé leur emplacement. Une deuxième transposition a conduit à un échange des emplacements des instructions Instr4 et InstrN. On exige, en règle générale, que la modification d'une partie de programme soit transparente vis-à-vis des données utiles. Cela signifie qu'après exécution d'une partie de programme modifiée les données utiles ont été traitées en définitive d'une manière identique à la façon dont cela aurait été provoqué par la partie de programme initiale. Au sein de la partie de programme modifiée le traitement des données utiles peut en revanche s'écarter du traitement qui est effectué dans le cadre de la partie de programme d'origine. Dans la transposition on tire parti par exemple du fait que l'on peut modifier l'ordre d'instructions déterminées, sans modifier pour autant le traitement des données utiles (c'est-à-dire à la fin de la partie de programme modifiée).
On peut appliquer la transformation de code au moyen d'une transposition lorsque le calcul de signature n'est pas commutatif de sorte qu'un échange de l'ordre des instructions donne des valeurs de signature différentes, si donc on a : Signature (Instrl, Instr2) * signature (Instr2, Instrl). En ce qui concerne les données utiles, des instructions Instrl et Instr2 sont en revanche typiquement commutatives. On peut influer ainsi la signature en modifiant l'ordre des instructions. Si en ce qui concerne les données utiles un grand nombre de permutations de l'ordre des instructions est possible, la transposition d'instructions a un grand nombre de degrés de liberté de sorte que la signature peut être adaptée à de nombreuses valeurs de signature cible souhaitées.
La figure 2 représente une deuxième option pour une transformation de code, qui consiste en l'insertion d'une instruction ou de plusieurs instructions, qui n'était pas contenue dans le code de programme d'origine. A la figure 2, une instruction InstrX supplémentaire est insérée entre les instructions Instr2 et Instr3 du code de programme d'origine. En outre, on insert ensuite une autre instruction InstrY supplémentaire à la suite de l'instruction Instr4. Les instructions InstrX et InstrY insérées peuvent être par exemple des instructions qui ne modifient pas les données utiles. On pourrait songer ici à une addition de la valeur zéro à la répétition d'une opération de lecture ou d'écriture de mémoire (de sorte que la même valeur est lue ou écrite deux fois) ou au chargement d'une valeur déterminée dans un registre du processeur inutilisé à cet instant.
La figure 3 représente une troisième option pour une transformation de code, qui consiste en ce qu'une instruction d'origine est remplacée. A la figure 3, l'instruction Instr2 d'origine est remplacée par deux instructions InstrX et InstrY. Une décomposition de l'argument est effectuée de sorte que le résultat reste le même, mais que la signature reçoit la valeur cible souhaitée. Comme il est représenté à la partie inférieure de la figure 3, l'instruction Instr2 peut être par exemple une addition de la valeur 2468 constante au contenu actuel du registre R3. Cette addition peut être répartie en deux sous-additions, la valeur 1330 étant à additionner d'abord dans le cadre de la première sous-addition (InstrX) et la valeur 1138 étant ajoutée dans le cadre de la deuxième sous-addition (InstrY). Le registre R3 contient finalement, après l'exécution des deux instructions InstrX et InstrY, ainsi la même valeur augmentée de 2468 par rapport à son contenu antérieur. Au lieu de deux additions, on pourrait effectuer aussi deux soustractions, plusieurs sous-additions, plusieurs soustractions ou une combinaison d'additions et de soustractions. Cette option de la transformation du code ouvre des possibilités étendues et/ou souples, puisque des valeurs constantes peuvent être représentées par de nombreuses combinaisons différentes d'additions et de soustractions. On peut, par exemple, ajouter, par une addition d'une valeur constante et par une soustraction venant ensuite de la même valeur, en tout la valeur zéro a un registre, ce qui n'a pas d'effet finalement sur le traitement des données utiles. Une combinaison d'instructions de ce genre a en revanche sur le calcul de signature une influence qui, par un choix appropriée de la valeur constante, peut être ajustée de manière à pouvoir obtenir une mise à jour de signature, qui met la signature à une valeur de signature cible en un point déterminé du programme, pour autant que, en relation avec l'unité informatique, il ne se produit pas, pendant le temps d'exécution du programme, d'erreur lors du traitement des instructions qui entrent dans le calcul de signature.
La figure 3 illustre ainsi un exemple pour une transformation de code, dans laquelle une addition est calculée en deux stades au lieu de l'être en seulement un stade. Par le choix de la répartition des deux stades, la signature d'instruction peut être modifiée (mise à jour) de manière à mettre en oeuvre exactement la fonctionnalité d'une instruction de mise à jour de signature explicite.
En variante à une répartition du traitement d'une valeur constante comme le montre la figure 3, on peut aussi traiter une valeur de registre ou une variable en deux stades ou en plusieurs stades. Si par exemple, on doit ajouter le contenu d'un premier registre R1 au contenu d'un deuxième registre R2, on peut ajouter d'abord le bit ayant la valeur la plus basse de R1 au contenu de R2, puis diviser le contenu du premier registre Rl par deux (d'une manière générale : par n) par exemple au moyen d'un décalage vers la droite (« right shift ») et ensuite l'ajouter deux fois (d'une manière générale : n fois) au deuxième registre.
Les options de modification indiquées comme exemple aux figures 1 à 3 sont propres à influer d'une manière ciblée sur la signature, sans influencer directement le contenu d'un registre de signature de l'unité informatique ou un module de signature relié ou sans une instruction ou plusieurs instructions influençant le contenu du registre de signature. D'autres exemples sont l'affectation de constantes à des registres qui ne sont pas utilisés au moins temporairement par le processeur.
La figure 4 représente une partie d'un plan de déroulement de programme. En un point P du programme sont réunis à nouveau deux trajets de programme ou suites 402 et 404 d'instructions, qui partent d'un point de bifurcation (non représenté). A la fin de la suite 402 d'instructions, la signature a, si la réalisation des instructions est correcte, la valeur SIGP1. Une version initiale de la deuxième suite 402 d'instructions donne en revanche une valeur SIGP2 de signature qui, en général, est différente de la valeur SIGP1 de signature de la différence ASIG = SIGP1 - SIGP2. Avant de réunir les deux suites 402 et 404 d'instruction au point P, il est souhaité, en règle générale, que les signatures aient, dans les diverses suites 402 et 404 d'instructions se réunissant, la même valeur de signature, pour autant qu'une exécution sans défaut des instructions des suites s'effectue. A cette fin, la signature dans l'une des deux suites 404, 402 d'instructions est adaptée à la signature de l'autre suite 402, 404 d'instructions. A la figure 4, la deuxième suite 404 d'instructions est adaptée de manière à créer une suite 404' modifiée d'instructions à partir de la suite 404 initiale d'instructions. La suite 404' modifiée d'instructions a au point P de programme une valeur SIGP2' modifiée de signature, qui coïncide avec la valeur SIGP1 de signature de la première suite 402 d'instructions. On a : SIGP2' = SIGP2 + ASIG = SIGP1. Le calcul de signature et le contrôle de signature après la réunion des suites 402, 404' d'instructions peut ainsi se poursuivre au point P de programme, sans qu'il soit important pour le calcul de signature que la première suite 402 d'instructions ou que la deuxième suite 404' d'instruction (modifiée) ait été mise en oeuvre par l'unité informatique.
Dans le cadre de la suite 404' modifiée d'instructions il est possible d'adapter la signature à la signature de la suite 402 d'instructions, par une mise à jour explicite de la signature. Suivant l'enseignement technique ici exposé, on effectue toutefois une modification de la suite 404 d'instructions de manière à ce qu'au moins certaines des instructions Il, I2 et In d'origine soient modifiées. La suite 404' modifiée d'instructions a ainsi par exemple des instructions Il', I2' et In' modifiées.
La modification des instructions peut consister en un décalage, une omission, une insertion, un remplacement ou d'autres modifications des instructions. La séquence temporelle de traitement de données au sein de la suite 404 d'instructions se distingue notamment de celle qui est effectuée au sein de la suite 404' modifiée d'instructions. Une différence dans la séquence temporelle est provoquée aussi par le fait que l'on insère par exemple une addition nulle en un point déterminé de la suite 404' modifiée d'instructions, puisque ainsi les instructions suivantes d'au moins un cycle sont réalisées plus tard.
Parmi les données utiles d'un programme ou d'une partie de programme, on compte typiquement au moins des données qui représentent une variable d'entrée, une variable de sortie ou une variable auxiliaire du programme ou de la partie de programme, c'est-à-dire des données qui influencent une sortie ou un résultat du programme ou d'une partie du programme. Suivant la définition appartiennent en outre aux données utiles des données qui sont traitées par le processeur, mais qui n'influent pas sur la sortie du programme ou de la partie du programme. Ces dernières données peuvent être par exemple des données qui sont écrites dans un registre de l'unité informatique ou qui y sont lues, mais qui n'interagissent pas avec des variables d'entrée, avec des variables auxiliaires et/ou avec des variables de sortie du programme ou de la partie du programme. La figure 5 est un organigramme schématique d'un procédé de production d'une suite d'instructions pour une unité informatique suivant un exemple de réalisation de l'enseignement technique ici exposé. 10 Dans l'action 502 une valeur de signature cible pour un point P de programme est déterminée. La valeur de signature cible peut provenir par exemple de la signature de référence, calculée de manière normalisée, d'un autre 15 trajet de programme qui mène au point.P de programme.
En 504 une suite initiale d'instructions pour une partie de programme est déterminée, partie de programme qui mène au point P de programme. Le plus souvent la partie du 20 programme débouche dans le point P du programme, bien que des écarts à cela soit possible, c'est-à-dire que la partie du programme se termine dès avant le point P du programme. La détermination de la suite initiale d'instructions peut s'effectuer par exemple par un 25 compilateur. Dans le cadre du procédé ici exposé de production d'une suite d'instructions, la suite initiale d'instructions peut être lue aussi par exemple dans un fichier ou dans un support de données.
30 Comme action facultative, on peut déterminer en 506 une valeur initiale de signature sur la base des instructions de la suite initiale d'instructions. Il est également facultatif de déterminer une différence entre la valeur de la signature cible et la valeur initiale de signature5 en 508. Par la détermination de la différence, on peut dans certaines circonstances faciliter une recherche d'options de modification possibles. La différence peut entrer par exemple comme argument dans une fonction par laquelle on calcule une valeur constante, qui est écrite dans un registre non utilisé présentement de l'unité informatique. L'opération d'écriture dans le registre peut provoquer alors une modification de la signature, qui correspond précisément à la différence de la signature qui est nécessaire.
Dans le cadre de l'action 510 une modification de la suite 404 initiale d'instruction, est alors déterminée, modification qui donne la suite 404' modifiée d'instructions.
La figure 6 reproduit un organigramme schématique qui montre un aspect d'un procédé de production d'une suite d'instructions. En partant de l'action 508, dans laquelle la différence entre la valeur de signature cible et la valeur initiale de signature est déterminée, on compare en 608 la différence à au moins une valeur de modification de signature pour une option de modification. En 610, on sélectionne une option de modification et on effectue la modification correspondante de la suite d'instructions. Si la valeur de modification de signature pour l'option de modification sélectionnée coïncide avec la différence constatée, le but de la modification est atteinte. Cela est constaté par le fait qu'en 612, on détermine une différence restante et on compare cette différence restante à zéro en 614. Si la différence restante est égale à zéro le procédé se termine par la sortie de la suite 614 modifiée d'instructions. Si, en revanche, la différence restante est différente de zéro, le procédé retourne de l'interrogation 614 à l'action 608 où la différence restante est comparée aux valeurs de modification de signature pour une option de modification ou pour plusieurs options de modification. On peut effectuer ainsi plusieurs itérations jusqu'à ce que la différence restante soit égale à zéro. A chaque itération, on effectue une autre option de modification, qui toutefois est finalement sans importance pour le traitement de données utiles, en étant donc « transparente ».
On s'efforce, en règle générale, pour le procédé d'effectuer aussi peu de modifications que possible de la suite initiale d'instructions, puisqu'ainsi le coût supplémentaire pour l'unité de calcul provoqué souvent par la modification peut rester dans certaines limites. Tandis que, pour des transpositions telles qu'elles sont montrées à la figure 1, il ne se produit pas dans certaines circonstances, d'augmentation du coût du calcul, des insertions d'instructions peuvent augmenter le coût du calcul. Des options de modification différentes s'accompagnent donc d'effets différents sur le coût du calcul. Cette information peut être mémorisée ensemble avec les options de modification de manière à ce que la décision pour une option de modification spéciale puisse prendre en considération une augmentation éventuelle du coût du calcul. Une stratégie éventuelle pour la sélection de l'option ou des options de modification pourrait être de contrôler d'abord des transpositions possibles d'instruction. Ce n'est que lorsqu'il s'est avéré que la valeur de signature cible ne peut pas être atteinte exclusivement par des transpositions que l'on pourrait s'adresser à d'autres options de modification comme des insertions et/ou des remplacements.
La figure 7 représente un schéma synoptique d'un dispositif 100 de production d'une suite d'instructions pour une unité informatique suivant l'enseignement technique ici exposé. Le dispositif 100 reçoit par exemple d'un compilateur des instructions comme grandeurs d'entrée. Ces instructions sont le plus souvent sous la forme d'une suite initiale d'instructions. Le dispositif 100 comprend une détermination 104 de suite d'instructions, qui détermine la suite initiale d'instructions ou qui la met à disposition par lecture d'un fichier ou par des actions comparables du dispositif 100.
Le dispositif 100 comprend en outre une détermination 102 de la valeur d'une signature cible. La détermination 102 de la valeur de la signature cible peut être conçue par exemple pour identifier des points du programme ou deux trajets du programme parallèles, où plusieurs trajets du programme parallèles se réunissent à nouveau. Sur ces points du programme, il est prévu typiquement que, dans certains des trajets du programme, une mise à jour de signature est effectuée, afin qu'audit point du programme les signatures dans les divers trajets de signature se correspondent. La détermination 102 de la valeur de la signature cible peut fixer l'un des trajets du programme qui peut servir du trajet de référence en vue de la détermination de signature. On n'effectue typiquement pas de mise à jour de signature dans le trajet de référence, bien que cela ne soit pas exclu. Dans l'autre trajet de programme ou dans les autres trajets de programme, il est prévu en revanche typiquement une mise à jour de signature.
Une détermination 106 de signature est conçue pour déterminer une signature initiale pour la suite initiale d'instructions et sur la base de la suite initiale d'instructions. La signature initiale déterminée est transmise à une détermination 108 de différence, qui reçoit la valeur de la signature cible comme autre variable d'entrée. Une différence déterminée entre la valeur de la signature cible et la signature initiale est acheminée à une détermination 110 de modification, qui reçoit également la suite initiale d'instructions de la détermination 104 de la suite d'instructions. La détermination 110 de modification sort.une suite modifiée d'instructions, qui représente aussi une sortie du dispositif pour la production de la suite d'instructions.
Bien que de nombreux aspects qui ont été décrits en relation avec un dispositif, il va de soi que ces aspects représentent aussi une description du procédé correspondant, de sorte qu'un bloc ou un composant d'un dispositif doit se comprendre aussi comme un stade correspondant du procédé ou comme une caractéristique d'un stade du procédé. D'une manière analogue à cela, des aspects qui ont été décrits en relation avec un stade du procédé ou comme un stade du procédé représentent également une description d'un bloc ou d'un détail ou d'une caractéristique correspondante d'un dispositif correspondant. Certains des stades du procédé ou tous les stades du procédé peuvent être exécutés par un appareil de matériel (ou en utilisant un appareil de matériel) comme par exemple un microprocesseur, un ordinateur programmable ou un circuit électronique. Dans certains exemples de réalisation, on peut exécuter certains des stades du procédé les plus importants ou plusieurs d'entre eux par un appareil de ce genre.
Suivant certaines exigences de mise en oeuvre, on peut mettre en oeuvre des exemples de réalisation de l'invention en matériel ou en logiciel. La mise en oeuvre peut s'effectuer en utilisant un support de mémoire numérique, par exemple un disque souple, un DVD, un disque Blu-ray, un CD, une ROM, une ROM, PROM, une EPROM, une EEPROM ou une mémoire FLASH, un disque dur ou une autre mémoire magnétique ou optique sur laquelle sont mémorisés des signaux de commande pouvant être lus électroniquement, qui peuvent coopérer ou qui coopèrent avec un système informatique programmable de manière à effectuer le procédé respectif. Le support de mémoire numérique peut donc être lu sur un ordinateur.
De nombreux exemples de réalisation suivant l'invention comprennent donc un support de données qui a des signaux de commande pouvant être lus électroniquement, qui sont en mesure de coopérer avec un système informatique programmable de manière à effectuer l'un des procédés décrit dans le présent mémoire.
D'un manière générale, on peut mettre en oeuvre des exemples de réalisation de la présente invention sous la forme d'un produit de programme informatique ayant un code de programme, le code de programme étant efficace pour effectuer le procédé lorsque le produit de programme informatique passe sur un ordinateur.
Le code de programme peut être mémorisé par exemple aussi sur un support pouvant être exploitable par une machine.
D'autres exemples de réalisation comprennent le programme informatique pour la mise en oeuvre d'un procédé décrit dans le présent mémoire, le programme informatique étant mémorisé sur un support pouvant être exploité par une machine.
En d'autres termes, un exemple de réalisation du procédé suivant l'invention est ainsi un programme informatique qui comporte un code de programme pour effectuer l'un des procédés décrit dans le présent mémoire lorsque le programme informatique passe sur un ordinateur.
Un autre exemple de réalisation du procédé suivant l'invention est ainsi un support de. données (ou un support de mémoire numérique ou un support pouvant être lu par un ordinateur) sur lequel le programme informatique pour la mise en oeuvre de l'un des procédés décrit dans le présent mémoire est enregistré.
Un autre exemple de réalisation du procédé suivant l'invention est ainsi un flux de données ou une séquence de signaux qui représente le programme informatique pour l'exécution d'un procédé décrit dans le présent mémoire.
Le flux de données ou la séquence de signaux peut par exemple être configuré pour être transféré par l'intermédiaire d'une liaison de communication de données, par exemple par l'Internet.
Un autre exemple de réalisation comprend un dispositif de traitement, par exemple un ordinateur ou un composant logique programmable, qui est configuré ou adapté pour exécuter l'un des procédés décrit dans le présent mémoire.
Un autre exemple de réalisation comprend un ordinateur sur lequel le programme informatique est installé pour l'exécution de l'un des procédés décrit dans le présent mémoire.
Un autre exemple de réalisation suivant l'invention comprend un dispositif ou un système qui est conçu pour transmettre un programme informatique pour l'exécution d'au moins l'un des procédés décrits dans le présent mémoire à un récepteur. La transmission peut s'effectuer par exemple par voie électronique ou par voie optique. Le récepteur peut être, par exemple, un ordinateur, un appareil mobile, un appareil de mémorisation ou un dispositif semblable. Le dispositif ou le système peuvent comprendre par exemple un serveur de fichier pour la transmission du programme informatique au récepteur.
Dans de nombreux exemples de réalisation, on peut utiliser un composant logique programmable (par exemple une matrice de porte logique programmable par l'utilisateur, une FPGA) pour exécuter de nombreuses fonctionnalités ou toutes les fonctionnalités du procédé décrit dans le présent mémoire. Dans nombre d'exemples de réalisation, une matrice de porte programmable par l'utilisateur peut coopérer avec un microprocesseur pour exécuter l'un des procédés décrits dans le présent mémoire.
D'une manière générale les procédés sont exécutés dans certains exemples de réalisation par n'importe quel dispositif en matériel. Celui-ci peut être un matériel à usage universel, comme un processeur informatique (CPU) ou un matériel spécifique au procédé, comme par exemple un ASIC.
Les exemples de réalisation décrits ci-dessus représentent simplement une illustration de la présente invention. Il va de soi que l'on peut apporter des modifications et des variations aux agencements décrits dans le présent mémoire et que d'autres détails apparaîtront aux spécialistes. L'invention ne doit donc pas être limitée aux détails spécifiques qui ont été présentés au moyen de la description et pour l'explication des exemples de réalisation.

Claims (16)

  1. REVENDICATIONS1. Procédé de production d'une suite (404') d'instructions pour une unité informatique qui peut être commandée par un programme comprenant au moins la suite d'instructions, dans lequel, au temps d'exploitation du programme, des valeurs (SIGP2r SIG' p2) de signature sont calculées sur la base des instructions (Ilr I2r Inr Ii'r I2' , In') exécutées et sont comparées à des valeurs de référence, le procédé étant caractérisé en ce qu'il comprend : la détermination d'une valeur (SIG21) de signature cible ; la détermination d'une suite (404) d'instructions initiale pour une partie de programme menant en un point (P) du programme, l'exécution de la suite (404) initiale d'instructions à partir d'une valeur de signature de début ayant pour conséquence le calcul d'une valeur (SIGP2) initiale de la signature cible, qui est différente de la valeur (SIGP1) de signature cible ; et la détermination d'une modification de la suite (404) initiale d'instructions pour obtenir une suite (404') modifiée d'instructions de manière à ce que la réalisation de la suite (404') modifiée d'instructions ait pour conséquence le calcul d'une valeur (SIG'P2) de signature, qui correspond à la valeur (SIGP1) de signature cible, et un résultat d'un traitement de données utiles par la suite (404') modifiée d'instructions, qui correspond à un résultat d'untraitement des données utiles par la suite (404) initiale d'instructions au point (P) du programme, toutes les instructions de la suite modifiée d'instructions entrant suivant le même procédé dans le calcul de signature.
  2. 2. Procédé suivant la revendication 1, caractérisé en ce que la détermination de la modification comprend une modification de l'ordre de deux instructions (I1r I2, In) ou de plusieurs instructions (I1, I2r In).
  3. 3. Procédé suivant la revendication 1 ou 2, caractérisé en ce que la détermination de la modification comprend une insertion d'une instruction (I1, , I2,, In') . 15
  4. 4. Procédé suivant l'une des revendications 1 à 3, caractérisé en ce que la détermination de la modification comprend un remplacement d'une instruction (I1r I2, In).
  5. 5. Procédé suivant l'une des revendications 1 à 4, 20 caractérisé en ce que la détermination de la modification comprend une répartition d'une instruction (I1r I2, In) en deux sous-instructions ou en plusieurs sous-instructions.
  6. 6. Procédé suivant l'une des revendications 1 à 5, 25 caractérisé en ce que la détermination de la modification comprend l'affectation d'une valeur constante à un registre ou à un élément de mémoire de l'unité informatique sans que la valeur constante soit utilisée après l'affectation pour le traitement des données 30 utiles.
  7. 7. Procédé suivant l'une des revendications 1 à 6, caractérisé en ce que la détermination de la modification comprend : 10la comparaison de la différence avec au moins une valeur de modification de signature pour au moins une option de modification ; la sélection d'une option de modification ; la détermination d'une différence restante ; et 10 si la différence restante est différente de zéro : la répétition des stades de la comparaison, de la sélection et de la détermination de la différence restante.
  8. 8. Procédé suivant l'une des revendications 1 à 7, 15 caractérisé en ce que la détermination de la modification comprend une sélection d'une option de modification sélectionnée parmi une pluralité d'options de modification, la suite (404') modifiée d'instructions suivant l'option de modification sélectionnée ayant un 20 coût supplémentaire de traitement plus petit par rapport à la suite (404) initiale d'instructions que d'autres options de modification.
  9. 9. Procédé suivant la revendication 8, caractérisé en 25 ce que la sélection de l'option de modification sélectionnée comprend une interrogation d'une base de données dans laquelle des prescriptions de modification sont mémorisées pour la pluralité des options de modifications, au moyen de laquelle la pluralité des 30 options de modification peut être déterminée pour la partie du programme.
  10. 10. Procédé suivant l'une des revendications 1 à 9, caractérisé en ce que la détermination de la valeur5(SIGP1) d'instruction cible comprend au point (P) du programme la détermination d'une valeur d'instruction pour un trajet (402) de programme alternatif par rapport à la partie du programme.
  11. 11. Procédé suivant l'une des revendications 1 à 9, caractérisé en ce que la détermination comprend : une indentification d'une instruction pouvant être répartie dans la partie du programme, une décomposition d'un argument de l'instruction pouvant être répartie en au moins deux sous-arguments et un remplacement de l'instruction pouvant être répartie par au moins deux sous-instructions ayant respectivement l'un des au moins deux sous-arguments.
  12. 12. Procédé suivant l'une des revendications 1 à 11, caractérisé en ce qu'au stade de la détermination d'une modification de la suite (404) initiale d'instructions, on cherche à déterminer une modification qui ne provoque pas d'allongement de la suite d'instructions, dans lequel, si on n'a pas trouvé une modification de ce genre, le procédé comprend au moins l'un des stades suivants : - détermination d'une modification qui provoque un allongement de la suite (404) d'instructions ; insertion d'une instruction pour une mise à jour explicite de code ; et modification de la valeur (SIGP1) de signature cible 30 et/ou de la signature initiale.
  13. 13. Procédé d'exécution d'un programme sur une unité informatique commandée par programme, caractérisé en ce que le programme comprend au moins une suite (404')d'instructions qui a été produite par un procédé suivant l'une des revendications 1 à 12.
  14. 14. Programme informatique ayant un code de programme pour la mise en oeuvre du procédé suivant l'une des revendications 1 à 12, lorsque le programme informatique se déroule sur un ordinateur.
  15. 15. Compilateur pour l'établissement d'un programme 10 informatique suivant la revendication 14.
  16. 16. Dispositif de production d'une succession (404') d'instruction pour une unité informatique qui peut être commandée par un programme comprenant au moins la suite 15 (404'.) d'instructions, caractérisé en ce qu'autant d'exploitation du programme des valeurs de signature sont calculées sur la base des instructions (I1r 12, In, Il' , I2',In') exécutées et sont comparées à des valeurs de références, le dispositif comprenant : 20 une détermination (102) de signature cible pour la détermination d'une valeur (SIGP1) de signature cible ; une détermination (104) d'une suite d'instructions pour 25 la détermination d'une suite (404) initiale d'instructions pour une partie de programme menant au point (P) de programme ; une détermination (106) de signature pour la 30 détermination d'une valeur (SIGP2) de signature initiale, qui est associée au point (P) de programme sur la base de la suite (404) initiale d'instructions, qui est différente de la valeur (SIGP1) de signature cible ; etune détermination (110) de modification pour la détermination d'une modification de la suite (404) initiale d'instructions pour l'obtention d'une suite (404') modifiée d'instructions de manière à ce que l'exécution de la suite (404') modifiée d'instructions ait pour résultat le calcul de la valeur (SIGP1) de signature cible et de manière à ce qu'un résultat d'un traitement de données utiles par la suite (404') modifiée d'instructions corresponde, au point (P) de programme, à un résultat d'un traitement des données utiles par la suite (404) initiale d'instructions, toutes les instructions (I1' , 12', I3') de la suite (404') modifiées d'instructions entrant suivant le même procédé dans le calcul de signature. 20
FR1200807A 2011-03-23 2012-03-16 Mise a jour de signature par transformation de code Expired - Fee Related FR2973130B1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102011006000 2011-03-23
DE102011006000.6A DE102011006000B4 (de) 2011-03-23 2011-03-23 Signaturaktualisierung durch Codetransformation

Publications (2)

Publication Number Publication Date
FR2973130A1 true FR2973130A1 (fr) 2012-09-28
FR2973130B1 FR2973130B1 (fr) 2018-04-06

Family

ID=46801819

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1200807A Expired - Fee Related FR2973130B1 (fr) 2011-03-23 2012-03-16 Mise a jour de signature par transformation de code

Country Status (4)

Country Link
US (1) US9323604B2 (fr)
CN (1) CN102722422B (fr)
DE (1) DE102011006000B4 (fr)
FR (1) FR2973130B1 (fr)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289808B2 (en) 2013-12-20 2019-05-14 Infineon Technologies Ag Method and system for secure data processing
US10223507B2 (en) * 2016-10-28 2019-03-05 Infineon Technologies Ag Deterministic code fingerprinting for program flow monitoring
US10536168B2 (en) 2016-11-07 2020-01-14 Infineon Technologies Ag Program flow monitoring for deterministic firmware functions
EP3579072A1 (fr) * 2018-06-06 2019-12-11 Siemens Aktiengesellschaft Procédé de fabrication automatique de signatures marquées

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5974529A (en) 1998-05-12 1999-10-26 Mcdonnell Douglas Corp. Systems and methods for control flow error detection in reduced instruction set computer processors
IL128007A (en) 1999-01-11 2003-02-12 Milsys Ltd Enhancements on compact logic devices and also for accelerating and securing computations in modular arithmetic especially for use in public key cryptographic co-processors designed for elliptic curve and rsa type computations
FR2790844B1 (fr) * 1999-03-09 2001-05-25 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
US7308096B2 (en) 2000-05-30 2007-12-11 Hitachi, Ltd. Elliptic scalar multiplication system
FR2828304B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "dissociation temporelle" contre son utilisation non autorisee
US7506217B2 (en) * 2005-12-30 2009-03-17 Intel Corporation Apparatus and method for software-based control flow checking for soft error detection to improve microprocessor reliability
DE102006014353B4 (de) 2006-03-28 2007-11-22 Siemens Ag Verfahren zum sicheren Ermitteln von Daten
US8243919B2 (en) 2007-03-07 2012-08-14 Research In Motion Limited Method and apparatus for performing elliptic curve scalar multiplication in a manner that counters power analysis attacks
DE102007038763A1 (de) * 2007-08-16 2009-02-19 Siemens Ag Verfahren und Vorrichtung zur Sicherung eines Programms gegen eine Kontrollflussmanipulation und gegen einen fehlerhaften Programmablauf
JP2009104589A (ja) * 2007-10-05 2009-05-14 Canon Inc 情報処理装置及びその方法、プログラム、記録媒体
US8261247B2 (en) * 2008-10-01 2012-09-04 Oracle International Corporation Method of modifying code of a running computer program based on symbol values discovered from comparison of running code to corresponding object code
FR2942560B1 (fr) 2009-02-24 2015-06-26 Oberthur Technologies Procede de traitement de donnees impliquant une exponentiation et un dispositif associe.

Also Published As

Publication number Publication date
DE102011006000A1 (de) 2012-09-27
DE102011006000B4 (de) 2015-01-15
US20120246452A1 (en) 2012-09-27
CN102722422B (zh) 2015-08-26
CN102722422A (zh) 2012-10-10
FR2973130B1 (fr) 2018-04-06
US9323604B2 (en) 2016-04-26

Similar Documents

Publication Publication Date Title
US20200225921A1 (en) Lookup table optimization for programming languages that target synchronous digital circuits
FR2790844A1 (fr) Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
FR2828294A1 (fr) Procede pour generer une image en memoire morte
US10289395B2 (en) Performing a compiler optimization pass as a transaction
US20170031684A1 (en) Branch synthetic generation across multiple microarchitecture generations
FR2973130A1 (fr) Mise a jour de signature par transformation de code
FR2713368A1 (fr) Procédure et procédé de communication entre machines et procédé généralisé de préparation de programmes afférents.
US20220114076A1 (en) Methods and apparatus to determine refined context for software bug detection and correction
FR2857115A1 (fr) Compatibilite des revisions de modules interchangeables
FR2870369A1 (fr) Interface de bus virtuel et systeme et procede associes
WO2020084279A1 (fr) Communication de données
US20140359077A1 (en) Method and apparatus for transmitting symbol files
EP3284206B1 (fr) Procédé de sécurisation de l' exécution d'un programme
CA2297276C (fr) Procede et dispositif de reception et pretraitement de messages
CN115964045A (zh) 一种跨架构的操作系统快速自动化构建的方法、装置及介质
EP0469507A1 (fr) Circuit intégré comprenant une cellule standard, une cellule d'application et une cellule de test
EP0606802B1 (fr) Procédé de détection des erreurs d'exécution d'un logiciel
EP3198442B1 (fr) Exécution spéculative et itérative de graphes de flot de données temporisés
US9262167B2 (en) Computer processor with instruction for execution based on available instruction sets
EP2229648B1 (fr) Methode de transfert securise de donnees
CN114812695B (zh) 一种产品测试方法、装置、计算机设备和存储介质
US20230289635A1 (en) Validation of rest api backward compatibility with differential coverage-guided feedback fuzzing
US20220114083A1 (en) Methods and apparatus to generate a surrogate model based on traces from a computing unit
CN117234671A (zh) 一种业务处理方法、系统、设备及存储介质
WO2016181062A1 (fr) Procede de securisation d'une comparaison de donnees lors de l'execution d'un programme

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 4

PLSC Publication of the preliminary search report

Effective date: 20151211

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 9

ST Notification of lapse

Effective date: 20211105