Brevet FR2957436A1 — publié le 20110916

La présente invention concerne un système microprocesseur et particulièrement un _moyen de protection contre une utilisation frauduleuse dudit système. Dans le domaine des systèmes microprocesseur, il est connu d'utiliser au moins un microprocesseur apte à exécuter au moins un logiciel. De manière classique pour que le système soit opérable, un logiciel, sous forme d'une liste d'instructions exécutables, est stocké dans une mémoire rémanente afin de réaliser un stockage persistant, y compris lorsque le système est hors tension. Lors de l'exécution, les instructions du logiciel sont soit chargées dans une autre mémoire de travail, soit directement lues dans la mémoire rémanente, pour être successivement exécutées par le microprocesseur. Le problème que l'on rencontre est que l'ensemble du logiciel est présent en un seul et même endroit. Au stade de la conception/production du produit système microprocesseur, avant d'être chargée dans la mémoire rémanente dudit système microprocesseur, la liste d'instructions exécutables constitutive du logiciel est classiquement présente sous forme d'un ou de plusieurs fichiers informatiques. De tels fichiers, présents sur des systèmes et réseaux informatiques, peuvent aisément être copiés, et donc volés, piratés. Sachant que la partie matérielle du système microprocesseur est un produit le plus souvent standard, il est aisé de s'en procurer, parfois même auprès de plusieurs sources, même pour une personne non autorisée. Cette personne non autorisée, si elle dispose du logiciel peut aisément reconstituer le système microprocesseur. En phase d'utilisation du produit, la liste d'instructions exécutables constitutive du logiciel est classiquement chargée dans la mémoire rémanente du système microprocesseur. Cette mémoire, de manière classique pour des besoins de test et de mise au point du logiciel, est lisible, en plus du microprocesseur, par des moyens externes. Le logiciel peut par le biais d'un tel moyen de lecture être facilement copié et reproduit, y compris par une personne non autorisée. Cette personne non autorisée, si elle dispose d'un exemplaire du système microprocesseur original, peut aisément reconstituer le système microprocesseur, en reproduisant ledit logiciel sur une partie matérielle standard du système microprocesseur. L'objet de la présente invention est de séparer, dans les différentes phases de vie du produit le logiciel en une partie logicielle visible et au moins une partie logicielle cachée, afin de limiter l'accès en copie du logiciel complet et ainsi de limiter la reproduction et l'utilisation non autorisée du produit. L'invention concerne un système microprocesseur du type comprenant au moins un microprocesseur, au moins un logiciel et au moins une mémoire rémanente destinée à stocker ledit logiciel, y compris lorsque le système est hors tension, une partie de ladite mémoire étant une partie mémoire cachée de l'extérieur du système en ce qu'elle n'est lisible que par ledit microprocesseur, le logiciel comprenant une partie logicielle cachée stockée dans ladite partie mémoire cachée. Selon une autre caractéristique de l'invention, la partie logicielle cachée comprend un moyen de contrôle antivol, et le logiciel vérifie lors de son exécution la présence dudit moyen de contrôle antivol, afin de poursuivre ladite exécution. Selon une autre caractéristique de l'invention, le moyen de contrôle antivol comprend des fonctions essentielles du logiciel, la vérification de leur présence s'effectuant par leur utilisation par le logiciel. Selon une autre caractéristique de l'invention, lesdites fonctions essentielles sont choisies parmi des fonctions très peu évolutives du logiciel. D'autres caractéristiques, détails et avantages de l'invention ressortiront plus clairement de la description détaillée donnée ci-après à titre indicatif en relation avec des dessins sur lesquels : la figure 1, présente une cartographie mémoire selon l'art antérieur, - la figure 2, présente une cartographie mémoire comparable selon l'invention, Un système microprocesseur classique comprend au moins un microprocesseur, au moins un logiciel et au moins une mémoire rémanente apte à stocker ledit logiciel. Un microprocesseur s'entend ici de toute unité de traitement logique, tel un processeur, un microprocesseur, un microcontrôleur ou tout dispositif équivalent. Ledit microprocesseur est apte à exécuter un logiciel. Ledit logiciel est composé d'une liste d'instructions exécutables. De manière classique, la mémoire rémanente, par exemple de type « Flash ROM » (mémoire morte de masse à semi-conducteurs réinscriptible, « ROM » étant l'acronyme anglais pour « Read Only Memory », c'est à dire mémoire à lecture simple), est lisible par le microprocesseur. Elle est de plus aussi lisible par des moyens externes, notamment pour la mise au point et le test du logiciel. Une telle mémoire peut être écrite par le microprocesseur lui-même ou par un « claqueur » ou « brûleur » qui permet d'inscrire un logiciel dans ladite mémoire. Une telle mémoire peut être physiquement incluse dans le composant (circuit intégré) du microprocesseur, selon un mode de réalisation. Elle peut aussi se présenter sous forme d'un composant externe au microprocesseur, mais typiquement disposé sur un même circuit imprimé que ledit microprocesseur. Il est possible de disposer une partie de ladite mémoire rémanente de telle manière qu'elle ne soit lisible que par le microprocesseur et non par les moyens extérieurs classiques de mise au point et test. On dénomme par la suite cette partie de mémoire : partie mémoire cachée. Elle présente la caractéristique de ne pas être lisible de l'extérieur du système, et donc de ne pas être copiable. Elle n'est pas visible de l'extérieur et notamment pas depuis le port de traçage, et n'est pas exécutable pas à pas par un débuggeur externe. Ces caractéristiques, bien que limitatives pour la mise au point et le test d'un logiciel, s'avèrent fort avantageuses en ce qui concerne le but de l'invention : protéger une partie du logiciel en le rendant moins accessible et en le séparant du reste du logiciel. Le but de l'invention est atteint en séparant du reste du logiciel une partie logicielle choisie et en la cachant. Pour cela, cette partie logicielle choisie est, selon l'invention, stockée dans ladite partie mémoire cachée. Elle est dénommée dans la suite : partie logicielle cachée. Selon un mode de réalisation, la partie logicielle cachée peut comprendre un moyen de contrôle antivol. Dans ce cas, le logiciel vérifie lors de son exécution la présence dudit moyen de contrôle antivol, afin de poursuivre ladite exécution. Ainsi, si le moyen de contrôle antivol est absent, et/ou ne peut être trouvé par le logiciel, le logiciel arrête son exécution. Le test de présence dudit moyen de contrôle antivol peut être réalisé au début de l'exécution du logiciel et/ou de manière régulière à tout moment durant l'exécution. Le moyen de contrôle antivol peut être réduit à une simple présence de la partie mémoire cachée, détectable par une lecture à une adresse dans la partie mémoire cachée. Une telle lecture si elle réussie atteste ainsi de la présence de la partie de mémoire cachée. Le moyen de contrôle antivol peut encore comprendre un simple code inscrit dans la partie mémoire cachée. Ce code peut ensuite être lu par le logiciel et vérifié dans son authenticité par tout mécanisme de certification. Ce code peut encore servir à apparier un système microprocesseur avec par exemple un véhicule, un autre système microprocesseur ou encore un autre moyen de contrôle. Le moyen de contrôle antivol peut encore avantageusement comprendre un logiciel produisant un code ou une autorisation nécessaire à l'exécution du logiciel. Selon un mode de réalisation préférentiel, le moyen de contrôle antivol comprend une partie utile du logiciel comprenant des fonctions ou bibliothèques de fonction essentielles de ce dernier. Ainsi, la vérification de présence est effectuée par le logiciel lorsqu'il tente d'utiliser ces fonctions essentielles. De plus, l'absence de l'une de ces fonctions, par exemple causée par l'utilisation, typiquement frauduleuse, d'un système microprocesseur standard ne comprenant pas de partie mémoire cachée ou comportant une telle partie mémoire cachée mais sans la partie logicielle cachée, rend le logiciel incomplet et ainsi inopérable, et contribue à renforcer la protection. L'écriture d'une partie logicielle cachée dans la partie mémoire cachée permet ainsi avantageusement de différentier, en le signant, un système microprocesseur « amélioré » par ladite écriture, d'un système microprocesseur « standard » tel qu'il sort de chaîne de fabrication, et dont la partie mémoire cachée est restée vierge. L'écriture d'une partie logicielle cachée dans la partie mémoire cachée nécessite des outils spécifiques et ne peut être réalisée que par le fabricant du circuit intégré comprenant la mémoire. Ceci limite l'accès de ce moyen de protection et réduit ainsi la possibilité de reproduction non autorisée du système microprocesseur. Le contenu de ce qui est destiné à être ainsi caché devient plus difficilement modifiable, en ce qu'il participe à ce qui s'apparente à un cycle de fabrication matériel de type circuit intégré plus qu'à un cycle de fabrication logiciel. Selon un mode de réalisation avantageux, le code caché ou la partie logicielle cachée est défini et intégré au dossier de conception ou de définition du système microprocesseur sous forme par exemple de microcode dans le dossier VHDL (VHDL étant l'abréviation anglaise de « VHSICHDL », c'est à dire « Very High Speed Integrated Circuit Hardware Description Language ». Le VHDL est un langage de description matériel destiné à représenter le comportement ainsi que l'architecture d'un système électronique numérique) afférent au microprocesseur ou à la mémoire. Ainsi, dans les différents dossiers, est opérée une séparation du logiciel : le logiciel caché est défini avec le dossier matériel tandis que le logiciel visible est défini avec le dossier logiciel. Ces deux dossiers suivant des circuits différents, il devient plus difficile, pour une personne non autorisée, d'entrer en possession et de copier la totalité du logiciel. Dans le cas où le moyen de contrôle antivol comprend une partie du logiciel comprenant des fonctions essentielles il est intéressant de bien choisir quelles partie du logiciel sont cachées ou non. II a été vu précédemment que l'écriture d'une partie logicielle cachée dans la partie mémoire cachée nécessite des outils particuliers et ne peut être réalisée que par le fabricant. Une évolution éventuelle du logiciel contenu dans cette partie logicielle cachée devient ainsi presque aussi difficile qu'une évolution du circuit intégré contenant la mémoire et/ou le processeur. Il a été vu aussi que la partie logicielle cachée, puisque stockée dans la partie mémoire cachée est de ce fait non lisible, non éditable et non exécutable pas à pas. Aussi pour ces raisons, la partie logicielle cachée extraite du logiciel et comprenant les fonctions essentielles est choisie pour ne contenir que des fonctions très peu évolutives du logiciel. De plus, afin de limiter le nombre de configurations différentes de système microprocesseur « amélioré », ces fonctions cachées sont de préférence choisies parmi des fonctions génériques utilisées par de nombreuses applications. Les fonctions amenées à varier d'une utilisation à une autre du système microprocesseur, ou nécessitant une modification, par exemple en phase de réglage/mise au point, sont au contraire, de préférence stockées dans une partie non cachée de la mémoire. Ainsi elles bénéficient de la souplesse évolutive associée au logiciel. Afin d'illustrer plus en détail l'invention, il va maintenant être décrit, un 35 cas particulier d'application de l'invention à un système microprocesseur tel qu'utilisé de manière classique pour des applications automobiles. La figure 1 présente une cartographie 1, selon l'art antérieur, de l'organisation de la mémoire d'un tel système microprocesseur. La cartographie complète 1 se décompose en différentes zones. Ainsi une zone 2 ou CALIB comprend les parties du logiciel relatives à la calibration et à la mise au point. Une zone 3 ou AGGR, pour « aggregate » en anglais, comprends plus particulièrement les objets ou fonctions spécifiques d'un système microprocesseur donné, encore dénommé applicatif. Une zone 4 ou HAL, pour « Hardware Abstraction Layer » en anglais, comprend une couche logicielle d'interfaces assurant une totale indépendance relativement au matériel sous-jacent. Une zone 5 ou BIOS comprend des bibliothèques 6a-6s, génériquement désignées 6, de fonctions utiles à l'applicatif. Enfin une zone 8 ou BOOT contient les fonctions du logiciel lancées en premier lors du démarrage du logiciel et qui permettent son initialisation et sa mise en route. La figure 2 présente une cartographie comparable 11, selon l'invention, de l'organisation de la mémoire d'un tel système microprocesseur. On retrouve dans cette cartographie 11, des zones identiques. Tous les éléments identiques sont repérés par le même signe de référence, augmenté de 10. Ainsi, la cartographie complète 11 se décompose en différentes zones. Une zone 12 ou CALIB comprend les parties du logiciel relatives à la calibration et à la mise au point. Une zone 13 ou AGGR comprends plus particulièrement les objets ou fonctions spécifiques de l'applicatif. Une zone 14 ou HAL comprend une couche logicielle d'interfaces assurant une totale indépendance relativement au matériel sous-jacent. Une zone 15 ou BIOS comprend des bibliothèques, génériquement désignées 16, de fonctions utiles à l'applicatif. Enfin une zone 18 ou BOOT contient les parties du logiciel lancées en premier lors du démarrage du logiciel et qui permettent son initialisation et sa mise en route. Relativement à l'art antérieur, la mémoire comprends en plus une zone 30 cachée 17. Il est par exemple choisi de cacher dans cette zone cachée 17 une partie des bibliothèques 16. Les bibliothèques 16a-16e (INJ, IGN, CRK, CAM, KNK) sont jugées dépendantes de l'applicatif ou encore destinées à évoluer et donc préférentiellement placées dans une zone visible 15 de la cartographie 35 mémoire 11. Au contraire il est estimé que les bibliothèques 16f-16s (DIP, DOP, ADC, DCM, PIM, PWM, ASY, CAN, MCC, SPI, RAM, INT, TIM, SIG) sont suffisamment génériques et peu évolutives pour pouvoir être cachées dans la partie mémoire cachée 17. Ces bibliothèques 16f-16s constituent ici la partie logicielle cachée. Les fonctions qu'elles contiennent sont cependant indispensables à l'applicatif, et leur absence, du fait, par exemple, d'une utilisation d'un microprocesseur « standard » sur lequel serait copié le seul logiciel visible et copiable, rend l'exécution du logiciel impossible. REVENDICATIONS1. Système microprocesseur du type comprenant au moins un microprocesseur, au moins un logiciel et au moins une mémoire rémanente destinée à stocker ledit logiciel, y compris lorsque le système est hors tension, une partie de ladite mémoire étant une partie mémoire cachée (17) de l'extérieur du système en ce qu'elle n'est lisible que par ledit microprocesseur, caractérisé en ce que le logiciel comprend une partie logicielle cachée (16f-16s) stockée dans ladite partie mémoire cachée (17). 2. Système selon la revendication 1, où la partie logicielle cachée (16f-16s) comprend un moyen de contrôle antivol, et où le logiciel vérifie lors de son exécution la présence dudit moyen de contrôle antivol, afin de poursuivre ladite exécution. 3. Système selon la revendication 2, où le moyen de contrôle antivol comprend des fonctions essentielles du logiciel, la vérification de leur présence s'effectuant par leur utilisation par le logiciel. 4. Système selon la revendication 3, où lesdites fonctions essentielles sont choisies parmi des fonctions très peu évolutives du logiciel.