Brevet FR2836735A1 — publié le 20030905

CIRCUIT INTEGRE ET PROCEDE DE GESTION DE LA MEMOIRE PROGRAMME D'UN TEL CIRCUIT INTEGRE DESCRIPTION DOMAINE TECHNIQUE L'invention concerne un circuit intégré, par exemple un circuit pour carte à puce, et un procédé de gestion de la mémoire programme d'un tel circuit intégré. ETAT DE LA TECHNIQUE ANTERIEURE Lors de la fabrication d'un circuit intégré, par exemple un circuit intégré spécifique (ASIC ou 11 application- specific integrated circuit") ou un circuit pour carte à puce, le concepteur fournit au fondeur de silicium, fabricant de tels circuits, une version du code exécutable pour qu'il le grave sur celui-ci. La remise d'un tel code logiciel à un fondeur de silicium ne permet pas de garantir toute la confidentialité sur ce code. En effet, ce code est transmis en clair au fondeur afin que ce dernier puisse procéder à toutes les opérations concernant le masquage du composant proprement dit. Le fondeur a donc accès à ce code directement. Si ce code comporte des clés ou des algorithmes, il peut en avoir connaissance aisément. Or, si le code est dérobé ou si une personne mal intentionnée dérobe ce code, toute la sécurité de non-divulgation est anéantie. Il n'existe pas aujourd'hui de mécanisme de chiffrement du code logiciel directement paramétrable par le client et hors du contrôle du fondeur. De plus, dans le domaine de la télévision payante, qui est un domaine d'utilisation privilégiée de l'invention, les sanctions pour un piratage de ce type sont beaucoup moins graves que dans le domaine bancaire, voire inexistantes. L'objectif de l'invention est de réduire le risque défini ci-dessus en fournissant au fondeur un code chiffré que l'unité centrale du circuit intégré ne soit pas capable de déchiffrer. EXPOSÉ DE L'INVENTION La présente invention propose un circuit intégré, par exemple un circuit pour carte à puce, comprenant une mémoire programme, une mémoire donnée, et une unité centrale, caractérisé en ce que la mémoire programme contient une première partie non chiffrée d'un code exécutable, et au moins une seconde partie chiffrée de ce code, et en ce que ledit circuit comprend, en outre, un composant configurable, configuré pour déchiffrer au vol ladite seconde partie chiffrée. Le circuit configurable peut être un composant de type FPGA ("Field programmable gate arrays") ou de type ASIC programmable. La mémoire programme peut être une mémoire de type ROM ("Read only memory"), ou de type Flash. La mémoire données peut être une mémoire de type E PROM ("Electrically Erasable ROM"ou ROM effaçable électriquement), de type Flash ou de type FeRAM ("Ferroelectric RAM"ou mémoire à accès aléatoire ferroélectrique). L'invention concerne, également, un procédé de gestion de la mémoire programme d'un circuit intégré, comprenant en outre une mémoire données et une unité centrale, caractérisé en ce que, la mémoire programme contenant une première partie non chiffrée d'un code exécutable, et au moins une seconde partie chiffrée de ce code, le circuit comprenant un composant configurable, ledit procédé comprend les étapes suivantes : - l'unité centrale accède à la première partie, non chiffrée, du code en mémoire programme, - l'unité centrale enclenche un processus de chargement des données de configuration, préalablement chargées en mémoire données, dans le composant configurable, - l'unité centrale exécute la seconde partie, chiffrée, du code chargé en mémoire programme, celle-ci transitant par le composant configurable et y étant déchiffrée au vol. On peut, de plus, utiliser un mécanisme d'interruption qui permet de réaliser le chargement du composant configurable lorsque l'unité centrale adresse au moins une zone de la partie de code chiffré de la mémoire programme. On peut également utiliser plusieurs blocs dans la partie chiffrée de la mémoire programme, chaque bloc correspondant à un algorithme de chiffrement différent. Le fondeur de silicium ne dispose donc plus de toute la connaissance du code logiciel du client. Il est ainsi dégagé de certaines responsabilités qui découlaient de cette connaissance. BRÈVE DESCRIPTION DES DESSINS La figure unique illustre un exemple de réalisation du circuit intégré de l'invention. EXPOSÉ DÉTAILLÉ DE MODES DE RÉALISATION PARTICULIERS L'invention consiste à introduire dans un circuit intégré, par exemple un circuit pour carte à puce, un composant (matériel) configurable par l'utilisateur. Ce composant est assimilable à un composant FPGA, composant matériel configurable par logiciel. La figure illustre un exemple de réalisation d'un tel circuit intégré selon l'invention. Celui-ci comprend : - une unité centrale 10, - une mémoire programme 11, par exemple une mémoire de type ROM ou de type Flash, dans laquelle est chargée une première partie non chiffrée du code exécutable, référencée 12, et une seconde partie chiffrée de ce code, référencée 13, - une mémoire données 14, par exemple de type E2PROM, Flash, ou FeRAM, - ce composant configurable 15, de type FPGA, ou ASIC programmable, pour déchiffrer la partie chiffrée du code, - un bus adresse 16, - des bus de données 17 et 18. Dans la mémoire données 14 sont représentées des données 20 de configuration du composant configurable 15, qui correspondent à un fichier de programmation et/ou à une clé de déchiffrement, ou les deux. Le composant configurable 15 a pour objet de laisser passer les données correspondant aux adresses de la partie non chiffrée 12 de la mémoire programme 11, qui permet d'une part le chargement des données de configuration 20 en mémoire de données 14, et d'autre part le transfert de ces données 20 vers le composant configurable 15. La partie chiffrée du code 13 est alors uniquement accessible si ces données 20 sont valides et permettent le bon déchiffrement de la partie chiffrée 13. Le code exécutable fourni au fondeur comporte donc deux parties distinctes : - une partie de code non chiffrée directement exécutable par l'unité centrale 10 du circuit (sans modification), - une partie de code chiffrée, qui n'est exécutable par cette unité centrale 10 qu'après son passage dans le composant configurable 15. Ce code est chargé en mémoire programme 11 du circuit, par le développeur. La première partie 12 a pour fonction de permettre de charger des données en mémoire données 14, de réaliser le chargement du logiciel de configuration du composant configurable 15, et de permettre alors au composant configurable 15 de déchiffrer la seconde partie chiffrée de code 13 à la volée, par exemple par blocs. Le fondeur de silicium du circuit n'a ainsi plus connaissance de tout le code. Le procédé de gestion de la mémoire programme 11 d'un tel circuit intégré, conformément à l'invention, comporte donc les étapes suivantes : - l'unité centrale 10 du circuit accède à la première partie 12, non chiffrée du code en mémoire programme 11, - l'unité centrale 10 enclenche le processus de chargement des données de configuration 20, préalablement chargées en mémoire données 14 dans le cycle de production, dans le composant configurable 15, - l'unité centrale 10 exécute la seconde partie, chiffrée, du code 13 chargée en mémoire programme 11, celle-ci transitant par le composant configurable 15 et y étant déchiffrée au vol. Le composant configurable 15 peut être : - un composant de type FPGA qui peut être reconfiguré au minimum à chaque réinitialisation, - un composant utilisant une technologie "anti-fusible"qui ne peut être chargé qu'une fois. Ce composant configurable 15 peut être constitué d'éléments XOR sur le bus de données, ou bien réalisé par une fonction de chiffrement plus complexe, aisément réalisable par un homme du métier. Dans une variante de réalisation, on utilise un mécanisme d'interruption pour réaliser le chargement du composant configurable 15, par exemple lorsque l'unité centrale 10 du circuit adresse une ou plusieurs zone de la partie de code chiffrée 13 de la mémoire 11. Dans une autre variante de réalisation on utilise plusieurs blocs dans la partie chiffrée 13 de la mémoire programme 11, chaque bloc correspondant à un algorithme de chiffrement différent. La sécurité intrinsèque du circuit a ainsi été augmentée, notamment vis-à-vis du fondeur. Vis-à- vis d'un pirate, le code ne peut être obtenu qu'avec beaucoup plus de difficulté : celui-ci doit en effet analyser la partie logique de chiffrement de ce circuit. REVENDICATIONS 1. Circuit intégré comprenant une mémoire programme (11), une mémoire donnée (14), et une unité centrale (10), caractérisé en ce en ce que la mémoire programme (11) contient une première partie non chiffrée (12) d'un code exécutable et au moins une seconde partie chiffrée (13) de ce code, et en ce que ledit circuit comprend, en outre, un composant configurable (15) configuré pour déchiffrer au vol ladite seconde partie chiffrée. 2. Circuit selon la revendication 1, dans lequel le circuit configurable (15) est un composant de type FPGA ou de type ASIC programmable. 3. Circuit selon la revendication 1, dans lequel la mémoire programme (11) est une mémoire de type ROM, ou de type Flash. 4. Circuit selon la revendication 1, dans lequel la mémoire données (14) est une mémoire de type E2PROM, de type Flash ou de type FeRAM. 5. Utilisation du circuit selon l'une quelconque des revendications précédentes dans une carte à puce. 6. Procédé de gestion de la mémoire programme (11) d'un circuit intégré comprenant en outre une mémoire données (14) et une unité centrale (10), caractérisé en ce que, cette mémoire programme (11) contenant une première partie non chiffrée d'un code exécutable, et au moins une seconde partie chiffrée de ce code, le circuit comprenant un composant configurable (15), le procédé comprend les étapes suivantes : - l'unité centrale (10) accède à la partie non chiffrée (12) du code en mémoire programme (11), - l'unité centrale enclenche un processus de chargement des données de configuration (20), préalablement chargées en mémoire données (14), dans le composant configurable (15), - l'unité centrale (10) exécute la partie chiffrée (13) du code en mémoire programme (14), celleci transitant par le composant configurable (15) et y étant déchiffrée au vol. 7. Procédé selon la revendication 6, dans lequel un mécanisme d'interruption permet de réaliser le chargement du composant configurable (15) lorsque l'unité centrale (10) adresse au moins une zone de la partie de code chiffré (13) de la mémoire programme (11). 8. Procédé selon la revendication 6, dans lequel on utilise plusieurs blocs dans la partie chiffrée (13) de la mémoire programme (11), chaque bloc correspondant à un algorithme de chiffrement différent.