FR 2940485 A1 20100625 FR 0859060 A 20081224 L'invention concerne un procédé de mémorisation d'une donnée dans une entité électronique et une entité électronique apte à mettre en oeuvre un tel procédé. Lors de la mise en oeuvre de procédés de traitement (par exemple cryptographique) de données au sein d'une entité électronique (les données étant représentées sous forme numérique au moyen de niveaux électriques au sein de l'entité électronique), on est couramment amené à mémoriser (par exemple en mémoire vive) des données sensibles (telles que des clés secrètes ou des parties de clés secrètes, ou plus généralement des données secrètes ou des données dérivées d'un traitement utilisant des données secrètes). De telles données mémorisées sont alors la cible d'attaquants qui cherchent à déterminer de manière frauduleuse la donnée, afin par exemple d'avoir accès à des informations protégées au moyen de cette donnée secrète. Un type d'attaque connu pour ce faire consiste à forcer la valeur d'un bit de la donnée mémorisée et à observer le déroulement postérieur du procédé (ou algorithme, par exemple cryptographique) : si le fonctionnement de l'entité électronique se poursuit normalement, c'est que la valeur à laquelle le bit a été forcé correspond bien à la valeur de ce bit en fonctionnement normal ; si au contraire le fonctionnement postérieur indique une erreur (par exemple la non-vérification d'une condition vérifiée en fonctionnement normal), c'est que la valeur forcée ne correspond pas à la valeur normale du bit. On déduit ainsi inévitablement la valeur du bit de la donnée secrète et, en reproduisant ainsi l'expérience pour tous les bits, on pourrait en déduire la donnée secrète. Afin de déjouer ce type d'attaque, l'invention propose un procédé de mémorisation dans une entité électronique d'une donnée représentée par un mot numérique formé d'une pluralité de bits, caractérisé en ce qu'il comprend les étapes suivantes : - détermination aléatoire d'une valeur ; - mémorisation d'un mot obtenu par décalage du mot numérique d'un nombre de bits dépendant de la valeur déterminée. On entend ici par décalage une rotation bit à bit de la donnée, comme expliqué plus en détail plus loin en référence aux figures 3 à 5. Du fait du décalage aléatoire, il ne sera pas possible pour un attaquant de savoir quel bit de la donnée (avant décalage) est concerné par une opération de forçage sur un bit donné du mot mémorisé et son attaque sera ainsi vouée à l'échec. Le retour à la donné d'origine (avant décalage) en vue de son utilisation sera toutefois simple à mettre en oeuvre. Selon un mode de réalisation, l'étape de mémorisation peut comprendre les sous-étapes suivantes : - transfert du mot numérique vers un registre ; - décalage du registre dudit nombre de bits. On peut alors utiliser un registre à décalage, particulièrement simple et rapide pour l'opération recherchée ici. Le registre est par exemple un registre spécial d'un cryptoprocesseur destiné à recevoir une clé cryptographique utilisée dans l'algorithme cryptographique mis en oeuvre par le cryptoprocesseur. Le décalage est par exemple postérieur au transfert d'une durée inférieure (ou égale) à un cycle d'horloge du cryptoprocesseur, ce qui permet de limiter le temps de stockage de la valeur non décalée. On peut également prévoir que l'étape de mémorisation comprenne les sous-étapes suivantes : - décalage d'un registre stockant le mot numérique dudit nombre de bits ; - mémorisation de la valeur du registre dans une mémoire (par exemple non volatile, de type EEPROM, ou volatile). Ainsi, la mémorisation est par exemple effectuée dans une mémoire volatile, tel qu'un registre d'un processeur ou une mémoire vive (ou RAM) associée au microprocesseur de l'entité électronique. Cette solution est particulièrement intéressante lorsque la donnée est une donnée secrète, telle qu'une partie au moins d'une clé cryptographique ; elle peut toutefois être également utilisée pour d'autres types de données. On peut prévoir en pratique les étapes suivantes après la mémorisation : - lecture en mémoire du mot mémorisé ; - traitement du mot lu, le traitement comprenant un décalage inverse dudit décalage d'un nombre de bits. Cette solution est particulièrement intéressante lorsque la lecture est postérieure à la mémorisation d'une durée supérieure à 8 cycles d'horloge (en pratique, cette durée est même de préférence supérieure à 50 cycles d'horloge), même si elle présente également un intérêt pour des durées de mémorisation plus courtes. On peut prévoir en pratique que, la valeur déterminée étant mémorisée, l'étape de traitement est précédée d'une étape de lecture de la valeur déterminée mémorisée et que le décalage inverse est réalisé en fonction de la valeur déterminée lue. L'invention propose également une entité électronique apte à mémoriser une donnée représentée par un mot numérique formé d'une pluralité de bits, caractérisée en ce qu'elle comprend : - des moyens de détermination aléatoire d'une valeur ; - des moyens de mémorisation d'un mot obtenu par décalage du mot numérique d'un nombre de bits dépendant de la valeur déterminée. Les caractéristiques optionnelles envisagées ci-dessus pour le procédé de mémorisation sont naturellement envisageables pour cette entité électronique. D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lecture de la description qui suit, faite en référence aux dessins annexés dans lesquels : - la figure 1 représente un premier exemple de procédé conforme aux enseignements de l'invention ; - la figure 2 représente un second exemple de procédé conforme aux enseignements de l'invention ; - les figures 3 à 5 représentent à titre illustratif une donnée avant décalage, après décalage de 1 bit et après décalage de 2 bits. La figure 1 représente des étapes mises en oeuvre dans un procédé de dérivation de sous-clés cryptographiques dans le cadre d'un algorithme cryptographique de type DES (pour "Data Encryption Standard") et conformément aux enseignements de l'invention. Un tel procédé est par exemple mis en oeuvre au sein d'une entité électronique, telle qu'une carte à microcircuit, sous la commande d'un microprocesseur de l'entité électronique et avec l'aide d'un crypto-processeur comme expliqué plus avant dans la suite. Les données traitées sont représentées sous forme numérique par des niveaux électriques au sein des processeurs. Les étapes de la figure 1 sont les premières étapes du processus de dérivation des sous-clés K1, K2, ... K16 à partir d'une clé cryptographique K (formée ici de 64 bits) tel que cela est prévu dans l'algorithme DES. La clé K est par exemple initialement mémorisée dans une mémoire non-volatile de l'entité électronique (typiquement une mémoire EEPROM ou une mémoire Flash). A l'étape E100, on détermine par tirage aléatoire une valeur A, ici sous forme d'un nombre entier compris entre 0 et 56. On utilise pour ce faire d'un algorithme permettant d'obtenir des valeurs aléatoires (parfois dénommées "pseudo-aléatoires"), avec multiplication éventuelle par une constante (typiquement 56 si l'algorithme produit des valeurs aléatoires comprises entre 0 et 1) afin d'obtenir des valeurs entre 0 et 56 (56 non inclus) et conservation en tant que valeur A de la partie entière seulement. On procède alors (par exemple sous la commande du microprocesseur du fait d'instructions qu'il exécute) à l'étape E102 au transfert de la clé cryptographique K de la mémoire non-volatile (où elle est stockée comme déjà mentionné) vers un registre dédié (par exemple du type SFR pour "Special Function Register" du crypto-processeur (le crypto-processeur étant ici spécifiquement conçu pour mettre en oeuvre l'algorithme DES). Dans d'autres modes de réalisation, ce transfert pourrait avoir pour origine un autre type de mémoire, par exemple une mémoire volatile (ou RAM). Le cryptoprocesseur procède alors à l'étape E103 (par exemple grâce à une logique câblée et donc quasi-instantanément) à l'étape de "Permutation Compressive 1" (PC1) prévue par l'algorithme DES, de telle sorte que le registre mémorise un mot de 56 bits. On procède alors à l'étape E104 au décalage du registre dédié d'un nombre de bits égal à la valeur A. On entend ici par décalage une rotation dans un sens donné des différents bits du registre qui mémorise (suite à l'étape E103) la donnée issue de la clé cryptographique sous forme d'un mot de 56 bits. On a représenté sur les figures 3 à 5 respectivement et à titre d'illustration un mot de 8 bits avant décalage, après décalage vers la droite d'un bit et après décalage vers la droite de deux bits. Le registre du crypto-processeur précité est ainsi par exemple un registre à décalage, ce qui assure une mise en oeuvre simple et rapide du décalage prévu ci-dessus. Le décalage (ou rotation) est par exemple mis en oeuvre sous la commande du microprocesseur qui détient dans l'un de ces registres (ou en variante dans une mémoire associée au microprocesseur) la valeur A. On pourrait prévoir en variante que le microprocesseur transmette la valeur A au crypto-processeur et que celui-ci soit conçu pour mettre en oeuvre le décalage aléatoire d'un nombre de bits égal à A sans nécessiter une commande particulière du microprocesseur. Selon une autre variante envisageable, on pourrait prévoir que la valeur aléatoire A soit déterminée au sein du cryptoprocesseur et que le décalage soit également réalisé au sein du cryptoprocesseur, auquel cas le fonctionnement serait sur ce point indépendant du microprocesseur de l'entité électronique. On comprend qu'il est préférable que l'étape de décalage aléatoire E104 soit réalisée rapidement après les étapes de transfert E102 et de permutation compressive E103 (ces deux étapes étant ici quasiment simultanées comme déjà expliqué), typiquement après une durée t inférieure à un cycle d'horloge après l'étape de transfert. En ce sens, il est intéressant de réaliser l'étape E100 au préalable comme indiqué en figure 1 ; il est toutefois envisageable d'effectuer en variante la détermination de la valeur aléatoire A entre les étapes E102 et E104. La clé cryptographique K est ainsi mémorisée (ici après traitement par l'étape PC1) dans le registre passé l'étape E104 sous forme décalée, avec un décalage aléatoire, de telle sorte qu'un attaquant éventuel ne pourra mener avec succès l'attaque décrite en introduction puisque la localisation des différents bits de la clé cryptographique dans le registre est imprévisible. Des traitements (typiquement la copie du message à chiffrer et le traitement IV prévu par l'algorithme DES) peuvent ainsi être réalisés pendant un laps de temps T non négligeable, typiquement plus de 8 cycles d'horloge (en général plus de 50 cycles), sans pour autant risquer une attaque du type décrit en introduction. Après ce traitement, et lorsque l'on souhaite procéder à proprement parler à la dérivation des sous-clés à partir de la clé cryptographique K compressée par PC1, on procède à l'étape E106 au décalage inverse du registre par rapport au décalage évoqué ci-dessus (c'est-à-dire à un décalage de A bits dans le sens inverse du sens de rotation précédent, ou en variante à un décalage de [56 û A] bits dans le même sens, ce qui reviendra au même s'agissant d'un mot de 56 bits) et on retrouve ainsi dans le registre dédié la clé cryptographique K compressée par PC1 (c'est-à-dire la valeur du registre en sortie de l'étape El 03). On peut envisager pour réaliser ce décalage inverse les mêmes solutions que celles envisagées ci-dessus pour le décalage de l'étape E104. Le crypto-processeur peut alors procéder aux différentes étapes de dérivation des sous-clés tel que cela est prévu dans l'algorithme DES (étape E110). Par ailleurs, bien que les étapes de décalage inverse et de dérivation des sous-clés aient été décrites comme deux étapes séparées, on pourrait envisager qu'elles soient mis en oeuvre au sein d'une même étape de fonctionnement du crypto-processeur sur la base de la valeur A que le cryptoprocesseur peut soit recevoir du microprocesseur de l'entité électronique, soit mémoriser comme déjà indiqué. On prévoit par exemple dans ce cas que le décalage aléatoire initial (étape E104) s'applique séparément aux deux mots de 28 bits (formant le mot de 56 bits présent dans le registre) et le décalage inverse peut ainsi être combiné aux décalages des mots de 28 bits prévus pour la dérivation de la première sous-clé K1 dans l'algorithme DES. La figure 2 représente un second exemple de procédé conforme aux enseignements de l'invention. Ce procédé implique comme décrit ci-dessous la mémorisation (ou le stockage) d'une variable secrète que l'on veut protéger des attaques décrites en introduction durant sa mémorisation. Dans ce but, on transfert à l'étape E200 la variable secrète vers un registre à décalage avant sa mémorisation souhaitée décrite plus loin. On procède par ailleurs au tirage d'une valeur aléatoire R à l'étape E202 (au moyen d'un algorithme de détermination de valeurs aléatoires ou pseudo-aléatoires). Comme dans le premier mode de réalisation, l'ordre des étapes E200 et E202 pourrait être inversé. On procède alors à l'étape E204 au décalage du registre de R bits (c'est-à-dire comme dans le premier mode de réalisation à la rotation des bits du registre, c'est-à-dire à une réorganisation de ces bits qui laisse l'ordre des bits inchangé en considérant le registre comme circulaire). On stocke alors en mémoire (par exemple une mémoire non-volatile de type EEPROM) la valeur du registre telle qu'elle résulte de l'étape E204 et la valeur aléatoire R. On propose ici de mémoriser le registre et la valeur aléatoire dans la même mémoire (par exemple dans la même zone mémoire) mais on pourrait naturellement mémoriser ces deux éléments dans des mémoires distinctes. La variable secrète est ainsi mémorisée dans un ordre imprévisible auparavant de telle sorte qu'un attaquant forçant la valeur d'un bit ne pourra finalement déduire aucune information puisqu'il ne sait pas sur quel bit de la variable secrète il a agit. Lorsque l'on souhaite utiliser la variable secrète, on procède à l'étape E208 à laquelle on lit dans la mémoire précitée la valeur aléatoire R précédemment stockée et la valeur provenant du stockage du registre à l'étape E206, cette dernière valeur étant transférée dans un registre à décalage (éventuellement celui déjà utilisé précédemment). On procède alors à l'étape E210 au décalage inverse du registre d'un nombre R de bits de telle sorte que le registre mémorise à nouveau la variable 10 secrète (sans décalage). Comme précédemment, le décalage inverse pourra être réalisé par un décalage dans le même sens que celui réalisé à l'étape E204, mais d'un nombre de bits égal au complémentaire de la valeur aléatoire R par rapport au nombre de bits total du registre (soit un décalage de [N-R] si N est le nombre de 15 bits du registre). On peut alors utiliser à l'étape E212 la valeur du registre en tant que variable secrète. On peut prévoir en outre à ce moment (c'est-à-dire après l'étape E212) de réitérer les étapes E202 à E206 afin de stocker la donnée secrète 20 avec un nouveau décalage aléatoire (et donc la plupart du temps différent de celui résultant de la première itération des étapes E202 à E206). Le nouveau stockage du registre en mémoire peut naturellement dans ce cas écraser le stockage précédent. On peut ainsi par exemple réitérer les étapes E202 à E206 après 25 chaque utilisation de la valeur mémorisée (étape E212, ce qui revient en figure 2 à mettre en oeuvre des étapes identiques aux étapes E202 à E206 et E208 et E210 après l'étape E212). Les exemples qui précèdent ne sont que des modes possibles de mise en oeuvre de l'invention qui ne s'y limite pas. REVENDICATIONS1. Procédé de mémorisation dans une entité électronique d'une donnée représentée par un mot numérique formé d'une pluralité de bits, 5 caractérisé en ce qu'il comprend les étapes suivantes : - détermination aléatoire d'une valeur (E100 ; E202) ; - mémorisation d'un mot obtenu par décalage du mot numérique d'un nombre de bits dépendant de la valeur déterminée (E102, E104; E200, E204, E206). 10 2. Procédé selon la revendication 1, caractérisé en ce que l'étape de mémorisation comprend les sous-étapes suivantes : - transfert du mot numérique vers un registre (El 02; E200) ; - décalage du registre dudit nombre de bits (E104; E204). 3. Procédé selon la revendication 2, caractérisé en ce que le registre est un registre d'un cryptoprocesseur destiné à recevoir une clé cryptographique. 20 4. Procédé selon la revendication 2 ou 3, caractérisé en ce que le décalage (E104) est postérieur au transfert (E102) d'une durée (E) inférieure à un cycle d'horloge. 5. Procédé selon la revendication 1, caractérisé en ce que l'étape 25 de mémorisation comprend les sous-étapes suivantes : - décalage d'un registre stockant le mot numérique dudit nombre de bits (E204) ; - mémorisation de la valeur du registre dans une mémoire (E206). 30 6. Procédé selon la revendication 5, caractérisé en ce que la mémoire est non-volatile. 15 7. Procédé selon l'une des revendications 1 à 5, caractérisé en ce que la mémorisation est effectuée dans une mémoire volatile. 8. Procédé selon l'une des revendications 1 à 7, caractérisé en ce 5 que la donnée est une donnée secrète. 9. Procédé selon l'une des revendications 1 à 8, caractérisé en ce que la donnée est une partie au moins d'une clé cryptographique. 10 10. Procédé selon l'une des revendications 1 à 9, caractérisé par les étapes suivantes : - lecture en mémoire du mot mémorisé (E208) ; - traitement du mot lu (E210, E212), le traitement comprenant un décalage inverse (E210) dudit décalage d'un nombre de bits (E204). 15 11. Procédé selon la revendication 10, caractérisé en ce que la lecture (E208) est postérieure à la mémorisation E206) d'une durée supérieure à huit cycles d'horloge. 20 12. Procédé selon la revendication 10 ou 11, caractérisé en ce que, la valeur déterminée étant mémorisée, l'étape de traitement est précédée d'une étape de lecture de la valeur déterminée mémorisée et en ce que le décalage inverse est réalisé en fonction de la valeur déterminée lue. 25 13. Entité électronique apte à mémoriser une donnée représentée par un mot numérique formé d'une pluralité de bits, caractérisée en ce qu'elle comprend : - des moyens de détermination aléatoire d'une valeur ; - des moyens de mémorisation d'un mot obtenu par décalage du 30 mot numérique d'un nombre de bits dépendant de la valeur déterminée.