Brevet FR2998434A1 — publié le 20140523

Procédé de traitement cryptographique comprenant une utilisation d'une fonction booléenne adjointe, produit programme d'ordinateur et dispositif correspondants 1. DOMAINE DE L'INVENTION Le domaine de l'invention est celui de la cryptographie. Plus précisément, la présente technique permet de protéger (contre des attaques par canaux cachés) des données sensibles stockées dans un dispositif électronique, qui sont manipulées lors d'une étape de détermination de l'image d'une donnée sensible via l'utilisation d'une fonction booléenne (comme une fonction de hachage par exemple). Dès lors, la présente technique peut-être appliquée pour sécuriser un dispositif électronique (notamment les cartes à puce) devant mettre en oeuvre des procédés de traitement cryptographique comprenant l'utilisation d'une fonction booléenne, et qui sont, de par leurs nature, sensibles aux attaques par canaux cachés. 2. ARRIÈRE-PLAN TECHNOLOGIQUE On s'attache plus particulièrement dans la suite de ce document à décrire la problématique existante lors de l'utilisation d'une fonction de hachage, dans un dispositif électronique. L'invention ne se limite bien sûr pas à ce type de fonctions, mais présente un intérêt pour protéger toute fonction booléenne devant faire face à une problématique proche ou similaire. L'usage des fonctions de hachages dans le domaine de la cryptographie est très répandu. En effet, de telles fonctions sont utilisées entre autres pour faciliter la mise en oeuvre de techniques de signature électronique, ainsi que des procédés d'authentification. Pour garantir un niveau de sécurité suffisant, les fonctions de hachage doivent respecter différents critères bien définis (notamment elles doivent être résistantes aux collisions, et ne doivent pas présenter de vulnérabilités vis-à-vis d'un attaque sur la première préimage,...). Ces critères sont généralement bien respectés car pris en compte lors de la conception d'une fonction de hachage (comme ce fut le cas lors de la sélection par l'organisme américain « NIST » (pour « National Institute of Standards and Technology », ou « Institut national des normes et de la technologie » en français) de la fonction de hachage nommée SHA-3. Cependant, il convient de noter qu'une fonction de hachage, lorsqu'elle est exécutée sur un dispositif électronique, peut-être vulnérable aux attaques par canaux cachés (que cela soit vis-à-vis des attaques par injection de fautes, ou vis-à-vis des attaques par analyse de paramètres physique (consommation de courant, rayonnement électromagnétique, ...)). Par exemple, le chapitre 8 du document : « Cryptographic Hash Functions: Cryptanalysis, Design and Applications», de P. Gauravaram, qui est intitulé : « Side-Channel Cryptanalysis of MACs using Hash Functions » présente un état de l'art dans ce domaine technique. De même, le document « Side-channel Analysis of Six SHA-3 Candidates » de O. Benoît et al. , ainsi que le document « Practical Electromagnetic Template Attack on HMAC » de P.-A. Fougue et al. présentent différentes attaques par canaux cachés appliquées aux fonctions de hachage. Pour éviter que de telles attaques puissent compromettre des données sensibles, l'homme du métier utilise généralement des contremesures matérielles visant à perturber l'acquisition de données en générant par exemple un bruit important. Le document «An Evaluation of Hash Functions on a Power Analysis Resistant Processor Architecture » de S. Hoerder et al. présente une telle architecture matérielle. Cependant un inconvénient majeur d'une telle technique réside dans le fait que l'activation de telles contremesures matérielles induit une augmentation importante de la consommation énergétique du dispositif électronique concerné. Une autre solution, développée dans le document « Differential Power Analysis of HMAC based on SHA-2, and Countermeasures » de R. McEvo et al. consiste à réaliser des circuits dédiés complexes permettant de réaliser des opérations de masquages qui nécessitent, en outre, l'utilisation de tables stockées en mémoire relativement grandes, ainsi qu'une succession d'opérations de conversions de masques relativement coûteuses (d'un point de vue du temps d'exécution, et de l'espace mémoire utilisé). Il convient de noter en outre que les techniques de l'art antérieur ne permettent pas de détecter une anomalie liée à la présence d'une erreur résultant d'une attaque par injection de fautes par exemple. L'invention, dans au moins un mode de réalisation, a notamment pour objectif de pallier ces différents inconvénients de l'état de la technique. 3. EXPOSÉ DE L'INVENTION Dans un mode de réalisation particulier de l'invention, il est proposé un procédé de traitement cryptographique comprenant une étape d'exécution d'une fonction booléenne sur au moins une donnée stockée dans un registre d'un dispositif électronique, ladite étape d'exécution d'une fonction booléenne délivrant un premier résultat et ladite fonction booléenne étant définie par au moins un opérateur booléen. Le procédé est remarquable en ce qu'il comprend : - une étape d'obtention d'un nombre aléatoire h1; - une étape de modification réversible de ladite au moins une donnée par une application d'une autre fonction paramétrée par ledit nombre aléatoire h1, délivrant une donnée modifiée ; - une étape de modification dudit au moins un opérateur booléen en fonction dudit nombre h1, délivrant une fonction adjointe ; - une étape d'exécution de ladite fonction adjointe sur ladite donnée modifiée, délivrant un deuxième résultat correspondant à une application de ladite autre fonction audit premier résultat. Ainsi, le principe général de l'invention consiste à modifier un ou plusieurs opérateurs booléens qui définissent une fonction booléenne, afin d'obtenir une fonction booléenne adjointe. Une telle fonction booléenne adjointe permet, lorsqu'elle est appliquée à une donnée modifiée, d'obtenir un résultat que l'on aurait pu obtenir en appliquant la fonction booléenne à une donnée (délivrant le premier résultat) puis en réalisant l'étape de modification sur le premier résultat. Ainsi, l'étape de modification étant réversible, il est possible d'obtenir le premier résultat d'une autre manière que via l'utilisation directe de la fonction booléenne, et dépendante d'un nombre aléatoire permettant ainsi d'empêcher la réussite d'une attaque par canaux cachés. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite étape d'exécution d'une fonction booléenne est remplacée par ladite étape d'exécution de ladite fonction adjointe. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite étape d'exécution d'une fonction booléenne est réalisée concomitamment avec ladite étape d'exécution de ladite fonction adjointe. Ainsi, on peut détecter qu'une attaque par injection de fautes a été réalisée. Selon un mode de réalisation, le dispositif électronique comprend une architecture multi-coeur lui permettant de réaliser en parallèle l'étape d'exécution d'une fonction booléenne, et l'étape de d'exécution de la fonction adjointe. Il suffit ensuite de comparer les résultats obtenus pour détecter si une anomalie résultant de la présence d'une erreur (induite par la réalisation d'une attaque par injection de fautes, ou s'il agit d'une erreur transitoire pouvant apparaître suite à une perturbation de l'environnement, ou encore une erreurs causée par un vieillissement prématuré du dispositif électronique) s'est produite. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite fonction booléenne est définie par une pluralité d'opérateurs booléens. Selon un aspect particulier, un tel procédé est remarquable en ce qu'il comprend en outre une étape de détermination du résultat d'une opération entre ledit deuxième résultat et une donnée fonction dudit nombre aléatoire h1 délivrant ledit premier résultat. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite étape de modification dudit au moins un opérateur booléen comprend au moins l'une quelconque des étapes suivantes : - une étape de modification d'au moins un opérateur unaire, chaque opérateur unaire prenant une première variable en entrée, et délivrant une deuxième variable en sortie ; - une étape de modification d'au moins un opérateur binaire, chaque opérateur binaire prenant une troisième et une quatrième variable en entrée et délivrant une cinquième variable en sortie. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite autre fonction est une opération de « ou » définie par l'équation suivante X* = cp hi(X) = X e h1, où X est ladite au moins une donnée, et X*est ladite donnée modifiée. Ainsi, une telle fonction permet de garantir la réversibilité de l'étape de modification. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite étape de modification d'au moins un opérateur unaire comprend au moins l'une quelconque des étapes suivantes : - une étape de transformation d'un opérateur de décalage binaire à droite de n1 bits, noté SHRiii(.), avec nl un nombre entier, en un premier opérateur adjoint SHR7,1*(.) vérifiant une première équation fonctionnelle : SHRiii*(.) = SHR7,1(.) ED [hi ED SHRiii (hi)] ; - une étape de transformation d'un opérateur de décalage gauche à droite de n2 bits, noté SH/1,20, avec n2 un nombre entier, en un deuxième opérateur adjoint SHL,,,*(.) vérifiant une deuxième équation fonctionnelle : SHL',*(.) = SHL',(.) (1)[h1 eSHL',(hi)] ; - une étape de transformation d'un opérateur de rotation binaire à droite de n3 bits, noté RotR',(.), avec n3 un nombre entier, en un troisième opérateur adjoint RotR,3* 0, vérifiant une troisième équation fonctionnelle : RotR7,3*(.) RotR,3 (. )1$ [h1 El) RotR7,3(h1)] ; - une étape de transformation d'un opérateur de rotation binaire à gauche de n4 bits, noté Rot1,74(.), avec n4 un nombre entier, en un quatrième opérateur adjoint RotLi,;(.), vérifiant une quatrième équation fonctionnelle : RotL':(.) (.)ED [h1 eRot1m4(14)]. Ainsi, lorsque de tels opérateurs unaires adjoints, notés opi*(),..., 0P4*0, correspondant respectivement au premier, deuxième, troisième et quatrième opérateur adjoint des opérateurs opi op4 0 , prennent chacun en entrée une donnée u* = u ED h1, ils vérifient les relations suivantes : opi*(u*) = opi(u) ED h1 pour , un entier compris entre 1 et 4. Une utilisation de tels opérateurs adjoints permet de protéger le dispositif électronique contre la mise en oeuvre d'attaques par canaux cachés. De plus, de tels opérateurs adjoints ne nécessitent que peu de modifications des opérateurs, en comparaison avec les techniques de l'art antérieur. En outre, lorsque ledit nombre aléatoire h1 est obtenu, suite à l'étape d'obtention, il est possible de réaliser une étape de détermination d'au moins un des nombres suivants : SHR',(hi), [h1 S Ln2(hi), EH 51-142 (hi) (1) RotRn3(h1) 1, [hi E) RotLii4(h1)], RotL74(h1) et RotRn3(h1) . Ainsi, il est possible d'accélérer le temps d'exécution de la fonction adjointe en évitant de devoir déterminer de tels nombres au cours de l'exécution de la fonction adjointe, mais en le faisant au préalable d'une telle exécution. Dans une variante, l'étape de détermination d'au moins un des nombres est remplacée par une étape d'obtention (via la lecture dans une zone mémoire par exemple) d'au moins un des nombres susmentionnés. Ainsi, on évite au dispositif électronique de réaliser de nombreuses opérations. Selon un aspect particulier, un tel procédé est remarquable en ce ladite étape de modification d'opérateurs binaires comprend au moins l'une quelconque des étapes suivantes : - une étape de transformation d'un opérateur de « ou » exclusif, xor(. , .), en un cinquième opérateur adjoint xor* (. , .) vérifiant une cinquième équation fonctionnelle : xor*(.,.) = xor(. , .) ED ; - une étape de transformation d'un opérateur « et » logique, and(. , .), en un sixième opérateur adjoint and* (. , .) vérifiant une sixième équation fonctionnelle : and* (. , .) = and(. ,.) ED xor( , .) A ; - une étape de transformation d'un opérateur « ou» inclusif , or(., .), en un septième opérateur adjoint or* (. , .) vérifiant une septième équation fonctionnelle : or* (. , .) = or(. , .) ED xor(., .) A h; - une étape de transformation d'un opérateur d'addition arithmétique, Add(. , .), en un huitième opérateur adjoint Add*(.,.) vérifiant une huitième équation fonctionnelle : Add* (. , .) = [xor(. , .) + S H Li(and* (. , .)(1) h1] (D hl. Ainsi, lorsque de tels opérateur sbinaires adjoints, notés op5*(.4,..., 0P8*(,), correspondant respectivement au cinquième, sixième, septième et huitième opérateur adjoint des opérateurs op5 op8 (.,.) , prennent chacun en entrée des données u* = u ED h1 et v* = v E)h1, ils vérifient les relations suivantes : opi*(u*, v*) = opi(u,y) ® h1 pour i, un entier compris entre 5 et 8. Selon un aspect particulier, un tel procédé est remarquable en ce que, lorsque ladite fonction booléenne est une fonction de hachage SHA-1, ladite fonction booléenne comprend t étape d'utilisation de fonctions logiques ft, où t est un nombre entier compris entre 0 et 79, chaque fonction logique ft, prenant en entrée trois données de 32 bits, x, y et z et délivrant en sortie une donnée de 32 bits, et une fonction logique ft étant définie par les équations suivantes : - ft(x, y, z) = Ch(x, y, z) = (xAy)6)(ii\z), lorsque t est compris entre 0 et 19 ; - ft(x,y, z) = P arity(x, y, z) = x El3ly ez, lorsque t est compris entre 20 et 39 ou entre 60 et 79 ; - ft(x, y, z) = M aj (x, y, z) = (xAy)E1)(xAz)e(yAz), lorsque t est compris entre 40 et 59; et en ce que ladite étape de modification desdits opérateurs booléens comprend : - une étape de détermination de fonctions logiques adjointe ft* étant définies par les équations suivantes : - ft* (x, y, z) = Ch* (x, y, z) = Ch(x, y, z) e(y El)z)A hi, lorsque t est compris entre 0 et 19 ; - ft* (x , y, z) = Parity* (x, y, z) = Parity* (x, y, z), lorsque t est compris entre 20 et 39 ou entre 60 et 79 ; - ft* (x, y, z) = Maj* (x, y, z) = Maj(x, y, z), lorsque t est compris entre 40 et 59. Selon un aspect particulier, un tel procédé est remarquable en ce que ladite étape d'obtention d'un nombre aléatoire hl comprend une étape d'instanciation dudit nombre aléatoire h1 à zéro ou à une valeur correspondant à un nombre dont une représentation binaire comprend uniquement des bits égaux à un. Ainsi, en utilisant un nombre aléatoire défini de la sorte, il est possible de simplifier l'étape de modification dudit au moins un opérateur. Dans un autre mode de réalisation de l'invention, il est proposé un produit programme d'ordinateur qui comprend des instructions de code de programme pour la mise en oeuvre du procédé précité (dans l'un quelconque de ses différents modes de réalisation), lorsque ledit programme est exécuté sur un ordinateur. Dans un autre mode de réalisation de l'invention, il est proposé un composant électronique comportant des moyens adaptés à la mise en oeuvre du procédé précité (dans l'un quelconque de ses différents modes de réalisation). Plus précisément, selon une implémentation préférée, les différentes étapes du procédé selon l'invention sont mises en oeuvre par un logiciel ou programme d'ordinateur, ce logiciel comprenant des instructions logicielles destinées à être exécutées par un processeur de données d'un module relais selon l'invention et étant conçu pour commander l'exécution des différentes étapes de ce procédé. En conséquence, l'invention vise aussi un programme, susceptible d'être exécuté par un ordinateur ou par un processeur de données, ce programme comportant des instructions pour commander l'exécution des étapes d'un procédé tel que mentionné ci-dessus. Ce programme peut utiliser n'importe quel langage de programmation, et être sous la forme de code source, code objet, ou de code intermédiaire entre code source et code objet, tel que dans une forme partiellement compilée, ou dans n'importe quelle autre forme souhaitable. L'invention vise aussi un support d'informations lisible par un processeur de données, et comportant des instructions d'un programme tel que mentionné ci-dessus. Le support d'informations peut être n'importe quelle entité ou dispositif capable de stocker le programme. Par exemple, le support peut comporter un moyen de stockage, tel qu'une ROM, par exemple un CD ROM ou une ROM de circuit microélectronique, ou encore un moyen d'enregistrement magnétique, par exemple une disquette (floppy disc) ou un disque dur. D'autre part, le support d'informations peut être un support transmissible tel qu'un signal électrique ou optique, qui peut être acheminé via un câble électrique ou optique, par radio ou par d'autres moyens. Le programme selon l'invention peut être en particulier téléchargé sur un réseau de type Internet. Alternativement, le support d'informations peut être un circuit intégré dans lequel le programme est incorporé, le circuit étant adapté pour exécuter ou pour être utilisé dans l'exécution du procédé en question. Selon un mode de réalisation, l'invention est mise en oeuvre au moyen de composants logiciels et/ou matériels. Dans cette optique, le terme "module" peut correspondre dans ce document aussi bien à un composant logiciel, qu'à un composant matériel ou à un ensemble de composants matériels et logiciels. Un composant logiciel correspond à un ou plusieurs programmes d'ordinateur, un ou plusieurs sous-programmes d'un programme, ou de manière plus générale à tout élément d'un programme ou d'un logiciel apte à mettre en oeuvre une fonction ou un ensemble de fonctions, selon ce qui est décrit ci-dessous pour le module concerné. Un tel composant logiciel est exécuté par un processeur de données d'une entité physique (terminal, serveur, etc) et est susceptible d'accéder aux ressources matérielles de cette entité physique (mémoires, supports d'enregistrement, bus de communication, cartes électroniques d'entrées/sorties, interfaces utilisateur). De la même manière, un composant matériel correspond à tout élément d'un ensemble matériel (ou hardware) apte à mettre en oeuvre une fonction ou un ensemble de fonctions, selon ce qui est décrit ci-dessous pour le module concerné. Il peut s'agir d'un composant matériel programmable ou avec processeur intégré pour l'exécution de logiciel, par exemple un circuit intégré, une carte à puce, une carte à mémoire, une carte électronique pour l'exécution d'un micrologiciel (firmware), un élément de sécurité (ou « secure element » en anglais) utilisé dans le contexte de communication en champ proche (pour « Near Field Communication » en anglais), etc. Dans un autre mode de réalisation de l'invention, il est proposé un dispositif électronique apte à réaliser un traitement cryptographique comprenant des moyens d'exécution d'une fonction booléenne sur au moins une donnée stockée dans un registre dudit dispositif, lesdits moyens d'exécution d'une fonction booléenne délivrant un premier résultat et ladite fonction booléenne étant définie par au moins un opérateur booléen. Le dispositif électronique étant remarquable en ce qu'il comprend : - des moyens d'obtention d'un nombre aléatoire h1; - des moyens de modification réversible de ladite au moins une donnée par une application d'une autre fonction paramétrée par ledit nombre aléatoire h1, délivrant une donnée modifiée ; - des moyens de modification dudit au moins un opérateur booléen en fonction dudit nombre h1, délivrant une fonction adjointe ; - des moyens d'exécution de ladite fonction adjointe sur ladite donnée modifiée, délivrant un deuxième résultat correspondant à une application de ladite autre fonction audit premier résultat. Selon une variante, un tel dispositif électronique est remarquable en ce que les moyens d'exécution d'une fonction booléenne sont utilisés concomitamment avec lesdits moyens d'exécution de ladite fonction adjointe. 4. LISTE DES FIGURES D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description suivante, donnée à titre d'exemple indicatif et non limitatif, et des dessins annexés, dans lesquels : la figure 1(a) présente une étape d'exécution d'une fonction booléenne F sur une donnée X stockée dans un registre d'un dispositif électronique, selon l'état de la technique ; la figure 1(b) présente le principe général de la présente technique ; la figure 2(a) présente sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne qui est la fonction de hachage SHA-1 ; la figure 2(b) présente, sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne adjointe de la fonction de hachage SHA-1, selon un mode de réalisation de l'invention ; la figure 3(a) présente sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne qui est la fonction de hachage SHA-512 ; la figure 3(b) présente, sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne adjointe de la fonction de hachage SHA- 512, selon un mode de réalisation de l'invention ; la figure 4(a) représente, schématiquement, un dispositif de traitement de données dans lequel la présente invention est mise en oeuvre ; la figure 4(b) représente une carte à microcircuit qui constitue un exemple de dispositif de traitement de données conforme à l'invention tel que représenté à la figure 4(a). 5. DESCRIPTION DÉTAILLÉE Sur toutes les figures du présent document, les éléments et étapes identiques sont désignés par une même référence numérique. La figure 1(a) présente une étape d'exécution d'une fonction booléenne F sur une donnée X stockée dans un registre d'un dispositif électronique, selon l'état de la technique. Plus précisément, au cours d'un procédé de traitement cryptographique réalisé par un dispositif électronique, il est parfois nécessaire qu'une étape d'exécution d'une fonction booléenne F sur une donnée X stockée soit réalisée. Par exemple, dans le cadre de la mise en oeuvre d'une signature numérique, généralement on applique une fonction de hachage à une donnée X, et un procédé de signature est appliqué sur le résultat de l'application de la fonction de hachage, F(X), car la taille du résultat F(X) est généralement beaucoup plus petite que celle de la donnée X. De même, dans d'autres cryptosystèmes, on peut être amené à utiliser des fonctions de hachage en combinaison avec des clés cryptographiques lors de la mise en oeuvre d'un code d'authentification de message (comme par exemple, un « HMAC », de l'anglais « keyedhash message authentication code » pour « code d'authentification d'une empreinte cryptographique de message avec clé ». Cependant, une telle fonction, peut-être sensible aux attaques par canaux cachés (soit par analyse de données physiques générées par le dispositif électronique qui réalise une telle étape, soit en perturbant le comportement du dispositif électronique via une attaque par injection de fautes). La figure 1(b) présente le principe général de la présente technique. Plus précisément, selon un mode de réalisation, il est proposé une technique permettant d'empêcher la mise en oeuvre de telles attaques par canaux cachés lors de la détermination du résultat F(X). Une telle technique comprend : - une étape d'obtention d'un nombre aléatoire hl, dont une représentation binaire possède une taille de k bits, avec k un nombre entier ; - une étape 102 de modification de la donnée X en fonction dudit nombre aléatoire h.i, délivrant une donnée modifiée. Plus précisément une telle étape 102 vise à délivrer une donnée modifiée X* = (phi(X) = X Eri hivia l'utilisation d'une fonction paramétrée par le nombre aléatoire h1. Dans un autre mode de réalisation, on peut utiliser une autre fonction (phi; - une étape 103 de modification des opérateurs booléens définissant la fonction F, en fonction dudit nombre h1, délivrant une fonction adjointe F*. Ainsi, une fois l'étape 103 réalisée, on obtient une fonction adjointe F*, qui lorsqu'elle est appliquée à la donnée modifiée X*, délivre le résultat suivant : F*(X*) = (phi(F(X)). Ainsi, de part la définition de la fonction (phi dans le mode de réalisation présenté, on obtient F*(X*) = (phi (F(X)) = F(X) e h1. Par conséquent, pour obtenir le résultat attendu, à savoir F(X), il suffit d'appliquer l'inverse de la fonction (phi au résultat F*(X*). Dans le présent mode de réalisation, l'inverse de la fonction (phi correspond à la fonction (phi elle- même. Par conséquent, en appliquant la fonction (phi au résultat F*(X*) (i.e en déterminant (phi (F*(X*))), on obtient le résultat attendu. Ainsi, la présente technique vise à définir une fonction booléenne adjointe F*, en modifiant les opérateurs définissant la fonction booléenne F, et en modifiant la donnée d'entrée. Dans la suite, nous noterons, pour une variable ou une donnée u, la donnée modifiée u* définie comme étant égale à u* = (phi(u) = u e h1. L'Homme du métier pourra utiliser d'autres fonctions (phi que celle mentionnée précédemment. Il faut bien entendu ne pas confondre la notation F*, qui est une fonction adjointe, avec la notation u* qui est utilisée pour une variable. La figure 2(a) présente sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne qui est la fonction de hachage SHA-1. Une telle fonction de hachage SHA-1 prend en entrée, un message M prétraité de telle sorte qu'il comprend N bloc de données de 512 bits chacun, notés MM, ..,M(N). De plus, chaque bloc de donnée peut être décomposé en 16 blocs de données de 32 bits chacun. On peut alors écrire M = Me) ... Mi(.51) Il Mr) ... /les). Puis, dans une étape 201, le dispositif électronique exécute des instructions de code lui permettant d'obtenir des constantes (lues par exemple en mémoire ROM) lit,°), le, He), Hr), Hr). Ces constantes sont définies dans le document de standardisation FIPS-186-2 du NIST. On a le = 0x67452301, He) = Oxefcdab89, le) = 98badcfe, Hr) = 0x10325476, et H4°) = Oxc3d2e1f0. Dans une étape 202, on instancie une variable i, stockée dans un registre du dispositif électronique, à la valeur 1. Une telle variable va permettre de mettre en oeuvre un traitement itératif sur les blocs de données M(0. Dans une étape 203, on instancie une variable t, stockée dans un registre du dispositif électronique, à la valeur 0. Puis, dans une étape 204, on instancie une variable Wt, stockée dans un registre du dispositif électronique, de la manière suivante : - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle [0;15, alors on affecte à la variable Wt la valeur du bloc de données NO ; - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle [16; 791 alors on affecte à la variable Wt le nombre résultant de l'opération suivante : RotL1(wt_3 enw - t-8 ED Wt-14 ED Wt-16)- opération de la manière suivante : RotLi(xor(xor(xor(W .- - t--14,Wt-16),Wt-8), Wt-3)), où opérateur binaire "e', noté aussi « xor(.,.) », correspond à l'opérateur binaire de « ou » exclusif, et où l'opérateur unaire RotL1 correspond à une rotation binaire par la gauche de un bit. Dans une étape 205, la valeur de la variable t est comparée avec le nombre 79. Si la valeur de la variable t est différente du nombre 79, l'étape 206 consistant à incrémenter de un la variable t est exécutée, puis l'étape 204 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 207 d'instanciation de cinq variables : a,b,c,d et e est réalisée de la manière suivante : le dispositif électronique affecte à la variable a, la valeur de la donnée 14i-1) ; - le dispositif électronique affecte à la variable b, la valeur de la donnée le-1) ; le dispositif électronique affecte à la variable c, la valeur de la donnée 1-/i-1) ; le dispositif électronique affecte à la variable d, la valeur de la donnée lir) ; - le dispositif électronique affecte à la variable e, la valeur de la donnée 1-/,(4i-1) Puis, suite à l'étape 207, on réalise une étape 208 consistant à affecter à la variable t, la valeur nulle. On peut écrire cette Ensuite une étape de traitement 209 visant à modifier les valeurs des variables a,b,c,d et e est réalisée. Une telle étape de traitement 209 comprend : une étape de détermination d'une opération booléenne comprenant des opérations binaires et unaires définie par l'équation suivante : RotL5(a) + ft(b, c, d) + e + Kt + Wt, où l'opération « + » est une opération d'addition modulaire, avec un modulus égal à 232 , l'opération RotL5(.) est une opération de rotation binaire par la gauche de 5 bits, où la variable Kt correspond à une constante définie de la manière suivante : Kt = 0x5a827999 lorsque la variable t a une valeur comprise dans l'intervalle 110;1911, Kt = Ox6ed9ebal lorsque la variable t a une valeur comprise dans l'intervalle 1120; 391 Kt = Ox8f1bbcdc lorsque la variable t a une valeur comprise dans l'intervalle [[40; 591 et Kt = Oxca62cld6 lorsque la variable t a une valeur comprise dans l'intervalle [[60; 791 et où la fonction logique ft est définie par les équations suivantes : - ft(x , y, z) = Ch(x, y, z) = (xAy)EB(Az), lorsque t est compris entre 0 et 19 ; - ft(x, y, z) = Parity(x, y, z) = x ®y El)z, lorsque t est compris entre 20 et 39 ou entre 60 et 79 ; - ft(x, y, z) = Maj(x, y, z) = (xAy)EI)(xAz)e(yAz), lorsque t est compris entre 40 et 59. On peut formuler l'équation suivante RotL5(a) + ft(b, c, d) + e + Kt + Wt de la manière suivante : Add(RotL5(a),Add(ft(b, c, d), Add(e, Add(Kt,Wt)))). Le résultat d'une telle opération est stocké dans une variable T; une étape d'instanciation de la variable e avec la valeur de la variable d; une étape d'instanciation de la variable d avec la valeur de la variable c; une étape d'instanciation de la variable e avec la valeur de la variable d; une étape d'instanciation de la variable c avec le résultat de l'opération unaire suivante : RotL30(b) où l'opération RotL30(.) est une opération de rotation binaire par la gauche de 30 bits ; une étape d'instanciation de la variable b avec la valeur de la variable a ; une étape d'instanciation de la variable a avec la valeur de la variable T. Suite à l'étape de traitement 209, une étape 210 visant à comparer la valeur de la variable t avec la valeur 79 est effectuée. Si la valeur de la variable t est différente du nombre 79, l'étape 211 consistant à incrémenter de un la variable t est exécutée, puis l'étape 209 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape (i 212 d'instanciation de cinq variables : Ho) , (i), H2(i) ,(i) H4 est réalisée de la manière suivante : le dispositif électronique affecte à la variable Hô`), la valeur de la donnée Add(a,H,:çii-1)) = a + H(()i-1) mod 232 ; le dispositif électronique affecte à la variable la valeur de la donnée Add(b,111(.i-1)) = b + 11;.i-1) mod 232 ; le dispositif électronique affecte à la variable le la valeur de la donnée Add(c,Hr1)) = c + mod 232 ; le dispositif électronique affecte à la variable le, la valeur de la donnée Add(c1,14i-1)) = d + mod 232 ; et le dispositif électronique affecte à la variable le, la valeur de la donnée Add(e,e1)) = e + mod 232 . Puis, une étape 213 de comparaison entre la valeur de la variable i et le nombre N est réalisée visant à déterminer si l'ensemble des blocs de données du message M a été traité. Si la valeur de la variable i est différente du nombre N, l'étape 214 consistant à incrémenter de un la variable i est exécutée, puis l'étape 203 et suivantes sont à nouveau réalisées. Si la valeur de la variable i est égale est égale au nombre N, alors le résultat de la fonction de hachage SHA-1 correspond à la concaténation des valeurs des Hi(N), le, variables Hr), La présente technique permet de modifier la fonction de hachage SHA-1 pour obtenir une fonction de hachage adjointe du SHA-1 vérifiant la propriété de la figure 1(b). La figure 2(b) présente, sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne adjointe de la fonction de hachage SHA-1, selon un mode de réalisation de l'invention. Une telle fonction de hachage SHA-1 prend en entrée, un message M* modifié prétraité de telle sorte qu'il comprend N bloc de données de 512 bits chacun, notés M(1)*,..,M(N)* ainsi qu'un nombre aléatoire h1 (un tel nombre h1 peut être stocké au préalable en mémoire, sans devoir être ainsi passé en argument de la fonction de hachage adjointe) de 32 bits. Chaque bloc de donnée peut être décomposé en 16 blocs de données de 32 bits chacun. On peut alors écrire M* = Me)* ...11/11-5)* Il 10()* )* M 0 ... M 15 . Il convient de noter que conformément à la notation précédemment établie, on a Me)* = cp hi(e) = le) ED h1, ...m115)* = cphi(11/115)) = M01 e hi, MAN)* = p il = v(N) ®h 4(N )* = p )) = M(N) E h im) . 15 ies i. Puis, dans une étape 215, le dispositif électronique exécute des instructions de code lui permettant d'obtenir des constantes (lues par exemple en mémoire 15 ROM) HP)*, He)*, le, lir, He)* qui sont les constantes modifiées des constantes HP), He), le), Hr), le) mentionnées en lien avec la figure 2(a). Dans une étape 216, on instancie une variable i, stockée dans un registre du dispositif électronique, à la valeur 1. Une telle variable va permettre de mettre en oeuvre un traitement itératif sur les blocs de données M(0*. 20 Dans une étape 217, on instancie une variable t, stockée dans un registre du dispositif électronique, à la valeur O. Puis, dans une étape 218, on instancie une variable Wt, stockée dans un registre du dispositif électronique, de la manière suivante : - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est 25 compris dans l'intervalle 110;15, alors on affecte à la variable Wt la valeur du bloc de données Mi)* ; - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle 1116; 7911, alors on affecte à la variable Wt le nombre résultant de l'opération adjointe suivante: 30 RotLi* (xor* (xor* (xor* (Wt-14,Wt-16),Wt-8),Wt-3)), où les opérateurs binaires adjoints RotLi* et xor*(.,.) », sont conformes à la définition donnée précédemment. Dans une étape 219, la valeur de la variable t est comparée avec le nombre 79. Si la valeur de la variable t est différente du nombre 79, l'étape 220 consistant à incrémenter de un la variable t est exécutée, puis l'étape 218 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 221 d'instanciation de cinq variables : a,b,c,d et e est réalisée de la manière suivante : le dispositif électronique affecte à la variable a, la valeur de la donnée 1-iii".-1)* - le dispositif électronique affecte à la variable b, la valeur de la donnée Hi le dispositif électronique affecte à la variable c, la valeur de la donnée H2(`_1)* le dispositif électronique affecte à la variable d, la valeur de la donnée ; le dispositif électronique affecte à la variable e, la valeur de la donnée H4i-1)* Puis, suite à l'étape 221, on réalise une étape 222 consistant à affecter à la variable t, la valeur nulle. Ensuite une étape de traitement 223 visant à modifier les valeurs des variables a,b,c,d et e est réalisée. Une telle étape de traitement 223 comprend : une étape de détermination d'une opération booléenne adjointe définie par la relation suivante : Add* (RotL* 5(a), Add* (f* t(b, c, d), Add* (e, Add* (K* t,Wt)))) où la variable Kt* correspond à une constante modifiée définie de la variable Kt , mentionnée précédemment, et où la fonction logique ft* est définie par les équations suivantes : - ft* (x, y, z) = Ch* (x, y, z) = Ch(x, y, z) 9 (y ® z) A hi.), lorsque t est compris entre 0 et 19 ; - ft* (x, y, z) = Parity* (x, y, z) = Parity (x, y, z), lorsque t est compris entre 20 et 39 ou entre 60 et 79; - ft* (x, y, z) = Maj* (x, y, z) = Maj (x, y, z), lorsque t est compris entre 40 et 59. Le résultat d'une telle opération est stocké dans une variable U correspond à la valeur de T*, où Test défini en lien avec l'étape 209 ; une étape d'instanciation de la variable e avec la valeur de la variable d; une étape d'instanciation de la variable d avec la valeur de la variable c; une étape d'instanciation de la variable e avec la valeur de la variable d; une étape d'instanciation de la variable c avec le résultat de l'opération unaire adjointe suivante : RotL30*(b) où l'opération RotL30*(.) = RotL30 ED h1 RotL30 (h1); une étape d'instanciation de la variable b avec la valeur de la variable a ; une étape d'instanciation de la variable a avec la valeur de la variable U. Ainsi, en sortie de l'étape 223, chacune des cinq variables : a,b,c,d et e comprend les valeurs modifiées selon la fonction (phi des cinq variables a,b,c,d et e en sortie de l'étape 209. Suite à l'étape de traitement 223, une étape 224 visant à comparer la valeur de la variable t avec la valeur 79 est effectuée. Si la valeur de la variable t est différente du nombre 79, l'étape 225 consistant à incrémenter de un la variable t est exécutée, puis l'étape 223 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 226 d'instanciation des cinq variables : a,b,c,d et e est réalisée de la manière suivante : le dispositif électronique affecte à une variable la valeur de I - , déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (a, H1 _1)*) ; le dispositif électronique affecte à une variable la valeur de le*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add*(b, ; le dispositif électronique affecte à une variable la valeur de I-4i)*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (c, ; le dispositif électronique affecte à une variable la valeur de He, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (d, ; le dispositif électronique affecte à une variable la valeur de le*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (e , Puis, une étape 227 de comparaison entre la valeur de la variable i et le nombre N est réalisée visant à déterminer si l'ensemble des blocs de données du message M a été traité. Si la valeur de la variable i est différente du nombre N, l'étape 228 consistant à incrémenter de un la variable i est exécutée, puis l'étape 217 et suivantes sont à nouveau réalisées. Si la valeur de la variable i est égale est égale au nombre N, alors le résultat de la fonction de hachage adjointe du SHA-1 correspond à la concaténation des valeurs des variables H(r)*, Fe, Hel)* , HAN)*, On obtient donc le résultat R suivant : Hi,N)* Il ic*, Il H?)*, Il en* Il He)* avec 1-1J(N)* = H(N) ED hi, avec j E [[0; Dès lors, on peut écrire que R = H El) H1 où H = H0N) Il et H1= Il h1. Ainsi, on a SHA-1*(M*)= SHA -1 (M ) ED H1. Une fois que les étapes décrites dans la figure 2(b), pour obtenir le résultat de la fonction de hachage, il suffit de réaliser une étape de détermination du résultat de l'opération suivante : SHA - 1* (M*) El) H1. Enfin, il convient de remarquer que la présente fonction de hachage adjointe manipule exclusivement des données modifiées, i.e qui sont de la forme u hl. Ainsi, la présente technique permet d'empêcher qu'un attaquant puisse obtenir des informations sur des données sensibles. En outre, une telle technique permet de fournir une contremesure contre des attaques par injection de fautes, via par exemple, une étape de comparaison des résultats SHA - 1*(M*) (13, H1 obtenus pour des nombres aléatoires h1 différents. La figure 3(a) présente sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne qui est la fonction de hachage SHA-512. Une telle fonction de hachage SHA-512 prend en entrée, un message M prétraité de telle sorte qu'il comprend N bloc de données de 1024 bits chacun, notés M(1),..,M(N). De plus, chaque bloc de donnée peut être décomposé en 16 blocs de données de 64 bits chacun. On peut alors écrire M = ivip) m((iN) Puis, dans une étape 301, le dispositif électronique exécute des instructions de code lui permettant d'obtenir des constantes (lues par exemple en mémoire ROM) He), HI(.°), Hr), Hr), Hp), ; H'(0). Ces constantes sont définies dans le document de standardisation FIPS-186-2. On a HO = 0x6a09e667f3bcc908, HP) = bb67ae8584caa73b, le) = 3c6ef372fe94f82b, ( H30) = Oxa54ff53a5f1d36f1, et Hr). Ox510e527fade682d1, = 0x9 b05688c2b3e6c1f, le) = Ox1f83d9abfb4lbd6b, et = 0x5be0cd19137e2179. Dans une étape 302, on instancie une variable i, stockée dans un registre du dispositif électronique, à la valeur 1. Une telle variable va permettre de mettre en oeuvre un traitement itératif sur les blocs de données M(0. Dans une étape 303, on instancie une variable t, stockée dans un registre du dispositif électronique, à la valeur 0. Puis, dans une étape 304, on instancie une variable Wt, stockée dans un registre du dispositif électronique, de la manière suivante : - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle 110;15, alors on affecte à la variable Wt la valeur du bloc de données /V/i) ; - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle 1116; 7911, alors on affecte à la variable Wt le nombre résultant de l'opération suivante : a-1712(W Wt _7 + 0_512 (Ww 0 t-1s) " t-16 - On peut écrire cette opération de la manière suivante : wt-15/, " Add(ag12 f (Wt_2), Add(Wt_7, Add(0-5 12(V '. ' w _16))) " + ", noté aussi « Add(.,.) », correspond à l'opérateur d'addition arithmétique, via le modulus 264, et où l'opération 41-20 = RotR10 ED RotR8(.) El) SHR70, 0.p20 = RotR19(. )ED RotR61(.) ED SHR6 (. ). Dans une étape 305, la valeur de la variable t est comparée avec le nombre 79. où opérateur binaire Si la valeur de la variable t est différente du nombre 79, l'étape 306 consistant à incrémenter de un la variable t est exécutée, puis l'étape 304 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 307 d'instanciation de huit variables : a,b,c,d,e,f,g et h est réalisée de la manière suivante : le dispositif électronique affecte à la variable a, la valeur de la donnée 1-1,:()i-1) ; le dispositif électronique affecte à la variable b, la valeur de la donnée lir ; le dispositif électronique affecte à la variable c, la valeur de la donnée H2(i-1) ; le dispositif électronique affecte à la variable d, la valeur de la donnée le1) ; le dispositif électronique affecte à la variable e, la valeur de la donnée le-1) ; le dispositif électronique affecte à la variable f, la valeur de la donnée lir ; le dispositif électronique affecte à la variable g la valeur de la donnée 1-i6`-1) ; le dispositif électronique affecte à la variable h, la valeur de la donnée Hel) . Puis, suite à l'étape 307, on réalise une étape 308 consistant à affecter à la variable t, la valeur nulle. Ensuite une étape de traitement 309 visant à modifier les valeurs des variables a,b,c,d, e, f, g et h est réalisée. Une telle étape de traitement 309 comprend : une étape de détermination d'une opération booléenne comprenant des opérations binaires et unaires définie par l'équation suivante : h + E112(e) + Ch(e, f, g) + Kt512 + mit où l'opération « + » est une opération d'addition modulaire, avec un modulus égal à 264 , où l'opération E.12r. ..= j NROtRi4( ) ED ROtR18( ) El) ROtR41( ), où la variable leu correspond à une constante dont la valeur est décrite dans le document de standardisation F I PS-186-2; On peut formuler l'équation suivante h + E;.12(e) + Ch(e, f, g) + Kt. + 'vt de la manière suivante : Add(h,Add(Ei12(e),Add(Ch(e, f, g), Add(Kt512, Wt)))).Le résultat d'une telle opération est stocké dans une variable Ti; une étape de détermination d'une opération booléenne comprenant des opérations binaires et unaires définie par l'équation suivante : Eg12(0+ Maj(a, b, c) où l'opération e2(.) ) = ROtR28 0 EDRotR34(. ) ED RotR390. Le résultat d'une telle opération est stocké dans une variable T2; une étape d'instanciation de la variable h avec la valeur de la variable g; une étape d'instanciation de la variable g avec la valeur de la variable f; une étape d'instanciation de la variable f avec la valeur de la variable e; une étape d'instanciation de la variable e avec le résultat de l'opération binaire suivante : Add(d, T1); une étape d'instanciation de la variable d avec la valeur de la variable c; une étape d'instanciation de la variable c avec la valeur de la variable b; une étape d'instanciation de la variable b avec la valeur de la variable a; une étape d'instanciation de la variable a avec le résultat de l'opération binaire suivante : Add (T2, T1). Suite à l'étape de traitement 309, une étape 310 visant à comparer la valeur de la variable t avec la valeur 79 est effectuée. Si la valeur de la variable t est différente du nombre 79, l'étape 311 consistant à incrémenter de un la variable t est exécutée, puis l'étape 309 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 312 d'instanciation de huit variables : 10, le, le, Iii), le),10,10, le. est réalisée de la manière suivante : le dispositif électronique affecte à la variable 10, la valeur de la donnée Add(a, lai-l)) = a + 1-1,:()i-1) mod 264 ; le dispositif électronique affecte à la variable Iii), la valeur de la donnée Add(b, lel)) = b + I-1;.i-1) mod 2" ; le dispositif électronique affecte à la variable lii), la valeur de la donnée Add(c, le1)) = c + 1-1i-1) mod 2" ; le dispositif électronique affecte à la variable (i) la valeur de la donnée Add(d, Hel)) = d + 1-e-1) mod 264 ; le dispositif électronique affecte à la variable le, la valeur de la donnée Add(e, 1-151i-1)) = e + 1-151i-1) mod 264 . le dispositif électronique affecte à la variable He), la valeur de la donnée Add(f,11r)) = f + He-1) mod 2" . le dispositif électronique affecte à la variable 10, la valeur de la donnée Add(g, lir)) = g + Hel) mod 264 . le dispositif électronique affecte à la variable le, la valeur de la donnée Add(h,11;i-1)) = h + 11;i-1) mod 2" . Puis, une étape 313 de comparaison entre la valeur de la variable i et le nombre N est réalisée visant à déterminer si l'ensemble des blocs de données du message M a été traité. Si la valeur de la variable i est différente du nombre N, l'étape 314 consistant à incrémenter de un la variable i est exécutée, puis l'étape 303 et suivantes sont à nouveau réalisées. Si la valeur de la variable i est égale est égale au nombre N, alors le résultat de la fonction de hachage SHA-512 correspond à la concaténation des valeurs des variables Hr), le, ic, ,c), ',,'),Hr,,e,,ev). La présente technique permet de modifier la fonction de hachage SHA-512 pour obtenir une fonction de hachage adjointe du SHA-512 vérifiant la propriété de la figure 1(b). La figure 3(b) présente, sous la forme d'un organigramme, les différentes étapes définissant une fonction booléenne adjointe de la fonction de hachage SHA-512, selon un mode de réalisation de l'invention. Une telle fonction de hachage SHA-512 prend en entrée, un message M* modifié prétraité de telle sorte qu'il comprend N bloc de données de 1024 bits chacun, notés M(1)*,.., MM* ainsi qu'un nombre aléatoire hl (un tel nombre h1 peut être stocké au préalable en mémoire, sans devoir être ainsi passé en argument de la fonction de hachage adjointe) de 64 bits. Chaque bloc de donnée peut être décomposé en 16 blocs de données de 64 bits chacun. On peut alors écrire M* = Me)* ... M1(.15)* Il mi)N)* ... 114i( N5)* . Il convient de noter que conformément à la notation précédemment .) 0.) (phi(e) = me) ®h1, ...11,451)* = (phi (mi5 ) = mo 63, hi., établie, on a Me)* = 30e)* = (phi(e) = Ar) G hi, ... me)* = (p h i(e5)) = ve) ®h1 Puis, dans une étape 315, le dispositif électronique exécute des instructions de code lui permettant d'obtenir des constantes (lues par exemple en mémoire ROM) HP)*, HP)*, 1/P)*, He)*, Hr)*, H.,°)* déterminées à partir des constantes décrites dans le document de standardisation FIPS-186-2 déjà mentionnées en lien avec la description de la figure 2(a). Dans une étape 316, on instancie une variable i, stockée dans un registre du dispositif électronique, à la valeur 1. Une telle variable va permettre de mettre en oeuvre un traitement itératif sur les blocs de données M(0*. Dans une étape 317, on instancie une variable t, stockée dans un registre du dispositif électronique, à la valeur O. Puis, dans une étape 318, on instancie une variable Wt, stockée dans un registre du dispositif électronique, de la manière suivante : - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle 110;15, alors on affecte à la variable Wt la valeur du bloc de données M(i)* - r - lorsque la variable t a une valeur, correspondant à un nombre entier, qui est compris dans l'intervalle 1116; 791, alors on affecte à la variable Wt le nombre résultant de l'opération suivante : Add*(Cri512*(Wt_2), Add*(Wt_7, Add*(CT512* t-15J, "w t-16 ))), où opérateur binaire « Add*(.,.) », correspond à l'opérateur adjoint de l'opération d'addition, où l'opération adjointe 41-2*(.) de l'opération unaire 4120 est définie par la relation suivante : o-1 412f 12*(.) = ) ® (ho ® hi, et où l'opération adjointe c)-1-2*(.) de l'opération unaire o-17120 est définie par la relation suivante : uP2*() = 0_,512(.) 6112(h1) El) hi. Dans une étape 319, la valeur de la variable t est comparée avec le nombre 79. Si la valeur de la variable t est différente du nombre 79, l'étape 320 consistant à incrémenter de un la variable t est exécutée, puis l'étape 318 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 321 d'instanciation de huit variables : a ,b,c,d,e,f,g et h est réalisée de la manière suivante : le dispositif électronique affecte à la variable a, la valeur de la donnée fic()i-l)* ; le dispositif électronique affecte à la variable b, la valeur de la donnée et)* ; le dispositif électronique affecte à la variable c, la valeur de la donnée H2`-1)* ; le dispositif électronique affecte à la variable d, la valeur de la donnée Hr)* ; le dispositif électronique affecte à la variable e, la valeur de la donnée H4(i-1)* - le dispositif électronique affecte à la variable f, la valeur de la donnée H5(i-1)* e . le dispositif électronique affecte à la variable g la valeur de la donnée Hel)* ; le dispositif électronique affecte à la variable h, la valeur de la donnée H7(i-1)* Puis, suite à l'étape 321, on réalise une étape 322 consistant à affecter à la variable t, la valeur nulle. Ensuite une étape de traitement 323 visant à modifier les valeurs des variables a,b,c,d, e, f, g et h est réalisée. Une telle étape de traitement 323 comprend : une étape de détermination d'une opération booléenne adjointe de I 'opération suivante : h + r12(e) + Ch(e, f, g) + Kt512 + vvt décrite en lien avec la description de l'étape 309. Une telle opération booléenne adjointe est définie par l'équation suivante : Add* (h, Add* (Er2*(e),Add* (C h* (e, f, g), Add* (Kt512* , Wt)))) avec l'opération adjointe Ei12*0 = r.12(.) ®z112(h1)®hi . Le résultat d'une telle opération est stocké dans une variable U1 qui correspond à la valeur de T1* = T1 El) hi en référence avec la figure 3(a); une étape de détermination d'une opération booléenne adjointe de l'opération booléenne suivante: Eg12(a)+ M aj (a, b, c) décrite en lien avec l'étape 309. Une telle opération adjointe est définie par l'équation suivante : Add* (EP2* (a), Maj* (a, b, c)) , où l'opération adjointeEg12*0 est définie par la relation suivante - Eg12*0 = Eg120 ED E5120 ® h1 . Le résultat d'une telle opération est stocké dans une variable U2 qui correspond à la valeur de T2* = T2 ® h1 en référence avec la figure 3(a); une étape d'instanciation de la variable h avec la valeur de la variable g; une étape d'instanciation de la variable g avec la valeur de la variable f; une étape d'instanciation de la variable f avec la valeur de la variable e; une étape d'instanciation de la variable e avec le résultat de l'opération binaire adjointe suivante : Add* (d, tli); une étape d'instanciation de la variable d avec la valeur de la variable c; une étape d'instanciation de la variable c avec la valeur de la variable b; une étape d'instanciation de la variable b avec la valeur de la variable a; une étape d'instanciation de la variable a avec le résultat de l'opération binaire suivante : Add* (U2, U1). Ainsi, en sortie de l'étape 323, chacune des huit variables : a,b,c,d,e,f,g et h comprend les valeurs modifiées selon la fonction (phi des huit variables a,b,c,d,e,f,g et h en sortie de l'étape 309. Suite à l'étape de traitement 323, une étape 324 visant à comparer la valeur de la variable t avec la valeur 79 est effectuée. Si la valeur de la variable t est différente du nombre 79, l'étape 325 consistant à incrémenter de un la variable t est exécutée, puis l'étape 323 et suivantes sont à nouveau réalisées. Si la valeur de la variable t est égale est égale au nombre 79, alors une étape 326 d'instanciation de huit variables correspondant aux valeurs de He, le*, 1-1j)*, , H i')* , , H.`)* est réalisée de la manière suivante : le dispositif électronique affecte à une variable la valeur de licç'i)*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (a, ; le dispositif électronique affecte à une variable la valeur de Hi`)*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add*(b, le1)*) ; le dispositif électronique affecte à une variable la valeur de le*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (c, ; le dispositif électronique affecte à une variable la valeur de le*, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (d, e ; le dispositif électronique affecte à une variable la valeur de déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (e, el)*) ; le dispositif électronique affecte à une variable la valeur de Hr, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* , He-1)*) ; le dispositif électronique affecte à une variable la valeur de Hr , déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* , ; le dispositif électronique affecte à une variable la valeur de Hr, déterminée via l'utilisation d'une opération d'addition adjointe sur des données modifiées, soit Add* (h, lel. Puis, une étape 327 de comparaison entre la valeur de la variable i et le nombre N est réalisée visant à déterminer si l'ensemble des blocs de données du message M a été traité. Si la valeur de la variable i est différente du nombre N, l'étape 328 consistant à incrémenter de un la variable i est exécutée, puis l'étape 317 et suivantes sont à nouveau réalisées. Si la valeur de la variable i est égale est égale au nombre N, alors le résultat de la fonction de hachage adjointe du SHA-512 correspond à la concaténation des valeurs des variables H(N)* I 1 2 H()* H(N)*, 3 H(N)* 0 , Hel)* , Hr,e*,Hrobtenues. On obtient donc le résultat R suivant : le)* II le*, Il Hr)*, Il le)* II H,(1N)* Il Hr Il le)* Il H5N)* avec H(N)* = Hjiv) ED h1, avec j E [[0; 71. Dès lors, on peut écrire que R = H e) H1 où H =HôN) Il HN) II igv) II le) H,(4N) Il He) Il le) Il le et = --- - hi.. Ainsi, on a SHA - 512* (M*) = SHA - 512 (M ) El) H1. Dans un autre mode de réalisation, on utilise un nombre aléatoire différent pour chaque traitement de bloc. Ainsi, selon un tel mode, on peut utiliser N nombres aléatoires h/,..,hN de 64 bits, tels que l'on ait : Me)* = (phi(Mi)1)) = Me) h1, 9,1(mi(.51)) le) ®h1, ..., mr). 9,N(mr)) Iti((,N) hN, (Phi (m;.";') = ite ® hN. Ainsi, en sortie de l'étape 327, en cas d'égalité entre de la valeur de la variable i, avec le nombre N, on obtient le résultat R suivant : ev)* Il ev)., Il le*, II IO*Il H4N)* Il ler)* Il le* Il H VI)* avec HAN)* = 1-/JÇN) ED hN, avec j E ÉO; 71. Dès lors, on peut écrire que R = H ED HN où H = lev) Il le) II le) II ifIr) jr/r) le et HN - - hN ..- - Ainsi, lorsque la donnée u correspond à nombre u pouvant être représenté par k bits, et stocké dans un registre, et le nombre on a u* = (phi(u)= u ®h1 = Dans un autre mode de réalisation, la présente technique peut être appliquée à une fonction de hachage SHA-384. En effet, la seule différence entre la fonction de hachage SHA-384 et la fonction de hachage SHA-512 réside dans la détermination finale du message : le résultat de la fonction de hachage SHA-384 est une troncature du résultat de la fonction de hachage SHA-512. Il suffit de prendre les 384 premiers bits du résultat de la fonction de hachage SHA-512 comprenant 512 bits. Dans un autre mode de réalisation, non représenté par des figures, la présente technique peut être appliquée à une fonction de hachage SHA-256. La figure 4(a) représente, schématiquement, un dispositif de traitement de données 440 dans lequel la présente invention est mise en oeuvre. Ce dispositif 440 comprend un microprocesseur 410, auquel est associée d'une part une mémoire vive 460, par exemple au moyen d'un bus 470, et d'autre part une mémoire non volatile 420 (par exemple du type EEPROM), par exemple à travers un bus 450. Le dispositif de traitement de données 440, et précisément le microprocesseur 410 qu'il incorpore, peuvent échanger des données avec des dispositifs extérieurs au moyen d'une interface de communication 430. On a schématiquement représenté sur la figure 4(a) la transmission d'une donnée d'entrée X reçue d'un dispositif extérieur (non représenté) et transmise de l'interface de communication 430 au microprocesseur 410. De manière similaire, on a représenté la transmission d'une donnée de sortie Y du microprocesseur 410 vers l'interface de communication 430 à destination d'un dispositif extérieur. Cette donnée de sortie Y est issue d'un traitement de données par le microprocesseur 410, généralement sur la donnée d'entrée X à l'aide d'une donnée secrète 480 interne au système, par exemple une clé privée, ou un nombre aléatoire. Les données d'entrée X sont par exemple des commandes APDU, et les données de sortie des réponses APDU. Bien que, pour l'illustration, les données d'entrée et les données de sortie figurent sur deux flèches différentes, les moyens physiques qui permettent la communication entre le microprocesseur 410 et l'interface 430 pourront être réalisés par des moyens uniques, par exemple un port de communication série ou un bus. Le microprocesseur 410 est apte à exécuter un logiciel (ou programme d'ordinateur) qui permet au dispositif de traitement de données 440 d'exécuter un procédé conforme à l'invention dont des exemples sont donnés en regard des figures 2(b) et 3(b). Ce procédé est par exemple exécuté par 440 sur réception des données d'entrée X. Les données du procédé selon l'invention peuvent être obtenus à partir des données d'entrée ou, pour certains paramètres comme une liste de nombre premiers à partir de la mémoire non volatile 420. Les données de sorties sont par exemple obtenues à partir du résultat du procédé selon l'invention. Le logiciel est composé d'une série d'instructions de commande du microprocesseur 410 qui sont par exemple stockées dans la mémoire 420. Dans une variante, l'ensemble microprocesseur 410 - mémoire non-volatile 420 - mémoire vive 460 peut être remplacé par un circuit à application spécifique qui comprend alors des moyens de mise en oeuvre des différentes étapes du procédé de traitement de données. Plus généralement, le dispositif de traitement est un circuit intégré. La figure 4(b) représente une carte à microcircuit qui constitue un exemple de dispositif de traitement de données conforme à l'invention tel que représenté à la figure 4(a). L'interface de communication 430 est dans ce cas réalisée au moyen des contacts de la carte à microcircuit ou bien d'une antenne logée dans le corps de carte. La carte à microcircuit incorpore un microprocesseur 410, une mémoire vive 460 et une mémoire non volatile 420 comme cela est représenté sur la figure 4(a). Cette carte à microcircuit est par exemple conforme à la norme ISO 7816 et munie d'un microcontrôleur sécurisé qui regroupe le microprocesseur (ou CPU) 420 et la mémoire vive 460. Les données d'entrée X sont par exemple des commandes APDU, et les données de sortie des réponses APDU. Dans une variante, le dispositif de traitement de données peut être une clef USB, un document ou un support d'informations papier comportant dans l'une de ses feuilles un microcircuit associé à des moyens de communication sans contact. Il s'agit de manière préférée d'une entité électronique portable ou de poche. Le dispositif est par exemple sécurisé. Par exemple, le dispositif comporte des moyens aptes à le protéger contre des attaques visant à obtenir frauduleusement les données secrètes qu'il mémorise (par exemple, une clé cryptographique) telle que les attaques par fautes et/ou par analyse de canaux cachés (en anglais , « side channel attacks »). En particulier, le dispositif est conforme à la norme FIPS ou aux critères communs. REVENDICATIONS1. Procédé de traitement cryptographique comprenant une étape d'exécution d'une fonction booléenne sur au moins une donnée stockée dans un registre d'un dispositif électronique, ladite étape d'exécution d'une fonction booléenne délivrant un premier résultat et ladite fonction booléenne étant définie par au moins un opérateur booléen, le procédé étant caractérisé en ce qu'il comprend : - une étape d'obtention d'un nombre aléatoire /71; - une étape de modification réversible de ladite au moins une donnée par une application d'une autre fonction paramétrée par ledit nombre aléatoire h1, délivrant une donnée modifiée ; - une étape de modification dudit au moins un opérateur booléen en fonction dudit nombre h1, délivrant une fonction adjointe ; - une étape d'exécution de ladite fonction adjointe sur ladite donnée modifiée, délivrant un deuxième résultat correspondant à une application de ladite autre fonction audit premier résultat. 2. Procédé selon la revendication 1, caractérisé en ce que ladite étape d'exécution d'une fonction booléenne est remplacée par ladite étape d'exécution de ladite fonction adjointe. 3. Procédé selon la revendication 1, caractérisé en ce que ladite étape d'exécution d'une fonction booléenne est réalisée concomitamment avec ladite étape d'exécution de ladite fonction adjointe. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que ladite fonction booléenne est définie par une pluralité d'opérateurs booléens. 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce qu'il comprend en outre une étape de détermination du résultat d'une opération entre ledit deuxième résultat et une donnée fonction dudit nombre aléatoire h1 délivrant ledit premier résultat. 6. Procédé selon l'une quelconque des revendications 1 à 5, caractérisé en ce que ladite étape de modification dudit au moins un opérateur booléen comprend au moins l'une quelconque des étapes suivantes :- une étape de modification d'au moins un opérateur unaire, chaque opérateur unaire prenant une première variable en entrée, et délivrant une deuxième variable en sortie ; - une étape de modification d'au moins un opérateur binaire, chaque opérateur binaire prenant une troisième et une quatrième variable en entrée et délivrant une cinquième variable en sortie. 7. Procédé selon l'une quelconque des revendications 1 à 6, caractérisé en ce que ladite autre fonction est une opération de « ou » définie par l'équation suivante X* = (phi(X) = X ED h1, où X est ladite au moins une donnée, et X*est ladite donnée modifiée. 8. Procédé selon la revendication 6, caractérisé en ce que ladite étape de modification d'au moins un opérateur unaire comprend au moins l'une quelconque des étapes suivantes : - une étape de transformation d'un opérateur de décalage binaire à droite de n1 bits, noté SHR',0, avec n1 un nombre entier, en un premier opérateur adjoint SHR,ii*(.) vérifiant une première équation fonctionnelle : SHRni*(.) = ED[h1 e SHR,,i(hi)] ; - une étape de transformation d'un opérateur de décalage gauche à droite de n2 bits, noté SHL'20, avec n2 un nombre entier , en un deuxième opérateur adjoint SHL,'2*(.) vérifiant une deuxième équation fonctionnelle : SHL' * - - ..2 SM.% e [h1 e SH4,2(h1)] ; - une étape de transformation d'un opérateur de rotation binaire à droite de n3 bits, noté RotR7,30, avec n3 un nombre entier , en un troisième opérateur adjoint RotR7,3* (.), vérifiant une troisième équation fonctionnelle : RotR,,3* (.) RotRn, oe [h1 e RotRn3 (hi) ] ; - une étape de transformation d'un opérateur de rotation binaire à gauche de n4 bits, noté Rot4,40, avec n4 un nombre entier, en un quatrième opérateur adjoint RotLn4*(.), vérifiant une quatrième équation fonctionnelle : RotL74 * (.) = RotLn4 (. )e [h1 El) RotLii4(//1) 9. Procédé selon l'une quelconque des revendications 6 et 8, caractérisé en ce ladite étape de modification d'opérateurs binaires comprend au moins l'une quelconque des étapes suivantes : - une étape de transformation d'un opérateur de « ou » exclusif, xor(. , .), en un cinquième opérateur adjoint xor* (. , .) vérifiant une cinquième équation fonctionnelle : xor* (. ,.) = xor(. ,.) ®h1 ; - une étape de transformation d'un opérateur « et » logique, and(., .), en un sixième opérateur adjoint and* (. , .) vérifiant une sixième équation fonctionnelle : and* (. , .) = and( , .) El) xor (. , .) A hi ; - une étape de transformation d'un opérateur « ou» inclusif , or(., .), en un septième opérateur adjoint or* (. , .) vérifiant une septième équation fonctionnelle : or* (. , .) = or(. , .) exor(.,.)Ah; - une étape de transformation d'un opérateur d'addition arithmétique, Add(. , .), en un huitième opérateur adjoint Add*(.,.) vérifiant une huitième équation fonctionnelle : Add* (. , .) = [xor(. , .) + S H Li(and* (. , .) ED hi] e h1. 10. Procédé selon l'une quelconque des revendications 6, 8 et 9, caractérisé en ce que, lorsque ladite fonction booléenne est une fonction de hachage SHA-1, ladite fonction booléenne comprend t étape d'utilisation de fonctions logiques ft, où t est un nombre entier compris entre 0 et 79, chaque fonction logique ft, prenant en entrée trois données de 32 bits, x, y et z et délivrant en sortie une donnée de 32 bits, et une fonction logique ft étant définie par les équations suivantes : - ft (x, y, z) = Ch(x, y, z) = (xAy)e)(Fc Az), lorsque t est compris entre 0 et 19 ; - ft(x, y, z) = Parity(x, y, z) = x ®y ®z, lorsque t est compris entre 20 et 39 ou entre 60 et 79 ; - ft(x, y, z) = M aj (x, y, z) = (xAy)e(xAz)e(yAz), lorsque t est compris entre 40 et 59; et en ce que ladite étape de modification desdits opérateurs booléens comprend : - une étape de détermination de fonctions logiques adjointe ft* étant définies par les équations suivantes : - ft* (x, y, z) = Ch* (x, y, z) = Ch(x, y, z) e(y ez) A hi, lorsque t est compris entre 0 et 19 ;'34 - - ft* (x, y, z) = Parity* (x, y, z) = Parity* (x, y, z), lorsque t est compris entre 20 et 39 ou entre 60 et 79 ; - ft* (x, y, z) = Maj* (x, y, z) = Maj (x, y, z), lorsque t est compris entre 40 et 59. 11. Procédé selon l'une quelconque des revendications 1 à 10, caractérisé en ce que ladite étape d'obtention d'un nombre aléatoire h1 comprend une étape d'instanciation dudit nombre aléatoire h1 à zéro ou à une valeur correspondant à un nombre dont une représentation binaire comprend uniquement des bits égaux à un. 12. Produit programme d'ordinateur, comprenant des instructions de code de programme pour la mise en oeuvre du procédé selon au moins une des revendications 1 à 11, lorsque ledit programme est exécuté sur un ordinateur. 13. Médium de stockage lisible par ordinateur et non transitoire, stockant un programme d'ordinateur comprenant un jeu d'instructions exécutables par un ordinateur ou un processeur pour mettre en oeuvre le procédé selon au moins une des revendications 1 à 11. 14. Dispositif électronique apte à réaliser un traitement cryptographique comprenant des moyens d'exécution d'une fonction booléenne sur au moins une donnée stockée dans un registre dudit dispositif, lesdits moyens d'exécution d'une fonction booléenne délivrant un premier résultat et ladite fonction booléenne étant définie par au moins un opérateur booléen, le dispositif électronique étant caractérisé en ce qu'il comprend : - des moyens d'obtention d'un nombre aléatoire h 1; - des moyens de modification réversible de ladite au moins une donnée par une application d'une autre fonction paramétrée par ledit nombre aléatoire h1, délivrant une donnée modifiée ; - des moyens de modification dudit au moins un opérateur booléen en fonction dudit nombre h1, délivrant une fonction adjointe ; - des moyens d'exécution de ladite fonction adjointe sur ladite donnée modifiée, délivrant un deuxième résultat correspondant à une application de ladite autre fonction audit premier résultat. 15. Dispositif électronique selon la revendication 14 caractérisé en ce que les moyens d'exécution d'une fonction booléenne sont utilisés concomitamment avec lesdits moyens d'exécution de ladite fonction adjointe.