FR 3010210 A1 20150306 FR 1358271 A 20130829 B12684 - 13-R0-0342FR01 1 PROTECTION D'UN CALCUL CONTRE DES ATTAQUES PAR CANAUX CACHÉS Domaine La présente description concerne de façon générale les circuits électroniques et, plus particulièrement, les circuits réalisant des calculs de chiffrement. La présente description concerne plus particulièrement la protection d'un calcul exécuté par un circuit électronique contre des attaques par canaux cachés. Exposé de l'art antérieur On connaît de nombreuses techniques de protection de 10 calcul de chiffrement contre des attaques par canaux cachés. Ces techniques utilisent typiquement un ou plusieurs nombres aléatoires pour masquer les quantités manipulées par le calcul. Qu'il s'agisse de calculs basés sur des courbes elliptiques, faisant appel à des opérations d'addition et de 15 doublement, ou de calculs d'exponentiation modulaire basés sur une technique dite de carré-multiplication, une difficulté réside dans l'élimination de la perturbation introduite par le nombre aléatoire afin de restituer le résultat. Résumé 20 Un mode de réalisation de la présente description vise à proposer une technique de protection d'un calcul exécuté par B12684 - 13-R0-0342FR01 2 un circuit électronique qui pallie tout ou partie des inconvénients des solutions usuelles. Un autre mode de réalisation vise à proposer une technique compatible avec des opérations de doublement-addition 5 sur courbes elliptiques ou de multiplication-élévation au carré pour des calculs d'exponentiation modulaire. Un autre mode de réalisation vise une solution plus particulièrement adaptée aux attaques par canaux cachés. Ainsi, un mode de réalisation prévoit un procédé de 10 protection d'un algorithme de chiffrement exécutant des opérations en boucle sur des bits d'une première quantité et sur une première variable initialisée par une deuxième quantité, dans lequel, pour chaque bit de la première quantité, un nombre aléatoire est ajouté à l'état de ce bit pour mettre à jour une 15 deuxième variable maintenue entre deux seuils. Selon un mode de réalisation, pour chaque bit de la première quantité, la deuxième variable est mise à jour par : sa valeur majorée du nombre aléatoire et minorée de l'état du bit si le résultat de ce calcul est compris entre 20 lesdits deux seuils ; ou le nombre aléatoire minoré de l'état du bit concerné dans le cas contraire. Selon un mode de réalisation, ladite deuxième variable est utilisée dans l'une des opérations réalisées pour chaque bit 25 de la première quantité. Selon un mode de réalisation, pour chaque bit de la première quantité, la première variable est mise à jour par : le résultat d'un calcul prenant en compte la deuxième quantité et le nombre aléatoire si la deuxième variable, majorée 30 du nombre aléatoire et minorée de l'état du bit concerné est comprise entre lesdits deux seuils ; ou le résultat d'un calcul prenant en outre en compte ladite deuxième variable dans le cas contraire. Selon un mode de réalisation, ledit calcul comporte 35 une somme et un produit. B12684 - 13-R0-0342FR01 3 Selon un mode de réalisation, ledit calcul comporte un produit et une exponentiation. Selon un mode de réalisation, le nombre aléatoire est tiré pour chaque bit de la première quantité. Selon un mode de réalisation, en fin de calcul, la première variable est mise à jour par un calcul prenant en compte ladite deuxième variable et la deuxième quantité. Selon un mode de réalisation, la deuxième variable est au plus sur 8 bits. Selon un mode de réalisation, lesdites opérations comprennent une addition et un doublement, ladite deuxième variable étant prise en compte lors de l'étape d'addition. Selon un mode de réalisation, le procédé est appliqué à une multiplication d'un point d'une courbe elliptique par un 15 scalaire, ledit scalaire représentant la première quantité et ledit point représentant la deuxième quantité. Selon un mode de réalisation, lesdites opérations comprennent une élévation au carré et une multiplication, ladite deuxième variable étant prise en compte dans l'étape de 20 multiplication. Selon un mode de réalisation, le procédé est appliqué à une exponentiation modulaire de la deuxième quantité, la première quantité représentant l'exposant. Un mode de réalisation prévoit également un circuit 25 électronique adapté à la mise en oeuvre du procédé. Brève description des dessins Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en 30 relation avec les figures jointes parmi lesquelles : la figure 1 est une représentation très schématique sous forme de blocs d'un exemple de circuit électronique du type auquel s'appliquent les modes de réalisation qui vont être décrits ; B12684 - 13-R0-0342FR01 4 la figure 2 illustre un exemple de protection usuelle d'une multiplication sur courbe elliptique ; la figure 3 illustre un exemple de protection usuelle d'une exponentiation modulaire ; la figure 4 représente, de façon schématique et sous forme de blocs, un mode de réalisation du procédé de protection d'une multiplication sur courbe elliptique ; et la figure 5 représente, de façon schématique et sous forme de blocs, un mode de réalisation du procédé de protection 10 d'une exponentiation modulaire. Description détaillée De mêmes éléments ont été désignés par de mêmes références aux différentes figures. Par souci de clarté, seuls les étapes et les éléments utiles à la compréhension des modes 15 de réalisation qui vont être décrits ont été illustrés et seront détaillés. En particulier, la nature des quantités manipulées par les différents calculs n'a pas été détaillée, les modes de réalisation décrits étant compatibles avec les natures usuelles de tels nombres. De plus, l'origine des nombres à soumettre aux 20 calculs qui vont être décrits ainsi que la destination des résultats, plus particulièrement dans des applications de chiffrement, n'a pas non plus été détaillée, les modes de réalisation décrits étant là encore compatibles avec les origines et destinations usuelles de tels nombres. 25 La figure 1 représente, de façon très schématique et sous forme de blocs, un exemple de circuit électronique 1 du type auquel s'appliquent les modes de réalisation qui vont être décrits. Un tel circuit vise des applications cryptographiques et comporte généralement une unité de traitement 12 (CPU) 30 susceptible de communiquer, par un ou plusieurs bus 13 d'adresses, de données et de commandes, avec différents éléments parmi lesquels au moins un élément d'entrée/sortie 14 (I/O), de communication avec l'extérieur du circuit 1, un ou plusieurs circuits de mémoire volatile 15 (MEM), un ou plusieurs circuits 35 de mémoire non volatile 16 (NVM) et une ou plusieurs fonctions B12684 - 13-R0-0342FR01 symbolisées par des blocs 17, (FCT) dépendant de l'application du circuit. Bien que l'on fasse référence ci-dessus à un circuit électronique, on comprendra que les modes de réalisation qui vont être décrits s'appliquent à une réalisation matérielle par 5 une machine d'états en logique câblée ou à une réalisation logicielle dont des instructions sont exécutées par l'unité de traitement 12. Dans des applications de chiffrement, on réalise généralement des calculs sur des nombres de taille importante (de quelques centaines à quelques milliers de bits) et les algorithmes de chiffrement les plus courants auxquels se rapporte la présente description comprennent soit une exponentiation modulaire (typiquement l'algorithme RSA) soit une multiplication d'un point d'une courbe elliptique par un scalaire. L'exposant dans le cas de l'exponentiation modulaire où le nombre scalaire dans le cas de la multiplication sur courbe elliptique, constitue généralement une quantité dite secrète qui ne doit pas être rendue accessible à des circuits ou utilisateurs non autorisés. Afin de protéger les quantités secrètes contre des attaques par canaux cachés dans des calculs de chiffrement, on utilise généralement des nombres aléatoires. La figure 2 représente, de façon schématique, un exemple usuel de protection par nombre aléatoire d'un calcul de multiplication d'un point P d'une courbe elliptique par un scalaire k. Dans l'exemple de la figure 2, on suppose que les calculs sont effectués modulo un nombre entier n qui représente la taille des nombres manipulés. On commence par calculer (bloc 21, +) la somme du nombre k représentant généralement la quantité secrète avec un nombre aléatoire r. La taille du nombre aléatoire correspond généralement au moins à celle de la clé k dans la mesure où la taille de ce nombre conditionne la sécurité, c'est-à-dire le nombre de bits masqués. Dans l'exemple de la figure 2, on suppose des quantités k et r sur n bits. B12684 - 13-R0-0342FR01 6 Le nombre k+r obtenu est alors utilisé dans un calcul dit d'addition/doublement (Add/Doub) d'une quantité P que l'on souhaite chiffrer. Cette quantité P représente un point d'une courbe elliptique. Une variable de calcul T est initialisée avec 5 la valeur du point P. Puis, pour chaque bit (k+r)i du nombre k+r, on effectue un doublement du contenu de la variable T (bloc 23, T = 2T) suivi, pour les bits (k+r)i du nombre k+r valant 1, d'une opération d'addition du point P à la variable T (T = T+(k+r)i.P). 10 Une fois tous les bits du nombre k+r traités, on élimine la contribution du nombre aléatoire r en effectuant une dernière opération (bloc 25, T=T-r.P) de soustraction de la quantité r.P au résultat intermédiaire. La variable T contient alors le résultat k.P mod(n). 15 Le plus souvent, pour protéger le calcul contre des attaques dites horizontales, typiquement des attaques directes d'analyse de la consommation (attaques dites SPA pour Single Power Analysis), on effectue le même nombre d'étapes de calcul quel que soit l'état du bit du nombre k+r. Cela conduit 20 généralement à utiliser une variable supplémentaire ne participant pas au résultat final. La protection opérée par l'algorithme décrit en relation avec la figure 2 impose, pour démasquer la quantité calculée en fin de calcul, d'effectuer une multiplication 25 additionnelle par un scalaire (produit r.P) de façon à pouvoir la soustraire du résultat obtenu. La figure 3 illustre un exemple usuel de calcul d'exponentiation modulaire mettant en oeuvre un nombre aléatoire r pour masquer les calculs exploitant une quantité secrète d. 30 Comme dans le cas précédent, on commence (bloc 31) par sommer la quantité d qui représente l'exposant de l'exponentiation modulaire à un nombre aléatoire r, de façon à obtenir une valeur d+r. Là encore, le nombre (par exemple n) de bits du nombre aléatoire r correspond au moins au nombre de bits de la 35 valeur d de façon à obtenir une protection efficace. B12684 - 13-R0-0342FR01 7 Pour chaque bit (d+r)i du nombre d+r, on effectue ensuite une opération dite de carré/multiplication (Square Multiply). On initialise une variable T par le message M à soumettre à l'exponentiation modulaire. Puis, on multiplie le contenu de la variable T par lui-même (élévation au carré). Ensuite, pour tous les bits (d+r)i de la valeur d+r valant 1, on met à jour la variable message M. Une T en multipliant son contenu par le fois tous les bits de l'exposant traités, on supprime la contribution du nombre aléatoire en effectuant une opération (bloc 35, T=T/Mr) où le résultat intermédiaire T est divisé par la valeur M exposant r. On obtient alors, dans la variable T, le résultat Md mod(n). Comme dans le cas de la figure 2, lorsque les bits de 15 l'exposant (valeur d+r) sont à zéro, on effectue généralement une opération non utile pour le calcul de façon à protéger celui-ci contre des attaques de type SPA. Comme pour un calcul d'addition/doublement, l'introduction d'un nombre aléatoire de la taille de la quantité à 20 protéger engendre, en fin d'opération, un calcul coûteux en termes de ressources (temps ou capacité du circuit). Selon un mode de réalisation, on prévoit de tirer profit du fait que les calculs s'effectuent en boucle pour les différents bits de la quantité à protéger pour maintenir la 25 dérive introduite par le nombre aléatoire dans une plage inférieure au nombre de bits de la quantité à protéger. Plus particulièrement, on prévoit de définir une fenêtre (en nombre de bits) dans laquelle la dérive est limitée. La figure 4 représente, de façon très schématique et 30 sous forme de blocs, un mode de réalisation appliqué à la multiplication d'un point P d'une courbe elliptique par un scalaire k, par la technique d'addition/doublement. On initialise (bloc 41, T=P ; drift=0 ; i=0) différentes variables utilisées dans le calcul. Par exemple, une 35 variable T est destinée à contenir un résultat intermédiaire et B12684 - 13-R0-0342FR01 8 est initialisée avec la valeur P du point de la courbe elliptique, une valeur de dérive drift servant au masquage du calcul est initialisée à 0. Un index du bit courant i est initialisé, par exemple à 0 pour commencer le calcul de droite à gauche (du bit de poids fort au bit de poids faible) mais peut en variante être initialisé à n représentant le nombre de bits de la quantité k pour un calcul de gauche à droite. On suppose arbitrairement un calcul modulo n, mais le modulo pourra être différent de la taille de la quantité k. Pour chaque bit ki de la quantité k, on effectue (bloc 42, T = 2T) une opération de doublement du contenu de la variable T. Puis, on tire un nombre aléatoire r (bloc 43), -X' r x') que l'on sélectionne pour être compris entre deux valeurs -X' et X'. En pratique, la limite X' correspond au nombre de bits sur lequel est tiré le nombre aléatoire. On effectue alors un test (bloc 44, -X drift+r-ki X ?) sur la somme du contenu de la variable drift, du nombre aléatoire r, diminué de l'état (1 ou 0) du bit courant ki du nombre k. Si (sortie N du bloc 44) le résultat excède la plage autorisée (-X à X), on met à jour la variable T par une opération (bloc 45, T = T +/- (r-drift.P)) d'addition ou de soustraction (selon le sens dans lequel la limite est dépassée) de la quantité r-drift.P. Puis, la variable drift prend la valeur r-ki (bloc 46, drift = r-ki). Dans le cas contraire (sortie Y du bloc 44), on met à jour la variable T (bloc 45', T = T + r.P) en lui ajoutant le produit de la quantité r par la valeur P. Puis, on ajoute la quantité r-ki à la variable drift (bloc 46', drift = drift+r-ki). En variante, l'ordre des étapes 45 et 46 (45' et 46') peut être modifié. Dans ce cas, la variable T est mise à jour avec la valeur T+drift.P quel que soit l'état du bit ki. La variable drift, qui prend en compte un aléa et 35 l'état du bit courant, est toujours contenue dans la fenêtre B12684 - 13-R0-0342FR01 9 définie par le nombre X. De plus, le calcul d'addition est bien protégé par la quantité aléatoire. La limite X' du tirage aléatoire est, de préférence, identique à la limite X autorisée pour la dérive drift. Pour le cas où l'on choisit des limites X et X' différentes, on veillera à choisir la limite X' du tirage aléatoire inférieure à la limite X de la dérive, afin d'éviter un dépassement trop fréquent de la plage de valeurs testée au bloc 44. Les étapes 42 à 46 sont reproduites tant que tous les bits de la valeur k n'ont pas été traités (test 47, i=n ?). Tant qu'il reste un bit à traiter (sortie N du bloc 47), on passe au bit suivant (bloc 48, i=i+1) et on revient en entrée du bloc 42. Une fois que tous les bits ont été traités (sortie Y du bloc 48), il ne reste plus qu'a annuler la dernière contribution du nombre aléatoire (bloc 49, T = T-drift.P) pour obtenir le résultat final dans la variable T (k.P mod(n)). On voit que la multiplication drift.P qu'il faut réaliser pour supprimer la contribution du nombre aléatoire ne concerne qu'un nombre de taille réduite qui vaut au maximum X. Ainsi, il n'est plus question de sélectionner un nombre aléatoire r ayant la taille de la quantité k. En effet, comme le nombre aléatoire est introduit au niveau du bit pris en compte dans les boucles de calcul, un nombre aléatoire sur un bit suffit (valeurs 0, 1). De préférence, on choisira un nombre aléatoire r sur quelques bits, typiquement entre 3 et 8 bits, ce qui représente jusqu'à 256 valeurs possibles pour le nombre aléatoire et offre une sécurité de masquage satisfaisante. Le processus décrit en relation avec la figure 4 assure un masquage contre des attaques par canaux cachés, par exemple de type DPA, analyse de signature electromagnétique, etc. De plus, il offre également une protection contre les attaques dites horizontales (par exemple de type SPA). En effet, le nombre d'opérations réalisées est identique quel que soit l'état du bit de la quantité secrète. B12684 - 13-R0-0342FR01 10 De préférence, afin d'économiser le temps de calcul, les différentes valeurs susceptibles d'être prises par la quantité drift.P (bloc 45) sont précalculées. Ainsi, comme l'illustre le bloc 40 en figure 4, on précalcule plusieurs 5 produits Z.P pour toute valeur possible de Z compris entre -X et X. Cet ensemble de valeurs précalculées est ensuite exploité par le bloc 45 en fonction de la valeur drift qui est forcément comprise dans la plage définie par la valeur X. On voit que le nombre de valeurs devant être précalculées est relativement 10 limité. Pour un calcul sur courbe elliptique et une fenêtre de 3 bits, on calcule les valeurs -8P à 8P. Sachant que 0.P est un point à l'infini défini par convention, cela fait 17 valeurs à stocker, mais seulement 15 à calculer (P étant connu). Le choix de la taille de la fenêtre dépend des 15 capacités de calcul et de mémorisation du circuit. Par ailleurs, le niveau de sécurité devient paramétrable dans l'algorithme. En effet, la valeur X peut être définie en fonction du niveau de sécurité souhaité. Ainsi, on peut utiliser une même cellule de calcul cryptographique avec 20 des niveaux de sécurité différents selon les quantités manipulées. La figure 5 représente un mode de réalisation appliqué à une exponentiation modulaire. On retrouve la plupart des étapes décrites en relation 25 avec la figure 4 aux différences près : que les étapes 50, 51 et 59, correspondant aux étapes 40, 41 et 49, prennent en compte la valeur M (modulo n) à soumettre à l'exponentiation modulaire (par exemple, le message à chiffrer) au lieu du point P ; 30 que l'étape 42 est remplacée par une étape 52 d'élévation au carré (bloc 52, T = T.T) ; que les étapes 54, 56 et 56', correspondant aux étapes 44, 46 et 46', prennent en compte les n bits di de l'exposant d au lieu des bits ki du scalaire k ; B12684 - 13-R0-0342FR01 11 qu'aux étapes 55 (T = T.M(r-drift)), 55' (T = T.Mr) et 59 (T = T/Mdrift), correspondant aux étapes 45, 45' et 49, le produit du point P est remplacé par une exponentiation de la valeur M, l'addition (+) est remplacée par une multiplication (.), la soustraction (-) est remplacée par une division (/). De préférence, le nombre aléatoire r est tiré à chaque tour (à chaque bit de la quantité secrète). Toutefois, dans un mode de réalisation simplifié (apportant une protection moindre), on pourra prévoir d'utiliser un même nombre aléatoire r pour tout le calcul. On voit qu'aux étapes 45, 46, 45', 46', 55, 56, 55', 56', le calcul diffère selon l'état du bit de la quantité secrète. Par conséquent, le calcul exécuté est bien conforme avec une addition/doublement sur courbe elliptique ou un carré/multiplication pour l'exponentiation modulaire. Divers modes de réalisation ont été décrits. Diverses variantes et modifications apparaîtront à l'homme de l'art. En particulier, bien que les modes de réalisation aient été décrits en relation avec une multiplication sur courbe elliptique et une exponentiation modulaire, ils s'appliquent plus généralement quelle que soit la forme de l'algorithme utilisé pourvu qu'il comporte une addition/doublement ou un carré/multiplication selon les bits d'un des opérandes. En particulier, on pourra utiliser, dans le cadre de l'exponentiation modulaire, une représentation dite de Montgomery. De plus, la mise en oeuvre pratique des modes de réalisation qui ont été décrits est à la portée de l'homme de métier à partir des indications fonctionnelles données ci-dessus et en utilisant des outils en eux-mêmes usuels. REVENDICATIONS1. Procédé de protection d'un algorithme de chiffrement exécutant des opérations (42, 43, 44, 45, 46, 45', 46' ; 52, 43, 54, 55, 55', 56, 56') en boucle sur des bits (ki ; di) d'une première quantité (k ; d) et sur une première variable (T) initialisée par une deuxième quantité (P ; M), dans lequel, pour chaque bit de la première quantité, un nombre aléatoire (r) est ajouté à l'état de ce bit pour mettre à jour une deuxième variable (drift) maintenue entre deux seuils (-X, X). 2. Procédé selon la revendication 1, comportant, pour chaque bit (ki ; di) de la première quantité (k ; d), la mise à jour de la deuxième variable (drift) par : sa valeur majorée du nombre aléatoire et minorée de l'état du bit si le résultat de ce calcul est compris entre lesdits deux seuils ; ou le nombre aléatoire (r) minoré de l'état du bit concerné dans le cas contraire. 3. Procédé selon la revendication 2, dans lequel ladite deuxième variable (drift) est utilisée dans l'une des opérations réalisées pour chaque bit de la première quantité (k ; d). 4. Procédé selon l'une quelconque des revendications 1 à 3, comportant, pour chaque bit (ki ; di) de la première quantité (k ; d), la mise à jour de la première variable (T) par : le résultat d'un calcul prenant en compte la deuxième quantité (P ; M) et le nombre aléatoire (r) si la deuxième variable (drift), majorée du nombre aléatoire et minorée de l'état du bit concerné est comprise entre lesdits deux seuils ; ou le résultat d'un calcul prenant en outre en compte ladite deuxième variable (drift) dans le cas contraire. 5. Procédé selon la revendication 4, dans lequel ledit calcul comporte une somme et un produit.B12684 - 13-R0-0342FR01 13 6. Procédé selon la revendication 4, dans lequel ledit calcul comporte un produit et une exponentiation. 7. Procédé selon l'une quelconque des revendications 1 à 6, dans lequel le nombre aléatoire (r) est tiré pour chaque 5 bit de la première quantité (k ; d). 8. Procédé selon l'une quelconque des revendications 1 à 5, dans lequel, en fin de calcul, la première variable (T) est mise à jour par un calcul prenant en compte ladite deuxième variable (drift) et la deuxième quantité (P ; M). 10 9. Procédé selon l'une quelconque des revendications 1 à 8, dans lequel la deuxième variable est au plus sur 8 bits. 10. Procédé selon la revendication 3 ou l'une quelconque des revendications 4 à 9 dans leur rattachement à la revendication 3, dans lequel lesdites opérations comprennent une 15 addition et un doublement, ladite deuxième variable (drift) étant prise en compte lors de l'étape d'addition (45). 11. Procédé selon la revendication 10, appliqué à une multiplication d'un point d'une courbe elliptique par un scalaire, ledit scalaire (k) représentant la première quantité 20 et ledit point (P) représentant la deuxième quantité. 12. Procédé selon la revendication 3 ou l'une quelconque des revendications 4 à 9 dans leur rattachement à la revendication 3, dans lequel lesdites opérations comprennent une élévation au carré et une multiplication, ladite deuxième 25 variable (drift) étant prise en compte dans l'étape de multiplication (55). 13. Procédé selon la revendication 12, appliqué à une exponentiation modulaire de la deuxième quantité (M), la première quantité représentant l'exposant (d). 30 14. Circuit électronique adapté à la mise en oeuvre du procédé selon l'une quelconque des revendications précédentes.