Brevet FR2888369A1 — publié le 20070112

La présente invention se rapporte à un procédé de sécurisation d'un programme informatique et à un dispositif, notamment une carte à microcircuit (aussi appelée "carte à puce") mettant en oeuvre un tel procédé. L'invention concerne également un dispositif de génération de la sécurisation d'un programme associé à ce procédé. La présente invention vise en particulier la sécurisation des appels et des sauts vers des morceaux de programmes ayant des fonctions critiques pour la sécurité du système. Par ailleurs, on entendra par sécurisation d'un programme informatique tout traitement visant à se prémunir contre des attaques notamment par perturbation du fonctionnement d'une entité électronique, aussi appelées attaques par génération de fautes (en anglais "Fault Attack"). Par ailleurs, on entendra par programme informatique, tout programme, quel que soit le langage informatique et les moyens de mémorisation utilisés. Par exemple, et de façon non limitative, le programme informatique peut être écrit en langage machine, assembleur, C, C++, Java. Le programme peut être mémorisé dans une mémoire permanente, par exemple dans une mémoire ROM ou EEPROM, Flash ou sur un disque dur, ou dans une mémoire volatile, par exemple de type RAM. La présente invention vise, en particulier, à se protéger contre des attaques destinées à modifier le déroulement de l'exécution d'un programme informatique s'exécutant sur une entité électronique sécurisée, (par exemple, une carte à microcircuit, une carte PCMCIA sécurisée (par exemple une carte IBM4758), une clef USB ou un passeport (ou autre pièce d'identité) intégrant une puce avec une interface sans contact dans au moins une de ses pages). Les attaques par génération de fautes visent, notamment, à obliger un processeur à ne pas, ou mal, exécuter certaines instructions d'un programme informatique. Le programme informatique attaqué peut alors se dérouler d'une façon très différente de celle qui avait été prévue au moment de sa conception. Ces attaques peuvent, entre autres et de façon connue, être effectuées: en générant un pic de tension à l'une des bornes d'alimentation du processeur; - en élevant brusquement sa température; -en changeant rapidement sa fréquence d'horloge ou sa tension d'alimentation; - en appliquant un flash de lumière, un rayon laser, ou un champ électromagnétique, sur une partie du silicium qui le compose. De telles attaques sont particulièrement actives sur certaines instructions d'un programme, notamment du fait des instructions de saut ou de branchements. On rappellera à cet effet que les instructions de branchement sont par exemple les instructions if , case , en langage C. La compilation de telles instructions de branchement en langage assembleur produit une instruction de saut conditionnel ou inconditionnel vers une adresse ou une instruction du programme à atteindre. L'instruction à atteindre est repérée par une étiquette dans un programme en assembleur. Selon le langage assembleur 8051, les instructions de saut conditionnels ou inconditionnels du langage C sont traduites en instructions de type jnz (qui peut être traduit par saut si le résultat de l'instruction précédente est non égal à 0 ), jz (que l'on peut traduire par saut si le résultat de l'instruction précédente est égal à 0 ), jmp (qui peut être traduit par saut ). Une fois compilée en langage machine, l'instruction à atteindre est identifiée par son adresse passée en argument (ou paramètre) de l'instruction de saut. Cette adresse est soit un incrément ou un décrément en nombre d'octets par rapport à l'adresse de l'instruction de saut, encore appelée adresse relative, soit une adresse absolue, c'est-à- dire, une adresse fixe au sein de la mémoire. Lors d'une attaque par faute, l'exécution d'une instruction de saut peut dans une très grande majorité des cas être perturbée entraînant un saut vers une adresse non prévue par le programme initial. En effet, lors de la perturbation d'une telle instruction, le résultat obtenu est équivalent, par exemple, à une modification du code de l'instruction. Cette valeur est modifiée de manière aléatoire. Ainsi, par exemple, si l'on considère le morceau de programme suivant en langage machine: 02 04 05, ce morceau correspond en langage assembleur à l'instruction LJMP @0x405. L'instruction LJMP, soit Long JUMP en terminologie anglaise, signifie que cette instruction concernant un saut ayant pour paramètre une adresse codée sur 2 octets. Le code de l'instruction LJMP est 0x02. L'adresse 0x405 est l'adresse de la première instruction d'une série d'instruction correspondant à un programme appelé programme d'action sécuritaire. Si, lors d'une attaque par faute, le programme d'action sécuritaire n'est pas exécuté, alors cela peut mettre en péril la sécurité du système. Un programme d'action sécuritaire peut, notamment, consister à réaliser les opérations suivantes: - une vérification du code d'accès (code PIN ou Personal Identification Number en terminologie anglo-saxonne) - une vérification par une carte à puce du code d'authentification de message (MAC ou Message Authentification Code en terminologie anglo-saxonne) d'une commande qu'elle a reçue avant de l'exécuter - l'exécution d'un programme d'encryptage, par exemple, de données cryptées qui seront envoyées à un destinataire, - l'exécution d'une contre-mesure suite à une attaque, notamment, destruction de la carte à puce, boucle infinie, etc. Suite à une attaque sur le morceau de programme précédemment décrit conduisant à une modification, notamment aléatoire, des octets à lire, le processeur peut être amené à lire et à exécuter le code suivant: DO 04 05, c'est-à-dire le code a subit une modification de telle sorte que le code 0x02 a été modifié par le code OxDO, ce dernier correspondant à l'instruction POP, c'est-à-dire à une instruction commandant d'empiler sur la pile d'exécution la valeur passée en paramètre. Ce code correspond en langage assembleur, aux instructions suivantes: POP 0x04 INC R1 En effet, le code 0x05 correspond à l'instruction INC R1, c'est-à-dire à l'instruction d'incrémentation du registre R1, cette instruction étant sans paramètre. De la sorte, l'instruction initiale codée sur 3 octets est remplacée par deux instructions, l'instruction POP codée sur 2 octets et l'instruction INC R1 codée sur un octet. Ainsi, une attaque par faute, introduit une sorte de désynchronisation de l'exécution du programme, de telle manière à ce que le programme effectuera ensuite des actions dont l'attaquant pourra tirer partie. De même, une telle attaque permet d'empêcher l'exécution d'un programme d'action sécuritaire lancée lors de son appel au moyen d'une instruction de saut ou d'un appel à un sous-programme, tout en continuant ensuite l'exécution du programme. Ainsi, l'attaquant peut empêcher l'exécution d'un programme d'action sécuritaire du type vérification du code personnel d'accès, encryptage, etc et accéder tout de même à des données sécurisées, des données en clair, etc. La présente invention vise une méthode de sécurisation de type logiciel et ne présentant pas les inconvénients précédents. A cet effet, elle propose un procédé de sécurisation d'un programme informatique contre des attaques par faute. Ce procédé est applicable notamment dans une carte à puce. Ce procédé comprend au moins un cycle comprenant les étapes suivantes: identification dans ce programme d'une instruction de saut vers un programme d'action sécuritaire, l'instruction de saut étant formée d'un code d'instruction et d'un paramètre d'adressage du programme d'action sécuritaire, détermination de l'adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction suivant l'instruction de saut, attribution, au paramètre d'adressage contenu dans l'instruction de saut, de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. Le procédé selon l'invention permet donc de sécuriser l'appel ou le saut vers des portions de programme ayant des fonctions critiques pour la sécurité du système. Pour ce faire, l'adresse de l'action sécuritaire est liée aux codes de l'instruction de saut utilisée pour aller exécuter le programme d'action sécuritaire. Dans le contexte de l'invention, la notion d'instructions de saut englobe l'ensemble des instructions de saut conditionnel, des instructions de saut inconditionnel et les instructions d'appel à un programme. Selon une caractéristique avantageuse de l'invention, le cycle comporte en outre, avant l'étape de détermination, au moins une étape de duplication de ladite instruction de saut vers le programme d'action sécuritaire formant une séquence d'instructions de saut. Ainsi, une séquence d'appel vers le programme d'action sécuritaire est créée de manière à forcer l'appel même si la perturbation génère une désynchronisation ou une modification des premiers octets de la séquence. Selon une autre caractéristique avantageuse de l'invention, la longueur de la séquence d'instructions de saut est supérieure ou égale à la longueur du code de l'instruction la plus longue du jeu d'instructions. Selon une autre caractéristique avantageuse de l'invention, le procédé comprend une étape d'insertion, avant le programme d'action sécuritaire, d'une instruction indiquant ladite adresse physique de mémorisation de ce programme d'action sécuritaire préalablement déterminée. Cette caractéristique a pour effet d'imposer une adresse de début de mémorisation du programme d'action sécuritaire. Selon une variante de réalisation, le cycle comprend en outre, avant l'étape de détermination, une étape d'insertion d'au moins une autre instruction de saut vers le programme d'action sécuritaire suivant l'instruction de saut identifiée, et après l'étape de détermination, les étapes suivantes: - détermination pour chacune desdites autres instructions de saut insérées d'une adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction précédente, - attribution au paramètre de chacune desdites instructions de saut insérées de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. Selon cette variante, tout en sécurisant l'instruction de saut en cause, on évite de répéter une séquence comprenant une structure et des codes fixes tout en réalisant, éventuellement, un remplissage de la partie résiduelle d'une mémoire, notamment d'une mémoire ROM. Selon une caractéristique avantageuse de cette variante de réalisation, le cycle comprend une étape d'insertion d'au moins une instruction, avant le programme d'action sécuritaire, indiquant lesdites adresses physiques de mémorisation du programme d'action sécuritaire préalablement déterminées pour l'instruction de saut et pour chacune des autres instructions de saut insérées. Selon une autre caractéristique avantageuse de cette variante de réalisation, le cycle comprend, en outre, une étape d'insertion d'au moins une instruction avant le programme d'action sécuritaire indiquant l'ensemble des adresses physiques de mémorisation du programme d'action sécuritaire, lesdites adresses étant déterminées par l'ensemble des combinaisons possibles des codes de l'instruction de saut et de chacune des instructions de saut insérées. Selon encore une autre caractéristique avantageuse de cette variante de réalisation, le cycle comprend en outre, après l'étape de détermination, une étape d'insertion d'au moins une instruction après l'instruction de saut identifiée, cette instruction insérée correspondant à une instruction sans effet dangereux sur le déroulement dudit programme. De la sorte, tout en sécurisant l'instruction de saut à un programme d'action sécuritaire, on augmente le remplissage aléatoire de la mémoire, notamment de la mémoire ROM. Selon encore une autre variante avantageuse de réalisation, le 10 programme d'action sécuritaire est un programme de répartition vers au moins un programme d'action sécuritaire élémentaire. De la sorte, il est possible de gérer plusieurs programmes d'actions sécuritaires pour une même application. Corrélativernent, l'invention propose un dispositif de sécurisation 15 d'un programme contre des attaques par faute, notamment dans une carte à puce. Le dispositif, selon l'invention, comprend: des moyens d'identification aptes à identifier dans ce programme une instruction de saut vers un programme d'action sécuritaire, l'instruction de saut étant formée d'un code d'instruction et d'un paramètre d'adressage du programme d'action sécuritaire, - des moyens de détermination de l'adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction suivant l'instruction de saut, des moyens d'attribution aptes à attribuer, au paramètre d'adressage contenu dans l'instruction de saut, de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. Ce dispositif présente les mêmes avantages que le procédé de sécurisation d'un programme contre des attaques par faute. L'invention propose également un programme d'ordinateur stocké sur un support d'informations, ledit programme comportant des instructions permettant la mise en oeuvre d'un procédé de sécurisation selon l'invention, lorsque ce programme est chargé et exécuté par un système informatique. D'autres aspects et avantages de la présente invention apparaissent plus clairernent à la lecture de la description de modes particuliers de réalisation qui suit, cette description étant donnée uniquement à titre d'exemple illustratif non limitatif, en regard des dessins annexés sur lesquels: - la figure 1 est un exemple de duplication d'une instruction de saut critique vers un programme d'action sécuritaire; - la figure 2 est un exemple de combinaison des instructions LJMP et LCALL vers un programme d'action sécuritaire et de mémorisation de ce programme par duplication de celui-ci; - la figure 3 est un exemple la sécurisation d'une instruction de saut relatif vers un programme d'action sécuritaire; - la figure 4 est un exemple d'utilisation d'un programme de répartition vers des programmes d'action sécuritaire élémentaires; - la figure 5 représente de manière schématique un dispositif dans lequel est mis en oeuvre l'invention. Comme on le sait, un programme mémorisé au sein d'une mémoire est composé d'instructions et d'opérandes. Au sein d'un programme, on peut identifier des portions de programme, c'est-à-dire un ensemble d'instructions et d'opérandes ayant des fonctions critiques pour la sécurité du système dont l'exécution contribue à la fiabilité du programme. C'est ainsi, notamment, que les instructions à exécuter après un appel ou un saut vers ces portions de programme critiques pour la sécurité du système ces portions peuvent être considérées comme des instructions sécuritaires qu'il faut exécuter pour garantir la sécurité. Ces programmes sont mémorisés dans une mémoire permanente, 30 par exemple, une mémoire ROM, EEPROM, FLASH ou un disque dur, ou une mémoire volatile, par exemple de type RAM. Ainsi, on peut identifier comme étant critiques, des instructions de saut, notamment des instructions de saut conditionnel, des instructions de saut non conditionnel et des instructions d'appel d'un programme d'action sécuritaire, par exemple, les instructions suivantes jnz, jz, jmp, ljmp, call, Icall, et il convient de les sécuriser. Pour ce faire, on construit selon l'invention une séquence d'instructions qui répète l'appel d'un programme d'action sécuritaire, ou le saut vers ce programme, de manière à exécuter ce programme même si une désynchronisation du flot d'exécution intervient suite à une perturbation. Selon un premier mode de réalisation, on prévoit pour les instructions d'appel, ou de saut, à un programme d'action sécuritaire, de déterminer l'adresse physique de mémorisation du programme en fonction du code de l'instruction considérée et ainsi fixer l'opérande de l'instruction. Ainsi, si l'on considère l'instruction LJMP (ou Long Jump ) en assembleur 8051, précédemment décrite, celle-ci est codée selon la donnée 0x02. Cette instruction comporte un opérande codé sur 2 octets indiquant l'adresse absolue visée par le saut. On détermine l'adresse de mémorisation du programme d'action sécuritaire en fonction du code de l'instruction de saut. Ainsi, compte tenu de la valeur du code de l'instruction LJMP , l'adresse physique de mémorisation du programme d'action sécuritaire est, par exemple, 0x0202. En effet, l'adresse physique devant être codée sur 2 octets, cette adresse se compose, notamment, de la duplication du code de l'instruction considérée, ici de la valeur 0x02. Ensuite, le paramètre de l'instruction d'appel ou de saut vers le programme d'action sécuritaire est fixé à l'adresse déterminée. Afin également d'effectivement mémoriser le programme d'action sécuritaire, à l'adresse déterminée, par exemple à l'adresse 0x0202, une directive est donnée à l'éditeur de liens de telle sorte que celui-ci mémorise effectivement ce programme à l'adresse voulue, ici l'instruction CSEG 0202h. D'autres moyens peuvent également être prévu. Le résultat de la sécurisation de l'instruction de saut est donc: LJMP 0202h (notation en hexadécimal) ce qui va être compilé en langage machine selon la séquence de données suivante: 02 02 02. II est également possible de répéter l'instruction vers le programme d'action sécuritaire afin de s'assurer que le programme d'action sécuritaire va être appelé même en cas de désynchronisation du flot d'exécution. Ainsi, selon l'exemple considéré, on prévoit une répétition de l'instruction de saut vers le programme d'action sécuritaire dans le programme en langage assembleur après avoir déterminé l'adresse physique de mémorisation du programme. On obtient donc la séquence suivante: LJMP 0202h LJMP 0202h Après compilation, on obtient la séquence de code suivante: 02 02 02 02 02 02. De cette manière, l'instruction 0x02 signifiant LJMP avec comme paramètre 0x0202 est exécutée même si les premiers octets de la séquence de code 02 02 02 02 02 02 deviennent le paramètre de l'instruction précédente après perturbation, ou si les premiers octets de la séquence sont sautés du fait d'une perturbation. Une telle modification peut être réalisée directement dans le programme en langage assembleur. Cependant, selon un autre mode de réalisation, cette modification peut être opérée par le compilateur du programme écrit dans un langage de haut niveau, par exemple, en C++, au moyen de directive de compilation insérée, par exemple, avant les appels ou sauts vers un programme d'action sécuritaire de telle sorte que le compilateur double, triple, etc., les instructions d'appel ou de saut identifiées dans le programme exécutable compilé en langage machine, dans le but de sécuriser cet appel ou ce saut. La figure 1 illustre l'exemple précédemment considéré. Pour cela, le programme principal comprend une instruction de saut (LJMP 0202h) vers le 30 programme d'action sécuritaire qui a été doublée. Le programme d'action sécuritaire comprend préalablement à la suite d'instructions formant le programme d'action sécuritaire une directive de compilation qui impose au compilateur de placer la portion de code suivante, c'est-à-dire le programme d'action sécuritaire, à l'adresse 0202h. Selon un mode de réalisation, le code assembleur de l'instruction sécuritaire peut être placé avant compilation dans un fichier séparé. Ainsi, la directive de compilation ne concerne que le code contenu dans le fichier. Le programme d'action sécuritaire doit en principe comporter en dernière ligne, ou sensiblement vers la fin de ce programme, une instruction composée de l'adresse de retour, indiquant l'adresse d'exécution de la suite du programme applicatif. Toutefois, lorsque le programme d'action sécuritaire entraîne la fin d'exécution de l'application prématurée ou un mutisme, e.g. une boucle sans fin, cette instruction n'est pas nécessaire. De manière à augmenter la probabilité d'exécuter le programme d'action sécuritaire lors d'une perturbation, il est à noter que la longueur de la séquence, construite par duplication, est avantageusement de taille supérieure ou égale à la longueur du code de l'instruction la plus longue du jeu d'instructions. Une variante de réalisation consiste à identifier, dans le programme, l'instruction LCALL (ou Long Cali ) consistant à appeler un programme; dont la valeur de cette instruction en hexadécimal est 12h ce qui amène à choisir pour l'adresse une valeur 12h 12h. L'instruction complète à doubler est alors 12h 12h 12h . De la sorte, cette instruction appelle, par exemple, un programme d'action sécuritaire situé à l'adresse 12h 12h en mémoire, par exemple en mémoire ROM. De même, toutes les instructions de saut conditionnel ou non, et les instructions d'appel d'un programme d'action sécuritaire, notamment les instructions jnz, jz, jmp, ljmp, call, Icall peuvent être sécurisées selon l'invention. Ainsi, il est plus difficile pour un attaquant d'empêcher l'exécution d'un programme d'action sécuritaire, puis de continuer le déroulement du programme. Selon un autre mode de réalisation, il est également possible de combiner l'utilisation des instructions LJMP et LCALL, c'est-à-dire d'insérer une instruction LCALL après une instruction critique LJMP plutôt que de dupliquer l'instruction LJMP. L'utilisation de cette combinaison est adaptée à l'appel d'un programme d'action sécuritaire de type terminal, c'est-à-dire terminant l'exécution du programme sans toutefois retourner au programme appelant. Cependant, l'utilisation d'une telle combinaison peut s'appliquer à tout programme d'action sécuritaire. La combinaison de ces deux instructions ayant, dans exemple ici considéré, les codes d'instruction 02h et 12h, fait qu'il existe quatre adresses possibles issues de la combinaison de ces deux codes d'instructions, soit: 0202h, 0212h, 1202h et 1212h. De la sorte, on évite de répéter une adresse fixée selon un modèle. De même, on peut ainsi remplir une zone mémoire plus conséquente, notamment, lorsque l'on souhaite remplir une zone résiduelle d'une mémoire, par exemple en mémoire Rom, tel qu'illustré en figure 2. Il est ainsi très difficile pour un fraudeur de détecter la mise en oeuvre de l'invention. Ce principe peut être généralisé et donc il peut s'appliquer à plus de deux instructions. Cependant, il est nécessaire que toutes les adresses correspondantes à toutes les combinaisons possibles des codes des instructions considérées comportent le code du programme d'action sécuritaire. De manière générale, selon l'invention, la séquence d'appel au programme d'action sécuritaire est telle que, quelque soit la modification du premier octet de la séquence de lancement du programme d'action sécuritaire, ou l'octet lu en premier après une perturbation, ce programme d'action sécuritaire est lancé. Pour cela, notamment, on prévoit la séquence suivante: 02 02 12 02 12 02 Ainsi, en dupliquant ou multipliant les instructions d'appel à un programme d'action sécuritaire tel que vu précédemment, ce dernier est exécuté malgré les perturbations. Cette technique est également utile pour remplir aléatoirement une mémoire, notamment, une mémoire ROM. Selon une autre variante, le principe précédemment décrit peut s'appliquer à deux instructions adjacentes, telles qu'une instruction de saut, par exemple, LJMP ou LCALL, et une instruction dont son exécution est sans danger pour la sécurité des données. Ainsi, on peut sécuriser l'appel à un programme d'action sécuritaire selon les exemples suivants: Exemple 1: 02 04 LJMP 0204h soit en langage machine: 02 INC A soit en langage machine: 04 04 04 LJMP 0404h soit en langage machine: 02 Ainsi la séquence en langage machine est 02 02 04 04 02 04 04. Exemple 2: soit en langage machine: 02 02 04 LJMP 0204h LJMP 040411 soit en langage machine: 02 04 04 Ainsi la séquence en langage machine est 02 02 04 02 04 04. Où 04h est le code d'instruction de l'instruction assembleur INC A signifiant incrément et les adresses 0202h, 0204h, 0402h, 0404h correspondent à l'adresse du début de mémorisation de chaque duplication du programme d'action sécuritaire. Selon une variante de réalisation, le programme d'action sécuritaire est mémorisé à l'adresse déterminée et passée en paramètre de la première instruction de saut, par exemple à l'adresse 02 04h selon l'exemple cidessus et les autres adresses, par exemple 0202h, 0402h, 0404h, mémorisent un programme d'action permettant de traiter la détection d'une perturbation. On notera que l'instruction INC A est codée sur un octet, cependant, dans le cas contraire, la seconde instruction LJMP doit être répliquée. Concernant les instructions de saut relatif, notamment l'instruction JNZ indiquant un saut relatif si le contenu du registre A est non nul, il est 10 15 également possible de sécuriser l'adresse de saut afin de s'assurer que le saut va permettre d'atteindre le programme d'action sécuritaire. Ainsi, tel qu'illustré par la figure 3, l'instruction JNZ ayant le code 70h et étant suivie de l'adresse relative 70h tel que précédemment présenté, on obtient le code 70 70. Ce code est doublé, voir triplé tel que présenté en figure 3. De sorte à sécuriser également l'adresse d'arrivée du saut, des instructions de type NOP, c'est-à-dire n'exécutant aucun traitement, sont insérées à l'adresse d'arrivée du saut. De cette manière, on augmente en cas de faute, la probabilité que le programme d'action sécuritaire soit exécuté et on s'assure du fait que si la seconde ou la troisième instruction JNZ est exécutée, alors le programme d'action sécuritaire est tout de même exécuté. Selon une variante (en figure 4) du mode de réalisation illustré en figure 1, on met en oeuvre un programme de répartition permettant, non plus de gérer un programme d'action sécuritaire pour l'application, mais plusieurs programmes d'action sécuritaire. Ce programme de répartition est positionné à l'adresse ou aux adresses. Ces adresses sont déterminées de manière décrire pour la mémorisation du programme d'action sécuritaire. Les programmes d'action sécuritaire élémentaires sont, quant à eux, mémorisés à d'autres adresses. Le programme de répartition permet de réorienter l'appel au programme d'action sécuritaire élémentaire approprié et gère donc une multitude de programmes d'action sécuritaire élémentaires. En vue d'implanter ce programme de répartition, et d'être apte à rediriger l'appel vers le programme d'action sécuritaire élémentaire approprié, une variable globale est mise à jour et mémorise une information indiquant le programme d'action sécuritaire élémentaire à exécuter lorsque un appel à la fonction de répartition est réalisé. Le programme d'action sécuritaire élémentaire, s'il ne conduit pas 30 à la fin prématuré du programme, comprend une instruction de saut vers la suite du programme normal à exécuter. Selon ce mode de réalisation, on sécurise l'appel à la fonctionrépartition vers les programmes d'action sécuritaire. La figure 5 représente un dispositif qui possède l'ensemble des moyens nécessaires à la mise en oeuvre du procédé de l'invention pour la sécurisation d'un programme informatique. Ce dispositif est, par exemple, implanté dans un micro-ordinateur et est destiné à la sécurisation d'un programme mémorisé dans une mémoire, notamment dans une mémoire contenue dans une carte à puce. Selon le mode de réalisation choisi, ce dispositif peut être, par 10 exemple, un micro-ordinateur 500, comportant une zone de stockage contenant le programme informatique à sécuriser 501. Le micro-ordinateur comporte également des moyens d'identification, dans un programme à sécuriser, d'une instruction de saut vers un programme d'action sécuritaire 502. Le micro-ordinateur comporte aussi des moyens de détermination de l'adresse physique de mémorisation du programme d'action sécuritaire 503 ou des moyens de détermination de l'adresse physique de mémorisation du programme de répartition 504 qui sont aptes à déterminer l'adresse physique à partir du code de l'instruction de saut et /ou du code de l'instruction suivant l'instruction de saut. De plus, le dispositif 500 comporte des moyens 505 pour attribuer, au paramètre d'adressage contenu dans l'instruction de saut, la valeur de l'adresse physique du programme d'action sécuritaire déterminée par les moyens de détermination 503, 504. Bien entendu, la présente invention n'est nullement limitée aux modes de réalisation décrits et représentés. REVENDICATIONS 1. Procédé de sécurisation d'un programme contre des attaques par faute, notamment dans une carte à puce, caractérisé en ce qu'il comprend au moins un cycle comprenant les étapes suivantes: identification dans ce programme d'une instruction de saut vers un programme d'action sécuritaire, l'instruction de saut étant formée d'un code d'instruction et d'un paramètre d'adressage du programme d'action sécuritaire, détermination de l'adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction suivant l'instruction de saut, attribution, au paramètre d'adressage contenu dans l'instruction de saut, de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. 2. Procédé de sécurisation d'un programme selon la revendication 1, caractérisé en ce que le cycle comporte en outre, avant l'étape de détermination, au moins une étape de duplication de ladite instruction de saut vers le programme d'action sécuritaire formant une séquence d'instructions de saut. 3. Procédé de sécurisation d'un programme selon la revendication 2, dans lequel la longueur de la séquence d'instructions de saut est supérieure ou égale à la longueur du code de l'instruction la plus longue du jeu d'instructions. 4. Procédé de sécurisation d'un programme selon l'une 30 quelconque des revendications précédentes, dans lequel le procédé comprend une étape d'insertion, avant le programme d'action sécuritaire, d'une instruction indiquant ladite adresse physique de mémorisation de ce programme d'action sécuritaire préalablement déterminée. 5. Procédé de sécurisation d'un programme selon l'une quelconque des revendications précédentes, selon lequel le cycle comprend en outre, avant l'étape de détermination, une étape d'insertion d'au moins une autre instruction de saut vers le programme d'action sécuritaire suivant l'instruction de saut identifiée, et après l'étape de détermination, les étapes suivantes: - détermination pour chacune desdites autres instructions de saut insérées d'une adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction précédente, - attribution au paramètre de chacune desdites instructions de 15 saut insérées de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. 6. Procédé de sécurisation d'un programme selon la revendication 5, selon lequel le cycle comprend une étape d'insertion d'au moins une instruction avant le programme d'action sécuritaire indiquant lesdites adresses physiques de mémorisation du programme d'action sécuritaire préalablement déterminées pour l'instruction de saut et pour chacune des autres instructions de saut insérées. 7. Procédé de sécurisation d'un programme selon la revendication 5, selon lequel le cycle comprend, en outre, une étape d'insertion d'au moins une instruction, avant le programme d'action sécuritaire, indiquant l'ensemble des adresses physiques de mémorisation du programme d'action sécuritaire, lesdites adresses étant déterminées par l'ensemble des combinaisons possibles des codes de l'instruction de saut et de chacune des instructions de saut insérées. 8. Procédé de sécurisation selon la revendication 5, dans lequel le cycle comprend en outre, après l'étape de détermination, une étape d'insertion d'au moins une instruction après l'instruction de saut identifiée, cette instruction insérée correspondant à une instruction sans effet dangereux sur le déroulement dudit programme. 9. Procédé de sécurisation selon la revendication 1, caractérisé en ce que le programme d'action sécuritaire est un programme de répartition vers au moins un programme d'action sécuritaire élémentaire. 10. Procédé de sécurisation selon l'une quelconque des revendications précédentes, caractérisé en ce que le programme d'action sécuritaire comprend des instructions de fin prématurée d'exécution du programme. 11. Procédé de sécurisation selon l'une quelconque des revendications 1 à 9, caractérisé en ce que le programme d'action sécuritaire comprend des instructions de réinitialisation de l'exécution du programme. 12. Dispositif de sécurisation d'un programme contre des attaques par faute, notamment dans une carte à puce, caractérisé en ce qu'il comprend: des moyens d'identification (502) aptes à identifier dans ce programme une instruction de saut vers un programme d'action sécuritaire, l'instruction de saut étant formée d'un code d'instruction et d'un paramètre d'adressage du programme d'action sécuritaire, des moyens de détermination de l'adresse physique de mémorisation du programme d'action sécuritaire (503), l'adresse physique étant déterminée à partir du code de l'instruction de saut et! ou du code de l'instruction suivant l'instruction de saut, des moyens d'attribution (505) aptes à attribuer, au paramètre d'adressage contenu dans l'instruction de saut, de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. 13. Dispositif de sécurisation d'un programme selon la revendication 12, caractérisé en ce qu'il comprend des moyens de duplication, aptes à dupliquer ladite instruction de saut vers le programme d'action sécuritaire pour former une séquence d'instructions de saut. 14. Dispositif de sécurisation d'un programme selon la revendication 12 ou la revendication 13, dans lequel le dispositif comprend des moyens d'insertion, avant le programme d'action sécuritaire, d'une instruction indiquant ladite adresse physique de mémorisation de ce programme d'action sécuritaire déterminée par les moyens de détermination. 15. Dispositif de sécurisation d'un programme selon l'une quelconque des revendications 12 à 14, selon lequel le dispositif comprend: - des moyens d'insertion d'instruction de saut aptes à insérer au moins une autre instruction de saut vers le programme d'action sécuritaire suivant l'instruction de saut identifiée, - des moyens de détermination adaptés à déterminer pour chacune desdites autres instructions de saut insérées d'une adresse physique de mémorisation du programme d'action sécuritaire, l'adresse physique étant déterminée à partir du code de l'instruction de saut et / ou du code de l'instruction précédente, - des moyens d'attribution au paramètre de chacune desdites instructions de saut insérées, de la valeur de l'adresse physique du programme d'action sécuritaire déterminée. 16. Dispositif de sécurisation d'un programme selon la revendication 15, selon lequel le dispositif comprend des moyens d'insertion d'au moins une instruction avant le programme d'action sécuritaire aptes à indiquer lesdites adresses physiques de mémorisation du programme d'action sécuritaire déterminées par les moyens de détermination pour l'instruction de saut et pour chacune des autres instructions de saut insérées. 17. Dispositif de sécurisation d'un programme selon la revendication 15, selon lequel le dispositif comprend des moyens d'insertion d'au moins une instruction avant le programme d'action sécuritaire aptes à indiquer l'ensemble des adresses physiques de mémorisation du programme d'action sécuritaire, lesdites adresses étant déterminées par l'ensemble des combinaisons possibles des codes de l'instruction de saut et de chacune des instructions de saut insérées. 18. Dispositif de sécurisation selon la revendication 15, dans lequel le dispositif comprend des moyens d'insertion d'au moins une instruction après l'instruction de saut identifiée, cette instruction insérée correspondant à une instruction sans effet dangereux sur le déroulement dudit programme. 19. Dispositif de sécurisation selon la revendication 12, caractérisé en ce que le programme d'action sécuritaire est un programme de répartition vers au moins un programme d'action sécuritaire élémentaire. 20. Programme d'ordinateur stocké sur un support d'informations, ledit programme comportant des instructions permettant la mise en oeuvre d'un procédé de sécurisation selon l'une quelconque des revendications 1 à 11, lorsque ce programme est chargé et exécuté par un système informatique. 15