FR 2686989 A1 19930806 FR 9201002 A 19920130 i 2686989 PROCEDE DE COMPTAGE DE SECURITE POUR UN COMPTEUR ELECTRONIQUE BINAIRE La présente invention se rapporte aux procédés qui permettent de compter des nombres croissants dans un compteur binaire en toute sécurité, c'est à dire sans qu'un fraudeur puisse perturber le comptage dans un sens favorable à la fraude. Les compteurs binaires sont utilisés en grand nombre dans les systèmes électroniques logiques pour servir à des fins diverses Dans certains cas il est tout à fait important que la valeur du nombre ainsi mémorisé dans ce compteur ne puisse être modifiée autrement que par le fonctionnement normal du dispositif et non pas par un événement extérieur, tel que par exemple l'intervention d'un fraudeur ou un fonctionnement parasite du système Une sécurité totale n'est toutefois pas toujours nécessaire et il est souvent beaucoup plus important d'éviter que le compteur ne revienne en arrière alors qu'une progression excessive de ce compteur n'amènera que des inconvénients limités On citera à titre d'exemple le cas particulier des compteurs qui mémorisent des événements extérieurs dans une carte à mémoire dite carte à puce Ces événements extérieurs peuvent être par exemple la consommation d'unités téléphoniques, ou le prélèvement d'argent dans un distributeur automatique Il est bien clair que si un fraudeur a la possibilité de ramener le compteur en arrière il pourra utiliser la carte en question de manière excessive, alors que si au contraire son intervention ne fait que progresser le compteur en avant il n'y trouvera aucun intérêt. Pour de petits nombres on pourrait bien sûr utiliser un système du type mémoire à fusible, qui est par essence irréversible Toutefois dès que le nombre est un peu élevé ce système se révèle à la fois excessivement encombrant et très onéreux. Pour résoudre ce problème l'invention propose un procédé de comptage de sécurité pour un compteur électronique binaire comprenant un ensemble d'étages binaires permettant de représenter un nombre entier, principalement caractérisé en ce que, pour incrémenter ce compteur binaire depuis un premier nombre jusqu'à un deuxième nombre supérieur au premier, on force dans leur état final au moins les étages dont le contenu doit changer, selon un ordre tel qu'à aucun moment le contenu du compteur ne représente un nombre inférieur au premier nombre. D'autres particularités et avantages de l'invention apparaîtront clairement dans la description suivante, présentée à titre d'exemple non limitatif en regard des figures annexées qui représentent: La figure 1, le schéma d'un registre de type EEPROM connu permettant de mettre en oeuvre l'invention; la figure 2, la structure d'un compteur selon l'invention; la figure 3, le schéma partiel d'un compteur selon l'invention; et la figure 4, le diagramme de certains signaux dans le schéma de la figure 3. Le procédé de comptage selon l'invention utilise un registre binaire dans lequel des 1 ou des O peuvent être inscrits de manière permanente, de manière à rester mémorisés même en l'absence des tensions de fonctionnement nécessaires au circuit En outre ces chiffres binaires peuvent être effacés puis réinscrits, lorsque le dispositif est sous tension bien entendu Un tel registre est essentiellement réalisé selon une technique dite EEPROM bien connue dans l'art, mais on pourrait utiliser d'autres techniques équivalentes. En prenant comme exemple un compteur à huit étages, pouvant donc compter en binaire jusqu'à 256, on montrera d'abord comment, selon l'invention, faire progresser ce compteur de une unité d'une manière sure. Supposons par exemple que le compteur contienne le nombre décimal 155, soit en binaire: ( 1) 11011001 Dans l'art connu, le registre est câblé en compteur proprement dit, c'est à dire que l'introduction d'un 1 supplémentaire est faite sur le premier étage et que les étages sont câblés de manière à faire progresser de proche en proche les reports successifs correspondant aux débordements de chaque étage Dans ces conditions une intervention extérieure, par exemple la coupure de l'alimentation ou un parasite, peut perturber ce mécanisme et le compteur peut se retrouver alors dans un état correspondant à un nombre moins élevé que celui dont il est parti. Pour faire passer l'état du compteur de 155 à 156 par exemple, on introduit dans cet art connu un 1 supplémentaire dans le première étage, qui passe à zéro et entraine un report sur le deuxième étage, qui passe lui-même à zéro en entrainant un report sur le troisième étage qui passe à 1 L'opération s'arrête là, l'état du compteur correspondant alors à 156 en décimal. Si pour une raison quelconque, fraude ou parasite, le report ne s'effectue pas par exemple entre le premier et le deuxième étage, le registre contiendra à la fin le chiffre 154 en décimal et l'on aura donc régressé par rapport au chiffre de départ. Pour éviter ceci, selon l'invention, le registre lui-même n'est pas câblé en compteur mais est utilisé en simple mémoire dont on vient forcer les étages Cette opération se fait à partir d'une logique séparée du registre et qui fonctionne de telle manière que les forçages successifs des étages du registre se font d'une manière telle que les nombres binaires correspondant à chaque forçage passent par des valeurs supérieures à la valeur du nombre mémorisé au départ, pour aboutir à la valeur du nombre finalement voulu. Ainsi donc, dans cet exemple, on commence par rechercher le premier zéro qui se présente à partir de la gauche (ici comme dans tout ce texte le bit le plus significatif sera celui à droite dans les formules) On écrit ensuite un 1 à la place de ce zéro dans le bit correspondant L'état du registre devient alors: ( 2) 11111001 ce qui correspond au chiffre décimal 159. On écrit ensuite un zéro sur tous les bits à gauche de celui qui vient de passer à 1 L'état du registre est alors: ( 3) 00111001 ce qui correspond bien au nombre décimal 156 qui est celui voulu. On est donc passé ainsi du nombre 155 au nombre 156 en incrémentant le compteur de une unité, tout en passant par le nombre intermédiaire 159 qui est plus élevé que le nombre 155 de départ, ce qui est le résultat cherché On remarque d'ailleurs que le passage à zéro des deux bits les plus à gauche, qui a été décrit comme se faisant simultanément, pourrait se faire dans un ordre quelconque, puisque l'on se placerait à ce moment dans des états intermédiaires toujours supérieurs à 155. Ce procédé s'étend aussi à l'incrémentation, d'un seul coup, d'un nombre d'unités supérieur à 1. A titre d'exemple on va expliquer la manière de passer d'une valeur décimale 154 à une valeur décimale 179 sans passer par les valeurs décimales inférieures à 154. Le nombre 154 s'écrit en binaire: ( 4) 01011001 Le nombre décimal 179 s'écrit lui: ( 5) 11001101 Selon l'invention, on détermine tout d'abord quel est le premier étage le plus à droite qui passera d'un zéro à 1 entre les valeurs 154 et 179 Ce premier étage est le sixième à partir de la gauche. On commence donc par forcer à 1 ce sixième étage, ce qui donne le nombre binaire: ( 6) 01011101 Ce nombre binaire correspond au nombre décimal 186. On remet ensuite à zéro les cinq bits les plus à gauche, situés donc avant le sixième bit qui vient d'être mis à 1, ce qui donne le nombre binaire ( 7) 00000101 Ce nombre binaire correspond au nombre décimal 160, qui est donc bien supérieur à 154. On termine en écrivant un 1 sur les premier, deuxième et cinquième bits, pour aboutir au nombre binaire vu plus haut en formule ( 5). On a donc là aussi obtenu le résultat voulu de passer de 154 à 179 sans passer par une valeur intermédiaire inférieure à 154 on remarquera en outre qu'il a suffi de 5 écritures pour ajouter 15 unités. Ceci est particulièrement favorable dans le cas ou l'on utilise pour le registre de comptage une technologie EEPRON, puisque comme on le sait le nombre de réinscriptions dans les cellules obtenues selon une telle technologie n'est pas illimité, bien qu'il soit assez grand dans les usages courants pour lesquels elles sont utilisées. Les exemples ci-dessus ont été décrits en logique directe, mais on pourrait également utiliser une logique inverse o les O sont remplacés par des 1 et vice-versa, l'essentiel étant qu'à aucun moment du processus le contenu du registre formant compteur ne soit dans un état logique correspondant à nombre inférieur au nombre de départ. Dans la pratique, la manière dont on programmera les cellules individuelles du registre dépendra essentiellement de la réalisation physique de celui-ci. En effet selon les technologies utilisées il n'est pas toujours possible de commander individuellement chaque cellules dans un sens ou dans l'autre. En prenant par exemple un registre de 8 bits réalisé dans une technologie EEPRON courante dans la technique, comme représenté sur la figure 1, celui-ci comprend pour chaque cellule dédiée à un bit un transistor de mémorisation 101 relié en série avec un transistor de lecture 102 Ce transistor 102 est relié à une entrée individuelle BLI, et le transistor de mémorisation loi à une ligne AG commune à tous les transistors de mémorisation Les grilles des transistor 102 sont reliées à une ligne de lecture commune WL Les grilles des transistors 101 sont reliées à une ligne commune 104, qui est alimentée à partir d'une entrée VS par l'intermédiaire d'un transistor de lecture 103, dont la grille est elle-même reliée à WL. Dans cette structure connue, il n'est pas possible d'effacer une seule cellule séparée et l'on est obligé de les effacer toutes ensembles Selon les notations et l'usage classique, cet effacement correspond à l'inscription d'un 1 dans toutes les cellules Pour cela il faut appliquer les tensions suivantes WL = Vpp (Tension de programmation) VS = Vpp AG = O (masse) BLI à BL 8 = O ou flottante On peut par contre programmer chaque cellule séparément Cette programmation correspond, selon les notations et l'usage classique, à inscrire un zéro dans la cellule Pour programmer par exemple la première cellule, correspondant aux transistors 101 et 102, il faut appliquer les tensions suivantes: WL = Vpp VS = O AG = flottant BLI = Vpp BL 2 à BL 8 = O ou flottant En reprenant alors le premier exemple, o l'on veut faire progresser le contenu du registre de 1 à partir du nombre 155, on commencera par faire passer toutes, les cellules à 1 en appliquant les tensions: Vs = Vpp WL = Vpp AG = o On constate que toutes les cellules passent par 1, ce qui en fait rajoute une étape à l'organigramme décrit plus haut Mais, comme prévu par l'invention, dans cette étape le registre compteur se retrouve dans un état supérieur à celui du départ. Pour continuer le processus, on reprogramme alors sur zéro tous les bits qui étaient à zéro avant l'effacement du compteur (l'effacement correspond au passage à 1 comme on l'a vu plus haut), sauf bien entendu le bit qui doit passer à 1 à partir de zéro, c'est à dire le troisième à partir de la gauche Pour cela on applique les tensions suivantes: VS = O WL = Vpp AG = flottant BL 6 = BL 7 = Vpp BLI à BL 5 et BL 8 = O ou flottant on se retrouve alors dans l'état correspondant au nombre de la formule ( 2 >. De préférence ces deux étapes feront partie du même cycle de programmation, correspondant à un effacement/lecture suivi d'une reprogrammation, comme cela est classique dans la technologie EEPRON Bien évidemment sur chaque ligne de bit dans le montage physique utilisé on disposera d'une bascule qui permettra de mémoriser le mot qui est lu au début, afin de procéder aux réinscriptions adéquates en fonction de la logique utilisée. Dans le cycle suivant, on écrit alors des zéros sur tous les bits à gauche du bit qui a été adressé, le troisième dans l'exemple, en appliquant les tensions: VS = o WL = Vpp AG = Flottant BLI = BL 2 = Vpp BL 3 à BL 8 = O ou flottant Après ce cycle d'inscription, on se retrouve bien avec le nombre binaire correspondant à la formule ( 3), qui est celui désiré. on constate d'ailleurs que dans cette réalisation physique on peut légèrement simplifier l'organigramme en rassemblant en une seule fois l'inscription des zéros. En effet, comme on l'a vu, on ne peut pas inscrire un seul 1 dans le troisième étage et il faut faire passer tous les étages à 1, puis réinscrire les zéros à droite de l'étage adressé La simplification consistera alors à inscrire simultanément les zéros nécessaires à gauche dans la même phase on l'on inscrit les zéros à droite. L'utilisation de ce procédé soulève toutefois un problème avec certaines technologies, notamment celle décrite concernant une mémoire du type EEPROM En effet, en considérant par exemple l'état de départ et l'état d'arrivée donnés par les formules ( 1) et ( 3) dans le cas o l'on a augmenté le contenu du compteur de une unité, on constate que ces deux état correspondent aux deux états successifs d'un compteur ordinaire dans un compteur normal (en logique naturelle) o l'étage le plus à gauche, correspondant au bit de poids faible, change d'état à chaque fois que l'on incrémente le compteur de une unité Ceci veut dire que l'on effectue à chaque fois une opération d'écriture/effacement Dans le cas o le compteur est formé d'un registre de 16 bits, correspondant par exemple à deux registres standards de 8 bits mis en série, celui-ci peut compter au maximum jusque 216 = 65536, ce qui correspond à autant d'opérations d'écriture/effacement de la première cellule du compteur Or le nombre de fois o l'on peut effectuer une telle opération d'écriture/effacement dans une cellule du type EEPROM courante n'est pas illimité. On considère en général que c'est justement au alentour de ce nombre 65000 que la cellule est tellement détériorée qu'il n'est plus possible de continuer à l'utiliser. Pour avoir un registre permettant un comptage de sécurité sur des nombres plus grands, l'invention propose donc d'utiliser un registre comportant plus de 16 étages en série, en sacrifiant une partie de la capacité de ce registre au profit des possibilités d'enregistrement physiquement effectives, en utilisant la structure décrite ci-après. En se référant à la figure 2, le registre selon l'invention comprend une première partie 201 comportant 16 étages, qui peut éventuellement être formée de deux sous-parties de 8 étages chacune, puis deux autres parties 202 et 203 comportant chacune 8 étages. Les deux parties 202 et 203 sont utilisées chacune comme un compteur binaire naturel dans lequel le premier étage bascule au fur et à mesure de 1 'incrémentation du compteur Ces deux compteurs sont mis en série et ils permettent donc, comme on l'a vu plus haut, de compter jusqu'à un nombre égal à 65536 qui correspond à la fois à la capacité maximale des deux compteurs mis en série et au nombre physiquement acceptable d'écritures/effacements de la première cellule du compteur 202. Pour pouvoir aller plus loin, on utilise la première partie 201 comme un compteur bit par bit, c'est que chaque bit correspond à un chiffre 1 qui est inscrit une seule fois Donc le compteur pourra compter au maximum jusque 16, lorsque les 16 étages seront pleins. De cette manière, à chaque incrémentation de ce compteur bit à bit il n'y qu'un seul étage qui subit un cycle d'écriture/effacement, les autres n'étant pas sollicités et ne consommant pas, "inutilement" en quelque sorte, des capacités d'écriture/effacement. En fait dans la technologie EEPROM utilisée comme exemple on ne peut pas inscrire séparément des 1, comme on l'a vu plus haut, mais il faut inscrire tous les 1 d'un seul coup dans tous les étages et on peut ensuite inscrire des zéros séparément dans chaque étage En fait ceci est sans importance puisqu'on peut effectivement inscrire des 1 au départ, puis successivement des zéros il dans chaque étage en utilisant une logique inverse o le zéro dans chaque étage correspondra en fait à une unité supplémentaire d'incrémentation. Lorsque ce compteur bit à bit 201 est entièrement rempli, on incrémente alors de une unité le compteur 202, selon le procédé suivant l'invention décrit plus haut, puis, lorsque ce compteur 202 est plein le compteur 203 etc jusqu'à ce que l'ensemble formé des deux compteurs 202 et 203 contiennent le nombre 65536. Pour compter des 1 alors que l'on inscrit des zéros, il suffit par exemple de mettre un inverseur si l'opération se fait au niveau d'une logique câblée, ou d'utiliser une instruction adéquate dans la programmation du système logique, un microprocesseur par exemple, qui permet de programmer les étages des compteurs et de lire les états qui étaient ainsi mémorisés. Dans cette structure, le nombre enregistré est égal au nombre à enregistrer dans les deux compteurs 202/203 utilisés comme un compteur ordinaire, ce nombre étant multiplié par 16, plus le nombre d'unités enregistrées dans le compteur bit par bit 201. A titre d'exemple, prenons le nombre défini par la formule binaire suivante: ( 9) 00001 h 11111 ht 11 t 00111100 110001111 Les 16 premiers bits à gauche correspondent au contenu du compteur bit à bit 201 et comprennent quatre zéros à gauche Selon la logique inverse adoptée, ces quatre zéros correspondent à quatre unités Les 8 bits suivants, comportant deux zéros suivis de quatre 1 et de deux zéros, représentent le contenu du registre 202, soit en logique directe habituelle le nombre 60. Les 8 derniers bits à droite comprennent deux 1 suivis de trois zéros, puis de trois 1, et représentent le contenu du registre 203 avec la valeur 227. Au total ces deux registres 202 et 203 représentent le nombre 930752, auquel il faut ajouter le nombre 4 contenu dans le compteur bit à bit 201 pour obtenir le nombre 930756 contenu dans la totalité du registre formé des trois registres 201, 202 et 203. Au fur et à mesure que l'on incrémente le compteur, les étages du compteur bit à bit 201 passent successivement de 1 à O en progressant de la gauche vers la droite. Pendant ce temps, les étages des compteurs 202 et 203 ne bougent pas. Lorsque le dernier bit, le plus à droite du compteur bit à bit 201, est passé à zéro, le nombre total enregistré dans l'ensemble correspond à 930768. Pour incrémenter alors de une unité l'ensemble du registre, on incrémente de une unité le bit le plus à gauche du compteur 202, en suivant le procédé selon l'invention, puis on efface la totalité du contenu du compteur bit à bit 201 en programmant tous ces étages à 1. Le nombre maximum que l'on peut inscrire dans le registre complet est donc égal à 65536 X 16 + 16, soit 1048576. Lorsque ce nombre maximum aura été inscrit dans le registre complet, la cellule la plus sollicitée des deux compteurs 202 et 203, qui est la cellule correspondant au bit le plus à gauche du compteur 202, n'aura été sollicitée que 65536 fois, ce qui est dans les limites permises par la technologie actuelle pour ce genre de cellules. Chaque cellule du compteur bit à bit 201 aura elle aussi été sollicitée 65536 fois, puisque chacune sera passée de 1 à zéro une seule fois pendant le cycle o la cellule la plus sollicitée du compteur 201 sera elle aussi passée de 1 à zéro ou de zéro à 1. On a représenté sur la figure 3 un exemple de réalisation des circuits permettant de mettre en oeuvre le procédé selon l'invention dans un registre tel que celui de la figure 2 Dans cet exemple ne sont pas représentés les moyens permettant de déterminer l'état à inscrire dans le compteur et qui sont obtenus d'une manière tout-à-fait à la portée de l'homme de l'art à l'aide d'un système logique tel qu'un micro- processeur convenablement programmé. Le registre complet comprend donc deux premiers sous-registres 301 et 311 à 8 étages chacun, correspondant au compteur bit à bit 201 de la figure 2. Il comprend aussi 2 registres 302 et 303 à 8 étages, correspondant aux compteur 202 et 203 de la figure 2. Les états enregistrés dans les étages des registres 301, 311, 302 et 303 sont mémorisés dans 8 bascules d'étage 305 par le système informatique qui détermine l'état final à obtenir, et qui lui-même a été lire dans les registres l'état initial. L'état de ces bascules est transmis à un décodeur d'étage 304, qui les envoie sur l'un des 4 registres finaux à partir d'une adresse délivrée par un générateur d'adresses 306 Ce générateur d'adresses commande également les bascules 305 de manière à déterminer le nombre de transmissions des états, ainsi qu'une logique 307 Celle-ci permet, sous la commande d'un signal H d'horloge, de sélectionner les 4 registres par l'intermédiaire de signaux de sélection SE Li à SEL 4 Par ailleurs, l'ensemble de ces registres reçoit le signal VS, semblable à celui déterminé dans la figure 1, depuis le système logique de sélection de l'état final enregistré. En prenant pour exemple le cas o il s'agit d'incrémenter le premier compteur 202, sans toucher au deuxième compteur 303, en effaçant la totalité des registres 301 et 311, on a par exemple des signaux de commande correspondant aux 2 cycles représentés sur la figure 4. Pendant le premier cycle, déterminé par le signal d'horloge H, les 3 registres 301, 311 et 302 sont sélectionnés par les signaux SEL 1 à SEL 3 et sont remis à zéro par le signal VS Pendant le deuxième cycle, toujours déterminé par H les bits qui doivent être remis à zéro dans le registre 302, et qui ont été mémorisés dans les bascules 305, sont appliqués par le décodeur 304 à ce registre 302, lequel est sélectionné par le signal SEL 3. Le registre 303 ne subit aucune variation pendant ces deux cycles, puisque son signal de sélection SEL 4 reste constamment à 0. En résumé le procédé selon l'invention permet d'incrémenter le contenu d'un registre mémoire d'une manière sure, c'est-à-dire sans pouvoir repasser, même d'une manière temporaire par un état de ce registre inférieur à celui de départ Une structure particulière de comptage permet d'utiliser dans ce but des éléments de mémoire programmable du type EEPROM pour pouvoir enregistrer des nombres très élevés sans dépasser les limites physiques d'inscription d'un étage d'une mémoire. REVENDICATIONS 1 Procédé de comptage de sécurité pour un compteur électronique binaire comprenant un ensemble d'étages binaires ( 201-203) permettant de représenter un nombre entier, caractérisé en ce que, pour incrémenter ce compteur binaire depuis un premier nombre jusqu'à un deuxième nombre supérieur au premier, on force dans leur état final au moins les étages dont le contenu doit changer, selon un ordre tel qu'à aucun moment le contenu du compteur ne représente un nombre inférieur au premier nombre. 2 Procédé selon la revendication 1, caractérisé en ce que, ce compteur comprenant au moins un registre formé d'étages contigus ( 202), on force dans un premier temps l'ensemble des étages de ce registre pour représenter le nombre maximal défini par ce registre puis, dans un deuxième temps, on force à leur valeur finale les étages du registre dont la valeur finale est différente de celle définie dans le premier temps. 3 Procédé selon la revendication 1, caractérisée en ce que dans un premier temps on force à la valeur supérieure le premier étage le moins significatif qui doit changer d'état en passant d'une valeur inférieure à une valeur supérieure. 4 Procédé de comptage de sécurité pour un compteur électronique binaire comprenant un ensemble d'étages binaires ( 201-203) permettant de représenter un nombre entier, caractérisé en ce qu'on structure la représentation binaire du nombre à représenter dans le compteur en 2 parties, l'une ( 201) correspondant aux chiffres significatifs les plus faibles à représenter et étant organisée sous la forme d'un compteur bit par bit, et l'autre ( 202, 203) correspondant au reste du nombre à représenter et étant organisée sous la forme d'un compteur binaire naturel. 5 5 Procédé selon la revendication 4, caractérisé en ce que, pour incrémenter ce compteur binaire depuis un premier nombre jusqu'à un deuxième nombre supérieur au premier, on force dans leur état final au moins les étages dont le contenu doit changer, selon un ordre tel qu'à aucun moment le contenu du compteur ne représente un nombre inférieur au premier nombre. 6 Procédé selon la revendication 4 ou la revendication 5 caractérisé en ce que la partie ( 202,203) organisée sous la forme d'un compteur binaire naturel permet de compter un nombre tel que sa cellule représentant le bit de poids le plus faible soit sollicitée pour le comptage maximal de l'ensemble du compteur un nombre de fois égal au plus aux possibilités physiques de la cellule de comptage matériel qui est20 utilisée dans le compteur. 7 Procédé selon la revendication 4 caractérisé en ce que dans le compteur bit à bit, en technologie EEPROM, on programme un par un les bits.