PROCEDE DE CHIFFREMENT PROTEGE CONTRE
DES ATTAQUES PAR CANAUX AUXILIAIRES
La présente invention concerne un procédé de chiffrement par bloc exécuté par un microcircuit et protégé contre des attaques par canaux auxiliaires, pour la transformation d'un message en un message chiffré, à partir d'une clé secrète.
La présente invention concerne notamment les circuits intégrés de carte à puce ou les composants cryptographiques matériels intégrés sur les cartes mères des ordinateurs et autres équipements électroniques et informatiques grand public nécessitant des moyens de sécurité (clés USB, décodeurs de chaînes télévisées, consoles de jeu, etc.), dits "TPM" (Trusted Platform Module).
De tels microcircuits sont équipés d'un CPU (unité centrale de traitement) qui comprend généralement un cœur CISC 8 bits ou un cœur RISC 8, 16 ou 32 bits. Certains sont équipés d'un coprocesseur dédié au calcul cryptographique, par exemple un coprocesseur DES (Data Encryption Standard) ou AES (Advanced Encryption Standard). Ils comportent des milliers de portes logiques qui commutent différemment en fonction des opérations exécutées. Ces commutations créent des variations de consommation de courant de courte durée, par exemple de quelques nanosecondes, qui sont mesurables. Notamment, les circuits intégrés de technologie CMOS comprennent des portes logiques qui ne consomment du courant que lors de leur commutation, correspondant au passage à 1 ou à 0 d'un nœud logique. Ainsi, la consommation de courant dépend des données manipulées par le CPU et de ses différents périphériques : mémoire, données circulant sur le bus de données ou d'adresse, coprocesseur cryptographique, etc.
De tels microcircuits sont soumis à des attaques dites par canaux auxiliaires, basées sur l'observation de leur consommation de courant, leur rayonnement magnétique ou électromagnétique. De telles attaques visent à découvrir les données secrètes qu'ils
utilisent, notamment leurs clés de cryptographie. Les attaques par canaux auxiliaires les plus répandues mettent en œuvre des méthodes d'analyse statistique telle que l'analyse DPA ("Differential Power Analysis") ou CPA ("Corrélation Power Analysis"). L'analyse DPA permet de retrouver la clé d'un algorithme de cryptographie grâce à l'acquisition de nombreuses courbes de consommation du circuit. L'analyse CPA se base sur un modèle linéaire de consommation de courant et consiste à calculer un coefficient de corrélation entre, d'une part, les points de consommation mesurée qui forment les courbes de consommation capturées et, d'autre part, une valeur estimée de consommation, calculée à partir du modèle de consommation linéaire et d'une hypothèse sur l'opération qu'exécute le microcircuit et sur la valeur de la clé de cryptographie.
Afin de protéger de tels microcircuits et les procédés de chiffrement qu'ils exécutent contre de telles attaques par canaux auxiliaires, des contre-mesures sont généralement prévues. Les contre-mesures les plus généralement mises en œuvre sont le masquage ou l'exécution multiple. Une contre-mesure par masquage utilise un masque aléatoire (nombre binaire) qui est combiné à la clé et/ou au message pendant l'exécution du procédé de chiffrement. Ce type de contre-mesure est efficace mais nécessite un coprocesseur spécialement prévu pour sa mise en œuvre, dans le cas d'une exécution par un coprocesseur, ou un programme d'une plus grande complexité, dans le cas d'une exécution par le CPU du microcircuit.
Une contre-mesure par exécution multiple peut au contraire être mise en oeuvre avec un coprocesseur conventionnel ne comportant pas de moyens de contre-mesure. Elle consiste simplement à exécuter le procédé de chiffrement plusieurs fois au moyen de fausses clés. A cet effet, on prévoit par exemple un programme de contre-mesure qui contrôle le programme de chiffrement ou le coprocesseur, et lui fait exécuter le procédé de chiffrement plusieurs fois avec les fausses clés, de sorte que l'exécution du procédé de chiffrement avec la bonne clé (i.e. la clé authentique) est "noyée" dans un ensemble d'exécutions factices.
La présente invention concerne plus particulièrement les contre-mesures par exécution multiple appliquées aux procédés de chiffrement par bloc de type symétrique comme les procédés DES, TDES et AES. Ces contre-mesures classiques seront mieux comprises après avoir rappelé la structure de ces procédés de chiffrement.
La figure 1A montre schématiquement l'architecture d'un procédé de chiffrement par bloc CP1. Le procédé est symétrique, ce qui signifie qu'il utilise la même clé secrète pour le chiffrement ou le déchiffrement. Le procédé reçoit en entrée un message M et une clé secrète K, et fournit un message chiffré C. Il comporte Nr rondes RDi,
RÛ2....RD RDNr-i, RD r exécutées successivement. Entre la première ronde RDi et la dernière ronde RDN,-, le procédé comprend des rondes intermédiaires RD2,... RD,,... RDN - Le procédé peut aussi comprendre une opération initiale IO visant à préparer le message avant l'exécution des rondes, au moyen d'une première fonction de transformation, et une opération finale FO visant à transformer le résultat de la dernière ronde au moyen d'une seconde fonction de transformation, pour obtenir le message chiffré C.
Chaque ronde RD, (i étant considéré ici comme un indice allant de 1 à Nr) utilise généralement une sous-clé SK, dérivée de la clé K ou dérivée de la sous-clé utilisée par la ronde précédente. Chaque ronde fournit à la ronde suivante un résultat intermédiaire secret qui n'est pas accessible à un attaquant, ce résultat étant par exemple stocké temporairement dans une mémoire protégée. Ainsi, la première ronde RD1 reçoit comme donnée d'entrée le message M ou une donnée issue de la transformation message par l'opération initiale IO, et fournit un premier résultat intermédiaire secret à la ronde suivante RD2. Chaque ronde intermédiaire RD, reçoit comme donnée d'entrée le résultat intermédiaire secret fournit par la ronde précédente, et fournit un résultat intermédiaire secret à la ronde suivante. La dernière ronde reçoit comme donnée d'entrée le résultat intermédiaire secret fournit par l'avant-
dernière ronde RDN et fournit un résultat final formant le message chiffré C ou formant le message chiffré après transformation par l'opération finale FO.
Le nombre de rondes est prédéterminé par des normes, et est par exemple égal à 16 dans le cas du procédé DES, 48 dans le cas du procédé TDES, 10 dans le cas du procédé AES 128, 12 dans le cas du procédé AES 192 et 14 dans le cas du procédé AES 256. De même, les normes définissent la structure des rondes, c'est-à-dire les opérations de chiffrement qu'elles comportent. Comme illustré schématiquement sur la figure 1 B, chaque ronde RD, comporte généralement des sous-rondes SRD1 , SRD2,.... SRDn. Par exemple, chaque ronde RD, du procédé DES comprend quatre sous-rondes PermutationExpansive, OU Exclusif, Substitution, et PermutationSimple.
Comme autre exemple, la figure 2 représente sous la forme d'un organigramme "AES1 " la structure classique d'un procédé de chiffrement AES. Le procédé comprend une opération initiale 10 comprenant l'opération "AddRoundKey" (addition de clé) utilisant une première sous-clé SK0, neuf rondes RD, (RD† à RD9) utilisant neuf autres sous-clés SK, et comprenant chacune quatre sous-rondes "SubBytes", "ShiftRows", "MixColumns" et "AddRoundKey", et une dernière ronde RDi0 comprenant trois sous- rondes "SubBytes", "ShiftRow" et "AddRoundKey" utilisant une dixième sous-clé SK 0.
La figure 3 représente schématiquement un exemple de procédé CP2 protégé contre les attaques par canaux auxiliaires par la technique d'exécution multiple. Le procédé comporte une étape initiale de génération de N1 -1 fausses clés Ki, K2, KNi-i , la bonne clé K étant par exemple la clé K0. Le procédé CP2 comprend N1 exécutions du procédé CP1 de la figure 1 . Le procédé CP1 est exécuté une première fois avec la clé K0, puis avec la première fausse clé Ki , puis la seconde fausse clé K2, etc. jusqu'à la N1 ème exécution avec la fausse clé KNI-I . Chaque exécution fournit un résultat Co, CI , ...CNI-I à partir de la clé correspondante et du message M. Un seul de ces résultats est valable et les autres sont factices. L'ordre dans lequel les clés sont utilisées est
aléatoire (l'ordre régulier montré sur la Fig. 3 n'étant qu'un exemple) de sorte qu'un attaquant ne sait pas quelle est l'exécution qui utilise la bonne clé.
Cette solution présente toutefois l'inconvénient d'être pénalisante en termes de temps d'exécution du procédé de chiffrement. Les multiples exécutions du procédé de chiffrement CP1 ralentissent fortement le temps de fourniture du résultat même lorsque l'on dispose d'un processeur ou un coprocesseur rapide. Ainsi, par exemple, lorsque N1 =8, la contre-mesure nécessite l'exécution de 128 rondes pour un procédé DES et de 384 rondes pour un procédé TDES. Si N1 =32, la contre-mesure nécessite l'exécution de 512 rondes pour un procédé DES et de 1536 rondes pour un procédé TDES.
Il pourrait donc être souhaité de prévoir un procédé de chiffrement incluant une contre- mesure par exécution multiple qui nécessite un moindre temps de calcul tout en offrant une bonne protection contre des attaques par canaux auxiliaires.
Des modes de réalisation de l'invention concernent un procédé de chiffrement symétrique exécuté par un microcircuit, pour la transformation d'un message en un message chiffré, à partir d'une clé secrète, comprenant une première ronde, des rondes intermédiaires et une dernière ronde, comprenant plusieurs exécutions de la première et de la dernière ronde, respectivement à partir de la clé secrète et d'un premier ensemble de fausses clés, et un nombre d'exécutions d'au moins une ronde intermédiaire inférieur au nombre d'exécutions de la première et dernière rondes, respectivement à partir de la clé secrète et d'un ensemble de fausses clés inclus dans le premier ensemble de fausses clés.
Selon un mode de réalisation, le procédé comprend une deuxième ronde, une avant- dernière ronde et plusieurs rondes intermédiaires, les deux première rondes sont exécutées un plus grand nombre de fois que les rondes intermédiaires, et les deux
dernières rondes sont exécutées un plus grand nombre de fois que les rondes intermédiaires.
Selon un mode de réalisation, le procédé ne comprend qu'une seule exécution d'au moins une ronde intermédiaire.
Selon un mode de réalisation, le procédé comprend, pour un nombre déterminé de rondes successives à partir de la première, un nombre d'exécutions des rondes décroissant selon une règle de décroissance qui est fonction du rang des rondes considérées relativement à la première ronde, puis, pour un nombre déterminé de rondes successives jusqu'à la dernière, un nombre d'exécutions des rondes croissant selon une règle de croissance qui est fonction du rang des rondes considérées relativement à la dernière ronde. Selon un mode de réalisation, la règle de décroissance est une règle en 1/(2n), n étant un paramètre fonction du rang des rondes considérées relativement à la première ou à la dernière ronde.
Selon un mode de réalisation, chaque ronde comprend des sous-rondes, et l'exécution multiple de chaque ronde comprend l'exécution multiple de chaque sous-ronde de la ronde.
Selon un mode de réalisation, chaque ronde comprend des sous-rondes, et l'exécution multiple d'une ronde comprend l'exécution multiple d'au moins une sous-ronde, et une seule exécution d'au moins une autre sous-ronde.
Selon un mode de réalisation, l'exécution unique de la sous-ronde est une exécution masquée en ordre simple ou multiple.
Selon un mode de réalisation, l'exécution multiple de la sous-ronde est une exécution masquée en ordre simple.
Selon un mode de réalisation, le procédé est conforme aux spécifications DES, triple DES, ou AES.
Des modes de réalisation de l'invention concernent également un microcircuit configuré pour exécuter un procédé de chiffrement symétrique, permettant de transformer un message en un message chiffré, à partir d'une clé secrète, le procédé comprenant une première ronde, des rondes intermédiaires, et une dernière ronde, le microcircuit étant configuré pour exécuter plusieurs fois la première et la dernière ronde, respectivement à partir de la clé secrète et d'un premier ensemble de fausses clés, et pour exécuter au moins une ronde intermédiaire un nombre de fois inférieur au nombre d'exécutions de la première et dernière rondes, respectivement à partir de la clé secrète et d'un ensemble de fausses clés inclus dans le premier ensemble de fausses clés.
Selon un mode de réalisation, le microcircuit est configuré pour n'exécuter qu'une fois au moins une ronde intermédiaire.
Selon un mode de réalisation, le microcircuit est configuré pour exécuter des rondes comprenant des sous-rondes, et pour exécuter le même nombre de fois toutes les sous-rondes d'une ronde, lors d'une exécution multiple d'une ronde. Selon un mode de réalisation, le microcircuit est configuré pour exécuter des rondes comprenant des sous-rondes, et pour n'exécuter qu'une fois au moins une sous-ronde et exécuter plusieurs fois une autre sous-ronde, lors d'une exécution multiple d'une ronde.
Selon un mode de réalisation, le microcircuit comprend un coprocesseur modulaire configuré pour exécuter individuellement des opérations de chiffrement comprises dans des sous-rondes. Des modes de réalisation de procédés de chiffrement et d'un microcircuit selon l'invention seront décrits dans ce qui suit en se référant à titre non limitatif aux figures jointes, parmi lesquelles :
- la figure 1A précédemment décrite représente la structure d'un procédé de chiffrement par rondes classiques,
- la figure 1 B précédemment décrite représente la structure d'une ronde du procédé de la figure 1 ,
- la figure 2 précédemment décrite représente la structure d'un procédé de chiffrement AES classique,
- la figure 3 précédemment décrite représente la structure d'un procédé de chiffrement classique protégé contre des attaques par canaux auxiliaires,
- la figure 4 représente la structure d'un mode de réalisation d'un procédé de chiffrement selon l'invention,
- la figure 5 illustre un avantage du procédé de la figure 4,
- la figure 6 représente la structure d'un procédé de chiffrement AES selon l'invention, - la figure 7 représente la structure d'un autre mode de réalisation d'un procédé de chiffrement selon l'invention, et
- la figure 8 représente un mode de réalisation d'un microcircuit sécurisé selon l'invention. Des modes de réalisation de l'invention incluent la constatation que toutes les rondes d'un procédé de chiffrement symétrique ne nécessitent pas le même niveau de protection contre des attaques par canaux auxiliaires. Les rondes plus exposées à ce type d'attaque et notamment à une attaque par analyse DPA ou CPA sont tout d'abord la première ronde et la dernière ronde. En effet, une analyse DPA ou CPA ne peut être
conduite contre une ronde que si une donnée d'entrée ou de sortie de la ronde est connue de l'attaquant, la clé étant l'objet de l'attaque.
Or, en référence à la figure 1A précédemment décrite, la première ronde RD-i reçoit une donnée d'entrée qui est connue d'un attaquant. Il s'agit du message M ou une donnée issue de la transformation du message par l'opération initiale IO. L'opération initiale étant également connue de l'attaquant car décrite par des normes applicables, la donnée d'entrée peut être calculée à partir du message si elle n'est pas le message lui-même. De même, la dernière ronde RDNr fournit un résultat connu de l'attaquant. Il s'agit du message chiffré C ou d'une donnée dont le message chiffré C est issu, après transformation de la donnée par l'opération finale FO. Comme l'opération finale est également connue de l'attaquant, cette donnée peut être retrouvée à partir du message chiffré C, au moyen de la fonction inverse de la fonction utilisée par l'opération finale FO. Ainsi, une attaque sur les rondes intermédiaires, en particulier à partir de la troisième ronde ou l'avant-avant-demière ronde, est d'une trop grande complexité pour être envisageable aujourd'hui sans une attaque préalable sur les deux premières ou deux dernières rondes.
Des modes de réalisation de l'invention se rapportent ainsi à un procédé de chiffrement dans lequel le nombre d'exécutions des rondes intermédiaires RD, (RD2, RD3, ... RDj, RDN ) est inférieur au nombre d'exécutions de la première et la dernière ronde, afin de réduire le nombre total d'exécutions de rondes et réduire le temps total d'exécution du procédé de chiffrement. Dans des modes de réalisation, la seconde et l'avant-dernière rondes RD2, RDN sont considérées comme plus exposées à des d'attaques que d'autres rondes intermédiaires, et sont exécutées un plus grand nombre de fois que les autres rondes intermédiaires. Dans encore d'autres modes de réalisation, des rondes intermédiaires "centrales" (i.e. les plus éloignées de la première et la dernière ronde) ne sont exécutées qu'une fois.
A titre d'exemple, la figure 4 montre schématiquement la structure d'un procédé de chiffrement par bloc CP3 selon l'invention, de type symétrique, protégé contre des attaques par canaux auxiliaires. De façon en soi classique, le procédé fournit un message chiffré C, à partir d'un message M et d'une clé secrète K, et comporte Nr rondes RD-i, RD2l... RD,... RDNr-i, RDNr- Le procédé peut comprendre une opération initiale IO visant à préparer le message M avant l'exécution des rondes, et une opération finale FO visant à transformer le résultat de la dernière ronde au moyen d'une fonction de transformation connue, pour obtenir le message chiffré C. Il comprend également une étape initiale de génération de N1 -1 fausses clés K-i, K2,..., KNI-I en sus de la clé secrète K. La clé K est par exemple considérée comme la clé de rang 0 (K0=K). Le procédé utilise ainsi un ensemble initial de N1 clés Kj (K0, Κ-ι, K2,..., KNI-I) dans lequel seule la clé Ko est authentique.
Selon l'invention, le procédé CP3 comprend les étapes suivantes :
- la ronde RDi est exécutée N1 fois au moyen de N1 sous-clés SK- (SK-i,0, SKi,i, SK-1 ,2, ... , SK-I ,NI-I) générées à partir de l'ensemble initial de N1 clés Kj (K0, KL K2,..., KNM ),
- la ronde RD2 est exécutée N2 fois, avec N2 < N1 , au moyen de N2 sous-clés SK2 j (SK2,o, SK2,-I , SK2 2, ... , SK2 N2-i) générées à partir d'un sous-ensemble de N2 clés Kj (Ko, Ki, K2,..., KN2-I) qui est inclus dans l'ensemble initial de N1 clés,
- etc.,
- la ronde RD, est exécutée N, fois, avec N, < , Ν étant le nombre d'exécutions de la ronde précédente, au moyen de N, sous-clés SKg (SKii0, βΚ,,ι, SKi,2,..., SKi,Ni-i) générées à partir d'un ensemble de N, clés Kj (Ko, K-i, K2,..., KNM) qui est inclus dans l'ensemble initial de N1 clés,
- etc.,
- la ronde RDNr-i est exécutée NNr-i fois, avec NNr-i ≥ NNR-2, NNr-2 étant le nombre d'exécutions de la ronde précédente, au moyen de NN sous-clés SKNr-i,j (SKNr-i,o> SKNr-i,i, SKNr-i,2 SK(Nr-1 ,NNr-i-1 ) générées à partir d'un ensemble de NN clés Kj (K0, Ki, K2,..., K(NN -1 )) qui est inclus dans l'ensemble initial de N1 clés, et
- la dernière ronde RDNr est exécutée NNr fois, avec ΝΝΓ≥ NNr-i, au moyen de ΝΝγ sous- clés SKNr,j (SKNr,o, SKNr,i , SKNr,2,- . -> SK(Nr,NNr1 )) générées à partir d'un ensemble de ΝΝΓ clés Kj (K0, Κ-ι, K2 K(NN )) qui est inclus dans l'ensemble initial de N1 clés. La relation entre le nombre d'exécutions de chaque ronde RD, est régie par une première règle de contre-mesure, qui peut être formalisée de la manière indiquée ci- après, référence étant faite à des rondes RD-ι, RD2, RD3, RD )... RD RDNr-3> RDNr-2,
RDNr-i , RDNr dont certaines ne sont pas représentées sur la figure 4 : Règle 1 :
- N1 > N2 > N3 > N4... > Ni avec au moins N1 > N2 ou N2 > N3,
- NNr≥ NN ≥ ΝΝΓ-2-≥ ΝΝΓ-3■·■≥ i avec au moins NNr > NNr-i ou NNr-i > NNr-2- Exemples :
- N1 > N2 > N3 > N4 ... > Ni et NNr > NNr-1 > NNr-2≥ NNr-3 ... > Ni
- N1 = N2 > N3 > N4 ... > Ni et NNr = NNr-i > NNr-2. >. NNr-3 ... > Ni
- N1 > N2 = N3 > N4 ... > Ni et NNr > NN = NNr-2.≥ NNr-3 -≥ Ni
- N1 > N2 > N3 = N4 ... = Ni et NNr > NNr-1 > NNr-2.= NNr-3 ... = Ni
Dans certains modes de réalisation, la répartition du nombre d'exécutions pourrait être différente sur les premières et dernières rondes, par exemple :
- N1 > N2 > N3 > N4 ... > Nj et NNr = NN > NNr-2≥ NNr-3 ... > Ni Selon une seconde règle de contre-mesure, optionnelle, définissant une sorte de "symétrie" du procédé relativement à des rondes centrales, le nombre d'exécutions de la dernière ronde est égal au nombre d'exécutions de la première ronde, le nombre d'exécutions de la deuxième ronde est égal au nombre d'exécutions de l'avant- dernière ronde, et ainsi de suite jusqu'à une certaine "distance" des première et dernière rondes. Cette règle peut être formalisée de la manière indiquée ci-après.
Règle 2
Si i < Is, alors N, = NNr-i+i,
Is étant un seuil définissant la "distance" d'une ronde relativement aux première et dernière rondes.
Exemple :
- N1 = NNr
- N2 = NN
- N3 = NNr-2
- etc. jusqu'au seuil Is.
Le seuil Is peut être choisi supérieur au nombre de rondes pour obtenir une symétrie totale du procédé en ce qui concerne le nombre d'exécution des rondes, relativement aux rondes centrales.
Selon une troisième règle de contre-mesure, également optionnelle, désignée "règle 3", l'exécution de certaines rondes intermédiaires n'est pas répétée, notamment celle des rondes centrales. Pour la mise en œuvre de cette règle, on définit un nombre de rondes à protéger relativement à la première et à la dernière ronde, désigné "NRtoP". Le nombre de rondes à protéger représente le nombre de rondes devant être exécutées plusieurs fois. Les rondes qui n'appartiennent pas au groupe des rondes à protéger sont considérées comme des rondes "centrales" et ne sont exécutées qu'une fois, avec la bonne clé Ko (i.e. la clé authentique). La règle 3 peut être formalisée comme indiqué ci-après.
Règle 3 :
NRtoP = nombre de rondes à protéger
Si i > NRtoP et i < Nr-NRtoP, alors Νρ1
Exemple numérique dans le cas d'un procédé de chiffrement comprenant 16 rondes RDi à RD16 (Nr=16) :
NRtoP = 3 (i.e. 3 rondes à protéger),
Si i > 3 et i < 16-3 (soit i < 13), alors N,=1
Dans ce cas, les rondes RD4, RD5, RD6, RD7, RD8, RD9, RD10, RDn, RDi2, RD13 ne sont exécutées qu'une fois. Dans certains modes de réalisation, le nombre d'exécutions N, de chaque ronde RD, (pour i allant de 1 à Nr) peut être déterminé au moyen d'une relation qui est fonction du rang i de la ronde considérée. La règle 4 ci-après est un exemple de relation en 1/(2n), n étant une variable fonction de i. La règle 4 inclut la règle 2 en ce qui concerne les rondes à protéger et inclut la règle 3 en ce qui concerne les rondes qui ne sont pas à protéger.
Règle 4 :
NRtoP = nombre de rondes à protéger
Pour i de 1 à Nr faire :
Si i < NRtoP alors n = i-1 et Nj= N1/(2n)
Sinon :
Si i > Nr-NRtoP alors n = Nr-i et N|= N1/(2n)
Sinon :
Ni=1 (Règle 3)
La règle 4 peut être formulée plus simplement au moyen de l'opérateur "min" (i.e. "minimum de") :
NRtoP = nombre de rondes à protéger:
Pour i de 1 à Nr faire:
Si i < NRtoP ou i > Nr-NRtoP, faire :
n = min(i-1 , Nr-i)
N|= N1/(2n)
Sinon :
(Règle 3)
On se référera maintenant à l'Annexe 1 , faisant partie intégrante de la description. Le tableau 1 de l'Annexe 1 décrit un exemple numérique d'application de la règle 4, avec Nr=16 et NRtoP=3. Si N1 = 8, il vient que : N2=4, N3=2, N4 à N13 = 1 , N14=2, N15=4 et N16=8. Si N1 =16, il vient que N2=8, N3=4, N4 à N13 = 1 , N14=4, N15=8 et N16=16.
Le tableau 2 de l'Annexe 1 décrit des modes de réalisation CP31 , CP32, CP33, CP34, CP35, CP36 du procédé de chiffrement CP3 mettant en œuvre les règles 1 et 2. Ces modes de réalisation concernent un procédé de chiffrement à 16 rondes (Nr=16), par exemple le procédé DES. Le nombre maximal d'exécution N1 est égal à 8 pour les modes de réalisation CP31 à CP34, CP36, et est égal à 12 pour le mode de réalisation CP35. Le mode de réalisation désigné par la référence CP30 ne met pas en œuvre la règle 1 et n'est pas considéré comme compris dans l'invention car il n'apporte aucun avantage en termes de temps de calcul. Il représente le nombre d'exécutions de rondes que nécessiterait une contre-mesure classique consistant dans 8 exécutions successives du procédé de chiffrement, ce qui nécessiterait 8*16 soit 128 exécutions de rondes.
Dans le tableau 2, la colonne T donne le nombre total d'exécution de rondes, la colonne CT donne le temps de calcul de chaque mode de réalisation CP31 à CP36 relativement au temps de calcul du mode de réalisation CP30, en pourcentage, ou temps de calcul relatif. Ce temps de calcul relatif CT est égal au nombre total d'exécution de rondes divisé par le nombre total d'exécution de rondes dans le cas du mode de réalisation CP30, soit (T/128)*100. La colonne G ou "Gain de temps" est le complément à 100 du temps de calcul relatif CT, soit G = 100 - CT.
Les modes de réalisation CP34, CP35, CP36 mettent également en oeuvre la règle 3 (pas d'exécution multiple de certaines rondes centrales) et le mode de réalisation CP36 met également en œuvre la règle 4 avec NRtoP=3 et Nr=8. Ces exemples montrent que le gain de temps dépend à la fois de la distribution du nombre d'exécutions des rondes intermédiaires et du nombre maximal d'exécutions de la première et de la dernière ronde. Par exemple, le mode de réalisation CP35 dans lequel N1=12 offre un gain de temps de 55% supérieur au gain de temps de 44% offert par le mode de réalisation CP33 dans lequel N1 =8, car les rondes 6 à 11 ne sont exécutées qu'une fois.
Dans une variante de réalisation, la règle 3 est modifiée de manière que le nombre d'exécutions des rondes "centrales" soit fixe mais supérieur à 1 , ce qui correspond par exemple aux modes de réalisation CP31 et CP32 où les rondes centrales sont exécutées deux fois.
Comme autre exemple, le tableau 3 en page 1 de l'Annexe 1 décrit le nombre total T d'exécutions de rondes en fonction du nombre de rondes Nr ainsi que le temps de calcul relatif CT (relativement au mode de réalisation CP30) lorsque la règle 4 est utilisée pour déterminer le nombre d'exécutions, et lorsque le nombre de rondes à protéger NRtoP est égal à 4.
Toujours pour illustrer les avantages qu'apportent un procédé de contre-mesure selon l'invention, la figure 5 représente la courbe CR1 du nombre total T d'exécutions de rondes en fonction du nombre de rondes Nr lorsque la règle 4 est utilisée, et lorsque le nombre de rondes à protéger NRtoP est égal à 4. La courbe prend la forme d'une droite et sa pente est déterminée par le paramètre NRtoP. A titre de comparaison, est également représentée la courbe CR2 du nombre total T d'exécutions de rondes en fonction du nombre de rondes Nr dans le cas d'une mise en œuvre classique.
On se référera maintenant à l'Annexe 2, faisant partie intégrante de la description, qui décrit sous forme d'algorithmes exécutables des exemples de réalisation de procédés de chiffrement protégés selon l'invention. Les opérations de sous-ronde que chaque procédé de chiffrement exécute sont rappelées dans les tableaux 4 et 5 de l'Annexe 1 .
Application au chiffrement DES
Le procédé de chiffrement est exécuté au moyen d'un algorithme PDES1 ("DES Protégé") et d'un algorithme PRDES1 ("Ronde DES Protégée") ou algorithme de ronde. L'algorithme de ronde PRDES1 est une sous-fonction de l'algorithme PDES1 qui est appelée par ce dernier à chaque nouvelle itération de la variable i, qui forme un numéro de ronde.
Dans l'algorithme PDES1 , les opérations de permutation IP, de permutation inverse IPinverse, de partage du message en deux blocs de 32 bits exécutées aux étapes 3, 4, 8 sont connues de l'homme de l'art et ne seront pas décrites en détail ici. Un premier couple de valeurs (L0, Ro) est calculé à l'étape 4 à partir du message M, après permutation de celui-ci à l'étape 3, pour l'exécution de la première ronde par l'algorithme PRDES1. Ensuite, les étapes 5, 6, 6.1 , 6.2, 7, et 7.1 mettent en œuvre la règle 4 décrite plus haut, et déterminent ainsi le nombre d'exécutions d'une ronde en fonction de son rang et du paramètre NRtoP. Les étapes 6.3 et 7.2 sont des appels à la fonction ronde exécutée par l'algorithme PRDES1.
Dans l'algorithme PRDES1 , les tableaux de cryptographie C, D, E, F (en pratique des chaînes binaires), les opérations de permutation aléatoire, de génération de sous-clés, l'opérateur de concaténation "|" ainsi que les opérations de sous-ronde décrites dans le tableau 4 de l'Annexe 1 (permutation expansive, substitution, XOR, permutation simple) sont également connus de l'homme de l'art. Les sous-rondes 1 à 4 sont incluses dans la boucle 13 et sont donc répétées chacune autant de fois que le nombre d'itérations de la variable j. La variable j présente N, valeurs déterminées par
l'algorithme PDES1. Lorsque l'algorithme PRDES1 est appelé par l'algorithme PDES1 avec Ni=1 (étapes 7.1 et 7.2), la boucle 13 ne comprend qu'une valeur de j et les sous- rondes ne sont donc exécutées qu'une fois avec la sous-clé correspondant à la bonne clé K0.
La permutation aléatoire exécutée à l'étape 12 permet à la fois de sélectionner les N, premières sous-clés de l'ensemble des sous-clés SK,,o à SKÎ,NI-I pour former un ensemble de sous-clés SKj,p0 à SKj,pj pour j allant de 0 à Nr1 , pj étant un élément de rang j dans la permutation aléatoire P. Lorsque Ν,=Ν1 , toutes les sous-clés sont utilisées. Lorsque Ν,=1 ; seule la bonne sous-clé SKi.o est utilisée (i.e. la sous-clé correspondant à la bonne clé Ko). Cette permutation aléatoire permet également de classer les sous-clés dans un ordre aléatoire pour l'exécution de la boucle 13. Ainsi, la première sous-clé utilisée pour la première itération (j=0) de la boucle 3 n'est pas nécessairement la sous-clé SKii0. A chaque nouvelle exécution de l'algorithme PRDES1 , l'ordre d'utilisation des sous-clés est donc aléatoire.
Une fois la ronde répétée N, fois, l'algorithme PRDES1 renvoie le couple de valeurs (L,, Ri) qui est donc fonction du couple de valeurs initial reçu en entrée (L , R^), du numéro i de la ronde (qui détermine les valeurs des sous-clés) et du nombre N, d'exécution de la ronde.
Dans l'algorithme PRDES1 , la génération de sous-clés nécessaires à l'exécution de chaque ronde, à partir des clés Ko à KNM OU à partir des sous-clés d'une ronde précédente, peut être faite de plusieurs manières :
- pour chaque clé Ko à KN1-1, les sous-clés nécessaires à l'exécution des rondes sont générées à l'avance et sont stockées dans une mémoire protégée. Cette méthode nécessite un certain espace mémoire, ce qui peut ne pas convenir à certaines applications,
- lors de chaque exécution d'une ronde, les sous-clés nécessaires à la ronde sont générées à la volée en fonction des clés ou des sous-clés de la ronde immédiatement
précédente associées à la clé en cours d'utilisation. Toutes les sous-clés sont générées à chaque ronde, y compris celles dont l'algorithme PRDES1 n'a pas besoin lorsque la ronde est exécutée un nombre de fois inférieur au nombre de clés, afin que l'algorithme PRDES1 dispose, pour l'exécution de la ronde suivante, de toutes les sous-clés précédentes nécessaires à la génération des sous-clés de la ronde considérée.
La seconde solution précitée a été retenue ici et apparaît à l'étape 1 1 , où N1 sous-clés sont générées à chaque ronde à partir des N1 clés ou des N1 sous-clés générées lors de l'exécution de la ronde précédente, indépendamment du nombre d'exécutions de la ronde considérée et donc du nombre de sous-clés dont l'algorithme PRDES1 a réellement besoin pour l'exécution de la ronde.
Il sera noté que dans le cas du procédé DES, des méthodes connues de génération des fausses clés permettent de générer toutes les sous-clés de toutes les fausses clés à partir des sous-clés de la clé authentique. Ainsi, au lieu de générer les sous-clés d'une fausse clé à partir des sous-clés précédentes de la même fausse clé, les sous- clés de la fausse clé pourraient aussi être générées à partir des sous-clés de la clé authentique. Dans le cas du procédé AES, les sous-clés d'une fausse clé doivent par contre être générées à partir des sous-clés précédentes de la fausse clé.
Il apparaîtra clairement à l'homme de l'art que divers autres algorithmes mettant en œuvre les principes de l'invention peuvent être prévus pour exécuter le procédé DES, les algorithmes PDES1 et PRDES1 n'étant que des exemples.
Application au chiffrement TDES (Triple DES)
Le procédé de chiffrement selon l'invention est ici exécuté au moyen d'un algorithme PTDES ("TDES Protégé") figurant en Annexe 2 et des algorithmes PDES1 et PRDES1 décrits plus haut.
Le chiffrement TDES comporte classiquement une première étape de chiffrement DES du message avec une première clé K, soit DES(M,K), puis une étape de chiffrement inverse DES"1, avec une seconde clé K', du résultat de la première étape, soit DES"1(DES(M,K),K'), et enfin une étape de chiffrement DES, avec la première clé K, du résultat de la deuxième étape, soit :
DES(DES"1(DES(M,K),K'),K) Dans l'algorithme PTDES, la première étape de chiffrement DES (étape 20) est exécutée en faisant appel à l'algorithme PDES1 qui lui-même fait appel à l'algorithme PRDES1 , après avoir défini le nombre maximal N1 d'exécution de rondes et le nombre de rondes à protéger NRtoP. La seconde étape de chiffrement DES"1 peut être exécutée au moyen d'un procédé DES"1 classique non protégé contre les attaques par canaux auxiliaires (étape 21 a), ou au moyen de l'algorithme PDES1"1, soit l'algorithme inverse de l'algorithme PDES1 décrit en Annexe 2 (étape 21 b). L'algorithme PDES1"1 n'est pas décrit en Annexe 2 mais peut être dérivé de l'algorithme PDES1 en remplaçant l'opération IP de l'étape 3 par l'opération IPinverse, et en remplaçant l'opération IPinverse de l'étape 8 par l'opération IP, et en inversant l'ordre d'utilisation des sous-clés (soit de SK 6 à SK-i ). Comme l'étape 21 b prévoit que N1 =1 et NRtoP=0, l'algorithme PDES1"1 n'est pas protégé et est équivalent à un procédé DES"1 classique. Enfin, la dernière étape de chiffrement DES (étape 22) est protégée et est exécutée en faisant appel à l'algorithme PDES1 qui lui-même fait appel à l'algorithme PRDES1 , en définissant le nombre maximal N1 d'exécution de rondes et le nombre de rondes à protéger NRtoP. Application au chiffrement AES 128
L'exemple décrit en Annexe 2 concerne l'AES 128 à 10 rondes mais l'invention peut aussi être appliquée à l'AES 192 à 12 rondes et à l'AES 256 à 14 rondes. Le procédé est exécuté au moyen d'un algorithme PAES1 ("AES Protégé") et d'un algorithme PRAES1 ("Ronde AES Protégée") ou algorithme de ronde. L'algorithme PRAES1 est une sous-fonction de l'algorithme PAES1 qui est appelée par ce dernier à chaque nouvelle itération du numéro de ronde i. Dans l'algorithme PAES1 , les étapes 33, 34, 34.1 , 34.2, 35, 35.1 mettent en œuvre la règle 4 décrite plus haut, et déterminent ainsi le nombre d'exécutions d'une ronde en fonction de son rang et du paramètre NRtoP. Les étapes 34.3 et 35.2 sont des appels à la fonction ronde exécutée par l'algorithme PRAES . L'algorithme PRAES1 exécute les opérations de sous-ronde décrites dans le tableau 5 en Annexe 1 (AddRoundKey, SubByte, ShiftRow et MixColumn), en soi connues de l'homme de l'art. La structure des rondes exécutées par l'algorithme PRAES1 est représentée sur la figure 6 sous la forme d'un organigramme "AES2". L'organigramme AES2 diffère de l'organigramme AES1 de la figure 2 en ce que les sous-rondes ont été réorganisées par commodité de manière à faire disparaître l'opération initiale IO comprenant l'opération AddRoundKey. L'opération AddRoundKey est intégrée dans la première ronde RD1 , et au début de chaque ronde suivante, de sorte qu'elle fait intervenir, dans chaque ronde suivante de rang ij une sous-clé SKi.-ij de rang i-1 ,j. L'opération AddRoundKey est suivie des opérations SubByte, ShiftRow et MixColumn dans les rondes RD1 à RD9. La dernière ronde RD10 comporte deux exécutions de l'opération AddRoundKey faisant intervenir les deux dernières sous-clés SK9 et SKi0 de la clé courante de rang j. Entre ces deux opérations sont exécutées les opérations SubByte et ShiftRow. L'homme de l'art pourra bien entendu prévoir toute autre structure de rondes respectant les spécifications de l'AES.
Dans l'algorithme PRAES1 , les sous-rondes AddRoundKey, SubByte, ShiftRow sont incluses dans la boucle itérative 43 et sont donc répétées chacune autant de fois que le nombre d'itérations de la variable j. L'opération MixColumn est également incluse dans la boucle 43 pour toute valeur du numéro de ronde i différente de 10. La boucle 43.6 est exécutée lorsque i est égal à 10 et est incluse dans la boucle 43 uniquement pour la ronde 10. Elle comprend une nouvelle génération de sous-clés (étape 43.6.1 ) et la seconde exécution de l'opération AddRoundKey (étape 43.6.2).
Comme précédemment, l'opération de permutation aléatoire exécutée à l'étape 42 permet à la fois de sélectionner les N, premières sous-clés de l'ensemble des sous- clés SKi,0 à SKj N-i-1 pour former un ensemble de sous-clés SKiiPo à SKiiPj pour j allant de 0 à Nj-1 . Lorsque Nj=N1 , toutes les sous-clés sont utilisées. Lorsque
; seule la bonne sous-clé SKj,0 est utilisée (i.e. la sous-clé correspondant à la bonne clé K0). Cette opération de permutation aléatoire permet également de classer les sous-clés dans un ordre aléatoire pour l'exécution de la boucle 43.
Il apparaîtra clairement à l'homme de l'art que divers autres algorithmes mettant en œuvre les principes de l'invention peuvent également être prévus pour exécuter le procédé AES.
Modes de réalisation de l'invention basés sur la notion de modularité
Dans des modes de réalisation de l'invention fondés sur la notion de modularité, l'exécution multiple d'une ronde comprend :
- l'exécution multiple d'une ou plusieurs sous-rondes de la ronde considérée,
- une seule exécution d'une ou plusieurs autres sous-rondes de la ronde considérée.
Les règles précédemment décrites, relatives à la détermination du nombre d'exécutions de chaque ronde, sont conservées, mais la façon selon laquelle chaque ronde est exécutée plusieurs fois est modifiée. En d'autres termes, chaque sous-
ronde, et plus particulièrement chaque opération de chiffrement que comporte chaque sous-ronde, est considérée comme un "module" susceptible d'un nombre d'exécutions qui lui est propre. A titre d'exemple, la figure 7 représente un procédé de chiffrement CP4 selon l'invention, par exemple le procédé DES. Le procédé CP4 est construit sur le même modèle d'exécution multiple des rondes que le procédé CP3, et se distingue de celui-ci par le fait que seule la sous-ronde SRD3 de chaque ronde RD-i , RD2 RDNr est exécutée plusieurs fois. Le procédé CP4 comprend donc les étapes suivantes :
- la sous-ronde SRD3 de la ronde RD-\ est exécutée N1 fois tandis que les autres sous- rondes ne sont exécutées qu'une fois avec la clé K0,
- la sous-ronde SRD3 de la ronde RD2 est exécutée N2 fois, avec N2 < N1 , tandis que les autres sous-rondes ne sont exécutées qu'une fois avec la clé Ko,
- etc.,
- la sous-ronde SRD3 de la ronde RD, est exécutée N, fois, avec N, < Ν ι (NM étant le nombre d'exécutions de la ronde précédente) tandis que les autres sous-rondes ne sont exécutées qu'une fois avec la clé K0,
- etc.,
- la sous-ronde SRD3 de l'avant-dernière ronde RDNr-i est exécutée NNr-i fois tandis que les autres sous-rondes ne sont exécutées qu'une fois avec la clé Ko, et
- la sous-ronde SRD3 de la dernière ronde RDNr est exécutée NNr fois, avec NNr≥ NNr-i , tandis que les autres sous-rondes ne sont exécutées qu'une fois avec la clé Ko-
Ce mode de réalisation permet d'accélérer encore plus le temps d'exécution du procédé de chiffrement, en limitant au sein des rondes exécutées plusieurs fois le nombre de sous-rondes qui sont elles-mêmes exécutées plusieurs fois. Il peut comprendre la prévision de plusieurs fonctions hardwares indépendantes ou "modules matériels" exécutant chacun une sous-ronde ou une opération de sous-ronde, en lieu et place d'une seule fonction hardware de ronde contenant toutes les sous-rondes.
Cette modularité permet d'une part de multiplier les appels aux sous-fonctions au cours d'une ronde et de varier le nombre de ces appels en fonction de la ronde dans laquelle on se trouve, mais aussi de définir des sous-fonctions utilisables par plusieurs procédés de chiffrement. En d'autres termes, au lieu de prévoir un coprocesseur dédié à un procédé de chiffrement déterminé, des modes de réalisation de l'invention prévoient plusieurs accélérateurs hardwares utilisables par plusieurs procédés de chiffrement, chacun mettant en œuvre une opération de sous-ronde. Ainsi, dans l'exemple représenté sur la figure 7, chaque sous-ronde SRD1 à SRD4 peut être exécutée au moyen d'un accélérateur hardware dédié.
Par précaution, une contre-mesure peut être prévue pour protéger contre des attaques par canaux auxiliaires les sous-rondes qui ne sont exécutées qu'une fois. Cette contre- mesure peut notamment être une contre-mesure par masquage. Ainsi, sur la figure 7, les sous-rondes SRD1 , SRD2, SRD4 de la ronde RDi sont protégées par un masque aléatoire U1 , les sous-rondes SRD1 , SRD2, SRD4 de la ronde RD2 sont protégées par un masque aléatoire U2, etc., et les sous-rondes SRD1 , SRD2, SRD4 de la ronde RDNr sont protégées par un masque aléatoire LV-
Le choix du mode de protection d'une sous-ronde, par masquage ou exécution multiple, peut être fait en fonction de la nature de l'opération que comporte la sous- ronde. On distingue à cet effet les sous-rondes qui comportent une opération linéaire et celles qui comportent une opération non linéaire au sens mathématique du terme. Est notamment non linéaire une opération dont l'exécution repose sur une table déterminée, stockée en mémoire.
Exemple de masquage d'une opération linéaire :
- M est un message,
- K est une clé secrète.
- Opération normale : C = M XOR K (combinaison du message avec la clé)
- Opération protégée (masquée) :
Tirer aléatoirement à chaque itération un masque U ayant le même nombre de bits que le message M,
Calculer C = M XOR U (masquage du message M avec le masque U),
Calculer C = C XOR K (combinaison du message masqué avec la clé),
Calculer C = C XOR U (démasquage)
L'opération protégée produit le même résultat que l'opération non protégée.
Exemple de masquage d'une opération non linéaire "S" :
- M est un message,
- K est une clé secrète,
- S est une table,
- X = K XOR M.
- Opération normale :
- Pour i = 0 à 7 faire :
S( ) = Y,
Une attaque par analyse DPA ou CPA connaissant M peut permettre de retrouver la clé K en prédisant la valeur S(X,).
- Opération protégée (masquée) :
- Tirer aléatoirement un masque U,
- Recalculer la table S pour obtenir une nouvelle table S' :
- Pour I = 0 à 256 faire
- S'(i XOR U) = S(i) XOR U
- Pour i = 0 à 7 faire :
X'i = X XOR U
Y'i = S'(X'i)
Y = Y, XOR U
Comme précédemment, l'opération protégée produit le même résultat que l'opération non protégée.
Une contre-mesure par masquage présente l'inconvénient de consommer un espace mémoire important dans le cas d'une opération non linéaire, car le fait de masquer une table avec une pluralité de masques nécessite un espace mémoire important. Ainsi, pour réduire l'espace mémoire utilisée, on utilise généralement le même masque pour toutes les sous-rondes de la ronde ou pour toutes les valeurs de la table, par exemple un masque de 8 bits. Le masquage est alors dit "d'ordre simple" par opposition à un masquage d'ordre supérieur, qui utilise une pluralité de masques aléatoires.
Toutefois, le masquage d'ordre simple introduit une faiblesse face aux attaques par analyse DPA d'ordre(s) supérieur(s). En revanche, si l'opération non linéaire masquée en ordre simple est exécutée plusieurs fois avec de fausses clés, l'opération "vraie" sera noyée dans de fausses opérations et le résultat d'une attaque sera assimilable à du bruit. Certains modes de réalisation de l'invention prévoient donc des exécutions multiples d'opérations non linéaires qui sont masquées en ordre simple. Dans ce cas, et avantageusement, il n'est pas nécessaire de prévoir un masque d'ordre supérieur car il est quasiment impossible, en l'état des connaissances actuelles, de réaliser une attaque d'ordre supérieur sur une opération exécutée plusieurs fois avec un masquage d'ordre simple. En résumé, dans certains modes de réalisation, les opérations linéaires sont protégées par des exécutions multiples, ou par un masquage d'ordre multiple, ou encore par un masquage d'ordre simple et des exécutions multiples, tandis que les opérations non linéaires sont de préférence protégées par un masquage d'ordre simple et des exécutions multiples.
Ainsi, dans le procédé CP4 représenté sur la figure 7, de nombreuses combinaisons de contre-mesures peuvent être prévues. En supposant que les sous-rondes SRD1 , SRD2 et SRD4 sont linéaires et que la sous-ronde RD3 est non linéaire, les contre- mesures suivantes peuvent par exemple être prévues :
- Contre-mesure 1 :
- les sous-rondes SRD1 , SRD2 et SRD4 ne sont exécutées qu'une seule fois par ronde et sont protégées par un masquage d'ordre simple ou multiple,
- la sous-ronde SRD3 est exécutée plusieurs fois par ronde, sans masquage
- Contre-mesure 2 :
- les sous-rondes SRD , SRD2 et SRD4 ne sont exécutées qu'une seule fois par ronde et sont protégées par un masquage d'ordre simple ou multiple,
- la sous-ronde SRD3 est exécutée plusieurs fois par ronde, avec un masquage d'ordre simple,
- Contre-mesure 3 :
- les sous-rondes SRD1 , SRD2 et SRD4 sont exécutées plusieurs fois par ronde, sans masquage,
- la sous-ronde SRD3 est exécutée plusieurs fois par ronde, avec un masquage d'ordre simple,
- Contre-mesure 4 :
- les sous-rondes SRD1 , SRD2 et SRD4 sont exécutées plusieurs fois par ronde, avec un masquage d'ordre simple ou multiple,
- la sous-ronde SRD3 est exécutée plusieurs fois par ronde, avec un masquage d'ordre simple. La contre-mesure 4 offre un niveau de sécurité supérieur aux contre-mesures 2 et 3 qui offrent elles-mêmes un niveau de sécurité supérieur à la contre-mesure 1. Toutefois, en relation avec la recherche du meilleur rapport entre temps d'exécution et protection contre des attaques, les contre-mesures 2 et 3 offrent déjà une excellente protection. On peut, de plus, ajouter des exécutions aléatoires au sein de ces opérations.
On se référera maintenant à l'Annexe 3, faisant partie intégrante de la description, qui décrit sous forme d'algorithmes exécutables des exemples de réalisation de procédés de chiffrement protégés selon l'invention mettant en œuvre la notion de modularité.
Application au chiffrement DES
Le procédé est exécuté au moyen d'un l'algorithme PDES2 et d'un algorithme de ronde PRDES2 figurant en Annexe 3. L'algorithme PDES2 se distingue de l'algorithme PDES1 en ce qu'il comprend des étapes initiales 54, 55 de génération d'un premier masque Uo et de génération de parties gauche et droite U0,L et U0,R du masque, suivie d'une étape 56 de masquage des parties gauche et droite Lo, Ro du message M. Également, l'étape 6.3 d'appel à l'algorithme PRDES1 est remplacée par une étape 58.3 d'appel à l'algorithme PRDES2, et l'étape 7.2 d'appel à l'algorithme PRDES1 est remplacée par une étape 59.2 d'appel à l'algorithme PRDES2. Enfin, lorsque toutes les rondes ont exécutées au moyen de l'algorithme PRDES2, une étape 60 de démasquage du résultat est prévue, avant l'opération IPinverse permettant d'obtenir le message chiffré C. L'algorithme de ronde PRDES2 utilise les mêmes opérations de chiffrement et comporte les mêmes sous-rondes que l'algorithme PRDES1 , mais met en oeuvre la notion de modularité. Il reçoit comme données d'entrée, comme précédemment :
- les clés Ko à KN1-1 ou des sous-clés de la ronde précédente,
- le couple de valeurs (Lj.i, R ) fourni par l'exécution précédente de l'algorithme de ronde PRDES2 ou par l'étape 56 de l'algorithme PDES2 en ce qui concerne le couple de valeurs initial (L , R ),
- le numéro de ronde i (pour le calcul des sous-clés), et
- le nombre d'exécutions N, de la ronde considérée, L'algorithme de ronde PRDES2 reçoit en sus, comme donnée d'entrée, un masque aléatoire UM. Il s'agit du masque U0 généré par l'algorithme PDES2 à l'étape 54, ou du masque UM renvoyé par l'exécution précédente de l'algorithme PRDES2, calculé à l'étape 78.
La sous-ronde 1 comprend l'opération linéaire Permutation Expansive et n'est exécutée qu'une fois à l'étape 75 avec un masquage d'ordre multiple. La sous-ronde 2 agencée dans la boucle itérative 76 comprend l'opération linéaire XOR et est exécutée plusieurs fois à l'étape 76.1 avec un masquage d'ordre multiple. La sous-ronde 3 comprend l'opération non linéaire Substitution est également présente dans la boucle 76 et est exécutée plusieurs fois à l'étape 76.3 sous forme non masquée, étant précédée d'une étape de démasquage 76.2. Le résultat de cette opération est ensuite masqué de nouveau à l'étape 76.4. Enfin, la sous-ronde 4 qui comprend l'opération linéaire XOR n'est exécutée qu'une fois avec un masquage d'ordre multiple à l'étape 77. Un masque U, de rang i pour la prochaine ronde est ensuite calculé à l'étape 78 et une mise à jour du masque U est effectuée à l'étape 79. L'algorithme retourne ensuite le résultat L\, R\ et le masque Uj.
Il apparaîtra clairement à l'homme de l'art que divers autres algorithmes mettant en œuvre les principes de l'invention peuvent être prévus pour exécuter le procédé DES.
Application au chiffrement AES
Le procédé est exécuté au moyen d'un algorithme PAES2 et d'un algorithme de ronde PRAES2 figurant en Annexe 3. L'algorithme PAES2 se distingue de l'algorithme PAES1 en ce qu'il comprend une étape 92 de génération d'un masque aléatoire initial Uo et une étape 93 de masquage du message M. L'étape 34.3 d'appel à l'algorithme PRAES1 est remplacée par une étape 95.3 d'appel à l'algorithme PRAES2 et l'étape 35.2 d'appel à l'algorithme PRAES1 est remplacée par une étape 96.2 d'appel à l'algorithme PRAES2. Lorsque toutes les rondes ont été exécutées, le résultat final C est démasqué à l'étape 97 pour obtenir le message chiffré C.
L'algorithme de ronde PRAES2 utilise les mêmes opérations de chiffrage et comporte les mêmes sous-rondes que l'algorithme PRAES1 , mais met en oeuvre la notion de modularité.
Ainsi, dans l'algorithme PRAES2, la sous-ronde 1 comprenant l'opération linéaire AddRoundKey (étape 104.1 ) est incluse dans la boucle itérative 104 et est exécutée plusieurs fois avec un masquage d'ordre multiple. La sous-ronde 2 comprenant l'opération non linéaire SubByte (étape 104.3) est exécutée plusieurs fois sous forme non masquée, après une étape de démasquage 104.2. Le résultat de cette sous-ronde est ensuite masqué de nouveau à l'étape 104.4. La sous-ronde 3 qui comprend l'opération linéaire ShiftRow est en dehors de la boucle 04 est n'est exécutée qu'une fois à l'étape 105, avec un masquage d'ordre multiple. La sous-ronde 4 des rondes 1 à 9, qui comprend l'opération linéaire MixColumn (étape 106.1 ) est également en dehors de la boucle 104 et n'est exécutée qu'une fois, avec un masquage d'ordre multiple. La sous-ronde 4 de la ronde 10 (étape 107.3.1 ) comprenant l'opération linéaire AddRoundKey est exécutée plusieurs fois avec un masquage d'ordre multiple au sein de la boucle 107, après une nouvelle génération de sous-clés (étape 107.1 ) et une étape de mise à jour du masque (étape 107.2) .
Il apparaîtra clairement à l'homme de l'art que divers autres algorithmes mettant en œuvre les principes de l'invention peuvent être prévus pour exécuter le procédé AES. L'invention s'applique de manière générale à tout procédé de chiffrement symétrique par bloc comprenant des rondes. Les modes de réalisation de l'invention reposant sur la notion de modularité s'appliquent à tout procédé de ce type dans lequel chaque ronde comporte une pluralité de sous-rondes. Des modes de réalisation d'un procédé de chiffrement selon l'invention peuvent ne mettre en oeuvre que le second aspect de l'invention relatif à la modularité des sous- rondes, sans le premier aspect de l'invention prévoyant un nombre d'exécutions variable des rondes en fonction de leur rang. De tels modes de réalisation peuvent donc comprendre un nombre identique d'exécutions de chaque ronde, mais un nombre différent d'exécutions de chaque sous-ronde au sein d'une ronde exécutée plusieurs
fois, certaines sous-rondes étant exécutées une seule fois, de préférence sous forme masquée, d'autres étant exécutées plusieurs fois, sous forme masquée ou non.
Un microcircuit configuré pour exécuter un procédé selon l'invention est lui-même susceptible de divers modes de réalisation. Par exemple, les algorithmes figurant en Annexe 2 et Annexe 3 peuvent être exécutés par le CPU du processeur principal ou en partie par le CPU et par un coprocesseur. Notamment les algorithmes PDES1 , PDES2, PTDES, PAES1 , PAES2 peuvent être exécutés par le CPU et les algorithmes de rondes PRDES1 , PRDES2, PRAES1 , PRAES2 être exécutés par un coprocesseur ou des accélérateurs hardwares. Les algorithmes PRDES2 et PRAES2 basés sur le principe de modularité peuvent avantageusement être exécutés par un coprocesseur modulaire ou plusieurs accélérateurs hardwares en parallèle formant l'équivalent d'un coprocesseur modulaire, permettant au CPU d'appeler les fonctions de sous-ronde chacune indépendamment de l'autre, avec ou sans masquage, pour une exécution simple ou multiple de ces fonctions.
La figure 8 représente schématiquement un exemple de dispositif sécurisé SDV comprenant un microcircuit MCT selon l'invention, monté sur un support CD, par exemple une carte plastique. Le microcircuit MCT comprend un processeur PROC incluant une unité centrale de traitement (CPU), un coprocesseur CPROC couplé au processeur, une interface de communication ICCT couplée au processeur, une mémoire MEM1 couplée au processeur principal, un générateur aléatoire ou pseudoaléatoire RGEN couplé au processeur principal et/ou au coprocesseur. Ces éléments PROC, CPROC, ICCT MEM1 , RGEN peuvent être intégrés sur une même puce de semi-conducteur ou, pour certains, être intégrés dans des puces de semi-conducteur différentes qui sont interconnectées par un circuit imprimé ou autre support d'interconnexion.
Le circuit ICCT peut être du type à contact (port de communication filaire) ou sans contact (interface NFC, Wifi, Bluetooth®, etc.) ou les deux. Dans certaines
applications, notamment dans le cadre d'une procédure d'authentification du dispositif SDV, le message à chiffrer M est reçu par l'intermédiaire du circuit d'interface de communication ICCT et le message chiffré C est également communiqué à l'extérieur par l'intermédiaire de ce circuit d'interface.
La mémoire MEM1 peut comprendre une zone mémoire volatile et une zone mémoire non volatile programmable électriquement. La mémoire programme non volatile peut comprendre une zone sécurisée comportant une clé secrète K. Le générateur aléatoire ou pseudo-aléatoire RGEN est utilisé par le processeur ou le coprocesseur pour générer les fausses clés et/ou des masques aléatoires du type décrit plus haut. Le coprocesseur peut-être dédié à l'exécution des rondes d'un procédé de chiffrement déterminé, ou être de type modulaire comme décrit plus haut, pour l'exécution de fonctions hardwares permettant au processeur d'exécuter les sous-rondes chacune indépendamment de l'autre.
ANNEXE 1 (faisant partie intégrante de la description)
Tableau 1
Tableau 2
Tableau 3
Tableau 4 - Procédé DES (Cf. FIPS PUB 46-3 du NIST)
Sous-ronde Abréviation^) Désignation Désignation
(français) (anglais)
Sous-ronde 1 E PermutationExpansive ExpansivePermutation
Sous-ronde 2 XOR XOR (OU Exclusif) XOR (Exclusive OR)
Sous-ronde 3 S Substitution Substitution
Sous-ronde 4 P PermutationSimple Permutation
(*) Abréviation formant la désignation officielle des sous-rondes dans la norme FIPS PUB 46-3 (Fédéral Information Processing Standard) du NIST (National Institute of Standards and Technology).
Tableau 5 - Procédé AES (Cf. FIPS PUB 197 du NIST)
(**) Désignation officielle utilisée dans la norme FIPS PUB 197 du NIST.
ANNEXE 2 (faisant partie intégrante de la description) Algorithme PDES1 (DES protégé)
Données d'entrée :
- clé
- M message à chiffrer
- N1 nombre d'exécutions maximum d'une ronde
- NRtoP nombre de rondes à protéger
Donnée de sortie :
- Message chiffré C=DES(M, K)=PDES1(M, K, N1, NRtoP)
Début :
(1) K0=K
(2) Générer N1 -1 fausses clés (K K2, KM-I)
(3) M=IP(M)
(4) Partager M en deux blocs de 32 bits L0 et Ro
l_o=32 bits les plus forts de M (partie haute)
Ro=32 bits les plus faibles de M (partie basse)
(5) Pour i de 1 à 16 faire:
(6) Si (i < NRtoP) ou (i > λ -NRtoP) alors
(6.1 ) n=min(i-1 , 16-i)
(6.2) Ni= N1/(2n)
(6.3) (U Ri)=PRDES1 (L , R , i, N,) [Ronde protégée]
(7) Sinon
(7.2) (U, Ri)=PRDES1 (L , R , i, N,) [Ronde non protégée]
(8) C=IPinverse (R16 | L16)
(9) Retourner C
Fin
Algorithme PRDES1 (ronde DES protégée)
Notation :
- i : rang de la ronde traitée
- Nj : nombre d'exécutions d'une ronde de rang i
- N1 (Ni avec i=1 ) : nombre maximal d'exécutions d'une ronde (première et dernière)
Données d'entrée :
- clés (Ko, Κι, K2, Kw-i) ou sous-clés d'une ronde précédente
- couple (Li-i, R )
- i numéro de ronde
- Nj nombre d'exécutions Donnée de sortie :
- (Li, Ri)=PRDES1(LM, Ri.i, i, N,)
Début :
(10) Soient C, D, E, F quatre tableaux de 4 octets
(1 1 ) Générer N1 sous-clés (SKii0, SKi: 1, SKi 2, .... SKiiNi-i) pour la ronde i à partir des clés Ko, K1, K∑, KNI-I OU des sous-clés d'une ronde précédente
(12) Générer une permutation aléatoire P={po, ...p/v/- } dans l'intervalle j=[0, N,--1]
(13) Pour j de 0 à (Λ/,-ί) faire:
(13. 1) TR=R , TL=L,-I
(13.2) W =R
(13.3) TR= PermutationExpansive(TR) [Sous-ronde 1]
( 3.4) TR=TR XOR SKi,Pj [Sous-ronde 2]
( 3.5) TR=Substitution(TR) [Sous-ronde 3]
(13.6) TR=PermutationSimple(TR) XOR Tl [Sous-ronde 4]
(13.7) Si pj=0 alors
C=W
D =TR
(13.8) Si pj≠ 0 alors
E=W
F=TR
(14) Li=C, Ri=D
(15) Retourner (Li.Ri)
Fin
Algorithme PTDES (triple DES protégé)
Données d'entrée :
- K et K' clés de cryptographie
- M message à chiffrer
- N1 (N, avec i=1 ) : nombre maximal d'exécutions d'une ronde (première et dernière)
- NRtoP : nombre de rondes à protéger
Sortie :
Message chiffré C = TDES(M,K, K =DES(DES (DES(M, K), Κ'), K)
= P1DES(M,K,K',N1, NRtoP)
Début :
(20) C=PDES1 (M,K,N1 ,NRtoP) [DES protégé selon l'invention : algorithme PDES1] (21 a) C=DES"1(C,K') [DES"1 classique sans protection] Ou, alternativement :
(21 b) C=PDES1"1((C,K',1 ,0) [PDES1"1 sans protection]
(22) C=PDES1 (C, K, N1 , NRtoP)
(23) Retourner C
Fin
Algorithme PAES1 (AES protégé)
Données d'entrée :
- K clé de cryptographie
- M message à chiffrer
- N1 nombre maximal d'exécutions d'une ronde
- NRtoP nombre de rondes à protéger
Données de sortie :
- Message chiffré C=AES(M, K)=PAES1 (M, K, N1, NRtoP)
Début :
(30) K0=K
(31 ) Générer N1 -1 fausses clés (K1t K2, KN1.i)
(32) R0=M
(33) Pour i de 1 à 10 faire :
(34) Si (i < NRtoP) ou (i > W-NRtoP) alors
0-i);
(R , i, Ni) [Ronde protégée]
(35) Sinon
(35.1 ) Ni=1
(35.2) Ri=PRAES1 (Ri-i, i, Ni) [Ronde non protégée] (36) C=R10
(37) Retourner C
Fin
Algorithme PRAES1 (ronde AES protégée)
Données d'entrée :
- clés {K0, Ki, K2, . ., KNI-I) OU sous-clés d'une ronde précédente
- message R , 16 octets
- i numéro de ronde
- Ni : nombre d'exécutions d'une ronde de rang i
- N1 (Ni avec i=1 ) : nombre maximal d'exécutions d'une ronde (première et dernière)
Donnée de sortie :
- Ri=PRAES1 (Ri-i , i, Ni)
Début :
(40) Soient C, D deux tableaux de 16 octets
(41 ) Générer N1 sous-clés (SK/^o, SKj.1ti, SK,.f,2, ■■·, SKj-1iNi-i) à partir des clés K0, Ki, K2, .... KNI-I ou des sous-clés d'une ronde précédente
(42) Générer une permutation aléatoire P={po,•■•PM-Î} dans l'intervalle j=[0, Nj-1]
(43) Pour j de 0 à (Λ/,-7) faire:
(43.1 ) W=Rn
(43.2) W=AddRoundKey(W, SKM lpj) [Sous-ronde 1 ]
(43.3) W=SubByte(W) [Sous-ronde 2]
(43.4) W=ShiftRow(W) [Sous-ronde 3]
(43.5) Si (i≠ 10) alors [Sous-ronde 4 des rondes 1 à 9]
W=MixColumn(W)
(43.6) Si (i=10) alors [Sous-ronde 4 de la ronde 10]
(43.6.1 ) Générer N1 sous-clés (SKi0,o, SKi0,i, SK10,2, SK10,NI-I) à partir des clés K0, Ku K2, KN1.i ou des sous-clés d'une ronde précédente
(43.6.2) W=AddRoundKey(W, SKi0,pj);
(43.7) Si pj=0 alors C=W
(43.8) Si pj≠ 0 alors D=W
(44) Ri=C
(45) Retourner (Ri)
Fin
ANNEXE 3 (faisant partie intégrante de la description) Modes de réalisation mettant en oeuyre la notion de modularité
Algorithme PDES2 (DES protégé)
Données d'entrée :
- clé
- M message à chiffrer
- N1 nombre d'exécutions maximum d'une ronde
- NRtoP nombre de rondes à protéger
Donnée de sortie :
- Message chiffré C=DES(M, K)=PDES2(M, K, N1, NRtoP)
Début :
(50) K0=K
(51 ) Générer N1 -1 fausses clés (K1t K2, KN1.i)
( 52) M=IP(M)
(53) Partager M en deux blocs de 32 bits L0 et R0
l_o=32 bits les plus forts de M (partie haute)
R0=32 bits les plus faibles de M (partie basse)
(54) Générer un masque aléatoire Uo de 8 octets
(55) Partager U0 en deux blocs de 32 bits U0,L et U0,R
(56) l_o=L0 XOR U0,L, Ro=Ro XOR U0,R [Masquage]
(57) Pour i de 1 à 16 faire:
(58) Si alors
, RM l U , i, Ni) [Ronde protégée]
(59) Sinon
(59.1 ) Ni=1
RM, Un , i, Nj) [Ronde non protégée] (60) masquage]
(61 )
(62)
Fin
Algorithme PRDES2 (ronde DES protégée)
Notation :
- i : rang de la ronde traitée
- Nj : nombre d'exécutions d'une ronde de rang i
- N1 (N, avec i=1 ) : nombre maximal d'exécutions d'une ronde (première et dernière)
Données d'entrée :
- clés (Ko, Κι, K2, KNI-I) OU sous-clés d'une ronde précédente
- couple (Li-i, Rj.i)
- masque aléatoire Ui-i=(Ui-i,L, UÎ-I,R)
- i numéro de ronde
- N, nombre d'exécutions Donnée de sortie :
Début
(70) Soient C, D, E, F quatre tableaux de 4 octets
(71 ) Générer N1 sous-clés (SKII0, SKi:i, SKII2, SKI,NI-I) à partir des clés Ko, Ki, K2, KN I OU des sous-clés d'une ronde précédente
(72) Générer une permutation aléatoire P={po, - -P -Î} dans l'intervalle j=[0, N,-1]
(73) TR=RÎ-I, TL=L 1
(74) W =RM
(75) TR= PermutationExpansive(TR) [Sous-ronde 1 masquée]
(76) Pour j de 0 à (Λ/,-7) faire:
(76.1 ) TR=TR XOR SKi.pj [Sous-ronde 2 masquée]
(76.2) TR=TR XOR PermutationExpansive(Ui.i,R) [Démasquage]
(76.3) TR=Substitution(TR) [Sous-ronde 3 non masquée]
(76.4) TR=TR XOR Ui.1 ,R [Masquage]
(76.5) Si ppO alors
C=W
D=TR
(76.6) Si Pj≠ 0 alors
E=W
F=TR
(77) D=PermutationSimple(D) XOR TL [Sous-ronde 4 masquée]
(78) Générer un masque aléatoire Ui=(Ui,L, U,,R) [Changement du masque pour la ronde suivante]
(79) C=C XOR Uj,i_ XOR UÎ-LR, D=D XOR PermutationSimpleiUi.-i.R) XOR UÎ,R XOR Uj- iL [Correction du masque]
(80) Li=C, Ri=D, Ui=Ui,L|Ui,R
(81 ) Retourner (L„ Ri, Ui)
Fin
Algorithme PAES2 (AES protégé)
Données d'entrée :
- K clé de cryptographie
- M message à chiffrer
- N1 nombre maximal d'exécutions d'une ronde
- NRtoP nombre de rondes à protéger
Données de sortie :
- Message chiffré C=AES(M,K)=PAES2(M, K, N1, NRtoP)
Début :
(90) K0=K
(91 ) Générer N1 -1 fausses clés (Ki, K2, KNi-i)
(92) Générer un masque aléatoire Uo de 16 octets
(93) R0=M XOR U0 [Masquage]
(94) Pour i de 1 à 10 faire :
(95) Si alors
, i, Ni) [Ronde protégée]
(96) Sinon
(96.1 ) Ni=1
(96.2) (R, Ui)=PRAES2(Ri-1, Un, i, Ni) [Ronde non protégée] (97) C=Rio XOR U-io [Démasquage]
(98) Retourner C
Fin
Algorithme PRAES2 (ronde AES protégée)
Données d'entrée :
- clés (K0, Κι, K2, KM-I) OU sous-clés d'une ronde précédente
- message Rj.-i , 16 octets
- Masque aléatoire UM
- i numéro de ronde
- Nj : nombre d'exécutions d'une ronde de rang i
- N1 (Ni avec i=1 ) : nombre maximal d'exécutions d'une ronde (première et dernière) Donnée de sortie :
- (Ri, Ui)=PRAES2(Ri-i, Ui-1 , i, Ν,)
Début :
(100) Soient C, D deux tableaux de 16 octets
(101 ) Générer N1 sous-clés (SKi:0, SKj -i, SKii2, .... SKi Ni-i) pour la ronde i, à partir des clés K0l K-i, K2, Λ/ OU des sous-clés d'une ronde précédente
(102) Générer une permutation aléatoire P={po,•■•PM-Î} dans l'intervalle j=[0, N,-1]
(103) W=RM
(104) Pour j de 0 à (Nt-1) faire:
(104.1 ) W=AddRoundKey(W, SKi,pj) [Sous-ronde 1 masquée]
(104.2) W=W XOR U [Démasquage]
(104.3) W=SubByte(W) [Sous-ronde 2 non masquée]
(104.4) W=W XOR Un [Masquage]
(104.5) Si pj=0 alors C=W
(104.6) Si pj≠0 alors D=W
(105) C=ShiftRow(C) [Sous-ronde 3 masquée]
(106) Générer un masque aléatoire U, de 16 octets [Changement du masque pour la ronde suivante]
(106) Si (i≠ 10) alors
(106.1 ) C=MixColumn(C) [Sous-ronde 4 masquée des rondes 1 à 9]
(106.2) C=C XOR U, XOR MixColumn(ShiftRow(UM ) [Correction du masque]
(107) Si (i=10) alors [Sous-ronde 4 de la ronde 10]
(107.1 ) Générer N1 sous-clés (S ,ο, SKiti, SKi:2, S ^Î-Î) pour la ronde 10, à partir des clés Ko, K1, K2, KN1.i ou sous-clés d'une ronde précédente
(107.2) W=C XOR Ui XOR ShiftRow(Ui--i ) [Correction du masque]
(107.3) Pour j de 0 à (Nt-1) faire:
(107.3.1 ) W=AddRoundKey(W, SKi0,Pj) [Opération sur valeur masquée]
(107.3.2) Si pj=0 alors C=W
(107.3.3) Si pj≠0 alors D=W
(107.4) W=C
(108) R=C
(109) Retourner (R, Ui)
Fin