Brevet FR3071121A1 (20190315)

REVENDICATIONS1. Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur, caractérisé en ce que ce procédé comporte : a) la fourniture (150) du code binaire, ce code binaire comprenant des lignes de code, chaque ligne de code contenant : - un cryptogramme (CI,*, CD,*) d'une seule instruction exécutable par le microprocesseur ou d'une seule donnée à traiter par le microprocesseur, et - un code d'authentification de message (MAC,) permettant de vérifier l'intégrité et 10 l'authenticité du cryptogramme, b) lors de l'exécution (152) du code binaire par le microprocesseur, à chaque fois que le microprocesseur charge une ligne de code, le procédé comporte les opérations suivantes :\n<CLM>\1\tun module matériel de sécurisation du microprocesseur vérifie (176) 15 l'intégrité et l'authenticité du cryptogramme contenu dans la ligne de code chargée à l'aide du code d'authentification de message contenu dans cette même ligne et déclenche (172) le signalement d'une faute d'exécution si l'intégrité ou l'authenticité du cryptogramme n'est pas confirmée, puis\n<CLM>\1\tle module matériel de sécurisation déchiffre (178) le cryptogramme pour 20 obtenir une instruction déchiffrée ou une donnée déchiffrée si l'intégrité et l'authenticité du cryptogramme sont confirmées, puis : - dans le cas d'une instruction déchiffrée, l'instruction déchiffrée est enregistrée (180) dans une file d'instructions à exécuter successivement les unes après les autres par une unité arithmétique et logique du microprocesseur, et 25 - dans le cas d'une donnée déchiffrée, la donnée déchiffrée est enregistrée (280) dans un registre interne du microprocesseur en attendant d'être traitée par l'unité arithmétique et logique.\n<CLM>\1\tProcédé selon la revendication 1, dans lequel : 30 - lors de l'étape a), le cryptogramme contenu dans la ligne de code est un cryptogramme d'une concaténation : - de ladite instruction ou donnée, et - d'un premier code détecteur d'erreur (ECCI,, ECCD,) permettant de détecter une erreur dans l'instruction ou dans la donnée avec laquelle il est concaténé, 35 - lors de l'opération 2), le déchiffrement du cryptogramme par le module matériel de sécurisation permet d'obtenir, en plus de l'instruction déchiffrée ou de la donnée déchiffrée, le premier code détecteur d'erreur déchiffré, puis : - dans le cas d'une instruction déchiffrée, le premier code d'erreur déchiffré est enregistré (180) dans la file d'instructions avec l'instruction déchiffrée, et 40 - dans le cas d'une donnée déchiffrée, la donnée déchiffrée et le premier code 44 détecteur d'erreur déchiffré sont enregistrés (280) dans un même registre du microprocesseur, et - après l'opération 2), le procédé comporte l'opération\n<CLM>\1\tsuivante : - lorsque la prochaine instruction à exécuter contenue dans la file d'instructions 5 est l'instruction déchiffrée lors de l'opération 2), le module matériel de sécurisation vérifie (184), à l'aide du premier code détecteur d'erreur enregistré avec cette instruction déchiffrée, s'il existe une erreur dans cette instruction déchiffrée, et, dans le cas où une telle erreur est détectée dans cette instruction déchiffrée, le module matériel de sécurisation déclenche (172) le signalement d'un faute d'exécution, et, dans le cas où aucune erreur n'a été détectée dans cette instruction déchiffrée, le microprocesseur décode l'instruction déchiffrée et la transmet à l'unité arithmétique et logique qui l'exécute (190), ou - lorsque la prochaine donnée à traiter par l'unité arithmétique et logique est la donnée déchiffrée lors de l'opération 2), le module matériel de sécurisation vérifie (284), à l'aide du premier code détecteur d'erreur enregistré associé à cette donnée déchiffrée, s'il existe une erreur dans cette donnée déchiffrée, et, dans le cas où une telle erreur est détectée, le module matériel de sécurisation déclenche (172) le signalement d'une faute d'exécution, et, dans le cas où aucune erreur n'est détectée, l'unité arithmétique et logique traite (190) cette donnée déchiffrée.\n<CLM>\1\tProcédé selon la revendication 2, dans lequel : - lors de l'étape a), le premier code détecteur d'erreur (ECCIJ, ECCD) est un code 25 correcteur d'erreur permettant, en plus, de corriger l'erreur détectée dans l'instruction ou dans la donnée avec laquelle il est concaténé, - lors de l'opération\n<CLM>\1\t: - lorsque le module matériel de sécurisation détecte une erreur dans l'instruction déchiffrée, en plus de déclencher le signalement d'une faute 30 d'exécution, le module matériel de sécurisation corrige (186) cette erreur à l'aide du premier code détecteur d'erreur déchiffré enregistré ensemble avec cette instruction déchiffrée, puis le microprocesseur décode l'instruction ainsi corrigée et la transmet à l'unité arithmétique et logique qui l'exécute (190), ou - lorsque le module matériel de sécurisation détecte une erreur dans la donnée 35 déchiffrée, en plus de déclencher le signalement d'une faute d'exécution, le module matériel de sécurisation corrige (286) cette erreur à l'aide du premier code détecteur d'erreur déchiffré associé à cette donnée déchiffrée, puis l'unité arithmétique et logique traite (190) la donnée corrigée. 40\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : 45 - lors de l'étape a), chaque ligne de code comprend, en plus du cryptogramme et du code d'authentification de message, un second code détecteur d'erreur (ECCE;) permettant de détecter une erreur dans le cryptogramme ou le code d'authentification de message contenu dans la même ligne de code, 5 - lors de l'étape b) avant l'exécution de l'opération 1), le procédé comporte une opération (170,\n<CLM>\1\tlors de laquelle le module matériel de sécurisation vérifie, à l'aide du second code détecteur d'erreur contenu dans la ligne de code chargée, s'il existe une erreur dans le cryptogramme ou le code d'authentification de message contenu dans la ligne de code chargée, et dans le cas où une telle erreur est 10 détectée, le module matériel de sécurisation déclenche (172) le signalement d'une faute d'exécution et, dans le cas où aucune erreur n'est détectée, le procédé se poursuit par l'opération 1).\n<CLM>\1\tProcédé selon la revendication 4, dans lequel : 15 - lors de l'étape a), le second code détecteur d'erreur (ECCE;) est un code correcteur d'erreur permettant, en plus, de corriger l'erreur détectée dans le cryptogramme ou le code d'authentification de message contenu dans la même ligne de code, - si le module matériel de sécurisation détecte une erreur dans le cryptogramme ou le code d'authentification de message, en plus de déclencher le signalement d'une faute 20 d'exécution, le module matériel de sécurisation corrige (174,\n<CLM>\1\tcette erreur à l'aide du second code détecteur d'erreur, puis le procédé se poursuit par l'opération\n<CLM>\1\tlors de laquelle ce sont le cryptogramme corrigé et le code d'authentification de message corrigé qui sont utilisés.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : - lors de l'opération 1), une première clé de chiffrement (k') est utilisée pour vérifier l'authenticité du cryptogramme contenu dans la ligne de code chargée, et - lors de l'opération 2), une seconde clé de déchiffrement (ka) est utilisée pour déchiffrer le cryptogramme, cette seconde clé de déchiffrement étant différente de la 30 première clé de déchiffrement.\n<CLM>\1\tProcédé selon la revendication 2, dans lequel : - lors de l'étape a), le code binaire fourni comporte un code machine contenant une succession de blocs de base dans lequel : 35 - chaque bloc de base comporte une succession de lignes de code contenant chacune le cryptogramme d'une instruction, les instructions chiffrées dans ces lignes de code successives étant destinées à être exécutées par le microprocesseur systématiquement dans l'ordre de ces lignes de code, et - chaque bloc de base débute à une adresse de branchement et se termine 40 par une ligne de code contenant le cryptogramme d'une instruction de 46 branchement vers une adresse de branchement d'un autre bloc de base, cet autre bloc de base étant appelé « le bloc de base suivant » et le bloc de base qui se termine par la ligne de code contenant le cryptogramme de cette instruction de branchement vers ce bloc de base suivant étant appelé « bloc de 5 base précédent », - le cryptogramme contenu dans une ligne de code spécifique d'un bloc de base suivant ayant été obtenu à l'aide d'un vecteur d'initialisation différent des vecteurs d'initialisation utilisés pour obtenir les cryptogrammes de lignes de code des autres blocs de base, 10 - chaque bloc de base précédent comportant une ligne de code contenant le cryptogramme d'une instruction de chargement qui, lorsqu'elle est exécutée par le microprocesseur, provoque le chargement dans le microprocesseur du vecteur d'initialisation à utiliser pour déchiffrer le cryptogramme de la ligne de code spécifique du bloc de base suivant, 15 - lors de l'opération 2), le module matériel de sécurisation déchiffre (178) le cryptogramme de la ligne de code spécifique d'un bloc de base suivant à l'aide du vecteur d'initialisation chargé dans le microprocesseur lors de l'exécution du bloc de base précédent. 20\n<CLM>\1\tProcédé selon la revendication 7, dans lequel : - lors de l'étape a), le code binaire comporte un code machine contenant : - un bloc de base appelé « bloc appelant » qui se termine par une ligne de code contenant le cryptogramme d'une instruction de branchement qui, lorsqu'elle est exécutée par le microprocesseur, réalise un branchement vers 25 une adresse de branchement d'une sous-fonction sécurisée, - un autre bloc de base appelé « bloc de retour », et - la sous-fonction sécurisée formée par un ou plusieurs blocs de base, cette sous-fonction sécurisée étant appelable à partir des différents blocs de base de la fonction sécurisée et débutant, par un premier bloc de base et se terminant par un dernier bloc de base, le premier bloc de base débute à l'adresse de branchement de la sous-fonction sécurisée et le dernier bloc de base se termine par une ligne de code contenant le cryptogramme d'une instruction de branchement particulière appelée « instruction de retour » qui, lorsqu'elle est exécutée par le microprocesseur, réalise un branchement vers l'adresse de branchement du bloc de retour, - lors d'une première exécution de l'opération 2), le module matériel de sécurisation enregistre dans un premier registre du microprocesseur l'adresse de branchement du bloc de retour et le vecteur d'initialisation nécessaire pour déchiffrer ce bloc de retour, puis - lors d'une deuxième exécution de l'opération\n<CLM>\1\tlors de laquelle l'instruction de 47 retour de la sous-fonction sécurisée est déchiffrée, l'adresse de branchement utilisée pour l'exécution de l'instruction de retour est lue dans le premier registre, puis - lors d'une troisième exécution de l'opération\n<CLM>\1\tlors de laquelle la ligne de code spécifique du bloc de retour est déchiffrée, le module matériel de sécurisation utilise 5 le vecteur d'initialisation enregistré dans le premier registre pour déchiffrer le cryptogramme de la ligne de code spécifique du bloc de retour.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : - avant l'étape b), le procédé comporte l'enregistrement : 10 - d'un premier certificat cryptographique (Cos) permettant d'authentifier une clé publique d'un système d'exploitation exécuté par le microprocesseur, - d'un deuxième certificat cryptographique (Copi) permettant d'authentifier une clé publique du microprocesseur, - d'un troisième certificat cryptographique (Caul) permettant d'authentifier une 15 clé publique de l'auteur de la fonction sécurisée, - un cryptogramme (ka*) d'une clé d'application déchiffrable à l'aide de la clé publique du microprocesseur, - une signature (Ska*) de la clé d'application vérifiable à l'aide de la clé publique de l'auteur, 20 - au début de l'étape b) le module matériel de sécurisation vérifie (154) dans l'ordre : - l'authenticité (156,\n<CLM>\1\tdu premier et du troisième certificat cryptographique à l'aide de la clé publique du système d'exploitation, - seulement si l'authenticité de la clé publique de l'auteur a été confirmée, l'authenticité (160) de la signature de la clé d'application à l'aide de la clé 25 publique de l'auteur, - seulement si l'authenticité de la signature de la clé d'application a été confirmée, le déchiffrement (162) du cryptogramme de la clé d'application avec la clé publique du microprocesseur, puis - lors de l'opération 2), le déchiffrement du cryptogramme est réalisé à l'aide de cette 30 clé d'application déchiffrée.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel, lors de l'opération\n<CLM>\1\t(178, 278), le module matériel de sécurisation : - construit une étiquette à partir du cryptogramme contenu dans la ligne de code 35 chargée, puis - chiffre l'étiquette construite à l'aide d'une clé secrète enregistrée dans une mémoire non volatile du module matériel de sécurisation, puis - compare l'étiquette chiffrée au code d'authentification de message contenu dans la ligne de code chargée, puis 40 - confirme l'intégrité et l'authenticité du cryptogramme seulement si l'étiquette chiffrée 48 est identique à ce code d'authentification de message.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : - lors de l'étape a) (150), le code binaire fourni contient : 5 - une instruction arithmétique et logique comportant un opcode et un ou plusieurs opérandes qui, lorsqu'elle est exécutée par une unité arithmétique et logique du microprocesseur, provoque la réalisation de l'opération D1*D2*...*Dn et l'enregistrement du résultat de cette opération dans un registre Rres, où : - D1 à Dn sont des données enregistrées, respectivement, dans des 10 registres R1 à Rn du microprocesseur, - les registres R1 à Rn sont les registres désignés par les opérandes de l'instruction arithmétique et logique, - le symbole « * » est l'opération arithmétique et logique désignée par l'opcode de l'instruction arithmétique et logique, et 15 - l'indice n est un entier supérieur ou égal à un, - pour chaque registre R1 à Rn, une instruction de chargement qui, lorsqu'elle est exécutée par le microprocesseur, provoque le chargement d'une donnée D, dans le registre Ri, où l'indice i est un identifiant du registre R, parmi les registres R1 à Rn, 20 - lors de l'exécution de l'étape b), le procédé comporte les opérations suivantes : - à chaque fois qu'une instruction de chargement d'une donnée D, dans le registre R, est exécutée par le microprocesseur, un module matériel de sécurisation du microprocesseur calcule (202) un code C,,* à l'aide d'une relation C,,* = F*(D,), et la donnée chargée D, est enregistrée dans le registre R, 25 et le code C,,* calculé est enregistré dans le même registre R, ou dans un registre associé au registre R,, la fonction F* étant une fonction préprogrammée du module matériel de sécurisation, - dans le cas où n est supérieur ou égal à deux, cette fonction F* étant un homomorphisme d'un ensemble A de nombres munis de l'opération 30 «* » vers un ensemble B de nombres munis de l'opération « # », qui vérifie la relation : F*(Di * D2 * * Dn) = F*(Di) # F*(D2) # # F*(Dn) # C2,* # # Cn,*, - dans le cas où n est égal à un, cette fonction F* est telle que F*(Di) = T*(F*(Di)), où la fonction T* est une fonction préprogrammée dans le 35 module matériel de sécurisation, - l'exécution (190) par l'unité arithmétique et logique de l'instruction arithmétique et logique contenue dans le code binaire et l'enregistrement du résultat Dres-p de cette exécution dans le registre Rres, puis - le module matériel de sécurisation : 40 - calcule (210,\n<CLM>\1\tun code Cres_p à l'aide de la relation Cres_p = F*(Dres_p) 49 si n est supérieur à un et, sinon, à l'aide de la relation Cres-p =T*(Dr'_p) si n est égal à un, et - calcule un code Cr'_t (218,\n<CLM>\1\tà l'aide de la relation Cres_t = # C2,*# # puis 5 - compare (220) les codes Cres_p et Cres-t et déclenche (172) le signalement d'une faute d'exécution si le code Cres_p ne correspond pas au code Cres-t et, dans le cas contraire, inhibe ce signalement.\n<CLM>\1\tProcédé selon l'une quelconque des revendications précédentes, dans lequel : 10 - le procédé comporte l'enregistrement (150) dans une mémoire principale à une adresse ©- d'une ligne de code, cette ligne de code contenant : - une donnée Di à traiter par le microprocesseur ou un cryptogramme de cette donnée Di, et - un premier code détecteur d'erreur (ECCD,, MAC,, ECCE;) permettant de 15 détecter une erreur dans la donnée Di ou dans son cryptogramme si cette donnée Di ou son cryptogramme est modifié après son enregistrement dans la mémoire principale, au moins l'un de la donnée Di, de son cryptogramme et du premier code détecteur d'erreur étant chiffré en fonction d'un vecteur d'initialisation iv,, ce 20 vecteur d'initialisation iv, variant en fonction de l'adresse © à laquelle la ligne de code est enregistrée selon une relation iv, = où la fonction F,, est une fonction préprogrammée d'un module matériel de sécurisation du microprocesseur qui associe un vecteur d'initialisation iv, différent à chaque adresse © différente de la mémoire principale, 25 - lors de l'exécution (152) du code binaire par le microprocesseur, le procédé comporte les opérations suivantes : - l'exécution d'une instruction de chargement par le microprocesseur qui provoque le chargement dans les registres du microprocesseur de la ligne de code enregistrée à l'adresse ©, puis 30 - le module matériel de sécurisation calcule (278) le vecteur d'initialisation iv, à l'aide de la relation iv, = F,,(©), où ©- est l'adresse à partir de laquelle la ligne de code a été chargée, puis - le module matériel de sécurisation déchiffre (278) la ligne de code chargée à l'aide du vecteur d'initialisation iv, calculé pour obtenir : 35 - la donnée Di ou son cryptogramme, et - le premier code détecteur d'erreur, puis - le module matériel de sécurisation vérifie (284), à l'aide du premier code détecteur d'erreur obtenu, s'il existe une erreur dans la donnée Di ou son cryptogramme et, si une telle erreur existe, déclenche (172) le signalement 40 d'une faute d'exécution et, si une telle erreur n'existe pas, inhibe ce 50 signalement d'une faute d'exécution.\n<CLM>\1\tCode binaire d'une fonction sécurisée exécutable par un microprocesseur pour la mise en oeuvre d'un procédé d'exécution conforme à l'une quelconque des 5 revendications précédentes, dans lequel le code binaire comprend des lignes de code, chaque ligne de code contenant : - un cryptogramme (CI,*, CD,*) d'une seule instruction exécutable par le microprocesseur ou d'une seule donnée à traiter par le microprocesseur, et - un code d'authentification de message (MAC,) permettant de vérifier l'intégrité et 10 l'authenticité du cryptogramme.\n<CLM>\1\tSupport d'enregistrement d'informations lisibles par un microprocesseur, caractérisé en ce qu'il comporte un code binaire conforme à la revendication\n<CLM>\1\t15\n<CLM>\1\tMicroprocesseur (2) pour la mise en oeuvre d'un procédé conforme à l'une quelconque des revendications 1 à 12, ce microprocesseur comportant une unité arithmétique et logique (10) et un module matériel de sécurisation (28), caractérisé en ce que le module matériel de sécurisation (28) est configuré pour exécuter les opérations\n<CLM>\1\tet\n<CLM>\1\tdu procédé conforme à la revendication\n<CLM>\1\t20\n<CLM>\1\tCompilateur (300) apte à transformer automatiquement un code source d'une fonction sécurisée en un code binaire de cette fonction sécurisée, caractérisé en ce que le compilateur est apte à transformer automatiquement le code source en un code binaire conforme à revendication\n<CLM>\1\t25