FR 2823327 A1 20021011 FR 0104829 A 20010409 DISPOSITIF DESTINE A REALISER DES CALCULS D'EXPONENTIATION SECURISEE ET UTILISATION D'UN TEL DISPOSITIF La présente invention concerne un dispositif de calcul d'exponentiation sécurisée, avec application notamment dans le domaine de la cryptologie où l'on met en oeuvre des algorithmes cryptographiques dans des dispositifs électroniques tels que des cartes à puce. De nombreux algorithmes cryptographiques sont basés sur des calculs d'exponentiation du type R = xe, où x et e sont des nombres prédéterminés qui codent une valeur R. Ceci est notamment le cas avec l'algorithme du type RSA (Rivest, Shamir et Adleman). La valeur R peut correspondre par exemple à un texte chiffré, une donnée signée ou vérifiée.... Un dispositif électronique prévu pour exécuter un tel algorithme doit contenir en mémoire d'une part la partie exécutoire pour élever x à la puissance de e, et d'autre part les valeurs x et e. Il existe différents types d'algorithmes d'exponentiation. On connaît notamment la méthode binaire de type"élévation au carré et multiplication", plus habituellement connue sous la terminologie anglosaxonne"square and multiply" (acronyme anglais SAM), 3 la méthode de Yacobi, dite M, M3, la méthode des fenêtres glissantes, etc. Ces algorithmes produisent une chaîne d'addition représentative de l'exposant e. Il existe plusieurs chaînes d'addition représentatives de l'exposant, chacune étant fonction de l'exposant, de l'algorithme d'exponentiation utilisé et des paramétrages de cet algorithme. Ces algorithmes sont assez complexes et doivent inclure des contre-mesures adaptées contre des attaques visant à découvrir des informations contenues et manipulées dans des traitements effectués par le dispositif de calcul. Notamment, des contre-mesures sont prévues contre les attaques dites à canaux cachés, simples ou différentielles. On entend par attaque à canal caché simple ou différentielle, une attaque basée sur une grandeur physique mesurable de l'extérieur du dispositif, et dont l'analyse directe (attaque simple) ou l'analyse selon une méthode statistique (attaque différentielle) permet de découvrir des informations contenues et manipulées dans des traitements dans le dispositif. Ces attaques peuvent ainsi permettre de découvrir des informations confidentielles. Ces attaques ont notamment été dévoilées par Paul Kocher (Advances in Cryptology-CRYPTO'99, vol. 1966 of Lectures Notes in Computer Science, pp. 388-397. Springer-Verlag, 1999). Parmi les grandeurs physiques qui peuvent être exploitées à ces fins, on peut citer la consommation en courant, le champ électromagnétique ... Ces attaques sont basées sur le fait que la manipulation d'un bit, c'est à dire son traitement par une instruction particulière a une empreinte particulière sur la grandeur physique considérée selon sa valeur. Les algorithmes d'exponentiation précités ont dû inclure des contre-mesures pour empêcher ces attaques de prospérer. Par exemple, l'algorithme"square and multiply always"selon la terminologie anglo-saxonne, et qui signif ie"éléver au carré et multiplier toujours", est une variante sécurisée de l'algorithme SAM (square and multiply) dans lequel l'opération était conditionnelle à la valeur du bit en cours de traitement, donc permettant des attaques à canaux cachés. Dans l'invention, on s'intéresse à une méthode d'exponentiation particulière, à partir d'une chaîne d'addition représentant l'exposant e, générée à partir d'un algorithme d'exponentiation arbitraire. Suivant cette chaîne d'addition, l'exponentiation est réalisée au moyen d'un algorithme universel d'exponentiation, qui consiste en une succession de multiplications (cas général). On rappellera que sur un ensemble noté additivement, tels les courbes elliptiques, l'exponentiation devient une multiplication scalaire du type Q=d. P, où P et Q sont des éléments de l'ensemble noté additivement (courbe elliptique) et d un nombre scalaire. Dans ce cas, l'algorithme universel permettant de calculer Q=d. P à partir d'une chaîne d'addition, consiste en une succession d'additions (sur l'ensemble noté additivement). Dans la suite, on se place dans le cas général, conventionnel, ce qui veut dire que l'on utilisera la notation multiplicative, sauf mention explicite contraire. Avec la méthode d'exponentiation décrite, la chaîne d'addition est ainsi à la fois une représentation de l'exposant e et un codage de l'algorithme d'exponentiation dont elle résulte. La partie exécutoire de l'algorithme qui permet l'exponentiation à partir de cette chaîne d'addition est la seule partie codée en dur, en mémoire ROM masque. Elle consiste en une succession de multiplications. Cet algorithme d'exponentiation est universel en ce sens que l'on peut l'utiliser avec n'importe quelle chaîne d'addition générée par n'importe quel algorithme d'exponentiation. Une telle méthode d'exponentiation à partir d'une chaîne d'addition offre de nombreux avantages par rapport aux algorithmes d'exponentiation classiques. Ces avantages seront détaillés plus loin, après une présentation plus détaillée de cette méthode. Cette méthode d'exponentiation est basée sur les chaînes d'addition ou plus généralement, sur les chaînes d'addition-soustraction. Une chaîne d'addition d'un exposant e est une suite de nombres, dont le premier est le nombre 1, chacun des nombres suivants étant égal à la somme de deux nombres précédents. Le dernier nombre est égal à l'exposant e lui-même. Une chaîne d'addition pour un nombre e est ainsi définie comme la séquence C (e) ={e(0), e(1), ..., e(r)}, qui satisfait les conditions : (a) e(0) = 1, e(r) = e, et (b) pour tout 1 # i # r, il existe j (i) k(i) strictement inférieurs à i tels que e'= e'"+ e"'''", où r représente la longueur de la chaîne. On peut ainsi aisément obtenir R = xe en calculant, pour i = 1 à r : où le symbole A signifie exposant . Au dernier tour r, on calcule ainsi : Comme e (r) = e (c'est le dernier élément de la chaîne), on a R= xAe'. Ainsi, à chaque pas, on calcule une puissance de x correspondant à un exposant intermédiaire de la chaîne en effectuant une multiplication entre deux puissances de x calculées à des pas précédents. En effectuant r multiplications, on obtient le résultat de l'exponentiation de x par e. En pratique, une chaîne d'addition est représentée sous la forme d'une séquence qui définit pour chaque élément de la chaîne (sauf le premier élément de la chaîne, toujours égal à 1), les deux éléments précédents de la chaîne desquels il est obtenu, c'est à dire, pour tout i, les éléments de la chaîne e e (k (i)), par lesquels on obtient un élément suivant e (i) de la chaîne. L'algorithme d'exponentiation parcourt la séquence qui lui fournit ses entrées et sortie à chaque pas, et qui exécute les multiplications correspondantes. Si on considère la forme plus générale de la chaîne dite d'addition-soustraction, chaque élément e (i) de la suite est égal à plus ou moins un élément précédent e', plus ou moins un élément précédent e. On peut donc prendre en compte soit un élément, soit son opposé. Dans la séquence représentative de la chaîne, on doit alors inclure pour tout élément e (i), le signe de chacun des éléments e (j (i)) et e (k (i)) associés. Une variante des chaînes d'additions, dénommée chaîne étoile, est une chaîne d'additions telle que chaque élément e (i) de la chaîne est égal à l'élément immédiatement précédent e (i-1) plus un autre élément précédent e La séquence définissant comment est obtenu chaque élément de la chaîne est alors plus courte, puisqu'un des deux éléments précédents est déjà connu : c'est le précédent. Ainsi, de manière générale, une chaîne d'additionsoustraction peut être représentée par une séquence de triplets (e (i) : e (j (i)), e (k") ou de doublets ou paires (e (i) : ek (i)), dans le cas particulier des chaînes étoiles. Dans un exemple pratique, avec une chaîne d'addition C (5) = (1,2, 4, 5) générée pour le nombre 5, une séquence associée peut s'écrire : { (2 : 1,1), (4 : 2,2), (5 : 4, 1)}. La méthode d'exponentiation décrite, nécessite donc la représentation de l'exposant sous forme d'une séquence de doublets (cas de chaînes étoiles) ou de triplets (cas général des chaînes d'addition ou d'addition-soustraction), cette séquence définissant les entrées/sorties de l'algorithme universel d'exponentiation. Cependant, remplacer la représentation de l'exposant par une séquence de doublets et de triplets n'est pas avantageux du point de vue de l'espace mémoire nécessaire à leur stockage : chaque élément d'un doublet ou triplet occupe en effet autant de place mémoire que l'exposant. En remplaçant chacun des éléments des doublets ou triplets de la séquence, par le registre dans lequel il est contenu ou doit être écrit, on améliore considérablement cet aspect. Par exemple, si le dispositif d'exponentiation dispose de quatre registres, seuls deux bits sont nécessaires pour représenter (coder) chacun de ces registres. Si chaque élément de la séquence représentative de la chaîne d'addition-soustraction est remplacée par le registre dans lequel il est contenu, on réduit de façon considérable l'espace mémoire nécessaire pour la stocker. La chaîne d'addition C (e) représentative de l'exposant e, est alors représentée par une séquence de registres, que l'on note r (e). Si on part du cas général d'une chaîne d'addition C (e) fournie pour un exposant e : C (e) = {e(0), e(1),..., e(r)} avec e (O) = 1 et e (r) =e, représentée par une séquence de triplets d'éléments de cette chaîne : E (e) = (e (e -e : ei)), e (k (i))) i=i r}, avec e '=l et e' = e (j (i)) + e (k , on a vu que l'algorithme d'exponentiation universel s'écrit : à l'étape i, calculer xAe"-'= xAe'". xAe"". En posant que xAe (j (i)) et xAe (k (i)) sont contenus respectivement dans un premier registre Ra. (i) et un deuxième registre Rss (i), et que le résultat de la multiplication xae (i) est inscrit dans un troisième registre Rye), l'exécution de l'algorithme d'exponentiation universel qui en découle, consiste à l'étape i de calcul du ième élément e (i) de la chaîne d'additions, à écrire dans le registre Ry (i) le résultat de la multiplication du contenu du registre Ra (i) par le contenu du registre Rss (i). Ainsi, la chaîne d'addition de l'exposant e peut être représentée par la séquence de triplets de registres suivante : r (e) = { (y (i) : a (i), ss (i))} ii De ce qui précède, on obtient l'algorithme d'exponentiation universel suivant (pour e > l) : Initialiser Ra i) On note que R&alpha;(1) et Rss(1) sont initialisés avec la valeur x, car le premier terme de chaque chaîne d'addition étant 1, le deuxième terme est toujours e(1) = 2. On note également que l'on peut avoir a (l) = H (l), et plus généralement a (i) = ss(i). Dans le cas où l'on utilise des chaînes étoiles, notées C* (e), on a vu que la condition sur les termes de la chaîne s'écrit : e(i) = e(i-1) + e(k(i)). Une telle chaîne étoile C* (e), peut donc être représentée par une séquence de paires (doublets) de registres, en posant la condition a (i) = y (i-1) pour tout 1 # i # r. En d'autres termes, le contenu du registre Ra (i) est égal au contenu du registre Ry (i-i) calculé au tour précédent. La séquence de registres associée à une chaîne étoile est donc donnée par : r (e)- { (y (i) : ss (i))} i émettre en sortie R = Ry (r). L'utilisation de chaînes étoiles permet de réaliser un gain d'espace mémoire d'environ 1/3 par rapport aux chaînes d'addition représentées par des séquences de triplets de registres. Comme on l'a déjà expliqué, la méthode d'exponentiation qui vient d'être décrite peut s'appliquer à tout type d'algorithme d'exponentiation, cet algorithme se retrouvant codé dans la chaîne d'addition résultante. Outre les algorithmes d'exponentiation binaires, on peut aussi bien utiliser un algorithme de type k-aire, ou un algorithme par division de chaînes (algorithme dit de Walter) pour générer la chaîne d'addition. Cette liste n'est pas exhaustive. En pratique, la séquence de registres représentative de la chaîne d'addition, et partant, de l'exposant, dépend de la valeur de l'exposant, de l'algorithme d'exponentiation qui a généré la chaîne et de son paramétrage. Notamment, elle dépend du nombre de registres utilisés dans cet algorithme et disponibles dans le dispositif d'exponentiation. Pour illustrer les différents aspects de la méthode d'exponentiation qui vient d'être exposée, prenons des exemples pratiques. Soit R=Xe à calculer, avec e=87. En notation binaire, e s'écrit : e= (et-l,..., eo) 2 = (1,0, 1,0, 1,1, 1) 2 Si on utilise comme algorithme d'exponentiation, la méthode binaire (SAM) du type à balayage de l'exposant de droite à gauche, et utilisation de deux registres RO et RI. Cet algorithme s'écrit de façon bien connue : RO Avec un tel algorithme d'exponentiation, pour e=87= (1, 0, 1, 0, 1, 1, 1) 2, on obtient la chaîne d'additions Cdg2 (87) suivante : Cdg2 (87) = {1, 2, 3, 4, 7, 8, 16, 23, 32, 64, 87} que l'on peut représenter par la séquence de registres RO et R1 : Fdg2 (87) = { (1 : 1, 1), (0 : 0, 1), (1 : 1, 1), (0 : 0, 1), (1 : 1, 1), (1 : 1, 1), (O : 0, 1), (1 : 1, 1), (1 : 1, 1), (0 : 0, 1)}, où RO et R1 sont tous deux initialisés à x. L'algorithme d'exponentiation universel reçoit à chaque pas, un triplet de registres correspondant de la séquence. Ainsi, après initialisation des deux registres RO et R1 à x, l'algorithme universel va effectuer successivement les multiplications suivantes : R1 RO Une autre séquence de la chaîne d'addition Cdg2 (87) précédente peut-être obtenue, en utilisant un registre supplémentaire pour la coder. On peut ainsi avoir la séquence suivante : r'dg2 (87)- { (1 : 0, 0), (2 : 0, 1), (0 : 1, 1), (1 : 0,2), (2 : 0,0), (0 : 2,2), (2 : 0,1), (1 : 0,0), (0 : 1,1), (1 : 0, 2)}. Il s'ensuit un déroulement différent de l'algorithme d'exponentiation universel. Si on utilise un algorithme binaire d'exponentiation avec balayage des bits de l'exposant e de gauche à droite (algorithme SAM Square And Multiply), on obtient une autre chaîne pour représenter l'exposant e. En particulier, avec un tel algorithme, on obtient des chaînes d'additions de type étoile. En reprenant l'exemple précédent avec e= 87, on obtient comme chaîne d'additions correspondante pour e = 87 : C*gd2 (87)- {1, 2,4, 5, 10, 20, 21, 42, 43, 86, 87}. Si on dispose des deux registres RO et RI, une séquence de registres associée à cette chaîne étoile s'écrit : r*gd2 (87) = {(0:0), (0:0), (0:1), (0:0), (0:0), (0:1), (0:0), (0 : 1), (0 : 0), (0 : 1)}, où RO et R1 sont tous deux initialisés à x. Il s'ensuit encore un autre déroulement différent de l'algorithme d'exponentiation universel. Ces différents exemples de génération de chaînes d'additions et de séquences montrent bien que ces chaînes et séquences dépendent de l'exposant, de l'algorithme d'exponentiation mis en oeuvre et de paramétrages, comme le nombre de registres du dispositif d'exponentiation utilisés. Si l'algorithme d'exponentiation utilisé pour générer la chaîne d'addition est mis en oeuvre dans une phase d'initialisation du dispositif par des moyens externes, on ne programme plus l'exposant e en mémoire ré-inscriptible du dispositif d'exponentiation, mais la séquence de registres obtenue. En d'autres termes, l'algorithme d'exponentiation se retrouve codé dans la séquence de registres résultante. Cette méthode d'exponentiation décrite est ainsi très flexible, puisqu'elle permet de coder dans la chaîne d'addition, n'importe quel algorithme d'exponentiation, et qu'une simple reprogrammation de la mémoire ré-inscriptible permet des changements d'algorithme et/ou des changements d'exposant. Cette méthode d'exponentiation est aussi très rapide : le nombre de multiplications à effectuer est égal à la longueur de la chaîne d'addition. Or on sait générer des chaînes d'additions courtes, au moyen d'algorithme d'exponentiation approprié, comme par exemple l'algorithme d'exponentiation par division de Walter. Si on prend à titre de comparaison, l'algorithme d'exponentiation binaire avec contre-mesure ("square and multiply always"), 21og2e multiplications sont nécessaires à son exécution. Avec la méthode d'exponentiation considérée, on sait réduire ce nombre d'opérations à 1. 251og2e. Enfin, cette méthode d'exponentiation a l'avantage d'être résistante aux attaques à canaux cachés simples, contrairement aux algorithmes d'exponentiation habituels qui doivent intégrer des contre-mesures pour résister à ces attaques. En pratique, en mémoire ROM masque n'est codé que l'algorithme d'exponentiation universel, qui est un simple algorithme de multiplication qui parcourt la séquence de registres contenue en mémoire réinscriptible, et pour multiplier simplement les éléments donnés par celle-ci. Ce type d'algorithme est très facile à programmer et les risques d'erreurs de programmation en mémoire ROM masque sont très faibles. On remarquera que les algorithmes d'exponentiation utilisés habituellement sont beaucoup plus complexes, comprenant des paramétrages et devant intégrer des contre-mesures contre les attaques à canaux cachés simples ou différentielles. Ces contre-mesures aggravent le risque d'erreurs de programmation en mémoire ROM masque. En effet, les tests des programmes d'exécution de ces algorithmes n'interviennent généralement qu'après leur programmation en mémoire ROM masque. Si une erreur est trouvée, notamment une erreur de paramétrage, c'est l'ensemble des masques de fabrication de la ROM qui est affecté, et une nouvelle ROM doit être produite. Ceci implique des surcoûts industriels non négligeables. En outre, les contremesures implémentées, si elles sont généralement efficaces pour les attaques à canaux cachés de type différentielles, on a pu montrer qu'elles l'étaient moins pour des attaques à canaux cachés de type simples. Ainsi, la méthode d'exponentiation qui vient d'être décrite, basée sur les chaînes d'addition- soustraction et utilisant l'algorithme d'exponentiation universel, offre de nombreux avantages par rapport aux autres algorithmes d'exponentiation. La mise en oeuvre pratique de cette méthode nécessite la génération d'une chaîne d'addition représentant l'exposant e, soit sous forme d'une séquence E (e) d'éléments de cette chaîne, soit sous forme d'une séquence de registres r (e). Cette dernière forme est la plus avantageuse, puisqu'elle nécessite peu d'espace mémoire. Dans cette méthode, on a vu que la chaîne d'addition peut être générée dans une phase de personnalisation du dispositif, par des moyens externes, puis programmée en mémoire ré-inscriptible (EEPROM ou FLASH EPROM par exemple). En cas d'erreur dans le paramétrage de l'algorithme d'exponentiation utilisé pour générer la chaîne d'addition, ou en cas de changement de l'exposant (changement de clé), il suffit alors seulement de reprogrammer la mémoire réinscriptible. Cependant, la mise en oeuvre de la méthode de calcul de R=x'utilisant l'algorithme d'exponentiation universel suppose l'obtention d'une chaîne d'addition représentant l'exposant, au moyen d'un algorithme d'exponentiation arbitraire. Dans le cas d'algorithme de cryptographie de type RSA, l'exposant e représente une clé privée, déterminée pour un dispositif donné (une carte à puce) dans une étape de personnalisation. Ainsi, la chaîne d'addition (la séquence de registres) peut être calculée dans cette même étape de personnalisation par des moyens externes au dispositif, puis mémorisée comme telle une fois pour toute dans la carte, en mémoire ré-inscriptible (EEPROM, Flash EPROM,...). Si on considère le domaine d'application de la carte à puce, ceci suppose des changements dans le mode de production et de mise en fonctionnalité de ces cartes, ce qui n'est pas souhaitable. En outre, la chaîne d'addition ou la séquence qui la représente occupe plus de place que l'exposant lui-même, habituellement mémorisé sous une forme binaire, ce qui est un inconvénient, la taille de la mémoire réinscriptible étant généralement limitée. En pratique, il s'avère que les fournisseurs de cartes qui gèrent l'étape de personnalisation ne sont pas favorables à la mise en place d'un tel changement. On peut aussi prévoir que la chaîne d'addition C (e) soit calculée dans une phase d'initialisation du dispositif, au moyen d'un algorithme d'exponentiation codé dans le dispositif, et mémorisée alors en mémoire de travail de type RAM. Cela suppose une manipulation de l'exposant par l'algorithme d'exponentiation, une seule fois, par exemple à la mise sous tension du dispositif. Mais le dispositif peut alors être vulnérable aux attaques à canaux cachés, notamment aux attaques à canaux cachés simples. L'exposant, qui représente en général une clé, pourrait alors être découvert. Ainsi, un problème lié à cette méthode d'exponentiation, réside dans la génération de la chaîne d'addition représentant l'exposant e. Un objet de l'invention est de résoudre ce problème de génération de la chaîne d'addition de l'exposant. Dans l'invention, plutôt que de calculer une chaîne d'addition représentative de l'exposant e, dans le dispositif d'exponentiation lui-même ou par des moyens externes, on prévoit que le dispositif utilise une chaîne d'addition aléatoire C (a), qui définit implicitement un nombre a, par essence aléatoire. La méthode d'exponentiation utilisée pour calculer R=xe consiste alors : - à effectuer un premier calcul d'exponentiation Y=xa en utilisant l'algorithme universel d'exponentiation appliqué à la chaîne aléatoire C (a) ; - à effectuer un deuxième calcul d'exponentiation Z=xe-a selon un algorithme d'exponentiation quelconque. Le résultat de l'exponentiation est alors obtenu en multipliant les nombres Y et Z : R= xa. xe-a. Selon un premier mode de réalisation de l'invention, la chaîne aléatoire est générée par des moyens externes au dispositif, et programmée dans le dispositif dans une portion de mémoire ré-inscriptible. Selon un deuxième mode de réalisation, la chaîne aléatoire est générée par des moyens internes, et mémorisée dans une portion de mémoire de travail. On peut alors prévoir avantageusement de générer une nouvelle chaîne aléatoire à chaque fois que le dispositif d'exponentiation est sollicité pour un nouveau calcul. En outre, cette méthodologie permet de se protéger contre les attaques à canaux cachés différentielles. Avec un tel dispositif, on n'a plus à craindre d'attaques à canaux cachés. En effet, dans le premier calcul, l'exposant a qui est manipulé est aléatoire ; et dans le deuxième calcul, l'exposant manipulé e-a est aussi aléatoire. Il peut donc être effectué par un algorithme d'exponentiation classique, sans craintes vis à vis des attaques à canaux cachés. Dans une variante, on prévoit que l'exposant e-a est calculé en utilisant l'algorithme universel d'exponentiation, après génération d'une chaîne d'addition-soustraction représentative de l'exposant e-a à partir d'un algorithme d'exponentiation quelconque. En effet, e-a n'étant pas connu, car aléatoire, on peut l'utiliser dans tout calcul en général, sans craindre les attaques à canaux cachés. Pour calculer xe-a, il faut préalablement calculer e-a, donc a. De façon remarquable, en utilisant l'algorithme universel d'exponentiation en notation additive (c'est-à-dire où l'opération de multiplication est remplacée par une addition), on obtient un algorithme universel de multiplication (scalaire), qui permet de calculer la valeur de a. En partant de la séquence de registres F (e) = { (y (i) : a (i), (i))} 11 r,, cet algorithme de multiplication scalaire universel s'écrit : Initialiser Ra (i) Ry (i) e Ra (i) + Rss (i) Au pas r, on obtient R=Ry (r) =e. x Cette multiplication scalaire est applicable aux éléments d'un ensemble noté additivement, typiquement à des points d'une courbe elliptique. Dans ce cas, R et x représentent des points de cette courbe. On remarque qu'en initialisant Ra (i) et Rd) à la valeur 1, c'est à dire à la valeur du premier élément de la chaîne d'addition C (e), on obtient Ry (r) =e. Dans l'invention, on utilise cette propriété pour calculer le nombre aléatoire a à partir de la chaîne aléatoire C (a). Ainsi, la mise en oeuvre de la méthode d'exponentiation basée sur l'algorithme d'exponentiation universel est-elle aisée, tout en assurant un haut degré de sécurité du dispositif contre les attaques à canaux cachés. L'invention concerne donc un dispositif destiné à réaliser des calculs d'exponentiation du type R=xe où x est un élément d'un ensemble noté de façon multiplicative et e un nombre prédéterminé, caractérisé en ce qu'il comprend des premiers moyens de calculs d'exponentiation à partir d'une représentation d'une chaîne d'addition-soustraction aléatoire C (a) représentant un nombre a, pour calculer y=xa par la mise en oeuvre d'un algorithme universel d'exponentiation, et des deuxièmes moyens de calcul d'exponentiation mettant en oeuvre un algorithme d'exponentiation quelconque pour calculer Z=xe-a. L'invention et les avantages qui en découlent apparaîtront plus clairement à la lecture de la description qui suit d'un mode de réalisation préféré, donné purement à titre d'exemple non-limitatif, par référence à la figure unique en annexe. Celle-ci est un organigramme des éléments principaux d'un dispositif électronique, par exemple une carte à puce, permettant de mettre en oeuvre l'invention. La figure 1 représente sous forme de schéma bloc un dispositif programmé mettant en oeuvre cette méthode d'exponentiation. Dans l'exemple, ce dispositif est une carte à puce destinée à exécuter un programme cryptographique. A cette fin, le dispositif 1 réunit dans une puce des moyens programmés pour l'exécution de calculs, composés d'une unité centrale (UC) 2 reliée fonctionnellement à un ensemble de mémoires dont : - une mémoire 4 accessible en lecture seulement, dans l'exemple du type ROM masque, aussi connue sous l'appellation anglaise"mask read-only memory (mask ROM)", - une mémoire 6 reprogrammable électriquement, dans l'exemple du type EEPROM (de l'anglais "electrically erasable programmable ROM"), et - une mémoire de travail 8 accessible en lecture et en écriture, dans l'exemple du type RAM (de l'anglais"random access memory"). Cette mémoire comprend notamment les registres utilisés par le dispositif 1. On appelle dans la suite mémoire programme, la mémoire qui contient du code exécutable. Ce code peut en pratique être contenu en mémoire 4, accessible en lecture seulement, ou en mémoire 6, réinscriptible. Dans l'exemple, le dispositif 1 comprend en outre un générateur aléatoire 9. Ce générateur aléatoire a pour fonction de générer une chaîne aléatoire C (a). L'unité centrale 2 est également reliée à une interface de communication 10 qui assure l'échange de signaux vis-à-vis de l'extérieur et l'alimentation de la puce. Cette interface peut comprendre des plots sur la carte pour une connexion dite"à contact"avec un lecteur, et/ou une antenne dans le cas d'une carte dite "sans contact". L'une des fonctions du dispositif 1 est de crypter et décrypter des données confidentielles respectivement transmises vers, et reçues de, l'extérieur. Ces données peuvent concerner par exemple des codes personnels, des informations médicales, une comptabilité sur des transactions bancaires ou commerciales, des autorisations d'accès à certains services restreints, etc. Une autre fonction consiste au calcul d'une signature numérique ou de sa vérification. A cette fin, l'unité centrale 2 exécute un algorithme cryptographique à partir de données de programmation qui, conformément à l'invention, sont stockées dans les parties ROM masque 4 et EEPROM 6. L'algorithme cryptographique peut être basé par exemple sur un algorithme RSA (Rivert, Shamir et Adleman), ce qui implique un calcul d'exponentiation du type R = xe, où x est une valeur prédéterminée et e, un nombre entier qui constitue une clé. Le nombre R ainsi obtenu constitue une donnée chiffrée, déchiffrée, signée ou vérifiée. Dans le dispositif 1, le nombre x, transmis par l'interface de communication 10, est mémorisé en mémoire de travail 8. Le nombre e (la clé) est lui stocké dans une portion de mémoire ré-inscriptible 6, de type EEPROM dans l'exemple. L'algorithme d'exponentiation universel, c'est à dire un algorithme réalisant une succession de multiplications, est stocké dans une portion de la mémoire programme 4. Un algorithme d'exponentiation arbitraire est stocké dans une autre portion de la mémoire programme 4. Ce peut être un algorithme binaire (SAM) ou un algorithme de type M, M3,... Selon l'invention, le dispositif de calcul d'exponentiation sollicité pour un calcul d'exponentiation de type R=Xe active le générateur aléatoire 9, pour obtenir la représentation d'une chaîne d'addition-soustraction C (a) aléatoire. Cette chaîne aléatoire est représentative d'un nombre a, par essence, lui aussi aléatoire. Elle peut se représenter sous la forme d'une séquence d'éléments E (a). Elle se représente avantageusement sous la forme d'une séquence de registres r (a). La représentation de cette chaîne aléatoire C (a) est stockée en mémoire de travail 8. Le dispositif effectue alors - un premier calcul d'exponentiation y=xa à partir de la représentation de la chaîne d'additionsoustraction aléatoire C (a) en mettant en oeuvre l'algorithme d'exponentiation universel codé en mémoire programme. - un deuxième calcul d'exponentiation Z=xe' en mettant en oeuvre l'algorithme d'exponentiation arbitraire codé en mémoire programme. Le résultat de l'exponentiation R=xa est alors égal à la multiplication des résultats respectifs des premier et deuxième calcul d'exponentiation : R=Y. Z=xa. xe-a. On notera que l'algorithme d'exponentiation universel peut être configuré pour traiter la séquence aléatoire E (a) ou F (a), comme des séquences de doublets ou de triplets d'éléments ou de registres. Le deuxième calcul d'exponentiation Z=xe-a est effectué en mettant en oeuvre l'algorithme d'exponentiation arbitraire. Cet algorithme d'exponentiation arbitraire peut être utilisé pour calculer directement l'exponentiation Z=xe'. Mais il peut aussi être utilisé pour générer une représentation de chaîne d'addition-soustraction C (ea). Le calcul d'exponentiation Z=xe-a est alors effectué à partir de la représentation de cette chaîne C (e-a), en mettant en oeuvre l'algorithme d'exponentiation universel. Pour effectuer ce deuxième calcul d'exponentiation Z=xe, une étape préalable de calcul de la valeur numérique du nombre a à partir de la représentation de la chaîne aléatoire C (a) est nécessaire. Cette valeur numérique est avantageusement obtenue en utilisant l'algorithme de multiplication universel, qui permet, comme on l'a indiqué plus haut, la multiplication (scalaire) d'éléments d'un ensemble noté additivement. On a vu que cet algorithme dérive de l'algorithme d'exponentiation universel en remplaçant la succession d'opérations de multiplication par une succession d'opérations d'addition. Si on prend un exemple dans lequel la chaîne d'addition C (a) est représentée sous forme d'une séquence de registres r (a) : F (a) = { (y (i) : a (i), ss (i))} i i r. l'algorithme de mulptiplication scalaire universel s'écrit : Initialiser Ra (i) On remarque qu'en initialisant Ra (l) et Ris (1) à la valeur 1, on obtient Ry (r) =a. Dans un exemple pratique, dans lequel le dispositif dispose de deux registres de calcul RO et RI, on suppose que le générateur aléatoire est configuré pour générer une séquence aléatoire de 0 et 1, et que l'algorithme de multiplication scalaire universel est configuré pour traiter des triplets de registres. Soit la séquence aléatoire suivante fournie par le générateur 9 : (1,1, 1,0, 0,1, 1,1, 1,0, 0,1, 1,1, 1,1, 1,1, 0,0, 1,1, 1,1, 1,1, 1, 0, 0, 1). Cette séquence est lue par l'algorithme de multiplication scalaire universel comme la séquence de registres aléatoire suivante : # (a) = {(1:1,1), (0: 0,1), (1: 1,1), (0:0,1), (1 : 1, 1), (1 : 1,1), (0 : 0,1), (1 : 1,1), (1 : 1,1), (0 : 0,1)}. On a vu plus haut que cette séquence de registres est représentative du nombre 87. L'algorithme de multiplication scalaire universel traite à chaque pas, un triplet de registres correspondant de la séquence. Ainsi, après initialisation à 1 des deux registres RO et R1 du dispositif, cet algorithme universel va effectuer successivement les additions suivantes : R1 R0 R0 R0 Le résultat en sortie, contenu ici dans le registre RO, correspond à la valeur du nombre a. Le dispositif calcule alors le nombre (e-a), en effectuant une simple soustraction. On notera que l'algorithme d'exponentiation universel, pour le calcul de Y=x', et l'algorithme de multiplication scalaire universel, pour le calcul de a, peuvent traiter la représentation de la chaîne aléatoire C (a) en séquence, en parallèle. Le dispositif 1 peut ensuite entamer le deuxième calcul d'exponentiation Z=xe-a. On notera que dans l'invention, l'algorithme d'exponentiation arbitraire codé en mémoire programme n'a pas à inclure de contre-mesures vis à vis des attaques à canaux cachés, puisque la connaissance de e-a ne permet pas de retrouver complètement e, étant donné que la valeur de a, aléatoire, est protégée. Une variante de réalisation de l'invention concerne le mode de génération d'une représentation de la chaîne aléatoire C (a). Le dispositif représenté sur la figure 1 comprend en effet des moyens internes 9 de génération de cette chaîne aléatoire. Dans ce cas, il est possible d'activer ces moyens de génération à chaque fois que le dispositif 1 est sollicité pour un nouveau calcul d'exponentiation R=xe. Dans une autre variante non représentée, la chaîne aléatoire est générée par des moyens externes. Dans ce cas, ces moyens sont utilisés en phase de personnalisation du dispositif d'exponentiation 1, et la représentation de la chaîne aléatoire ainsi générée est alors mémorisée en mémoire ré-inscriptible 6. On a vu qu'une chaîne d'addition-soustraction peut-être représentée par une séquence de doublets ou triplets d'éléments de la chaîne, ou par une séquence de registres. Le dispositif de calcul selon l'invention doit donc être configuré pour traiter des doublets ou des triplets d'éléments ou de registres. Cette configuration est la même pour l'algorithme d'exponentiation universel et l'algorithme de multiplication universel, qui traitent la même chaîne. Cette configuration se traduit par les programmes d'exécution correspondants programmés en mémoire programme. Cette configuration dépend aussi du nombre de registres disponibles dans le dispositif. Dans le cas où le deuxième calcul d'exponentiation Z=xe-a utilise l'algorithme d'exponentiation universel, on prévoit que l'algorithme d'exponentiation arbitraire est homogène avec l'algorithme d'exponentiation universel implémenté. En d'autres termes, si l'algorithme d'exponentiation universel est configuré pour traiter des doublets, et utilise deux registres, on prévoit que l'algorithme d'exponentiation arbitraire génère des chaînes étoiles définies à partir de deux registres. Le générateur aléatoire doit aussi être configuré pour générer une séquence correspondant à une longueur r de chaîne aléatoire donnée. De préférence, s'agissant de masquer l'exposant e représentant une clé secrète, le générateur aléatoire est configuré pour que les nombres a et e soient sensiblement de même taille, pour rendre impossible toute détermination de cet exposant e par des attaques de type canaux cachés. Dans le cas particulier d'un système de cryptographie de type RSA, utilisant le dispositif d'exponentiation 1 pour effectuer des exponentiations de type R=xe, où e représente une clé secrète dont une partie des bits de poids forts est connue, on prévoit que le générateur aléatoire est configuré pour que la taille du nombre a soit sensiblement égale à la taille du nombre e moins sa partie connue. On comprendra que l'invention se prête à de nombreuses variantes de mise en oeuvre. Notamment, on peut prévoir que la chaîne aléatoire est une chaîne d'additions, ou avantageusement, une chaîne étoile. La description a été donnée dans le cadre d'un processeur intégré dans une carte à puce. Il est cependant clair que les enseignements se transposent à toutes autres applications, telles que dans les terminaux informatiques, de communication sur réseau ou autre, et dans tout autre dispositif électronique qui fait appel à des calculs de codage ou de décodage. REVENDICATIONS 1. Dispositif (1) destiné à réaliser des calculs d'exponentiation du type R=xe, où x est un élément d'un ensemble noté de façon multiplicative et e un nombre prédéterminé, caractérisé en ce qu'il comprend des premiers moyens de calculs d'exponentiation à partir d'une représentation d'une chaîne d'additionsoustraction aléatoire C (a) représentant un nombre a, pour calculer y=xa par la mise en oeuvre d'un algorithme universel d'exponentiation, et des deuxièmes moyens de calcul d'exponentiation mettant en oeuvre un algorithme d'exponentiation quelconque pour calculer Z=xe'. 2. Dispositif selon la revendication 1, caractérisé en ce que lesdits calculs d'exponentiation sont appliqués à des éléments d'un ensemble noté de façon additive. 3. Dispositif selon la revendication 1 ou 2, caractérisé en ce que lesdits seconds moyens de calcul comprennent des moyens de génération d'une représentation d'une chaîne d'addition-soustraction représentant le nombre e-a, pour calculer Z=xe-a à partir de ladite représentation en mettant en oeuvre un algorithme d'exponentiation universel. 4. Dispositif selon l'une quelconque des revendications 1 à 3 précédentes, caractérisé en ce que l'algorithme d'exponentiation universel est contenu dans une portion de mémoire programme du type mémoire figée codée par masquage (4). 5. Dispositif selon l'une quelconque des revendications 1 à 3 précédentes caractérisé en ce que l'algorithme d'exponentiation universel est contenu dans une portion de mémoire programme, du type mémoire réinscriptible (6). 6. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comprend des moyens internes (9) de génération d'une représentation de la chaîne aléatoire C (a). 7. Dispositif selon la revendication 6, caractérisé en ce que la représentation de la chaîne aléatoire C (a) est stockée dans une portion de mémoire de travail (8). 8. Dispositif selon la revendication 7, caractérisé en ce que les moyens de génération (9) d'une représentation de la chaîne aléatoire C (a) sont activés à chaque nouveau calcul d'exponentiation de type R=xe. 9. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que la représentation de la chaîne aléatoire C (a) est fournie au dispositif par des moyens de génération externes, et mémorisée dans une portion de mémoire ré-inscriptible (6). 10. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce que lesdits deuxièmes moyens de calcul sont configurés pour calculer la valeur numérique du nombre a à partir de la représentation de la chaîne aléatoire C (a), en mettant en oeuvre un algorithme de multiplication universel. 11. Dispositif selon la revendication précédente, caractérisé en ce que lesdits premiers et deuxièmes moyens de calcul sont activés pour effectuer en parallèle le calcul d'exponentiation xa et le calcul de la valeur numérique du nombre a. 12. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce que l'algorithme d'exponentiation universel est configuré pour traiter des chaînes de type chaînes d'addition. 13. Dispositif selon l'une quelconque des revendications 1 à 11, caractérisé en ce que l'algorithme d'exponentiation universel est configuré pour traiter des chaînes de type chaînes étoiles. 14. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce que l'algorithme d'exponentiation universel est configuré pour traiter des chaînes représentées sous forme de séquence de registres aléatoire. 15. Dispositif selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il est mis en oeuvre dans un système cryptographique basé sur un algorithme cryptographique faisant intervenir au moins un calcul d'exponentiation du type R=xe. 16. Dispositif selon la revendication précédente, caractérisé en ce que le nombre e représente une clé secrète et en ce que les moyens de génération de la chaîne d'addition-soustraction aléatoire sont configurés pour que les longueurs de a et de e soient sensiblement les mêmes. 17. Dispositif selon la revendication 15, caractérisé en ce que le nombre e représente une clé secrète dont une partie des bits de poids forts est connue et en ce que les moyens de génération de la représentation de la chaîne d'addition-soustraction aléatoire sont configurés pour que la longueur du nombre a soit sensiblement égale à la longueur du nombre e moins sa partie connue. 18. Carte à puce, caractérisée en ce qu'elle intègre un dispositif selon l'une quelconque des revendications 1 à 17. 19. Utilisation du dispositif selon l'une quelconque des revendications 1 à 17 pour réaliser un calcul d'exponentiation, notamment dans l'exécution d'un algorithme cryptographique.