PROCEDE ET DISPOSITIF CRYPTOGRAPHIQUE PERMETTANT DE PROTEGER LES LOGIQUES DE CLES PUBLIQUES CONTRE LES
ATTAQUES PAR FAUTE.
La présente invention concerne de façon générale les procédés et dispositifs cryptographiques basés sur la primitive RSA, et plus spécifiquement lorsque celle-ci est en mode CRT (théorème des restes chinois) .
La primitive RSA, largement déployée dans les techniques cryptographiques actuelles, est utilisée pour chiffrer un message m, pour déchiffrer un message chiffré, pour produire une signature S, ou encore pour vérifier la validité de la signature d'un message signé.
Elle fonctionne, de manière bien connue, sur les logiques de sécurité à base de clés publiques . La sécurité est basée sur la difficulté de factoriser des grands nombres.
La clé publique est constituée de deux entiers N et e, où N, aussi appelé module, est égal au produit de deux entiers premiers distincts p et q ; et e, également appelé exposant public, est tel que e.d congrue à 1 modulo le plus petit commun multiple (ppcm) de (p-1) et de (q-1) , soit e.d = 1 mod ppcm (p-1, q-1) ; où « . » dénote une multiplication.
En mode dit standard, la clé privée est, elle, constituée par l'entier d.
Il est classique d'utiliser des implémentations du
RSA dites RSA-CRT afin d'augmenter la vitesse de calcul de signature et/ou de déchiffrement. Il est en effet considéré qu'un procédé RSA en mode CRT est de l'ordre de quatre fois plus rapide qu'un RSA en mode standard.
En mode dit CRT, dans une première configuration, la clé privée est constituée par les entiers p, q, dp, dq et
iq avec dp = d mod (p-1) , dq = d mod (q-1) et iq = 1/q mod p.
Dans une deuxième configuration, elle est constituée par les entiers p, q, dp, dq, ap et aq avec dp = d mod (p-1) , dq = d mod (q-1) , et ap et aq tels que ap = 1 mod p, ap = 0 mod q, aq = 0 mod p et aq = 1 mod q.
Dans la première configuration, la recombinaison CRT pour le calcul de mAd mod N est obtenue à partir de
(p, q, dp, dq, iq) par S = sq + q. (iq. (sp - sq) mod p) avec sp = mAdp mod p et sq = mAdq mod q ; où « A » dénote une élévation à la puissance.
Dans la deuxième configuration, la recombinaison CRT est obtenue à partir de (p, q, dp, dq, ap, aq) par S = (ap.sp + aq.sq) mod N avec sp = mAdp mod p et sq = mAdq mod q.
L'inconvénient est que cette primitive est attaquable, notamment par injection de fautes. Il a ainsi été prouvé qu'un message et une signature erronée suffisent à retrouver la factorisation du module N, donc à casser le système, par simple calcul du plus grand commun diviseur (PGCD) . Le problème général étant qu'une seule faute durant une étape de calcul du CRT peut suffire à un attaquant pour casser le système en retrouvant le module de factorisation.
Plusieurs solutions pour remédier à ce problème ont été envisagées. Notamment, des contre-mesures ont été proposées afin de détecter si une erreur de calcul est survenue pendant le calcul de la signature.
De telles contre-mesures consistent, voir par exemple Adi Shamir, « How to check modular exponentiation » (session impromptue d' EUROCRYPT' 97) , à ajouter un nombre aléatoire au calcul, ce nombre
aléatoire étant utilisé comme détecteur d'erreur. Le problème de ce genre de contre-mesure est qu'il ne protège pas contre tous les types d'attaque par injection de faute, et qu'il nécessite une ou plusieurs étapes de tests de décision de validité.
Or, introduire une étape de test de décision fragilise la sécurité du système, puisqu'une injection de faute à ce niveau permettrait de forcer cette étape.
Des solutions ont donc été proposées pour remédier à cet inconvénient. Notamment la solution « BOS », du nom de leurs auteurs Blômer, Otto et Seifert, qui proposent dans l'article « A new CRT-RSA algorithm secure against Bellcore attacks » (ACM CCS 2003) un algorithme visant à être sécurisé contre les attaques par injection de faute, dites attaques Bellcore.
L'idée de cet algorithme est que la signature finale S est le résultat de la recombinaison du CRT exposant cl.c2 où cl et c2 sont des valeurs telles que si une erreur se produit pendant le calcul du CRT, alors le produit cl.c2 diffère de 1. Aussi le résultat final n'est alors plus la signature S mais S élevé à la puissance ( (cl.c2) mod N) .
Cependant une telle solution s'est avérée finalement non complètement sécurisée puisque David Wagner a prouvé dans son article « Cryptanalysis of a provably secure CRT-RSA algorithm » {ACM CCS 2004) que l'algorithme « BOS » n'était, finalement, pas sécurisé contre un certain type d'attaques.
De plus, la solution « BOS » a comme inconvénient de devoir générer, de préférence, deux entiers premiers, ce qui alourdit les temps de calcul, mais surtout, nécessite
la valeur d (clé privée) qui, en pratique, n'est pas toujours disponible.
L'objectif de la présente invention est de fournir un procédé et un dispositif de signature RSA-CRT susceptible de résister à une attaque par injection de faute .
Autrement dit, elle présente donc un procédé et un dispositif de mise en œuvre de combinaisons à clés publiques contenant la forme CRT de l'opération d'exponentiation modulaire xAd mod N où N=p.q, aux fins de les rendre plus résistants aux attaques par fautes.
Dans ce contexte, la présente invention a pour but de proposer un procédé et un dispositif cryptographique pour un dispositif électronique consistant à signer un message m sous forme d'une signature finale S (ou à déchiffrer un message chiffré) sur la base de la primitive RSA, utilisant le théorème des restes chinois (CRT), dont la clé publique (N, e) est constituée d'un module N qui est le produit de deux nombres premiers distincts p et q, et d'un exposant public e, et dont la clé privée (p, q, dp, dq, iq) est telle que e . dp = 1 mod
(p-1) et e . dq = 1 mod (q-1) ; ce dispositif comprenant une unité centrale équipée au moins d'une mémoire de travail utilisée pour exécuter les calculs, et d'une mémoire réinscriptible servant à stocker des données propres au dispositif et/ou propres à des commandes à exécuter pour mettre en œuvre le procédé.
A cette fin, le procédé de l'invention, par ailleurs conforme à la définition générique qu'en donne le préambule ci-dessus, est essentiellement caractérisé en ce que qu'il comprend au moins les étapes suivantes consistant à : a) générer deux entiers ri et r2,
b) générer, dans la mémoire de travail, un premier couple de valeurs (sp*, si) à partir de la valeur ri, et un deuxième couple de valeurs
(sq*, s2) à partir de la valeur r2, où si et s2 sont des valeurs de test entières, c) générer une première valeur s* de la signature finale S par recombinaison selon le CRT des valeurs sp* et sq*, et la stocker dans la mémoire de travail, d) générer une première valeur de comparaison cl par une fonction de comparaison entre s* et si, et une deuxième valeur de comparaison c2 par une fonction de comparaison entre s* et s2, et stocker ces première et deuxième valeurs dans la mémoire de travail, e) générer un résultat G = _/"(ci,C2), dont la valeur est égale à 1 si cl=c2=l et différente de 1 sinon, et f) produire dans la mémoire de travail la signature finale S définie par S=f2(s*,G) mod N telle que
S = s* mod N si G=I et S Φ s* mod N sinon, écrire cette signature dans la mémoire réinscriptible, et la retourner vers l' extérieur.
Grâce à cet agencement, si une erreur est introduite, la valeur de G, qui est censée être 1, lui sera différente, auquel cas la signature finale S ne sera pas la signature S normale. Le calcul est donc ainsi protégé .
Un avantage de l'invention est qu'un premier couple de valeurs (sp*, si) et un deuxième couple de valeurs (sq*, s2) sont recombinés pour générer la signature sans utiliser de test de décision.
Un autre avantage réside dans le fait que les entiers ri et r2 n'ont pas besoin d'être premiers, ce qui augmente la vitesse de calcul. Typiquement, ri et r2 sont des entiers de 32 bits ; ce qui, globalement, n'a pas d' impact sur les performances en temps et en mémoire de la signature RSA. Et avantageusement, les entiers ri et r2 sont aléatoires .
Aussi l'exploitation de l'invention ne coûte quasiment rien en ce qu'elle ne nécessite aucune ressource dédiée (« hardware » ou « software ») .
L'ensemble des opérations nécessaires à sa mise en œuvre se fait avec les moyens classiques, sans nécessiter de moyen (par exemple processeur, co-processeur) supplémentaire ou d'espace mémoire supplémentaire.
Dans le mode de réalisation préféré de l'invention, les paramètres suivants sont stockés dans la mémoire réinscriptible : • p et q les entiers premiers,
• N, le module de factorisation, comme premier élément de clé publique,
• d et e, respectivement clé privée et deuxième élément de clé publique, • la valeur iq telle que iq = q~1mod p,
• la valeur dp = d mod(p-l),
• la valeur dq = d mod(q-l) .
Ainsi un avantage de la présente invention est que seules les données disponibles (dp, dq...) sont utilisées, l'exposant public e n'étant, en pratique, pas toujours disponible .
Dans le mode de réalisation préféré de l'invention, le procédé cryptographique est tel que _/"(ci,C2) est une
fonction rationnelle de type <Z^F(x,y) telle que <Z^F(1,1)=1 mod N et Vx,y≠l, <Z£F(x,y) ≠l .
Et plus particulièrement, la valeur G=_/"(ci,c2) est définie par la relation G = Arr[r3cl + (2AL-r3) c2/2AL] où r3 est un entier d'une longueur de L bits et Arr une fonction d'arrondi à la valeur entière supérieure, inférieure ou à la valeur entière la plus proche.
De préférence, les valeurs de comparaison cl et c2 sont définies par les relations
• Ci = (s*-Si+l)mod ri et
• C2 = (s*-s2+l)mod r2,
le premier couple de valeurs (sp*, si) est défini par les relations
• Sp* = (mp*)dpmod p* et
• Si = (mp*)dpmod ri où mp* = m mod p* et p* = ri.p,
et le deuxième couple de valeurs (sq*, s2) est défini par les relations
• Sq* = (mq*)dqmod q* et
• S2 = (mq*)dqmod r2 où mq* = m mod q* et q* = r2.q
De même, la valeur i
q* est égale à (q
*)
"1ITiOd p
* est calculée par exemple par les étapes suivantes : a ) i
ri = r
2 ( g
*;
"1mod ri b ) j ri = (p
*;
"1ITiOd
c ) k
q = { rl . iq + p* [ j rl ( irl -iq) mod ri ] } / ri d) i
r2 = ( -p V
1UiOd r
2 et k
r2 = ( l+p* . ir2 )
/ r2 e ) iq* = kqkr2 mod p*
Enfin, la recombinaison CRT pour générer une première valeur s* de la signature finale S est faite selon la relation :
• s* = Sq* + q* [ iq* ( sp*-Sq* ) mod p* ] .
La signature finale S est construite à partir de la recombinaison CRT selon une fonction S=f2(s*,G) mod N telle que S = S* mod N si G=I et S ≠ s* mod N sinon. Typiquement, la fonction f2 est telle que S = s*AG mod N. A titre d'alternative, f2 peut aussi être telle que S = [ (G. s*) + (1-G) r4] mod N, où r4 est un entier aléatoire.
Dans un deuxième mode de réalisation, les paramètres suivants sont également stockés dans la mémoire réinscriptible : ap tel que ap = 1 mod p et ap = 0 mod q. Et aq tel que aq = 0 mod p et aq = 1 mod q.
Et, de même que dans le premier mode de réalisation, ap* = 1 mod p* et ap* = 0 mod q* ; et aq* = 0 mod p* et aq* = 1 mod q* . La recombinaison CRT pour générer une première valeur s* de la signature finale S est faite selon la relation :
s* = ap* . sp* + aq* . sq* mod rl.r2.N, Les autres étapes du procédé étant identiques .
Le procédé cryptographique selon l'invention est mis en œuvre avantageusement dans un dispositif électronique de carte à puce .
La présente invention a pour but également de proposer un dispositif cryptographique pour la mise en œuvre du procédé selon l'un ou l'autre des modes de réalisation précédents.
Le dispositif cryptographique permet de protéger les techniques basées sur des logiques de clés publiques contre les attaques par faute.
Les moyens du dispositif mis en oeuvre permettent de signer un message m sous forme d'une signature finale
S (ou à déchiffrer un message chiffré) sur la base de la primitive RSA, utilisant le théorème des restes chinois
(CRT), dont la clé publique (N, e) est constituée d'un module N qui est le produit de deux nombres premiers distincts p et q, et d'un exposant public e, et dont la clé privée (p, q, dp, dq, iq) est telle que e . dp = 1 mod
(p-1) et e . dq = 1 mod (q-1) .
Ce dispositif comprend une unité centrale équipée au moins d'une mémoire de travail utilisée pour exécuter les calculs, et d'une mémoire réinscriptible servant à stocker des données propres au dispositif et/ou propres à des commandes à exécuter pour mettre en œuvre le procédé.
Le dispositif cryptographique selon l'invention est mis en œuvre avantageusement dans une carte à puce.
Le procédé selon l'invention est représenté schématiquement sur la figure 1 et fonctionne comme suit :
Le procédé cryptographique pour un dispositif électronique consiste à signer un message m sous forme d'une signature finale S par cryptographie RSA, utilisant le théorème des restes chinois (CRT) .
Dans un système RSA classique, la clé privée d est constituée à partir de deux entiers p et q, et la clé publique (N, e) est telle que N, le module de factorisation, satisfait la relation N=p.q et e l'exposant public est tel que e.d=l mod(p-l) (q-1);
La signature finale S est obtenue par recombinaison selon le CRT.
Le dispositif électronique comprend une unité centrale équipée au moins d'une mémoire de travail utilisée pour exécuter les calculs, par exemple une mémoire volatile de type RAM, et d'une mémoire non volatile de type EEPROM ou FLASH servant à stocker des données propres au dispositif et/ou propres à des commandes à exécuter pour mettre en œuvre le procédé, par exemple une mémoire de type EEPROM ou FLASH. En général un tel dispositif comprend également une mémoire de code, de type ROM, il peut s'agir également d'une mémoire non volatile de type EEPROM ou FLASH, où est stocké le code à exécuter pour mettre en œuvre le procédé.
Le procédé comprend au moins les étapes suivantes consistant à :
• Générer (10) deux entiers aléatoires, non nécessairement premiers, ri et r2, et les stocker dans la mémoire de travail. Ces entiers permettent notamment de masquer les valeurs p et q en p* et q* respectivement.
• Générer (20) , dans la mémoire de travail, un premier couple de valeurs (sp*, si) à partir de la valeur ri, et un deuxième couple de valeurs
(sq*, s2) à partir de la valeur r2, où si et s2 sont des valeurs de test entières, qui servent de références .
• Générer (30) une première valeur s* de la signature finale S par recombinaison selon le
CRT des valeurs sp* et sq*, et la stocker dans la mémoire de travail.
• Générer (40) une première valeur de comparaison cl par une fonction de comparaison entre s* et si, et une deuxième valeur de comparaison c2 par une fonction de comparaison entre s* et s2, et
stocker ces première et deuxième valeurs dans la mémoire de travail. Ainsi, si une erreur de calcul s'est produite, alors cl est différent de 1 ou c2 est différent de 1. • Générer (50) , dans la mémoire de travail, un résultat G= _/"(ci,C2), dont la valeur est égale à 1 si cl=c2=l et différente de 1 sinon, et • Produire (60) dans la mémoire de travail la signature finale S définie par S=f2(s*,G) mod N telle que S = S* mod N si G=I et S ≠ s* mod N sinon écrire cette signature dans la mémoire réinscriptible, et la retourner vers l' extérieur.
Les paramètres suivants sont stockés dans la mémoire réinscriptible :
• p et q les entiers premiers,
• N, le module de factorisation, comme premier élément de clé publique, • d et e, respectivement clé privée et deuxième élément de clé publique,
• la valeur iq telle que iq = q~1mod p,
• la valeur dp = d mod(p-l),
• la valeur dq = d mod(q-l) .
_/"(ci,C2) est, de préférence, une fonction rationnelle, afin d'augmenter la vitesse de calcul. Elle est de type ^(x,y) telle que 3JiF(I, I)=I mod N et Vx,y≠l, flfiF(x,y) ≠l. Par exemple, G=/(ci,C2) est défini par la relation G = Arr[r3cl + (2AL-r3) c2/2AL] où r3 est un entier d'une longueur de L bits et Arr une fonction d'arrondi à la valeur entière supérieure, inférieure ou à la valeur entière la plus proche.
Les valeurs cl et c2, valeurs de comparaison entre s* et si, et s* et s2, sont définies par les relations Ci = (s*-Si+l) mod ri et C2 = (s*-s2+l)mod r2
Le premier couple de valeurs (sp*, si) est défini par les relations
Sp* = (mp*)dpmod p* et Si = (mp*)dpmod ri où mp* = m mod p* et p* = ri.p
De même, le deuxième couple de valeurs (sq*, s2) est défini par les relations Sq* = (mq*)dqmod q* et S2 = (mq*)dqmod r2 où mq* = m mod q* et q* = r2.q
Ainsi, les valeurs p et q sont masquées respectivement en p* et q* et permettent de générer sp* et Sq* en vue de la recombinaison CRT.
La recombinaison CRT est utilisée pour générer une première valeur s* de la signature finale S, faite selon la relation : s* = Sq* + q* [iq* (sp*-Sq*)mod p*]
où la valeur iq* est définie comme l'inverse de q* modulo p* par (q*) "1TTiOd p* est calculée, par exemple, par les étapes suivantes :
• iri = r2 ( q* ) "1ITiOd ri ( soit iri = q~1mod ri ) • j n = (PV1ITiOd r f
• kq = { rl . iq + p* [ j rl ( irl -iq) mod ri ] } / ri
• ir2 = ( -PV1ITiOd r2 et kr2 = ( l+p* . ir2 ) / r2
• iq* = kqkr2 mod p*
Ainsi, la signature finale S est produite à l'extérieur après recombinaison CRT mais sans étape de test de décision.
La signature finale S est construite à partir de la recombinaison CRT selon une fonction S=f2(s*,G) mod N telle que S = S* mod N si G=I et S Φ s* mod N sinon. Typiquement, la fonction f2 est telle que S = s*AG mod N. A titre d'alternative, f2 peut aussi être telle que S = [ (G. s*) + (1-G) r4] mod N, où r4 est un entier aléatoire.
Ce procédé cryptographique est mis en œuvre, notamment, dans un dispositif électronique de carte à puce .
Le dispositif cryptographique selon l'invention permet de protéger les logiques de clés publiques contre les attaques par faute.
Le dispositif de mise en œuvre d'un procédé cryptographique pour un dispositif électronique par cryptographie RSA, utilisant le théorème des restes chinois (CRT) , comprend : a) Des moyens pour générer deux entiers aléatoires ri et r2, b) Des moyens pour générer, dans la mémoire de travail, un premier couple de valeurs (sp*, si) à partir de la valeur ri, et un deuxième couple de valeurs (sq*, s2) à partir de la valeur r2, où si et s2 sont des valeurs de test entières, c) Des moyens pour générer une première valeur s* de la signature finale S par recombinaison selon le CRT des valeurs sp* et sq*, et la stocker dans la mémoire de travail, d) Des moyens pour générer une première valeur de comparaison cl par une fonction de comparaison entre s* et si, et une deuxième valeur de comparaison c2 par une fonction de comparaison
entre s* et s2, et stocker ces première et deuxième valeurs dans la mémoire de travail, e) Des moyens pour générer un résultat G= f(ci,C2), dont la valeur est égale à 1 si cl=c2=l et différente de 1 sinon, et f) Des moyens pour produire dans la mémoire de travail la signature finale S définie par S=f2(s*,G) mod N telle que S = S* mod N si G=I et S ≠ s* mod N sinon, écrire cette signature dans la mémoire réinscriptible, et la retourner vers l'extérieur.
Dans le dispositif selon l'invention, les paramètres suivants sont avantageusement stockés dans la mémoire réinscriptible :
• p et g les entiers premiers,
• N, le module de factorisation, comme premier élément de clé publique,
• d et e, respectivement clé privée et deuxième élément de clé publique,
• la valeur iq telle que iq = q~1mod p,
• la valeur dp = d mod(p-l),
• la valeur dq = d mod(q-l) .
Dans le mode de réalisation préféré, _/"(ci,C2) est une fonction rationnelle de type <2^F(x,y) telle que <2^F(1,1)=1 mod N et Vx,y≠l, <Z£F(x,y) ≠l .
Avantageusement, G=/(ci,C2) est défini par la relation G = Arr[r3cl + (2AL-r3) c2/2AL] où r3 est un entier d'une longueur de L bits et Arr une fonction d'arrondi à la valeur entière supérieure, inférieure ou à la valeur entière la plus proche.
Les valeurs de comparaison cl et c2 sont, de préférence, définies par les relations
Ci = ( s*- Si+l ) mod ri et C2 = ( s*- s2+l ) mod r2
Et le premier couple de valeurs (sp*, si) est défini par les relations
Sp* = (mp*) dpmod p* et
Si = (mp*)dpmod r± où mp* = m mod p* et p* = ri.p
Le deuxième couple de valeurs (sq*, s2) est défini par les relations
Sg* = (mq*) dqmod q et s∑ = (mq*)dqmod r2 où mq* = m mod q* et q* = r2.q
La valeur iq* est définie par (q*)~1mod p* . Elle est calculée, par exemple, par des moyens permettant de calculer les valeurs suivantes : iri = r2 (g*; "1ItIOd ri jn = (p*; "1ITiOd ri2 kq = {rl.iq + p* [jrl (irl-iq) mod ri]} / ri ir2 = (-p*; "1ITiOd r2 et kr2 = (l+p*.ir2) / r2 iq* = kqkr2 mod p*
La recombinaison CRT pour générer une première valeur s* de la signature finale S est faite par des moyens pour calculer la relation : s* = Sq* + q* [iq* (sp*-Sq*) mod p*].
Dans un autre mode de réalisation, les paramètres suivants sont également stockés dans la mémoire réinscriptible : ap tel que ap = 1 mod p et ap = 0 mod q. Et aq tel que aq = 0 mod p et aq = 1 mod q.
Et, de même que dans le premier mode de réalisation, ap* = 1 mod p* et ap* = 0 mod q* ; et aq* = 0 mod p* et aq* = 1 mod q* .
La recombinaison CRT pour générer une première valeur s* de la signature finale S est faite par des moyens pour calculer la relation :
s* = ap* . sp* + aq*.sq* mod rl.r2.N
La signature finale S est construite à partir de la recombinaison CRT selon une fonction S=f2(s*,G) mod N telle que S = S* mod N si G=I et S ≠ s* mod N sinon. Typiquement, la fonction f2 est telle que S = s*AG mod N. A titre d'alternative, f2 peut aussi être telle que S = [ (G. s*) + (1-G) r4] mod N, où r4 est un entier aléatoire.
Le dispositif selon l'invention est avantageusement mis en œuvre dans un dispositif électronique de carte à puce .