FR 2980607 A1 20130329 FR 1158595 A 20110927 B11094 - 11-ZV2-0293FR01 1 PROCÉDÉ DE DÉRIVATION DE CLÉS DANS UN CIRCUIT INTÉGRÉ Domaine de l'invention La présente invention concerne de façon générale les circuits électroniques et, plus particulièrement, les circuits utilisant des clés de chiffrement, de signature, etc., dérivées à partir d'une clé maître ou de base contenue dans le circuit électronique. Exposé de l'art antérieur La plupart des circuits électroniques utilisant des clés utilisées par des algorithmes de signature, de chiffrement ou autres éléments cryptographiques, exploite des mécanismes de dérivation de clés afin de limiter l'exposition (le nombre d'utilisations) d'une clé de base du circuit. De telles techniques permettent notamment de répudier (considérer comme invalides) des clés trop souvent utilisées ou supposées avoir été attaquées, et de régénérer de nouvelles clés pour les sessions ultérieures. En particulier, il est fréquent qu'à chaque nouvelle session d'un processus cryptographique, le circuit électronique génère une clé de session en dérivant la clé de base. Une limitation de ces mécanismes est que la clé de base est exposée à chaque dérivation d'une clé de session, ce qui la rend indirectement sensible à certaines attaques comme B11094 - 11-ZV2-0293FR01 2 par exemple les analyses par canaux cachés de type analyse différentielle de la consommation (Differential Power Analysis - DPA). Par ailleurs, si l'on décide de limiter le nombre 5 d'utilisations de la clé de base, cela limite également le nombre de clés de session dérivables pour le circuit. Résumé Un objet d'un mode de réalisation de la présente invention est de proposer un mécanisme de dérivation de clés qui 10 pallie tout ou partie des inconvénients des mécanismes usuels. Un objet d'un autre mode de réalisation de la présente invention est de proposer une solution limitant les expositions de la clé de base sans pour autant réduire le nombre de sessions envisageables pour le circuit. 15 Pour atteindre tout ou partie de ces objets ainsi que d'autres, on prévoit un procédé de dérivation, par un circuit électronique, d'une première clé à partir d'une deuxième clé, dans lequel : au moins une troisième clé est dérivée de la deuxième 20 clé et sert à dériver la première clé ; une valeur d'un compteur, représentatif du nombre de premières clés, conditionne la dérivation d'une nouvelle valeur de la troisième clé. Selon un mode de réalisation de la présente invention, 25 une première partie de poids fort du compteur représente le nombre d'utilisations de la deuxième clé. Selon un mode de réalisation de la présente invention, une deuxième partie de poids faible du compteur représente le nombre d'utilisations de la troisième clé. 30 Selon un mode de réalisation de la présente invention, au moins un bit de la première partie du compteur est dupliqué. Selon un mode de réalisation de la présente invention, toute la première partie du compteur est dupliquée. Selon un mode de réalisation de la présente invention, 35 la valeur dupliquée est stockée en mémoire non volatile. B11094 - 11-ZV2-0293FR01 3 Selon un mode de réalisation de la présente invention, une nouvelle valeur de troisième clé est générée quand la valeur du compteur atteint un seuil. Selon un mode de réalisation de la présente invention, 5 une nouvelle valeur de la troisième clé est générée quand le bit de poids faible de la première partie du compteur diffère de la valeur dupliquée. Selon un mode de réalisation de la présente invention, plusieurs troisièmes clés sont utilisées en étant dérivées les 10 unes des autres. Selon un mode de réalisation de la présente invention, le compteur est stocké en mémoire non volatile. Selon un mode de réalisation de la présente invention, au moins les deuxième et troisième clés sont stockées en mémoire 15 non volatile. On prévoit également un circuit électronique adapté à la mise en oeuvre du procédé ci-dessus. Brève description des dessins Ces objets, caractéristiques et avantages, ainsi que 20 d'autres seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 est un schéma bloc simplifié d'un mécanisme de dérivation de clés ; 25 la figure 2 est un schéma bloc plus détaillé d'un mode de réalisation d'un mécanisme de dérivation de clés ; la figure 3 illustre un mode de réalisation de compteurs d'un mécanisme de dérivation de clés ; et la figure 4 est un organigramme simplifié d'un mode de 30 mise en oeuvre d'un mécanisme de dérivation de clés. Description détaillée De mêmes éléments ont été désignés par de mêmes références aux différentes figures. Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de 35 réalisation décrits ont été exposés. En particulier, la B11094 - 11-ZV2-0293FR01 4 destination des clés de session générées n'a pas été détaillée, les modes de réalisation décrits étant compatibles avec les utilisations usuelles des clés de session dans divers algorithmes cryptographiques. De plus, les mécanismes de génération et de stockage d'une clé de base dans un circuit électronique n'ont pas non plus été détaillés, les modes de réalisation décrits étant là encore compatibles avec les mécanismes habituels. Des clés de session dérivées d'une clé maître ou clé 10 de base d'un circuit intégré ont des utilisations multiples, que ce soit dans des cartes à microcircuit, dans des circuits d'authentification radiofréquence (RFID), dans divers circuits électroniques mettant en oeuvre des mécanismes cryptographiques, etc. 15 La figure 1 est un schéma bloc illustrant, de façon partielle, un exemple usuel de circuit électronique équipé d'un mécanisme de dérivation de clés. Une clé de base (BK) est stockée dans une mémoire non volatile 12 (NVM) du circuit électronique. Cette clé de base est exploitée par une fonction 20 14 de dérivation de clé (KEY DERIVATION FUNCTION - KDF) qui fournit une clé de session (SK) au circuit destiné à l'utiliser. Habituellement, à chaque nouvelle session ou besoin de changement de la clé de session, la clé de base est extraite de la mémoire non volatile pour dériver une nouvelle clé de 25 session. La figure 2 est un schéma bloc d'un mode de réalisation d'un mécanisme de dérivation de clés. Comme précédemment une clé de base (BK) est stockée dans une zone 122 d'une mémoire non volatile (NVM) 12 et cette 30 clé de base est exploitée par un mécanisme 2 de dérivation de clés (KDF). Selon le mode de réalisation représenté en figure 2, la clé de base BK est exploitée par une première fonction 22 (F1) de dérivation qui génère une clé, désignée arbitrairement, 35 clé de liaison LK. Cette clé de liaison est d'une part stockée B11094 - 11-ZV2-0293FR01 en mémoire non volatile dans une zone 124 et, d'autre part soumise à une deuxième fonction 24 (F2) de dérivation de clé pour fournir une clé de session SK. Cette clé de session SK est, par exemple, stockée dans une zone de mémoire volatile 20, par 5 exemple un registre ou analogue. La clé de session SK est fournie au reste du circuit électronique pour une utilisation en elle-même habituelle. Les fonctions Fl et F2 peuvent être identiques. Le mécanisme de dérivation de clé est commandé de façon logicielle ou matérielle. En figure 2, on a symbolisé un bloc 26 (CTRL) de commande du mécanisme. Ce bloc 26 synchronise les fonctions de dérivation de clés et organise la lecture et le stockage des clés en mémoire non volatile. Dans un mode de réalisation simplifié, une nouvelle clé de liaison est générée dès qu'un seuil du nombre d'utilisations de la clé de liaison courante est atteint. Prévoir une clé de liaison, ou clé intermédiaire, entre la clé de base et la clé de session limite le nombre d'expositions de la clé de base sans réduire le nombre de clés de sessions possibles. Un compteur de clés de session SC est stocké dans une zone de mémoire non volatile. Les bits de poids fort de ce compteur représentent le nombre LKN de clés de liaison, c'est-à-dire le nombre d'utilisations de la clé de base BK pour dériver des clés de liaison, et sont dupliqués dans une autre zone 126 de mémoire non volatile. La figure 3 illustre de façon très schématique un mode de réalisation préféré du compteur SC. Celui-ci comporte m+n bits, n bits de poids faible représentant le nombre de clés de session par clé de liaison (partie basse ou droite RSC du compteur SC) et m bits de poids fort représentant le nombre de clés de liaison pour la clé de base (partie haute ou gauche LSC du compteur SC). Le nombre (ou compte) LKN stocké en zone 126 comporte donc m bits dupliqués depuis le compteur de sessions. Le compteur de sessions SC comporte donc un nombre de bits B11094 - 11-ZV2-0293FR01 6 correspondant à la somme du nombre de bits représentatif du nombre d'utilisations d'une clé de liaison et du nombre de bits représentatif du nombre de clés de liaison. Les nombres m et n peuvent être égaux ou différents. Le cas échéant le compteur SC est en pratique formé de deux compteurs représentant respectivement les comptes RSC et LSC, le compteur LSC étant incrémenté lorsque le compteur RSC repasse à zéro en atteignant la valeur 2n+1. Selon une autre variante, le nombre LKN est stocké 10 avec la clé de liaison LK dans la zone 124. Dans le mode de réalisation de la figure 3, le seuil TH de déclenchement d'une nouvelle dérivation de clé de liaison correspond au changement d'état (vers 0 ou vers 1) du bit de poids faible de la partie haute LSC du compteur SC. 15 La figure 4 est un exemple de processus mis en oeuvre à partir du mécanisme de la figure 2. A chaque nouvelle session (bloc 31, NEW SESSION), le mécanisme commence par vérifier si la clé est bloquée (bloc 32, BLOCKED ?). Une telle situation se produit si, lors d'une 20 session précédente, le mécanisme a considéré que le circuit avait un problème au niveau de la génération des clés et qu'il devait être bloqué. Un exemple d'un tel processus sera exposé ultérieurement. En cas de blocage (sortie Y du bloc 32), le mécanisme retourne une erreur (ERROR). Le traitement de cette 25 erreur peut être le remplacement de la clé de base après une intervention externe sur le circuit, une extinction du circuit ou tout autre action ou traitement d'erreur habituel lorsqu'une clé ne peut pas être utilisée. Si le circuit n'est pas bloqué (sortie N du bloc 32), 30 le compteur de sessions SC est incrémenté (bloc 33, SC = SC + 1). On vérifie ensuite (bloc 34, LKN = LSC ?) si la clé de liaison LK stockée en mémoire non volatile est cohérente avec la valeur du compteur de sessions, c'est-à-dire si la valeur LKN qui a été stockée avec la clé de liaison courante (lors de la 35 génération de la clé de liaison courante) a la même valeur que B11094 - 11-ZV2-0293FR01 7 la partie haute LSC (m bits de poids fort) du compteur de sessions. Dans l'affirmative (sortie Y du bloc 34), cela signifie que la clé de liaison peut encore être utilisée. La clé 5 de liaison courante est alors soumise à la deuxième fonction de dérivation F2 (bloc 35) et génère une clé de session SK. Dans la négative (sortie N du bloc 34), c'est-à-dire si les bits de poids fort du compteur de sessions ne correspondent pas à la valeur LKN stockée en mémoire non 10 volatile, cela signifie que la clé de liaison doit être remplacée. La clé de base BK est alors extraite de la mémoire non volatile pour être exploitée par la fonction de dérivation F1 (bloc 37). La nouvelle clé de session LK est alors stockée en mémoire non volatile (bloc 38, LK -> NVM). 15 Le nombre LKN doit être incrémenté. Pour cela, on effectue un transfert (bloc 39, LSC -> LKN) de la valeur de la partie haute LSC du compteur SC dans la zone 126 stockant le nombre LKN. Côté bits de poids faible du compteur SC, la partie 20 basse RSC s'est trouvée automatiquement réinitialisée (à zéro) par l'incrément au bloc 33 (si lors de l'incrément le bit de rang n+1 a basculé vers 1 ou 0, tous les bits de rang inférieur ont basculé vers 0). Puis, une clé de session est dérivée (bloc 35) de la 25 nouvelle clé de liaison. La dérivation d'une clé de liaison à partir de la clé de base est donc conditionnée par les bits les plus significatifs LSC du compteur de sessions. En prenant pour exemple arbitraire un compteur de 30 sessions de 20 bits (m+n =20) parmi lesquels 10 constituent le compteur de clés de liaison, un total d'un million de sessions peut être effectué. Une clé de liaison est utilisée pour dériver 1024 clés de session successives et il y a un total de 1024 clés de liaison. Il en découle que la clé de base est utilisée au 35 plus 1024 fois et que chaque clé de liaison est également B11094 - 11-ZV2-0293FR01 8 utilisée au plus 1024 fois. Toutefois, le nombre de clés de session reste d'un million, le nombre de fois que la clé de base et que chaque clé de liaison est utilisée représente la racine carrée du nombre total de sessions (dans le cas ou m est égal à n). Le principe décrit ci-dessus peut être généralisé à plus de deux niveaux en utilisant plus de deux niveaux de clés de liaison. Avec p niveaux, le nombre d'utilisations de la clé de base et de chaque clé de liaison est, au plus, une puissance -p du nombre total de sessions quand un même nombre de bits du compteur SC est associé à chacun des p niveaux. Toutefois, plus le nombre de niveaux de clés de liaison est élevé, plus il faut utiliser des zones de mémoire non volatile pour stocker les compteurs et les clés de liaison 15 correspondants. Le cas échéant, une clé de session peut être utilisée plusieurs fois. Par exemple, un compteur supplémentaire compte le nombre d'utilisations de la clé de session courante ou des bits de poids faible sont ajoutés au compteur SC. 20 Dans un mode de réalisation simplifié, le compteur de clés de session est comparé à un seuil et lorsque ce seuil est atteint, on génère une nouvelle clé de session à partir de la clé de liaison courante. De façon similaire, le nombre de clés de liaison est comparé à un seuil et lorsque ce seuil est 25 atteint, on génère une nouvelle clé de liaison à partir de la clé de base. Selon une variante de réalisation, l'espace de stockage 126 du nombre LKN est réduit aux deux bits les moins significatifs de la partie haute LSC du compteur de sessions. Le 30 comportement du système est alors le suivant. Si ces deux bits correspondent aux deux bits les moins significatifs (rangs n+1 et n+2) de la partie haute LSC du compteur de sessions, la clé de liaison peut être utilisée pour la transaction courante. Si le bit le moins significatif (rang n+1) ne correspond pas mais 35 que l'autre bit (rang n+2) correspond, cela signifie que la clé B11094 - 11-ZV2-0293FR01 9 de liaison a expiré (a été utilisée suffisamment de fois) et qu'une nouvelle clé de liaison doit être générée. Si les deux bits ne correspondent pas, cela signifie qu'il y a un problème et le circuit doit être bloqué. Le test 32 correspond, par exemple, à un test sur ces deux bits ou à un test sur un bit drapeau indicateur d'un besoin de blocage. Selon une autre variante de réalisation, l'espace de stockage 126 du nombre LKN est réduit à un bit (ou à quelques bits pour des questions de redondance) dans lequel est transféré 10 le (ou les quelques, typiquement moins de dix) bits les moins significatifs du compteur de clés de liaison qui sont, de préférence, stockés en même temps que la clé de liaison (dans la zone 124). Le compteur de sessions SC contient toujours m+n bits. 15 Le comportement du système est alors le suivant. Si le bit LKN correspond au bit de rang n+1 du compteur de sessions, la clé de liaison peut être utilisée pour la transaction courante. Sinon, cela signifie qu'il y a eu un problème depuis la génération de la clé de liaison, par exemple une attaque. En 20 effet, lors de la dernière génération de la clé de liaison, la valeur du compteur SC a été incrémentée et le bit LKN transféré dans la zone 126. Si à l'itération suivante, ce bit est différent, cela signifie qu'une clé de liaison a bien été dérivée (étape 37), mais que le processus a été interrompu avant 25 qu'elle ne soit enregistrée (ou avant que la zone 126 n'ait été mise à jour si la valeur LKN est stockée séparément de la clé LK). Le mécanisme ci-dessus peut être avantageusement exploité pour protéger le circuit contre des attaques par 30 injection de faute. On prévoit alors un seuil sur les bits de poids faible (partie RSC) du compteur de sessions pour détecter un éventuel piratage. Si le bit le moins significatif des bits de poids fort de la clé de session (bit de rang n+1) est différent du bit de 35 poids faible de la clé de liaison LK (on suppose que le bit B11094 - 11-ZV2-0293FR01 10 représentant LKN est stocké en bit de poids faible dans la zone 124), on examine alors la partie droite (bits de poids faible) du compteur de sessions. Par exemple, on compare la valeur de la partie RSC à un seuil. On peut considérer que, si le seuil est dépassé, cela signifie qu'il y a eu de nombreuses coupures d'alimentation avec la clé précédente et qu'une attaque, par exemple par analyse statistique de la consommation, est susceptible d'être en cours. On stoppe alors le circuit. Dans le cas contraire, on dérive une nouvelle clé de 10 liaison de la clé de base et on écrit, en mémoire non volatile, cette clé de liaison et une copie du bit le moins significatif des bits de poids fort du compteur de sessions. Divers modes de réalisation ont été décrits. Diverses variantes et modifications apparaîtront à l'homme de l'art. En 15 particulier, le choix des nombres de bits à prévoir pour les différents compteurs dépend de l'application et du nombre de clés de session envisageable. De plus, le choix du nombre de niveaux de clé de liaison dépend là encore de l'application et de la granularité 20 d'utilisation des clés de liaison souhaitée. En outre, bien que l'on ait décrit un exemple à une clé de base et une clé de liaison, les modes de réalisation se transposent à l'utilisation parallèle ou successive de plusieurs clés de base et de plusieurs clés de liaison et clés de session. 25 Enfin, la mise en oeuvre pratique des modes de réalisation décrits est à la portée de l'homme du métier à partir des indications fonctionnelles données ci-dessus et en utilisant des moyens logiciels ou matériels généralement disponibles dans les circuits électroniques. REVENDICATIONS1. Procédé de dérivation, par un circuit électronique, d'une première clé (SK) à partir d'une deuxième clé (BK), dans lequel : au moins une troisième clé (LK) est dérivée (22) de la 5 deuxième clé et sert à dériver (24) la première clé ; une valeur d'un compteur (SC), représentatif du nombre de premières clés, conditionne la dérivation (21) d'une nouvelle valeur de la troisième clé. 2. Procédé selon la revendication 1, dans lequel une 10 première partie (LSC) de poids fort du compteur (SC) représente le nombre d'utilisations de la deuxième clé (BK). 3. Procédé selon la revendication 2, dans lequel une deuxième partie (RSC) de poids faible du compteur (SC) représente le nombre d'utilisations de la troisième clé (LK). 15 4. Procédé selon la revendication 2 ou 3, dans lequel au moins un bit (LKN) de la première partie (LSC) du compteur est dupliqué. 5. Procédé selon la revendication 4, dans lequel toute la première partie (LSC) du compteur est dupliquée. 20 6. Procédé selon la revendication 4 ou 5, dans lequel la valeur dupliquée est stockée en mémoire non volatile (126, 124). 7. Procédé selon l'une quelconque des revendications 1 à 6, dans lequel une nouvelle valeur de troisième clé (LK) est 25 générée quand la valeur du compteur (SC) atteint un seuil (TH). 8. Procédé selon l'une quelconque des revendications 2 à 6, dans lequel une nouvelle valeur de la troisième clé (LK) est générée quand le bit de poids faible de la première partie (LSC) du compteur diffère de la valeur (LKN) dupliquée. 30 9. Procédé selon l'une quelconque des revendications 1 à 8, dans lequel plusieurs troisièmes clés (LK) sont utilisées en étant dérivées les unes des autres.B11094 - 11-ZV2-0293FR01 12 10. Procédé selon l'une quelconque des revendications 1 à 9, dans lequel le compteur (SC) est stocké en mémoire non volatile (128). 11. Procédé selon l'une quelconque des revendications 1 5 à 10, dans lequel au moins les deuxième (BK) et troisième (LK) clés sont stockées en mémoire non volatile (122, 124). 12. Circuit électronique adapté à la mise en oeuvre du procédé conforme à l'une quelconque des revendications.