PROCEDE DE CALCUL CRYPTOGRAPHIQUE COMPORTANT UNE ROUTINE D'EXPONENTIATION MODULAIRE
La présente invention concerne un procédé de calcul cryptographique dans lequel des séquences d'instructions de programmes sont exécutées, et comportant plus spécifiquement une routine de calcul d'exponentiation modulaire.
De nombreux procédés de calcul cryptographique comportent au moins une routine de calcul d'exponentiation modulaire, comme par exemple le RSA (du nom de ses inventeurs Rivest Shamir Adleman) ou des procédés exploitant des calculs sur courbes elliptiques tel que le ECDSA par exemple (de l'anglais Elliptic Curve Digital Standard Algorithm) ou le ECDH (de l'anglais Elliptic Curve Diffie Helmann) . De tels procédés sont basés sur l'utilisation d'un algorithme à clé publique, et peuvent s'appliquer à la génération de signatures numériques probabilistes d'un message et/ou à un protocole d'échange de clé et/ou à un algorithme de chiffrement d'un message- La présente invention s'applique en particulier à des procédés de calcul cryptographique mis en œuvre par des composants électroniques sécurisés tels que des micro-contrôleurs pour carte à puce par exemple- La figure 1 illustre schématiquement la structure d'un micro-contrôleur pour carte à puce. Un tel microcontrôleur, intégré sur une puce, comporte un microprocesseur, ou CPU, apte à traiter les données et programmes enregistrés sur la puce. Le microprocesseur est associé à différents types de mémoires au moyen de bus de données. Un organe d'entrée/sortie composé d'un
connecteur, pour une carte à puce à contact, assure les dialogues avec le monde extérieur. Les opérations du micro-contrôleur sont séquencées par une horloge (CLK) . Le micro-contrôleur a en outre une alimentation Vcc et une terre GND.
L'exécution de programmes par le micro-contrôleur doit être sécurisée car tout ou partie des données manipulées sont secrètes. Cette sécurisation consiste essentiellement à éviter que les données manipulées lors de l'exécution des instructions d'un programme puissent être interprétées à l'extérieur du composant sécurisé. Une telle fuite d'information est possible de par la structure même du micro-contrôleur qui peut subir ce que l'on appelle des attaques en courant, ou DPA pour « Differential Power Attac » en terminologie anglaise .
La figure 2 illustre le principe d'une attaque en courant par un graphe de la consommation de courant I de la puce en fonction du nombre de coups d'horloge t.
Lorsque le microprocesseur exécute un programme composé d'une séquence d'instructions (Insl, Ins2, Ins3,...), avec un algorithme secret ou non, il va chercher les données nécessaires en mémoire, les traite et écrit les résultats en mémoire.
Classiquement, l'exécution d'une séquence d'instructions se déroule toujours de la même manière, identique et déterminée.
Il devient alors possible de réaliser une attaque en courant par la simple lecture de la consommation en courant du micro-contrôleur (à partir de son alimentation Vcc) qui peut laisser transparaître des informations sur les données secrètes manipulées. Pour obtenir de telles informations, il est nécessaire de réaliser la même séquence d' instructions plusieurs
fois. Il devient alors possible de corréler la consommation de courant avec les données traitées lors de l'exécution de la même instruction. La consommation de courant du micro-contrôleur peut ainsi devenir un véritable témoin des données manipulées.
Par exemple, un attaquant peut procéder de la manière suivante. Si on considère une donnée secrète de huit octets k[i] avec i de 1 à 8. On utilise un accumulateur et on réalise une boucle pour i de 1 à 8 Acc= k[i]xor k[i+l]. A la fin de la boucle, on obtient Acc= xor (Σ (i=là8) k[i] ) . Lorsque l'on observe la consommation de courant I en fonction du temps lors de cette séquence (boucle) , on obtient une courbe à' l'allure cyclique qui est le reflet de ce qui a été exécuté dans le micro-contôleur, c'est à dire que dans l'exemple cité on obtient huit signaux identiques pour les huit opérations de la boucle. Néanmoins, si l'on compare chaque élément des signaux, on parvient à extraire des différences, et ainsi des informations sur les k[i] secrets. L'observation est en outre facilité par la possibilité de faire exécuter la même boucle plusieurs fois. La consommation de courant de la carte étant la même pour une même séquence d'opérations, on parvient à extraire l'information recherchée.
Il devient par conséquent indispensable d'éliminer cette répétition dans la consommation de courant pour une même séquence d'instructions.
Dans le cas d'un calcul d'exponentiation, qui consiste à calculer xa avec x une donnée publique et a une donnée privée, la méthode la plus usitée consiste à calculer une série de carrés et de multiplications. Si cette routine de calcul est répétée plusieurs fois sans que les données d'entrée x et a soient modifiées, la consommation en courant sera identique et fournira des
informations sur l'exposant a, privé et secret, à un attaquant.
La présente invention a pour objet un procédé de calcul cryptographique dans lequel la routine de calcul d'exponentiation ne révèle aucune information sur l'exposant privé.
A cet effet, l'invention propose une exécution aléatoire et non reproductible à chaque séquence de calcul en faisant appel à des aléas dans les calculs de carrés et de multiplications.
L'invention concerne plus particulièrement un procédé de cryptographie pour la génération de signatures numériques probabilistes et/ou pour un protocole d'échange de clé et/ou pour un algorithme de chiffrement, ledit procédé comprenant une étape de calcul d'exponentiation (xa) d'un module public (x) par un exposant privé (a) basé sur une boucle de calculs sur une variable intermédiaire (y) de carrés (y2) et de multiplications (y*x) , caractérisé en ce que le procédé consiste à introduire un aléa (ri) dans le calcul du carré (y2) et/ou un aléas (r2) dans le calcul de la multiplication (y*x) , lesdits aléas (ri, r2) étant générés à chaque appel à la routine de calcul d'exponentiation (xa) .
Selon une caractéristique, le calcul du carré (y2) consiste à introduire un aléa (ri) par le calcul de l'identité remarquable y2=(y+rα) (y-rχ) + di, avec dι=rι2.
Selon une autre caractéristique, le calcul de la multiplication (y*x) consiste à introduire un aléa (r2) par le calcul de y*x =(y-r2)*x +d2, avec d2=r2*x.
Selon une application, l'algorithme de cryptographie est le RSA (du nom de ses inventeurs Rivest Shamir Adleman) .
Selon une autre application, l'algorithme de cryptographie est le ECDSA (de l'anglais Elliptic Curve Digital Signature Algorithme) .
Selon une autre application, l'algorithme de cryptographie est le ECDH (de l'anglais Elliptic Curve Diffie Helmann) .
L'invention concerne également un dispositif sécurisé, de type carte à puce, et/ou un dispositif de calcul, de type ordinateur muni d'un logiciel de chiffrement, comportant un composant électronique apte à mettre en œuvre le procédé de calcul d'exponentiation selon l'invention.
L'invention présente l'avantage de proposer une exécution totalement aléatoire sans vraiment augmenter le temps d' exécution de la routine du calcul d' exponentiation.
Ainsi, pour la même opération (carré et multiplication) répétée plusieurs fois, la génération d'aléas différents entraînent une exécution différente de la routine. La corrélation entre la consommation de courant et les données manipulées devient alors impossible.
D'autre avantages et particularités de l'invention apparaîtront au cours de la description qui suit donnée à titre d'exemple illustratif et non limitatif en référence aux figures dans lesquelles :
La figure 1, déjà décrite, illustre schématiquement une puce de circuit intégré munie d'un micro-contrôleur, - La figure 2, déjà décrite, est un graphe illustrant le procédé de l'attaque en courant d'un composant électronique sécurisé.
Le calcul d' exponentiation modulaire consiste à calculer xa avec x une donnée publique fixée et a un exposant privé secret, x et a étant deux entiers.
Une méthode- classique pour effectuer ce calcul d'exponentiation, connue sous l'expression anglo- saxonne de « square and multiply », consiste à le décomposer en une série de calculs de carrés et de multiplications. L'entier a est exprimé en base 2 sous la forme a=∑i=oàn 2xa, , avec ai=0 ou 1 secrets et n la taille du groupe mathématique sur lequel on travaille, par exemple une courbe elliptique avec n=163.
Le calcul d'exponentiation consiste a-lors à réaliser la boucle suivante pour i allant de n-1 à 0 :
Soit une variable intermédiaire initialisée à y=x ;
Pour i= n-1 à 0, y=y2 si a±≈l, y=y*x
En fin de boucle, on a xa=y.
On remarque que dans une telle méthode, si la boucle est appelée plusieurs fois, les mêmes calculs seront effectués avec les mêmes données. Le calcul d'exponentiation est donc une cible pour une attaque DPA.
Afin d'éviter une telle attaque en courant, une solution consiste à introduire des aléas dans les données d' entrée de la boucle de la routine du calcul d'exponentiation, évitant ainsi une reproductibilité de la consommation en courant entre deux appels à cette routine.
Selon l'invention, deux aléas sont générés pour protéger respectivement le calcul du carré et de la multiplication.
Le procédé selon l'invention est basé sur les identités mathématiques suivantes :
x2=(x+r) * (x-r)+r2. y*x=(y-r)*x + v, avec v=r*x.
Soit ri et r2, deux entiers aléatoires générés lors de chaque appel à la routine de calcul d' exponentiation.
Soit dι= rx 2 et d2= r2*x.
Le calcul d'exponentiation consiste alors à réaliser la boucle suivante pour i allant de n-1 à 0 : La variable intermédiaire y est initialisée à y=x. Pour i= n-1 à 0, z=y, avec z une autre variable intermédiaire y=(y+rι)*(y-rι)+dι rι=z dι=y si ai=l, z=y y=(y-r2)*x +d2 r2=z d2=y En fin de boucle, on a xa=y.
On remarque que dans le procédé selon l'invention, les aléas changent à chaque itération de la boucle puisque ri/2=z et dι,2=y.
Le procédé selon l'invention permet d'éviter les attaques DPA sans augmenter de manière significative le temps de calcul. En effet, les calculs de carrés et de multiplications sont coûteux en temps, mais pas les additions et les égalités. Or, par un premier calcul de di et d2, les opérations coûteuses en temps sont éliminées de la boucle de calcul.