Domaine technique auquel se rapporte l'invention
La présente invention concerne le domaine de la cryptographie.
Elle concerne plus particulièrement un procédé de traitement cryptographique de données, ainsi qu’un programme d’ordinateur et une entité électronique associés. L’invention s’applique particulièrement avantageusement dans le cas où l’on souhaite mettre en œuvre un processus de détermination de l’inverse dans un corps fini dans une entité électronique comprenant des moyens de mémorisation de taille limitée.
Arriere-plan technologique
Certains algorithmes de traitement cryptographique de données prévoient d’associer chaque octet de données à un élément d’un corps fini à 256 éléments (couramment noté F256) de sorte que le traitement des données (par exemple pour le chiffrement ou le déchiffrement des données) puisse ainsi être effectué au moyen d’opérations dans ce corps fini.
Certains traitements ainsi effectués impliquent la mise en œuvre d’un processus de détermination de l’inverse pour la multiplication (ou inversion) d’un tel élément dans le corps fini F25&, comme c’est le cas par exemple pour l’application des fonctions dites boîtes-S (en anglais : "S-box") dans certaines implémentations de l’algorithme AES ou de l’algorithme SEED.
Objet de l’invention
Dans ce contexte, la présente invention propose un procédé de traitement cryptographique de données, dans lequel un octet de données est associé à un premier élément (noté x) d’un corps fini à 256 éléments (noté F256 dans la suite) et dans lequel un traitement dudit octet utilise un processus de détermination de l’inverse (ou inversion) du premier élément dans ledit corps fini à 256 éléments, caractérisé en ce que le processus de détermination de l’inverse comprend les étapes suivantes : - détermination d’un second élément du corps fini à 256 éléments égal au premier élément élevé à la puissance 17 (soit : x17) dans le corps fini à 256 éléments ; - détermination d’un élément d’un corps fini (noté Fi6 dans la suite) à 16 éléments associé au second élément par une bijection (notée φ dans la suite) ; - détermination de l’inverse du second élément en fonction de l’élément du corps fini à 16 éléments ; - obtention de l’inverse du premier élément sur la base de l’inverse du second élément.
On a en effet remarqué (comme cela est expliqué plus en détail dans la description ci-dessous) que le second élément (égal à x17) fait partie d’un sous-ensemble E du corps fini F256 ne comprenant que 16 éléments, dont chacun peut donc être associé à un élément du corps fini Fie au moyen de la bijection φ. L’inverse du second élément ne peut donc avoir que 16 valeurs possibles dans F25q et l’étape de détermination de l’inverse du second élément peut donc être mise en œuvre par des moyens très simple, comme par exemple la lecture dans une table de correspondance à une position donnée par l’élément susmentionné du corps fini Fie.
On peut prévoir en outre que l’étape de détermination du second élément comprend une étape de détermination d’un troisième élément égal au premier élément élevé à la puissance 16 (c’est-à-dire égale à x16) et/ou que l’étape d’obtention de l’inverse du premier élément comprend une étape de détermination du produit (par multiplication) du troisième élément et de l’inverse du second élément, ce qui permet de réutiliser dans la quatrième étape du processus défini ci-dessus un résultat obtenu au cours de la première étape de ce processus.
En effet, le produit du troisième élément (égal à x16) et de l’inverse du second élément (cet inverse valant (x17)'1 = (x17)14 comme expliqué plus loin) vaut x16.(x17)14=x254=x'1 (ces calculs s’entendant dans le corps fini F2sq comme expliqué dans la suite) ; ce produit permet donc bien d’aboutir à l’inverse du premier élément x.
Le procédé cryptographique peut en outre comporter une ou plusieurs des caractéristiques optionnelles listées ci-dessous : - l’octet est traité sous forme masquée (par exemple par masquage au moyen de l’application d’une fonction de "ou exclusif') ; - le procédé comprend une étape de tirage d’un nombre aléatoire parmi un sous-ensemble (noté E ci-dessus) du corps fini à 256 éléments formé d’éléments égaux à un élément quelconque élevé à la puissance 17 (c’est-à-dire un sous-ensemble formé d’éléments z tels que z=y17 avec y un élément quelconque du corps fini F2m) ; - le procédé comprend une étape de masquage du second élément au moyen du nombre aléatoire ; - l’inverse du premier élément est obtenu sous forme masquée ; - le traitement dudit octet est mis en oeuvre au cours d’un tour d’algorithme cryptographique ; - l’algorithme cryptographique est de type SEED ou AES ; - le processus de détermination de l’inverse fait partie des opérations utilisées pour mettre en œuvre une boîte-S prévue dans l’algorithme cryptographique ; - l’algorithme cryptographique est un algorithme de chiffrement ou un algorithme de déchiffrement. L’invention propose également un programme d’ordinateur comprenant des instructions exécutables par un processeur et adaptées à mettre en œuvre un procédé tel que proposé ci-dessus lorsque ces instructions sont exécutées par le processeur. L’invention propose en outre une entité électronique de traitement cryptographique de données, comprenant un module de traitement d’un octet de données associé à un premier élément d’un corps fini à 256 éléments, le module de traitement étant conçu pour mettre en œuvre un processus de détermination de l’inverse du premier élément dans ledit corps fini à 256 éléments, caractérisé en ce que le module de traitement comprend une unité de détermination d’un second élément du corps fini à 256 éléments égal au premier élément élevé à la puissance 17 dans le corps fini à 256 éléments ; une unité de détermination d’un élément d’un corps fini à 16 éléments associé au second élément par une bijection ; une unité de détermination de l’inverse du second élément en fonction de l’élément du corps fini à 16 éléments ; et une unité d’obtention de l’inverse du premier élément sur la base de l’inverse du second élément.
Une telle entité électronique peut comprendre une ou plusieurs des caractéristiques optionnelles mentionnées ci-dessus en termes de procédé.
Lorsque l’entité électronique comprend un processeur, le module de traitement et les unités précitées peuvent en pratique être réalisés par une combinaison d’éléments matériels et d’éléments logiciels. Ainsi, pour chaque module ou unité, l’entité électronique mémorise par exemple des instructions de logiciel exécutables par le processeur de l’entité électronique afin d’utiliser un élément matériel (par exemple une mémoire) et de mettre ainsi en oeuvre la fonctionnalité offerte par le module de traitement ou l’unité concernée.
Description detaillee d’un exemple de réalisation
La description qui va suivre en regard des dessins annexés, donnés à titre d’exemples non limitatifs, fera bien comprendre en quoi consiste l’invention et comment elle peut être réalisée.
Sur les dessins annexés : - la figure 1 représente schématiquement les éléments principaux d’une entité électronique au sein de laquelle est mise en œuvre l’invention ; - la figure 2 représente un exemple de procédé dans lequel l’entité électronique applique un algorithme cryptographique à des données ; et - la figure 3 représente un procédé de détermination de l’inverse utilisé au cours d’une étape de la figure 2.
La figure 1 représente schématiquement les éléments principaux d’une entité électronique 1 au sein de laquelle est mise en œuvre l’invention. Cette entité électronique est par exemple une carte à microcircuit, par exemple une carte à circuit intégré universelle (ou U ICC pour "Universal Integrated Circuit Caret'). En variante, il pourrait s’agir d’un élément sécurisé (ou SE pour "Secure Elément") -par exemple un microcontrôleur sécurisé, d’un dispositif électronique portatif (ou "hand-held electronic device" selon l’appellation anglo-saxonne) - par exemple un terminal de communication ou un passeport électronique, ou d’un ordinateur. L’entité électronique 1 comprend un processeur 2 (ici un microprocesseur), une mémoire vive 4 et une mémoire non-volatile réinscriptible 6 (par exemple de type EEPROM pour "Electrically Erasable and Programmable Read-Only Memory'). L’entité électronique 1 pourrait éventuellement comprendre en outre une mémoire morte. La mémoire vive 4 et la mémoire non-volatile réinscriptible 6 (ainsi que le cas échéant la mémoire morte) sont chacune liées au processeur 2 de sorte que le processeur 2 peut lire ou écrire des données dans chacune de ces mémoires.
Une de ces mémoires, par exemple la mémoire non-volatile réinscriptible 6, mémorise des instructions de programme d’ordinateur qui permettent la mise en œuvre de l’un au moins des procédés décrits ci-dessous en référence aux figures 2 et 3 lorsque ces instructions sont exécutées par le processeur 2.
Les mémoires 4, 6 stockent également des données représentatives de valeurs utilisées lors de la mise en oeuvre des procédés décrits ci-dessous. Par exemple, la mémoire non-volatile réinscriptible 6 mémorise une clé cryptographique K.
La mémoire vive 4 mémorise par ailleurs, par exemple au sein de variables, des données traitées au cours des procédés décrits ci-dessous. L’entité électronique 1 comprend en outre une interface de communication 8 avec des dispositifs électroniques externes. Dans le cas décrit ici où l’entité électronique 1 est une carte à microcircuit, l’interface de communication 8 comprend par exemple des contacts affleurant sur une face de la carte à microcircuit. En variante, l’interface de communication 8 pourrait être réalisée par un module de communication sans contact. De manière générale, l’interface de communication 8 peut être un module de communication (filaire ou sans fil) avec une autre entité électronique.
Le processeur 2 peut ainsi recevoir des données d de l’autre entité électronique via l’interface de communication 8 et émettre d’autres données, par exemple un résultat d’application d’un algorithme cryptographique (tel que celui décrit ci-dessous en référence à la figure 2) aux données d, à l’autre entité électronique via l’interface de communication 8.
Dans l’exemple qui suit, l’algorithme cryptographique appliqué est de type SEED. En variante, il pourrait par exemple s’agir d’un algorithme de type AES.
La figure 2 représente, sous forme de logigramme, un exemple de procédé d’application d’un algorithme cryptographique à des données reçues d.
Le procédé de la figure 2 débute à l’étape E2 par la réception de données d par l’entité électronique 1 (précisément par le processeur 2), via l’interface de communication 8, par exemple en provenance de l’autre entité électronique précitée.
Comme déjà indiqué, on décrit ici en tant qu’exemple un algorithme cryptographique de type SEED et on considère dans la suite que les données d ont une longueur égale à 128 bits. Lorsque les données reçues ont une longueur supérieure à 128 bits, ces données sont traitées par blocs de 128 bits, chaque bloc étant traité comme décrit ci-dessous. L’entité électronique 1 (c’est-à-dire par exemple le processeur 2, ou en variante un crypto-processeur distinct) procède alors (étape E4) à la génération d’un nombre aléatoire a0 (c’est-à-dire précisément à la mémorisation dans une variable a0 d’un nombre obtenu par tirage aléatoire ou pseudo-aléatoire). Dans l’exemple décrit ici, ce nombre aléatoire ao a une longueur égale à 128 bits.
Le processeur 2 peut ainsi procéder à l’étape E6 au masquage de la donnée reçue d au moyen du nombre aléatoire a0, en combinant ces nombres au moyen d’une opération de "ou exclusif' (également dénommée XOR ou "addition booléenne"), notée ici par le symbole ®.
On note d’la donnée masquée obtenue à l’étape E6 : d’ = d ® a0.
Le procédé de traitement de la donnée d reçue se poursuit ainsi comme décrit ci-dessous en manipulant (au moyen notamment d’opérations dans le corps fini F256) la donnée masquée d’de sorte que, même avec une donnée d’entrée d constante, les valeurs manipulées au cours du traitement varient d’une exécution de l’algorithme à l’autre afin de lutter contre les attaques par canal auxiliaire (en anglais : "side channel attacks").
On remarque à cet égard que l’entité électronique 1 mémorise en permanence (ici dans la mémoire vive 4) le masque courant appliqué à la donnée traitée afin de pouvoir retirer ce masque en fin de traitement (cf. étape E24), comme expliqué ci-dessous.
Le processeur 2 initialise ensuite (étape E8) à la valeur 1 un indice i désignant le tour (en anglais "round') courant.
Le processeur 2 détermine alors (étape E10) la sous-clé Kj relative au tour courant i, par exemple par dérivation à partir de la clé cryptographique K mémorisée dans la mémoire non-volatile 6 comme déjà indiqué. En pratique, la sous-clé Kj relative au tour i est par exemple obtenue à partir de la sous-clé Km relative au tour précédent (i-1), la sous-clé K-i relative au premier tour (i=1) étant quant à elle obtenue à partir de la clé cryptographique K (ou, autrement dit, en posant Ko = K).
Le processeur 2 applique à l’étape E12 le tour i (parfois dénommé "ronde" sur la base de l’expression anglaise "round') de l’algorithme cryptographique (ici l’algorithme SEED) à la donnée masquée d’, en utilisant la sous-clé K : le processeur 2 détermine le résultat G(Kj,d’) de l’application d’une fonction G (correspondant aux opérations effectuées au cours d’un tour) à la sous-clé Ki et à la donnée masquée d’.
Comme représenté en figure 2, le résultat G(Kj,d’) est ici mémorisé dans la variable d’ avec écrasement afin de limiter l’espace mémoire nécessaire au traitement effectué.
Le processeur 2 effectue également au cours de l’étape E12 un traitement du masque courant de sorte que le masque courant permette constamment de retrouver la donnée attendue d à partir de la donnée masquée d’.
Autrement dit, si on note aM le masque en entrée d’un tour i et a, le masque en sortie (le masque appliqué en entrée du premier tour étant effectivement ao), les traitements appliqués au masque sont tels que : ai 0 G(Kj,d’) = G(Ki, d’0aM).
Lorsque les traitements appliqués à la donnée (ici la donnée masquée d’) sont linéaires par rapport à l’addition booléenne, il suffit ainsi d’appliquer les mêmes traitements au masque courant. En revanche, pour un traitement non-linéaire par rapport à l’addition booléenne, un traitement particulier est nécessaire, comme cela est expliqué ci-dessous en référence à la figure 3 pour l’opération (non-linéaire) d’inversion.
Le processeur 2 détermine alors à l’étape E14 si l’indice i a atteint la valeur 15.
Dans la négative (flèche N), l’indice i est incrémenté à l’étape E16 et le procédé boucle à l’étape E10 pour effectuer le tour suivant de l’algorithme cryptographique.
Dans l’affirmative à l’étape E14 (flèche P), on procède au dernier tour comme suit.
La sous-clé K-|6 relative au dernier tour est dérivée à l’étape E18, de manière similaire à ce qui a été fait pour les autres sous-clés à l’étape E10.
Le processeur 2 applique alors à l’étape E20 le dernier tour de l’algorithme cryptographique, ici en appliquant une fonction H à la donnée masquée d’au moyen de la sous-clé Ki6.
Le résultat H(K16,d’) du dernier tour est mémorisé dans la variable d’ avec écrasement.
Le processeur 2 traite par ailleurs au cours de l’étape E20 le masque courant aïs, de manière comparable à ce qui a été expliqué plus haut à l’étape E12 : le masque a-ιβ en sortie du dernier tour est tel que : aie 0 H(K16,d’) = H(K16, d’0a15).
Après ce dernier tour, la variable d’contient le résultat de l’algorithme cryptographique, à ceci près que ce résultat est masqué par le masque courant (noté a16 en sortie du dernier tour).
Le processeur 2 procède à l’étape E22 au démasquage du résultat en appliquant le masque courant a16 au résultat masqué d’ au moyen d’une opération de "ou exclusif', ce qui permet d’obtenir le résultat e de l’algorithme cryptographique : e = d’® a-ie.
Le processeur 2 peut alors procéder à l’étape E24 à l’émission du résultat e via l’interface de communication 8, par exemple à destination de l’autre entité électronique précitée.
On décrit à présent en référence à la figure 3 un procédé de détermination de l’inverse (ou inversion) d’un élément x dans le corps fini à 256 éléments F2se, cet élément étant traité sous forme masquée comme expliqué ci-après.
Un tel procédé d’inversion fait partie des opérations sur le corps fini F256 effectuées lors du traitement prévu au cours d’un tour d’algorithme cryptographique (par exemple de type SEED ou AES) tel que décrit ci-dessus à l’étape E12 ou E20. Précisément, un tel procédé d’inversion fait par exemple partie des opérations utilisées pour mettre en œuvre les boîtes-S prévues dans de tels algorithmes cryptographiques. De telles opérations remplacent l’utilisation de tables de correspondance (en anglais "Look-Up Tables") lorsque l’on souhaite restreindre la taille mémoire nécessaire à la mise en œuvre de l’algorithme cryptographique.
Avant de décrire le procédé d’inversion proposé, on rappelle quelques éléments d’algèbre sur un corps fini à 2n éléments, en particulier sur le corps fini à 256 éléments F2se-
Comme déjà indiqué, on note ® l’addition sur le corps fini (qui correspond à l’addition booléenne, ou opération de "ou exclusif', ou encore XOR) et la multiplication sur le corps fini.
On note par ailleurs ici π la fonction élevant un élément y du groupe fini F256 à la puissance 16 : Tr(y) = y16.
La fonction π est linéaire par rapport à l’addition :
Tr(y®z) = (y0z)16 = y16 0 z16 = Tr(y) © tt(z). (On rappelle en effet que, dans ce type de corps, (x © y)2 = x2 © y2 car les autres termes du développement s’annulent : x.y ® y.x = x.y ® x.y = 0 par commutativité de la multiplication et du fait des propriétés de l’addition booléenne).
On remarque par ailleurs que l’ensemble E des éléments de F256 de la forme [y.TT(y)] (avec y élément de F256) est un corps fini à 16 éléments.
En effet, tout élément z de cet ensemble E s’écrit [y.TT(y)] et on a donc : z15 = [y.TT(y)]15 = y15.y240 = y255 = 1F où 1F est l’élément neutre pour la multiplication dans F256-
Il est donc possible de construire une bijection φ entre cet ensemble E et le corps fini à 16 éléments Fi6 et une fonction INV du corps fini F16 vers le corps fini F256 telles que pour tout élément z de l’ensemble E : INV((p[z]) = z'1 (avec z'1 = z14 puisque z15 = 1F).
La bijection φ correspond par exemple à la décomposition d’un élément z de l’ensemble E sur une base (u-i, u2, U3, U4) de cet ensemble E. Précisément, récriture binaire β4β3β2βι de <p(z) est telle que z = β^^ β-iu^ βιυ3+ β-iUi, où β4 est le bit de poids fort. (Autrement dit, chaque bit βι de l’élément φ(ζ) est la projection de z sur l’élément u, de la base.)
Pour ce faire, on peut par exemple en pratique choisir une base (u-ι, u2, u3, u4) telle que, pour chaque élément Uj de la base, il existe au moins une valeur j telle que : u, & 2j = 2j et uk & 2j = 0 pour k différent de i (où & est l’opérateur ET logique, en anglais "AND").
La projection d’un élément z de l’ensemble E sur un élément Uj de la base est alors simplement obtenue en effectuant l’opération logique : z & 2’ (où j est la valeur associée à l’élément u, comme indiqué au paragraphe précédent).
Dans le cas de l’algorithme SEED (du fait du polynôme minimal utilisé pour construire le corps fini F256 dans cet algorithme), on peut choisir par exemple : U1 = 0x01, u2 = 0x12, u3 = 0x66, u4 = 0x84 (la notation Ox indiquant que le nombre qui suit est exprimé sous forme hexadécimale).
Dans ce cas, la fonction INV est définie comme suit : INV(OxO) = 0x00, INV(0x1) = 0x01, INV(0x2) = 0xE3, INV(0x3) = 0x85, INV(0x4) = 0x75, INV(0x5) = 0x97, INV(0x6) = 0x96, INV(0x7) = 0x66, INV(0x8) = 0xE2, INV(0x9) = 0x13, INV(OxA) = 0x74, INV(OxB) = 0x67, INV(OxC) = 0x84, INV(OxD) = 0x12, INV(OxE) = 0xF1, INV(OxF) = OxFO. Les seize valeurs que peut prendre la fonction INV (comme il vient d’être indiqué pour l’exemple considéré ici) sont par exemple mémorisées (dans la mémoire non-volatile 6) dans l’ordre au sein d’une table de correspondance (de taille très réduite : seulement 16 octets). L’application de la fonction INV à un élément z consistera alors simplement à la lecture de l’élément en position z dans la table de correspondance.
On propose ici de déterminer l’inverse y"1 d’un élément y quelconque du corps fini F256 en utilisant la bijection φ, la fonction INV et l’égalité suivante : y-1=y254 = y16(yy16)14 c’est-à-dire de déterminer l’inverse d’un élément y comme suit : y'1 = TT(y).INV(cp[y.TT(y)]).
Dans les modes de réalisation où un masquage des valeurs manipulées est utilisé, comme dans le procédé décrit ci-dessous en référence à la figure 3, on prévoit en outre que la fonction INV intègre un masquage de la valeur obtenue en sortie par un masque r : INV(cp[z]) = z"1 ® r = z14 ® r.
Pour ce faire en pratique, on peut par exemple, dès que r est connu, calculer et mémoriser en mémoire vive 4 une table de correspondance modifiée pour tenir compte de la valeur courante de la variable r (sur la base de la table de correspondance précitée).
En variante, on peut mémoriser dans la mémoire non-volatile 6 une pluralité de tables de correspondance (précisément 256 tables) qui définissent chacune la fonction INV respectivement pour toutes les valeurs possible du masque r.
Le procédé de la figure 3 décrit à présent utilise cette solution pour déterminer l’inverse d’un élément x masqué en entrée par un masque r.
On décrit le processus d’inversion sous la forme d’un sous-programme mis en œuvre par le processeur 2.
Le processus d’inversion débute ainsi à l’étape E50 par la réception d’un élément x’ du corps fini F256 correspondant à un octet de donnée sous forme masquée et d’un élément r de F256 correspondant au masque courant. L’élément dont on cherche à déterminer l’inverse est ainsi l’élément x tel que : x = x’ ® r.
Le processeur 2 procède alors à l’étape E52 à la génération de deux nombres aléatoires m, m’ sur 8 bits, le nombre aléatoire m étant en outre élément de l’ensemble E mentionné plus haut. Pour obtenir en pratique le nombre aléatoire m dans l’ensemble E, on peut par exemple tirer un nombre aléatoire p dans l’ensemble F2sq, puis calculer p17 (qui est nécessairement dans l’ensemble E comme déjà expliqué). En variante, on peut tirer un nombre aléatoire sur 4 bits et utiliser ces 4 bits pour construire un élément de E, par exemple au moyen de la base (u-i, u2, u3, u4) mentionnée plus haut.
Le processeur 2 calcule ensuite à l’étape E54 la valeur r.TT(r®m’) et mémorise cette valeur dans une variable p.
Le processeur 2 initialise à l’étape E56 une variable T0 à la valeur TT(x’0m’).
Le processeur 2 initialise à l’étape E58 une variable Ti à la valeur To.x’.
Selon une variante de mise en œuvre possible pour les étapes E56 et E58, la valeur de la variable Ti à l’issue de l’étape E58 peut être obtenue comme suit en utilisant des tables log et alog comme décrit par exemple dans le document "A Fast and Provably Secure High-Order Masking of AES S-Box", de H. Kim, S. Hong et J. Lim, in Cryptographie Hardware and Embedded Systems - CHES 2011, LNCS, vol. 6917, pp. 95-107 : T0 = SWAP[log(x’0m’)] T2 = log(x’)
Ti = alog(To+T2+lTo+T2mod 255<To)&ZeroCase(x’0m’)&ZeroCase(x’), où SWAP correspond à l’échange du quadruplet de poids fort et du quadruplet de poids faible et où les fonctions 1c<d et ZeroCase sont définies comme suit : - 1c<d = 1 si C<D, 1c<d = 0 sinon ; - ZeroCase(a) = 0 si a = 0, ZeroCase(a) = OxFF si a est différent de 0.
Quoi qu’il en soit, le processus se poursuit à l’étape E60 à laquelle le processeur 2 masque la variable Ti au moyen de l’élément m’ (au moyen d’une opération de "ou exclusif').
La variable Ti vaut alors : ΐΎΐ’φχ’.π(χ’φιτΓ).
Le processeur 2 initialise à l’étape E62 une variable T3 avec la valeur TT(r0m’) et, à l’étape E64, une variable T4 avec la valeur T3.x’.
Dans la variante mentionnée ci-dessus, les étapes E62 et E64 peuvent être remplacées par : T3 = log[TT(r0m’)] T4 = alog(T3+T2+1T3+T2 mod 255<T3)&ZeroCase[TT(r0m’)]&ZeroCase(x’), où T2 vaut log(x’) comme mentionné ci-dessus dans le cadre de la variante envisageable.
Dans les deux cas décrits, le processeur 2 mémorise à l’étape E66 la somme booléenne de Ti et T4 dans la variable T2 : T2 = Ti®T4 (avec écrasement de la valeur précédente de cette variable).
La variable T2 vaut alors : x’.TT(r®m’) 0 m’® x'.ïï(x’®m’).
Le processeur 2 mémorise ensuite à l’étape E68 dans la variable T-ι la valeur T0.r (avec écrasement de la valeur précédemment mémorisée), puis combine à l’étape E70 la variable T-ι à la variable T2 par somme booléenne : T2 = T 2®^.
Dans le cadre de la variante déjà mentionnée, l’étape E68 peut être remplacée par le calcul suivant :
Ti = alog[log(r)+T0+1iog(r)+Tomod 255<To]&ZeroCase(x’®m’)&ZeroCase(r), où T0 vaut SWAP[log(x’®m’)] comme indiqué ci-dessus dans le cadre de cette variante.
Le processeur 2 applique à l’étape E72 successivement les valeurs m, p et m’ à la variable T2 au moyen d’opérations de "ou exclusif' de sorte que la variable T2 vaut alors : m © p © m’ φ Γ.ττ(χ’φηΊ’) © x’.TT(r®m’) © m’ © χ’.π(χ’φΓΤΐ’).
En utilisant la linéarité de la fonction et le fait que r®x’ = x, on obtient : T2 = m © x.tt(x).
Les étapes E54 à E72 ont donc permis de déterminer l’élément x.tt(x), c’est-à-dire l’élément x élevé à la puissance 17, ici sous forme masquée par le masque m. Un tel élément fait partie de l’ensemble E comme expliqué plus haut (même sous forme masquée puisque le masque m a été choisi dans l’ensemble E, comme déjà indiqué).
Au cours de ces étapes, le masque courant a également évolué : la masque en entrée (étape E50) vaut comme déjà indiqué r ; le masque en sortie de l’étape E72 vaut m.
Le processeur 2 applique à l’étape E74 la bijection φ (définie plus haut) à la valeur mémorisée dans la variable T2 et mémorise le résultat (qui vaut donc cp[m®x.TT(x)], soit entre 0 et 15) dans la variable T2 (avec écrasement de la valeur précédente).
Le processeur 2 applique à l’étape E76 la fonction INV (définie plus haut) à la valeur mémorisée dans la variable T2, ce qui est réalisé comme décrit ci-dessus en lisant, dans la table de correspondance susmentionnée, l’élément mémorisé à la position indiquée par la variable T2. L’élément lu est mémorisé dans la variable T2 avec écrasement de la valeur précédente.
La variable T2 vaut alors : INV((p[m®x.Tr(x)]), soit [ηηφχ.ττ(χ)]14 ® r d’après les explication données plus haut.
Dans la variante envisagée ci-dessus où on utilise des tables log, la table de correspondance permet par exemple d’obtenir directement la valeur de log associée à l’inverse (soit INV((p[z]) = log(z'1) avec la notation utilisée plus haut).
Le processeur 2 initialise alors une variable I avec la valeur de la variable Ti (étape E78), qui vaut γ.ττ(χ’®ιύι’) suite à l’étape E68 décrite plus haut, masquée par le nombre aléatoire m’ (au moyen d’une opération de "ou exclusif’).
Le processeur 2 mémorise par ailleurs (étape E80) dans la variable T4 (avec écrasement de la valeur précédente) la valeur T2.T3 (la valeur de T3 ayant été déterminée à l’étape E62 et valant ainsi TT[r®m’]).
Dans la variante mentionnée ci-dessus, l’étape E80 peut être remplacée par : T4 = alog(T2+T3+1T3+T2 mod 255<T3)&ZeroCase[TT(r®m’)]&ZeroCase(r®[x.TT(x)]14).
Le processeur 2 applique alors (étape E82) cette variable T4 à la variable I au moyen d’une opération de "ou exclusif' (c’est-à-dire que la variable I est remplacée par l®T4).
Le processeur 2 mémorise alors à l’étape E84 la valeur To.T2 dans la variable T4 (avec écrasement de la valeur précédente). On rappelle que la valeur T0 résulte de l’étape E56 et vaut TT(x’®m’) ; la valeur T2 résulte quant à elle de l’étape E76 décrite ci-dessus.
Dans la variante mentionnée ci-dessus, l’étape E84 peut être remplacée par : T4 = alog(To+T2+1To+T2 mod 255<To)&ZeroCase[TT(x’0m’)]&ZeroCase(r®[x.TT(x)]14).
Le processeur 2 applique alors (étape E86) cette nouvelle valeur de la variable T4 à la variable I au moyen d’une opération de "ou exclusif' (c’est-à-dire que la variable I est remplacée par I0T4).
Le processeur 2 applique enfin (étape E88) la valeur p déterminée à l’étape E54 (p = r.TT[r®m’]) à la variable I au moyen d’une opération de "ou exclusif' (c’est-à-dire que la variable I est remplacée par I0p).
Grâce aux opérations qui précèdent, la variable I contient la valeur : m’ φ ττ(χ).[χ.π(χ)]14, soit, d’après les propriétés rappelées plus haut : I = m’ 0x1.
On a ainsi pu déterminer l’inverse de l’élément x, cet inverse étant ici masqué par le masque m’ généré à l’étape E52.