Brevet FR3071633A1 (20190329)

REVENDICATIONS1. Procédé d'exécution d'un code machine d'une fonction sécurisée par un microprocesseur, ce procédé comportant : a) la fourniture (150) du code machine, ce code machine comprenant une succession de blocs de base dans lesquels : - chaque bloc de base comporte une succession d'instructions systématiquement exécutées les unes après les autres lors de l'exécution du code machine par le microprocesseur, parmi ces instructions, au moins certaines d'entre elles étant des 10 instructions à protéger, - chaque bloc de base débute à une adresse de branchement et se termine par une instruction de branchement vers une adresse de branchement d'un autre bloc de base, le bloc de base qui débute à l'adresse de branchement étant appelé « bloc de base suivant » et le bloc de base qui se termine par une instruction de branchement 15 vers cette adresse de branchement étant appelé « bloc de base précédent », b) lors de l'exécution (152) du code machine par le microprocesseur, le procédé comporte les opérations suivantes :\n<CLM>\1\tle microprocesseur charge (154) puis décode (156) les instructions des blocs de base précédent et suivant du code machine, puis chaque instruction 20 décodée est exécutée par une unité arithmétique et logique du microprocesseur,\n<CLM>\1\tà chaque fois qu'une instruction à protéger du bloc de base précédent est chargée, un module matériel de sécurisation du microprocesseur construit (157), à l'aide d'une fonction Fcsia préprogrammée, une nouvelle valeur d'une 25 signature à partir de la valeur de cette instruction à protéger et de la précédente valeur de la signature, cette signature étant ainsi fonction des valeurs des différentes instructions à protéger du bloc de base précédent,\n<CLM>\1\tle microprocesseur charge (162) un vecteur d'initialisation contenu dans le code machine et le module matériel de sécurisation calcule (164), à partir de 30 ce vecteur d'initialisation chargé et à l'aide d'une fonction FvsQ préprogrammée, une valeur attendue pour la signature du bloc de base précédent,\n<CLM>\1\ten réponse au chargement d'une instruction prédéterminée, le module matériel de sécurisation compare (166) la valeur construite de la signature à la 35 valeur attendue de cette signature calculée à partir du vecteur d'initialisation chargé, et\n<CLM>\1\tseulement si ces valeurs ne correspondent pas, le module matériel de sécurisation déclenche (170) le signalement d'une faute lors de l'exécution de ce code machine et, dans le cas contraire, inhibe un tel signalement, 31 caractérisé en ce que le vecteur d'initialisation est seulement contenu dans le bloc de base suivant.\n<CLM>\1\tProcédé selon la revendication 1, dans lequel : 5 - le bloc de base suivant est aussi un bloc de base précédent pour un autre bloc de base du code machine de sorte que les opérations\n<CLM>\1\tà\n<CLM>\1\tsont aussi réalisées pour le bloc de base suivant, et - lors de l'exécution du bloc de base suivant, le module matériel de sécurisation initialise (160) la valeur construite de la signature du bloc de base suivant à partir du même vecteur d'initialisation que celui utilisé pour calculer la valeur attendue de la signature du bloc de base précédent, de sorte que valeur construite de la signature du bloc de base suivant dépend aussi de ce vecteur d'initialisation.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : - lors de l'opération 3), le module matériel de sécurisation calcule (164) la valeur attendue de la signature du bloc de base précédent, en plus, à partir de la valeur chargée d'un paramètre y de sorte que la valeur attendue de la signature du bloc de base précédent varie en fonction de cette valeur chargée du paramètre y ou, lors de l'opération 2), le module matériel de sécurisation construit la nouvelle valeur de la signature du bloc de base précédent, en plus, à partir de la valeur chargée d'un paramètre y de sorte que la valeur construite de la signature du bloc de base précédent varie en fonction de cette valeur chargée du paramètre v, et - le bloc de base précédent comporte une instruction prédéterminée qui, lorsqu'elle est exécutée par le microprocesseur, provoque le chargement de la valeur du paramètre v, cette valeur du paramètre y étant contenue dans ce bloc de base précédent et tel que, en absence de modification des instructions à protéger du bloc de base précédent, la valeur attendue calculée lors de l'opération\n<CLM>\1\tcorrespond à la valeur construite de la signature de ce bloc de base précédent.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : - l'opération a) comporte la fourniture d'un bloc de base précédent se terminant par une instruction de branchement conditionnelle qui, lorsqu'une condition est vérifiée provoque, lorsqu'elle est exécutée par le microprocesseur, un branchement vers un premier bloc de base suivant et, en alternance, lorsque la condition n'est pas vérifiée, provoque, lorsqu'elle est exécutée par le microprocesseur, un branchement vers un second bloc de base suivant différent du premier bloc de base suivant, et - lors de l'opération 3), le module matériel de sécurisation calcule la valeur attendue de la signature du bloc de base précédent, en plus, à partir d'une valeur contenue dans un registre, cette valeur n'étant pas la même selon que la condition est vérifiée 40 ou pas, de sorte que la valeur attendue de la signature du bloc de base précédent 32 varie en fonction de cette valeur contenue dans ce registre ou, lors de l'opération 2), le module matériel de sécurisation construit la nouvelle valeur de la signature du bloc de base précédent, en plus, à partir de la valeur contenue dans ce registre de sorte que la valeur construite de la signature du bloc de base précédent varie en fonction 5 de cette valeur contenue dans ce registre.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel lors de l'opération 2), la fonction préprogrammée FcsO mise en oeuvre est une fonction de chiffrement à l'aide d'une clef secrète stockée dans une mémoire sécurisée du 10 microprocesseur, cette mémoire sécurisée étant uniquement accessible par des composants internes du microprocesseur.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel lors de l'opération 2), la fonction préprogrammée FcsO est un homomorphisme algébrique. 15\n<CLM>\1\tProcédé selon la revendication 6, dans lequel : - les fonctions préprogrammées FIS() et Fvs() mettent en oeuvre, respectivement, une fonction de chiffrement asymétrique à l'aide d'une clé publique et une fonction de déchiffrement à l'aide d'une clé privée correspond à la clé publique, ou 20 - les fonctions préprogrammées Fcs() et Fvs0 mettent en oeuvre, respectivement, une fonction de déchiffrement asymétrique à l'aide d'une clé privée et une fonction de chiffrement à l'aide d'une clé publique correspond à la clé privée.\n<CLM>\1\tProcédé selon l'une quelconque des revendications 1 à 7, dans lequel la fonction 25 FvsO est la fonction identité.\n<CLM>\1\tCode binaire (30) comportant un code machine (32) d'une fonction sécurisée pour la mise en oeuvre d'un procédé d'exécution conforme à l'une quelconque des revendications précédentes, dans lequel le code machine (32) comprend : 30 - une succession de blocs de base dans lesquels : - chaque bloc de base comporte une succession d'instructions systématiquement exécutées les unes après les autres lors de l'exécution du code machine par le microprocesseur, parmi ces instructions, au moins certaines d'entre elles étant des instructions à protéger, 35 - chaque bloc de base débute à une adresse de branchement et se termine par une instruction de branchement vers une adresse de branchement d'un autre bloc de base, le bloc de base qui débute à l'adresse de branchement étant appelé « bloc de base suivant » et le bloc de base qui se termine par une instruction de branchement vers cette adresse de branchement étant appelé « bloc de base précédent », 33 - pour chaque bloc de base, le code machine contient : - un vecteur d'initialisation à partir duquel le module matériel de sécurisation est apte à calculer, à l'aide d'une fonction Fvs() préprogrammée, une valeur attendue pour la signature du bloc de base précédent, 5 - une instruction prédéterminée apte à déclencher la comparaison, par le module matériel de sécurisation, d'une valeur construite de la signature du bloc de base précédent à la valeur attendue de cette signature calculée à partir du vecteur d'initialisation chargé, caractérisé en ce que le vecteur d'initialisation est seulement contenu dans le bloc de 10 base suivant.\n<CLM>\1\tSupport (4) d'enregistrement d'informations lisible par un microprocesseur, caractérisé en ce qu'il comporte un code binaire (30) conforme à la revendication\n<CLM>\1\t15\n<CLM>\1\tAppareil électronique (1) comportant : - une mémoire (4) dans laquelle est enregistré un code machine d'une fonction sécurisée, ce code machine comprenant une succession de blocs de base dans lesquels : - chaque bloc de base comporte une succession d'instructions 20 systématiquement exécutées les unes après les autres lors de l'exécution du code machine par un microprocesseur, parmi ces instructions, au moins certaines d'entre elles étant des instructions à protéger, - chaque bloc de base débute à une adresse de branchement et se termine par une instruction de branchement vers une adresse de branchement d'un 25 autre bloc de base, le bloc de base qui débute à l'adresse de branchement étant appelé « bloc de base suivant » et le bloc de base qui se termine par une instruction de branchement vers cette adresse de branchement étant appelé « bloc de base précédent », - le microprocesseur (2) comportant une unité (10) arithmétique et logique et un 30 module matériel (28) de sécurisation, ce microprocesseur étant apte à exécuter le code machine enregistré dans la mémoire (4), ce microprocesseur étant apte, lors de l'exécution du code machine, à charger puis à décoder les instructions des blocs de base précédent et suivant du code machine, et l'unité arithmétique et logique est apte à exécuter chaque instruction décodée, 35 - le module matériel (28) de sécurisation est apte, lors de l'exécution du code machine, à réaliser les opérations suivantes : - à chaque fois qu'une instruction à protéger du bloc de base précédent est chargée, le module matériel de sécurisation du microprocesseur construit, à l'aide d'une fonction Fcs0 préprogrammée, une nouvelle valeur d'une signature 40 à partir de la valeur de cette instruction à protéger et de la précédente valeur 34 de la signature, cette signature étant ainsi fonction des valeurs des différentes instructions à protéger du bloc de base précédent, - à chaque fois que le microprocesseur charge un vecteur d'initialisation contenu dans le code machine, le module matériel de sécurisation calcule, à 5 partir de ce vecteur d'initialisation chargé et à l'aide d'une fonction Fvs() préprogrammée, une valeur attendue pour la signature du bloc de base précédent, - en réponse au chargement d'une instruction prédéterminée, le module matériel de sécurisation compare la valeur construite de la signature à la 10 valeur attendue de cette signature calculée à partir du vecteur d'initialisation chargé, et - seulement si ces valeurs ne correspondent pas, le module matériel de sécurisation déclenche le signalement d'une faute lors de l'exécution de ce code machine et, dans le cas contraire, inhibe un tel signalement, 15 caractérisé en ce que le vecteur d'initialisation est seulement contenu dans le bloc de base suivant.\n<CLM>\1\tCompilateur (190) apte à transformer automatiquement un code source (192) d'un programme contenant une fonction sécurisée en un code binaire (30) 20 comportant un code machine (32) d'une fonction sécurisée, caractérisé en ce que le compilateur est apte à transformer automatiquement le code source (192) en un code binaire (30) conforme à la revendication 9.