FR 2797505 A1 20010216 FR 9910453 A 19990810 La présente invention concerne un circuit à microprocesseur sécurisé par un inter préteur secret . L'interpréteur sera désigné dans la suite de la description par PVS. L'un des éléments les plus importants pour les concepteurs d'applications utilisant les cartes à puces est l'authentification de la carte à puce d'un utilisateur avant de lui don ner accès à un service. Le concepteur d'une application à carte à puce même maîtrisant un langage de pro grammation est confronté au choix: -Du procédé d'authentification de la carte à puce. -Des techniques à mettre en oeuvre pour protéger les données confidentiel les stockées sur la carte. -Des moyens qui empêcheraient la reproduction frauduleuse de la carte. Les méthodes d'authentifications sont souvent très complexes et sont souvent plus diffici les à mettre en oeuvre que l'application elle même. La méthode d'authentification d'une carte à puce peut à elle seule justifier le choix d'un microprocesseur puissant et des capacités mémoire importantes. Les circuits à microprocesseur ont de commun, que la connaissance du micropro cesseur permet la connaissance du codage de ses instructions.En effet les fabricants publient les codes des instructions des microprocesseurs. L'invention concerne un circuit à microprocesseur dont les codes des instructions sont secrets et ne sont connus que du concepteur ou générés par un système informati que. L'invention permet au concepteur de développer une application sans se soucier des techniques de sécurisation à mettre en oeuvre.La maîtrise d'un langage de programmation est nécessaire pour développer une application à base de microprocesseurs et cette maîtrise inclue en elle même la possibilité de mettre en place des moyens d'authentifica tion d'une carte à puce sans techniques particulières ni algorithmes complexes. L'invention permet d'obtenir un niveau de sécurité élevé sans algorithmes com plexes ni circuits spécialisés.De tels circuits et des algorithmes spécifiques peuvent être combinés avec l'invention pour offrir un niveau de sécurité encore plus élevé. Les méthodes existantes sont caractérisées en ce qu'elles fournissent pour une méthode donnée, un fonctionnement unique et figé. L'invention peut être mise en oeuvre sans rG'#cessiter des capacités importants tout en offrant une sécurité élevée. Les microprocesseurs sont des composants polyvalents,un microprocesseur peut être utilisé dans des dizaines d'applications différentes, il suffit d'écrire pour chaque appli- cation le programme correspondant. L'invention comprend un interpréteur dont le fonctionnement est comparable au fonctionnement d'un microprocesseur qui peut être adapté à différentes applications et à différentes méthodes d'authentification où l'utilisateur fixera par lui même le niveau de sé curité souhaité. L'une des caractéristiques des microprocesseurs est que le codage des instruction est unique pour chaque type . Pour un microprocesseur M et pour une instruction I, un code d'instruction C unique est associé,ce code d'instruction est le même pour tous les utilisateurs du microproces seur. En plus ce codage d'instruction obéit à la même règle qui consiste à coder les ins tructions dans un ordre bien déterminé et de façon à demander un espace mémoire mini mum. Si par exemple un microprocesseur comporte 170 instructions, toutes ces instruc tions seront codées sur un octet.A chaque instruction correspond un nombre compris entre 0 et 255. Un octet permet de stocker les nombres entiers compris entre 0 et 255. Les interpréteurs qui interprètent des programmes traduits d'un langage évolué en un langage intermédiaire spécifique à l'interpréteur obéissent aussi à cette même façon de coder les instructions et les commandes exécutées par l'interpréteur . Cette caractéristique d'un codage unique pour tous les microprocesseurs d'un type donné est la base de toute action pour violer une carte à puce ou pour tromper un termi nal. L'invention comprend un interpréteur dont le codage d'instruction n'est pas figé et unique pour tous les utilisateurs mais le concepteur d'une application fixe, à sa conve nance, le code pour chaque instruction. Le codage du PVS n'obéit pas à la règle du moindre espace mémoire pour coder les instructions mais à l'inverse, le maximum d'espace mémoire possible pour coder une instruction. Au moins pendant une phase d'une application,le facteur vitesse et économie d'es pace mémoire passent après le facteur sécurité,c'est le cas par exemple quand un distri buteur de billets de banque doit authentifier une carte à puce, ou dans le cas où un ser veur doit authentifier un terminal qui veut accéder à des données confidentielles d'une entreprise,dans cette phase la sécurité est le facteur le plus important. Avant de décrire les éléments de sécurité qu'offre le PVS,voici une description de son fonctionnement. Un compilateur exécuté sur un ordinateur de bureau prend en entrée un fichier programme écrit en langage évolué.Dans la première réalisation de l'invention,le langage choisit est le BASIC. Le compilateur produit un programme intermédiaire P qui sera interprété par le PVS. Le programme P ne peut pas être exécuté par le microprocesseur. Le programme P est une suite d'instructions compréhensibles par le PVS. Le programme P est stocké dans une mémoire accessible au PVS. Le PVS lit le code d'une instruction, ce code fixe la tâche à réaliser d'une manière analogue au fonctionnement d'un microprocesseur. Parmi les éléments de sécurisation du circuit implantés dans la première réalisa tion de l'invention, l'impossiblité d'accéder aux variables internes du PVS, l'interception de toutes les interruptions, l'impossiblité d'accéder à une zone mémoire prédefinie dans une mémoire de type EEPROM,cette zone est réservée au stockage de données et de para mètres de configurations du PVS qui doivent rester secrets. Le fonctionnement du PVS est analogue au fonctionnement d'un microprocesseur avec une vitesse d'exécution moins importante mais avec des possibilités de sécurisation que ne sont pas présentes sur un microprocesseur. Dans la première réalisation de l'invention: -Un microcontrôleur est couvert par une couche logicielle formée par le PVS qui empêche tout accès direct au circuit sans passer par le PVS. -Le microcontrôleur utilisé comprend un microprocesseur, une mémoire pro gramme,une mémoire EEPROM pour les données, une mémoire RAM pour les variables des programmes et des entrées sorties pour communiquer avec l'extérieur. -La mémoire programme et la mémoire de données peuvent être ver rouillées contre la lecture ou la modification par un dispositif de protection prévu par le fabricant du microcontrôleur. -Toutes les variables nécessaires au fonctionnement du PVS ne sont pas accessibles. -Une mémoire de type RAM est disponible pour les variables des program mes interprétés par le PVS. -Une partie de la mémoire EEPROM du microcontrôleur est inaccessible et réservé au PVS.Cette zone mémoire est disponible en phase de dévelop pement seul ment,elle n'est pas disponible en mode de fonctionnement normal. La phase de développement est la phase pendant laquelle les paramètres du PVS peu vent être définis. Dans la première réalisation de l'invention, il n'est pas possible de s'adresser direc tement au microprocesseur, toute tâche â effectuer doit être adressée au PVS. Dès que le circuit est alimenté, le PVS prend le contrôle du circuit et toute instruction doit être une des instructions comprise et exécutée par lui. Les seuls programmes exécutables sur le circuit sont interpréteur et les programmes interprétés par cet interpréteur. Dans la première réalisation,le PVS comportent 31 instructions, mais ces 31 ins tructions sont codées sur un octet alors que 5 bits suffisent pour coder toutes ces instruc tions. Un codage des instructions sur 64 bits permet de choisir pour 31 instructions 31 nombres compris entre 0 et OxFFFFFFFFFFFFFFFF Chaque instruction se compose de: -64 bits pour le code de l'instruction -24 bits pour l'opérande ou les opérandes de l'instruction. Pour 31 instructions, le concepteur choisira 31 nombres compris entre 0 et 1.8 i 10 000 000 000 000 000 000. Pour 31 instructions et un codage sur 32 bits, le concepteur choisira 31 nombres compris entre 0 et 4 294 967 295 Le PVS comporte une table où sont stockés ces codes secrets choisis par le con- cepteur,en interprétant un programme,le PVS lit le code instruction, et à l'aide de la table secrète de codage ramène le code à un nombre inférieur à 31 puis exécute l'instruction correspondant à ce code. Ainsi, une carte à puce peut être commercialisée auprès de plusieurs concepteurs, cette carte à puce contient le PVS et le concepteur choisira les codes pour les instructions. Le choix des codes des instructions se fait uniquement en phase de développe- ment.Une fois l'application réalisée, les cartes à puces peuvent être distribuées avec l'im possibilité de lire ou de modifier ce codage. Ainsi,le circuit sur lequel est implanté un PVS peut être considéré comme un circuit pouvant communiquer uniquement dans un langage secret. Pour communiquer avec un tel circuit il faut connaître son langage, ce qui est équivalent à connaître la table secrète de codage des instructions. II est possible de permettre la modification du codage par exemple suivant une procédure qui garanti que la personne qui modifie le codage est une personne autorisée. Une procédure possible est que le PVS peut modifier la table secrète de codage s'il vérifie qu'une copie de cette table se trouve en mémoire RAM ce qui garanti que la per sonne qui change la table de codage secrète détient cette table. Dans la première réalisation de l'invention, à chaque initialisation (RESET) du mi- crocontrôleur le PVS vérifie la présence d'une valeur donnée à une adresse prédéfinie,si cette valeur est absente alors il entre en mode normal et les paramètres ne peuvent pas être changés,si cette valeur est présente, alors il peut passer en mode développement et les paramètres de configuration peuvent être modifiés. La table de codage des instructions est l'un des paramètres de configuration. En mode de fonctionnement normal, aucune tâche ne peut être exécutée par le microprocesseur sans que ça soit une tâche demandée par le PVS. Le microprocesseur, le PVS et les ressources du microcontrôleur sont isolés de l'extérieur, le seul moyen de communiquer avec l'extérieur est l'interprétation du PVS d'un ou plusieurs programmes stockés dans une zone mémoire prédéterminée. Plusieurs façons d'utiliser le PVS sont possibles; par exemple un programme de communication est stocké dans la mémoire programme du PVS,et à chaque initiliasa- tion le PVS exécutera ce programme qui permettra de recevoir d'autres programmes va riés suivant les applications. Tout système qui veut communiquer avec une carte à puce sur laquelle est implan té le PVS, doit lui fournir le programme à exécuter, ces programmes doivent avoir un co dage d'instructions identique au codage implanté sur la carte à puce et le système doit donc connaître dans le cas d'un codage sur 64 bits et 31 instructions, les 31 nombres choisis par le concepteur parmi les 1.8 "10 000 000 000 000 000 000 nombres possibles L'autre élément de sécurité important, est que le concepteur de l'application défini le nombre d'erreurs tolérées pendant le décodage des instructions. Par exemple, si le PVS rencontre 3 codes d'instructions illégaux alors la carte à puce peut être isolée définitivement de l'extérieur ce qui peut être comparé à une "autodestruction" de la carte.Le microcontrôleur sur lequel a été implantée la première réalisation de l'invention comporte une instruction (SLEEP) qui permet d'arrêter le micro processeur et aucune instruction ne peut plus être exécutée. Cette "autodestruction" de la carte à puce peut être implanté de plusieurs façon, par exemple à chaque fois qu'il rencontre un code d'instruction illégal, le PVS incrémente un compteur d'erreurs de codage situé en EEPROM, ce compteur est inaccessible aux programmes et ne peut être modifié que par le PVS . A chaque exécution d'une instruction,y compris la première instruction d'initialisa- tion,le PVS vérifie la condition autodestruction et refuse d'exécuter aucune instruction si cette condtion est remplie c'est à dire si un nombre prédéfini d'erreurs de codage est at teint . Ceci donne une idée de la probabilité pour un système non autorisé de réussir à faire exécuter sur le PVS un programme qui lui permet d'avoir le numéro d'identification d'une carte dans le cas par exemple d'un codage de 31 instructions sur 64 bits, sachant qu'un tel numéro ne peut être obtenu qu'en fournissant au PVS un programme qui com portera quelques instructions. Ceci implique que le demandeur du numéro d'identification connaît plusieurs codes d'instructions qui lui permettent d'écrire un tel programme.Donc ceci implique la connaissance de plusieurs nombres des 31 nombres choisis par le con cepteur sur les 1.810 000 000 000 000 000 000 nombres possibles. Le problème qui se pose avec le codage des instructions sur un maximum d'octets est que les programmes occuperont un espace mémoire plusieurs fois plus important que dans le cas d'un codage sur un seul octet. Le codage sur 64 bits peut être utilisé uniquement en phase d'authentification. Une procédure permet si au moins un certain nombre d'instructions différentes sont exécuté et si un bit est positionné à 1 de faire accepter par le PVS les instructions avec un codage sur 8 bits. Ainsi le concepteur choisira suivant les capacités du microcontrôleur et suivant l'application, d'utiliser le codage sur 64 bits ou de combiner le codage sur 64 bits et le Co dage sur 8 bits . Un système qui veut communiquer avec le PVS doit lui communiquer un pro gramme à interprété, ce programme est transmis, masqué par une clé secrète cette clé est implantée sur la carte à puce dans le cas d'une carte à puce. Pour authentifier un système sur lequel est implanté le PVS, par exemple authentification d'une carte à puce par un terminal ou bien authentification d'un terminal par un serveur, il suffit de lui soumettre un programme et de vérifier que les résultats de ce programme sont conformes aux résultats d'un système authentique. Par exemple envoyer à une carte à puce un programme qui charge deux variables avec deux valeurs, calcule la somme de ces deux variables puis renvoie au terminal le résultat.Si un circuit comprend ce programme et réussit à l'exécuter puis à renvoyer la va leur attendu, alors ce circuit peut être considéré authentique car il doit nécessairement connaître la table secrète de codage et la clé de communication. Un terminal qui envoie un programme pour authentifier une carte peut estimer que le temps de réponse est trop long et peut donc juger la carte non authentique. Dans le cas d'un serveur, le choix de programmes à soumettre au PVS pour authentification peut être important et varié, ainsi à chaque authentification un programme choisit aléatoirement ainsi que ses paramètres sont envoyés au terminal à authentifier. Dans le cas d'un terminal quelques programmes dont les paramètres sont générés de façon aléatoire peuvent être utilisés pour authentifier une carte à puce. II est possible, par exemple dans le cas d'un serveur d'implanter différentes tables de codage qui permettent de communiquer avec différents terminaux.Un terminal qui veut se connecter au serveur enverra un identifiant, le serveur à partir de cet identifiant sélec- tionne la table de codage correspondante au terminal et lui envoie un programme d'au- thentification, si le terminal réussit à renvoyer les valeurs attendues par le serveur alors il peut être considéré comme authentique. De même un terminal peut être utilisé avec plusieurs types de cartes à puce, pour chaque type de cartes le terminal utilisera une table de codage pour authentifier et dialo guer avec la carte. REVENDICATIONS 1) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret, un compteur de codes d'instructions illé gaux et une clé pour communiquer avec un système extérieur et en ce que l'accès aux données stockées dans le dit circuit se fait par des programmes interprétés par l'interpré teur et en ce que il ne sera pas possible d'interpréter des programmes sur le circuit après un nombre prédéfini d'erreurs rencontrées dans les codes des instructions. 2) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret et en ce que l'accès aux données stockées dans le dit circuit se fait par des programmes interprétés par l'interpréteur et en ce qu'il ne sera pas possible d'interpréter des programmes sur le circuit après un nombre prédéfinis d'erreurs rencontrées dans les codes des instructions. 3) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret . 4) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret et une clé secrète pour communiquer avec l'extérieur. 5) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions peut être défini par le concepteur d'une application et stocké dans une zone mémoire inaccessible. 6) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret et une clé secrète pour communiquer avec un système extérieur et en ce que l'accès aux données stockées dans le dit circuit se fait par l'interprétation d'au moins un programme par l'interpréteur. 7) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur qui n'interprète plus aucun programme si un nombre prédifini d'erreurs rencontrées dans les codes des instructions est atteint . 8) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret et en ce que le seul programme exécuté par le microprocesseur est l'interpréteur. 9) Méthode d'authentification de circuits à microprocesseurs caractérisé en ce qu'au moins un programme est soumis au circuit à authentifier pour tester sa capacité à exécuter un tel programme. 10) Circuit à microprocesseur sécurisé caractérisé en ce qu'il comprend un interpré teur dont le codage des instructions est secret et un compteur de codes d'instructions illé gaux.