FR2990533A1 - Program execution monitoring method for smart card, involves performing set of operations, and arranging processing unit to generate interruption of execution of program according to result of set of operations - Google Patents

Program execution monitoring method for smart card, involves performing set of operations, and arranging processing unit to generate interruption of execution of program according to result of set of operations Download PDF

Info

Publication number
FR2990533A1
FR2990533A1 FR1254221A FR1254221A FR2990533A1 FR 2990533 A1 FR2990533 A1 FR 2990533A1 FR 1254221 A FR1254221 A FR 1254221A FR 1254221 A FR1254221 A FR 1254221A FR 2990533 A1 FR2990533 A1 FR 2990533A1
Authority
FR
France
Prior art keywords
register
execution
data
program
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1254221A
Other languages
French (fr)
Other versions
FR2990533B1 (en
Inventor
Frederic Boulet
Louis-Philippe Goncalves
Thanh Ha Le
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Idemia Identity & Security France Fr
Original Assignee
Morpho SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Morpho SA filed Critical Morpho SA
Priority to FR1254221A priority Critical patent/FR2990533B1/en
Publication of FR2990533A1 publication Critical patent/FR2990533A1/en
Application granted granted Critical
Publication of FR2990533B1 publication Critical patent/FR2990533B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

The method involves checking a set of tags during execution of a program. The set of tags is transmitted to an input of a monitoring unit during execution of identification data associated with the set of tags. The monitoring unit is arranged with a register and a processing unit for reading data stored in the register. Identification data is received in the input of the monitoring unit. A set of operations is performed to control the identification data. The processing unit is arranged to generate an interruption of execution of the program (1200) according to result of the set of operations. Independent claims are also included for the following: (1) a monitoring unit (2) a smart card.

Description

DOMAINE DE L'INVENTION Le domaine de l'invention est celui de la sécurité de composants électroniques, notamment de cartes à puce. L'invention est notamment applicable au contrôle de l'exécution d'un logiciel sécurisé. ETAT DE LA TECHNIQUE Un des objectifs principaux des développeurs de logiciels sécurisés pour microcontrôleur est d'empêcher un attaquant potentiel de modifier l'ordre d'exécution d'instructions ou blocs d'instructions constituant un logiciel. Ces attaques peuvent prendre la forme d'attaques électriques ou lumineuses, ou de modifications indues de données. Pour assurer la maîtrise de l'exécution du logiciel, des techniques logicielles de contrôle d'exécution d'un logiciel sécurisé ont été développées. FIELD OF THE INVENTION The field of the invention is that of the security of electronic components, in particular of smart cards. The invention is particularly applicable to the control of the execution of secure software. STATE OF THE ART One of the main objectives of developers of secure microcontroller software is to prevent a potential attacker from changing the order of execution of instruction or instruction blocks constituting software. These attacks can take the form of electrical or light attacks, or undue modifications of data. To ensure control over the execution of the software, software techniques for controlling the execution of secure software have been developed.

Parmi ces techniques, on compte des logiciels permettant d'identifier des modules - c'est-à-dire des groupements de fonctions logicielles - en cours d'utilisation, ou des fonctions logicielles, et permettant de contrôler des transitions entre différents modules ou différentes fonctions appartenant à un ou plusieurs modules. These techniques include software to identify modules - that is, groups of software functions - in use, or software functions, and to control transitions between different modules or different functions belonging to one or more modules.

Ainsi, si suite à une intrusion, l'ordre d'exécution des fonctions est erroné, l'appel par une première fonction d'une deuxième fonction non prévu par le logiciel est détecté. L'intrusion est donc détectée. Des techniques logicielles ont également été développées pour suivre l'exécution d'un logiciel par incrémentation d'une variable dédiée à des étapes critiques de l'exécution dudit logiciel, avec des contrôles intermédiaires et/ou un contrôle final de la variable dédiée. En fonction des valeurs prévues et réelles de la variable, les contrôles peuvent donc détecter une mauvaise exécution du logiciel. Ces techniques présentent l'avantage d'une simplicité de mise en oeuvre, et d'une bonne efficacité de détection des attaques. Cependant, elles grèvent les performances du logiciel car elles nécessitent une taille de code importante. En outre, elles n'assurent pas une sécurité complète du logiciel puisqu'en tant que logiciel, ces solutions peuvent elles-mêmes être attaquées. Thus, if following an intrusion, the order of execution of the functions is wrong, the call by a first function of a second function not provided by the software is detected. The intrusion is detected. Software techniques have also been developed to monitor the execution of software by incrementing a variable dedicated to critical stages of the execution of said software, with intermediate controls and / or final control of the dedicated variable. Depending on the expected and actual values of the variable, the controls can detect a poor execution of the software. These techniques have the advantage of simplicity of implementation, and a good attack detection efficiency. However, they affect the performance of the software because they require a large code size. In addition, they do not provide complete security of the software because as software, these solutions can themselves be attacked.

PRESENTATION DE L'INVENTION La présente invention a pour but de remédier aux problèmes décrits ci-avant, en proposant une solution de contrôle de l'exécution d'un logiciel plus fiable que les solutions de l'art antérieur, et qui ne diminue pas les performances du logiciel contrôlé. A cet effet, l'invention a pour objet un procédé de suivi de l'exécution d'un programme mis en oeuvre par ordinateur, ledit programme intégrant dans ses instructions un ensemble de balises permettant le contrôle de ses étapes d'exécution, caractérisé en ce que lors du franchissement d'une balise dans le flux des étapes d'exécution du programme, on transmet en entrée d'une unité de suivi d'exécution des données d'identification associées à cette balise, ladite unité comprenant un registre et un circuit de traitement à portes logiques configure pour lire les données mémorisées dans le registre et mettre en oeuvre sur ces données et sur les données d'identification reçues en entrée par l'unité de suivi d'exécution, des opérations adaptées pour contrôler les données d'identification reçues, ledit circuit de traitement générant ou non une interruption de l'exécution du programme en fonction du résultat de ces opérations. Un tel procédé est avantageusement complété par les caractéristiques suivantes prises seules ou selon toutes leurs combinaisons techniquement possibles : les données d'identification d'une balise comportent une valeur de compteur associée à la balise, le registre comportant un champ correspondant, le circuit de traitement comparant la valeur de compteur de la balise à la valeur de compteur du champ correspondant dans le registre et mettant à jour cette dernière valeur par incrémentation du champ correspondant dans le registre, lors d'un franchissement de balise ; les données d'identification d'une balise comportent des données d'identification de fonction associées à la balise, le registre comportant un champ correspondant, le circuit de traitement comparant les données de la balise à celles de ce champ dans le registre et, lors d'un franchissement d'une balise à l'occasion de l'appel de l'exécution d'une seconde fonction dans le cours de l'exécution d'une première fonction, remplaçant dans le champ d'identification de fonction du registre des données d'identification de la première fonction par des données d'identification de la seconde fonction ; - notamment, lorsque la première et la deuxième fonctions appartiennent à des modules différents, le circuit de traitement remplace en outre dans un champ d'identification de modules du registre des données dépendant du module de la première fonction par des données dépendant du module de la seconde fonction, les données d'identification d'une balise comportant des données d'identification de module que le circuit de traitement compare à des données du champ correspondant dans le registre ; - les données dépendant de la seconde fonction ou du second module sont obtenues respectivement par application de l'opérateur « ou exclusif bit à bit» entre les données de la première fonction ou du premier module et un identifiant de la seconde fonction ou du second module ; - à chaque mise à jour des données des champs d'identification du registre, le circuit de traitement met à jour des données d'un champ de suivi et de contrôle des modifications des champs d'identification. - à chaque mise à jour des données du champ de suivi et de contrôle des modifications des champs d'identification, le circuit de traitement remet à zéro le champ de suivi d'exécution du programme. L'invention concerne en outre une unité de suivi d'exécution d'un programme, comprenant sur un même support matériel: - un registre et - un circuit de traitement à portes logiques configuré pour lire les données mémorisées dans le registre et mettre en oeuvre le procédé. Elle concerne par exemple une carte à puce comprenant une puce et une telle unité de suivi d'exécution dont le circuit de traitement et le registre ont été fondus avec ladite puce. DESCRIPTION DES FIGURES D'autres caractéristiques, buts et avantages de l'invention ressortiront de la description qui suit, qui est purement illustrative et non limitative, et qui doit être lue en regard des dessins annexés sur lesquels : - La figure 1 représente un module matériel dans un contexte d'utilisation, - La figure 2 représente schématiquement un exemple de communication entre un programme et les composants d'un module matériel mise en oeuvre dans le procédé de suivi de l'exécution du programme, - La figure 3 représente les principales étapes du procédé de suivi de l'exécution du programme. DESCRIPTION DETAILLEE D'AU MOINS UN MODE DE MISE EN OEUVRE Description matérielle de l'unité de suivi d'exécution d'un programme L'unité de suivi d'exécution d'un logiciel, référencée par 1 sur la figure 1, comprend sur un même support matériel un registre 10, et un circuit « hardware » à portes logiques 11, ou circuit de traitement, configuré pour lire et écrire des données du registre 10 et réaliser des opérations sur celles-ci. Par exemple, ainsi qu'illustré sur la figure 1, le logiciel peut être un programme tournant en tout ou partie sur le processeur 20 d'une carte à puce 2, le registre 10 et le circuit 11 étant fondus avec le processeur 20 en étant intégrés matériellement à celui-ci. PRESENTATION OF THE INVENTION The purpose of the present invention is to remedy the problems described above by proposing a solution for controlling the execution of a software that is more reliable than the solutions of the prior art, and which does not diminish. the performance of the controlled software. For this purpose, the object of the invention is a method for monitoring the execution of a program implemented by a computer, said program including in its instructions a set of tags allowing the control of its execution steps, characterized in that when crossing a beacon in the flow of the program execution steps, the identification data associated with this beacon is transmitted at the input of an execution tracking unit, said unit comprising a register and a control unit. logical gate processing circuit configured to read the data stored in the register and implement on that data and on the identification data received by the execution tracking unit, operations adapted to control the data of the data logger. identification received, said processing circuit or not generating an interruption in the execution of the program depending on the result of these operations. Such a method is advantageously completed by the following characteristics taken alone or in all their technically possible combinations: the identification data of a beacon comprise a counter value associated with the beacon, the register comprising a corresponding field, the processing circuit comparing the counter value of the beacon with the counter value of the corresponding field in the register and updating the latter value by incrementing the corresponding field in the register, during a beacon crossing; the identification data of a tag includes function identification data associated with the tag, the register having a corresponding field, the processing circuit comparing the data of the tag with that of this field in the register and, when a crossing of a beacon during the call to perform a second function in the course of the execution of a first function, replacing in the function identification field of the register of identification data of the first function by identification data of the second function; in particular, when the first and the second functions belong to different modules, the processing circuit also replaces, in a module identification field, the data register depending on the module of the first function with data depending on the module of the second function, the identification data of a tag having module identification data that the processing circuit compares to data of the corresponding field in the register; the data dependent on the second function or the second module are respectively obtained by application of the operator "or exclusive bit-to-bit" between the data of the first function or the first module and an identifier of the second function or the second module ; each update of the data of the identification fields of the register, the processing circuit updates data of a field for monitoring and controlling the modifications of the identification fields. each update of the data of the tracking and control field of the modifications of the identification fields, the processing circuit resets the program execution monitoring field. The invention furthermore relates to a unit for monitoring the execution of a program, comprising on the same hardware support: a register and a logic gate processing circuit configured to read the data stored in the register and to implement the process. It relates for example to a chip card comprising a chip and such a performance tracking unit whose processing circuit and the register have been melted with said chip. DESCRIPTION OF THE FIGURES Other features, objects and advantages of the invention will emerge from the description which follows, which is purely illustrative and nonlimiting, and which should be read with reference to the accompanying drawings, in which: FIG. hardware in a context of use, - Figure 2 shows schematically an example of communication between a program and the components of a hardware module implemented in the process of monitoring the execution of the program, - Figure 3 shows the main steps of the process of monitoring the execution of the program. DETAILED DESCRIPTION OF AT LEAST ONE IMPLEMENTING MODE Hardware description of the unit for monitoring the execution of a program The unit for monitoring the execution of a software, referenced 1 in FIG. the same hardware support a register 10, and a hardware circuit with logic gates 11, or processing circuit, configured to read and write data from the register 10 and perform operations thereon. For example, as illustrated in FIG. 1, the software may be a program running wholly or partly on the processor 20 of a smart card 2, the register 10 and the circuit 11 being fused with the processor 20 while being materially integrated with it.

Pour permettre un contrôle du déroulement du programme par le circuit 11, le logiciel est développé en intégrant dans le flux de ses instructions un certain nombre de balises B dont l'identification est susceptible d'être contrôlée grâce au circuit de traitement 11 et au registre 10. Le circuit de traitement étant lui-même développé et fondu, en cohérence 20 avec l'intégration des balises dans le programme, pour permettre les opérations de contrôle attendus sur les balises étant fondu en fonction du logiciel à exécuter, tandis que le logiciel est quant à lui développé en cohérence avec le circuit 11. Notamment, chaque module du programme (constitué d'une ou plusieurs fonctions logicielles) et chaque fonction de celui-ci étant programmée dans le 25 programme avec un identifiant particulier MID, FID, une balise B dans le flux logiciel est identifiée par les identifiant MID et FID du module et de la fonction auxquels elle correspond, ainsi que par une valeur de compteur CPT. De son côté, le registre 10 comprend plusieurs champs dédiés au suivi de l'exécution d'un programme et en particulier : 30 un premier champ MID, en lecture et en écriture, qui permet de vérifier l'identification du module en cours d'exécution par le programme, par comparaison de la valeur lue dans ce champ avec la valeur de l'identifiant MID de la balise B concernée, le circuit 11 générant une interruption du programme, si les valeurs du module et du champ diffèrent ; - un second champ FID, en lecture et en écriture, qui permet de vérifier que la fonction exécutée par le programme est bien celle désirée, en vérifiant l'adéquation de la valeur de ce champ avec l'identifiant FID donnée par la balise B, le circuit générant une interruption logiciel si les valeurs de la fonction et du champ diffèrent et empêchant ainsi le passage non contrôlé d'une fonction à une autre ; - un troisième champ CPT, en lecture et en écriture, sert à suivre le déroulement du programme, en contrôlant qu'une balise franchie par le programme est bien celle désirée, le circuit 11 comparant, pour chaque balise B franchie par le programme, la valeur du compteur CPT indiquée au niveau du programme pour cette balise celle du champ CPT du registre 10, puis incrémentant la valeur de ce champ dans le registre 10 ce dernier. Si les deux valeurs comparées sont identiques, l'exécution se poursuit normalement. A contrario, si les valeurs diffèrent, une interruption est générée. Le registre 10 comprend en outre un champ OPE de commande, qui en lecture se décompose en : - un bit de poids fort utilisé comme champ ERR indicateur d'erreur (Quand ce bit est à 1, une erreur est signalée, et le circuit de traitement 11 provoque l'interruption du programme) et - un champ LVL qui constitue un compteur de niveau qui permet de maitriser les changements de valeurs qui peuvent être rendus nécessaires par les discontinuités liées aux appels de fonctions et aux interruptions. Le registre 10 peut être un registre à 32 bits, le circuit 11 étant un coeur 32 bits. Par exemple, le champ MID d'identification de module représente 8 bits, le champ FID d'identification de fonction représente 10 bits, et le champ CPT représente 7 bits. En écriture le champ de commande OPE représente 7 bits, tandis que le champ indicateur d'erreur ERR représente 1 bit en lecture, et le champ LVL représente 6 bits. To allow control of the program flow by the circuit 11, the software is developed by integrating into the flow of its instructions a number of tags B whose identification is likely to be controlled through the processing circuit 11 and the register 10. The processing circuit itself being developed and fused, consistent with the integration of the tags in the program, to allow the expected control operations on the beacons being melted according to the software to be executed, while the software is in turn developed in coherence with the circuit 11. In particular, each module of the program (consisting of one or more software functions) and each function thereof being programmed in the program with a particular identifier MID, FID, a tag B in the software stream is identified by the MID and FID ID of the module and function to which it corresponds, as well as by a value of CPT counter. For its part, the register 10 includes several fields dedicated to monitoring the execution of a program and in particular: a first MID field, read and write, which makes it possible to check the identification of the module in progress execution by the program, by comparison of the value read in this field with the value of the MID identifier of the beacon B concerned, the circuit 11 generating a program interruption, if the values of the module and the field differ; a second field FID, read and write, which makes it possible to verify that the function executed by the program is the desired one, by checking the adequacy of the value of this field with the identifier FID given by the beacon B, the circuit generating a software interrupt if the values of the function and the field differ and thus preventing the uncontrolled passage from one function to another; a third field CPT, in reading and writing, serves to follow the course of the program, by controlling that a beacon crossed by the program is the one desired, the circuit 11 comparing, for each beacon B crossed by the program, the value of the CPT counter indicated at the program level for this tag that of the CPT field of the register 10, then incrementing the value of this field in the register 10 thereof. If the two values being compared are the same, the execution continues normally. On the other hand, if the values differ, an interruption is generated. The register 10 furthermore comprises a control OPE field, which in reading is broken down into: a most significant bit used as an ERR error indicator field (When this bit is at 1, an error is signaled, and the processing 11 causes the interruption of the program) and - an LVL field which constitutes a level counter which makes it possible to control the changes of values which may be made necessary by the discontinuities related to function calls and interrupts. The register 10 may be a 32-bit register, the circuit 11 being a 32-bit core. For example, the module identification MID field represents 8 bits, the FID function identification field represents 10 bits, and the CPT field represents 7 bits. In writing the OPE control field represents 7 bits, while the error indicator field ERR represents 1 bit in read, and the LVL field represents 6 bits.

Egalement, l'unité 1 peut être avantageusement couplée à un chien de garde (circuit électronique permettant de redémarrer le système si une action donnée n'est pas exécutée dans un délai imparti) pour assurer le contrôle temporel de l'exécution du logiciel à surveiller (non représenté sur la figure). Also, the unit 1 can be advantageously coupled to a watchdog (electronic circuit for restarting the system if a given action is not executed within a time limit) to ensure the temporal control of the execution of the software to be monitored (not shown in the figure).

Les opérations de modification des champs du registre 10 par le circuit 11 en fonction de l'exécution du programme sont décrites plus en détails ci-après. Exemple de procédé de contrôle d'exécution d'un programme En référence à la figure 2 et à la figure 3, on décrit un exemple de mise en oeuvre du procédé de contrôle d'exécution du programme au moyen dudit registre 10 et du circuit « hardware » 11 associé. Pour plus de clarté, on utilise dans la suite les conventions d'écriture suivantes : Champ.b = Valeur courante du 'Champ' avant écriture Champ.w = Valeur écrite, Champ.a = Valeur résultante après écriture. lnitialisation Le procédé comporte une première étape 1000, d'initialisation ou de réinitialisation des valeurs du registre. Il s'agit du seul moyen de modifier intégralement le registre. De fait, cette commande étant critique, elle génère une interruption dès que l'un champ des champs du registre est modifié, interdisant toute utilisation non maitrisée. The operations of modifying the fields of the register 10 by the circuit 11 as a function of the execution of the program are described in more detail below. Example of a method for controlling the execution of a program With reference to FIG. 2 and FIG. 3, an example of implementation of the program execution control method by means of said register 10 and the circuit " hardware »11 associated. For the sake of clarity, the following conventions are used in the following: Field.b = Current value of the 'Field' before writing Field.w = Written value, Field.a = Result value after writing. Initialization The method comprises a first step 1000 of initializing or resetting the values of the register. This is the only way to completely modify the registry. In fact, this command being critical, it generates an interruption as soon as the field of the fields of the register is modified, prohibiting any non-mastered use.

Cette étape est mise en oeuvre par une commande CFU_LOAD(LVL) du champ OPE décrite ci-dessous : Commande: OPE.w = CFU_LOAD(LVL) Action(s): LVL.a = LVL.w = OPE[5..0].w (6 bits de poids faible d'OPE.w) MID.a = MID.w FID.a = FID.w CPT.a = CPT.w ERR.a = 0 Les conditions d'exceptions entraînant une interruption consistent en toute modification d'un champ du registre, c'est-à-dire : (ERR.b * 0) or (LVL.b * LVL.w) or (MID.b * MID.w) or (FID.b * FID.w) or (CPT.b * CPT.w) De la sorte, cette commande CFU_LOAD permet de contrôler les valeurs de tous les champs du registre. Vérification et modification des valeurs des champs Suite à cette étape d'initialisation du registre, le procédé comprend une étape 1100 de mise à jour des valeurs des champs du registre au fur et à mesure de l'exécution du programme, et le contrôle de la correspondance des valeurs des champs et des étapes en cours d'exécution du programme. Ainsi, le déroulement d'un programme est représenté schématiquement en figure 2. Il comprend l'exécution de fonctions F1, F2, F3 appartenant à différents modules Ml, M2, et, pour chaque fonction, le franchissement d'un certain nombre de balises B programmées. Le circuit de traitement 11 étant fondu en fonction du programme à exécuter, tandis que le programme est quant à lui développé en cohérence avec le circuit 11, à chaque franchissement d'une balise B par le programme, le circuit de traitement 11 vérifie les identifiants MID et FID en les comparant avec ceux précédemment écrits dans le registre 10 et exécute une étape 1110 de mise à jour de la valeur du champ CPT. Cette étape peut être réalisée par une commande CFU_STEP référencée 1111 en figure 3, ou par une commande CFU_ADD, référencée 1112, du champ 25 OPE. Commande CFU_STEP La commande CFU_STEP sert à incrémenter le champ compteur de balise CPT, et à vérifier que le programme n'a pas changé de fonction ou de module en 30 cours d'exécution. En cas d'absence de correspondance entre les valeurs des champs du registre et l'étape d'exécution du programme, une interruption est générée. Commande : OPE.w = CFU_STEP 35 Actions : CPT.a = CPT.b + 1 ERR.a = (ERR.b * 0) or (MID.b * MID.w) or (FID.b * FID.w) or (CPT.b * CPT.w) or (CPT.a < CPT.b) Conditions d'exception : (ERR.a * 0) On remarque que le débordement du compteur CPT, c'est-à-dire son retour à 0, est également source d'interruption. Puisque le nombre de bits de chaque champ, et notamment du champ CPT, est limité, il est impératif de contrôler les conditions dans lesquelles peut se produire un débordement. Or, le circuit de traitement 11 est configure pour que le débordement du compteur ne soit autorisé qu'en cas de modification du champ de suivi LVL. This step is implemented by a CFU_LOAD command (LVL) of the OPE field described below: Command: OPE.w = CFU_LOAD (LVL) Action (s): LVL.a = LVL.w = OPE [5..0 ] .w (6 low-order bits of OPE.w) MID.a = MID.w FID.a = FID.w CPT.a = CPT.w ERR.a = 0 Exception conditions causing a break in any modification of a field of the register, that is to say: (ERR.b * 0) or (LVL.b * LVL.w) or (MID.b * MID.w) or (FID.b * FID.w) or (CPT.b * CPT.w) In this way, this command CFU_LOAD makes it possible to control the values of all the fields of the register. Verification and modification of the values of the fields Following this step of initializing the register, the method comprises a step 1100 of updating the values of the fields of the register as the program is executed, and the control of the matching the values of the fields and steps running the program. Thus, the course of a program is shown schematically in FIG. 2. It comprises the execution of functions F1, F2, F3 belonging to different modules M1, M2, and, for each function, the crossing of a certain number of tags. B programmed. The processing circuit 11 is melted according to the program to be executed, while the program is developed in coherence with the circuit 11, each time a beacon B is crossed by the program, the processing circuit 11 checks the identifiers MID and FID by comparing them with those previously written in the register 10 and executes a step 1110 for updating the value of the CPT field. This step can be performed by a CFU_STEP command referenced 1111 in FIG. 3, or by a CFU_ADD command, referenced 1112, of the OPE field. CFU_STEP command The CFU_STEP command is used to increment the CPT beacon counter field, and to check that the program has not changed any function or module running. If there is no correspondence between the values of the register fields and the program execution step, an interrupt is generated. Command: OPE.w = CFU_STEP 35 Actions: CPT.a = CPT.b + 1 ERR.a = (ERR.b * 0) or (MID.b * MID.w) or (FID.b * FID.w) or (CPT.b * CPT.w) or (CPT.a <CPT.b) Exception conditions: (ERR.a * 0) We notice that the overflow of the CPT counter, that is to say its return to 0, is also a source of interruption. Since the number of bits in each field, and in particular the CPT field, is limited, it is imperative to control the conditions under which an overflow can occur. Now, the processing circuit 11 is configured so that the overflow of the counter is only authorized if the LVL tracking field is modified.

Par ailleurs, on constate également que le résultat d'une modification du champ CPT est une combinaison de la valeur courante et de la valeur écrite (en l'occurrence un incrément de 1). Ainsi, une valeur donnée du compteur dépend des valeurs précédentes et permet la propagation d'une erreur pour une détection ultérieure, sauf si le champ de suivi LVL est modifié. On the other hand, one also notes that the result of a modification of the CPT field is a combination of the current value and the written value (in this case an increment of 1). Thus, a given value of the counter depends on the previous values and allows the propagation of an error for subsequent detection unless the LVL tracking field is changed.

Commande CFU_ADD La commande CFU_ADD, quant à elle, vérifie également les valeurs des champs d'identification MID et FID, et elle modifie la valeur du champ CPT par addition de la valeur en écriture (CPT.w). CFU_ADD command The CFU_ADD command, meanwhile, also checks the values of the MID and FID identification fields, and it modifies the value of the CPT field by adding the write value (CPT.w).

Commande: OPE.w = CFU_ADD Actions: CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (MID.b * MID.w) or (FID.b * FID.w) or (CPT.a < CPT.b) Conditions d'exception: (ERR.a * 0) Comme pour la commande CFU_STEP, le débordement du champ CPT est source d'erreur. Cette commande est une alternative à la commande CFU_STEP, ces deux commandes étant appelées en fonction des balises prévues dans la programmation du logiciel pour obtenir la valeur maximale du champ CPT avant débordement au moment des modifications du champ LVL. Or, le champ LVL est modifié, par incrémentation ou décrémentation, pour autoriser les transitions du programme entre deux fonctions ou deux modules distincts. A chaque fois que le programme passe d'une première fonction à une seconde fonction, la première et la seconde fonction pouvant appartenir à des modules distincts, le module met en oeuvre une étape 1120 de modification du champ LVL. Deux commandes ont donc pour objet de modifier la valeur du champ LVL, une commande CFU_INC d'incrémentation du champ, référencée 1121 en figure 3 et une commande CFU_DEC de décrémentation, référencée 1122. Conventionnellement, la première permet de contrôler des appels à des couches logicielles inférieures, tandis que la seconde permet de contrôler des retours vers des couches supérieures. Command: OPE.w = CFU_ADD Actions: CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (MID.b * MID.w) or (FID.b * FID.w ) or (CPT.a <CPT.b) Exception conditions: (ERR.a * 0) As for the CFU_STEP command, the overflow of the CPT field is an error. This command is an alternative to the command CFU_STEP, these two commands being called according to the beacons envisaged in the programming of the software to obtain the maximum value of the field CPT before overflow at the time of the modifications of the field LVL. However, the LVL field is modified, incrementally or decrementally, to allow program transitions between two functions or two separate modules. Whenever the program goes from a first function to a second function, the first and the second function can belong to separate modules, the module implements a step 1120 for modifying the LVL field. Two commands are therefore intended to modify the value of the LVL field, a field incrementing CFU_INC command, referenced 1121 in FIG. 3 and a decrementation CFU_DEC command, referenced 1122. Conventionally, the first one makes it possible to control calls to layers lower software, while the second allows to control returns to higher layers.

Le champ LVL constitue donc un compteur du « niveau » (« level » en anglais) où se trouve le logiciel. Commandes CFU INC et CFU_DEC Les commandes CFU_INC et CFU_DEC sont exécutées comme suit : - CFU_INC: Commande: OPE.w = CFU_INC Actions: LVL.a = LVL.b + 1 MID.a = MID.b xor MID.w FID.a = FID.b xor FID.w CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (LVL.a = 0) or (CPT.a >= CPT.b) Conditions d'exception: (ERR.a * 0) or (MID.w * 0) - CFU_DEC: Commande: OPE.w = CFU_DEC Actions: LVL.a = LVL.b - 1 MID.a = MID.b xor MID.w FID.a = FID.b xor FID.w CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (LVL.b = 0) or (CPT.a >= CPT.b) Conditions d'exception: (ERR.a * 0) or (MID.w * 0) L'incrémentation ou la décrémentation du champ oblige le débordement du compteur CPT. Le logiciel est rendu compatible avec ce fonctionnement du module grâce à une programmation du logiciel prévue pour faire correspondre le nombre de balises entre chaque débordement du compteur, la taille du compteur, et les transitions entre fonctions. Cet ajustement du nombre de balises est chose aisée pour l'Homme de l'Art. Par ailleurs, le fait de changer de module, c'est-à-dire de changer la valeur du champ MID entraîne la génération d'une interruption sans activation du drapeau d'erreur (champ ERR). Cette interruption systématique à chaque modification du champ MID permet de gérer les contextes d'exécution du logiciel. Lors d'un changement de fonction et de l'exécution des commandes CFU_INC ou CFU_DEC, les modifications des champs MID ou FID sont réalisées par application de l'opérateur « ou exclusif » (« xor ») entre la valeur courante du champ, qui correspond à un identifiant de la fonction ou du module avant changement, et un identifiant de la fonction ou du module après changement (noté FID.w ou MID.w). Le fait de modifier les valeurs des champs par un opérateur « ou exclusif » et non pas par un changement direct permet une meilleure maitrise de la transition d'une fonction à l'autre. En effet, le résultat est une combinaison de la valeur courante et de la valeur désirée ; donc s'il y a une erreur sur la valeur courante, correspondant à l'identifiant de la fonction avant changement, l'identifiant résultant est lui aussi erroné. Une erreur est propagée par une modification, au lieu d'être écrasée par celle-ci, et si elle n'a pas été détectée, elle peut l'être ultérieurement. L'étape 1100 de mise à jour des valeurs du registre au fur et à mesure de l'exécution du programme résulte soit en une étape 1200 de génération d'une interruption (dans le cas où une erreur s'est produite, ou un changement de module a eu lieu) soit en une réitération 1300 de cette étape 1100. Au cours des itérations, le circuit de traitement 11 peut également exécuter une commande CFU_CTRL, référencée 1400 pour contrôler les valeurs de tous les champs du registre, à l'exception du champ « LVL ». Tout écart entre la valeur de contrôle (la valeur écrite) et la valeur courante entraîne l'activation d'un drapeau d'erreur « ERR.a = 1 » et la génération d'une interruption matérielle 1200. Ce procédé est mis en oeuvre jusqu'à la fin de l'exécution du programme. Les commandes décrites ci-avant permettent de contrôler la bonne exécution du logiciel par un module matériel, ce qui réduit fortement la taille de code propre au programme et le temps d'exécution de code destinés à ce contrôle. En outre, l'utilisation d'une interruption matérielle favorise la maîtrise des cas d'exception.15 The LVL field is therefore a counter of the "level" ("level" in English) where the software is located. CFU INC and CFU_DEC commands The CFU_INC and CFU_DEC commands are executed as follows: - CFU_INC: Command: OPE.w = CFU_INC Actions: LVL.a = LVL.b + 1 MID.a = MID.b xor MID.w FID.a = FID.b xor FID.w CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (LVL.a = 0) or (CPT.a> = CPT.b) Conditions exception: (ERR.a * 0) or (MID.w * 0) - CFU_DEC: Command: OPE.w = CFU_DEC Actions: LVL.a = LVL.b - 1 MID.a = MID.b xor MID. w FID.a = FID.b xor FID.w CPT.a = CPT.b + CPT.w ERR.a = (ERR.b * 0) or (LVL.b = 0) or (CPT.a> = CPT .b) Exception conditions: (ERR.a * 0) or (MID.w * 0) Incrementing or decrementing the field forces overflow of the CPT counter. The software is made compatible with this module operation by programming the software provided to match the number of tags between each counter overflow, the size of the counter, and the transitions between functions. This adjustment of the number of tags is easy for the skilled person. In addition, the fact of changing the module, that is to say, to change the value of the MID field, causes the generation of an interrupt without activation of the error flag (ERR field). This systematic interruption with each modification of the MID field makes it possible to manage the execution contexts of the software. When changing the function and executing the CFU_INC or CFU_DEC commands, changes to the MID or FID fields are performed by applying the "or exclusive" operator ("xor") between the current value of the field, which corresponds to an identifier of the function or module before change, and an identifier of the function or module after change (noted FID.w or MID.w). Changing the values of the fields by an "exclusive" operator and not by a direct change allows a better control of the transition from one function to another. Indeed, the result is a combination of the current value and the desired value; so if there is an error on the current value, corresponding to the identifier of the function before change, the resulting identifier is also wrong. An error is propagated by a modification, instead of being overwritten by it, and if it has not been detected, it can be later. The step 1100 of updating the values of the register as the program is executed results either in a step 1200 of generating an interrupt (in the case where an error has occurred, or a change of module has taken place) or in a reiteration 1300 of this step 1100. During the iterations, the processing circuit 11 can also execute a command CFU_CTRL, referenced 1400 to check the values of all the fields of the register, with the exception of the "LVL" field. Any discrepancy between the control value (the written value) and the current value causes the activation of an error flag "ERR.a = 1" and the generation of a hardware interrupt 1200. This process is implemented until the end of program execution. The commands described above make it possible to control the good execution of the software by a hardware module, which greatly reduces the size of code specific to the program and the code execution time intended for this control. In addition, the use of a hardware interrupt helps control exceptional cases.15

Claims (10)

REVENDICATIONS1. Procédé de suivi de l'exécution d'un programme mis en oeuvre par ordinateur, ledit programme intégrant dans ses instructions un ensemble de balises (B) permettant le contrôle de ses étapes d'exécution, caractérisé en ce que lors du franchissement d'une balise (B) dans le flux des étapes d'exécution du programme, on transmet en entrée d'une unité de suivi d'exécution des données d'identification associées à cette balise, ladite unité comprenant un registre (10) et un circuit de traitement (11) à portes logiques configure pour lire les données mémorisées dans le registre (10) et mettre en oeuvre sur ces données et sur les données d'identification reçues en entrée par l'unité de suivi d'exécution, des opérations adaptées pour contrôler les données d'identification reçues, ledit circuit de traitement générant ou non une interruption de l'exécution du programme en fonction du résultat de ces opérations. REVENDICATIONS1. A method of monitoring the execution of a program implemented by computer, said program including in its instructions a set of tags (B) for controlling its execution steps, characterized in that when crossing a tag (B) in the flow of the program execution steps, the identification data associated with this beacon is transmitted as input to an execution tracking unit, said unit comprising a register (10) and a control circuit. process (11) with logic gates configured to read the data stored in the register (10) and implement on these data and on the identification data input by the execution tracking unit, operations adapted to control the received identification data, said processing circuit or not generating an interruption in the execution of the program according to the result of these operations. 2. Procédé selon la revendication 1, dans lequel, les données d'identification d'une balise comportent une valeur de compteur de suivi d'exécution associée à la balise, le registre comportant un champ (CPT) correspondant, le circuit de traitement (11) comparant la valeur de compteur de la balise à la valeur de compteur du champ correspondant dans le registre (10) et mettant à jour cette dernière valeur par incrémentation du champ correspondant dans le registre, lors d'un franchissement de balise (B). The method according to claim 1, wherein the identification data of a tag includes an execution tracking counter value associated with the tag, the register having a corresponding field (CPT), the processing circuit ( 11) comparing the counter value of the beacon with the counter value of the corresponding field in the register (10) and updating this last value by incrementing the corresponding field in the register, during a beacon crossing (B) . 3. Procédé selon la revendication précédente, dans lequel, les données d'identification d'une balise comportent des données d'identification de fonction associées à la balise, le registre comportant un champ (FID) correspondant, le circuit de traitement (11) comparant les données de la balise à celles de ce champ dans le registre et, lors d'un franchissement d'une balise à l'occasion de l'appel de l'exécution d'une seconde fonction dans le cours de l'exécution d'une première fonction, remplaçant dans le champ (FID) d'identification de fonction du registre (10) des données d'identification de la première fonction par des données d'identification de la seconde fonction. 3. Method according to the preceding claim, wherein the identification data of a beacon comprise function identification data associated with the beacon, the register comprising a corresponding field (FID), the processing circuit (11). comparing the data of the beacon to that of this field in the register and, when crossing a beacon during the call of the execution of a second function in the course of the execution of a first function, replacing in the function identification field (FID) of the register (10) of the identification data of the first function by identification data of the second function. 4. Procédé selon la revendication 3, dans lequel la première et la deuxième fonctions appartiennent à des modules différents, et le circuit de traitement (11) remplaçant en outre dans un champ d'identification de modules (MID) du registre (10) des données dépendant du module de la première fonction par des données dépendant du module de la seconde fonction, les données d'identification d'une balise comportant des données d'identification de module que le circuit de traitement (11) compare à celles du champ correspondant dans le registre. The method of claim 3, wherein the first and second functions belong to different modules, and the processing circuit (11) further replacing in a module identification field (MID) of the register (10) data dependent on the module of the first function by data dependent on the module of the second function, the identification data of a beacon comprising module identification data that the processing circuit (11) compares with those of the corresponding field in the register. 5. Procédé selon l'une des revendications 3 ou 4, dans lequel les données dépendant de la seconde fonction ou du second module sont obtenues respectivement par application de l'opérateur « ou exclusif bit à bit» entre les données de la première fonction ou du premier module et un identifiant de la seconde fonction ou du second module. 5. Method according to one of claims 3 or 4, wherein the data dependent on the second function or the second module are respectively obtained by applying the operator "or bitwise exclusive" between the data of the first function or of the first module and an identifier of the second function or the second module. 6. Procédé selon l'une des revendications précédentes, dans lequel, à chaque mise à jour des données des champs d'identification du registre, le circuit de traitement (11) met à jour des données d'un champ (LVL) de suivi et de contrôle des modifications des champs d'identification. The method according to one of the preceding claims, wherein, at each update of the data of the register identification fields, the processing circuit (11) updates data of a tracking field (LVL). and control changes to the identification fields. 7. Procédé selon la revendication précédente, dans lequel, à chaque mise à jour des données du champ (LVL) de suivi et de contrôle des modifications des champs d'identification, le circuit de traitement (11) remet à zéro la valeur du compteur (CPT) de suivi d'exécution du programme (CPT). 7. Method according to the preceding claim, wherein, at each update of the field data (LVL) tracking and control changes of the identification fields, the processing circuit (11) resets the counter value. (CPT) program performance monitoring (CPT). 8. Unité de suivi d'exécution d'un programme, comprenant sur un même support matériel: - un registre (10), et - un circuit de traitement (11), à portes logiques configuré pour lire les données mémorisées dans le registre (10) et mettre en oeuvre le procédé selon l'une des revendications précédentes. 8. A unit for monitoring the execution of a program, comprising on the same hardware support: - a register (10), and - a logic gate processing circuit (11) configured to read the data stored in the register ( 10) and implement the method according to one of the preceding claims. 9. Unité de suivi d'exécution d'un programme selon la revendication précédente, dans lequel le registre (10) comprend 32 bits. 9. The program execution tracking unit according to the preceding claim, wherein the register (10) comprises 32 bits. 10. Carte à puce (2) comprenant une puce (20) et une unité de suivi d'exécution selon l'une des revendications 8 ou 9, le circuit de traitement (11) et le registre (10) étant fondus avec ladite puce. 10. Smart card (2) comprising a chip (20) and a performance tracking unit according to one of claims 8 or 9, the processing circuit (11) and the register (10) being melted with said chip .
FR1254221A 2012-05-09 2012-05-09 METHOD FOR MONITORING THE EXECUTION OF A SOFTWARE AND SOFTWARE FOR THE IMPLEMENTATION OF THE METHOD Active FR2990533B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
FR1254221A FR2990533B1 (en) 2012-05-09 2012-05-09 METHOD FOR MONITORING THE EXECUTION OF A SOFTWARE AND SOFTWARE FOR THE IMPLEMENTATION OF THE METHOD

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1254221A FR2990533B1 (en) 2012-05-09 2012-05-09 METHOD FOR MONITORING THE EXECUTION OF A SOFTWARE AND SOFTWARE FOR THE IMPLEMENTATION OF THE METHOD

Publications (2)

Publication Number Publication Date
FR2990533A1 true FR2990533A1 (en) 2013-11-15
FR2990533B1 FR2990533B1 (en) 2015-02-13

Family

ID=47019087

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1254221A Active FR2990533B1 (en) 2012-05-09 2012-05-09 METHOD FOR MONITORING THE EXECUTION OF A SOFTWARE AND SOFTWARE FOR THE IMPLEMENTATION OF THE METHOD

Country Status (1)

Country Link
FR (1) FR2990533B1 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4177780A1 (en) * 2021-11-09 2023-05-10 Institut Mines Telecom Method for detecting an attempt at linear extraction of the contents of a memory
WO2023083776A1 (en) * 2021-11-09 2023-05-19 Institut Mines Telecom Process for detecting an attempted linear extraction of the content of a memory
FR3140186A1 (en) * 2022-09-22 2024-03-29 Institut Mines Telecom Method for detecting an attempt to linearly extract the contents of a memory

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226749B1 (en) * 1995-07-31 2001-05-01 Hewlett-Packard Company Method and apparatus for operating resources under control of a security module or other secure processor
US20050182990A1 (en) * 2002-08-30 2005-08-18 Infineon Technologies Ag Data processing apparatus having program counter sensor
US6934887B1 (en) * 1999-09-20 2005-08-23 Giesecke & Devrient Gmbh Method for protecting a program flow
US20070255980A1 (en) * 2006-04-28 2007-11-01 Takashi Endo Method and apparatus for detecting false operation of computer
US7441111B2 (en) * 2001-11-16 2008-10-21 Giesecke & Devrient Gmbh Controlled program execution by a portable data carrier

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226749B1 (en) * 1995-07-31 2001-05-01 Hewlett-Packard Company Method and apparatus for operating resources under control of a security module or other secure processor
US6934887B1 (en) * 1999-09-20 2005-08-23 Giesecke & Devrient Gmbh Method for protecting a program flow
US7441111B2 (en) * 2001-11-16 2008-10-21 Giesecke & Devrient Gmbh Controlled program execution by a portable data carrier
US20050182990A1 (en) * 2002-08-30 2005-08-18 Infineon Technologies Ag Data processing apparatus having program counter sensor
US20070255980A1 (en) * 2006-04-28 2007-11-01 Takashi Endo Method and apparatus for detecting false operation of computer

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4177780A1 (en) * 2021-11-09 2023-05-10 Institut Mines Telecom Method for detecting an attempt at linear extraction of the contents of a memory
WO2023083776A1 (en) * 2021-11-09 2023-05-19 Institut Mines Telecom Process for detecting an attempted linear extraction of the content of a memory
FR3140186A1 (en) * 2022-09-22 2024-03-29 Institut Mines Telecom Method for detecting an attempt to linearly extract the contents of a memory

Also Published As

Publication number Publication date
FR2990533B1 (en) 2015-02-13

Similar Documents

Publication Publication Date Title
US10565093B1 (en) Providing cognitive intelligence across continuous delivery pipeline data
US20230085001A1 (en) Testing and remediating compliance controls
US11687645B2 (en) Security control method and computer system
US10419216B2 (en) Keying infrastructure
EP1161725B1 (en) Method for monitoring a programme flow
US10599419B2 (en) Secure firmware updates using virtual machines to validate firmware packages
US9684788B2 (en) Self-repair and distributed-repair of applications
US10649834B2 (en) Distributed product deployment validation
FR2990533A1 (en) Program execution monitoring method for smart card, involves performing set of operations, and arranging processing unit to generate interruption of execution of program according to result of set of operations
US20190303613A1 (en) Cognitive api policy manager
US9519528B2 (en) Checking undoability of an API-controlled computing system
FR2904129A1 (en) HEART PROCESSOR WITH PILOT FREQUENCY AND METHOD FOR STARTING THE HEART PROCESSOR IN A PROGRAM MODE
US9141803B2 (en) Self-healing of operating system components
FR3025627A1 (en) HIGH PERFORMANCE MECHANISM FOR GENERATING JOURNALIZATION INFORMATION OF A COMPUTER PROCESS
US10162754B2 (en) Lateral cast out of cache memory
FR2889005A1 (en) PERMANENT MATERIAL INTEGRITY OF DATA
US9589133B2 (en) Preventing return-oriented programming exploits
US20180260288A1 (en) Recovery of local resource
US10146529B2 (en) Monitoring rules declaration and automatic configuration of the monitoring rules
US20190155649A1 (en) Running complex workflows in distributed systems while protecting consistency and ensuring progress despite failures
US11520866B2 (en) Controlling processor instruction execution
US10776249B2 (en) Flexible and in-line register comparison for bug analysis
EP1089175B1 (en) Secured computer system
US10169197B2 (en) Temporary breakpoints during debug process
EP3295297B1 (en) Method of securing a comparison of data during the execution of a program

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9

PLFP Fee payment

Year of fee payment: 10

PLFP Fee payment

Year of fee payment: 11

CA Change of address

Effective date: 20230220

CD Change of name or company name

Owner name: IDEMIA IDENTITY & SECURITY FRANCE, FR

Effective date: 20230220

PLFP Fee payment

Year of fee payment: 12

PLFP Fee payment

Year of fee payment: 13