FR 2819320 A1 20020712 FR 0100296 A 20010111 DISPOSITIF DESTINE A REALISER DES CALCULS D'EXPONENTIATION, ET PROCEDE DE PROGRAMMATION ET D'UTILISATION DU DISPOSITIF La présente invention concerne un dispositif de calcul d'exponentiation, ainsi qu'un procédé de programmation et d'utilisation de ce dernier, 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 (Rivert, Shamir et Adleman). La valeur R peut correspondre par exemple à un texte chiffré, un code confidentiel, une clé publique ou privée de cryptage ou de décryptage, etc. 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. Dans l'art antérieur, lorsque l'on doit effectuer une telle exponentiation, on utilise différents types d'algorithmes possibles : la méthode dite d'élever au carré et multiplier, connu sous le terme anglo-saxon de "square and multiply" (SAM), la méthode M, M3, des fenêtres glissantes, etc. Chaque fois qu'une telle méthode est mise en oeuvre, elle est intégralement codée en dur. Cela veut dire qu'elle est codée suivant une technique de masquage en mémoire non réinscriptible du type ROM ("read-only memory"en anglais), et ensuite exécutée. On rappelle qu'une ROM masque est une mémoire dont les données enregistrées sont physiquement inscrites lors de la réalisation matérielle du microcircuit, au niveau de la conception des masques utilisés pour la fabrication. Ces algorithmes sont complexes et leurs programmes d'exécution ne sont pas toujours totalement vérifiables avant une série de tests réalisés directement à partir de la ROM masque en fin de fabrication. S'il s'avère que le programme est erroné pour une raison ou une autre, les corrections nécessaires entraînent une révision complète de l'ensemble des masques utilisés pour la fabrication de la ROM. Ce"remasquage"implique des surcoûts considérables tant en ressources industrielles qu'en temps de développement d'une nouvelle mémoire. Au vu de ce problème, un objet de l'invention est de permettre de décomposer un algorithme, notamment pour la cryptographie, en une partie constante, relativement simple à programmer, et une partie variable en fonction de la valeur codée et d'un paramétrage de l'algorithme. Cette disposition permet de stocker la partie constante dans une ROM masque pour bénéficier de l'avantage de cette technologie, et la partie variable dans une mémoire ré-inscriptible, ou tout simplement programmable après sa fabrication. On réduit donc considérablement les risques d'erreurs au niveau de la partie ROM masque. En cas d'erreur dans le paramétrage de l'algorithme, ou en cas de changement de la clé, il suffit seulement de reprogrammer la mémoire ré-inscriptible. Cette opération n'intervient que sur le plan fonctionnel, s'agissant par exemple seulement de modifier un programme devant être chargé dans la mémoire. Plus particulièrement, l'invention concerne, selon un premier aspect, un dispositif destiné à réaliser des calculs d'exponentiation du type R = xe où x et e sont des nombres prédéterminés, comprenant des moyens de calcul et des moyens de mémorisation, caractérisé en ce que les moyens de calcul sont configurés pour réaliser les calculs d'exponentiation à partir d'une chaîne d'addition-soustraction C (e) élaborée pour l'exposant e, et en ce que la chaîne d'addition-soustraction C (e) est stockée dans une portion de mémoire inscriptible après sa fabrication, par exemple une mémoire du type électriquement programmable (EPROM) ou du type électriquement programmable et effaçable (EEPROM). Les moyens de calcul peuvent être configurés pour exécuter ledit calcul d'exponentiation, à partir de ladite chaîne d'addition-soustraction C (e), suivant un algorithme d'exponentiation stocké dans une portion de mémoire du type mémoire figée codée par masquage (ROM masque). Les moyens de calcul peuvent être configurés pour exécuter un algorithme d'exponentiation du type universel à partir de la chaîne d'addition-soustraction présentée sous la forme C (e) = {e, e (l),..., e (r)}, avec la condition e = = e (j pour tout 1 i sr, dans laquelle à l'étape i, on évalue une multiplication x exposant e (i) = x exposant e(j(i)), x exposant (k(i)), le dispositif comprenant des premier et deuxième registres Ra (i) et Rss (i) respectivement pour le stockage des valeurs de x exposant e et de x exposant e, et un troisième registre Rj.) pour le stockage du résultat de ladite multiplication. Dans ce cas, l'exposant e peut-être représenté par la séquence de registres suivante : r (e) = { (y (i) : a (i), ss (i))} i. étant configurés pour exécuter l'algorithme d'exponentiation (pour e > l) : Initialiser Ra (i) pour i = 1 à r, exécuter Ry (i) F R (i). Rss (i) émettre en sortie R = RY (r)- Les moyens de calcul peuvent aussi être configurés pour exécuter un algorithme d'exponentiation du type universel à partir d'une chaîne d'additionsoustraction du type étoile (en anglais"star chains"), présentée sous la forme C (e) = {e(0),e(1),...,e(r)} avec la condition e (i) = e ') + e (k (i)), pour tout 1 Dans ce cas, les moyens de calcul peuvent être configurés pour réaliser une séquence de registres donnée par : dz (e) = { (y (i) : B (i))} 1 : ; s rf et pour exécuter l'algorithme d'exponentiation : Initialiser Ry (o) pour i = 1 à r, exécuter Ry (i) F (i-l). Rss (i) émettre en sortie R = R, (r). Ainsi, les moyens de calcul peuvent par exemple être utilisés pour effectuer un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-i,..., eO) 2 et en réalisant un balayage de l'exposant e de la droite vers la gauche pour obtenir l'expression xe = (xr (x''r (x... (x'"')'-'. Dans un mode de réalisation, le dispositif utilise pour cet algorithme un premier registre (Rl) destiné à contenir les valeurs successives de x et un registre courant (RO), les moyens de calcul étant actifs pour exécuter un algorithme d'exponentiation"de droite à gauche" : RO pour i = 0 à (t-1), exécuter si (ei = 1), alors RO Les moyens de calcul peuvent aussi effectuer un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-i,..., eO) 2 et en réalisant un balayage de l'exposant e de la gauche vers la droite pour obtenir l'expression xe = (... ( (x'-')'x) 2.. xe') 2x. Dans un mode de réalisation, le dispositif utilise pour cet algorithme un premier registre (R1) et un registre courant (RO), les moyens de calcul étant actifs pour exécuter un algorithme d'exponentiation"de gauche à droite" : RO pour i = (t-1) en descendant à 0, exécuter RO ± RO2 si (ei = 1) alors RO Un autre exemple d'utilisation des moyens de calcul consiste à effectuer un algorithme selon une méthode 2k-aire, où on traite un nombre k de bits à chaque itération. Dans un mode de réalisation, les moyens de calcul sont alors prévus pour réaliser le précalcul des valeurs de x2-pour tout 1 j (2-1), le dispositif comprenant un premier, deuxième et troisième registres (RI, R2 et R3), les moyens de calcul étant actifs pour exécuter un algorithme d'exponentiation selon une méthode quaternaire, avec k = 2 : Précalculer x3 RO pour i = 2[log4 e] en descendant à 0 par sauts de - 2, exécuter cas (ei+,, ei) de (0, 0) : RO Emettre en sortie R = RO. Avantageusement, le dispositif est mis en oeuvre dans un système cryptographique basé sur un algorithme cryptographique faisant intervenir au moins une exponentiation du type R = xe, s'agissant par exemple d'un algorithme du type Rivert, Shamir, Adleman (RSA). Selon le mode de mise en oeuvre choisi, la chaîne d'addition-soustraction peut être simplement une chaîne d'additions présentée sous la forme : C (e) {e' ', e'",..., e'"}, avec la condition e'"= e"""+ e (k (l)), pour tout 1 i Selon un deuxième aspect, l'invention concerne une carte à puce, caractérisée en ce qu'elle intègre un dispositif du type précité. Selon un troisième aspect, l'invention concerne l'utilisation d'un dispositif du type précité pour réaliser un calcul d'exponentiation, notamment dans l'éxécution d'un algorithme cryptographique. Selon un quatrième aspect, l'invention concerne un dispositif de calcul d'exponentiation du type R = xe où x et e sont des nombres prédéterminés, utilisant des moyens de calcul et des moyens de mémorisation destinés à stocker un algorithme d'exponentiation, caractérisé en ce qu'il comprend les étapes de : - sélectionner une valeur d'exposant e ; - exprimer la valeur de l'exposant e par une chaîne d'addition-soustraction C (e) choisie ; - inscrire ladite chaîne d'addition-soustraction dans une portion de moyens de mémorisation qui est inscriptible après sa fabrication. Les caractéristiques optionnelles présentées dans le cadre du dispositif précité s'appliquent mutatis mutandis à ce procédé. Selon un cinquième aspect, l'invention concerne l'utilisation du procédé précité pour la mise en oeuvre dans un système de cryptographie basé sur un algorithme de cryptographie faisant intervenir au moins une exponentiation du type R = xe. 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. Avant d'aborder la mise en oeuvre matérielle de l'invention, il sera décrit les caractéristiques des calculs d'exponentiation au moyen de chaînes d'addition-soustraction utilisées dans ce cadre par les algorithmes cryptographiques. L'exponentiation est du type R = xe, où x est un nombre prédéterminé et e est un entier qui correspond, par exemple, à une clé privée. Une chaîne d'addition-soustraction permet d'arriver au résultat R de l'exponentiation par des successions de multiplications entre des paires de nombres préalablement calculés ou induits, ces nombres étant eux-mêmes égaux à x élevé à une puissance inférieure à e. Plus particulièrement, on exploite le fait que pour deux nombres a et b choisis pour que a + b = e, la valeur de xe peut s'exprimer comme xa. xb. L'objet de la chaîne d'additions est de produire une suite de nombres, à partir de 1, destinés à servir d'indices de puissance de sorte que le calcul d'élévation de x à ces indices soit réalisable en multipliant des résultats de calculs précédents. Un cas particulier des chaînes d'additionsoustraction est la chaîne d'additions. Celle-ci est une suite qui a la propriété que chacun de ses éléments est la somme de deux éléments précédents. Le premier élément de la suite vaut 1, et le dernier élément est égal à l'exposant e. Pour calculer la valeur xe, on peut donc établir une chaîne d'additions pour l'exposant e (quelque chose qui passe de 1 à e). Or, puisque chaque élément i (hormis le premier) de cette chaîne est égal à deux éléments précédents, on a toujours xe (i) = xe(j(i)).xe(k(i)), en posant la condition que e (i) = e (j (i) ) + e (k (i)). Dans un langage plus formel, une chaîne d'additions pour un nombre e est définie comme la séquence C (e) = {e, e,..., e}, qui satisfait les conditions : (Cl) e (o) = 1, e (r) = e, et (C2) pour tout 1 On peut ainsi aisément obtenir R = xe en calculant pour i = 1 à r : x puissance e = x puissance e(j(i)). x puissance e (k (, et en fixant R = x puissance e (r). Par exemple, pour e = 5, on peut élaborer la chaîne d'additions C (5) = {1, 2,3, 5}. Cette chaîne commence par 1 et se termine par 5, et chaque élément de la suite est égal à la somme de deux éléments précédents. Par exemple, le nombre 2 est formé par 1+1, 3 est formé par 2+1,5 est formé par 3+2. Pour calculer x exposant 5, on calcule d'abord xl, ensuite 2 1 1 x2 en prenant x. xl, l'indice 2 étant formé par la somme 1+1. On calcule ensuite x3 en prenant la somme 2 1 des indices 1 et 2, donnant x2. x, et enfin on calcule x5 en prenant la somme des indices 3 et 2, donnant 3 2 x3. x2. Le calcul d'exponentiation est alors réalisé 1 2 1 1 3 2 1 avec : x = x, x2 = xl. x\ x3 = x2. x\ et enfin in = 3 2 x3. x2. Une fois que l'on dispose d'une chaîne d'addition, l'algorithme pour calculer x exposant e est rendu plus facile. Il suffit de parcourir la chaîne en multipliant simplement. Une forme plus générale de la chaîne est la chaîne dite d'addition-soustraction, où chaque élément e (i) de la suite est égal à plus ou moins un élément précédent e (j), plus ou moins un autre élément e (k). On peut donc prendre en compte soit un élément, soit son opposé. Il existe une variante, dénommée chaîne étoile, qui est une chaîne d'additions telle que chaque élément e est égal à l'élément immédiatement précédent e (i-l) plus un autre élément précédent e (k). Le cas ci-dessus pour c (5) est donc un exemple de chaîne étoile. L'exponentiation avec une telle chaîne permet de mettre en oeuvre un algorithme dit d'élever au carré et multiplier, dénommé ci-après SAM (de l'anglais"square- and-multiply"). De ce qui précède, on constate que chaque algorithme a une chaîne d'additions correspondante. Autrement dit, la chaîne d'additions, de par le choix des valeurs intermédiaires qui la constituent, donne un algorithme. Ainsi, d'autres algorithmes issus de chaînes d'additions différentes peuvent être utilisés pour parvenir à un même résultat de calcul. Par 5 exemple, dans le cas précédent de x5, on peut aussi prendre les valeurs 1, 2, 4 et 5. Cela donne lieu à une autre chaîne d'additions, et donc à un autre algorithme. Plus l'exposant est grand, plus les possibilités d'envisager d'autres algorithmes sont importantes. Avantageusement, on utilise la notation multiplicative. En notation additive, l'exponentiation devient une multiplication. Cette notion est particulièrement avantageuse pour la cryptographie basée sur les courbes elliptiques lorsqu'on sait que les points d'un groupe elliptique forment un groupe additif, c'est-à-dire abélien. La figure 1 représente sous forme de schéma bloc un dispositif 1 programmé conformément à l'invention, en l'occurrence une carte à puce destinée à exécuter un programme cryptographique. Le dispositif met en oeuvre une chaîne d'additions C (e) stockée dans une portion de mémoire ré-inscriptible, et l'algorithme de multiplication est stocké dans une mémoire ROM masque. Ce dernier peut être basé sur un algorithme RSA (Rivert, Shamir et Adleman) qui implique un calcul d'exponentiation du type R = xe, où x est une valeur prédéterminée et e est 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. A cette fin, le dispositif 1 réunit dans une puce des moyens programmés pour l'exécution de calculs (moyens de calcul), composé d'une unité centrale (UC) 2 reliée fonctionnellement à un ensemble de mémoires dont : - une mémoire accessible en lecture seulement, du type ROM masque 4, aussi connue sous l'appellation anglaise"mask read-only memory (mask ROM)", - une mémoire reprogrammable électriquement, du type EEPROM 6 (de l'anglais"electrically erasable programmable ROM"), et - une mémoire accessible en lecture et en écriture du type RAM 8 (de l'anglais"random access memory"). L'ensemble de ces mémoires 4,6 et 8, ainsi que l'unité centrale 2, peuvent être réalisés sur une seule puce. 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 être sous forme de plots sur la carte pour une connexion dite"à contact"avec un lecteur, et/ou d'une antenne dans le cas d'une carte dite"sans contact". L'une des fonctions des moyens de calcul 1 est de crypter et de 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 l'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. Dans la mémoire EEPROM 6 est inscrite la chaîne d'additions C (e), qui servira dans sa fonction générale à extraire les multiplicandes successifs à l'algorithme de multiplication contenu dans la ROM masque 4 et, dans sa fonction de codage, à coder l'algorithme d'exponentiation par les choix spécifiques des valeurs intermédiaires e pour cette chaîne. Selon cette approche, une fois que l'on dispose d'une chaîne d'additions en dehors de la ROM masque 4, il est seulement nécessaire de coder dans cette dernière un algorithme universel d'exponentiation, qui est basé sur de simples règles de multiplication, et la valeur de x. De la sorte, la programmation de la partie ROM masque 4 est aisée et comporte peu de risques d'erreur. Un tel algorithme de multiplication se définit comme suit. soit une chaîne d'additions C (e) {e, e,..., e} qui est fournie à partir de la portion EEPROM 6 pour un exposant e. Ainsi, pour tout 1 : 9 i : gr, ona e (ì) = e e Il sera maintenant décrit un exemple de codage de la représentation en chaîne d'additions. La chaîne doit permettre d'exprimer non seulement les valeurs de calcul, mais aussi comment on y aboutit, c'est-à-dire le chemin qui permet d'arriver à ces valeurs. De manière remarquable, lorsque l'on réalise des multiplications, on déclare simplement qu'un registre contient le produit des deux autres. Par exemple, à l'étape de calcul du iième élément de la chaîne d'additions, le registre Rr (i) sera déclaré comme étant égal au contenu du registre Ra (i) fois le contenu du registre Rss (i). L'avantage est que si on dispose, par exemple, de quatre registres, seulement deux bits sont nécessaires pour coder chacun des registres. L'algorithme va alors transmettre les valeurs aux registres R&gamma;(i), R&alpha;(i) et Rss(i). L'exposant e peut donc être représenté par la séquence de registre suivante : r (e) = { (y (i) : a (i), B (i))} i De ce qui précède, on obtient l'algorithme d'exponentiation suivant (pour e > l) : Initialiser Ra (l) f-x ; Rss (i) x pour i = 1 à r, exécuter Ry (i) Rot (i). RB (i) émettre en sortie R = Ry (r)' Cet algorithme est désigné algorithme universel d'exponentiation. On note que Ra (i) et Rss (l) sont initialisés avec la valeur x, car le deuxième terme de chaque chaîne d'additions est toujours e = 2. On note également que l'on peut avoir a (1) = ss (l), et plus généralement a (i) = ss (i). Si on veut économiser de l'espace mémoire, on peut utiliser des chaînes étoiles, car dans ces dernières il est préétabli par convention que le contenu du registre Ra (i) est égal au contenu au stade précédent du registre Ry (i-l). L'exploitation de cette identité des contenus autorise un gain d'espace d'environ 1/3. Pour des chaînes étoiles, on a donc la condition e(i) = e(i-1) + e(k(i)). Dans ce cas, il suffit de prévoir des paires de registres pour représenter e, en posant la condition a (i) = y (i-1) pour tout 1 La séquence de registres est donc donnée par : r* (e) = {(&gamma; (i) : ss (i))} i L'algorithme d'exponentiation correspondant est : Initialiser Ry/o) x ; R (i) pour i = 1 à r, exécuter Ry (i) R7 (i-l). R3 (i) émettre en sortie R = Ry(r)Les principes de l'invention peuvent s'appliquer à tous types d'algorithmes d'exponentiation, notamment les méthodes"binaires"et du type 2k-aire. Selon la méthode binaire, on effectue un balayage de l'exposant de la droite vers la gauche. Soit e = (etc,..., 0) 2 la représentation binaire de e. On peut donc écrire : x = X.) O (X-) I (X-) 2. (x 1-1. Un registre de la mémoire RAM 8 (que l'on désignera RI) contient les valeurs successives de 22 x, et lorsque ei = 1, la valeur du contenu de ce registre est multipliée dans le registre courant (que l'on désignera Rad), également dans la mémoire RAM 8. L'algorithme d'exponentiation"de droite à gauche"s'exprime alors comme suit : RO pour i = 0 à (t-1), exécuter si (ei = 1), alors RO Rl F R12 émettre en sortie R = RO. A titre d'exemple, supposons que e = 87 = (1, 0, 1, 0, 1, 1, 1) 2. Une chaîne d'additions qui correspond à l'algorithme"de droite à gauche" est Cdg2 (87) = {1, 2,3, 4,7, 8,16, 23,32, 64, 87}. En utilisant la représentation r (e) = { (y (i) : a (i), B (i))} i. Une autre façon de calculer R = xe consiste à balayer les bits de e de gauche à droite. L'algorithme qui en résulte est la méthode SAM (élever au carré et multiplier). Cet algorithme découle de l'expression : X = (... ( (X) 'X2) 2... XX. L'algorithme d'exponentiation SAM s'exprime alors comme suit : RO pour i = (t-1) en descendant à 0, exécuter RO i si (e = 1) alors RO émettre en sortie R = Ru. Toujours avec le même exemple, une chaîne d'additions correspondante pour e = 87 est donnée par Cgd2 (87) = {1, 2, 4, 5, 10, 20, 21, 42, 43, 86, 87}. Du fait que les algorithmes SAM produisent des chaînes d'additions de type étoile, on peut utiliser la représentation étoile r* (e) = { (y (i) : ss (i))} 1 l 1 : 5 i : g ri et ainsi obtenir r*gd2 (87) = { (0 : 0), (0 : 0), (0 : l), (0 : 0), (0 : 0), (0 : l), (0 : 0), (0 : 1), (0 : 0), (0 : 1)}, où RO et R1 sont tous les deux initialisés à x. Selon la méthode 2k-aire, on traite un nombre k de bits à chaque itération. Il est à noter que dans ce cas, l'algorithme"de gauche à droite"a un meilleur rendement, car c'est seulement dans ce sens que l'on peut utiliser des valeurs précalculées. Pour tout 1 j (2k-l - 1), on précalcule les valeurs de x2j+l et on les mémorise dans des registres. Il n'est pas nécessaire de précalculer les puissances paires, puisqu'elles peuvent être incorporées dans les opérations d'élever au carré. L'algorithme pour k = 2 selon la méthode quaternaire est la suivante : Précalculer x3 RO pour i = 2 [log4 e] en descendant à 0 par sauts de - 2, exécuter cas (ei+,, ei) de (0, 0) : RO Emettre en sortie R = RO Cet algorithme nécessite (11/8) log2 (e) = 1, 3751zog2 (e) multiplications en moyenne, comparé à 1, 51sog2 (e) multiplications en moyenne pour l'algorithme SAM d'élever au carré et multiplier. Il est cependant possible de diminuer la complexité à (4/3) log2 (e) = 1, 3331log2 (e) multiplications en moyenne. La méthode est due à Yacobi et est désignée l'algorithme (M, M3). Pour e = 87, la méthode d'exponentiation quaternaire donne Cgd4 (87) = {1, 2, 4, 5, 10, 20, 21, 42, 84, 87}, et donc r gd4 (87) = { (0 : 0), (0 : 0), (0 : 1), (0 : 0), (0 : 0), (0 : 1), (0 : 0), (0 : 0), (0 : 2)} ; où RO et Rl sont 3 initialisés à x, et R2 est initialisé à x3. On comprendra de l'ensemble de la description du mode de réalisation, que ce qui est codé dans la portion ROM masque 4 est un algorithme qui parcourt une chaîne (ou suite) contenue par exemple dans la portion EEPROM 6 qui multiplie simplement les éléments donnés par celle-ci. Ce type d'algorithme est très facile à programmer en ROM masque 4. Ce qui est mis en EEPROM 6 est non pas la clé (c'est-à-dire l'exposant), ce qui est fait habituellement, mais une représentation de cette clé par une chaîne d'additions spécifique. En cas d'erreur dans l'élaboration ou dans la programmation de la chaîne, ou encore de modification de la clé, il suffit de programmer les nouvelles données qui conviennent dans la portion EEPROM 6 seulement. En effet, une erreur d'algorithme inscrit dans la mémoire EEPROM équivaudrait à une erreur dans l'écriture d'une chaîne d'additions. Le programme de multiplication stocké dans la portion ROM masque 4 reste inchangé. Ce codage dans la chaîne d'additions en mémoire ré-inscriptible est donc avantageux par rapport à la technique habituelle de mettre l'intégralité de l'algorithme (par exemple du type SAM) en ROM masque, ce qui oblige de procéder à un remasquage en cas d'erreur. Par ailleurs, l'algorithme SAM utilisé classiquement dans ces conditions est relativement difficile à mettre en oeuvre, notamment en raison des contremesures à installer, ce qui augmente le risque d'erreur. Dans le mode de réalisation préféré, au lieu de coder la clé sous sa forme binaire, on garde en mémoire sa représentation sous forme de triplets. On parcourt la chaîne et on multiplie le premier registre au second, et on met le résultat dans le troisième. Ceci est sensiblement tout ce qu'il y a d'exécutoire de programmé dans le dispositif, par exemple la carte à puce, pour réaliser de l'exponentiation. Avec cette approche, il est possible de mettre en oeuvre n'importe quel algorithme : il suffit de changer la chaîne d'additions de manière correspondante. Donc, le remasquage de la partie ROM masque 4 n'est pas nécessaire dans de tels cas. Par ailleurs, le temps d'exécution est beaucoup plus rapide car la chaîne d'additions peut être traitée par des algorithmes efficaces, permettant de descendre à 1,3 voire 1, 2x n multiplications, pour un module de n bits. Lorsque l'on utilise pour la clé (c'est-à-dire l'exposant) codée non pas sa représentation binaire, mais une suite de registres, on peut prendre pour exposant une chaîne plus courte, ce qui implique une plus grande rapidité d'exécution de l'algorithme d'exponentiation. En plus, l'invention peut servir de protection contre les attaques dites SPA (de l'anglais"simple power analysis"), ou de manière plus générale contre les attaques dites SSLA (de l'anglais"simple secretleakage analysis"). Par ailleurs, la diversité des chemins de calcul d'exponentiation pour une valeur de e donnée, grâce au choix des valeurs intermédiaires e (i) dans les chaînes d'additions, permet d'éviter des attaques dites "différentielles". Ces attaques sont basées par exemple sur une analyse de la moyenne du courant consommé par une unité centrale. En effet, le calcul de xe, typiquement employé pour le codage RSA, peut être réalisé à chaque fois d'une façon différente, ce qui ne permet pas de réaliser des moyennes sur des éléments similaires. Or, l'attaque nécessite de calculer cette moyenne, sinon on obtient seulement une moyenne sur du bruit et l'information disparaît. On comprendra que l'invention se prête à de nombreuses variantes, tant au niveau des modes de réalisation matériels que de l'élaboration des algorithmes et de leurs chaînes d'additions. La description est 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 et e sont des nombres prédéterminés, comprenant des moyens de calcul (2) et des moyens de mémorisation (4,6, 8), caractérisé en ce que les moyens de calcul (2) sont configurés pour réaliser les calculs d'exponentiation à partir d'une chaîne d'addition-soustraction C (e) élaborée pour l'exposant e, et en ce que ladite chaîne d'addition-soustraction C (e) est stockée dans une portion de mémoire (6) inscriptible après sa fabrication. 2. Dispositif selon la revendication 1, caractérisé en ce que ladite chaîne d'addition-soustraction C (e) est stockée dans une portion de mémoire figée inscriptible, du type électriquement programmable (EPROM) (6). 3. Dispositif selon la revendication 1, caractérisé en ce que ladite chaîne d'addition-soustraction C (e) est stockée dans une portion de mémoire figée réinscriptible, du type électriquement programmable et effaçable (EEPROM) (6). 4. Dispositif selon l'une quelconque des revendications 1 à 3, caractérisé en ce que les moyens de calcul (2) sont configurés pour exécuter ledit calcul d'exponentiation, à partir de ladite chaîne d'additionsoustraction C (e), suivant un algorithme d'exponentiation stocké dans une portion de mémoire (4) du type mémoire figée codée par masquage (ROM masque). 5. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que les moyens de calcul (2) sont configurés pour exécuter un algorithme d'exponentiation du type universel à partir de ladite chaîne d'addition-soustraction présentée sous la forme C (e) = {e (O)/e (l),..., e (r)}, avec la condition e (i) = + e (-)) e, pour tout 1 i 6. Dispositif selon la revendication 5, caractérisé en ce que l'exposant e est représenté par la séquence de registre suivante : r (e) = { (y (i) : cc (i) 1 13 (i) r i signif iant que Ry (i) = Ra (i). RB (i), les moyens de calcul (2) étant configurés pour exécuter l'algorithme d'exponentiation (pour e > l) : Initialiser Rct (i) -x ; P r) x pour i = 1 à r, exécuter Ry (i) "Ra (i). Rj3 (i) émettre en sortie R = Ry/r)- 7. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que les moyens de calcul (2) sont configurés pour exécuter un algorithme d'exponentiation du type universel à partir d'une chaîne d'addition-soustraction du type étoile, présentée sous la forme c(e) = {e(0),e(1),...,e(r)} avec la condition e(i) = ~ e(i-1) ~ e(k(i)), pour tout 1 i r, le dispositif comprenant un premier registre Rss (i) et un second registre Ry (i) pour représenter e, avec la condition &alpha; (i) = y (i-1) pour tout 1 8. Dispositif selon la revendication 7, caractérisé en ce que les moyens de calcul (2) sont configurés pour réaliser une séquence de registres donnée par : F* (e) = { (y (i) : B (i))} 1 i g j- et pour exécuter l'algorithme d'exponentiation : Initialiser Ro) pour i = 1 à r, exécuter Ry (i) Ry (i-l). (i) émettre en sortie R = Rr). 9. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-1, ..., eo 2 et en réalisant un balayage de l'exposant e de la droite vers la gauche pour obtenir l'expression xe = (x (x' (X2... (x'"'r'-'. 10. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-l,..., eo) 2 et en réalisant un balayage de l'exposant e de la gauche vers la droite pour obtenir l'expression xe = (... ( (x''-') 2x''-2) 2... xe') 2xe. 11. Dispositif selon l'une quelconque des revendications 1 à 4, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode 2k-aire, où on traite un nombre k de bits à chaque itération, les valeurs de x ('l") pour tout 1 2 (k-1 étant précalculées. 12. Dispositif selon l'une quelconque des revendications 1 à 11, caractérisé en ce que ladite chaîne d'addition-soustraction est une chaîne d'additions présentée sous la forme : C (e) = {e ", e'",..., e'}, avec la condition e (l) = e " + e (k (l)), pour tout 1 sis r. 13. Dispositif selon l'une quelconque des revendications 1 à 12, caractérisé en ce qu'il est mis en oeuvre dans un système cryptographique basé sur un algorithme cryptographique faisant intervenir au moins une exponentiation du type R = xe. 14. Dispositif selon la revendication 13, caractérisé en ce que l'algorithme cryptographique est du type Rivert, Shamir, Adleman (RSA). 15. Carte à puce, caractérisée en ce qu'elle intègre un dispositif (1) selon l'une quelconque des revendications 1 à 14. 16. Utilisation du dispositif selon l'une quelconque des revendications 1 à 15 pour réaliser un calcul d'exponentiation, notamment dans l'exécution d'un algorithme cryptographique. 17. Procédé de programmation d'un dispositif de calcul d'exponentiation du type R = xe, où x et e sont des nombres prédéterminés, utilisant des moyens de calcul (2) et des moyens de mémorisation (4,6, 8) destinés à stocker un algorithme d'exponentiation, caractérisé en ce qu'il comprend les étapes de : - sélectionner une valeur d'exposant e ; - exprimer la valeur de l'exposant e par une chaîne d'addition-soustraction C (e) choisie ; - inscrire ladite chaîne d'addition-soustraction dans une portion (6) de moyens de mémorisation (4, 6, 8) qui est inscriptible après sa fabrication. 18. Procédé selon la revendication 17, caractérisé en ce que l'on stocke ladite chaîne d'additionsoustraction C (e) dans une portion de mémoire figée inscriptible, du type électriquement programmable (EPROM) (6). 19. Procédé selon la revendication 17, caractérisé en ce que l'on stocke ladite chaîne d'additionsoustraction C (e) dans une portion de mémoire figée réinscriptible, du type électriquement programmable et effaçable (EEPROM) (6). 20. Procédé selon l'une quelconque des revendications 17 à 19, caractérisé en ce que l'on inscrit un algorithme d'exponentiation dans une portion de mémoire (4) du type mémoire figée codée par masquage (ROM masque), l'algorithme fonctionnant à partir de ladite chaîne d'addition-soustraction C (e). 21. Procédé selon l'une quelconque des revendications 17 à 20, caractérisé en ce que l'on configure les moyens de calcul (2) pour exécuter un algorithme d'exponentiation du type universel à partir de ladite chaîne d'addition-soustraction présentée sous la forme C (e) = (O), e (l),.... e (r) , avec la condition e = e ] (i)) + e (k (i)), pour tout 1 : i troisième registre R, (i) pour le stockage du résultat de ladite multiplication. 22. Procédé selon la revendication 21, caractérisé en ce que l'exposant e est représenté par la séquence de registre suivante : r (e) = { (y (i) : a (i), B (i))} i l) : Initialiser Ra (i) pour i = 1 à r, exécuter RY (i) Ra (i). Rss (i) émettre en sortie R = Ry (r). 23. Procédé selon l'une quelconque des revendications 17 à 20, caractérisé en ce que l'on configure les moyens de calcul (2) pour exécuter un algorithme d'exponentiation du type universel à partir d'une chaîne d'addition-soustraction du type étoile, présentée sous la forme C (e) = {e (O), e (l),..., e (r)} avec la condition e (i) = e' e 24. Procédé selon la revendication 23, caractérisé en ce que l'on configure les moyens de calcul (2) pour réaliser une séquence de registres donnée par : F* (e) = { (y (i) : B (i))} i i r, et pour exécuter l'algorithme d'exponentiation : Initialiser Ry (0) x ; Rss (l) X pour i = 1 à r, exécuter Re F Re Rss (i) émettre en sortie R = RY (r). 25. Procédé selon l'une quelconque des revendications 17 à 20, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-i, eo) 2 et en réalisant un balayage de l'exposant e de la droite vers la gauche pour obtenir l'expression xe = (x) r (x2' (x... (x2"'-; r'-'. 26. Procédé selon l'une quelconque des revendications 17 à 20, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode binaire avec la représentation binaire de e donnée par e = (et-i, ..., e0) 2 et en réalisant un balayage de l'exposant e de la gauche vers la droite pour obtenir l'expression xe = (... ( (xel-l) 2xe'-2) 2... xel) 2xeo. 27. Procédé selon l'une quelconque des revendications 17 à 20, caractérisé en ce que les moyens de calcul (2) effectuent un algorithme selon une méthode 2k-aire, où on traite un nombre k de bits à chaque itération, avec un précalcul des valeurs de x" pour tout 1 j 28. Procédé selon l'une quelconque des revendications 17 à 27, caractérisé en ce que ladite chaîne d'addition-soustraction est une chaîne d'additions présentée sous la forme : C (e) = {e(0),e(1),...,e(r)}, avec la condition e e'-"'+ e"""", pour tout 1 29. Utilisation du procédé selon l'une quelconque des revendications 17 à 28 pour la mise en oeuvre dans un système cryptographique basé sur un algorithme cryptographique faisant intervenir au moins une exponentiation du type R = xe.