Brevet FR2953951A1 — publié le 20110617

Objet et résumé de l'invention La présente invention se situe dans le domaine de la sécurisation des générateurs de nombres aléatoires. Elle trouve une application privilégiée, mais non limitative, dans la sécurisation des cartes à puces (ou cartes à microcircuit) conformes à la norme ISO 7816. Plus précisément, l'invention concerne un composant électronique comportant : - un processeur cadencé par un signal d'horloge interne à ce composant ; - un compteur apte à compter un nombre de cycles d'un signal d'une autre horloge; et - des moyens pour générer un aléa à partir de ce nombre. Dans un mode particulier de réalisation, cette autre horloge est une horloge externe au composant. Ainsi, et d'une façon générale, l'invention propose de tirer profit de l'instabilité ou de l'imprécision relative d'une horloge interne, et d'une autre horloge, par exemple externe, pour engendrer un nombre aléatoire. Par exemple, dans un mode de réalisation particulier de l'invention, le processeur est apte à exécuter un programme d'ordinateur comportant au moins : - une première instruction pour démarrer le compteur ; - une deuxième instruction pour arrêter le compteur. Le processeur étant cadencé par l'horloge interne, le nombre de cycles du signal d'horloge interne pour exécuter une même séquence d'instructions est invariable. Mais il est remarquable de noter que le nombre de cycles d'une autre horloge, par exemple celui d'une horloge externe, peut varier : l'invention utilise ce phénomène pour générer un aléa. Conformément à l'invention, la taille de l'aléa peut être choisie en fonction du nombre d'instructions s'exécutant entre les première et deuxième instructions précitées. Le nombre aléatoire obtenu par l'invention peut par exemple être est constitué par le dernier octet du nombre de cycles du signal de l'autre horloge, par exemple externe. 1 Dans un mode particulier de réalisation de l'invention, le signal d'horloge interne est obtenu à partir du signal de l'autre horloge, par exemple de l'horloge externe, mais ce n'est pas requis par l'invention, le signal d'horloge interne pouvant être généré par un générateur intégré dans le composant électronique. Dans un mode particulier de réalisation, le composant électronique selon l'invention comporte un générateur pseudo-aléatoire, l'aléa étant utilisé pour calculer une graine de ce générateur. Cette graine peut par exemple être obtenue en utilisant une fonction cryptographique dont un paramètre est l'aléa. Cette fonction cryptographique peut être une fonction de type DES. L'invention vise également une carte à puce conforme à la norme ISO 7816 comportant un microcontrôleur (100) constitué par un composant électronique tel que mentionné ci-dessus, ce composant comportant des connecteurs aptes à obtenir le signal d'horloge externe à partir d'un lecteur de cette carte. Brève description des dessins D'autres caractéristiques et avantages de la présente invention ressortiront de la description faite ci-dessous, en référence aux dessins annexés qui en illustrent un exemple de réalisation dépourvu de tout caractère limitatif. Sur les figures : - la figure 1 représente une carte à puce conforme à un mode particulier de réalisation de l'invention ; - la figure 2 représente un signal externe à la carte à puce de la figure 1. Description détaillée d'un premier mode de réalisation La figure 1 représente une carte à puce 150 conforme à l'invention et un lecteur 200 de cette carte à puce. La carte à puce 150 est conforme à la norme ISO7816. Elle comporte un microcontrôleur 100 conforme à l'invention, celui-ci comportant notamment, un processeur 120, une mémoire morte de type ROM 130, une mémoire non volatile réinscriptible 140 de type EEPROM 140 et une mémoire vive de type RAM 150. Le microcontrôleur 100 comporte aussi un module d'entrée sortie 110 dont des contacts affleurant constituent l'interface avec le lecteur 200. Dans le mode de réalisation décrit ici, le microcontrôleur 100 comporte un générateur de nombre aléatoire matériel 180. Dans le mode de réalisation décrit ici, au moment de la mise sous tension de la carte à puce 100, le générateur de nombre aléatoire matériel 180 est utilisé pour remplir un tampon (en anglais « buffer ») BUFFER180 et pour calculer une première valeur de graine, mémorisée dans une variable VARSEED mémorisée dans un registre de la mémoire EEPROM 140. Dans le mode de réalisation décrit ici, la variable VARSEED est calculée en utilisant un algorithme de chiffrement de type DES (Data Encryption Standard) : VARSEED = DES(VARSEED , BUFFER180) Nous allons maintenant décrire comment l'invention peut être utilisée pour calculer un aléa permettant de diversifier la graine VARSEED. Le processeur 120 du microcontrôleur 100 est cadencé par un signal SIGINT fourni par une horloge interne 170. Dans le mode de réalisation décrit ici, la fréquence de l'horloge interne 170 est de 30 MHz. Autrement dit, le signal SIGINT généré par l'horloge interne comporte 30 cycles par seconde. Dans le mode de réalisation décrit ici, le signal SIGINT généré par l'horloge interne 170 peut : - soit être généré par un générateur électronique 171 intégré dans l'horloge interne 170 ; - soit être obtenu à partir d'un signal SIGExT fourni par une autre horloge, à savoir dans cet exemple par une horloge externe 270 du lecteur 200, via le module d'entrée/sortie 110, le choix entre ces deux modes étant défini par l'écriture d'une valeur déterminée dans un registre 1 du compteur 160. Conformément à l'invention, le microcontrôleur 100 comporte un compteur 160 apte, sur instruction du processeur 120, à compter les cycles du signal SIGEx-r généré par l'horloge externe 270. Dans le mode de réalisation décrit ici, le compteur 160 reçoit directement le signal SIGExT. Il comporte deux registres 162, 163, accessibles respectivement en écriture et en lecture par le processeur 120 tels que : - l'écriture d'une première valeur (« 0 ») dans le registre 162 initialise et démarre le comptage des cycles du signal de l'horloge externe 270 par le compteur 160, l'écriture d'une deuxième valeur (« 1 ») dans ce registre arrêtant ce comptage ; - la lecture du registre 163 permet d'obtenir le nombre de cycles du signal SIGE,Ç de l'horloge externe 270 depuis la dernière écriture de la valeur « 0 » dans le registre 162. Dans le mode de réalisation décrit ici, le registre 163 est aussi accessible en écriture par le processeur 120 et initialisé à zéro à la mise sous tension de la carte à puce 100. Dans le mode de réalisation décrit ici, la mémoire morte de type ROM 130 mémorise un programme d'ordinateur PG exécutable par le processeur 120. La mémoire vive 150 de type RAM comporte des registres permettant l'exécution de ce programme. Ce programme d'ordinateur comporte notamment: - une première instruction pour écrire la valeur « 0 » dans le registre 162 afin de démarrer le comptage des cycles de l'horloge externe 270 par le compteur 160 ; - une deuxième instruction pour écrire la valeur « 1 » dans le registre 162 afin d'arrêter ce comptage ; et - une instruction pour lire le contenu du registre 163 afin d'obtenir le nombre de cycles du signal SIGE,, généré par l'horloge externe entre l'exécution des première et deuxième instructions. La figure 2 représente un exemple de signal extérieur SIGE,T pouvant être généré par l'horloge externe 270 et les instants auxquels le processeur 120 exécute la première instruction I1 et la deuxième instruction I2. Dans cet exemple le nombre de cycles Ncyc entre les deux instructions I1 et I2 est égal à 3. Comme mentionné précédemment, ce nombre de cycles Ncyc est variable même si le nombre de cycles de l'horloge interne 170 est identique pour deux exécutions identiques d'une même série d'instructions de programme d'ordinateur par le processeur 120. Conformément à l'invention, le nombre de cycles de l'horloge externe 270 lu dans le registre 163 est utilisé pour générer un aléa. Bien entendu, plus le nombre d'instructions exécutées par le processeur 120 entre l'exécution de la première instruction et l'exécution de la deuxième instruction est important, plus l'entropie de cet aléa sera grande. Préférentiellement, le nombre d'instructions exécutées entre les première et deuxième instructions I1, I2 représente plus de cent mille cycles de l'horloge interne 170. Dans le mode de réalisation décrit ici, on exécute des instructions représentant environ un million de cycles de signal d'horloge interne 170 pour générer un octet d'aléa dans le registre 163. Dans le mode de réalisation décrit ici, on utilise comme aléa le dernier octet du nombre lu dans le registre 163. Dans le mode de réalisation décrit ici, cet aléa, à savoir le dernier octet du nombre lu dans le registre 163 est mémorisé dans une variable VARALEA de la mémoire vive de type RAM 150. Dans le mode de réalisation décrit ici, cet aléa est utilisé pour diversifier la graine VARSEED en utilisant l'algorithme DES : VARSEED = DES(VARSEED , BUFFER180 " VARALEA) Dans le mode de réalisation décrit ici, la mémoire EEPROM 140 comporte en outre un registre comportant une constante VARX choisie en fonction de l'entropie de la variable VARSEED et la variable VARSEED est re- diversifiée une fois sur VARX. Dans le mode de réalisation décrit ici, la graine VARSEED est utilisée comme graine d'un générateur 190 de nombre pseudo-aléatoire de la carte à puce 100. Des tests ont été effectués avec un microcontrôleur 100 constitué par un composant SAMSUNG (marque déposée) de référence S3FS9TH : sur 10 000 obtentions de la variable VARALEA, les résultats suivants ont été obtenus : - nombre d'éléments différents: 255 - moyenne = 0x64 - min = 0x00 - max = Oxff - variance = 87.82 La variable aléatoire VARALEA peut par exemple être utilisée pour définir un nombre d'itérations d'une boucle d'un programme informatique. L'exécution d'une boucle comportant un nombre aléatoire d'instructions renforce la sécurité de la carte à puce 150, car elle engendre, pour un observateur extérieur à la carte, entre deux exécutions, un décalage entre les opérations sensibles effectuées par cette carte. REVENDICATIONS1. Composant électronique (100) comportant : - un processeur (120) cadencé par un signal d'horloge interne (SIGINT) audit composant ; - un compteur (160) apte à compter un nombre de cycles (Ncyc) d'un signal (SIGE)-) d'une autre horloge ; - des moyens (120) pour générer un aléa (VARALEA) à partir dudit nombre. 2. Composant électronique (100) selon la revendication 1, caractérisé en ce que ladite autre horloge est externe audit composant. 3. Composant électronique (100) selon la revendication 1 ou 2, caractérisé en ce que ledit signal d'horloge interne (SIGINT) est obtenu à partir du signal de ladite autre horloge (SIGE,7). 4. Composant électronique (100) selon l'une quelconque des revendications 1 à 3, caractérisé en ce qu'il comporte un générateur (171) apte à générer ledit signal d'horloge interne (SIGINT). 5. Composant électronique (100) selon l'une quelconque des revendications 1 à 4, caractérisé en ce que ledit processeur (120) est apte à exécuter un programme d'ordinateur comportant au moins : - une première instruction (I1) pour démarrer ledit compteur (160) ; - une deuxième instruction (I2) pour arrêter ledit compteur (160) ; et un nombre d'instructions entre lesdites première (I1) et deuxième (I2) instructions, ce nombre étant choisi en fonction de l'entropie souhaitée dudit aléa (VARALEA). 6. Composant électronique (100) selon la revendication 5, caractérisé en ce que ledit programme d'ordinateur comportant en outre un nombre d'instructions entre lesdites première (I1) et deuxième (I2) instructions, ce nombre étant choisi en fonction de la taille souhaitée dudit aléa (VARALEA).35 7. Composant électronique (100) selon la revendication 5, caractérisé en ce que ledit nombre d'instructions entre lesdites première (I1) et deuxième (I2) instructions représente plus de cent mille cycles d'horloge interne. 8. Composant électronique (100) selon l'une quelconque des revendications 1 à 7, caractérisé en ce que ledit aléa (VARALEA) est constitué par les derniers bits, par exemple par le dernier octet, dudit nombre de cycles (Ncyc). 9. Composant électronique (100) selon l'une quelconque des revendications 1 à 8, caractérisé en ce qu'il comporte un générateur pseudo-aléatoire (190), ledit aléa (VARALEA) étant utilisé pour calculer une graine (VARSEED) de ce générateur (190). 10. Composant électronique (100) selon la revendication 9, caractérisé en ce que ladite graine (VARSEED) est obtenu en utilisant une fonction cryptographique dont un paramètre est ledit aléa (VARALEA). 20 11. Composant électronique (100) selon la revendication 10, caractérisé en ce que ladite fonction cryptographique est une fonction de type DES. 12. Microcontrôleur (100) de carte à puce (150) constitué par un 25 composant électronique (100) selon l'une quelconque des revendications 1 à 11. 13. Carte à puce (150) conforme à la norme ISO 7816 comportant un microcontrôleur (100) constitué par un composant électronique selon 30 l'une quelconque des revendications 1 à 12, ce composant comportant des connecteurs (110) aptes à obtenir ledit signal d'horloge externe (SIGE,T) à partir d'un lecteur (200) de ladite carte. 14. Carte à puce (150) selon la revendication 13, caractérisée en ce 35 qu'elle comporte des moyens pour exécuter une boucle dont le nombre d'itérations est obtenu à partir dudit aléa (VARALEA). 10 15