Brevet FR2673016A1 — publié le 19920821

PROCEDE DE PROTECTION D'UN CIRCUIT INTEGRE CONTRE LES UTILISATIONS FRAUDULEUSES La présente invention se rapporte aux procédés qui permettent de protéger les circuits intégrés contre les utilisations frauduleuses par des personnes non autorisées. Elle s'applique notamment aux circuits intégrés destinés à être utilisés dans les "cartes à puces", ainsi qu'aux circuits spécialisés connus sous le nom d'ASIC qui représentent souvent l'essentiel des performances de l'équipement auquel ils sont intégrés. Tous ces circuits comportent au moins une mémoire et un nombre plus ou moins grand de circuits logiques pouvant éventuellement aller jusqu'à constituer un microprocesseur. Il est de pratique courante pour les fabricants de cartes à puces de tester le circuit puis de le prépersonnaliser en inscrivant dans sa mémoire un certain nombre de données qui définissent plus précisément ses fonctions. Pour éviter les usages frauduleux, en particulier en cas de vol pendant le transport entre le fabricant et le client, on introduit dans ces données un code confidentiel dissimulé parmi les autres données. A la réception de la carte le client, qui a eu connaissance du code confidentiel par une autre voie, valide celui-ci en introduisant, selon une procédure déterminée, le code dans la carte. Il arrive fréquemment que le fabricant de la carte ne soit pas celui du circuit, et que ces deux industriels soient localisés à des endroits très éloignes l'un de l'autre. On est donc amené à transférer un grand nombre de circuits sous un petit volume, puisque ceux-ci ne sont pas montés dans les cartes. Le montage des circuits dans les cartes est délicat mais ne présente pas de difficultés excessives et la personnalisation de la carte est très simple car les données inscrites dans la mémoire ne sont pas particulièrement confidentielles, puisqu'elles sont la plupart du temps lisibles dans les cartes régulièrement mises en circulation. Comme pour des besoins de test, avant montage et personnalisation, toutes les cellules de la mémoire doivent être accessibles en lecture/écriture, il suffit donc d'y inscrire ces données. Le risque est alors grand de voir un voleur s'emparer des circuits et effectuer ces opérations pour utiliser les cartes à son profit, notamment pour récupérer l'argent auquel elles donnent accès dans les utilisations monétiques. Ce risque est d'autant plus grand qu'un seul paquet de circuits peut représenter une contre-valeur très importante. Il faut donc prendre pour ces transports des précautions considérables, qui sont sources de coûts et de délais importants. Pour protéger les circuits contre de tels risques, l'invention propose un procédé de protection d'un circuit intégré contre les utilisations frauduleuses, ce circuit intégré comprenant une mémoire et des circuits logiques de gestion de cette mémoire, principalement caractérisé en ce que - à la fabrication du circuit intégré on détermine physiquement, à partir de la géométrie d'au moins l'un des masques de fabrication du circuit, le contenu d'au moins une adresse secrète de la mémoire, pour que ce contenu représente un code secret qui permet de verrouiller au moins l'écriture ou au moins la lecture d'au moins une partie de cette mémoire ; et - pour déverrouiller ensuite la mémoire, on provoque la lecture du code secret contenu dans l'adresse secrète et on présente un code identique aux circuits logiques de gestion pour les comparer. D'autres particularités et avantages de l'invention apparaîtront clairement dans la description suivante, faite en regard des figures annexées qui représentent - la figure 1, un schéma partiel et didactique d'un circuit intégré muni de moyens de protection selon l'invention ; et - la figure 2, un schéma également partiel et didactique de la mémoire et d'un registre associé d'un circuit selon l'invention. Le schéma de la figure 1 a été fait pour expliquer le procédé selon l'invention et est sans rapport avec la réalité physique des organes composant le circuit intégré muni des moyens de protection permettant de mettre en oeuvre le procédé selon l'invention. On n'a pas non plus représenté les organes utilisés dans le fonctionnement normal du circuit et connus en eux-mêmes. Ce circuit intégré comprend donc une mémoire 101 dans laquelle seront enregistrés un programme et des données nécessaires pour son usage normal, et des organes non représentés qui permettent l'exploitation de ces données et le déroulement du programme. Le contenu des mots de la mémoire est écrit à partir d'une entrée écriture et il est présenté après lecture sur une sortie lecture. La sélection de l'adresse des mots écrits et lus est faite par une entrée adresse. Ces entrées et sorties transitent bien entendu par les organes d'exploitation non représentés. Lors de la fabrication du circuit intégré protégé selon l'invention, on a inscrit dans au moins un mot déterminé de la mémoire, dont l'adresse secrète fait partie de la protection, un code secret déterminé. Cette inscription se fait par des moyens physiques lors de l'implantation du circuit, par exemple en configurant de manière adéquate au moins l'un des masques de fabrication. Ce mot 102 est commun à tout un lot de fabrication, ce lot pouvant être par exemple un ensemble de tranches de semi-conducteur ou, pour des applications de grande sécurité, seulement tous les circuits d'une plaquette unique. La longueur du code est variable, là aussi selon le degré de sécurité souhaité, et si cette longueur dépasse celle d'un mot unique on utilise plusieurs mots, éventuellement disjoints dans la mémoire, c'est-à-dire localisés à des adresses non contiguës. A titre de variante, et toujours pour augmenter la sécurité, on peut utiliser des codes différents pour les circuits selon leur localisation physique sur la tranche qui forme le substrat commun où ils sont implantés. Ainsi le voleur qui aura pu se procurer un code par un moyen ou un autre ne connaitra pas les autres. Lors de la mise sous tension du circuit, la logique de démarrage non représentée positionne une bascule 103 dont la sortie est reliée aux circuits logiques de test 104 et à deux portes 105 et 106, qui bloquent respectivement l'entrée écriture et la sortie lecture, c'est-à-dire l'accès à la mémoire pour l'utilisateur à ce moment. Ainsi donc dans cet état le circuit ne peut pas être testé, rien ne peut être inscrit dans la mémoire, et le contenu de la mémoire n'est pas disponible sur les sorties du circuit. A titre de variante on pourra, pour certaines applications, prévoir une possibilité limitée d'écriture dans la mémoire pour valider le code secret selon une procédure connue. Par contre il est tout à fait possible de lire ce contenu en adressant les mots par l'entrée adresse qui reste libre, sauf pour d'éventuelles zones protégées. Les données qui sont ainsi lues, et qui sont bloquées en sortie par la porte 106, sont appliquées à un comparateur 107 qui reçoit par ailleurs sur une entrée code le code à reconnaître pour débloquer l'accès au circuit. Pour effectuer une tentative frauduleuse de déblocage du circuit il faudrait donc lire la totalité de la mémoire, et pour chacun des mots ainsi lus essayer toutes les combinaisons de codes possibles. Dès que le code est un peu long on arrive à une durée qui décourage toutes les tentatives. Le fabricant en possession du bon code par contre, lira directement la bonne adresse et entrera dans le circuit le bon code. A ce moment le comparateur reconnaît l'identité du code extérieur et du contenu du mot lu dans la mémoire et il adresse un signal "oui" à la bascule 103. Celle-ci change alors d'état, libère la logique de test et ouvre les portes 105 et 106. On peut alors procéder au test du circuit et à sa prépersonnalisation. A l'issue de cette étape, la mémoire comporte donc une zone dans laquelle sont inscrites les données de prépersonnalisation. Pour éviter que le circuit ne se retrouve bloqué par la bascule 103 à la prochaine mise sous tension, celle-ci, lorsqu'elle bascule sous la commande du comparateur 107, vient positionner de manière définitive un circuit 108 qui rétroagit sur la bascule pour l'obliger à rester dans la bonne position. Ce circuit est par exemple une simple cellule de mémoire EPROM. Il peut être localisé dans des endroits divers et par exemple faire partie de la logique de démarrage, ou même être directement intégré dans les circuits qui constituent la bascule. De même il est préférable de neutraliser le contenu du mot 102 pour d'une part avoir une mémoire sans trou et d'autre part éviter qu'une personne mal intentionnée ne vienne lire le code secret qu'il contient. On pourrait faire en sorte que ce mot soit noyé dans les données de prépersonnalisation, mais cette solution n'est pas entièrement satisfaisante. Une meilleure solution consiste à configurer la logique de commande du circuit intégré de telle manière que le mot 102 disparaisse de la liste des mots adressables tout en lui en substituant un autre, le dernier de la mémoire par exemple. La configuration de cette logique se fera alors soit par commande à partir du circuit de blocage 108, ou de la sortie de la bascule 103 elle même bloquée par 108, soit par des circuits internes à la logique, analogues au circuit 108 et bloqués eux mêmes lors de la reconnaissance du code secret. Outre des cellules EPROM, on peut aussi utiliser des fusibles. La solution préférée consiste à utiliser, comme représenté sur la figure 2 là aussi de manière purement explicative, un registre séparé de la mémoire principale pour enregistrer le code secret. La mémoire 201 est identique à la mémoire 101, sauf que tous ses mots sont vierges. Le code secret est contenu dans un registre distinct 202 (ou éventuellement une mémoire distincte) dont l'adresse est la même que celle du mot 102 dans la mémoire 101. L'adressage de ce registre se fait donc en même temps que celui du mot correspondant dans la mémoire 201, représenté en pointillés sur la figure. Le contenu du registre 202 est donc lu lors de l'étape de déblocage du circuit intégré et son contenu est transféré vers le comparateur 107 et la porte 106 à travers une porte ET 209 et une porte OU 210. Le contenu du mot de même adresse de la mémoire 201 est aussi appliqué à la porte OU 210, ce qui est à ce stade sans importance puisque ce contenu est nul. D'autres dispositions, donnant un résultat équivalent, permettraient de ne pas lire ce mot. Si par ailleurs le bon code a été appliqué sur le comparateur 107, la séquence décrite plus haut se déroule et la bascule 103, dont la sortie est aussi appliquée à une entrée de la porte 209, vient bloquer le passage du contenu du registre 202 vers la porte 210, qui ne délivre plus donc que le contenu de la mémoire. Comme la bascule reste ultérieurement bloquée dans la même position, on ne lira donc plus que la mémoire et jamais plus le registre 202. La suite du fonctionnement (test et prépersonnalisation) est identique à ce qui a été décrit auparavant. Là aussi on peut utiliser tout autre mode de réalisation respectant les règles logiques décrites ci-dessus, par exemple un fusible situé sur la sortie du registre 202, ou sur la commande de lecture de celui-ci, ou un circuit d'aiguillage à la place de la porte 210. La protection principale réside dans l'interdiction de l'écriture, puis secondairement dans celle de la sortie de la lecture, et enfin dans le blocage des fonctions de test. Lorsque les besoins de sécurité sont plus réduits, on peut se limiter à cette première interdiction, ou à une combinaison de la première et de la seconde. Il est enfin clair que l'invention n'est pas limitée aux circuits intégrés destinés aux cartes à puces. Elle s'étend aussi par exemple aux circuits de type ASIC dont l'usage est réservé à l'utilisateur qui en a défini les spécifications REVENDICATIONS 1. Procédé de protection d'un circuit intégré contre les utilisations frauduleuses, ce circuit intégré comprenant une mémoire (201) et des circuits logiques de gestion de cette mémoire, caractérisé en ce que - à la fabrication du circuit intégré on détermine physiquement, à partir de la géométrie d'au moins l'un des masques de fabrication du circuit, le contenu d'au moins une adresse secrète (102) de la mémoire, pour que ce contenu représente un code secret qui permet de verrouiller (105) au moins l'écriture ou au moins la lecture d'au moins une partie de cette mémoire ; et - pour déverrouiller ensuite la mémoire, on provoque la lecture du code secret contenu dans l'adresse secrète et on présente un code identique aux circuits logiques de gestion (103, 107) pour les comparer. 2. Procédé selon la revendication 1, caractérisé en ce que le code secret permet en outre de verrouiller la sortie (106) hors du circuit intégré des codes lus dans la mémoire. 3. Procédé selon l'une quelconque des revendications 1 et 2, caractérisé en ce que le code secret permet en outre de verrouiller les circuits de test interne (104) contenus dans les circuits de gestion. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que le code secret est réparti dans plusieurs adresses secrètes (102) distinctes. 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce que le code secret est inscrit dans un registre (202) distinct de la mémoire mais ayant une adresse de lecture identique à une adresse de la mémoire, et que la lecture de ce registre est inhibée après l'opération de déverrouillage. 6. Procédé selon l'une quelconque des revendications 1 à 5, caractérisé en ce que l'opération de déverrouillage est rendue irréversible (108). 3. Procédé selon la revendication 6, caractérisé en ce que pour rendre le déverrouillage irréversible (108) on utilise des fusibles internes au circuit intégré. 8. Procédé selon l'une quelconque des revendications 1 à 7, caractérisé en ce que, chaque circuit intégré faisant partie d'un ensemble de circuits intégrés fabriqués simultanément sur une même tranche de matériau semi-conducteur, le code secret (102) de chacun de ces circuits intégrés est fonction de sa localisation physique sur la tranche. 9. Procédé selon l'une quelconque des revendications 1 à 8, caractérisé en ce que le circuit intégré est du type ASIC.