FR3094513A1 - Procédé d'authentification d'un processeur - Google Patents
Procédé d'authentification d'un processeur Download PDFInfo
- Publication number
- FR3094513A1 FR3094513A1 FR1903346A FR1903346A FR3094513A1 FR 3094513 A1 FR3094513 A1 FR 3094513A1 FR 1903346 A FR1903346 A FR 1903346A FR 1903346 A FR1903346 A FR 1903346A FR 3094513 A1 FR3094513 A1 FR 3094513A1
- Authority
- FR
- France
- Prior art keywords
- arithmetic
- instruction
- logic unit
- result
- processor
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000001419 dependent effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 238000007620 mathematical function Methods 0.000 description 3
- 238000003672 processing method Methods 0.000 description 2
- 239000004020 conductor Substances 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2129—Authenticate client device independently of the user
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Storage Device Security (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
Abstract
Procédé d'authentification d'un processeur
La présente description concerne un procédé (200) d'authentification d'un processeur (2000), comportant une unité arithmétique et logique (2060), comprenant les étapes suivantes : la réception, sur une première borne de l'unité arithmétique et logique (2060), d'au moins un opérande (OP1, ..., OPN) décodé d'un code opératoire à exécuter (OPCODE) ; et la réception, sur une deuxième borne de l'unité arithmétique et logique (2060), d'une première instruction (ISNTR-SIG) combinant une deuxième instruction (INSTR) du code opératoire à exécuter (OPCODE) et au moins un résultat (R) précédent de ladite unité arithmétique et logique (2060), ledit au moins un résultat (R) précédent étant stocké dans une banque de registres de résultats (2040).
Figure pour l'abrégé : Fig. 3
Description
La présente description concerne de façon générale les dispositifs électroniques et plus particulièrement les processeurs. La présente description concerne plus particulièrement un mode de fonctionnement d'un processeur.
Un processeur, compris dans la plupart des dispositifs électroniques actuels, est une unité de traitement qui exécute des codes opératoires.
Les processeurs sont fréquemment sujets à des tentatives de clonage et d'émulation des codes opératoires qu'ils doivent exécuter.
Il serait souhaitable d'améliorer au moins en partie certains aspects des procédés de mise en oeuvre connus des processeurs, et, plus particulièrement, d'améliorer au moins en partie les procédés d'authentification exécutés par un processeur.
Un mode de réalisation pallie tout ou partie des inconvénients des procédés de mise en oeuvre de processeur connus.
Un mode de réalisation pallie tout ou partie des inconvénients des procédés d'authentification connus mis en oeuvre par un processeur.
Un mode de réalisation prévoit un procédé d'authentification d'un processeur, comportant une unité arithmétique et logique, comprenant les étapes suivantes : la réception, sur une première borne de l'unité arithmétique et logique, d'au moins un opérande décodé d'un code opératoire à exécuter ; et la réception, sur une deuxième borne de l'unité arithmétique et logique, d'une première instruction combinant une deuxième instruction du code opératoire à exécuter et au moins un résultat précédent de ladite unité arithmétique et logique, ledit au moins un résultat précédent étant stocké dans une banque de registres de résultats.
Selon un mode de réalisation, la banque de registres de résultat est adaptée à fonctionner comme un registre à décalage dans lequel la dernière information stockée est la première information à être supprimée, ou comme un registre à décalage à réaction linéaire.
Selon un mode de réalisation, la banque de registres de résultat est adaptée à fournir un signal de sortie dépendant d'au moins un résultat précédent de ladite unité arithmétique.
Selon un mode de réalisation, ladite première instruction est fournie par une sortie d'un circuit de combinaison.
Selon un mode de réalisation, le circuit de combinaison reçoit en entrée ladite deuxième instruction du code opératoire à exécuter et des données prenant en compte ledit au moins un résultat précédent de ladite unité arithmétique et logique.
Selon un mode de réalisation, le procédé comprend en outre le traitement, par l'unité arithmétique et logique, de ladite première instruction et du au moins un opérande.
Selon un mode de réalisation, ladite première instruction combine ladite deuxième instruction, ledit au moins un résultat précédent de ladite unité arithmétique et logique, et au moins un code opératoire exécuté précédemment par le processeur.
Un autre mode de réalisation prévoit un processeur dans lequel une unité arithmétique et logique comprend : une première borne adaptée à recevoir au moins un opérande décodé d'un code opératoire à exécuter ; et une deuxième borne adaptée à recevoir une première instruction combinant une deuxième instruction d'un code opératoire à exécuter et au moins un résultat précédent de ladite unité arithmétique et logique, ledit au moins un résultat précédent étant stocké dans une banque de registres de résultats.
Selon un mode de réalisation, le processeur comprend en outre un circuit de combinaison adapté à fournir ladite première instruction à la deuxième borne de l'unité arithmétique et logique.
Selon un mode de réalisation, le circuit de combinaison est adapté à recevoir en entrée, ladite deuxième instruction du code opératoire à exécuter et des données prenant en compte ledit au moins un résultat précédent.
Selon un mode de réalisation, le processeur comprend en outre une banque de registres de résultats adaptée à stocker ledit au moins un résultat précédent.
Selon un mode de réalisation, l'unité arithmétique et logique est adaptée à traiter ladite première instruction reçue sur sa première borne et ledit au moins un opérande reçu sur sa deuxième borne.
Selon un mode de réalisation, ladite première instruction combine ladite deuxième instruction décodée du code opératoire à exécuter, ledit au moins un résultat précédent de ladite unité arithmétique et logique et au moins un code opératoire exécuté précédemment par le processeur.
Selon un mode de réalisation, le processeur comprend en outre un circuit de décodage adapté à décoder le code opératoire en ledit au moins un opérande et en ladite deuxième instruction.
Selon un mode de réalisation, le processeur comprend en outre un multiplexeur adapté à recevoir ledit au moins un opérande et à le fournir à la première borne de l'unité arithmétique et logique.
Un autre mode de réalisation prévoit une instruction mise en oeuvre par un processeur décrit précédemment, comprenant une unité arithmétique et logique prenant en compte au moins un résultat précédant de ladite unité arithmétique et logique, ce résultat étant stocké dans une banque de registres de résultats.
Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles :
De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques.
Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation décrits ont été représentés et sont détaillés. En particulier, tous les éléments composant l'architecture d'un processeur ne seront pas décrits, seuls les éléments relatifs aux modes de réalisation décrits seront détaillés, ces éléments s'adaptant aux architectures de processeur usuelles.
Sauf précision contraire, lorsque l'on fait référence à deux éléments connectés entre eux, cela signifie directement connectés sans éléments intermédiaires autres que des conducteurs, et lorsque l'on fait référence à deux éléments reliés ou couplés entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés ou couplés par l'intermédiaire d'un ou plusieurs autres éléments.
Dans la description qui suit, lorsque l'on fait référence à des qualificatifs de position absolue, tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc., ou relative, tels que les termes "dessus", "dessous", "supérieur", "inférieur", etc., ou à des qualificatifs d'orientation, tels que les termes "horizontal", "vertical", etc., il est fait référence sauf précision contraire à l'orientation des figures.
Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement", et "de l'ordre de" signifient à 10 % près, de préférence à 5 % près.
On appelle :
- code opératoire : une opération à exécuter par un processeur et comportant une instruction et un ou plusieurs opérandes ;
- opérande d'un code opératoire : une valeur numérique, logique, alphanumérique, etc., que contient le code opératoire ;
- instruction d'un code opératoire : une opération mathématique ou logique effective que l'on applique à un ou plusieurs opérandes du code opératoire ; et
- commande : un ensemble ou une succession de codes opératoires.
- code opératoire : une opération à exécuter par un processeur et comportant une instruction et un ou plusieurs opérandes ;
- opérande d'un code opératoire : une valeur numérique, logique, alphanumérique, etc., que contient le code opératoire ;
- instruction d'un code opératoire : une opération mathématique ou logique effective que l'on applique à un ou plusieurs opérandes du code opératoire ; et
- commande : un ensemble ou une succession de codes opératoires.
La figure 1 est un organigramme illustrant un procédé de traitement, par un processeur, d'un code opératoire à exécuter. Ce procédé de traitement est un procédé de traitement classique utilisé par un processeur usuel. A titre d'exemple, le processeur est un processeur de type RISC ("Reduced Instruction Set Computing").
A une étape 10 (IF, "Intruction Fetch"), un code opératoire est fourni, par exemple par un bus, au processeur. A titre d'exemple, le code opératoire est chargé à partir d'une mémoire.
A une étape 12 (ID, "Instruction Decode"), le code opératoire est décodé par une unité de décodage du processeur. Plus particulièrement, le code opératoire est converti en une instruction et un ou plusieurs opérandes.
A une étape 14 (EX, "Execution"), le code opératoire décodé, c'est-à-dire l'instruction et le ou les opérandes, est fourni à une unité arithmétique et logique comprise dans le processeur. L'unité arithmétique et logique est chargée de mettre en oeuvre le code opératoire, en réalisant des calculs sur les opérandes du code opératoire conformément à l'instruction du code opératoire à exécuter.
A une étape 16 (MEM, "Memory Access"), l'unité arithmétique et logique demande accès à un registre d'une banque de registres ou pile, pour y stocker le résultat des calculs du code opératoire exécuté. A cette étape, le processeur peut, en outre, accéder à une mémoire externe pour, par exemple, y lire et/ou écrire une ou plusieurs données.
A une étape 18 (WB, "Write Back"), l'unité arithmétique et logique fournit le résultat de ses calculs à la banque de registres pour les stocker dans un registre.
La figure 2 illustre un mode de mise en oeuvre d'un procédé 100 d'authentification d'un processeur 1000. La figure 2 comprend un organigramme (a) illustrant les étapes du procédé d'authentification 100, et un schéma (b), sous forme de blocs, illustrant une architecture simplifiée du processeur 1000.
Le procédé d'authentification 100 comprend :
- une étape 110 de chargement, par le processeur 1000, d'un code opératoire à exécuter ;
- une étape 120 de décodage du code opératoire à exécuter ; et
- une étape 130 de traitement du code opératoire à exécuter.
- une étape 110 de chargement, par le processeur 1000, d'un code opératoire à exécuter ;
- une étape 120 de décodage du code opératoire à exécuter ; et
- une étape 130 de traitement du code opératoire à exécuter.
L'étape 110 est identique à l'étape 10 décrite en relation avec la figure 1. Un code opératoire OPCODE est reçu et chargé par le processeur 1000.
L'étape 120 est identique à l'étape 12 décrite en relation avec la figure 1. Le code opératoire OPCODE est décodé, par une unité de décodage 1010 (DEC), en un ou plusieurs opérandes OP1, ..., OPN, et en une instruction INSTR.
L'étape 130 comprend des étapes similaires aux étapes 14, 16 et 18 décrites en relation avec la figure 1 mais comprend en outre l'utilisation d'un ou plusieurs codes opératoires précédemment exécutés par le processeur 1000. Le détail de l'étape 130 sera décrit ci-après en relation avec la description de l'architecture du processeur 1000.
Le processeur 1000 comprend :
- l'unité de décodage 1010 ;
- un multiplexeur 1020 (MUX) ;
- une banque de registres 1030 (REGLIST) ;
- une banque de registres de contexte 1040 (CONTEXT) ;
- un circuit de combinaison 1050 (COMB) ; et
- une unité arithmétique et logique 1060 (ALU).
- l'unité de décodage 1010 ;
- un multiplexeur 1020 (MUX) ;
- une banque de registres 1030 (REGLIST) ;
- une banque de registres de contexte 1040 (CONTEXT) ;
- un circuit de combinaison 1050 (COMB) ; et
- une unité arithmétique et logique 1060 (ALU).
Comme indiqué précédemment, l'unité de décodage 1010 permet de décoder le code opératoire OPCODE en plusieurs opérandes OP1, ..., OPN, et en une instruction INSTR. Ainsi, l'unité de décodage 1010 reçoit, en entrée, le code opératoire OPCODE chargé à l'étape 110, et fournit, en sortie, les opérandes OP1, ..., OPN, et l'instruction INSTR (étape 120). Plus particulièrement, l'unité de décodage 1010 fournit les opérantes OP1, ..., OPN à des entrées du multiplexeur 1020, et l'instruction INSTR à une entrée du circuit de combinaison 1050.
Le multiplexeur 1020 permet de choisir et de diriger les opérandes OP1, ..., OPN, nécessaires au traitement du code opératoire OPCODE vers l'unité arithmétique et logique 1060. En variante, le multiplexeur 1020 dirige tout ou partie des opérandes vers le circuit de combinaison 1050. Ainsi, le multiplexeur 1020 reçoit, en entrée, les opérandes OP1, ..., OPN et par exemple une sortie de la banque de registres 1030. Le multiplexeur 1020 transmet, en sortie, les opérandes OP1, ..., OPN à l'unité arithmétique et logique 1060 et à une entrée du circuit de combinaison 1050.
La banque de registres 1030 permet de stocker temporairement, dans des registres, des données, par exemple des opérandes OP1, ..., OPN du code opératoire OPCODE, des résultats de l'unité arithmétique et logique 1060, etc. La banque de registres 1030 peut permettre en outre de fournir d'autres opérandes, par exemple directement ou alors via le multiplexeur 1020, à l'unité arithmétique et logique 1060. La banque de registres 1030 reçoit, en entrée, une sortie de l'unité arithmétique et logique 1060 et par exemple la sortie du multiplexeur 1020. La banque de registres 1030 fournit, en sortie, des données à l'unité arithmétique et logique 1060 et, par exemple, au multiplexeur 1020.
La banque de registres de contexte 1040 est une banque de registres stockant, dans des registres, les codes opératoires précédemment exécutés par le processeur 1000. A titre d'exemple, la banque de registres de contexte 1040 peut stocker tout ou partie des codes opératoires précédemment exécutés dans une pile, ou dans une mémoire tampon circulaire, et/ou elle peut leur appliquer, pour les stocker, une fonction mathématique, par exemple une permutation. A titre d'exemple, la banque de registres de contexte 1040 peut prendre en compte le code opératoire à exécuter ou en cours d'exécution. La banque de registres de contexte 1040 reçoit, en entrée, le code opératoire OPCODE afin de le stocker. La banque de registres de contexte 1040 fournit, en sortie, des données au circuit de combinaison 1050.
Le circuit de combinaison 1050 permet de combiner l'instruction INSTR décodée du code opératoire OPCODE avec les données de la sortie de la banque de registres de contexte 1040. En d'autres termes, le circuit de combinaison 1050 permet de fournir, à l'unité arithmétique et logique 1060, une nouvelle instruction comportant une signature de données dépendant des codes opératoires précédemment exécutés par le processeur 1000. Le circuit de combinaison 1050 peut être, par exemple, commandé par un des opérandes décodés du code opératoire OPCODE. On appellera dans la suite de la description cette nouvelle instruction, une instruction signée INSTR-SIG. Ainsi, le circuit de combinaison 1050 reçoit, en entrée, l'instruction INSTR et la sortie de la banque de registres de contexte 1040. Le circuit de combinaison 1050 fournit, en sortie, l'instruction signée INSTR-SIG à l'unité arithmétique et logique 1060. Selon une variante de réalisation, le circuit de combinaison 1050 peut ne combiner que certaines instructions INSTR décodées avec les données de la sortie de la banque de registres de contexte 1040, et transmettre les autres instructions INSTR décodées, sans les signer, directement à l'unité arithmétique et logique 1060.
L'unité arithmétique et logique 1060 permet de mettre en oeuvre le traitement et les calculs du code opératoire OPCODE. En d'autres termes, l'unité arithmétique et logique 1060 applique l'instruction signée INSTR-SIG aux opérandes fournis par le multiplexeur 1020. A titre d'exemple, l'unité arithmétique et logique 1060 peut aussi prendre en compte des données fournies par la banque de registres 1030. L'unité arithmétique et logique 1060 reçoit, en entrée, l'instruction INSTR-SIG du circuit de combinaison 1050, la sortie du multiplexeur 1040 et la sortie de la banque de registres 1030. L'unité arithmétique et logique 1060 fournit, en sortie, un signal de résultat R à l'entrée de la banque de registres 1030.
Le déroulement de l'étape 130 est le suivant. Le circuit de combinaison 1050 combine l'instruction INSTR avec des données provenant de la banque de registres de contexte 1040 pour fournir à l'unité arithmétique et logique 1060 l'instruction signée INSTR-SIG. L'unité arithmétique et logique 1060 effectue les calculs relatifs à l'instruction signée ISNTR-SIG et aux opérandes fournis par le multiplexeur 1020. L'unité arithmétique et logique demande ensuite accès à la banque de registres 1030 pour y stocker le signal de résultat R.
Un avantage de ce mode de réalisation est que, pour un code opératoire OPCODE identique, l'unité arithmétique et logique d'un processeur usuel produira des signaux de résultats R différents de ceux produits par l'unité arithmétique et logique 1060 du processeur 1000 du mode de réalisation. Le signal de résultat R pourrait par exemple servir de signal de contrôle utilisé comme moyen d'authentifier un dispositif lors de son utilisation.
Un exemple d'application de ce mode de réalisation est le suivant. Un processeur reçoit généralement une ou plusieurs commandes comprenant chacune plusieurs codes opératoires. Pour utiliser le procédé de ce mode de réalisation, il suffit qu'une seule instruction relative à un de ces codes opératoires soit signée par le circuit de combinaison 1050. A titre d'exemple, une commande peut ne comprendre qu'une seule instruction signée permettant l'authentification du dispositif. Selon un autre exemple, la totalité des instructions liées à une même commande peuvent être signée par le circuit de combinaison 1050.
Un exemple d'application plus particulier peut être le suivant. On considère une imprimante comprenant un processeur du type du processeur 1000 et une cartouche d'encre adaptée à communiquer des données à l'imprimante. Ces données sont, par exemple, des niveaux de remplissage ou des données d'authentification de la cartouche d'encre. L'installation de la cartouche dans l'imprimante peut être suivie par une série de commandes envoyée par la cartouche à l'imprimante. Si la cartouche est destinée à être installée dans l'imprimante en question, le concepteur de la cartouche aura prévu de préparer les codes opératoires de la série de commandes pour qu'ils soient adaptés à l'architecture du processeur de l'imprimante. En d'autres termes, dans ce cas, les codes opératoires seront adaptés à prendre en compte les données de la banque de registres de contexte 1040. Cependant, si les codes opératoires de la série de commande ne sont pas adaptés à l'architecture du processeur 1000, les résultats R fournis par l'unité arithmétique et logique 1060 ne seront pas ceux attendus par les autres circuits de l'imprimante qui pourront par exemple se mettre en défaut. On notera qu'il suffit qu'une seule instruction de la série de commandes soit signée pour actionner par exemple un mode défaut des autres circuits de l'imprimante. On pourra aussi décider de signer toutes les instructions de la série de commande.
La figure 3 illustre un mode de mise en oeuvre d'un procédé 200 d'authentification d'un processeur 2000. La figure 3 comprend un organigramme (a) illustrant les étapes du procédé d'authentification et un schéma (b), sous forme de blocs, illustrant une architecture simplifiée du processeur 2000. Le procédé 200 et le processeur 2000 sont similaires au procédé 100 et au processeur 1000 décrits en relation avec la figure 2, les différences les séparant seront décrites ci-après.
Le procédé d'authentification 200 comprend :
- une étape 210 de chargement d'un code opératoire à exécuter ;
- une étape 220 de décodage du code opératoire à exécuter ; et
- une étape 230 de traitement du code opératoire à exécuter.
- une étape 210 de chargement d'un code opératoire à exécuter ;
- une étape 220 de décodage du code opératoire à exécuter ; et
- une étape 230 de traitement du code opératoire à exécuter.
L'étape 210 est identique à l'étape 10 décrite en relation avec la figure 1. Un code opératoire OPCODE est reçu et chargé par le processeur 2000.
L'étape 220 est identique à l'étape 12 décrite en relation avec la figure 1. Le code opératoire OPCODE est décodé, par l'unité de décodage 1010 (DEC) du processeur 2000, en un ou plusieurs opérandes OP1, ..., OPN, et en une instruction INSTR.
L'étape 230 diffère de l'étape 130 décrite en relation avec la figure 2 en ce que l'utilisation de codes opératoires précédemment exécutés est remplacé l'utilisation d'un ou plusieurs résultats précédents de l'unité arithmétique et logique 2060 du processeur 2000. Le détail de l'étape 230 sera décrit ci-après en relation avec la description de l'architecture du processeur 2000.
Le processeur 2000 comprend des éléments en commun avec le processeur 1000, ces éléments ne seront pas décrits à nouveau. Ainsi, le processeur 2000 comprend :
- l'unité de décodage 1010 ;
- le multiplexeur 1020 (MUX) ;
- la banque de registres 1030 (REGLIST) ;
- une banque de registres de résultats 2040 (RESULT) ;
- un circuit de combinaison 2050 (COMB) ; et
- l'unité arithmétique et logique 2060 (ALU).
- l'unité de décodage 1010 ;
- le multiplexeur 1020 (MUX) ;
- la banque de registres 1030 (REGLIST) ;
- une banque de registres de résultats 2040 (RESULT) ;
- un circuit de combinaison 2050 (COMB) ; et
- l'unité arithmétique et logique 2060 (ALU).
La banque de registres de résultats 2040 est une banque de registres stockant les résultats précédents de l'unité arithmétique et logique 2060. A titre d'exemple, la banque de registres de résultats 2040 peut stocker les résultats précédents dans une pile, et/ou elle peut leur appliquer, pour les stocker, une fonction mathématique, par exemple une permutation. La banque de registres de résultats 2040 reçoit, en entrée, le résultat R de l'unité arithmétique et logique 2060 afin de le stocker. La banque de registres de résultats 2040 fournit, en sortie, des données au circuit de combinaison 2050, ces données dépendant donc des résultats précédents de l'unité arithmétique et logique 2060. La banque de registre de résultats 2040 est par exemple un registre adapté à fonctionner comme un registre à décalage dans lequel la dernière information stockée est la première information à être supprimée, ou comme un registre à décalage à réaction linéaire.
Le circuit de combinaison 2050 est similaire au circuit de combinaison 1050 décrit en relation avec la figure 2. Le circuit de combinaison 2050 combine l'instruction INSTR décodée du code opératoire OPCODE avec les données de la sortie de la banque de registres de résultats 2040. En d'autres termes, le circuit de combinaison 2050 fournit une instruction signée INSTR-SIG par les résultats précédents de l'unité arithmétique et logique 2060. Ainsi, le circuit de combinaison reçoit, en entrée, l'instruction INSTR et la sortie de la banque de registres de résultats 2040. Le circuit de combinaison 2050 fournit, en sortie, la nouvelle instruction INSTR-SIG à l'unité arithmétique et logique 2060. Selon une variante de réalisation, le circuit de combinaison 2050 peut ne combiner que certaines instructions INSTR décodées avec les données de la sortie de la banque de registres de résultats 2040, et transmettre les autres instructions INSTR, sans les signer, directement à l'unité arithmétique et logique 2060.
L'unité arithmétique et logique 2060 diffère de l'unité arithmétique et logique 1060 décrite en relation avec la figure 2 en ce qu'elle fournit en plus, en sortie, le signal de sortie R à la banque de registres 1030 et à la banque de registres de résultats 2040.
Le déroulement de l'étape 230 se différencie donc du déroulement de l'étape 130 décrite en relation à la figure 1, par le fait que les instructions qui sont signées sont signées avec des données prenant en compte les résultats précédents de l'unité arithmétique et logique 2060.
Ce mode de réalisation présente le même avantage que le mode de réalisation décrit en relation avec la figure 2.
La figure 4 illustre un mode de mise en oeuvre d'un procédé 300 d'authentification d'un processeur 3000. La figure 4 comprend un organigramme (a) illustrant les étapes du procédé d'authentification et un schéma (b), sous forme de blocs, illustrant une architecture simplifiée du processeur 3000.
Les modes de réalisation décrits ci-après sont une combinaison des modes de réalisation décrits en relation avec les figures 2 et 3.
Le procédé d'authentification 300 comprend :
- une étape 310 de chargement d'un code opératoire à exécuter ;
- une étape 320 de décodage du code opératoire à exécuter ; et
- une étape 330 de traitement du code opératoire à exécuter.
- une étape 310 de chargement d'un code opératoire à exécuter ;
- une étape 320 de décodage du code opératoire à exécuter ; et
- une étape 330 de traitement du code opératoire à exécuter.
L'étape 310 est identique à l'étape 10 décrite en relation avec la figure 1. Un code opératoire OPCODE est reçu et chargé par le processeur 3000.
L'étape 320 est identique à l'étape 12 décrite en relation avec la figure 1. Le code opératoire OPCODE est décodé, par une unité de décodage 1010, en un ou plusieurs opérandes OP1, ..., OPN, et en une instruction INSTR.
L'étape 330 est une combinaison des étapes 130 et 230 décrites en relation avec les figures 2 et 3. Plus particulièrement, l'étape 330 comprend l'utilisation d'un ou plusieurs résultats précédents de l'unité arithmétique et logique 3060 du processeur 3000, et l'utilisation d'un ou plusieurs codes opératoires précédemment exécutés par le processeur 3000. Le détail de l'étape 330 sera décrit ci-après en relation avec la description de l'architecture du processeur 3000.
Le processeur 3000 comprend des éléments en commun avec les processeurs 1000 et 2000, ces éléments ne seront pas décrits à nouveau. Ainsi, le processeur 3000 comprend :
- l'unité de décodage 1010 (DEC) ;
- le multiplexeur 1020 (MUX) ;
- la banque de registres 1030 (REGLIST) ;
- une banque de registres de contexte et de résultats 3040 (CONTEXT RESULT) ;
- un circuit de combinaison 3050 (COMB) ; et
- une unité arithmétique et logique 3060 (ALU).
- l'unité de décodage 1010 (DEC) ;
- le multiplexeur 1020 (MUX) ;
- la banque de registres 1030 (REGLIST) ;
- une banque de registres de contexte et de résultats 3040 (CONTEXT RESULT) ;
- un circuit de combinaison 3050 (COMB) ; et
- une unité arithmétique et logique 3060 (ALU).
La banque de registres de contexte et de résultats 3040 est une combinaison de la banque de registres de contexte 1040 décrite en relation avec la figure 2 et de la banque de registres de résultats 2040 décrite en relation avec la figure 3. Plus particulièrement, la banque de registres de contexte et de résultats 3040 est adaptée à stocker des codes opératoires précédemment exécutés par le processeur 3000 et des résultats précédents de l'unité arithmétique et logique 3060. A titre d'exemple, la banque de registres de contexte et de résultats 3040 peut stocker les données dans une pile, et/ou elle peut leur appliquer, pour les stocker une fonction mathématique, par exemple une permutation. La banque de registres de contexte et de résultats 3040 reçoit, en entrée, le résultat R de l'unité arithmétique et logique 3060 et le code opératoire OPCODE afin de les stocker. La banque de registres de contexte et de résultats 3040 fournit, en sortie, des données au circuit de combinaison 3050.
Le circuit de combinaison 3050 est similaire aux circuits de combinaison 1050 et 2050 décrits en relation avec les figures 1 et 2. Le circuit de combinaison 3050 combine l'instruction INSTR décodée du code opératoire OPCODE avec les données de la sortie de la banque de registres de contexte et de résultats 3040. En d'autres termes, le circuit de combinaison 3050 fournit une instruction signée INSTR-SIG par les codes opératoires précédemment exécutés par le processeur 3000 et par les résultats précédents de l'unité arithmétique et logique 3060. Ainsi, le circuit de combinaison reçoit, en entrée, l'instruction INSTR et la sortie de la banque de registres de contexte et de résultats 3040. Le circuit de combinaison 3050 fournit, en sortie, la nouvelle instruction INSTR-SIG à l'unité arithmétique et logique 3060. Selon une variante de réalisation, le circuit de combinaison 3050 peut ne combiner que certaines instructions INSTR décodées avec les données de la sortie de la banque de registres de contexte 3040, et transmettre les autres instructions INSTR décodées, sans les signer, directement à l'unité arithmétique et logique 3060.
L'unité arithmétique et logique 3060 est identique à l'unité arithmétique et logique 2060 décrite en relation avec la figure 3. Ainsi, l'unité arithmétique et logique 3060 fournit le signal de sortie R à la banque de registres 1030 et à la banque de registres de contexte et de résultats 3040.
Le déroulement de l'étape 330 se différencie du déroulement des étapes 130 et 230 décrites en relation avec la figure 2 et 3, par le fait que les instructions qui sont signées sont signées avec des données prenant en compte les codes opératoires précédemment exécutés par le processeur 3000 et prenant en compte les résultats précédents de l'unité arithmétique et logique 3060.
Ce mode de réalisation présente le même avantage que les modes de réalisation décrits en relation avec les figures 2 et 3.
Divers modes de réalisation et variantes ont été décrits. L’homme de l’art comprendra que certaines caractéristiques de ces divers modes de réalisation et variantes pourraient être combinées, et d’autres variantes apparaitront à l’homme de l’art.
Enfin, la mise en oeuvre pratique des modes de réalisation et variantes décrits est à la portée de l’homme du métier à partir des indications fonctionnelles données ci-dessus.
Claims (16)
- Procédé (200, 300) d'authentification d'un processeur (2000, 3000), comportant une unité arithmétique et logique (2060, 3060), comprenant les étapes suivantes :
la réception, sur une première borne de l'unité arithmétique et logique (2060, 3060), d'au moins un opérande (OP1, ..., OPN) décodé d'un code opératoire à exécuter (OPCODE) ; et
la réception, sur une deuxième borne de l'unité arithmétique et logique (2060, 3060), d'une première instruction (ISNTR-SIG) combinant une deuxième instruction (INSTR) du code opératoire à exécuter (OPCODE) et au moins un résultat (R) précédent de ladite unité arithmétique et logique (2060, 3060), ledit au moins un résultat (R) précédent étant stocké dans une banque de registres de résultats (2040). - Procédé selon la revendication 1, dans lequel la banque de registres de résultat (2040) est adaptée à fonctionner comme un registre à décalage dans lequel la dernière information stockée est la première information à être supprimée, ou comme un registre à décalage à réaction linéaire.
- Procédé selon la revendication 1 ou 2, dans lequel la banque de registres de résultat (2040) est adaptée à fournir un signal de sortie dépendant d'au moins un résultat (R) précédent de ladite unité arithmétique (2040).
- Procédé selon l'une quelconque des revendications 1 à 3, dans lequel ladite première instruction (INSTR-SIG) est fournie par une sortie d'un circuit de combinaison (2050, 3050).
- Procédé selon la revendication 4, dans lequel le circuit de combinaison (2050, 3050) reçoit en entrée ladite deuxième instruction (INSTR) du code opératoire à exécuter (OPCODE) et des données prenant en compte ledit au moins un résultat (R) précédent de ladite unité arithmétique et logique (2060, 3060).
- Procédé selon l'une quelconque des revendications 1 à 5, comprenant en outre le traitement, par l'unité arithmétique et logique (1060, 3060), de ladite première instruction (INSTR-SIG) et du au moins un opérande (OP1, ..., OPN).
- Procédé selon l'une quelconque des revendications 1 à 6, dans lequel ladite première instruction (INSTR-SIG) combine ladite deuxième instruction (INSTR), ledit au moins un résultat (R) précédent de ladite unité arithmétique et logique (2060, 3060), et au moins un code opératoire exécuté précédemment par le processeur (3000).
- Processeur (2000, 3000) dans lequel une unité arithmétique et logique (2060, 3060) comprend :
une première borne adaptée à recevoir au moins un opérande (OP1, ..., OPN) décodé d'un code opératoire à exécuter (OPCODE) ; et
une deuxième borne adaptée à recevoir une première instruction (INSTR-SIG) combinant une deuxième instruction (INSTR) d'un code opératoire à exécuter (OPCODE) et au moins un résultat (R) précédent de ladite unité arithmétique et logique (2060, 3060), ledit au moins un résultat (R) précédent étant stocké dans une banque de registres de résultats (2040). - Processeur selon la revendication 8, comprenant en outre un circuit de combinaison (2050, 3050) adapté à fournir ladite première instruction (INSTR-SIG) à la deuxième borne de l'unité arithmétique et logique (2060, 3060).
- Processeur selon la revendication 9, dans lequel le circuit de combinaison (2050, 3050) est adapté à recevoir, en entrée, ladite deuxième instruction (INSTR) du code opératoire à exécuter (OPCODE) et des données prenant en compte ledit au moins un résultat (R) précédent.
- Processeur selon l'une quelconque des revendications 8 à 10, comprenant en outre une banque de registres de résultats (2040) adaptée à stocker ledit au moins un résultat (R) précédent.
- Processeur selon l'une quelconque des revendications 8 à 11, dans lequel l'unité arithmétique et logique (2060, 3060) est adaptée à traiter ladite première instruction (INSTR-SIG) reçue sur sa première borne et ledit au moins un opérande reçu sur sa deuxième borne.
- Processeur selon l'une quelconque des revendications 8 à 12, dans lequel ladite première instruction (INSTR-SIG) combine ladite deuxième instruction (INSTR) décodée du code opératoire à exécuter (OPCODE), ledit au moins un résultat (R) précédent de ladite unité arithmétique et logique (3060) et au moins un code opératoire exécuté précédemment par le processeur (3000).
- Processeur selon l'une quelconque des revendications 8 à 13, comprenant en outre un circuit de décodage (1010) adapté à décoder le code opératoire (OPCODE) en ledit au moins un opérande et en ladite deuxième instruction.
- Processeur selon l'une quelconque des revendications 8 à 14, comprenant en outre un multiplexeur (1020) adapté à recevoir ledit au moins un opérande (OP1, ..., OPN) et à le fournir à la première borne de l'unité arithmétique et logique (1060, 3060).
- Instruction mise en oeuvre par un processeur selon l'une quelconque des revendications 8 à 15, comprenant une unité arithmétique et logique (2060) prenant en compte au moins un résultat (R) précédant de ladite unité arithmétique et logique (2060), ce résultat (R) étant stocké dans une banque de registres de résultats (2040).
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1903346A FR3094513B1 (fr) | 2019-03-29 | 2019-03-29 | Procédé d'authentification d'un processeur |
US16/833,012 US11379238B2 (en) | 2019-03-29 | 2020-03-27 | Processor authentication method through signed instruction |
US17/721,193 US11853765B2 (en) | 2019-03-29 | 2022-04-14 | Processor authentication method |
US18/532,946 US20240103873A1 (en) | 2019-03-29 | 2023-12-07 | Processor authentication method |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR1903346 | 2019-03-29 | ||
FR1903346A FR3094513B1 (fr) | 2019-03-29 | 2019-03-29 | Procédé d'authentification d'un processeur |
Publications (2)
Publication Number | Publication Date |
---|---|
FR3094513A1 true FR3094513A1 (fr) | 2020-10-02 |
FR3094513B1 FR3094513B1 (fr) | 2023-07-14 |
Family
ID=67660260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR1903346A Active FR3094513B1 (fr) | 2019-03-29 | 2019-03-29 | Procédé d'authentification d'un processeur |
Country Status (2)
Country | Link |
---|---|
US (3) | US11379238B2 (fr) |
FR (1) | FR3094513B1 (fr) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2957438B1 (fr) | 2010-03-09 | 2012-03-30 | Proton World Int Nv | Detection d'un deroutement d'un canal de communication d'un dispositif de telecommunication couple a un circuit nfc |
FR2969341B1 (fr) | 2010-12-20 | 2013-01-18 | Proton World Int Nv | Gestion de canaux de communication dans un dispositif de telecommunication couple a un circuit nfc |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0825528A2 (fr) * | 1996-08-23 | 1998-02-25 | Matsushita Electric Industrial Co., Ltd. | Processeur de signaux numériques |
US20100070953A1 (en) * | 2008-09-18 | 2010-03-18 | Infineon Technologies Ag | Compiler system and a method of compiling a source code into an encrypted machine language code |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6594752B1 (en) | 1995-04-17 | 2003-07-15 | Ricoh Company, Ltd. | Meta-address architecture for parallel, dynamically reconfigurable computing |
US5974529A (en) * | 1998-05-12 | 1999-10-26 | Mcdonnell Douglas Corp. | Systems and methods for control flow error detection in reduced instruction set computer processors |
US6574728B1 (en) * | 1999-08-10 | 2003-06-03 | Cirrus Logic, Inc. | Condition code stack architecture systems and methods |
US6308256B1 (en) | 1999-08-18 | 2001-10-23 | Sun Microsystems, Inc. | Secure execution of program instructions provided by network interactions with processor |
US7941651B1 (en) * | 2002-06-27 | 2011-05-10 | Intel Corporation | Method and apparatus for combining micro-operations to process immediate data |
GB0215028D0 (en) | 2002-06-28 | 2002-08-07 | Critical Blue Ltd | Microarchitecture description |
US7035891B2 (en) * | 2002-08-27 | 2006-04-25 | Intel Corporation | Reduced-hardware soft error detection |
US20060095975A1 (en) * | 2004-09-03 | 2006-05-04 | Takayoshi Yamada | Semiconductor device |
US7581079B2 (en) | 2005-03-28 | 2009-08-25 | Gerald George Pechanek | Processor composed of memory nodes that execute memory access instructions and cooperate with execution nodes to execute function instructions |
US9177111B1 (en) | 2006-11-14 | 2015-11-03 | Hitachi Global Storage Technologies Netherlands B.V. | Systems and methods for protecting software |
US8452934B2 (en) * | 2008-12-16 | 2013-05-28 | Sandisk Technologies Inc. | Controlled data access to non-volatile memory |
US20110167496A1 (en) | 2009-07-07 | 2011-07-07 | Kuity Corp. | Enhanced hardware command filter matrix integrated circuit |
DE102011005209B4 (de) * | 2011-03-07 | 2016-06-23 | Infineon Technologies Ag | Programmanweisungsgesteuerte Instruktionsflusskontrolle |
US8892851B2 (en) * | 2011-11-02 | 2014-11-18 | International Business Machines Corporation | Changing opcode of subsequent instruction when same destination address is not used as source address by intervening instructions |
US9652246B1 (en) * | 2012-12-20 | 2017-05-16 | Marvell International Ltd. | Banked physical register data flow architecture in out-of-order processors |
US11468168B1 (en) * | 2017-04-11 | 2022-10-11 | Apple Inc. | Systems and methods for optimizing authentication branch instructions |
FR3076923A1 (fr) * | 2018-01-16 | 2019-07-19 | Stmicroelectronics (Rousset) Sas | Procede et circuit d'authentification |
US11269986B2 (en) * | 2018-10-26 | 2022-03-08 | STMicroelectronics (Grand Ouest) SAS | Method for authenticating a program and corresponding integrated circuit |
-
2019
- 2019-03-29 FR FR1903346A patent/FR3094513B1/fr active Active
-
2020
- 2020-03-27 US US16/833,012 patent/US11379238B2/en active Active
-
2022
- 2022-04-14 US US17/721,193 patent/US11853765B2/en active Active
-
2023
- 2023-12-07 US US18/532,946 patent/US20240103873A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0825528A2 (fr) * | 1996-08-23 | 1998-02-25 | Matsushita Electric Industrial Co., Ltd. | Processeur de signaux numériques |
US20100070953A1 (en) * | 2008-09-18 | 2010-03-18 | Infineon Technologies Ag | Compiler system and a method of compiling a source code into an encrypted machine language code |
Non-Patent Citations (2)
Title |
---|
ROBERT PHILIP LEE: "Schemes and Applications for Binding Hardware and Software in Computing Devices", 31 December 2018 (2018-12-31), XP055632559, Retrieved from the Internet <URL:https://pure.royalholloway.ac.uk/portal/files/33904810/2019LeeRPPhD.pdf> [retrieved on 20191015] * |
WERNER MARIO ET AL: "Sponge-Based Control-Flow Protection for IoT Devices", 2018 IEEE EUROPEAN SYMPOSIUM ON SECURITY AND PRIVACY (EUROS&P), IEEE, 24 April 2018 (2018-04-24), pages 214 - 226, XP033373207, DOI: 10.1109/EUROSP.2018.00023 * |
Also Published As
Publication number | Publication date |
---|---|
US20220244961A1 (en) | 2022-08-04 |
US11853765B2 (en) | 2023-12-26 |
US20240103873A1 (en) | 2024-03-28 |
US11379238B2 (en) | 2022-07-05 |
FR3094513B1 (fr) | 2023-07-14 |
US20200310805A1 (en) | 2020-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3716119A1 (fr) | Procédé d'authentification d'un processeur | |
FR3094513A1 (fr) | Procédé d'authentification d'un processeur | |
FR2635601A1 (fr) | Processeur de donnees a fonctions multiples | |
CN102377988A (zh) | 车辆信息显示装置和方法 | |
EP2988243A1 (fr) | Dispositif et procédé pour assurer des services de module de plateforme sécurisée | |
EP3008604A1 (fr) | Pilote d'interface micrologicielle extensible unifiee (uefi) et protocole | |
US9870200B2 (en) | Decimal and binary floating point rounding | |
US7840622B2 (en) | Method and floating point unit to convert a hexadecimal floating point number to a binary floating point number | |
JPH1196021A (ja) | 数を表している二つの組の電気信号を比較する方法 | |
EP4068128A1 (fr) | Démarrage sécurisé d'une unité de traitement | |
FR3101980A1 (fr) | Processeur | |
EP0760119B1 (fr) | Dispositif de mise en uvre numerique d'une operation de division | |
EP0678807A1 (fr) | Dispositif de calcul arithmétique et logique et procédé de commande | |
US6745318B1 (en) | Method and apparatus of configurable processing | |
WO2016085679A1 (fr) | Système et procédé pour gérer des pipelines dans des architectures de circuits intégrés reconfigurables | |
FR2804523A1 (fr) | Procede et dispositif pour mettre en oeuvre deux architectures dans une puce | |
FR3101983A1 (fr) | Détermination d'un bit indicateur | |
US20030229659A1 (en) | Bit exactness support in dual-MAC architecture | |
FR2805361A1 (fr) | Procede d'acquisition de parametres d'arrondissement de fmac | |
US11080054B2 (en) | Data processing apparatus and method for generating a status flag using predicate indicators | |
US20140136582A1 (en) | Method and apparatus for digital automatic gain control | |
EP0947913A1 (fr) | Procédé de réalisation amélioré d'une division entière | |
EP4068680A1 (fr) | Stockage sécurisé de clefs de chiffrement | |
US20220206747A1 (en) | Efficient Dual-path Floating-Point Arithmetic Operators | |
KR100315303B1 (ko) | 디지탈 신호 처리기 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PLFP | Fee payment |
Year of fee payment: 2 |
|
PLSC | Publication of the preliminary search report |
Effective date: 20201002 |
|
PLFP | Fee payment |
Year of fee payment: 3 |
|
PLFP | Fee payment |
Year of fee payment: 4 |
|
PLFP | Fee payment |
Year of fee payment: 5 |
|
PLFP | Fee payment |
Year of fee payment: 6 |