Brevet FR3122753A1 — publié le 20221111

PROCÉDÉ D'EXÉCUTION D'UN CODE BINAIRE PAR UN MICROPROCESSEUR Ce procédé comporte : pour chaque donnée D i , le calcul (88) d'un code C i à l’aide d’une relation C i = Q α (D i ) = P o F α (D i ), où : P est une fonction prédéterminée, F α est une fonction définie par la relation suivante : F α (D i )=T αt o…o T αr o ... o T α 2 o T α 0 (D i ), T αr est une transposition conditionnelle paramétrée par un paramètre secret α r qui permute deux blocs B1 r et B2 r de bits de la donnée D i en fonction de la valeur du paramètre α r , le calcul (98) d'un code C res-t à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n , où C 1 à C n sont les codes associées à des données D 1 à D n combinées entre elles par une opération booléenne D 1 &D 2 &…&D n , où le symbole « & » désigne l'opération booléenne. Fig. 6 PROCÉDÉ D'EXÉCUTION D'UN CODE BINAIRE PAR UN MICROPROCESSEUR L’invention concerne un procédé d'exécution d'un code binaire par un microprocesseur. L'invention concerne également un module matériel de sécurisation pour la mise en œuvre de ce procédé d'exécution. Pour obtenir des informations sur un code binaire ou provoquer un fonctionnement inattendu du code binaire, de nombreuses attaques sont possibles. Par exemple, des attaques connues sous le terme d'« injection de fautes » ou « fault attack » en anglais peuvent être mises en œuvre. Ces attaques consistent à perturber le fonctionnement du microprocesseur ou de la mémoire contenant le code binaire, par divers moyens physiques comme des modifications des tensions d'alimentation, des modifications du signal d'horloge, l'exposition du microprocesseur à des ondes électromagnétiques et autres. À l'aide de telles attaques, un attaquant peut altérer l'intégrité des instructions machines ou des données pour, par exemple, retrouver une clé secrète d'un système cryptographique, contourner des mécanismes de sécurité tels que la vérification d'un code PIN lors d'une authentification ou simplement empêcher l'exécution d'une fonction essentielle pour la sécurité d'un système critique. Ces attaques peuvent provoquer notamment trois types de fautes, dites fautes d'exécution, lors de l'exécution du code binaire : 1) une altération des instructions du code machine exécuté, 2) une altération des données stockées dans la mémoire principale ou dans des registres du microprocesseur, et 3) une altération du flot de contrôle du code machine. Le flot de contrôle correspond au chemin d'exécution suivi lors de l'exécution du code machine. Le flot de contrôle est classiquement représenté sous la forme d'un graphe connu sous le terme de graphe de flot de contrôle ou « control flow graph » en anglais. Pour détecter de telles fautes d'exécution, il a déjà été proposé d'associer un code correcteur d'erreur à chaque donnée traitée par le microprocesseur. Ensuite, le code correcteur d'erreur associé au résultat de l'instruction qui traite ces données est calculé à partir des codes correcteurs d'erreur des données traitées. Ainsi, si une faute se produit lors de l'exécution de cette instruction, le résultat obtenu ne correspond pas au code correcteur d'erreur calculé. Cela permet de détecter cette faute. Une telle solution est par exemple divulguée dans la demande FR3071082. L'algorithme pour construire le code correcteur d'erreur associé à une donnée est connu. Il est donc possible pour un attaquant d'injecter des fautes de manière à modifier le code correcteur d'erreur calculé pour le résultat de manière à ce qu'il corresponde au résultat fauté. Dans ce cas, la faute d'exécution n'est pas détectée. Pour pallier à l'inconvénient ci-dessus, il a été proposé de remplacer le code correcteur d'erreur par un code d'intégrité. Ce code d'intégrité est construit à partir de la donnée et, en plus, à l'aide d'une clé secrète connue seulement du microprocesseur. Ainsi, il est difficile pour un attaquant de modifier un code d'intégrité pour qu'il corresponde à un résultat fauté puisqu'il ne connaît pas la clé secrète. Il faut cependant qu'il soit toujours possible de construire le code d'intégrité du résultat en utilisant les codes d'intégrité associés aux données traitées et sans utiliser le résultat de l'instruction exécutée par l'unité arithmétique et logique. Par exemple, une telle solution est décrite dans l'article suivant : L. De Meyer, V. Arribas, S. Nikova, V. Nikov et V. Rijmen : "M&M : Masks and Macs against physical attacks", IACR Transactions on Cryptographie Hardware and Embedded Systems, page 25-50, 2019. Cet article est par la suite désigné par le terme "DEMEYER2019". Le procédé décrit dans cet article pour calculer le code d'intégrité du résultat à partir des codes d'intégrités des données traitées est complexe. En effet, pour cela il fait intervenir des multiplications dans un champ de Galois. Il est donc difficile à implémenter dans un microprocesseur y compris dans le cas des opérations booléennes. L'objectif est de proposer un procédé d'exécution d'un code binaire qui présente le même niveau de sécurité, dans le cas des opérations booléennes, que celui décrit dans l'article de DEMEYER2019 mais qui soit plus simple à implémenter. L'invention a donc pour objet un tel procédé d'exécution d’un code binaire par un microprocesseur comportant une unité arithmétique et logique, ce procédé comportant : a) la fourniture du code binaire, ce code binaire contenant : une instruction logique comportant un opcode et plusieurs opérandes qui, lorsqu’elle est exécutée par l'unité arithmétique et logique du microprocesseur, provoque la réalisation d'une opération booléenne D 1 &D 2 &…&D n et l’enregistrement du résultat de cette opération booléenne dans un registre R res -p , où : D 1 à D n sont des données enregistrées, respectivement, dans des registres R 1 à R n du microprocesseur, les registres R 1 à R n sont les registres désignés par les opérandes de l’instruction logique, le symbole « & » est l'opération logique désignée par l’opcode de l’instruction logique, cette opération logique étant choisie dans le groupe des opérations booléennes, l’indice n est un entier supérieur ou égal à un, pour chaque registre R 1 à R n , une instruction de chargement qui, lorsqu’elle est exécutée par le microprocesseur, provoque le chargement d’une donnée D i dans le registre R i , où l’indice i est un identifiant du registre R i parmi les registres R 1 à R n , b) lors de l’exécution du code binaire par le microprocesseur, le procédé comporte les opérations suivantes : 1) pour chaque donnée D i , le calcul d'un code C i à l’aide d’une relation C i = Q α (D i ) et l'association du code C i calculé à la donnée D i , la fonction Q α étant une fonction préprogrammée paramétrée par une clé secrète α préenregistrée dans le microprocesseur et connue seulement du microprocesseur, 2) à chaque fois qu’une instruction de chargement d’une donnée D i dans un registre R i du microprocesseur est exécutée par le microprocesseur, la donnée chargée D i est enregistrée dans le registre R i et le code C i qui lui est associé est enregistré dans le même registre R i ou dans un registre associé au registre R i , puis 3) l’exécution par l’unité arithmétique et logique de l’instruction logique contenue dans le code binaire et l’enregistrement du résultat D res -p de cette exécution dans le registre R res -p , 4) en parallèle de l'opération 3) ou ensuite, un module matériel de sécurisation : calcule un code C res-t à l’aide des codes C 1 , C 2 , … , C n et sans utiliser le résultat D r es -p , puis vérifie si le code C res-t calculé correspond à un code C res-p défini par la relation C res-p = Q α (D res -p ) et déclenche le signalement d’une faute d’exécution si le code C res-t ne correspond pas au code C res-p et, dans le cas contraire, inhibe ce signalement, dans lequel : la fonction Q α est définie par la relation suivante : Q α (D i ) = P o F α (D i ), où : P est une fonction prédéterminée, F α est une fonction définie par la relation suivante : F α (D i )=T αt o…o T αr o ... o T α 2 o T α 0 (D i ), T αr est une transposition conditionnelle paramétrée par le paramètre α r qui permute deux blocs B1 r et B2 r de bits de la donnée D i lorsque le paramètre α r est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α r est égal à une seconde valeur, les blocs de bits permutés pouvant contenir chacun un ou plusieurs bits, le symbole "o" désigne l'opération de composition de fonctions, "t" est un nombre entier supérieur à un, les bits des paramètres α 0 à α t forment la clé secrète α, et lors de l'opération 4), le calcul du code C res-t est réalisée à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n . Les modes de réalisation de ce procédé d'exécution peuvent comporter une ou plusieurs des caractéristiques suivantes : 1) la taille, en nombre de bits, de chacune des données D i est égale à 2 d , où d est un nombre entier supérieur à deux, la fonction F α est définie par la relation suivante : F α (D i ) = E 0 o…o E q o ... o E NbE-1 (D i ), où chaque fonction E q est un étage de transpositions et q est le numéro d'ordre de cet étage compris entre zéro et NbE-1, où NbE est un nombre entier supérieur à un, chaque étage E q de transpositions étant défini par la relation suivante : E q (x) = T α m,q o…o T α j,q o ... o T α 1 ,q o T α 0 ,q (x), où : x est une variable dont la taille, en nombre de bits, est égale à la taille de la donnée D i , T α j,q est une transposition conditionnelle paramétrée par le paramètre α j ,q qui permute deux blocs de bits B1 j,q et B2 j,q de la variable x lorsque le paramètre α j,q est égal à la première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α j,q est égal à la seconde valeur, la transposition T α j,q étant identique à l'une des transpositions T αr précédemment définies, les blocs de bits B1 j,q et B2 j,q pouvant contenir chacun un ou plusieurs bits, les blocs B1 j,q et B2 j,q de toutes les transpositions T α j,q de l'étage E q étant différents les uns des autres et ne se chevauchant pas de sorte que toutes les transpositions T α j,q de l'étage E q peuvent être exécutées en parallèles, "m+1" est le nombre total de transpositions T α j ,q de l'étage E q , "j" est un numéro d'ordre identifiant la transposition T α j ,q parmi les autres transpositions de l'étage E q , et lors de l'opération de calcul du code C i à l’aide de la relation C i = Q α (D i ), toutes les transpositions T α j ,q d'un même étage sont exécutées en parallèle. 2) la taille de chaque bloc de bits permuté est égal à un bit, et le nombre de transpositions T α j ,q de chaque étage E q est compris entre 2 d-2 et 2 d-1 , le nombre NbE d'étage E q est supérieur ou égal à d. 3) tous les étages E q pour lesquels q est inférieur à NbE-1 et pour toutes les transpositions T α j ,q de cet étage, les blocs B1 j,q et B2 j,q sont situés à l'intérieur d'un même bloc de taille supérieure permuté par une transposition de l'étage supérieur E q+1 lorsque le paramètre de cette transposition de l'étage supérieur E q+1 est égal à la première valeur. 4) les tailles des blocs B1 j ,q et B2 j,q de toutes les transpositions T α j,q d'un même étage E q sont égales, la taille de chacun des blocs B1 j ,q et B2 j,q est un multiple de deux et varie de façon monotone en fonction du numéro d'ordre q de l'étage E q , et pour chaque étage E q , le nombre de transpositions T α j ,q dans cet étage est égal à 2 d-1 /TB j,q , où TB j,q est la taille des blocs B1 j,q et B2 j,q . 5) la fonction P est une fonction de compression qui construit, à partir de chacun des bits du résultat F α (D i ), un code C i dont la taille, en nombre de bits, est inférieure à 2 d , où 2 d est la taille en nombre de bits de la donnée D i . 6) le procédé comporte l'obtention de chaque donnée D i par masquage d'une donnée DC i en clair par un masque M D , ce masquage consistant à réaliser un "OU EXCLUSIF" entre la donnée DC i et le masque M D . 7) chaque transposition T αr se distingue de toutes les autres transpositions de la fonction F α par le fait que c'est la seule qui permute les deux blocs B1 r et B2 r lorsque le paramètre α r est égal à la première valeur. 8) la vérification que le code C res-t calculé correspond à un code C res-p comporte : le calcul du code C res-p à l'aide de la relation suivante : C res-p = Q α (D res -p ), puis la comparaison des codes C res-t et C res-p calculés, le code C res-t correspondant au code C res-p seulement si ces deux codes sont identiques. L'invention a également pour objet module matériel de sécurisation pour la mise en œuvre du procédé revendiqué, dans lequel le module matériel de sécurisation est configuré pour : calculer un code C res-t à l’aide des codes C 1 , C 2 , … , C n et sans utiliser le résultat D res -p , puis vérifier si le code C res-t calculé correspond à un code C res-p défini par la relation C res-p = Q α (D res -p ) et déclencher le signalement d’une faute d’exécution si le code C res-t ne correspond pas au code C res-p et, dans le cas contraire, inhiber ce signalement, dans lequel : la fonction Q α est définie par la relation suivante : Q α (D i ) = P o F α (D i ), où : P est une fonction prédéterminée, F α est une fonction définie par la relation suivante : F α (D i )=T αt o…o T αr o ... o T α 2 o T α 0 (D i ), T αr est une transposition conditionnelle paramétrée par le paramètre α r qui permute deux blocs B1 r et B2 r de bits de la donnée D i lorsque le paramètre α r est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α r est égal à une seconde valeur, les blocs de bits permutés pouvant contenir chacun un ou plusieurs bits, le symbole "o" désigne l'opération de composition de fonctions, "t" est un nombre entier supérieur à un, et les bits des paramètres α 0 à α t forment la clé secrète α, et le module matériel de sécurisation est configuré pour calculer le code C res-t à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n . L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple non limitatif et faite en se référant aux dessins sur lesquels : la est une illustration schématique de l'architecture d'un appareil électronique apte à exécuter un code binaire; la est une illustration schématique de la structure d'un registre de l'appareil de la , les figures 3 à 5 sont des illustrations schématiques de différentes implémentations possibles d'une fonction F α exécutée par l'appareil de la ; la est un organigramme d'un procédé d'exécution du code binaire par l'appareil de la . CHAPITRE I : Conventions, notations et définitions : Dans les figures, les mêmes références sont utilisées pour désigner les mêmes éléments. Dans la suite de cette description, les caractéristiques et fonctions bien connues de l’homme du métier ne sont pas décrites en détails. Dans cette description, les définitions suivantes sont adoptées. Un « programme » désigne un ensemble d'une ou de plusieurs fonctions prédéterminées que l'on souhaite faire exécuter par un microprocesseur. Un « code source » est une représentation du programme dans un langage informatique, n'étant pas directement exécutable par un microprocesseur et étant destiné à être transformé par un compilateur en un code machine directement exécutable par le microprocesseur. Un programme ou un code est dit être « directement exécutable » lorsqu'il est apte à être exécuté par un microprocesseur sans que ce microprocesseur n'ait besoin au préalable de le compiler au moyen d'un compilateur ou de l'interpréter au moyen d'un interpréteur. Une « instruction » désigne une instruction machine exécutable par un microprocesseur. Une telle instruction est constituée : d'un opcode, ou code d'opération, codant la nature de l'opération à exécuter, et d'un ou plusieurs opérandes définissant la ou les valeurs des paramètres de cette opération. Un « code machine » est un ensemble d'instructions machines. Il s'agit typiquement d'un fichier contenant une succession de bits portant la valeur « 0 » ou « 1 », ces bits codant les instructions à exécuter par le microprocesseur. Le code machine est directement exécutable par le microprocesseur, c'est-à-dire sans nécessiter une compilation ou une interprétation préalable. Un « code binaire » est un fichier contenant une succession de bits portant la valeur « 0 » ou « 1 ». Ces bits codent des données et des instructions à exécuter par le microprocesseur. Ainsi, le code binaire comprend au moins un code machine et en plus, généralement, des données numériques traitées par ce code machine. On parle d'exécution d'une fonction pour désigner l'exécution des instructions réalisant cette fonction. Un bloc de bits d'une donnée ou d'une variable est un groupe de bits consécutifs de cette donnée ou de cette variable. La taille d'un bloc de bits est égale au nombre de bits contenus dans ce bloc. Les notations suivantes sont utilisées pour désigner des opérations booléennes : l’opération logique « OU » est désignée par le symbole "+", l’opération logique « OU EXCLUSIF» est désignée par le symbole "XOR", l’opération logique « ET » est désignée par le symbole ".", l'opération booléenne "NON" est désignée par le symbole " ' " situé après la variable dont le complément est calculé. CHAPITRE II : Architecture de l'appareil : La représente un appareil électronique 1 comportant un microprocesseur 2, une mémoire principale 4 et un support 6 de stockage de masse. Par exemple, l'appareil 1 est un ordinateur, un smartphone, une tablette électronique, une carte à puce ou similaire. Le microprocesseur 2 comporte ici : une unité arithmétique et logique 10 ; un ensemble 12 de registres ; un module de commande 14 ; une interface 16 d'entrée/sortie de données, un chargeur 18 d'instructions comportant un compteur ordinal 26, une file 22 d'instructions à exécuter, et un module matériel 28 de sécurisation. La mémoire 4 est configurée pour stocker des instructions d'un code binaire 30 d'un programme devant être exécuté par le microprocesseur 2. La mémoire 4 est une mémoire à accès aléatoire. Typiquement, la mémoire 4 est une mémoire volatile. La mémoire 4 peut être une mémoire externe au microprocesseur 2 comme représenté sur la . Dans ce cas, la mémoire 4 est réalisée sur un substrat mécaniquement séparé du substrat sur lequel sont réalisés les différents éléments du microprocesseur 2 comme l'unité 10. A titre d'illustration, le code binaire 30 comporte notamment un code machine 32 d'une fonction sécurisée. Chaque fonction sécurisée correspond à un ensemble de plusieurs lignes de code, par exemple plusieurs centaines ou milliers de lignes de code, enregistrées à des adresses successives dans la mémoire 4. Ici, chaque ligne de code correspond à un mot-machine. Ainsi, une ligne de code est chargée dans un registre du microprocesseur 2 en une seule opération de lecture. De même, une ligne de code est écrite dans la mémoire 4 par le microprocesseur 2 en une seule opération d'écriture. Chaque ligne de code code soit une seule instruction soit une seule donnée. A titre d'illustration, le microprocesseur 2 est conforme à l'architecture RISC (« Reduced Instructions Set Computer »). Le chargeur 18 charge dans la file 22 la prochaine instruction à exécuter par l'unité 10 à partir de la mémoire 4. Plus précisément, le chargeur 18 charge l'instruction sur laquelle pointe le compteur ordinal 26. A cet effet, la file 22 comprend une succession de plusieurs registres. L'unité 10 est notamment configurée pour exécuter les unes après les autres les instructions chargées dans la file 22. Les instructions chargées dans la file 22 sont généralement systématiquement exécutées dans l'ordre où ces instructions ont été enregistrées dans cette file 22. L'unité 10 est aussi capable d'enregistrer le résultat de ces instructions exécutées dans un ou plusieurs des registres de l'ensemble 12. Dans cette description, on utilisera comme synonymes « exécution par le microprocesseur 2 » et « exécution par l'unité 10 ». Le module 14 est configuré pour déplacer des données entre l'ensemble 12 de registres et l'interface 16. L'interface 16 est notamment apte à acquérir des données et des instructions, par exemple, depuis la mémoire 4 et/ou le support 6 extérieurs au microprocesseur 2. Ici, pour accélérer les transferts de données et d'instructions entre le microprocesseur 2 et la mémoire 4, l'interface 16 comporte une ou plusieurs mémoires caches. Pour simplifier la , seule une mémoire cache 27 est représentée. Cette mémoire cache 27 est utilisée pour stocker temporairement les données traitées par le microprocesseur 2 sur la même puce que l'unité 10. Le module 28 est capable d'exécuter automatiquement les différentes opérations décrites en détails dans les chapitres suivants pour sécuriser l'exécution des opérations booléenne par l'unité 10. Le module 28 fonctionne indépendamment et sans utiliser l'unité 10. Ainsi, il est capable de traiter les lignes de code avant et/ou après que celles-ci soient traitées par l'unité 10. A cet effet, il comporte notamment une mémoire non-volatile sécurisée 29. Aucun accès à cette mémoire 29 sans passer par l’intermédiaire du module 28 n'est prévu. Dans ce mode de réalisation, le module 28 est configuré pour exécuter des opérations telles que les opérations suivantes : vérifier un code d'intégrité, construire un code d'intégrité à partir d'une donnée, construire le code d'intégrité d'un résultat à partir codes d'intégrités des données traitées. La mémoire 29 est utilisée pour stocker les informations secrètes nécessaires au fonctionnement du module 28. Ici, elle comporte donc notamment une clé secrète α pré-enregistrée. Dans cet exemple de réalisation, l'ensemble 12 comporte des registres généraux utilisables pour stocker tout type de données. La taille de chacun de ces registres est suffisante pour y stocker une donnée ou un résultat et le code d'intégrité qui lui est associé. Un bus d'échange de données 24 qui relie les différents composants du microprocesseur 2 entre eux est représenté sur la pour indiquer que les différents composants du microprocesseur peuvent échanger des données entre eux. Le support 6 est typiquement une mémoire non volatile. Par exemple, il s'agit d'une mémoire du type EEPROM ou Flash. Il contient ici une copie 40 de sauvegarde du code binaire 30. Typiquement, c'est cette copie 40 qui est automatiquement recopiée dans la mémoire 4 pour restaurer le code 30, par exemple, après une coupure de courant ou similaire ou juste avant que débute l'exécution du code 30. CHAPITRE III - SÉCURISATION DES OPERATIONS BOOLEENNES : Dans ce chapitre, par « instruction logique », on désigne une instruction du jeu d’instructions du microprocesseur 2 qui, lorsqu’elle est exécutée par l'unité 10, enregistre dans un registre R res -p du microprocesseur le résultat d'une opération booléenne. Les registres dans lesquels sont enregistrées la ou les données à traiter sont typiquement identifiés par un ou plusieurs opérandes de l’instruction logique. De même, le registre R res -p dans lequel le résultat D res -p de l’instruction logique doit être enregistré peut aussi être identifié par un opérande de cette instruction logique. L’opcode de l’instruction logique identifie l’opération booléenne à exécuter par l’unité 10 pour modifier ou combiner la ou les données D 1 à D n . Par la suite, le symbole "&" est utilisé pour désigner de façon générique une opération booléenne. Ainsi, la notation D 1 &D 2 &…&D n désigne de façon générique une opération booléenne exécutée par le microprocesseur 2 entre les données D 1 à D n . Dans le cas où n = 1, l’opération booléenne est l'opération complément également connue sous le nom d'opération booléenne "NON". Dans le cas où n est supérieur ou égal à deux, l’opération booléenne est choisie dans le groupe constitué des opérations booléennes suivantes et de leur composition : l’opération logique « OU », l’opération logique « OU EXCLUSIF», l’opération logique « ET ». En injectant des fautes lors du fonctionnement de l’unité 10, il est possible de perturber son fonctionnement de sorte que le résultat de l’exécution de l’instruction logique ne correspond pas à celui attendu. On dit alors qu’on a provoqué un dysfonctionnement de l’unité 10. Ce chapitre décrit une solution pour détecter un tel dysfonctionnement de l’unité 10. Ici, cette solution est décrite dans un cas simplifié où elle est implémentée seulement pour les opérations booléennes. La sécurisation de l'exécution des autres opérations arithmétiques n'est pas mis en œuvre dans ce mode de réalisation. Les registres R 1 à R n et le registre R res -p sont, par exemple, des registres de l’ensemble 12 du microprocesseur 2. La taille, en nombre de bits, de chaque donnée D 1 , D 2 et D res -p est égale à 2 d , où d est un nombre entier typiquement supérieur à quatre ou cinq. Par exemple, ici, d = 5. Les structures des registres R 1 , R 2 et R res -p sont identiques et représentées dans le cas particulier du registre R i sur la . Le registre R i comporte : une plage de 32 bits contenant la donnée D i , une plage contenant un code C i d'intégrité permettant de vérifier l'intégrité et l'authenticité de la donnée D i . Le code C i est généré par le module 28 à l’aide d’une relation préprogrammée définie de façon générique par la relation suivante : C i = Q α (D i ), où : l’indice i identifie un registre parmi les registres R 1 , R 2 et R res -p , et la fonction Q α est une fonction préprogrammée dans le module 28 et paramétrée par la clé secrète α. La fonction Q α est définie par la relation suivante : Q α (D i ) = P o F α (D i ), où le symbole "o" désigne l'opération de composition de fonctions. La fonction P est une fonction prédéterminée. Dans les premiers modes de réalisation décrits ci-dessous, la fonction P est la fonction identité. Ainsi, dans ces premiers modes de réalisation, la fonction Q α est égale à la fonction F α . Des exemples où la fonction P est différentes de la fonction identité sont donnés dans le chapitre traitant des variantes. La fonction F α est un homomorphisme d’un ensemble A muni de l’opération booléenne "&" vers un ensemble B muni de la même opération booléenne "&" telle que F α (D 1 &D 2 ) = F α (D 1 ) & F α (D 2 ) et cela pour toutes les opérations booléennes "&". Ici, les ensembles A et B sont chacun l’ensemble des nombres codables sur 32 bits, c’est-à-dire l’ensemble des données D 1 et D 2 possibles. Ainsi, en utilisant les notations précédemment introduites, la fonction F α est telle que pour toute opération booléenne &, il est possible de calculer simplement le code d'intégrité C res-t associé au résultat D res -p de l'opération booléenne D 1 & D 2 à l'aide de la relation suivante C res-t = C 1 & C 2 . Lorsque l'opération booléenne exécutée est l'opération complément de la donnée D 1 , il est aussi possible de calculer le code C rest-t associé au résultat D res -p à l'aide de la relation suivante C res-t = C 1 ', où le symbole " ' " désigne l'opération complément qui retourne un "1" quand D 1 = 0 et qui retourne "0" quand D 1 = 1. La fonction F α est définie par la relation générique suivante : F α (D i ) = T αt o…o T αr o ... o T α 2 o T α 0 (D i ), où : T αr est une transposition paramétrée par le paramètre α r qui permute uniquement deux blocs de bits B1 r et B2 r de la donnée D i lorsque le paramètre α r est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α r est égal à une seconde valeur, l'indice r est un identifiant de la transposition T αr et du paramètre α r , le symbole "o" désigne l'opération de composition de fonctions, "t" est un nombre entier supérieur à un et, typiquement, supérieur à 2 d-1 , et les bits des paramètres α 0 à α t forment la clé secrète α. Ici, la première valeur est la valeur "1" et la seconde valeur est la valeur "0". Les blocs B1 r et B2 r peuvent contenir chacun un ou plusieurs bits. Il est possible de trouver de nombreuses fonctions F α qui conviennent. Ci-dessous, à titre d’illustration, plusieurs exemples de fonctions F α possibles sont données. Un premier exemple de fonction F α est décrit en référence à la . Dans ce premier exemple, les blocs B1 r et B2 r contiennent chacun un seul bit. Dans ce cas, la transposition T αr est, par exemple, réalisée par une porte logique de Fredkin qui, en entrée, reçoit les blocs B1 r et B2 r et le paramètre α r et qui, en sortie, délivre le doublet (B1 r , B2 r ) si α r = 0 et délivre (B2 r , B1 r ) si α r = 1. De plus, les blocs B1 r et B2 r sont différents des blocs permutés par toutes les autres transpositions de la fonction F α . Ainsi, toutes les transpositions T αr de la fonction F α peuvent être exécutées en parallèle. Ici, les blocs B1 r et B2 r sont des bits consécutifs de la donnée D i . Le blocs B1 r et B2 r sont classés par ordre croissant de l'indice r sur la . Sur le , le symbole "..." indique que seule une partie des bits de la donnée D i et du code C i est représentée. Sur cette figure, chaque bit est représenté par sa valeur "0" ou "1". La ligne en-dessous de la donnée D i représente le code C i obtenu en appliquant cette fonction F α lorsque tous les paramètres α r sont égaux à "1". Dans ce cas particulier, chaque transposition T αr permute les blocs B1 r et B2 r . Un deuxième exemple est décrit en référence à la . Dans ce deuxième exemple, la fonction F α est définie par la relation suivante : F α (D i ) = E 0 o…o E q o ... o E NbE-1 (D i ), où chaque fonction E q est un étage de transpositions et q est le numéro d'ordre de cet étage compris entre zéro et NbE-1. NbE est le nombre d'étages de transpositions. NbE est un nombre entier supérieur à un. Dans ce mode de réalisation, NbE est supérieur à d. Ici, sur la , NbE = 6 et d = 4. Chaque étage E q de transpositions est défini par la relation suivante : E q (x) = T α m ,q o…o T α j,q o ... o T α 1 ,q o T α 0 ,q (x), où : x est une variable dont la taille, en nombre de bits, est égale à la taille de la donnée D i , T α j ,q est une transposition paramétrée par le paramètre α j ,q qui permute deux blocs de bits B1 j,q et B2 j,q de la variable x lorsque le paramètre α j,q est égal à "1" et qui ne permute pas ces deux blocs de bits lorsque le paramètre α j,q est égal "0", "m+1" est le nombre total de transpositions T α j ,q de l'étage E q , "j" est un numéro d'ordre identifiant la position de la transposition T α j ,q par rapport aux autres transpositions de l'étage E q . Dans cet exemple, quel que soit "q" et quel que soit "j", les blocs de bits B1 j ,q et B2 j,q permutés par la transposition T α j,q lorsque le paramètre α j,q est égal à "1", contiennent seulement un bit. Les blocs B1 j ,q et B2 j,q ne sont pas nécessairement consécutifs et peuvent donc être séparés l'un de l'autre par un autre bloc de bits permuté par une autre transposition. Chaque transposition T α j ,q se distingue de toutes les autres transpositions de la fonction F α par le fait que c'est la seule qui permute les deux blocs B1 j,q et B2 j,q lorsque le paramètre α j,q est égal à "1". De plus, les blocs B1 j ,q et B2 j,q de toutes les transpositions T α j,q du même étage E q sont différents les uns des autres et ne se chevauchent pas. Ainsi, toutes les transpositions T α j ,q de l'étage E q peuvent être exécutées en parallèles. Par contre, dans cet exemple, les étages E q sont exécutés les uns après les autres dans l'ordre décroissant des indices q. Pour maximiser l'entropie de la fonction F α , pour chaque étage E q , le nombre m de transpositions est supérieur à 2 d-2 . De préférence, le nombre m est égal à 2 d-1 . Sur la , seule une partie des transpositions T α j ,q de chaque étage E q est représentée. Plus précisément, sur la , une transposition est représentée par une accolade horizontale qui relie les deux bits qu'elle permute. La représente un troisième exemple de fonction F α . Dans ce troisième exemple, la fonction F α est aussi définie par la relation suivante : F α (D i ) = E NbE-1 o…o E q o ... o E 1 o E 0 (D i ), où : chaque fonction E q est un étage de transpositions exécutables en parallèle, NbE est le nombre d'étages de transpositions, et l'indice q est un numéro d'ordre compris entre zéro à NbE-1. Le nombre NbE est supérieur à un et inférieur ou égale à d. De préférence, le nombre NbE est égal à d. Sur la , d =5 et NbE = 5. Comme dans le cas de la , chaque étage E q de transpositions est défini par la relation suivante : E q (x) = T α m ,q o…o T α j,q o ... o T α 1 ,q o T α 0 ,q (x). La définition des différents symboles de l'étage E q (x) n'est donc pas reprise ici. Chaque étage E q (x) de la se distingue de l'étage E q (x) de la sur les points suivants : les blocs B1 j ,q et B2 j,q permutés par la transpositions T α j,q sont les blocs contigus B 2j+1,q et B 2 j,q , la taille des blocs B 2j+1 ,q et B 2 j,q est égal à 2 q , le nombre m de transpositions T α j ,q par étage E q est égal à 2 d-q-1 . Les notations B 2j+1 ,q et B 2j,q indiquent qu'il s'agit, respectivement, du (2j+1)-ième et du 2j-ième blocs de 2 q bits de la variable x. Sur la , le bloc B 0 ,q est le bloc de bits de poids le plus faible, le bloc B 1,q le bloc suivant et ainsi de suite. Chaque accolade horizontale sur la englobe les deux blocs B 2j+1 ,q et B 2j,q d'une transposition T α j,q dont le paramètre est α j,q . Dans le cas de la , pour tous les étages E q pour lesquels q est inférieur à NbE-1 et pour toutes les transpositions T α j,q de cet étage, les blocs B 2j+1,q et B 2j,q sont tous les deux situés à l'intérieur d'un même bloc B l,q+1 de l'étage supérieur E q+1 , où l'indice "l" désigne le bloc de l'étage supérieur qui contient les blocs B 2j+1,q et B 2j,q . Par exemple, comme visible sur la , les blocs B 1 ,q et B 0,q de l'étage E q sont systématiquement situés à l'intérieur du bloc B 0,q+1 de l'étage supérieur E q+1 . De plus, ici, chaque bloc d'un étage supérieur E q+1 contient au plus deux blocs de l'étage inférieur E q . Le fonctionnement du microprocesseur 2 pour sécuriser l’exécution des opérations booléennes va maintenant être décrit plus en détail en référence à la . La fonction F α mise en œuvre pour faire cela est l'une quelconque des fonctions F α précédemment décrites. Le procédé débute par la fourniture, lors d'une étape 86, du code binaire 30. Lors de cette étape, dans cet exemple de réalisation, le code binaire 30 est chargé dans la mémoire 4 à partir du support 6. Ensuite, l'exécution du code binaire 30 par le microprocesseur 2 débute. Lors d'une étape 88, a chaque fois qu'une donnée D i est enregistrée dans la mémoire cache 27, le module 28 calcule le code C i à l'aide de la relation C i = F α (D i ). Ensuite, la donnée D i et le code C i qui lui est associé sont tous les deux enregistrés das la mémoire 27. À chaque fois qu’une instruction de chargement d'une donnée dans l’un des registres R i est exécutée par l’unité 10, lors d'une étape 90, la donnée D i et le code C i sont écrits dans ce registre R i . Avant l’exécution d'une opération booléenne entre deux données D 1 et D 2 , l’étape 90 est exécutée une fois pour la donnée D 1 et une fois pour la donnée D 2 . Ensuite, à chaque fois qu’une instruction logique est sur le point d’être exécutée par l’unité 10, juste avant son exécution, lors d’une étape 94, le module 28 vérifie s’il existe une erreur dans la donnée D i contenue dans le registre R i identifié par un opérande de l’instruction à exécuter. Lors de cette étape, pour chaque registre R i concerné, le module 28 vérifie, à l’aide du code C i contenu dans le registre R i , si la donnée D i actuellement enregistrée dans ce registre présente une erreur ou pas. Par exemple, pour cela, le module 28 calcule un code C i * à l'aide de la relation C i * = F α (D i ) et sans utiliser le code C i enregistré dans le registre R i . Si le code C i * ainsi calculé est identique au code C i enregistré dans le registre R i , alors l’intégrité et l’authenticité de la donnée D i sont confirmées. Dans ce cas, le module 28 ne détecte aucune erreur et procède à une étape 96. Dans le cas contraire, le module 28 procède à une étape 102. Lors de l’étape 102, le module 28 déclenche le signalement d’une faute d’exécution. Si le module 28 ne détecte aucune erreur, lors de l’étape 96, le microprocesseur 2 décode l’instruction puis l’unité 10 l’exécute et enregistre son résultat D res -p dans le registre R res -p . Dans le cas où l'instruction exécutée correspond à une opération booléenne, en parallèle de l'étape 96 ou après l'exécution de l'étape 96, lors d'une étape 98, le module 28 calcule le code C res-t en utilisant uniquement les codes C i associés aux données D i traitées par l'unité 10 lors de l'étape 96. Ainsi, dans le cas où ce sont les données D 1 et D 2 qui sont traitées, le code C res-t est calculé en combinant les codes C 1 et C 2 enregistrés, respectivement, dans les registres R 1 et R 2 préalablement à l’exécution de l’instruction logique. Plus précisément, le module 28 calcule le code C res-t à l’aide de la relation suivante : C res-t = C 1 & C 2 , où le symbole « & » désigne l’opération booléenne exécutée par l'unité 10 lors de l'étape 96. Ensuite, lors d'une étape 100, le module 28 vérifie si le code C res-t calculé correspond au code C res-p défini par la relation C res-p = F α (D res -p ). Ici, pour faire cela, le module 28 calcule le code C res-p à partir du résultat D res -p enregistré dans le registre R res -p et en mettant en œuvre la relation C res-p = F α (D res -p ). Ensuite, le module 28 compare les codes C res-p et C res-t calculés. Si ces codes sont différents, le module 28 déclenche l’exécution de l’étape 102. Dans le cas contraire, cela veut dire que le code C res-t correspond au code C res-p et donc qu'il n'y a pas eu de faute lors de l’exécution de l'instruction logique par l'unité 10. Dans ce dernier cas, aucun signalement d’une faute d’exécution n’est déclenché et le procédé se poursuit par l’exécution de l’instruction suivante de la file 22. L’exécution des étapes 98 et 100 permet de détecter un dysfonctionnement de l’unité 10 car les codes calculés C res-p et C res-t sont identiques seulement si l’unité 10 a correctement exécuté l'opération « & ». Ceci s’explique par la relation suivante : C res-p = F α (D res -p ) = F α (D 1 &D 2 ) = F α (D 1 ) & F α (D 2 ) = C 1 & C 2 = C res-t . Si l’instruction exécutée lors de l’étape 96 est l'opération de complément de la donnée D 1 , lors de l'étape 98, le code C res-t est calculé à l’aide de la relation suivante : C res-t = C 1 '. Le reste du procédé est ensuite identique à ce qui a été décrit précédemment. Dans le cas de l'opération de complément, les codes C res-p et C res-t sont identiques uniquement si l’unité 10 a correctement fonctionné. Ceci se démontre à l’aide de la relation suivante : C res-p = F α (D res -p ) = F α (D 1 ') = F α (D 1 )'= C 1 ' =C res-t . En réponse à un signalement d'une faute d'exécution, lors d'une étape 104, le microprocesseur 2 met en œuvre une ou plusieurs contre-mesures. De très nombreuses contre-mesures sont possibles. Les contre-mesures mises en œuvre peuvent avoir des degrés de sévérité très différents. Par exemple, les contre-mesures mises en œuvre peuvent aller d'un simple affichage ou une simple mémorisation d'un message d'erreur sans interrompre l'exécution normale du code machine 32 jusqu'à une mise hors service définitive du microprocesseur 2. Le microprocesseur 2 est considéré comme étant hors service lorsqu'il est définitivement placé dans un état où il est incapable d'exécuter un quelconque code machine. Entre ces degrés de sévérité extrêmes, il existe de nombreuses autres contre-mesures possibles telles que : l'indication par l'intermédiaire d'une interface homme-machine de la détection des fautes, l'interruption immédiate de l'exécution du code machine 32 et/ou sa réinitialisation, et la suppression du code machine 32 de la mémoire 4 et/ou la suppression de la copie 40 de sauvegarde et/ou la suppression des données secrètes. CHAPITRE IV- VARIANTES : Variantes de la fonction Qα : Dans la relation Q α (D i ) = P o F α (D i ), la fonction P n'est pas nécessairement la fonction identité. Par exemple, la fonction P est une fonction de compression qui construit, à partir de chacun des bits du résultat F α (D i ), un code C i dont la taille, en nombre de bits, est inférieure à 2 d . En effet, lorsque la fonction P est la fonction identité, la taille du code C i est égale à la taille de la donnée D i , c'est-à-dire égale à 2 d . Or, dans certains contextes, il est souhaitable de diminuer la taille du code C i . Par exemple, cela est souhaitable pour diminuer la place qu’il peut prendre dans la mémoire cache 27. A titre d'illustration, à cet effet, la fonction P est la fonction qui réalise les opérations suivantes : 1) la fonction P découpe le résultat F α (D i ) en deux blocs p 0 et p 1 de bits de même taille, puis, 2) la fonction P réalise un "OU EXCLUSIF" entre les blocs p 0 et p 1 . Dans ce cas, la taille du code C i est divisée par deux et égale à 2 d-1 . De nombreuses autres fonctions P de compression sont possibles. Par exemple, les opérations 1) et 2) ci-dessus peuvent être réitérées plusieurs fois. Chaque itération divise alors par deux la taille du code C i . Dans un autre exemple, lors de l'opération 1), la fonction P découpe le résultat F α (D i ) en g+1 blocs p 0 à p g de même taille et, lors de l'opération 2), la fonction P réalise un "OU EXCLUSIF" entre ces g+1 blocs p 0 à p g . Dans ce cas, la taille du code C i obtenu est égale à 2 d-g . Les bits de chaque bloc p 0 à p g ne sont pas nécessairement des bits adjacents dans le résultat F α (D i ). Ainsi, de façon plus générale, les bits de chaque bloc p h sont sélectionnés, parmi les bits du résultat F α (D i ), selon une loi prédéfinie, où l'indice h est l'identifiant du bloc p h parmi les blocs p 0 à p g . Par exemple, en variante, l'un des blocs p 0 à p g comporte uniquement des bits de rang pair et un autre des blocs p 0 à p g comporte uniquement des bits de rang impair. Le rang d'un bit désigne la position qu'il occupe dans le résultat F α (D i ), sachant que le bit de poids le plus faible est le bit de rang 0, puis le suivant le bit de rang 1 et ainsi de suite. La fonction P peut elle aussi être paramétrée par un ou plusieurs paramètres secrets β h connus seulement par le module 28 de sécurité. Par exemple, lorsque le paramètre β h =0, l'ordre des bits dans le bloc p h est laissé inchangé et lorsque le paramètre β h =1, l'ordre des bits dans le bloc p h est inversé avant de réaliser l'opération 2). De façon plus générale, lorsque le paramètre β h =1, les bits du bloc p h sont permutés à l'aide d'une permutation prédéfinie et ne sont pas permutés lorsque β h =0. Un autre exemple de fonction P de compression est une fonction de hachage. La fonction P peut aussi être différente de la fonction identité et d'une fonction de compression. Par exemple, la fonction P est une fonction de chiffrement ou autre. Par la suite, les différentes variantes sont décrites dans le cas particulier où la fonction P est égale à la fonction identité. Toutefois, ces variantes s'appliquent aussi au cas où la fonction P est différente de la fonction identité. En variante, la transposition T αr permute les blocs B1 r et B2 r lorsque le paramètre α r = 0 et ne les permute pas lorsque le paramètre α r = 1. Les blocs B1 r et B2 r permutés par la transposition T αr n'ont pas nécessairement la même taille. En variante, les transpositions T α j , q d’un même étage sont exécutées les unes après les autres. Dans ce cas, il n’est pas nécessaire que les blocs B1 j ,q et B2 j,q permutés ne se chevauchent pas avec d’autres blocs permutés par d'autres permutations du même étage. Les tailles des blocs B1 j ,q et B2 j,q permutés par une transpositions T α j , q de l'étage E q peuvent être différentes des tailles des blocs permutés par une autre transposition du même étage E q . La fonction F α de la a été décrite dans le cas particulier où les étages de transpositions transposent d’abord les blocs de plus grande taille et se terminent par la transposition des blocs de plus petite taille. Toutefois, en variante, les étages E q de transpositions peuvent être exécutés et classés dans l’ordre inverse. Dans ce cas, on applique d’abord les transpositions de plus petite taille et on finit par appliquer la transposition T α0 , NbE -1 de plus grande taille. L’ordre dans lequel sont classés les différents étages E q ne modifie pas la propriété de localité des bits précédemment décrite. Ainsi, même dans le cas où l’ordre des étages E q est inversé, il est possible de construire des circuits de calcul du code C res-t rapides et simples pour la plupart des opérations arithmétiques. En variante, la taille des blocs B1 j,q et B2 j,q est plus de deux fois supérieure à la taille des blocs B1 j,q-1 et B2 j,q-1 permutés par les transpositions de l’étage inférieur. Par exemple, pour cela, un ou plusieurs étages de la fonction F α décrite en référence à la sont omis. Certaines des transpositions T α j , q peuvent être omises. Dans ce cas, au moins l’un des étages comporte moins de 2 d-q-1 transpositions T α j , q . Autres variantes : Le module 28 n'est pas nécessairement un module matériel d'un seul bloc. En variante, il est composé de plusieurs sous-modules matériels remplissant chacun l'une des fonctions spécifiques du module 28. Ces sous-modules matériels sont alors de préférence implantés au plus proche des données qu'ils traitent. Par exemple, dans ce cas, le sous-module matériel qui calcul le code C i associé à chaque donnée D i est implanté dans la mémoire cache 27. Dès lors, le calcul du code C i associé à chaque donnée D i enregistrée dans la mémoire cache 27 est calculé localement dans cette mémoire cache. En variante, chaque instruction du code machine est aussi associée à un code d’intégrité Q α (I i ) calculé à partir de la valeur de l’instruction I i chargée. Ce code Q α (I i ) est vérifié juste avant que l’unité 10 exécute l’instruction I i . Cela permet de déclencher le signalement d’une faute d’exécution si l’instruction I i est modifiée dans la file 22. Il est possible d'associer le code C i à la donnée D i de différentes manières. Par exemple, au lieu d'enregistrer le code C i dans le même registre R i que celui qui contient la donnée D i , le code C i est enregistré dans un registre RC i associé au registre R i et non pas dans le registre R i . En variante, chaque donnée D i est une donnée masquée obtenue en exécutant au préalable une opération de masquage d’une donnée DC i en clair, à l’aide d’un masque M D . Ici, l’opération de masquage est réalisée à l’aide de la relation suivante : D i = DC i XOR M D . Dans ce cas, le résultat D res -p obtenu est lui aussi masqué à l’aide du masque M D . Le résultat D res -p masqué est obtenu directement en exécutant l'opération booléenne sur les données D i masquées. Il n'est donc pas nécessaire de démasquer ces données D i avant d'exécuter l'opération booléenne. Le code C i , obtenu en appliquant la fonction F α à la donnée D i masqué, est lui aussi masqué par un masque M C . Le masque M C est égal au masque F α (M D ). Cela découle de la relation suivante : F α (D i )= F α (DC i XOR M D ) = F α (DC i ) XOR F α (M D ) = CC i XOR M C , où CC i est le code C i en clair. Lorsque la donnée D i et le code C i sont masqués, ils peuvent être enregistrées dans une mémoire externe au microprocesseur 2 tout en restant difficile à découvrir. La clé secrète α peut être modifiée, par exemple, à intervalle régulier. D'autres modes de réalisation de l'étape 100 sont possibles. Par exemple, au lieu de calculer le code C res-p à partir du résultat D res -p , le module 28 calcule un résultat D res -t à partir du code C res-t . Le résultat D res -t est calculé à l'aide de la relation suivante : D res -t = F α -1 (C res-t ), où la fonction F α -1 est l'inverse de la fonction F α . Dans ce cas, le code C res-t correspond au code C res-p si le résultat D res -t calculé est identique au résultat D res -p . CHAPITRE V- Avantages des modes de réalisation décrits : Le calcul du code C i à l'aide d’une clef secrète α rend le procédé d'exécution du code machine plus robuste vis-à-vis des tentatives d'attaque. En effet, l’attaquant peut alors plus difficilement falsifier le code C res-t pour qu’il corresponde à un code attendu, lorsqu’une faute d’exécution a été volontairement introduite. Ainsi, les procédés décrits précédemment présentent les mêmes avantages en termes de robustesse que celui décrit dans l’article de DEMEYER2019. De plus, le fait d’utiliser une fonction F α seulement composée de transpositions conditionnelles permet de calculer le code C res-t simplement à l’aide de la relation C res-t = C 1 & C 2 &… & C n . Le calcul du code C res-t est donc beaucoup plus simple dans le cas des opérations booléennes que lorsque le procédé de l’article DEMEYER2019 est mis en œuvre. Le fait de répartir les transpositions T α j ,q en étage E q de transpositions exécutables en parallèle, accélère le calcul de chaque code C i . Le fait d’utiliser uniquement des transpositions qui permutent des blocs de seulement un bit chacun combiné au fait que les nombres m et NbE sont élevés, maximise l’entropie de la fonction F α . Cela rend donc la fonction F α plus robuste vis-à-vis des tentatives d’attaque car le nombre de valeurs possibles pour le code C i , calculé à partir de la même donnée D i et pour toutes les valeurs possibles de la clé α, est très important. Le fait d’utiliser une fonction F α , telle que celle décrite en référence à la , permet d’obtenir une fonction qui conserve la localité des bits transposés. Grâce à cela, pour d'autres opérations que les opérations booléennes, il est aussi possible de développer un circuit simple et rapide qui calcule le code C res-t à partir des codes C i . En fin de compte, cela permet d’accélérer encore plus l’exécution du procédé. Le fait que la taille des blocs permutés par un étage E q varie de façon monotone en fonction du numéro d'ordre q permet aussi de simplifier la conception des circuits de calcul du code C res-t ou de la donnée D res -t dans le cas où l'instruction exécutée par l'unité 10 réalise une opération arithmétique différente d'une opération booléenne. Lorsque chaque donnée D i est le résultat du masquage d’une donnée en clair DC i par un masque M D , le résultat D res -p obtenu après l’exécution de l’opération booléenne est un résultat masqué par ce masque M D . Le masque M D est un masque connu seulement du microprocesseur 2. Le résultat D res -p obtenu peut donc être directement enregistré dans une mémoire externe au microprocesseur, sans que cela puisse révéler des informations sur le fonctionnement de la fonction F α . De façon similaire, le code C res-p est alors lui aussi un code masqué par le masque F α (M D ). Dès lors, le code C res-p peut lui aussi être directement enregistré dans une mémoire externe au microprocesseur, sans que cela représente une faille de sécurité. Enfin, il n’est pas nécessaire de démasquer les données à traiter avant l’exécution des opérations booléennes, ce qui simplifie la mise en œuvre du procédé. Le fait que chaque transpositions T α j ,q soit différente de toutes les autres transpositions de la fonction F α maximise l'entropie de la fonction F α pour un nombre donné de transpositions T α j,q . Ainsi, pour ce nombre donné de transpositions, la fonction F α est la plus robuste possible vis-à-vis des tentatives d'attaques. La vérification que le code C res-t correspond au code C res-p en le comparant au résultat Q α (D res -p ) permet d’utiliser une fonction F α qui ne respecte pas la propriété suivante : F α o F α (x) = x. Cela permet donc un plus grand choix possible pour les fonctions F α . Cela permet aussi d'utiliser une fonction P qui n'est pas inversible. Procédé d'exécution d'un code binaire par un microprocesseur comportant une unité arithmétique et logique, ce procédé comportant : a) la fourniture (86) du code binaire, ce code binaire contenant : une instruction logique comportant un opcode et plusieurs opérandes qui, lorsqu’elle est exécutée par l'unité arithmétique et logique du microprocesseur, provoque la réalisation d'une opération booléenne D 1 &D 2 &…&D n et l’enregistrement du résultat de cette opération booléenne dans un registre R res -p , où : D 1 à D n sont des données enregistrées, respectivement, dans des registres R 1 à R n du microprocesseur, les registres R 1 à R n sont les registres désignés par les opérandes de l’instruction logique, le symbole « & » est l'opération logique désignée par l’opcode de l’instruction logique, cette opération logique étant choisie dans le groupe des opérations booléennes, l’indice n est un entier supérieur ou égal à un, pour chaque registre R 1 à R n , une instruction de chargement qui, lorsqu’elle est exécutée par le microprocesseur, provoque le chargement d’une donnée D i dans le registre R i , où l’indice i est un identifiant du registre R i parmi les registres R 1 à R n , b) lors de l’exécution du code binaire par le microprocesseur, le procédé comporte les opérations suivantes : 1) pour chaque donnée D i , le calcul (88) d'un code C i à l’aide d’une relation C i = Q α (D i ) et l'association du code C i calculé à la donnée D i , la fonction Q α étant une fonction préprogrammée paramétrée par une clé secrète α préenregistrée dans le microprocesseur et connue seulement du microprocesseur, 2) à chaque fois qu’une instruction de chargement d’une donnée D i dans un registre R i du microprocesseur est exécutée par le microprocesseur, la donnée chargée D i est enregistrée (90) dans le registre R i et le code C i qui lui est associé est enregistré dans le même registre R i ou dans un registre associé au registre R i , puis 3) l’exécution (96) par l’unité arithmétique et logique de l’instruction logique contenue dans le code binaire et l’enregistrement du résultat D res -p de cette exécution dans le registre R res -p , 4) en parallèle de l'opération 3) ou ensuite, un module matériel de sécurisation : calcule (98) un code C res-t à l’aide des codes C 1 , C 2 , … , C n et sans utiliser le résultat D res -p , puis vérifie (100) si le code C res-t calculé correspond à un code C res-p défini par la relation C res-p = Q α (D res -p ) et déclenche le signalement (102) d’une faute d’exécution si le code C res-t ne correspond pas au code C res-p et, dans le cas contraire, inhibe ce signalement, caractérisé en ce que : la fonction Q α est définie par la relation suivante : Q α (D i ) = P o F α (D i ), où : P est une fonction prédéterminée, F α est une fonction définie par la relation suivante : F α (D i )=T αt o…o T αr o ... o T α 2 o T α 0 (D i ), T αr est une transposition conditionnelle paramétrée par le paramètre α r qui permute deux blocs B1 r et B2 r de bits de la donnée D i lorsque le paramètre α r est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α r est égal à une seconde valeur, les blocs de bits permutés pouvant contenir chacun un ou plusieurs bits, le symbole "o" désigne l'opération de composition de fonctions, "t" est un nombre entier supérieur à un, les bits des paramètres α 0 à α t forment la clé secrète α, et lors de l'opération 4), le calcul (98) du code C res-t est réalisée à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n . Procédé selon la revendication 1, dans lequel : la taille, en nombre de bits, de chacune des données D i est égale à 2 d , où d est un nombre entier supérieur à deux, la fonction F α est définie par la relation suivante : F α (D i ) = E 0 o…o E q o ... o E NbE-1 (D i ), où chaque fonction E q est un étage de transpositions et q est le numéro d'ordre de cet étage compris entre zéro et NbE-1, où NbE est un nombre entier supérieur à un, chaque étage E q de transpositions étant défini par la relation suivante : E q (x) = T α m,q o…o T α j,q o ... o T α 1 ,q o T α 0 ,q (x), où : x est une variable dont la taille, en nombre de bits, est égale à la taille de la donnée D i , T α j,q est une transposition conditionnelle paramétrée par le paramètre α j ,q qui permute deux blocs de bits B1 j,q et B2 j,q de la variable x lorsque le paramètre α j,q est égal à la première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α j,q est égal à la seconde valeur, la transposition T α j,q étant identique à l'une des transpositions T αr précédemment définies, les blocs de bits B1 j,q et B2 j,q pouvant contenir chacun un ou plusieurs bits, les blocs B1 j,q et B2 j,q de toutes les transpositions T α j,q de l'étage E q étant différents les uns des autres et ne se chevauchant pas de sorte que toutes les transpositions T α j,q de l'étage E q peuvent être exécutées en parallèles, "m+1" est le nombre total de transpositions T α j ,q de l'étage E q , "j" est un numéro d'ordre identifiant la transposition T α j ,q parmi les autres transpositions de l'étage E q , et lors de l'opération de calcul du code C i à l’aide de la relation C i = Q α (D i ), toutes les transpositions T α j ,q d'un même étage sont exécutées en parallèle. Procédé selon la revendication 2, dans lequel, : la taille de chaque bloc de bits permuté est égal à un bit, et le nombre de transpositions T α j ,q de chaque étage E q est compris entre 2 d-2 et 2 d-1 , le nombre NbE d'étage E q est supérieur ou égal à d. Procédé selon la revendication 2, dans lequel tous les étages E q pour lesquels q est inférieur à NbE-1 et pour toutes les transpositions T α j ,q de cet étage, les blocs B1 j,q et B2 j,q sont situés à l'intérieur d'un même bloc de taille supérieure permuté par une transposition de l'étage supérieur E q+1 lorsque le paramètre de cette transposition de l'étage supérieur E q+1 est égal à la première valeur. Procédé selon la revendication 4, dans lequel : les tailles des blocs B1 j ,q et B2 j,q de toutes les transpositions T α j,q d'un même étage E q sont égales, la taille de chacun des blocs B1 j ,q et B2 j,q est un multiple de deux et varie de façon monotone en fonction du numéro d'ordre q de l'étage E q , et pour chaque étage E q , le nombre de transpositions T α j ,q dans cet étage est égal à 2 d-1 /TB j,q , où TB j,q est la taille des blocs B1 j,q et B2 j,q . Procédé selon l'une quelconque des revendications précédentes, dans lequel la fonction P est une fonction de compression qui construit, à partir de chacun des bits du résultat F α (D i ), un code C i dont la taille, en nombre de bits, est inférieure à 2 d , où 2 d est la taille en nombre de bits de la donnée D i . Procédé selon l'une quelconque des revendications précédentes, dans lequel le procédé comporte l'obtention de chaque donnée D i par masquage d'une donnée DC i en clair par un masque M D , ce masquage consistant à réaliser un "OU EXCLUSIF" entre la donnée DC i et le masque M D . Procédé selon l'une quelconque des revendications précédentes, dans lequel chaque transposition T αr se distingue de toutes les autres transpositions de la fonction F α par le fait que c'est la seule qui permute les deux blocs B1 r et B2 r lorsque le paramètre α r est égal à la première valeur. Procédé selon l'une quelconque des revendications précédentes, dans lequel la vérification que le code C res-t calculé correspond à un code C res-p comporte : le calcul (98) du code C res-p à l'aide de la relation suivante : C res-p = Q α (D res -p ), puis la comparaison des codes C res-t et C res-p calculés, le code C res -t correspondant au code C res-p seulement si ces deux codes sont identiques. Module matériel (28) de sécurisation pour la mise en œuvre d'un procédé conforme à l'une quelconque des revendications précédentes, dans lequel le module matériel de sécurisation est configuré pour : calculer un code C res-t à l’aide des codes C 1 , C 2 , … , C n et sans utiliser le résultat D res -p , puis vérifier si le code C res-t calculé correspond à un code C res-p défini par la relation C res-p = Q α (D res -p ) et déclencher le signalement d’une faute d’exécution si le code C res-t ne correspond pas au code C res-p et, dans le cas contraire, inhiber ce signalement, caractérisé en ce que : la fonction Q α est définie par la relation suivante : Q α (D i ) = P o F α (D i ), où : P est une fonction prédéterminée, F α est une fonction définie par la relation suivante : F α (D i )=T αt o…o T αr o ... o T α 2 o T α 0 (D i ), T αr est une transposition conditionnelle paramétrée par le paramètre α r qui permute deux blocs B1 r et B2 r de bits de la donnée D i lorsque le paramètre α r est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α r est égal à une seconde valeur, les blocs de bits permutés pouvant contenir chacun un ou plusieurs bits, le symbole "o" désigne l'opération de composition de fonctions, "t" est un nombre entier supérieur à un, et les bits des paramètres α 0 à α t forment la clé secrète α, et le module matériel de sécurisation est configuré pour calculer le code C res-t à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n .