Brevet FR2667192A1 — publié le 19920327

Procédé de comptage en mémoire EEPROM et son utilisation pour la réalisation d'un compteur sécurisé. L'invention se rapporte au domaine du comptage réalisé en mémoire EEPROM et a plus particulièrement pour objet un procédé de comptage en mémoire EEPROM et son application à la réalisation d'un compteur sécurisé. Lorsqu'un comptage est effectué dans une mémoire EEPROM, c'est à dire dans une mémoire effaçable et réenregistrable électriquement, un espace mémoire est affecté au contenu du compteur. Pour changer le contenu du compteur, c'est à dire pour effectuer un comptage, généralement en augmentant de une unité le contenu précédent du compteur, une remise à zéro de l'espace mémoire affecté au contenu du compteur est effectuée avant l'écriture de la nouvelle valeur (ancienne valeur plus incrément). La gestion d'un tel compteur en mémoire EEPROM présente donc le problème lié au processus de mise à jour d'une donnée en mémoire EEPROM puisqu'elle nécessite une remise à zéro préalable. En effet, si l'on suppose qu'un incident de fonctionnement, un acte de malveillance ou une tentative de fraude produit une interruption entre le moment où la zone compteur est remise à zéro et le moment où la nouvelle valeur est écrite dans cette même zone comptage peut être repris à partir d'un contenu nul anormal. Lorsque le compteur est porté par une carte à mémoire destinée à permettre l'accès à une ou plusieurs applications, cette situation peut se produire notamment lorsque la carte est arrachée du lecteur après remise à zéro et avant écriture. Pour éviter qu'un compteur en mémoire EEPROM ne se trouve remis à zéro intempestivement suite à une tentative de fraude ou suite à un incident de fonctionnement, le procédé selon l'invention consiste à sauvegarder plusieurs valeurs antérieures successives du compteur. Pour cela plusieurs espaces mémoire sont affectés au compteur et, selon un mode de réalisation, la mise à jour ne peut se faire que dans l'espace mémoire dont le contenu est le plus faible, tandis que parallèlement la lecture du compteur ne peut se faire que dans espace mémoire dont le contenu est le plus élevé. Cette lecture et cette écriture sont gérées par l'invention. Selon l'invention le procédé de comptage en mémoire EEPROM, effaçable et réenregistrable électriquement, est caractérisé en ce que, plusieurs espaces de la mémoire repérés par des indices étant affectés à un compteur, le procédé consiste, à chaque actualisation du contenu du compteur, - dans une première étape (10) à rechercher d'une part la dernière valeur de compteur, par la lecture interne de tous les espaces mémoire associés à ce compteur, et d'autre part l'indice d'un espace mémoire d'écriture contenant une valeur nulle ou la plus ancienne des valeurs, - dans une deuxième étape (20) à transférer la dernière valeur et l'indice trouvés dans la phase précédente dans une mémoire de travail, - dans une troisième étape (30) à calculer dans cette mémoire de travail la valeur actualisée du compteur en ajoutant un incrément à la dernière valeur, - dans une quatrième étape (40) à effacer la zone dont l'indice a été déterminé précédemment, - et dans une dernière étape (50) à écrire la valeur actualisée du compteur dans l'espace mémoire d'écriture désigné par son indice. En cas de problème, fraude ou autre, la valeur du compteur reste ainsi inchangée. L'invention a également pour objet l'utilisation de ce procédé pour la réalisation d'un compteur sécurisé, notamment pour les applications utilisant des cartes à mémoires EEPROM. L'invention sera mieux comprise et d'autres caractéristiques seront mises en évidence dans la description qui suit faite en référence aux figures annexées qui représentent: - la figure 1, une représentation logique d'un compteur selon l'invention, dans son état -initial; - la figure 2, un organigramme d'une opération de mise à jour du compteur sécurisé selon l'invention; - la figure 3, une représentation logique du même compteur dans un état ultérieur. Comme indiqué succinctement ci-dessus, le procédé de comptage en mémoire EEPROM selon l'invention consiste à sauvegarder en mémoire EEPROM plusieurs valeurs successives dans plusieurs espaces mémoires correspondants qui ont été représentés, pour plus de simplicité, comme N espaces contigus sur la figure 1. A ces espaces mémoires sont affectés des zones d'indices: l'ordre de ces indices définit la séquence d'utilisation des espaces successifs. En pratique, ces espaces pourraient être localisés dans des zones non contiguës pourvu qu'ils soient repérables aisément. Dans l'état initial, c'est à dire avant toute utilisation du "compteur", tous les espaces mémoires d'indices 1, 2, 3,... N sont à zéro. Le procédé de comptage est alors le suivant décrit ci-après en référence à la figure 2: Lorsque le circuit de gestion de la mémoire EEPROM, reçoit un ordre de mise à jour du compteur, par exemple "incrémenter" dans le procédé illustré, dans une première étape, 10, le logiciel de gestion du compteur commande la lecture de la suite des espaces mémoires d'indice 1 à N affectés au compteur, sélectionne la plus grande valeur et enregistre l'indice de la première valeur nulle dans la suite des espaces mémoires, ou à défaut de valeur nulle (tous les espaces ayant été utilisés) l'indice de la plus petite valeur: soit "IND" cet indice. La lecture des espaces mémoire est commandée par le système d'exploitation lui-même.De ce fait, cette lecture est indépendante de l'application qui utilise le compteur. Le système d'exploitation est celui d'un microprocesseur qui utilise le compteur. La plus grande valeur lue est la valeur actuelle du compteur, avant mise à jour: soit "VAL-ACT" cette valeur. Dans une étape 20, l'indice "IND" et la valeur "VAL-ACT" sont alors stockées en mémoire RAM de travail. L'étape suivante, 30, consiste alors à calculer en mémoire volatile la nouvelle valeur du compteur, égale à la valeur précédente, VAL-ACT à laquelle est ajouté l'incrément de comptage, en général égal à 1 comme illustré jusqu'à cette étape le contenu du compteur n'a pas été modifié et une tentative de fraude (ou un incident de fonctionnement) n'aurait aucun effet sur ce contenu. L'étape suivante, 40, consiste alors à remettre à zéro, c'est à dire à "effacer" la zone d'indice IND, c'est à dire une zone dont le contenu était le plus faible ou qui était encore à zéro (l'effacement n'ayant pas d'effet lors du premier cycle de N incrémentations). L'écriture de la valeur incrémentée VAL-ACT peut alors être effectuée dans l'espace mémoire d'indice IND dans une étape 50. Si une tentative de fraude intervient entre la mise à zéro et l'écriture de la nouvelle valeur, le contenu du compteur qui sera lu sera la valeur précédente et non une valeur nulle, qui pourrait causer de graves préjudices dans une application utilisant ce compteur. La valeur lue n'est donc plus une valeur aberrante mais seulement une valeur à laquelle ne peut manquer que la dernière incrémentation si celle-ci n'a pu être réalisée. La figure 3 illustre le compteur à N espaces mémoire illustré par la figure 1 dans un état ultérieur, c'est à dire après "i" incrémentations. Si une mise à jour est demandée lorsque le compteur est dans cet état, "VAL-ACT" sera lue dans la zone d'indice "i" et l'indice de la première zone dont le contenu est nul sera "IND"= i+1. La mise à jour sera alors effectuée en effaçant la zone d'indice i+l et en y écrivant la nouvelle valeur, soit la même valeur qu'en "i" sauf pour les 3 bits de plus faible poids qui deviennent 100 au lieu de 011 si l'incrément de comptage est égal à 1. Le procédé de comptage décrit ci-dessus peut également être adapté au décomptage. Dans ce cas, l'incrément est "-1" ajouté à la valeur précédente VAL-ACT et bien entendu lors de l'exploitation totale du compteur ce n'est plus la valeur la plus grande qui doit être retenue comme valeur actuelle, mais la valeur la plus petite, non nulle, tant qu'il existe des valeurs non nulles. De plus, pour conserver les dernières valeurs du compteur l'écriture de la nouvelle valeur est faite dans le premier espace mémoire dont le contenu est nul, lors du premier cycle de N opérations de mise à jour ou dans l'espace mémoire dont le contenu est le plus élevé lors des opérations de mise à jour suivantes. Cette écriture est alors précédée d'une mise à zéro de l'espace correspondant. Cette configuration permet, via les moyens de gestion d'initialiser le compteur par une valeur d'initialisation VAL-ACT quelconque. Il convient cependant pour que ce procédé de comptage suivant l'invention puisse être mis en oeuvre convenablement, que tous les espaces mémoires d'indice 1 à N soient effacés préalablement à l'écriture de la valeur d'initialisation du compteur. De plus le compteur est bien entendu adapté à un comptage ou un décomptage de p en p, p différent de 1 étant l'incrément utilisé en mémoire volatile pour le calcul de la nouvelle valeur actualisée du compteur. Il est à noter que la méthode présentée par l'invention peut aussi être appliquée à tout fichier transactionnel, permettant ainsi une grande sécurité des informations qui ont été enregistrées par une transaction. Le nombre d'espaces mémoire réservés pour un compteur est fonction du degré de sécurité souhaité pour le système. En effet, lorsque plusieurs interruption successives interviennent en cours de mises à jour, il peut se produire que plusieurs valeurs soient effacées. Mais l'effacement concerne d'abord les valeurs les plus anciennes et donc les plus éloignées de la dernière valeur du compteur. Il n'existe pratiquement plus de risque que la valeur qui précède la mise à jour soit effacée, et le contenu du compteur n'est donc jamais aberrant. Ce procédé de comptage permet de réaliser un compteur sécurisé en associant à plusieurs espaces mémoire réservés à chaque compteur en mémoire EEPROM des moyens de gestion, en général constitués, par un logiciel adapté à la mise en oeuvre des étapes successives décrites ci-dessus dont l'écriture est à la portée de l'homme du métier, mise en oeuvre par un microprocesseur. Pour l'application aux cartes à mémoire, le microprocesseur peut être également sur la carte. La mémoire RAM est alors la mémoire de travail du microprocesseur. REVENDICATIONS 1. Procédé de comptage en mémoire EEPROM, effaçable et réenregistrable électriquement, caractérisé en ce que,plusieurs espaces de la mémoire repérés par des indices étant affectés à un compteur, le procédé consiste, à chaque actualisation du contenu du compteur, - dans une première étape (10) à rechercher d'une part la dernière valeur de compteur, par la lecture interne de tous les espaces mémoire associés à ce compteur et d'autre part l'indice d'un espace mémoire d'écriture contenant une valeur nulle ou la plus ancienne des valeurs, - dans une deuxième étape (20) à transférer la dernière valeur et l'indice trouvés dans la phase précédente dans une mémoire de travail, - dans une troisième étape (30) à calculer dans cette mémoire de travail la valeur actualisée du compteur en ajoutant un incrément à la dernière valeur, - dans une quatrième étape (40) à effacer la zone dont l'indice a été déterminer précédemment, - et dans une dernière étape (50) à écrire la valeur actualisée du compteur dans l'espace mémoire d'écriture désigné par son indice. 2. Procédé selon la revendication 1, caractérisé en ce que dans une étape préalable d'initialisation du compteur, tous les espaces mémoire qui lui sont affectés sont mis à zéro, l'un d'entre eux recevant éventuellement une valeur d'initialisation non nulle. 3. Procédé selon l'une des revendications 1 et 2, caractérisé en ce que, pour une incrémentation du compteur, la valeur la plus ancienne et la dernière valeur sont respectivement la valeur la plus faible et la valeur la plus grande des valeurs lues. 4. Procédé selon l'une des revendications 1 et 2, caractérisé en ce que, pour une décrémentation du compteur à partir d'une valeur d'initialisation, la valeur la plus ancienne et la dernière valeur sont respectivement la valeur la plus grande et la valeur la plus faible non nulle des valeurs lues. 5. Utilisation du procédé selon l'une quelconque des revendications 1 à 4 pour la réalisation d'un compteur sécurisé, comportant: - une mémoire effaçable et réenregistrable électriquement dans laquelle plusieurs espaces mémoire repérés par des indices sont affectés au compteur, - une mémoire de travail, - des moyens de gestion du compteur couplés aux mémoires pour commander, à chaque mise à jour du compteur la lecture de la dernière valeur et de l'indice d'un espace mémoire d'écriture contenant une valeur nulle et à défaut la plus ancienne des valeurs, le transfert de ces données en mémoire de travail, le calcul de la valeur actualisée, puis l'effacement de l'espace mémoire d'écriture et l'écriture de la valeur actualisée dans cet espace.