FR 2667714 A1 19920410 FR 9012439 A 19901009 PROCEDE POUR REPARTIR LA MEMOIRE D'UN CIRCUIT INTEGRE ENTRE PLUSIEURS APPLICATIONS. La présente invention se rapporte aux procédés qui permettent de répartir le contenu de la mémoire d'un circuit intégré entre plusieurs applications, elles-mêmes éventuellement affectées à des utilisateurs différent. Elle s'applique plus particulièrement aux circuits intégrés destinés à être montés dans des cartes à mémoire dites cartes à puce". Elle est particulièrement utile pour les circuits intégrés qui ne comportent pas de microprocesseur, mais seulement quelques circuits logiques qui permettent d'exploiter le contenu de la mémoire. Il est connu d'interdire l'accès à la mémoire, et en fait l'utilisation, d'un circuit intégré, en inscrivant dans cette mémoire, à une adresse déterminée, un code secret. Tant que l'utilisateur n'a pas présenté ce code secret à l'entrée du circuit, celui-ci reste bloqué, tout au moins partiellement. On souhaite par ailleurs pouvoir utiliser un même circuit dans différentes applications, par exemple pour une carte bancaire et téléphonique. Il est alors utile de protéger séparément les accès à ces utilisations, pour éviter par exemple que l'usage téléphonique ne donne accès à l'usage bancaire. Lorsque le circuit intégré est muni d'un microprocesseur, on peut facilement concevoir une solution par logiciel à ce problème. Lorsque par contre il n'est pas muni d'un microprocesseur, il faut trouver une solution simple pour ne pas augmenter la complexité des circuits logiques d'exploitation de la mémoire, au risque d'aboutir à un circuit aussi complexe, mais moins souple, que celui comportant un microprocesseur. Pour sauvegarder cette simplicité, l'invention propose un procédé pour répartir la mémoire d'un circuit intégré entre plusieurs applications, caractérisé en ce que l'on divise la mémoire en plusieurs zones correspondant chacune à une application, et que l'on associe à chaque zone un code destiné à être présenté au circuit par l'utilisateur pour autoriser quand il est reconnu l'accès à la zone à laquelle il est associé. En outre, l'invention s'applique aussi aux circuits intégrés munis d'un microprocesseur en implantant dans le logiciel le procédé de l'invention, ce qui donne à la partie de logiciel correspondante une taille réduite et une efficacité remarquable. 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, une représentation schématique du déroulement du procédé selon l'invention - la figure 2, la structure d'un code permettant l'accès à une zone ; et - la figure 3, un schéma partiel d'un circuit intégré selon l'invention. Selon l'invention, on attribue à chaque application implantée dans la mémoire du circuit un code d'accès, qui peut être un code secret réservé à l'utilisateur autorisé, qui ouvre l'accès à une zone particulière de la mémoire où réside l'application correspondante. Ainsi, comme représenté sur la figure 1, l'utilisateur, qui peut être l'industriel chargé de développer une application particulière, ou le particulier utilisateur final de la carte à puce contenant le circuit intégré, commence dans une étape 101 par entrer un code dans le circuit. Ce code est décodé dans une étape 102 pour obtenir l'autorisation d'accès à l'une des zones de la mémoire 103, et à partir de ce moment l'utilisateur est libre d'utiliser le contenu de cette zone, soit pour y implanter l'utilisation qu'il a développée, soit pour faire fonctionner celle-ci. L'accès des autres zones est, dans les cas les plus simples et les plus courants, interdit, mais il est éventuellement possible d'autoriser un accès partiel, par exemple pour utiliser un sous-programme contenu dans une autre application. Un perfectionnement intéressant consiste à organiser la logique du circuit, ou le logiciel du microprocesseur, pour que les adresses de début de zone, et les suivantes jusqu'à la fin si elles sont de longueurs identiques, soient les mêmes, vues de l'utilisateur. Bien entendu les adresses physiques seront différentes, mais cela ne se verra pas du côté utilisateur, qui utilisera en fait l'équivalent invisible pour lui d'un adressage relatif. Outre la simplification du travail du développeur de l'application, on augmente la sécurité en empêchant d'accéder à des adresses interdites par une voie détournée, éventuellement possible suite à un bogue de programmation ou de spécification. Si la reconnaissance d'un code particulier et la sélection de la zone mémoire correspondante se font aisément avec un microprocesseur, ces actions nécessitent dans le cas d'une logique câblée un matériel relativement lourd en comparaison de celui strictement nécessaire à la gestion de la mémoire en l'absence de microprocesseur. Pour résoudre ce problème, l'invention propose d'utiliser un code formé de 2 morceaux, comme représenté en figure 2. Ce code comportera donc une première partie 201, formée de x bits, désignant le numéro de zone utilisable, et une deuxième partie 202, formée de y bits et comportant le code secret (ou confidentiel) nécessaire pour accéder à la zone désignée par le code. La longueur totale du code à présenter par l'utilisateur sera donc de x + y bits et cette longueur sera de préférence égale à celle d'un mot de la mémoire, pour faciliter la réalisation des circuits logiques du circuit intégré. Le numéro de zone sera de préférence placé en tête du code, en se référant au sens par lequel l'utilisateur l'introduit dans le circuit en mode série, ce qui est le cas le plus fréquent, notamment dans les cartes à puce en raison du faible nombre de contacts disponibles sur le connecteur d'entréejsortie. De cette manière, dès que le code entre dans le circuit, les x premiers bit sont lus en premier et indiquent quel est le code secret interne mémorisé dans le circuit qu'il faut comparer au code secret externe formé par les y bits de la deuxième partie du code introduit par l'utilisateur. Le pointeur interne du circuit sélectionne alors le code secret mémorisé puis, si la comparaison est positive, il donne accès à la zone de la mémoire désignée par le numéro formant la première partie du code. Bien entendu si la comparaison est négative l'accès sera refusé, sauf éventuellement à une zone délivrant par exemple un message d'erreur. Les codes secrets mémorisés seront par exemple contenus dans une table spéciale, mais de préférence on les placera dans la mémoire en tête des zones auxquelles ils donnent accès, ce qui permet là aussi de simplifier les circuits internes du circuit intégré. En effet dans ce cas le pointeur interne, sous la commande du numéro de zone, adresse directement le premier mot de la mémoire et l'application peut démarrer sans retard dès que le code secret est reconnu. De plus on économise les circuits nécessaires pour former une telle table et ses interfaces avec le reste du circuit intégré. Quand les codes secrets sont contenus dans une table spéciale, cette table permet en les décodant, de conduire à une partie commune d'adressage qui joue un rôle de sélection pour les zones mémoires auxquelles les codes secrets donnent accès. Si, comme indiqué plus haut, la longueur totale du code (secret + nO de zone) est égale à celle d'un mot de la mémoire, on peut soit neutraliser les bits correspondant au numéro, soit y mettre ce numéro lui-même et faire une comparaison totale du mot et du code, en obtenant ainsi une sécurité supplémentaire par redondance de la vérification du numéro de zone. Dans le cas d'un circuit à microprocesseur la sélection se fait par logiciel. Après extraction des x premiers bits du code présenté, le logiciel aiguille le pointeur interne vers le premier mot de la zone correspondant au numéro indiqué par ces x bits, il provoque la lecteur de ce mot, puis la comparaison des y derniers bits avec le mot ainsi lu, et enfin le démarrage de l'application si la comparaison est positive. Dans le cas d'un circuit sans microprocesseur, on peut utiliser par exemple des circuits logiques comme représenté sur la figure 3, limitée aux circuits spécifiques de l'invention. le code introduit par l'utilisateur arrive par une connexion "entrée code" dans un registre 301 où il est mémorisé. Les x premiers bits, correspondant au numéro de zone, sont appliqués à une logique de zones 302 où ils sont décodés pour obtenir un signal qui indique sur une connexion "sélection" la zone concernée. Cette logique mémorise ce signal jusqu'à la fin de l'application. Le signal de sélection ainsi obtenu est appliqué aux organes d'adressage 303 de la mémoire 304 du circuit intégré. Ces organes de sélection reçoivent également par une connexion "entrée adresses" les adresses des mots à lire dans l'application. La première adresse, 0 par convention, est toujours la même, et combinée avec le signal de sélection elle permet de lire dans la mémoire le premier mot de la zone désignée, qui contient le code secret interne mémorisé. Ce code interne est appliqué, avec le code secret externe provenant du registre 301, à un comparateur 305 qui délivre, si cette comparaison est positive, un signal de validation de lecture qui vient ouvrir une porte 306 qui permet aux mots lus dans la mémoire de sortir vers les autres organes du circuit intégré. Ce signal de validation permet également, le cas échéant, de débloquer tout ou partie de ces autres organes, par exemple pour autoriser l'écriture dans la mémoire. En outre, pendant toute la durée de l'application, le signal "sélection" permet, en combinaison avec le signal d'adresses, de lire le contenu de la zone comme si elle était en tête de la mémoire. Il en est de même bien entendu pour les autres applications. Par ailleurs, il n'est pas absolument nécessaire que chaque code confidentiel soit placé au début de sa zone mémoire. En effet, la structure de l'invention est aussi particulièrement intéressante si, après la présentation du code, toutes les zones sont de la même taille. Dans le cas contraire on utilise une organisation dans laquelle les codes secrets sont mémorisés dans une petite zone. REVENDICATIONS 1 - Procédé pour répartir la mémoire d'un circuit intégré entre plusieurs applications, caractérisé en ce que l'on divise la mémoire (103) en plusieurs zones correspondant chacune à une application, et que l'on associe à chaque zone un code destiné à être présenté (101) au circuit par l'utilisateur pour autoriser (102) quand il est reconnu l'accès à la zone à laquelle il est associé. 2 - Procédé selon la revendication 1, caractérisé en ce que le code est divisé en deux parties, l'une (201) correspondant au numéro de la zone associée, et l'autre (202) formant un code secret destiné à protéger l'accès à l'application contenue dans ladite zone. 3 - Procédé selon la revendication 2, caractérisé en ce que la partie (201) correspondant au numéro de zone est placée avant l'autre partie, compte tenu du sens d'introduction du code dans le circuit. 4 - Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que l'on associe les adresses (303) des zones et les codes correspondant à ces zones (302) pour que les adressages des zones soient identiques vu du coté utilisateur. 5 - Procédé selon l'une quelconque des revendications 1 à 4,caractérisé en ce que l'on mémorise dans la mémoire (304) du circuit intégré les codes permettant d'autoriser (305) les accès aux applications. 6 - Procédé selon la revendication 5, caractérisé en ce que les codes secrets sont placés en tête des zones correspondantes de la mémoire (103). 7 - Procédé selon la revendication 6, caractérisé en ce que les codes secrets sont placés dans une table des codes.