Brevet FR3122754A1 — publié le 20221111

Microprocesseur équipé d'une unité arithmétique et logique et d'un module matériel de sécurisation Ce microprocesseur (2) est configuré pour calculer un code C i , utilisé pour détecter une faute d'exécution, à l’aide d’une relation C i = P o F α (D i ), où : - F α (D i )= E 0 o…o E q o ... o E NbE-1 (D i ), - E q (x) = T α m,q o…o T α j,q o ... o T α 1,q o T α 0,q (x), et - T αj,q est une transposition conditionnelle, paramétrée par un paramètre secret α j,q , qui permute deux blocs de bits B 2j+1,q et B 2j,q de la variable x uniquement lorsque le paramètre α j,q est égal à une première valeur, les blocs B 2j+1,q et B 2j,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 et les blocs B 2j+1,q et B 2j,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 . Fig. 1 Microprocesseur équipé d'une unité arithmétique et logique et d'un module matériel de sécurisation L’invention concerne un microprocesseur équipé d'une unité arithmétique et logique et d'un module matériel de sécurisation. 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. Des circuits matériels qui calculent rapidement des multiplications dans un champ de Galois sont complexes et lents. Le procédé de DEMEYER2019 est donc difficile à implémenter dans un microprocesseur y compris dans le cas des opérations booléennes. L'objectif est de proposer un microprocesseur qui présente, pour au moins une opération arithmétique et logique exécutée, le même niveau de sécurité que celui décrit dans l'article de DEMEYER2019 mais qui soit plus simple à réaliser. L'invention a donc pour objet un tel microprocesseur équipé d'une unité arithmétique et logique et d'un module matériel de sécurisation, dans lequel : a) l'unité arithmétique et logique est apte à exécuter une instruction arithmétique comportant un opcode et un ou 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 arithmétique D 1 *D 2 *…*D n et l’enregistrement du résultat de cette opération dans un registre R res-p , où : - l'indice n est égal au nombre de données D i traitées par l'instruction arithmétique, l'indice n étant supérieur ou égal à un, - D 1 à D n sont des données enregistrées, respectivement, dans des registres R 1 à R n du microprocesseur, la taille, en nombre de bits, de chacune de ces données D i étant égale à 2 d , où d est un entier supérieur à deux, - les registres R 1 à R n sont les registres désignés par les opérandes de l’instruction arithmétique, - le symbole « * » est l'opération arithmétique désignée par l’opcode de l’instruction arithmétique, b) le microprocesseur est configuré pour réaliser 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 de l’instruction arithmétique et l’enregistrement du résultat D res-p de cette exécution dans le registre R res-p , et le calcul, par le module de sécurisation, d'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 4) la vérification que le code C res-t calculé correspond à un code C res-p obtenu à partir du résultat D res-p et le déclenchement du 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, l'inhibition de 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 et F α est une fonction 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 l'indice q est un numéro d'ordre compris entre zéro à NbE-1, où NbE est un nombre entier supérieur à un et inférieur ou égal à d, 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 B 2j+1,q et B 2j,q de la variable x lorsque le paramètre α j,q est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α j,q est égal à une seconde valeur, la transposition T αj,q se distinguant de toutes les autres transpositions de la fonction F α par le fait que c'est la seule qui permute les deux blocs B 2j+1,q et B 2j,q lorsque le paramètre α j,q est égal à la première valeur, les blocs B 2j+1,q et B 2j,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 , - le symbole "o" désigne l'opération de composition de fonctions, - la concaténation des bits de tous les paramètres α j,q de tous les étages E q est égale à la valeur de la clé secrète α, et - 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 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. Les modes de réalisation de ce microprocesseur peuvent comporter une ou plusieurs des caractéristiques suivantes : 1) - le nombre NbE est égal à d, - les tailles des blocs permutés par toutes les transpositions T αj,q d'un même étage E q sont égales à 2 q , - les blocs B 2j+1,q et B 2j,q permutés par chaque transposition T αj,q sont contigus. 2) l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de un bit vers la gauche ou vers la droite et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module de sécurisation comportant à cet effet un circuit de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - pour chaque étage E q de la fonction F α , un étage ED q comportant des composants CD αj,q , chaque composant CD αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CD αj,q des étages ED 0 à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième, une troisième et une quatrième entrées et une première, une deuxième et une troisième sorties : - la première sortie délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première, troisième et quatrième entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat b.k+c.k', où "b" est la valeur reçue sur la deuxième entrée de ce composant, - la troisième sortie délivrant le résultat a.k+b.k', - le composant CD αj,NbE-1 de l'étage ED NbE-1 comportant une première, une deuxième et une troisième entrées et une première et une seconde sorties : - les première et seconde sorties délivrant, respectivement, les résultats "a" et "0" lorsque la troisième entrée est égale à "0", où "a" est la valeur reçue sur la première entrée et "0" est la valeur nulle, et - les première et seconde sorties délivrant, respectivement, les résultats "0" et "b" lorsque la troisième entrée est égale à "1", où "b" est la valeur reçue sur la deuxième entrée, - pour q égal à zéro, les première et deuxième entrées de chaque composant CD αj,0 de l'étage ED 0 étant raccordées, respectivement, au 2j-ième bit et au (2j+1)-ième bit du code C 1 , et pour q supérieur à zéro, les première et deuxième entrées de chaque composant CD αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties, respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage ED q-1 , - la troisième entrée de chaque composant CD αj,q est raccordée au paramètre α j,q lorsque l'instruction est un décalage à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est un décalage à droite, - pour q supérieur à zéro, la première et la deuxième sorties de chaque composant CD αj,q sont raccordées à la quatrième entrée, respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à zéro, la première et la deuxième sorties de chaque composant CD αj,0 délivrent, respectivement, le (2j+1)-ième et le 2j-ième bits du code C rest-t . 3) l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de 2 r bit vers la gauche ou vers la droite, où r est un nombre entier supérieur à un et inférieur à NbE, et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module de sécurisation comportant à cet effet un circuit de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant un permutateur de bloc et un ordonnanceur de bits, - le permutateur comporte, pour chaque étage E q de transpositions compris dans le groupe des étages E r à E NbE-1 qui permutent des blocs de taille supérieure ou égale à 2 r , un étage ED q comportant des composants CD αj,q , chaque composant CD αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CD αj,q des étages ED r à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième, une troisième et une quatrième entrées et une première, une deuxième et une troisième sorties : - la première sortie délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première, troisième et quatrième entrées de ce composant , - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET", et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat b.k+c.k', où "b" est la valeur reçue, sur la deuxième entrée de ce composant, - la troisième sortie délivrant le résultat a.k+b.k', - le composant CD αj,NbE-1 de l'étage ED NbE-1 comportant une première, une deuxième et une troisième entrées et une première et une seconde sorties : - les première et seconde sorties délivrant, respectivement, les résultats "a" et "0" lorsque la troisième entrée est égale à "0", où "a" est la valeur reçue sur la première entrée et "0" est la valeur nulle, et - les première et seconde sorties délivrant, respectivement, les résultats "0" et "b" lorsque la troisième entrée est égale à "1", où "b" est la valeur reçue sur la deuxième entrée, - les première et deuxième entrées de chaque composant CD αj,r de l'étage ED r étant raccordées, respectivement, au 2j-ième bloc de 2 r bits et au (2j+1)-ième bloc de 2 r bits du code C 1 , et pour q supérieur à r, les première et deuxième entrées de chaque composant CD αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties, respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage E q-1 , - la troisième entrée de chaque composant CD αj,q est raccordée au paramètre α j,q lorsque l'instruction est un décalage à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est un décalage à droite, - pour q supérieur à r, la première et la deuxième sorties de chaque composant CD αj,q sont raccordées à la quatrième entrée, respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à r, la première et la deuxième sorties de chaque composant CD αj,r délivrent, respectivement, le (2j+1)-ième bloc intermédiaire BCI 2j+1,r de 2 r bits et le 2j-ième bloc intermédiaire BCI 2j,r de 2 r bits d'un code intermédiaire CI rest-t , chaque bloc BCI x,r étant identique à un bloc respectif BC y,r du code C 1 , l'ordre des bits à l'intérieur de ce bloc BC y,r ayant été obtenu, lors du calcul du code C 1 , en appliquant un premier jeu de transpositions des étages E r-1 à E 0 à un bloc respectif BD z,r de 2 r bits de la données D 1 , où les indices x, y et z sont chacun un identifiant d'une position d'un bloc de 2 r bits dans une donnée ou un code de 2 d bits, l'indice x étant égal à 2j+1 si le numéro d'ordre du bloc de 2 r bits est impair et égal à 2j sinon, et le premier jeu de transpositions étant fonction de la position y, - l'ordonnanceur apte à remplacer chaque bloc intermédiaire BCI x,r du code intermédiaire par une bloc BCR x,r de 2 r bits qui est égal au résultat de l'application d'un second jeu de transpositions des étages E r-1 à E 0 au bloc BD z,r de 2 r bits de la donnée D 1 , le second jeu de transpositions étant fonction de la position x. 4) l’ordonnanceur est apte pour chaque bloc BCI x,r : - à comparer chaque paramètre d'une clé courante de permutations au paramètre correspondant d'une clé souhaitée de permutation, la clé courante contenant les paramètres de toutes les transpositions du premier jeu de transpositions utilisées, lors du calcul du code C 1 , pour permuter les bits situés à l'intérieur du bloc BD z,r , la clé souhaitée contenant les paramètres de toutes les transpositions du second jeu de transpositions utilisées, lors d'un calcul de F α (D res-p ), pour permuter les bits situés à l'intérieur du bloc BD x,r , et - à chaque fois que les paramètres comparés sont différents, à exécuter la transposition paramétrée par ce paramètre sur les bits du bloc BCI x,r et, - à chaque fois que les paramètres comparés sont identiques, à conserver l'ordre des bits du bloc BCI x,r inchangé. 5) l'instruction arithmétique est une instruction de rotation des bits de la donnée D 1 de un bit vers la gauche ou vers la droite et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module de sécurisation comportant à cet effet un circuit de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - pour chaque étage E q de la fonction F α , un étage ED q comportant des composants CC αj,q , chaque composant CC αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CC αj,q des étages ED 0 à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième, une troisième et une quatrième entrées et une première, une deuxième et une troisième sorties : - la première sortie délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première, troisième et quatrième entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat b.k+c.k', où "b" est la valeur reçue, sur la deuxième entrée de ce composant, - la troisième sortie délivrant le résultat a.k+b.k', - le composant CC αj,NbE-1 de l'étage ED NbE-1 comportant une première et une seconde entrées et une première et une seconde sorties, les première et seconde sorties délivrant, respectivement, les résultats "a" et "b", où "a" et "b" sont les valeurs reçues sur, respectivement, la première et la seconde entrées, et - pour q égal à zéro, les première et deuxième entrées de chaque composant CC αj,0 de l'étage ED 0 étant raccordées, respectivement, au 2j-ième bit et au (2j+1)-ième bit du code C 1 , et pour q supérieur à zéro, les première et deuxième entrées de chaque composant CC αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties, respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage ED q-1 , - la troisième entrée de chaque composant CC αj,q est raccordée au paramètre α j,q lorsque l'instruction est une rotation à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est une rotation à droite, - pour q supérieur à zéro, la première et la deuxième sorties de chaque composant CC αj,q sont raccordées à la quatrième entrée, respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à zéro, la première et la deuxième sorties de chaque composant CC αj,0 délivrent, respectivement, le (2j+1)-ième et le 2j-ième bits du code C rest-t . 6) l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de a NbE-1 2 NbE-1 +....+a q 2 q +...+a 0 bits vers la gauche ou vers la droite, où les coefficients a q sont des coefficients prédéterminés, et le module de sécurisation comporte une unité de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce code C rest-t étant identique au résultat D res-p en absence de faute d'exécution lors de l'exécution de cette instruction de décalage par l'unité arithmétique et logique, ce circuit de calcul comportant, pour chaque étage E q de la fonction F α , un étage ET q , chaque étage ET q comportant : - une première entrée pour recevoir un code à permuter, ce code à permuter étant formé d'une juxtaposition de blocs BCP y,q de 2 q bits chacun, l'indice y étant le numéro d'ordre du bloc de 2 q bits dans cette juxtaposition, cette première entrée recevant le code C 1 dans le cas où q = NbE-1, - une deuxième entrée pour recevoir les paramètres α m,q à α 0,q des transpositions de l'étage E q , cette deuxième entrée recevant les paramètres α 0,NbE-1 dans le cas où q = NbE-1, - une troisième entrée pour recevoir une clé de permutation pour les étages suivants, cette clé de permutation étant formée d'une juxtaposition de blocs BK y,q de 2 q bits chacun, chaque bloc BK y,q contenant uniquement les paramètres des transpositions des étages suivants E q-1 à E 0 qui permutent les bits situés à l'intérieur du bloc BCP y,q du code reçu sur la première entrée, cette troisième entrée recevant la clé α privée du paramètres α 0,NbE-1 dans le cas où q = NbE-1, - un premier permutateur apte à exécuter la permutation T αm,q o…o T αj,q o ... o T α1,q o T α0,q (x) pour obtenir un code permuté, où la variable x est égale au code à permuter reçu sur la première entrée et les paramètres de permutation α m,q à α 0,q sont ceux reçus sur la deuxième entrée, - un premier registre à décalage apte à réaliser un décalage de 2 q bits du code permuté pour obtenir un code permuté et décalé, - un premier multiplexeur configuré pour sélectionner le code permuté si le coefficient a q est égal à "0" et pour sélectionner le code permuté et décalé si le coefficient a q est égal à "1", ce premier multiplexeur comportant une sortie qui délivre sur la première entrée de l'étage suivant ET q-1 le code sélectionné parmi le code permuté et le code permuté et décalé, - un second permutateur apte à exécuter la permutation T αm,q o…o T αj,q o ... o T α2,q o T α0,q (k) pour obtenir une clé permutée, où la variable k est égale à la clé de permutation reçue sur la troisième entrée, - un second registre à décalage apte à réaliser un décalage de 2 q bits de la clé permutée pour obtenir une clé permutée et décalée, les premier et second registres à décalage décalant les bits vers la gauche si l'instruction de décalage est une instruction de décalage des bits vers la gauche et, sinon, décalant les bits vers la droite si l'instruction de décalage est une instruction de décalage des bits vers la droite, - un second multiplexeur configuré pour sélectionner la clé permutée si le coefficient a q est égal à "0" et pour sélectionner la clé permutée et décalée si le coefficient a q est égal à "1", ce second multiplexeur comportant : - une première sortie qui délivre, sur la deuxième entrée de l'étage suivant ET q-1 , les paramètres α m,q-1 à α 0,q-1 extraits à partir d'emplacements prédéterminés de la clé sélectionnée parmi la clé permutée et la clé permutée et décalée, et - une seconde sortie qui délivre sur la troisième entrée de l'étage suivant ET q-1 , une clé de permutation pour les étages suivant comportant les paramètres α m,q-2 à α 0,0 extraits à partir d'emplacements prédéterminés de la clé sélectionnée parmi la clé permutée et la clé permutée et décalée, la clé de permutation délivrée sur la seconde sortie étant formée d'une juxtaposition de blocs BK y,q-1 de 2 q-1 bits chacun, chaque bloc BK y,q-1 contenant les paramètres des transpositions des étages suivants E q-2 à E 0 à appliquer au bloc BCP y,q-1 de la donnée reçue sur la première entrée de l'étage suivant ET q-1 , et - lors de l'opération 4), le microprocesseur est configuré pour comparer le code C res-t au résultat D res-p et déclencher le signalement d'une faute uniquement s'ils ne sont pas identiques. 7) l'instruction arithmétique est une instruction d'addition de la donnée D 1 avec une donnée D 2 et le module de sécurisation comporte un circuit de calcul du code C rest-t à partir des codes C 1 et C 2 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - un étage d'additionneurs comportant, pour chaque paire de bits des codes C 1 et C 2 à additionner, un additionneur AD p , où l'indice p est le numéro d'ordre des deux bits des codes C 1 et C 2 à additionner par cet additionneur, ce numéro d'ordre variant de zéro à 2 d -1, chaque additionneur AD p comportant : - une première, une deuxième et une troisième entrées, les première et deuxième entrée étant destinée à recevoir, respectivement, le bit du code C 1 et et le bit du code C 2 à additionner, - une première sortie délivrant le résultat a.b, où : - "a" et "b" sont les valeurs reçues, respectivement, sur les première, et deuxième entrées, et - le symbole "." désigne l'opération logique "ET", - une deuxième sortie délivrant le résultat a+b, où le symbole "+" désigne l'opération logique "OU", - une troisième sortie délivrant le résultat a XOR b XOR c, où "c" est la valeur reçue sur la troisième entrée et XOR est le symbole de l'opération logique "OU EXCLUSIF", la concaténation des bits délivrés sur les troisièmes sorties des différents additionneurs AD p de l'étage d'addition formant le code C res-t , - une unité à retenue anticipée comportant une entrée sur laquelle est reçue la clé α de permutation, cette unité à retenue anticipée étant apte à déterminer les valeurs des troisièmes entrées des additionneurs de l'étage d'additionneurs sur lesquelles une retenue doit être délivrée à partir des résultats délivrés sur les première et deuxième sorties de chaque additionneur et à partir des paramètres α j,q , de la clé α reçue sur son entrée. 8) - l'unité à retenue anticipée comporte pour chaque étage E q de la fonction F α , un étage EA q comportant des composants CA αj,q , chaque composant CA αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CA αj,q des étages EA 0 à EA NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième , une troisième, une quatrième, une cinquième et une sixième entrées et une première, une deuxième, une troisième et une quatrième sorties : - la première sortie délivrant le résultat (G r +P r .G l ).k+(G l +P l .G r ).k', où : - G r , P r , G l , P l et k sont les valeurs reçues, respectivement, sur les première, deuxième, troisième, quatrième et sixième entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat P l .P r , - la troisième sortie délivrant le résultat c i .k'+(G l +P l .c i ).k, où c i est la valeur reçue sur la cinquième entrée, - la quatrième sortie délivrant le résultat c i .k+(G r +P r .c i ).k', - le composant CA αj,NbE-1 de l'étage EA NbE-1 comporte une première, une deuxième, une troisième, une quatrième, une cinquième et une sixième entrées et une première et une deuxième sorties : - la première sortie délivrant le résultat c i .k'+(G l +P l .c i ).k, où c i est la valeur reçue sur la cinquième entrée, - la deuxième sortie délivrant le résultat c i .k+(G r +P r .c i ).k', - les première et deuxième entrées de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux première et deuxième sorties de l'additionneur AD 2j , où l'additionneur AD 2j est l'additionneur AD p dont l'indice p est égal à 2j, - les troisième et quatrième entrées de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux première et deuxième sorties de l'additionneur AD 2j+1 , où l'additionneur AD 2j+1 est l'additionneur AD p dont l'indice p est égal à 2j+1, - les troisième et quatrième sorties de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux troisième entrées, respectivement, des additionneurs AD 2j et AD 2j+1 , - pour q supérieur à zéro, les première et deuxième entrées de chaque composant CA αj,q de l'étage EA q sont raccordées, respectivement, aux première et deuxième sorties du composant CA α2j,q-1 de l'étage EA q-1 , - pour q supérieur à zéro, les troisième et quatrième entrées de chaque composant CA αj,q de l'étage EA q sont raccordées, respectivement, aux première et deuxième sorties du composant CA α(2j+1),q-1 de l'étage EA q-1 , - pour q supérieur à zéro, les troisième et quatrième sorties de chaque composant CA αj ,q de l'étage EA q sont raccordées, respectivement, aux cinquième entrées, respectivement, des composants CA α2j,q-1 et CA α(2j+1),q-1 , - la sixième entrée de chaque composant CA αj,q est apte à recevoir le paramètre α j,q . 9) - l'unité arithmétique et logique est apte à exécuter une instruction logique qui, lorsqu’elle est exécutée, 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 le registre R res-p , où le symbole "&" désigne l'opération booléenne, et - le microprocesseur est configuré pour réaliser les opérations 1) à 4) pour cette instruction logique et, lors de l'exécution de l'opération 3), calculer le code C res-t à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n . 10) l'opération arithmétique est choisie dans le groupe composé d'un décalage de bits, d'une rotation de bits et d'une addition. 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 , - la est une illustration schématique 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 , - la est une illustration schématique d'un circuit de calcul d'un code C res-t dans le cas d'une opération arithmétique de décalage d'un bit vers la gauche, - les figures 6 et 7 sont des illustrations schématiques plus détaillées de deux composants du circuit de la , - les figures 8 à 10 sont des illustrations schématiques de différents états de fonctionnement du circuit de la , - la est une illustration schématique d'un circuit de calcul d'un code C res-t dans le cas d'une opération arithmétique de décalage de 2 r bits vers la gauche, - la est une illustration schématique d'un circuit de calcul d'un code C res-t dans le cas d'une opération arithmétique de décalage de a NbE-1 2 NbE-1 +....+a q 2 q +...+a 0 bits vers la gauche, - la est une illustration schématique d'un circuit de calcul d'un code C res-t dans le cas d'une opération arithmétique de rotation d'un bit vers la gauche, - la est une illustration schématique d'un circuit de calcul d'un code C res-t dans le cas d'une opération arithmétique d'addition, et - les figures 15 et 16 sont des illustrations schématiques plus détaillées de deux composants du circuit 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. Les registres dans lesquels sont enregistrées la ou les données à traiter par une instruction sont typiquement identifiés par un ou plusieurs opérandes de l’instruction. De même, le registre R res-p dans lequel le résultat D res-p de l'exécution d'une instruction doit être enregistré peut aussi être identifié par un opérande de cette instruction. 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é arithmétique et logique, enregistre dans un registre R res-p du microprocesseur le résultat d'une opération booléenne. L’opcode de l’instruction logique identifie l’opération booléenne à exécuter par l’unité arithmétique et logique 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 ». 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é. Par « instruction arithmétique », 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 arithmétique. Une opération arithmétique est différente d'une opération booléenne. Typiquement, une opération arithmétique appartient au groupe composé des opérations de décalage de bits, des opérations de rotation de bits, des opérations d'addition, des opérations de multiplication et des opérations de division. Par "Instruction arithmétique et logique", on désigne aussi bien une instruction logique qu'une instruction arithmétique. Par la suite, sauf indication contraire, le terme "instruction" désigne une instruction arithmétique et logique. 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. 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 un microprocesseur à jeu d'instructions réduit plus connu sous l'acronyme 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 instructions arithmétique et logique 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 et différents circuits matériels de calcul. 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 des codes d'intégrités des données traitées. Chaque circuit de calcul construit un code C res-t d'intégrité d'un résultat D res-p à partir des codes d'intégrités C 1 à C n des données D 1 à D n traitées par l'unité 10 et sans utiliser directement le résultat D res-p . Ici, il existe un circuit 110 de calcul pour pour les instructions logiques. Il existe également un circuit de calcul pour chaque instruction arithmétique dont l'exécution doit être sécurisée. Ici, le module 28 comporte cinq circuits 120, 130, 140, 149 et 160 de calcul associés chacun à une instruction arithmétique respective. Ces circuits de calcul sont décrits plus en détail dans le chapitre IV suivant. 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 INSTRUCTIONS ARITHMETIQUES ET LOGIQUES : 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 arithmétique et 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. Les registres R 1 à R n désignes les registres de l'ensemble 12 comportant, respectivement, les données D 1 à D n à traiter lors de l'exécution de l'instruction. Le registre R res-p désigne le registre de l’ensemble 12 dans lequel le résultat, de l'exécution de l'instruction arithmétique et logique, est enregistré. 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. 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 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 2 d 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 &, le circuit 110 calcule 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 , le circuit 110 calcule 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 représente la fonction F α utilisée dans ce mode de réalisation. 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 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. 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 conditionnelle paramétrée par le paramètre α j,q qui permute deux blocs de bits B 2j+1,q et B 2j,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 transposition T αj,q parmi les autres transpositions de l'étage E q . L'indice "j" identifie donc aussi la position des blocs B 2j+1,q et B 2j,q dans la variable x. Dans cette demande, les blocs sont classés par ordre croissant de leur indice qui dépend de la valeur de l'indice j. 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 B 2j+1,q et B 2j,q lorsque le paramètre α j,q est égal à "1". De plus, les blocs B 2j+1,q et B 2j,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èle. Ici, les étages E q sont exécutés les uns après les autres dans l'ordre décroissant des indices q. De plus, cette fonction F α présente les caractéristiques suivantes : - les blocs B 2j+1,q et B 2j,q permutés par la transpositions T αj,q sont des blocs contigus, - la taille des blocs B 2j+1,q et B 2j,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 d'instructions arithmétique et logique va maintenant être décrit plus en détail en référence à la . Le procédé débute par la fourniture, lors d'une étape 86, du code binaire 30. Lors de cette étape, dans cet exemple, 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 instruction arithmétique et logique 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 arithmétique et 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 arithmétique et logique 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 est une instruction arithmétique et logique dont l'exécution est sécurisée, 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, dans le cas où l'instruction exécutée est une instruction logique, le circuit 110 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. Dans le cas où l'instruction exécutée est une instruction arithmétique pour laquelle le module 28 comporte un circuit spécifique de calcul du code C res-t , alors ce circuit spécifique est sélectionné et le code C res-t est calculé par ce circuit spécifique. Des exemples de tels circuits spécifiques de calcul sont décrits en détail dans le chapitre suivant. Ensuite, lors d'une étape 100, le module 28 vérifie si le code C res-t calculé correspond à un code C res-p calculé à partir du résultat D res-p enregistré dans le registre R res-p . Dans le cas des circuits 110, 120, 130, 149 et 160, le code C res-p est calculé en mettant en œuvre la relation C res-p = F α (D res-p ). Dans le cas où le code C res-t est calculé par le circuit 140, le code C res-p est égal au résultat 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 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'instruction arithmétique et logique. Dans le cas d'une instruction logique, ceci s’explique simplement 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 . Dans le cas des instructions arithmétiques, cela s'explique par la structure et les opérations réalisées par le circuit de calcul mis en œuvre. 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 - EXEMPLES DE CIRCUITS DE CALCUL DU CODE C res-t : La fonction F α précédemment décrite permet de conserver la localité des bits. Par cela, on désigne la propriété selon laquelle les bits d'une donnée D i qui sont situés à l'intérieur du bloc B 2j+1,q ou B 2j,q restent toujours à l'intérieur de ce bloc. Autrement dit, les transpositions T αj,q-1 à T αj,0 qui s'appliquent aux bits de ce bloc B 2j+1,q ou B 2j,q ne peuvent pas permuter un bit de ce bloc avec un bit situé en dehors de ce bloc. Par contre, les bits du bloc B 2j+1,q ou B 2j,q peuvent être déplacés à l'intérieur de ce bloc par l'application de ces transpositions T αj,q-1 à T αj,0 . Cela provient du fait que, pour tous les étages E q pour lesquels q est inférieur à NbE-2 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 . C'est cette propriété particulière de la fonction F α qui permet de réaliser des circuits de calcul du code C res-t , simples et rapides, pour chaque instruction arithmétique. Par la suite, ceci est illustré dans le cas particuliers d'instructions de décalage de bits, d'une instruction de rotation et d'une instruction d'addition. Toutefois, à partir de ces exemples, l'homme du métier est capable de réaliser d'autres circuits de calcul du code C res-t pour d'autres instructions arithmétiques. La représente le circuit 120 de calcul du code C res-t dans le cas où l’instruction arithmétique exécutée par l’unité 10 est une instruction de décalage logique de 1 bit à gauche des bits de la donnée D 1 . Le code C res-t est calculé uniquement à partir du code C 1 . Pour simplifier la , le circuit 120 est illustré dans le cas particulier où la taille des codes C 1 et C res-t est égale à 8 bits. Dans ce cas, le nombre NbE d’étages est égal à trois. Toutefois, ce qui est décrit pour cette taille particulière se généralise sans difficulté à toutes tailles possibles. Sur la , les huit bits consécutifs du code C 1 sont désignés par les symboles a 0 à a 7 , où a 0 est le bit de poids le plus faible et a 7 le bit de poids le plus fort. Les bits du code C res-t sont désignés par les symboles a’ 0 à a’ 7 , ces bits a’ 0 à a’ 7 étant classés dans le même ordre que les bits du code C 1 . Pour chaque étage E q de la fonction F α , le circuit 120 comporte un étage ED q correspondant. Chaque étage ED q comporte un composant CD αj,q pour chaque transposition T αj,q de l’étage E q . Plus précisément, chaque composant CD αj,q est associé à une transposition respective T αj,q correspondante. Les composants CD αj,q sont classés par ordre croissant de leur indice qui varie en fonction de l'indice j. Pour q inférieur à NbE-1, les composants CD αj,q sont tous structurellement identiques les uns aux autres. Un de ces composants CD αj,q est représenté plus en détail sur la . Il comporte trois sorties 122 à 124 et quatre entrées 126 à 129. La sortie 122 délivre le résultat a.k’ + c.k, où a, k et c sont les valeurs reçues respectivement sur les entrées 126, 128 et 129. La sortie 123 délivre le résultat b.k + c.k’, où b est la valeur reçue sur l'entrée 127. La sortie 124 délivre le résultat a.k + b.k’. Les entrées 126 et 127 de chaque composant CD αj,0 de l’étage ED 0 sont raccordées, respectivement, au 2j-ième et au (2j+1)-ième bits du code C 1 . Pour q supérieur à zéro et q inférieur à NbE-1, les entrées 126 et 127 de chaque composant CD αj,q sont raccordées, respectivement, aux sorties 124, respectivement du composant CD α2j,q-1 et CD α(2j+1),q-1 de l’étage ED q-1 . L'entrée 128 de chaque composant CD αj,q reçoit le paramètre α j,q de la transposition T αj,q à laquelle il est associé. Pour q supérieur à zéro, les sorties 122 et 123 de chaque composant CD αj,q sont raccordées à l’entrée 129, respectivement, des composants CD α(2j+1),q-1 et CD α2j,q-1 . Pour q = 0, les sorties 122 et 123 de chaque composant CD αj,0 délivrent, respectivement, le (2j+1)-ième et le 2j-ième bits du code C res-t. L’étage ED NbE-1 comporte un seul composant CD α0 , NbE-1 . Le composant CD α0 , NbE-1 est représenté plus en détail sur la . Il comporte deux sorties 132 et 133 et trois entrées 136 à 138. Les sorties 132 et 133 délivrent, respectivement, les résultats "a" et "0" lorsque l’entrée 138 est égale à "0", où "a" est la valeur reçue sur l’entrée 136 et "0" est la valeur nulle. Les sorties 132 et 133 délivrent, respectivement, les résultats "0" et "b" lorsque l’entrée 138 est égale à "1", où "b" est la valeur reçue sur l’entrée 137. Les entrées 136 et 137 du composant CD α0,NbE-1 sont raccordées aux sorties 124, respectivement, des composants CD α0,NbE-2 et CD α1,NbE-2 . L’entrée 138 reçoit le paramètre α 0 , NbE-1 . Les sorties 132 et 133 sont raccordées aux entrées 129, respectivement, des composants CD α1,NbE-2 et CD α0,NbE-2 . Lorsque l'instruction exécutée lors de l'étape 96 est une instruction de décalage d'un bit à gauche, le circuit 120 est sélectionné pour réaliser l'étape 98. A cet effet, les bits du code C 1 sont délivrés sur les entrées 126 et 127 des composants CD αj,0 . En réponse, les composants CD αj,0 délivrent sur les entrées 126 et 127 de l’étage supérieur ED 1 , les résultats présents sur leur sortie 124. Ce processus est réitéré d’étage en étage, jusqu’à atteindre le composant CD α0,NbE-1 . Le composant CD α0,NbE-1 délivre alors sur les entrées 129 des composants CD αj,NbE-2 , les résultats, respectivement, a.k’ et b.k présents sur ses sorties 132 et 133. En réponse, le composant CD αj,NbE-2 délivre sur les entrées 129 des composants CD αj,q de l’étage E q inférieur, les résultats a.k’ + c.k et b.k + c.k’. Le processus est alors réitéré d’étage en étage, jusqu’à atteindre les composants CD αj,0 de l’étage ED 0 . Les composants CD αj,0 délivrent alors sur leurs sorties 122 et 123 les différents bits du code C res-t calculé. Ensuite, le procédé se poursuit par l’étage 100. Le fonctionnement du circuit 120 est illustré sur les figures 8 à 10 dans un cas simplifié où la taille des codes C 1 et C res-t est égale à quatre bits. Le nombre NbE d'étages E q est donc égal à deux. De plus, dans cet exemple particulier, les paramètres α 0,0 , α 1,0 et α 0,1 sont égaux, respectivement, à 0, 1 et 1. Les bits a 0 , a 1 , a 2 et a 3 de la donnée D 1 sont classés dans l’ordre croissant en partant du bit de poids le plus faible vers le bit de poids le plus fort. Dans ces conditions, avec les valeurs données ci-dessus pour les paramètres α 0,0 , α 1,0 et α 0,1 , le code C 1 est égal à a 0 , a 1 , a 3 , a 2 . Le résultat D res-p est quant à lui égal à a 2 , a 1 , a 0 , 0. Sur les figures 8 et 9, le symbole "?" indique qu'à ce stade de fonctionnement, cette valeur est inconnue. La montre que lorsque les valeurs α 0,0 et α 1,0 sont égales, respectivement, à 0 et 1, les composants CD α0,0 et CD α1,0 délivrent sur leur sortie 124 les valeurs, respectivement, a 3 et a 1 . Ensuite, en réponse ( ), le composant CD α0,1 délivre sur ses sorties 132 et 133 les valeurs, respectivement 0 et a 1 . Enfin ( ), les composants CD α0,0 et CD α1,0 délivrent sur leurs sorties 122 et 123 les bits du code C res-t calculé. Dans cet exemple, le code C res-t calculé est 0, a 0 , a 2 , a 1 . Il peut facilement être vérifié que ce code C res-t calculé est égale à F α (D res-p ) en absence de faute d’exécution. La représente le circuit 130 de calcul du code C res-t dans le cas où l’instruction arithmétique exécutée par l’unité 10 est un décalage logique de 2 r bits vers la gauche, où r est un nombre entier supérieur à un et inférieur à NbE-1. Sur la , le circuit 130 est représenté dans le cas particulier où NbE = d =4 et r = 2. Par la suite, les notations suivantes sont utilisées pour décrire le circuit 130. Les symboles BC y,r , BCI x,r , BCR x,r et BD z,r désignent les blocs de 2 r bits, respectivement, à la position y dans le code C 1 , à la position x dans un code intermédiaire CI, à la position x dans le code C res-p et à la position z dans la donnée D 1 . Les indices y, x et z sont ici des numéros d’ordre qui commencent à 0 et qui augmentent de 1 à chaque fois que l’on passe d’un bloc de 2 r bits au bloc de 2 r bits suivant, en se déplaçant vers les bits de poids les plus forts. Le circuit 130 comporte un permutateur supérieur 131 et un ordonnanceur 134. Le permutateur 131 permet de calculer la position des blocs de 2 r bits à l’intérieur du code C res-t à partir du code C 1 . Pour cela, ici, le permutateur 131 comporte des étages ED r à ED NbE-1 identiques aux étages ED r à ED NbE-1 du circuit 120, sauf qu’au lieu de manipuler des blocs de 1 bit, ce sont des blocs de 2 r bits qui sont manipulés. Plus précisément, les entrées 126 et 127 de chaque composant CD αj,q pour q supérieur ou égal à r, reçoit des blocs de 2 r bits et non pas d’un seul bit. Ainsi, les sorties 122 et 123 des composants CD αj,r délivrent à l’ordonnanceur 134 un code intermédiaire CI, dans lequel chaque bloc BCI x,r de 2 r bits est à l’emplacement souhaité, c'est-à-dire à l’emplacement qu’il doit occuper dans le code C res-t . De plus, chaque bloc BCI x,r est identique à un bloc BC y,r correspondant du code C 1 . En effet, le permutateur 131 ne fait que déplacer les blocs BC y,r les uns par rapport aux autres, pour obtenir le code intermédiaire CI. Le permutateur 131 ne permute pas les bits situés à l'intérieur d'un bloc BC y,r . Par la suite, on note y la position du bloc BC y,r qui est identique au bloc BCI x,r situé à la position x dans le code CI. L’ordre des 2 r bits à l’intérieur du bloc BCI x,r est identique à l'ordre des 2 r bits à l’intérieur du bloc BC y,r correspondant. L'agencement des 2 r bits à l’intérieur du bloc BC y,r résulte de l'application à un bloc BD z,r correspondant, lors du calcul du code C 1 , d'une partie des transpositions des étages E r-1 à E 0 . Par la suite, on note z la position du bloc BD z,r à partir duquel les positions des bits situés à l'intérieur du bloc BC y,r sont calculées. La position z du bloc BD z,r n'est pas forcement la même que la position y du bloc BC y,r car les transpositions des étages E NbE-1 à E r peuvent avoir déplacé ce bloc BD z,r avant d'y appliquer les transpositions des étages suivants. On note F αcy la composition des transpositions T αj,q des étages E r-1 à E 0 appliquées, lors de la construction du code C 1 , aux bits situés à l'intérieur du bloc BD z,r pour obtenir le bloc BC y,r . La clé αc y est un sous-ensemble de la clé α qui contient uniquement les paramètres des transpositions de la fonction F αcy . La clé αc y est par la suite appelée "clé courante" car il c'est elle qui explique l'agencement actuel des bits à l'intérieur du bloc BC y,r . La clé αc y dépend de la position y du bloc BC y,r . Par la suite, on note également αc j,q le paramètre de la transposition T αj,q contenu dans la clé courante αc y . Dans le code C res-p , l'agencement des 2 r bits à l’intérieur du bloc BCR x,r résulte de l'application, au bloc BD z,r correspondant, d'une partie des transpositions des étages E r-1 à E 0 . Le bloc BD z,r correspondant est le même que celui qui correspond au bloc BC y,r . On note F αsx la composition de transpositions T αj,q des étages E r-1 à E 0 appliquées, lors de la construction du code C res-p , aux bits situés à l'intérieur du bloc BD z,r pour obtenir le bloc BCR x,r . La clé αs x est par la suite appelée "clé souhaité" car il c'est elle qui détermine l'agencement des bits à l'intérieur du bloc BCR x,r . La clé αs x dépend de la position x du bloc BCR x,r . Par la suite, on note également αs j,q le paramètre de la transposition T αj,q contenu dans la clé souhaité αs y . Il résulte des explications ci-dessus que l'agencement des 2 r bits à l'intérieur du bloc BCI x,r n’est pas nécessairement identique à l'agencement des 2 r bits à l'intérieur du bloc BCR x,r qui occupe la même position x dans le code C res-t . En effet, la clé courante αc y n'est pas nécessairement identique à la clé souhaitée αs x . L’ordonnanceur 134 réagence l’ordre des bits à l’intérieur de chaque bloc BCI x,r pour obtenir le bloc BCR x,r souhaité. Pour expliquer cela, supposons que la donnée D 1 comporte quatre blocs, de 2 r bits chacun, notés dans l’ordre BD 3,r , BD 2,r , BD 1,r et BD 0,r . On suppose aussi dans cet exemple, que NbE=d=4 et r=2 et que les paramètres α 0,3 , α 1,2 , α 0,2 sont égaux, respectivement, à 1, 1, 0. Le calcul du code C 1 se décompose en une première et une seconde phases successives. Lors de la première phase, ce sont les transpositions des étages E NbE-1 à E r qui sont appliquées. Ainsi, lors de cette première phase, seuls les blocs BD z,r entier de la donnée D 1 sont permutés. Dans cet exemple, à l'issue de cette première phase, l’ordre des blocs BD z,r est le suivant : BD 0,r , BD 1,r , BD 3,r et BD 2,r . Ensuite, lors de la seconde phase, ce sont les transpositions des étages E r-1 à E 0 qui sont appliquées. Cette seconde phase permute seulement les bits à l’intérieur de chacun des blocs BD z,r . Lors de cette seconde phase, aucune transposition appliquée ne déplace un bit situé à l'intérieur d'un bloc BD z,r vers un autre bloc. A l'issue de cette seconde phase, le code C 1 est obtenu. On note dans l'ordre BC 3,r , BC 2,r , BC 1,r et BC 0,r , les quatre blocs, de 2 r bits chacun, du code C 1 obtenu. Lors de la seconde phase, les bits du bloc BD 0,r sont permutés en appliquant les transpositions des étages E r-1 à E 0 , qui s’appliquent uniquement aux 2 r bits de poids forts. Cela provient du fait qu'à l'issue de la première phase, le bloc BD 0,r se trouve à l'emplacement des bits de poids le plus fort, c'est-à-dire ici à la position y=3. On note F αc3 la composition des transpositions des étages E r-1 à E 0 qui s’appliquent seulement aux 2 r bits de poids forts. De façon similaire, on note F αc2 , F αc1 et F αc0 , les compositions de transposition des étages E r-1 à E 0 qui permutent seulement les bits situés à l’intérieur, respectivement, des blocs BD 1,r , BD 3,r et BD 2,r . Ainsi, on remarque que le bloc BC 3,r du code C 1 est le résultat de l’application de la fonction F αc3 aux bits du bloc BD 0,r . De façon similaire, les blocs BC 2,r , BC 1,r et BC 0,r du code C 1 sont les résultats de l’application des fonctions F αc2 , F αc1 et F αc0 aux blocs, respectivement, BD 1,r , BD 3,r et BD 2,r . Suite au décalage logique de 2 r bits vers la gauche, le résultat D res-p est égal à la concaténation, dans l’ordre, des blocs BD 2,r , BD 1,r , BD 0,r et d’un bloc [0] de 2 r bits nuls. L’application de la fonction F α au résultat D res-p pour calculer le code C res-p se décompose, de façon similaire, en une première phase puis une seconde phase. A l’issue de la première phase, les blocs du résultat D res-p sont classés dans l'ordre suivant : [0], BD 0,r , BD 2,r et BD 1,r . Lors de la seconde phase, les fonctions F αs3 à F αs0 sont appliquées, respectivement, au blocs [0], BD 0,r , BD 2,r et BD 1,r . Ainsi, les blocs BCR 3,r , BCR 2,r , BCR 1,r , BCR 0,r du code C res-p sont les résultats de l'application des fonctions F αs3 à F αs0 , respectivement, aux blocs [0], BD 0,r , BD 2,r et BD 1,r . Le code intermédiaire CI délivré par le permutateur 131 est la concaténation, dans l'ordre, des blocs [0], BC 0,r , BC 2,r et BC 1,r . Le bloc BCI 2,r est le résultat de l’application de la fonction F αc3 au bloc BD 0,r . Le bloc souhaité BCR 2,r , qui occupe la même position dans le code C res-p , est le résultat de l’application de la fonction F αs2 au bloc BD 0,r . Ainsi, dans le cas du bloc BCI 2,r , le rôle de l’ordonnanceur 134 est d’annuler l’application des transpositions de la fonction F αc3 et d’appliquer à la place les transpositions de la fonction F αs2 pour obtenir le bloc BCR 2,r souhaité. Pour cela, par exemple, pour chaque étage E r-1 à E 0 de la fonction F α , l’ordonnanceur 134 comporte un étage correspondant à EO r-1 à EO 0 . Chaque étage EO q comporte 2 d-q-1 comparateurs CO j,q . Chaque comparateur CO j,q est associé à la transposition T αj,q correspondante qui permute les blocs les blocs BCI 2j+1,q et BCI 2j,q du code intermédiaire CI lorsque la valeur de son paramètre est égale à un. La taille des blocs BCI 2j+1,q et BCI 2j,q est égale à 2 q . Pour simplifier la , seule une partie de ces comparateurs est représentée. Chaque comparateur CO j,q reçoit le bloc BCI j,q+1 , le paramètre αc j,q de la clef courante et le paramètre αs j,q de la clef souhaitée. Si ces deux paramètres sont égaux, le comparateur CO j,q délivre en sortie les blocs BCI 2j+1,q et BCI 2j,q , respectivement, aux comparateurs CO 2j+1,q-1 et CO 2j,q-1 . Autrement dit, les transpositions T αcj,q et T αsj,q sont identiques et aucun changement de l'ordre des bits n'est nécessaire. Si les deux paramètres αc j,q et αs j,q sont différents, le comparateur CO j,q permute les positions des blocs BCI 2j+1,q et BCI 2j,q avant de les délivrer, respectivement, aux comparateurs CO 2j+1,q-1 et CO 2j,q-1 . Cela remplace la transposition T αcj,q par la transposition T αsj,q . En procédant ainsi en allant de l'étage EO r-1 jusqu'à l'étage EO 0 , le code C rest-t est obtenu sur les sorties des comparateurs CO j,0 de l'étage EO 0 . Sur la , les bits du code C rest-t calculé par le circuit 130 sont désignés par les références a 7 à a 0 . Les clés courantes αc et souhaitée αs sont par exemple obtenues comme suit. La clé α est divisée en 2 r blocs BK z,r de 2 r bits chacun. Chaque bloc BK z,r contient uniquement les paramètres α j,r-1 à α j,0 des transpositions à appliquer, lors du calcul du code C 1 , aux bits situés à l’intérieur du bloc respectif BD z,r de la donnée D 1 . A l’intérieur de chaque bloc BK z,r , les paramètres α j,r-1 à α j,0 sont classés dans un ordre prédéterminé. Par exemple, ici, ils sont d’abord classés par ordre décroissant d’étages et les différents paramètres α j,q d’un même étage E q sont classés aussi par ordre décroissant d’indice j. La clé souhaité αs est égale à la clé α dans laquelle les paramètres sont classés comme décrit ci-dessus. Ensuite, les différents blocs BK z,r sont permutés, par exemple, par un circuit identique au permutateur 131. La clé contenant les blocs BK z,r ainsi permutés est égale à la clé courante αc. Les paramètres αc j,q et αs j,q sont les paramètres qui occupent la même position, respectivement, dans la clé courante αc et la clé souhaitée αs. La représente le circuit 140 de calcul du code C res-t à partir du code C 1 dans le cas où l’instruction arithmétique exécutée par l’unité 10 est une instruction de décalage de a NbE-1 2 NbE-1 + … + a q 2 q + … + a 0 2 0 bits vers la gauche de la donnée D 1 . Les coefficients a NbE-1 à a 0 sont des coefficients dont les valeurs booléennes sont déterminées et fixées à l’avance. Le circuit 140 calcule un code C res-t qui est égal au résultat D res-p si aucune faute d’exécution ne se produit. Ainsi, dans ce mode de réalisation, lors de l’étape 100, le code C res-p est égal au résultat D res-p . Le circuit 140 comporte pour chaque étage E q de la fonction F α , un étage ET q . Chaque étage ET q comporte quatre entrées 142 à 145 et trois sorties 146 à 148. L’entrée 142 reçoit un code CP q à permuter. Chaque code CP q comporte 2 d-q blocs BCP j,q , chacun de 2 q bits. Ces blocs BCP j,q ne se chevauchent pas et sont immédiatement consécutifs. L’indice j est égal au numéro d’ordre du bloc BCP j,q compté à partir du bloc BCP 0,q qui contient les bits de poids le plus faible. Chaque entrée 142 est raccordée à la sortie 146 de l’étage précédent ET q+1 , sauf l’entrée 142 de l’étage ET NbE-1 qui reçoit le code C 1 sur son entrée 142. L’entrée 143 reçoit les paramètres α j,q de l’étage E q de la fonction F α . Ici, à cet effet, l’entrée 143 de l’étage ET q est raccordée à la sortie 147 de l’étage précédent ET q+1 . L’entrée 144 reçoit une clef K ETq de permutation qui contient seulement les paramètres α j,q-1 à α j,0 nécessaires pour la mise en œuvre des transpositions des étages E q-1 à E 0 de la fonction F α . Cette clef K ETq est divisée en 2 d-q blocs BK j,q de 2 q bits chacun. Chaque bloc BK j,q contient uniquement les paramètres α j,q-1 à α j,0 des transpositions à appliquer aux bits situés à l’intérieur du bloc B j,q de la donnée D 1 . A l’intérieur de chaque bloc BK j,q , les paramètres α j,q-1 à α j,0 sont classés dans un ordre prédéterminé. Par exemple, ici, ils sont d’abord classés par ordre décroissant d’étages et les différents paramètres α j,q-1 d’un même étage E q-1 sont classés aussi par ordre décroissant d’indice j. Par exemple, supposons que q = 3, les transpositions à appliquer au bloc B 2,3 sont, successivement, les transpositions T α2,2 , T α5,1 , T α4,1 , T α11,0 , T α10,0 , T α9,0 et T α8,0 . Ceci découle de l’organisation des transpositions T αj,q dans la fonction F α décrite en référence à la . Dès lors, le bloc BK 2,3 comporte les paramètres α 2,2 , α 5,1 , α 4,1 , α 11,0 , α 10,0 , α 9,0 et α 8,0 et un 0 supplémentaire pour atteindre la taille de 2 3 bits. L’entrée 145 reçoit le coefficient a q du décalage à appliquer à la donnée D 1 . L’étage ET q comporte deux permutateurs 150 et 151, deux registres à décalage 154 et 155 et deux multiplexeurs 158 à 159. Le permutateur 150 exécute les transpositions de l’étage E q sur les données reçues sur son entrée 142. Autrement dit, le permutateur 150 exécute la fonction suivante : T αm,q o…oT αj,q o…oT α0,q (CP q ), où m est égal à 2 d-q-1 . Pour faire cela, le permutateur 151 est raccordé à l’entrée 142 pour recevoir le code CP q à permuter et à l’entrée 143 pour recevoir les paramètres α m,q à α 0,q . Le code permuté par le permutateur 150 est transmis directement sur une première entrée du multiplexeur 158 et, en parallèle, sur une entrée du registre 154. Le registre 154 réalise un décalage logique de 2 q bits vers la gauche des bits reçus sur son entrée pour obtenir un code permuté et décalé qui est délivré sur une seconde entrée du multiplexeur 158. Le multiplexeur 158 raccorde la première entrée directement à la sortie 146 si le coefficient a q reçu l'entrée 145 est égal à zéro. Si le coefficient a q reçu est égal à un, le multiplexeur 158 raccorde directement sa seconde entrée à la sortie 146. Le permutateur 151 et le registre 155 sont identiques, respectivement, au permutateur 150 et au registre 154. Ils réalisent donc les mêmes opérations que, respectivement, le permutateur 150 et le registre 154, mais appliquées à la clef K ETq , c'est-à-dire à la clef reçue sur l’entrée 144. Le multiplexeur 159 sélectionne la clef permutée délivrée par le permutateur 151 si le coefficient a q est égal à zéro. Dans le cas contraire, il sélectionne la clef permutée et décalée délivrée par le registre 155. De plus, à partir de la clef sélectionnée en fonction du coefficient a q , le multiplexeur 159 délivre sur la sortie 147, les paramètres α j,q-1 nécessaires au paramétrage des transpositions de l’étage ET q-1 . Il délivre aussi sur la sortie 148, la clef K ETq-1 . Le fonctionnement du circuit 140 est le suivant : le permutateur 150 de l’étage ET q annule l’effet des transpositions T j,q de l’étage E q appliqué à la donnée D 1 lors du calcul du code C 1 . Il est ici rappelé que T j,q o T j,q est la fonction identité. Ainsi, dans le code permuté délivré par le permutateur 150, les blocs BCP j,q occupent la même position que celle qui était la leur dans la donnée D 1 . Par contre, à l’intérieur de chaque bloc BCP j,q , la position des bits correspond au résultat de l’application des transpositions des étages E j , q-1 à E j,0 aux bits situés à l’intérieur du bloc B j,q de la donnée D 1 . Ainsi, l’ordre des bits à l’intérieur des blocs BCP j,q n’est pas le même que l’ordre des bits à l’intérieur du bloc B j,q de la donnée D 1 . Toutefois, cela n’a aucune importance pour l’application d’un décalage logique de 2 q bits à gauche, puisqu’un tel décalage décale seulement des blocs de 2 q bits. Ainsi, le fait d’appliquer le décalage de 2 q bits au niveau de l’étage ET q permet de calculer le code C res-t sans avoir pour cela : - à retrouver la donnée D 1 à partir du code C 1 , puis - à appliquer à cette donnée D 1 retrouvée les différents décalages logiques de 2 q bits. Dans ce mode de réalisation, les paramètres α j,q-1 à α j,0 nécessaires pour paramétrer toutes les transpositions T j,q-1 à T j,0 à appliquer aux bits situés à l’intérieur d’un bloc BCP j,q reçu sur l’entrée 142, sont situés à l’intérieur du bloc BK j,q de même taille et qui occupe la même position j dans la clef K ETq reçue sur l’entrée 144. Sur la sortie 148, cette relation entre la position des blocs BCP j,q-1 et la position des blocs BK j,q-1 est conservée. Autrement dit, dans la clef délivrée sur la sortie 148, le bloc BK j,q-1 contient tous les paramètres α j,q-2 à α j,0 nécessaires pour paramétrer les transpositions à appliquer aux bits situés à l’intérieur du bloc BCP j,q-1 délivré sur la sortie 146. Pour conserver cette relation, le permutateur 151 et le registre 155 appliquent, respectivement, les mêmes transpositions et les mêmes décalages que ceux appliqués au code CP q , mais cette fois-ci à la clef K ETq reçue. Ensuite, le multiplexeur 159 extrait de la clef sélectionnée les paramètres α j,q-1 à délivrer sur la sortie 147. Le multiplexeur 159 extrait aussi les paramètres α j , q-2 à α j,0 et génère la clef K ETq-1 délivrée sur la sortie 148. Ici, le multiplexeur 159 identifie les paramètres α j,q à extraire à partir de leur position dans la clef sélectionnée. La sortie 146 de l’étage ET 0 délivre le code C res-t à comparer au code C res-p pour vérifier, lors de l’étape 100, que l’exécution de l’instruction de décalage s’est déroulée sans faute. La représente un circuit 149 de calcul du code C res-t dans le cas où l’instruction arithmétique exécutée par l’unité 10 est une instruction de rotation de un bit vers la gauche des bits de la donnée D 1 . Cette instruction de rotation est identique à l’instruction de décalage de un bit vers la gauche, sauf que le bit de poids le plus fort de la donnée D 1 est réinjecté à droite et devient donc le bit de poids le plus faible après l’exécution de cette rotation. Le circuit 149 comporte, pour chaque étage E q de la fonction F α , un étage ER q correspondant. Chaque étage ER q comporte un composant CC αj,q pour chaque transposition T αj,q de l’étage E q . Plus précisément, chaque composant CC αj,q est associé à une transposition respective T αj,q correspondante. Pour q inférieur à NbE-2, chaque composant CC αj,q est identique au composant CD αj,q du circuit 120. Le composant CC α0,NbE-1 est représenté sur la dans le cas particulier où NbE est égal à trois. Sur la , il est donc désigné par la référence CR α0,2 . Le composant CC α0,NbE-1 comporte deux entrées 152 et 153 et deux sorties 156 et 157. Les entrées 152 et 153 sont raccordées, respectivement, aux sorties 124 des composants CC α0,NbE-2 et CC α1,NbE-2 . Les sorties 156 et 157 sont raccordées, respectivement, aux entrées 129 des composantes CC α1,NbE-2 et CC α0,NbE-2 . La sortie 156 délivre systématiquement la même valeur que celle reçue sur l’entrée 152. La sortie 157 délivre systématiquement la même valeur que celle reçue sur l’entrée 153. Autrement dit, le composant CC α0,NbE-1 inverse systématiquement la position des bits reçus sur ses entrées. Cela permet de réinjecter le bit de poids fort à l’emplacement prévu pour recevoir le bit de poids faible. Le fonctionnement du circuit 149 se déduit des explications données pour le circuit 120. La représente le circuit 160 de calcul du code C res-t dans le cas où l’instruction arithmétique exécutée par l’unité 10 est une instuction d’addition des données D 1 et D 2 . Le code C res-t est calculé cette fois-ci à partir des codes C 1 et C 2 . Le circuit 160 calcule le code C res-t qui, en absence de faute exécution, est égal à F α (D res-p ). La représente le circuit 160 dans le cas particulier où la taille des codes C 1 , C 2 et du code C res-t est égale à 8 bits. Sur cette figure, les 8 bits des codes C 1 et C 2 sont notés, dans l’ordre allant vers le bit de poids le plus fort, respectivement, a 0 à a 7 et b 0 à b 7 . Les 8 bits du code C res-t calculé sont notés, dans le même ordre, s 0 à s 7 . Le circuit 160 comporte un étage 162 d’additionneurs et une unité 164 à retenue anticipée. L’étage 162 comporte un additionneur AD p pour chaque paire de bits a p , b p à additionner. L'indice p désigne la position des bits dans les codes C 1 , C 2 et C res-t . Ces additionneurs AD p sont structurellement identiques les uns aux autres et différent les uns des autres uniquement par les bits a p et b p qu’ils additionnent. L’additionneur AD p est représenté plus en détail sur la . L’additionneur AD p comporte trois entrées 170 à 172 et trois sorties 174 à 176. Les entrées 170 et 171 reçoivent les bits, respectivement, a p et b p . L’entrée 172 reçoit une retenue c p à prendre en compte dans l’addition des bits a p et b p . La sortie 174 délivre le résultat a p .b p . La sortie 175 délivre le résultat a p + b p . La sortie 176 délivre le bit s p . Le bit s p est calculé par additionneur AD p à l'aide de la relation suivante : s p = a p XOR b p XOR c p . L’unité 164 a pour fonction de rapidement propager les différentes retenues c p à prendre en compte par les additionneurs AD p . Pour cela, ici, l’unité 164 calcule les retenues c p à partir des informations délivrées sur les sorties 174 et 175 de chaque additionneur AD p . Dans ce mode de réalisation, l’unité 164 comporte un étage EA q pour chaque étage E q de la fonction F α . Chaque étage EA q comporte 2 d-q-1 composants CA αj,q , où l’indice j est le numéro d’ordre du composant CA αj,q dans l’étage EA q . Chaque composant CA αj,q est associé à une transposition respective T αj,q de la fonction F α . Ici, les composants CA αj,q sont tous structurellement identiques les uns aux autres et se différencient seulement par leur raccordement avec les autres composants du circuit 160. Le composant CA αj,q est représenté plus en détail sur la . Le composant CA αj,q comporte six entrées 180 à 185 et quatre sorties 188 à 191. La sortie 188 délivre le résultat (G r +P r .G l ).k+(G l + P l .G r ).k’, où G r , P r , G l , P l et k sont les valeurs reçues, respectivement, sur les entrées 180, 181, 182, 183 et 185. La sortie 189 délivre le résultat P l .P r . La sortie 190 délivre le résultat c i .k’ + (G l + P l .c i ).k, où c i est la valeur reçue sur l’entrée 184. La sortie 191 délivre le résultat c i .k + (G r + P r .c i ).k’. L’entrée 185 reçoit le paramètre α j,q de la transposition T αj,q associée à ce composant CA αj,q . Les entrées 180 et 181 de chaque composant CA αj,0 de l’étage EA 0 sont raccordées aux sorties, respectivement, 174 et 175 de l’additionneur AD 2j . Les entrées 182 et 183 de chaque composant CA αj,0 de l’étage EA 0 sont raccordées aux sorties, respectivement, 174 et 175 de l’additionneur AD 2j+1 . Les sorties 190 et 191 de chaque composant CA αj,0 de l’étage EA 0 sont raccordées aux entrées 172, respectivement, des additionneurs AD 2j et AD 2j+1 . Pour q supérieur à zéro : - les entrées 180 et 181 de chaque composant CA αj,q de l’étage EA q sont raccordées aux sorties, respectivement, 188 et 189 du composant CA α2j,q-1 de l’étage inférieur EA q-1 , - les entrées 182 et 183 de chaque composant CA αj,q sont raccordées aux sorties 188 et 189 du composant CA α(2j+1),q-1 de l’étage inférieur EA q-1 , - les sorties 190 et 191 de chaque composant CA αj,q sont raccordées aux entrées 184, respectivement, des composants CA α2j,q-1 et CA α(2j+1),q-1 de l’étage ET q-1. Les sorties 188 et 189 du composant CA α0,NbE-1 ne sont pas utilisées. L’entrée 184 du composant CA α0,NbE-1 permet de recevoir la retenue calculée par un autre circuit, par exemple identique au circuit 160. Cela permet d’enchaîner plusieurs circuits 160 les uns aux autres, de manière à réaliser des additions sur des données de plus grande taille. L’unité 164 fonctionne comme une unité conventionnelle de calcul de retenue anticipée, connue sous le terme anglais de « carry look-ahead ». Ici, cette unité conventionnelle est cependant modifiée pour tenir compte des transpositions T αj,q et donc des paramètres α j,q utilisés pour le calcul du code C res-t . En résumé, les composants CA αj,q propagent la retenue vers la droite lorsque le paramètre α j,q est égal à zéro et vers la gauche lorsque le paramètre α j,q est égal à un. 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 est égale à 2 d-1 . De nombreuses autres fonctions P de compression sont possibles. 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. Dans le cas où la fonction P est différente de la fonction identité, chacun des circuits de calcul décrits ici est décomposé en un premier et un second sous-circuits. Le premier sous-circuit est identique à l'un des circuits de calcul précédemment décrits. Ce premier sous-circuit délivre donc un code C res-int qui est, en absence de faute d'exécution, systématiquement égal au résultat F α (D res-p ). Le second sous-circuit applique la fonction P prédéterminée au code C res-int pour obtenir le code C res-t . 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 αj , q permute les blocs B 2j+1 , q et B 2j,q lorsque le paramètre α j,q = 0 et ne les permute pas lorsque le paramètre α j,q = 1. La fonction F α 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 les instructions arithmétiques. En variante, un ou plusieurs étages de la fonction F α 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 . Variantes des circuits de calcul du code C res-t : L’enseignement donné ici dans le cas de quelques instructions arithmétiques, telles que des décalages, des rotations et des additions, peut être appliqué à d’autres instructions arithmétiques. En particulier, il est possible à partir de l’enseignement donné dans ces cas particuliers de développer des circuits de calcul d’un code C res-t pour d’autres instructions arithmétiques. Par exemple, le circuit 120 peut être modifié pour calculer le code C res-t correspondant à une instruction de décalage logique de 1 bit vers la droite. En pratique, pour cela, il suffit de conserver le même circuit que le circuit 120, mais d’envoyer sur l’entrée 128 ou 138 de chacun des composants CD αj,q le complément du paramètre α j,q c'est-à-dire le paramètre α j,q ’. De même, il est possible de construire un circuit de calcul du code C res-t pour une instruction de décalage arithmétique de un bit vers la gauche ou vers la droite. Un décalage arithmétique se distingue des décalages logiques précédemment décrits, par le fait que le bit de poids fort reste inchangé et n’est donc pas décalé, contrairement aux autres bits. Dans le circuit 140, chaque registre à décalage de 2 q bits peut être remplacé par un registre qui réalise une rotation de 2 q bits. Le circuit ainsi obtenu calcule le résultat C res-t qui correspond à une instruction de rotation des bits de la donnée D 1 de a NbE-1 2 NbE-1 +....+a q 2 q +...+a 0 bits vers la gauche. En remplaçant ces registres par des registres qui réalisent un décalage vers la droite ou une rotation vers la droite, le circuit obtenu calcule le code C res-t correspondant une instruction de décalage ou de rotation de a NbE-1 2 NbE-1 +....+a q 2 q +...+a 0 bits vers la droite. Il est aussi possible d’enchaîner plusieurs circuits de calculs pour calculer le code C res-t d’une opération qui correspond à la composition de plusieurs sous-opérations pour chacune desquelles il existe déjà un circuit de calcul du code C res-t . Par exemple, si l’opération exécutée est une instruction de décalage logique de deux bits à gauche, le code C res-t est calculé en appliquant deux fois le circuit 120. Pour cela, le code C 1 est d’abord injecté sur les entrées du circuit 120 et un premier code CI cres-t intermédiaire est obtenu. Ensuite, le code CI cres-t est injecté sur les entrées de ce même circuit 120 pour obtenir le code C res-t souhaité. De façon similaire, les circuits 120 et 130 peuvent être enchaînés pour calculer le code C res-t d’un décalage logique à gauche d’un nombre quelconque de bits. Si les coefficients a q sont systématiquement constants, en variante, les entrées 145 du circuit 140 sont omises. Dans ce cas, les coefficients a q sont câblés à l’intérieur de chaque étage ET q . Par exemple, le multiplexeur 158 est omis. Si la valeur du coefficient a q est systématiquement égale à un, alors la sortie du registre 154 est directement raccordée à la sortie 146. Le multiplexeur 159 est aussi simplifié, puisqu’il sélectionne systématiquement la sortie du registre 155. A l’inverse, si le coefficient a q est systématiquement égal à zéro, alors la sortie du permutateur 150 est directement raccordée à la sortie 146 et le registre 154 est omis. De même, le registre 155 est omis. En variante, le composant CA α0,NbE-1 du circuit 160 est dépourvu des sorties 188 et 189, qui ne sont pas utilisées. En variante, la sortie 175 du composant AD p délivre le résultat a p XOR b p et non pas le résultat a p + b p . Dans un mode de réalisation simplifié, seule l'exécution de certaines instructions arithmétiques ou logiques sont sécurisées. Par exemple, seule l'exécution d'une des instructions suivantes est sécurisée en mettant en œuvre le procédé décrit ici : l'instruction de décalage des bits, l'instruction de rotation des bits et l’instruction d'addition des bits. L’exécution des autres instructions, telles que les instructions logiques, n’est alors pas sécurisée. Dans ce dernier cas, cela veut dire que pour ces autres instructions, aucun code C res-t n’est calculé et l’étape 100 est omise. 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é F α (I i ) calculé à partir de la valeur de l’instruction I i chargée. Ce code F α (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 . 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, le module 28 calcule, comme dans le cas du circuit 140, un code C res-t qui est égal au résultat D res-p en absence de faute d'exécution. Dans ce cas, le code C res-t est calculé à l'aide de la relation suivante : C res-t = F α -1 (CI res-t ), où : - la fonction F α -1 est l'inverse de la fonction F α , et - CI res-t est le code calculé, par exemple, par les circuits 120, 130, 149 ou 160. Les différents circuits de calcul du code C res-t décrits ici peuvent être mis en œuvre indépendamment les uns des autres. 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 α qui présente la propriété de localité précédemment décrite permet d'obtenir des circuits de calcul du code C res-t qui sont plus simples et plus rapides que ceux nécessaires pour la mise en œuvre du procédé de l’article DEMEYER2019. Les circuits 120, 130, 140, 149 et 160 permettent chacun de calculer simplement et rapidement le code C res-t correspondant à une instruction arithmétique spécifique. Le circuit 110 permet aussi de calculer simplement et rapidement le code C rest-t pour toutes les opérations booléennes. Microprocesseur équipé d'une unité arithmétique et logique (10) et d'un module matériel (28) de sécurisation, dans lequel : a) l'unité arithmétique et logique (10) est apte à exécuter une instruction arithmétique comportant un opcode et un ou 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 arithmétique D 1 *D 2 *…*D n et l’enregistrement du résultat de cette opération dans un registre R res-p , où : - l'indice n est égal au nombre de données D i traitées par l'instruction arithmétique, l'indice n étant supérieur ou égal à un, - D 1 à D n sont des données enregistrées, respectivement, dans des registres R 1 à R n du microprocesseur, la taille, en nombre de bits, de chacune de ces données D i étant égale à 2 d , où d est un entier supérieur à deux, - les registres R 1 à R n sont les registres désignés par les opérandes de l’instruction arithmétique, - le symbole « * » est l'opération arithmétique désignée par l’opcode de l’instruction arithmétique, b) le microprocesseur est configuré pour réaliser 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 de l’instruction arithmétique et l’enregistrement du résultat D res-p de cette exécution dans le registre R res-p , et le calcul, par le module (28) de sécurisation, d'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 4) la vérification que le code C res-t calculé correspond à un code C res-p obtenu à partir du résultat D res-p et le déclenchement d'un 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, l'inhibition de 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 et F α est une fonction 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 l'indice q est un numéro d'ordre compris entre zéro à NbE-1, où NbE est un nombre entier supérieur à un et inférieur ou égal à d, 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 un paramètre α j,q , qui permute deux blocs de bits B 2j+1,q et B 2j,q de la variable x lorsque le paramètre α j,q est égal à une première valeur et qui ne permute pas ces deux blocs de bits lorsque le paramètre α j,q est égal à une seconde valeur, la transposition T αj,q se distinguant de toutes les autres transpositions de la fonction F α par le fait que c'est la seule qui permute les deux blocs B 2j+1,q et B 2j,q lorsque le paramètre α j,q est égal à la première valeur, les blocs B 2j+1,q et B 2j,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 , - le symbole "o" désigne l'opération de composition de fonctions, - la concaténation des bits de tous les paramètres α j,q de tous les étages E q est égale à la valeur de la clé secrète α, et - 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 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. Microprocesseur selon la revendication 1, dans lequel - le nombre NbE est égal à d, - les tailles des blocs permutés par toutes les transpositions T αj,q d'un même étage E q sont égales à 2 q , - les blocs B 2j+1,q et B 2j,q permutés par chaque transposition T αj,q sont contigus. Microprocesseur selon la revendication 2, dans lequel l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de un bit vers la gauche ou vers la droite et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module de sécurisation comportant à cet effet un circuit (120) de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - pour chaque étage E q de la fonction F α , un étage ED q comportant des composants CD αj,q , chaque composant CD αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CD αj,q des étages ED 0 à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première (126), une deuxième (127), une troisième (128) et une quatrième (129) entrées et une première (122), une deuxième (123) et une troisième (124) sorties : - la première sortie (122) délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première (126), troisième (128) et quatrième (129) entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie (123) délivrant le résultat b.k+c.k', où "b" est la valeur reçue sur la deuxième entrée (127) de ce composant, - la troisième sortie (124) délivrant le résultat a.k+b.k', - le composant CD αj,NbE-1 de l'étage ED NbE-1 comportant une première (136), une deuxième (137) et une troisième (138) entrées et une première (132) et une seconde (133) sorties : - les première et seconde sorties (132, 133) délivrant, respectivement, les résultats "a" et "0" lorsque la troisième entrée (138) est égale à "0", où "a" est la valeur reçue sur la première entrée (136) et "0" est la valeur nulle, et - les première et seconde sorties (132, 133) délivrant, respectivement, les résultats "0" et "b" lorsque la troisième entrée (138) est égale à "1", où "b" est la valeur reçue sur la deuxième entrée (137), - pour q égal à zéro, les première et deuxième entrées (126, 127) de chaque composant CD αj,0 de l'étage ED 0 étant raccordées, respectivement, au 2j-ième bit et au (2j+1)-ième bit du code C 1 , et pour q supérieur à zéro, les première et deuxième entrées (126, 127) de chaque composant CD αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties (124), respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage ED q-1 , - la troisième entrée de chaque composant CD αj,q est raccordée au paramètre α j,q lorsque l'instruction est un décalage à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est un décalage à droite, - pour q supérieur à zéro, la première et la deuxième sorties (122, 123) de chaque composant CD αj,q sont raccordées à la quatrième entrée (129), respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à zéro, la première et la deuxième sorties (122, 123) de chaque composant CD αj,0 délivrent, respectivement, le (2j+1)-ième et le 2j-ième bits du code C rest-t . Microprocesseur selon la revendication 2, dans lequel l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de 2 r bit vers la gauche ou vers la droite, où r est un nombre entier supérieur à un et inférieur à NbE, et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module (28) de sécurisation comportant à cet effet un circuit (130) de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant un permutateur (131) de bloc et un ordonnanceur (134) de bits, - le permutateur comporte, pour chaque étage E q de transpositions compris dans le groupe des étages E r à E NbE-1 qui permutent des blocs de taille supérieure ou égale à 2 r , un étage ED q comportant des composants CD αj,q , chaque composant CD αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CD αj,q des étages ED r à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième, une troisième et une quatrième entrées et une première, une deuxième et une troisième sorties : - la première sortie délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première, troisième et quatrième entrées de ce composant , - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET", et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat b.k+c.k', où "b" est la valeur reçue, sur la deuxième entrée de ce composant, - la troisième sortie délivrant le résultat a.k+b.k', - le composant CD αj,NbE-1 de l'étage ED NbE-1 comportant une première, une deuxième et une troisième entrées et une première et une seconde sorties : - les première et seconde sorties délivrant, respectivement, les résultats "a" et "0" lorsque la troisième entrée est égale à "0", où "a" est la valeur reçue sur la première entrée et "0" est la valeur nulle, et - les première et seconde sorties délivrant, respectivement, les résultats "0" et "b" lorsque la troisième entrée est égale à "1", où "b" est la valeur reçue sur la deuxième entrée, - les première et deuxième entrées de chaque composant CD αj,r de l'étage ED r étant raccordées, respectivement, au 2j-ième bloc de 2 r bits et au (2j+1)-ième bloc de 2 r bits du code C 1 , et pour q supérieur à r, les première et deuxième entrées de chaque composant CD αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties, respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage E q-1 , - la troisième entrée de chaque composant CD αj,q est raccordée au paramètre α j,q lorsque l'instruction est un décalage à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est un décalage à droite, - pour q supérieur à r, la première et la deuxième sorties de chaque composant CD αj,q sont raccordées à la quatrième entrée, respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à r, la première et la deuxième sorties de chaque composant CD αj,r délivrent, respectivement, le (2j+1)-ième bloc intermédiaire BCI 2j+1,r de 2 r bits et le 2j-ième bloc intermédiaire BCI 2j,r de 2 r bits d'un code intermédiaire CI rest-t , chaque bloc BCI x,r étant identique à un bloc respectif BC y,r du code C 1 , l'ordre des bits à l'intérieur de ce bloc BC y,r ayant été obtenu, lors du calcul du code C 1 , en appliquant un premier jeu de transpositions des étages E r-1 à E 0 à un bloc respectif BD z,r de 2 r bits de la données D 1 , où les indices x, y et z sont chacun un identifiant d'une position d'un bloc de 2 r bits dans une donnée ou un code de 2 d bits, l'indice x étant égal à 2j+1 si le numéro d'ordre du bloc de 2 r bits est impair et égal à 2j sinon, et le premier jeu de transpositions étant fonction de la position y, - l'ordonnanceur (134) apte à remplacer chaque bloc intermédiaire BCI x,r du code intermédiaire par une bloc BCR x,r de 2 r bits qui est égal au résultat de l'application d'un second jeu de transpositions des étages E r-1 à E 0 au bloc BD z,r de 2 r bits de la donnée D 1 , le second jeu de transpositions étant fonction de la position x. Microprocesseur selon la revendication 4, dans lequel l’ordonnanceur (134) est apte pour chaque bloc BCI x,r : - à comparer chaque paramètre d'une clé courante de permutations au paramètre correspondant d'une clé souhaitée de permutation, la clé courante contenant les paramètres de toutes les transpositions du premier jeu de transpositions utilisées, lors du calcul du code C 1 , pour permuter les bits situés à l'intérieur du bloc BD z,r , la clé souhaitée contenant les paramètres de toutes les transpositions du second jeu de transpositions utilisées, lors d'un calcul de F α (D res-p ), pour permuter les bits situés à l'intérieur du bloc BD x,r , et - à chaque fois que les paramètres comparés sont différents, à exécuter la transposition paramétrée par ce paramètre sur les bits du bloc BCI x,r et, - à chaque fois que les paramètres comparés sont identiques, à conserver l'ordre des bits du bloc BCI x,r inchangé. Microprocesseur selon la revendication 2, dans lequel l'instruction arithmétique est une instruction de rotation des bits de la donnée D 1 de un bit vers la gauche ou vers la droite et le code C res-t est égal à Q α (D res-p ) en absence de faute d'exécution, le module (28) de sécurisation comportant à cet effet un circuit (149) de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - pour chaque étage E q de la fonction F α , un étage ED q comportant des composants CC αj,q , chaque composant CC αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CC αj,q des étages ED 0 à ED NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première, une deuxième, une troisième et une quatrième entrées et une première, une deuxième et une troisième sorties : - la première sortie délivrant le résultat a.k'+c.k, où : - "a", "k" et "c" sont les valeurs reçues, respectivement, sur les première, troisième et quatrième entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie délivrant le résultat b.k+c.k', où "b" est la valeur reçue, sur la deuxième entrée de ce composant, - la troisième sortie délivrant le résultat a.k+b.k', - le composant CC αj,NbE-1 de l'étage ED NbE-1 comportant une première (152) et une seconde (153) entrées et une première (156) et une seconde (157) sorties, les première et seconde sorties délivrant, respectivement, les résultats "a" et "b", où "a" et "b" sont les valeurs reçues sur, respectivement, la première (152) et la seconde (153) entrées, et - pour q égal à zéro, les première et deuxième entrées de chaque composant CC αj,0 de l'étage ED 0 étant raccordées, respectivement, au 2j-ième bit et au (2j+1)-ième bit du code C 1 , et pour q supérieur à zéro, les première et deuxième entrées de chaque composant CC αj,q de l'étage ED q étant raccordées, respectivement, aux troisième sorties, respectivement, du 2j-ième et du (2j+1)-ième composants de l'étage ED q-1 , - la troisième entrée de chaque composant CC αj,q est raccordée au paramètre α j,q lorsque l'instruction est une rotation à gauche et au complément α j,q ' du paramètre α j,q lorsque l'instruction est une rotation à droite, - pour q supérieur à zéro, la première et la deuxième sorties de chaque composant CC αj,q sont raccordées à la quatrième entrée, respectivement, du (2j+1)-ième et du 2j-ième composants de l'étage E q-1 , et pour q égal à zéro, la première et la deuxième sorties de chaque composant CC αj,0 délivrent, respectivement, le (2j+1)-ième et le 2j-ième bits du code C rest-t . Microprocesseur selon la revendication 2, dans lequel l'instruction arithmétique est une instruction de décalage des bits de la donnée D 1 de a NbE-1 2 NbE-1 +....+a q 2 q +...+a 0 bits vers la gauche ou vers la droite, où les coefficients a q sont des coefficients prédéterminés, et le module (28) de sécurisation comporte une unité (140) de calcul du code C rest-t à partir du code C 1 et sans utiliser le résultat D res-p , ce code C rest-t étant identique au résultat D res-p en absence de faute d'exécution lors de l'exécution de cette instruction de décalage par l'unité arithmétique et logique, ce circuit de calcul comportant, pour chaque étage E q de la fonction F α , un étage ET q , chaque étage ET q comportant : - une première entrée (142) pour recevoir un code à permuter, ce code à permuter étant formé d'une juxtaposition de blocs BCP y,q de 2 q bits chacun, l'indice y étant le numéro d'ordre du bloc de 2 q bits dans cette juxtaposition, cette première entrée recevant le code C 1 dans le cas où q = NbE-1, - une deuxième entrée (143) pour recevoir les paramètres α m,q à α 0,q des transpositions de l'étage E q , cette deuxième entrée recevant les paramètres α 0,NbE-1 dans le cas où q = NbE-1, - une troisième entrée (144) pour recevoir une clé de permutation pour les étages suivants, cette clé de permutation étant formée d'une juxtaposition de blocs BK y,q de 2 q bits chacun, chaque bloc BK y,q contenant uniquement les paramètres des transpositions des étages suivants E q-1 à E 0 qui permutent les bits situés à l'intérieur du bloc BCP y,q du code reçu sur la première entrée, cette troisième entrée recevant la clé α privée du paramètres α 0,NbE-1 dans le cas où q = NbE-1, - un premier permutateur (150) apte à exécuter la permutation T αm,q o…o T αj,q o ... o T α1,q o T α0,q (x) pour obtenir un code permuté, où la variable x est égale au code à permuter reçu sur la première entrée (142) et les paramètres de permutation α m,q à α 0,q sont ceux reçus sur la deuxième entrée (143), - un premier registre (154) à décalage apte à réaliser un décalage de 2 q bits du code permuté pour obtenir un code permuté et décalé, - un premier multiplexeur (158) configuré pour sélectionner le code permuté si le coefficient a q est égal à "0" et pour sélectionner le code permuté et décalé si le coefficient a q est égal à "1", ce premier multiplexeur comportant une sortie qui délivre sur la première entrée de l'étage suivant ET q-1 le code sélectionné parmi le code permuté et le code permuté et décalé, - un second permutateur (151) apte à exécuter la permutation T αm,q o…o T αj,q o ... o T α2,q o T α0,q (k) pour obtenir une clé permutée, où la variable k est égale à la clé de permutation reçue sur la troisième entrée (144), - un second registre (155) à décalage apte à réaliser un décalage de 2 q bits de la clé permutée pour obtenir une clé permutée et décalée, les premier et second registres à décalage décalant les bits vers la gauche si l'instruction de décalage est une instruction de décalage des bits vers la gauche et, sinon, décalant les bits vers la droite si l'instruction de décalage est une instruction de décalage des bits vers la droite, - un second multiplexeur (159) configuré pour sélectionner la clé permutée si le coefficient a q est égal à "0" et pour sélectionner la clé permutée et décalée si le coefficient a q est égal à "1", ce second multiplexeur comportant : - une première sortie qui délivre, sur la deuxième entrée (143) de l'étage suivant ET q-1 , les paramètres α m,q-1 à α 0,q-1 extraits à partir d'emplacements prédéterminés de la clé sélectionnée parmi la clé permutée et la clé permutée et décalée, et - une seconde sortie qui délivre sur la troisième entrée (144) de l'étage suivant ET q-1 , une clé de permutation pour les étages suivant comportant les paramètres α m,q-2 à α 0,0 extraits à partir d'emplacements prédéterminés de la clé sélectionnée parmi la clé permutée et la clé permutée et décalée, la clé de permutation délivrée sur la seconde sortie étant formée d'une juxtaposition de blocs BK y,q-1 de 2 q-1 bits chacun, chaque bloc BK y,q-1 contenant les paramètres des transpositions des étages suivants E q-2 à E 0 à appliquer au bloc BCP y,q-1 de la donnée reçue sur la première entrée de l'étage suivant ET q-1 , et - lors de l'opération 4), le microprocesseur est configuré pour comparer le code C res-t au résultat D res-p et déclencher le signalement d'une faute uniquement s'ils ne sont pas identiques. Microprocesseur selon la revendication 2, dans lequel l'instruction arithmétique est une instruction d'addition de la donnée D 1 avec une donnée D 2 et le module (28) de sécurisation comporte un circuit (160) de calcul du code C rest-t à partir des codes C 1 et C 2 et sans utiliser le résultat D res-p , ce circuit de calcul comportant : - un étage d'additionneurs comportant, pour chaque paire de bits des codes C 1 et C 2 à additionner, un additionneur AD p , où l'indice p est le numéro d'ordre des deux bits des codes C 1 et C 2 à additionner par cet additionneur, ce numéro d'ordre variant de zéro à 2 d -1, chaque additionneur AD p comportant : - une première (170), une deuxième (171) et une troisième (172) entrées, les première et deuxième entrée étant destinée à recevoir, respectivement, le bit du code C 1 et et le bit du code C 2 à additionner, - une première sortie (174) délivrant le résultat a.b, où : - "a" et "b" sont les valeurs reçues, respectivement, sur les première, et deuxième entrées, et - le symbole "." désigne l'opération logique "ET", - une deuxième sortie (175) délivrant le résultat a+b, où le symbole "+" désigne l'opération logique "OU", - une troisième sortie (176) délivrant le résultat a XOR b XOR c, où "c" est la valeur reçue sur la troisième entrée (172) et XOR est le symbole de l'opération logique "OU EXCLUSIF", la concaténation des bits délivrés sur les troisièmes sorties des différents additionneurs AD p de l'étage d'addition formant le code C res-t , - une unité (164) à retenue anticipée comportant une entrée sur laquelle est reçue la clé α de permutation, cette unité à retenue anticipée étant apte à déterminer les valeurs des troisièmes entrées (172) des additionneurs de l'étage d'additionneurs sur lesquelles une retenue doit être délivrée à partir des résultats délivrés sur les première (174) et deuxième (175) sorties de chaque additionneur et à partir des paramètres α j,q , de la clé α reçue sur son entrée. Microprocesseur selon la revendication 8, dans lequel : - l'unité (164) à retenue anticipée comporte pour chaque étage E q de la fonction F α , un étage EA q comportant des composants CA αj,q , chaque composant CA αj,q étant associé à une transposition respective T αj,q de l'étage E q , - les composants CA αj,q des étages EA 0 à EA NbE-2 étant tous structurellement identiques les uns aux autres et comportant chacun une première (180), une deuxième (181), une troisième (182), une quatrième (183), une cinquième (184) et une sixième (185) entrées et une première (188), une deuxième (189), une troisième (190) et une quatrième (191) sorties : - la première sortie délivrant le résultat (G r +P r .G l ).k+(G l +P l .G r ).k', où : - G r , P r , G l , P l et k sont les valeurs reçues, respectivement, sur les première, deuxième, troisième, quatrième et sixième entrées de ce composant, - le symbole "+" désigne l'opération logique "OU", - le symbole "." désigne l'opération logique "ET, et - le symbole " ' " désigne l'opération logique "NON", - la deuxième sortie (189) délivrant le résultat P l .P r , - la troisième sortie (190) délivrant le résultat c i .k'+(G l +P l .c i ).k, où c i est la valeur reçue sur la cinquième entrée, - la quatrième sortie délivrant le résultat c i .k+(G r +P r .c i ).k', - le composant CA αj,NbE-1 de l'étage EA NbE-1 comporte une première, une deuxième, une troisième, une quatrième, une cinquième et une sixième entrées et une première et une deuxième sorties : - la première sortie délivrant le résultat c i .k'+(G l +P l .c i ).k, où c i est la valeur reçue sur la cinquième entrée, - la deuxième sortie délivrant le résultat c i .k+(G r +P r .c i ).k', - les première (180) et deuxième (181) entrées de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux première (174) et deuxième (175) sorties de l'additionneur AD 2j , où l'additionneur AD 2j est l'additionneur AD p dont l'indice p est égal à 2j, - les troisième (182) et quatrième (183) entrées de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux première et deuxième sorties de l'additionneur AD 2j+1 , où l'additionneur AD 2j+1 est l'additionneur AD p dont l'indice p est égal à 2j+1, - les troisième (190) et quatrième (191) sorties de chaque composant CA αj,0 de l'étage EA 0 sont raccordées, respectivement, aux troisième entrées (172), respectivement, des additionneurs AD 2j et AD 2j+1 , - pour q supérieur à zéro, les première (180) et deuxième (181) entrées de chaque composant CA αj,q de l'étage EA q sont raccordées, respectivement, aux première (188) et deuxième (189) sorties du composant CA α2j,q-1 de l'étage EA q-1 , - pour q supérieur à zéro, les troisième (182) et quatrième (183) entrées de chaque composant CA αj,q de l'étage EA q sont raccordées, respectivement, aux première (188) et deuxième (189) sorties du composant CA α(2j+1),q-1 de l'étage EA q-1 , - pour q supérieur à zéro, les troisième (190) et quatrième (191) sorties de chaque composant CA αj ,q de l'étage EA q sont raccordées, respectivement, aux cinquième entrées (184), respectivement, des composants CA α2j,q-1 et CA α(2j+1),q-1 , - la sixième entrée de chaque composant CA αj,q est apte à recevoir le paramètre α j,q . Microprocesseur selon l'une quelconque des revendications précédentes, dans lequel : - l'unité arithmétique et logique est apte à exécuter une instruction logique qui, lorsqu’elle est exécutée, 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 le registre R res-p , où le symbole "&" désigne l'opération booléenne, et - le microprocesseur est configuré pour réaliser les opérations 1) à 4) pour cette instruction logique et, lors de l'exécution de l'opération 3), calculer le code C res-t à l'aide de la relation suivante : C res-t = C 1 & C 2 & … &C n . Microprocesseur selon l'une quelconque des revendications précédentes, dans lequel l'opération arithmétique est choisie dans le groupe composé d'un décalage de bits, d'une rotation de bits et d'une addition.