Brevet FR3114668A1 — publié le 20220401

Selon un aspect, il est proposé un système sur puce qui comprend : - une alimentation électrique persistante (VP) ; - un moyen anti-répétition comprenant un dispositif de compteur monotone (MTC) comportant un registre de compteur volatil (CNT) alimenté par l’alimentation persistante (VP). Référence : Fig. 1 Système sur puce pour applications de cryptographie incluant un compteur monotone et procédé de mise en œuvre associé Les modes de réalisation de la présente invention concernent un système sur puce, en particulier un système sur puce comprenant un dispositif de compteur monotone pour applications de cryptographie et un procédé de mise en œuvre d’un tel dispositif de compteur monotone. Les appareils électroniques, comme on le sait, sont largement répandus, notamment dans le domaine de la communication sans fil, comme les appareils électroniques pour l’internet des objets (en anglais « Internet of Things »), où il est nécessaire de crypter les messages échangés entre deux appareils, afin d’obtenir un transfert de données sécurisé. Généralement, les opérations d’envoi et de réception de messages signés et/ou cryptés sont exécutées par des systèmes basés sur un seul système sur puce, incorporée dans les appareils électroniques eux-mêmes. Plus particulièrement, le message est crypté quand le secret du contenu du message est important. Il est ainsi possible, en utilisant un message crypté, de garantir le secret du message, de certifier que le message provient d’un utilisateur autorisé, et de garantir l’intégrité du message. Le message est signé quand le secret du message n’est pas important. Dans ce cas, le message comporte une signature. Ainsi, en utilisant un message signé, il est possible de certifier que le message provient d’un utilisateur autorisé, et de garantir l’intégrité du message. Le message peut aussi être d’abord crypté, puis signé. Toutefois, de tels systèmes cryptographiques peuvent être l’objet d’attaques par répétition (en anglais « replay attacks »), dans lesquelles un utilisateur extérieur (un pirate informatique) enregistre le message envoyé pour le réutiliser. En particulier, dans le cas où le message est un message crypté, le pirate n’est pas capable de lire ou de comprendre le contenu du message puisque celui-ci est crypté. Mais le pirate peut tout de même réutiliser le message crypté pour tromper le destinataire, afin d’amener le destinataire à réaliser une action non voulue. De plus, dans le cas où le message est un message signé, le pirate est capable de voir le contenu et donc de connaître précisément l’action qui peut être réalisée par le destinataire. Le pirate peut donc réutiliser le message signé afin d’amener le destinataire à réaliser une action non voulue qui est connue du pirate. En enregistrant les messages signés dans des communications différentes, le pirate peut constituer une collection de messages signés et les utiliser à sa guise. Pour empêcher l’utilisateur extérieur de réutiliser le message, le message contient aussi généralement un champ anti-répétition (en anglais « anti-replay field » ou « anti-replay field » ou « freshness field »), associé de façon unique à une transaction ou communication spécifique entre deux appareils. Ainsi, un utilisateur extérieur ne peut pas réutiliser un message enregistré car le champ anti-répétition doit être différent de celui précédemment enregistré. Le champ anti-répétition est aussi utilisé dans l’opération de cryptage du message ou dans le calcul de signature pour le message. La valeur du champ anti-répétition n’est pas secrète. Toutefois, le cryptage et le calcul de signature sont exécutés en utilisant ce champ anti-répétition unique et une clé. En particulier, dans le cas d’une cryptographie symétrique, la clé utilisée pour le cryptage et le calcul de signature est une clé secrète connue de l’émetteur et du destinataire. Ainsi, même si le champ anti-répétition n’est pas secret, un utilisateur extérieur ne peut pas déchiffrer le message ni calculer une signature sans connaître cette clé secrète. Par ailleurs, en cas de cryptographie asymétrique, la clé utilisée pour l’opération de cryptage est la clé publique du destinataire, la clé privée du destinataire est utilisée pour le décryptage (seul le destinataire est apte à décrypter). Ainsi, même si le champ anti-répétition n’est pas secret, un utilisateur extérieur ne peut pas décrypter un message sans connaître la clé privée du destinataire. Concernant le calcul de signature en cryptographie asymétrique, la signature est calculée par l’émetteur en utilisant sa clé privée. La signature peut être vérifiée par le destinataire en utilisant la clé publique de l’émetteur. Cependant, un message enregistré ne peut pas être réutilisé car l’utilisateur extérieur ne peut pas générer une signature sans connaître la clé privée de l’émetteur, et parce que la valeur du champ anti-répétition doit être différente de celle du message enregistré. Le champ anti-répétition peut être formé par un horodateur, par un nombre causal ou pseudo-aléatoire (« nonce ») ou par une valeur générée par un compteur monotone. Le compteur monotone est configuré pour incrémenter sa valeur à chaque transaction. L’utilisation d’un compteur monotone garantit donc que la valeur associée à une transaction est supérieure à celle associée à une transaction précédente, et ce type de compteur est généralement utilisé dans des systèmes cryptographiques intégrés monopuces, car il ne nécessite pas de synchronisation temporelle complexe. La valeur du compteur monotone ne peut pas être modifiée de l’extérieur. Ainsi, l’utilisation d’un compteur monotone fournit un mécanisme anti-répétition sécurisé. De plus, le compteur monotone doit avoir un grand nombre de bits pour garantir un nombre d’incréments pouvant être réalisés pendant la durée de vie du système sur puce. On connaît des architectures cryptographiques dans lesquelles le compteur monotone est mis en œuvre en utilisant des pages d’une mémoire non volatile, par exemple une mémoire flash. Toutefois, l’emploi de mémoires non volatiles implique un nombre élevé de cycles d’effacement et d’écriture des mémoires elles-mêmes, afin d’augmenter la valeur du compteur monotone. Ce nombre élevé de cycles provoque un vieillissement des mémoires non volatiles et donc un risque élevé de perte de données. Les mises en œuvre antérieures des compteurs monotones sont basées sur des mémoires flash (ou toute autre mémoire non volatile) où sont allouées des dizaines de pages pour ce service. Pour supporter ce qui précède, il est nécessaire d’effacer ou programmer des régions de la mémoire flash des centaines de millions de fois. Ceci conduit à des pertes de données dues au vieillissement des pages flash. En outre, l’architecture cryptographique est soumise à un risque élevé de perte de données, y compris dans le cas d’une perte d’alimentation électrique au cours d’une opération d’effacement ou d’écriture. De plus, l’incrémentation du registre de compteur volatil implique des modifications dans la mémoire flash. De telles modifications prennent du temps. Le problème se pose donc de fournir une architecture de système sur puce pour applications cryptographiques capable de surmonter les inconvénients susmentionnés. Selon un aspect, il est proposé un système sur puce comprenant : - une alimentation électrique persistante ; - un dispositif de compteur monotone comportant un registre de compteur volatil alimenté par l’alimentation persistante. En particulier, le système sur puce peut comprendre un moyen anti-répétition comprenant ledit dispositif de compteur monotone comportant ledit registre de compteur volatil alimenté par l’alimentation persistante. Une alimentation persistante est une alimentation électrique, comme une batterie de secours, configurée pour maintenir les données de configuration du système pendant l’extinction ou le redémarrage du système sur puce. L’alimentation persistante a une faible probabilité d’être mise hors tension. Le dispositif de compteur monotone est configuré pour augmenter la valeur du registre de compteur volatil à chaque fois que la valeur du registre de compteur volatil est lue. Ainsi, le fait que le registre de compteur volatil soit alimenté par l’alimentation persistante garantit que la valeur du registre de compteur volatil peut être préservée, même en cas d’inactivité du système sur puce (arrêt, attente, etc…). En effet, le risque d’avoir une perte d’alimentation est faible. De plus, l’utilisation d’un registre volatil permet d’accélérer les incréments de la valeur du registre de compteur volatil stockée dans ce registre volatil, comparé à un registre non volatil. Un tel dispositif de compteur monotone peut être utilisé pour fournir un mécanisme anti-répétition. En particulier, la valeur du registre de compteur volatil peut être utilisée dans un champ anti-répétition d’une transaction sécurisée. Selon un mode de réalisation particulièrement avantageux, le dispositif de compteur monotone comprend : - une interface de bus configurée pour recevoir des commandes pour le registre de compteur volatil, - un interpréteur de commandes comportant une unité de commande configurée pour interpréter les commandes reçues sur l’interface de bus et pour commander le registre de compteur volatil selon les commandes reçues sur l’interface de bus. L’interface de bus est configurée pour être connectée à un bus afin de communiquer avec d’autres éléments du système sur puce. Selon un mode de réalisation particulièrement avantageux, l’interpréteur de commandes comprend aussi un registre de perte d’alimentation volatil alimenté par l’alimentation persistante. L’unité de commande est aussi configurée pour : ○ stocker un mot binaire défini dans le registre de perte d’alimentation, ○ lire un mot binaire dans le registre de perte d’alimentation et comparer ce mot binaire au mot binaire défini, ○ émettre une interruption quand l’unité de commande détermine à partir de ladite comparaison que le mot binaire du registre de perte d’alimentation est différent du mot binaire défini, cette interruption étant transmise à l’interface de bus. Le mot binaire défini peut être choisi pendant une phase de conception. Le mot binaire défini est stocké dans le registre de perte d’alimentation quand l’alimentation persistante délivre du courant. Toutefois, en cas de perte d’alimentation de l’alimentation persistante, le mot binaire présent dans le registre de perte d’alimentation est modifié. Le registre de perte d’alimentation sert à garantir l’intégrité des données stockées à l’intérieur du compteur persistant. En effet, en cas de perte d’alimentation de l’alimentation persistante, la valeur du registre de compteur volatil est perdue. Ainsi, en lisant le mot binaire du registre de perte d’alimentation, on peut déterminer si la valeur du registre de compteur volatil est correcte. Selon un mode de réalisation particulièrement avantageux, le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 ». Un tel mot binaire défini est robuste, par exemple contre les attaques consistant à modifier l’alimentation du système sur puce hors d’une plage légale ou à ajouter du bruit ou des incidents sur l’alimentation. Selon un mode de réalisation particulièrement avantageux, l’unité de commande est configurée pour lire le mot binaire stocké dans le registre de perte d’alimentation et pour comparer ce mot binaire au mot binaire défini avant l’exécution d’une commande de compteur. En cas de perte d’alimentation de l’alimentation persistante, le dispositif de compteur monotone est configuré pour passer à un mécanisme de réinitialisation pour assurer le caractère monotone du registre de compteur volatil, c’est-à-dire pour garantir d’avoir une valeur du registre de compteur volatil supérieure à la valeur du registre de compteur volatil avant la perte d’alimentation de l’alimentation persistante. Selon un mode de réalisation particulièrement avantageux, l’unité de commande est configurée pour réinitialiser le registre de compteur volatil après l’émission de l’interruption, quand le mot binaire du registre de perte d’alimentation est différent du mot binaire défini. La procédure de réinitialisation est utilisée pour établir la valeur du registre de compteur volatil. Avant l’achèvement de la procédure de réinitialisation, le dispositif de compteur monotone n’est pas utilisable. L’unité de commande peut être configurée pour mettre en œuvre différentes procédures de réinitialisation. En particulier, selon un mode de réalisation particulièrement avantageux, l’unité de commande est configurée pour inscrire un bit, appelé bit d’étape, dans une mémoire non volatile tous les n incréments de la valeur du registre de compteur volatil. Dans le cas d’une réinitialisation du registre de compteur volatil, l’unité de commande est configurée pour lire chaque bit d’étape et pour mettre la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu. Cette procédure de réinitialisation est simple à mettre en œuvre et garantit automatiquement le caractère monotone du registre de compteur volatil. Selon un mode de réalisation particulièrement avantageux, l’unité de commande est configurée pour restaurer dans le registre de perte d’alimentation le mot binaire défini à partir d’une mémoire non volatile après la réinitialisation du registre de compteur volatil. Avantageusement, l’interpréteur de commandes comporte des registres de configuration configurés pour stocker des données de configuration pour le dispositif de compteur monotone. Selon un autre aspect, il est proposé un procédé de mise en œuvre d’un dispositif de compteur monotone d’un système sur puce pour un mécanisme anti-répétition, le dispositif de compteur monotone comportant un registre de compteur volatil, le procédé comprenant une alimentation du registre de compteur volatil au moyen d’une alimentation électrique persistante. De préférence, le procédé comprend les étapes suivantes : - recevoir des commandes pour le registre de compteur volatil via une interface de bus du dispositif de compteur monotone, - interpréter les commandes reçues sur l’interface de bus en utilisant une unité de commande d’un interpréteur de commandes du dispositif de compteur monotone, - commander le registre de compteur volatil selon les commandes reçues sur l’interface de bus en utilisant l’unité de commande. Selon une mise en œuvre particulièrement avantageuse, le procédé comprend les étapes suivantes : - alimenter un registre de perte d’alimentation volatil du dispositif de compteur monotone au moyen de l’alimentation persistante, - stocker un mot binaire défini dans le registre de perte d’alimentation, - lire un mot binaire dans le registre de perte d’alimentation et comparer ce mot binaire au mot binaire défini, - émettre une interruption quand la comparaison indique que le mot binaire du registre de perte d’alimentation est différent du mot binaire défini, cette interruption étant transmise à l’interface de bus. De préférence, le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 ». Selon une mise en œuvre particulièrement avantageuse, la lecture du mot binaire stocké dans le registre de perte d’alimentation et la comparaison de cette valeur du registre de perte d’alimentation avec le mot binaire défini sont exécutées avant l’exécution d’une commande de compteur. Avantageusement, le procédé comprend une procédure de réinitialisation pour réinitialiser le registre de compteur volatil après l’émission de l’interruption, quand le mot binaire du registre de perte d’alimentation est différent du mot binaire défini. Selon une mise en œuvre particulièrement avantageuse, le procédé comprend l’inscription d’un bit, appelé bit d’étape, dans une mémoire non volatile tous les n incréments de la valeur du registre de compteur volatil, la procédure de réinitialisation comprenant la lecture de chaque bit d’étape et la mise de la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu. Selon une mise en œuvre particulièrement avantageuse, le procédé comprend la restauration dans le registre de perte d’alimentation du mot binaire défini à partir d’une mémoire non volatile après la réinitialisation du registre de compteur volatil. D’autres avantages et caractéristiques de l’invention apparaîtront à la lecture de la description détaillée de modes de réalisation et de mises en œuvre, en aucune façon restrictive, et à l’étude des dessins annexés dans lesquels : représentent de façon schématique diverses mises en œuvre et modes de réalisation de l’invention. La montre un système sur puce SOC comportant un dispositif de compteur monotone MTC et plusieurs autres éléments ELT1, …, ELT5. Chaque élément ELT1, …, ELT5 du système sur puce SOC a sa propre fonction. Par exemple, le système sur puce SOC peut comprendre des mémoires, des dispositifs cryptographiques… Le système sur puce comprend aussi une alimentation électrique persistante VP. Une alimentation persistante VP est une alimentation telle qu’une batterie de secours utilisée pour maintenir les données de configuration du système pendant l’extinction ou le redémarrage du système sur puce. L’alimentation persistante VP a une faible probabilité d’être mise hors tension. Les différents éléments ELT1, …, ELT5 du système sur puce SOC et le dispositif de compteur monotone MTC sont reliés par l’intermédiaire d’un bus BU. Le bus BU peut être un bus AMBA (architecture de bus de microcontrôleur avancée). Par exemple, ce bus peut être un bus AHB (bus AMBA haute performance) ou une interface AXI (interface extensible avancée). Plus particulièrement, le dispositif de compteur monotone MTC peut être relié au bus BU via un stub de sécurité SS. Le stub de sécurité SS peut être utilisé pour limiter l’usage du dispositif de compteur monotone à certains sous-domaines périphériques de sécurité. Le dispositif de compteur monotone MTC comporte une interface de bus BI. L’interface de bus BI est configurée pour recevoir des commandes de l’extérieur du dispositif de compteur monotone MTC via des signaux BU_SIG. Les commandes peuvent être des commandes d’utilisateur pour incrémenter, lire ou stocker une valeur dans un registre de compteur volatil CNT du dispositif de compteur monotone MTC. Les commandes peuvent être aussi des commandes de configuration. Le registre de compteur volatil CNT est alimenté par l’alimentation persistante. Ceci garantit que la valeur du registre de compteur volatil peut être préservée y compris en cas d’inactivité du système sur puce (arrêt, attente, etc…). En effet, le risque d’avoir une perte d’alimentation est faible. Par ailleurs, l’utilisation d’un registre volatil permet d’accélérer les incréments de la valeur du registre de compteur volatil stockée dans ce registre volatil, comparé à un registre non volatil. En particulier, la valeur du registre de compteur volatil peut être utilisée dans un champ anti-répétition d’une transaction sécurisée. L’interface de bus BI reçoit aussi un signal d’horloge CLK pour synchroniser l’interface de bus BI, et un signal de réinitialisation RST pour réinitialiser l’interface de bus. Le dispositif de compteur monotone MTC reçoit aussi un signal de réinitialisation d’alimentation PRST. En particulier, le dispositif de compteur monotone MTC comprend un interpréteur de commandes CI. L’interpréteur de commandes CI est configuré pour reconnaître les commandes CMD_DAT reçues sur l’interface de bus BI. L’interpréteur de commandes CI comprend une unité de commande CSM pour reconnaître les commandes, et des registres CDR, CFR, PLR pour stocker des commandes et des données, par exemple. En particulier, l’interpréteur de commandes CI comprend des registres de commandes et de données CDR. Ces registres de commandes et de données CDR sont configurés pour stocker les commandes du registre de compteur volatil CNT avant leur exécution. Les registres de commandes et de données CDR sont également configurés pour recevoir des valeurs MTC_VAL du registre de compteur volatil CNT et pour délivrer de nouvelles valeurs réinitialisées MTC_VAL_RST au registre de compteur volatil CNT. Les registres de commandes et de données CDR reçoivent aussi le signal d’horloge CLK pour les synchroniser, et un signal de réinitialisation RST pour les réinitialiser. L’interpréteur de commandes CI comprend aussi des registres de configuration CFR. Les registres de configuration CFR sont alimentés par l’alimentation persistante VP. Les registres de configuration CFR sont configurés pour stocker des données de configuration. En particulier, les registres de configuration CFR sont utilisés pour stocker des données concernant le mode d’exécution des commandes. Par exemple, dans le cas où un stub de sécurité SS est utilisé entre le dispositif de compteur monotone MTC et le bus BU, la commande peut être exécutée directement. Par ailleurs, dans le cas où il n’y a pas de stub de sécurité SS entre le dispositif de compteur monotone MTC et le bus BU, la commande peut être exécutée avec une procédure d’authentification décrite ci-dessous. Ainsi, les registres de configuration CFR sont utilisés pour stocker des données qui indiquent si la commande doit être exécutée directement ou après une procédure d’authentification. Les registres de configuration CFR peuvent aussi être utilisés pour stocker le critère de commande de réponse (directe ou authentifiée). Les registres de configuration CFR reçoivent aussi le signal d’horloge CLK pour les synchroniser, et le signal de réinitialisation RST pour les réinitialiser. Comme montré sur la , l’interpréteur de commandes CI comporte une unité de commande CSM. L’unité de commande CSM est configurée pour reconnaître les commandes reçues sur l’interface de bus BI. Lorsque l’unité de commande CSM reconnaît les commandes, l’unité de commande CSM est aussi configurée pour stocker ces commandes dans des registres de commandes et de données CDR. L’unité de commande CSM est aussi configurée pour commander le registre de compteur volatil CNT selon les commandes reçues sur l’interface de bus BI. Plus particulièrement, l’unité de commande CSM est un circuit de machine à états. Plus particulièrement, l’unité de commande CSM a une sortie configurée pour délivrer un signal INCR au registre de compteur volatil CNT pour incrémenter sa valeur. L’unité de commande CSM a aussi une sortie configurée pour délivrer un signal RD au registre de compteur volatil CNT pour ordonner une lecture de sa valeur. Quand l’unité de commande CSM ordonne une lecture, le registre de compteur volatil CNT délivre la valeur actuelle MTC_VAL du registre de compteur volatil CNT aux registres de commandes et de données CDR. Cette valeur MTC_VAL est ensuite transmise à l’interface de bus BI. L’unité de commande CSM a aussi une sortie configurée pour délivrer un signal STR au registre de compteur volatil CNT pour ordonner un stockage d’une valeur dans le registre de compteur volatil CNT. Quand l’unité de commande CSM ordonne un stockage, le registre de compteur volatil CNT stocke la valeur MTC_VAL_RST depuis les registres de commandes et de données CDR. L’unité de commande CSM est aussi configurée pour recevoir le signal d’horloge CLK pour se synchroniser, et le signal de réinitialisation RST pour se réinitialiser. L’unité de commande CSM est aussi configurée pour échanger des données CFG_DAT avec les registres de configuration CFR. L’unité de commande CSM est aussi configurée pour transmettre des commandes LCMD et des données LDAT aux registres de commandes et de données. L’unité de commande CSM est alimentée par l’alimentation VLOG qui n’est pas une alimentation persistante. L’unité de commande CSM est configurée pour déterminer si une commande est une commande valide à partir d’un premier octet d’une commande reçue sur l’interface de bus BI. Dans le cas où l’unité de commande CSM détermine que la commande reçue sur l’interface de bus BI est une commande valide, l’unité de commande est configurée pour permettre le stockage de la commande LCMD et des données concernées LDAT dans les registres de commandes et de données CDR, ou dans les registres de configuration CFR. Dans le cas où l’unité de commande CSM détermine que la commande reçue sur l’interface de bus BI n’est pas une commande valide, l’unité de commande CSM est configurée pour rejeter cette commande. Avant l’exécution d’une commande, l’unité de commande CSM vérifie l’intégrité de la valeur du registre de compteur volatil CNT. En effet, comme déjà indiqué, l’alimentation persistante VP a une faible probabilité d’être mise hors tension. Toutefois, dans le cas où l’alimentation persistante VP est mise hors tension, la valeur du registre de compteur volatil est perdue. C’est pourquoi, pour assurer l’intégrité de la valeur du registre de compteur volatil CNT, l’interpréteur de commandes CI comprend aussi un registre de perte d’alimentation PLR. Le registre de perte d’alimentation PLR est un registre à M bits, par exemple 8 ou 16 bits, alimenté par le module d’alimentation persistante VP. Le registre de perte d’alimentation PLR peut aussi être réinitialisé via un signal VP_RST. L’unité de commande est configurée pour stocker un mot binaire défini dans le registre de perte d’alimentation PLR. Pour contrôler l’intégrité de la valeur du registre de compteur volatil CNT, avant l’exécution d’une commande, l’unité de commande CSM est configurée pour lire un mot binaire stocké dans le registre de perte d’alimentation PLR et pour comparer ce mot binaire au mot binaire défini. Le mot binaire stocké dans le registre de perte d’alimentation PLR est transmis à l’unité de commande CSM via le signal PLR_DAT. Si le mot binaire présent dans le registre de perte d’alimentation PLR est le même que le mot binaire défini, ceci indique que le système sur puce SOC n’a pas subi de perte d’alimentation. Toutefois, si le mot binaire présent dans le registre de perte d’alimentation PLR est différent du mot binaire défini, ceci indique que le système sur puce SOC a subi une perte d’alimentation. Le mot binaire défini est stocké dans le registre de perte d’alimentation PLR quand l’alimentation persistante VP délivre du courant. Toutefois, en cas de perte d’alimentation de l’alimentation persistante VP, le mot binaire du registre de perte d’alimentation est modifié. Le mot binaire défini peut être choisi pendant une phase de conception. Par exemple, le mot binaire défini peut être égal à 0xAA (notation hexadécimale). De préférence, le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 » (par exemple 0xAA, 0x55, 0x0F, etc…). Un tel mot binaire est robuste, par exemple contre les attaques consistant à modifier l’alimentation du système sur puce hors d’une plage légale ou à ajouter du bruit ou des incidents sur l’alimentation. En effet, ces attaques pourraient être utilisées pour modifier la valeur du registre de perte d’alimentation, pour qu’elle soit égale à 0x00 ou 0xFF. Ici, comme le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 », le mot binaire défini est suffisamment différent des valeurs qui peuvent résulter de ces attaques. Le registre de perte d’alimentation PLR sert à garantir l’intégrité des données stockées à l’intérieur du compteur persistant. En particulier, comme l’unité de commande CSM est configurée pour lire le mot binaire stocké dans le registre de perte d’alimentation PLR et pour comparer ce mot binaire au mot binaire défini, avant l’exécution d’une commande, l’unité de commande CSM est capable de savoir si le système sur puce SOC a subi une perte d’alimentation. La lecture du registre de perte d’alimentation PLR et la comparaison peuvent aussi être réalisées de façon périodique. En particulier, en cas de perte d’alimentation, le mot binaire stocké dans le registre de perte d’alimentation peut être altéré. Le mot binaire stocké dans le registre de perte d’alimentation peut donc être différent du motif attendu du mot binaire défini (0xAA ou 0x55 par exemple). Par exemple, après une perte d’alimentation, le mot binaire stocké dans le registre de perte d’alimentation peut être égal à 0x00. En outre, l’unité de commande CSM est aussi configurée pour émettre une interruption INT1 quand l’unité de commande détecte à partir de la comparaison que le mot binaire du registre de perte d’alimentation PLR est différent du mot binaire défini attendu. Cette interruption INT1 est transmise à l’interface de bus BI. Cette interruption INT1 sert à indiquer aux autres éléments du système sur puce que la valeur du registre de compteur volatil CNT peut ne pas être correcte en raison d’une perte d’alimentation. Lorsque l’unité de commande CSM détecte que le système sur puce SOC a été soumis à une perte d’alimentation, l’unité de commande CSM est configurée pour démarrer une procédure de réinitialisation. La procédure de réinitialisation est utilisée pour établir la valeur du registre de compteur volatil CNT afin de récupérer l’intégrité du registre de compteur volatil CNT. La procédure de réinitialisation à mettre en œuvre peut être configurable en utilisant le registre de configuration. En particulier, l’unité de commande CSM peut être configurée pour mettre en œuvre différentes procédures de réinitialisation. Par exemple, une première procédure de réinitialisation consiste à fournir une nouvelle valeur pour le registre de compteur volatil et des valeurs de configurations en utilisant une commande authentifiée. Une commande authentifiée est une commande accompagnée d’une signature. La signature est calculée en utilisant un algorithme MAC avec une fraîcheur (en anglais « freshness »). Un générateur de nombres aléatoires est utilisé pour fournir un nombre aléatoire afin de calculer la signature. Une deuxième procédure de réinitialisation consiste à fournir une nouvelle valeur pour le registre de compteur volatil et des valeurs de configurations en utilisant un paquet de commande crypté. Par exemple, le paquet de commande est crypté en employant un algorithme AES (« norme de chiffrement avancé »). Le paquet de commande comporte un nombre aléatoire généré par un générateur de nombres aléatoires afin d’éviter une attaque par répétition. De préférence, une troisième procédure de réinitialisation est mise en œuvre. La troisième procédure de réinitialisation consiste à définir la valeur du registre de compteur volatil CNT à partir d’un nombre de bits, appelés bits d’étape, provenant d’une mémoire non volatile. La mémoire non volatile peut être une mémoire flash interne du système sur puce. En particulier, pendant le fonctionnement normal du registre de compteur volatil CNT, l’unité de commande CSM est configurée pour inscrire un bit d’étape dans la mémoire non volatile tous les n incréments de la valeur du registre de compteur volatil CNT. Le nombre n d’incréments nécessaire pour stocker un bit d’étape est défini en fonction d’une granularité souhaitée. Plus la valeur de n est élevée, plus la granularité est faible et plus la quantité de mémoire non volatile nécessaire pour stocker les bits d’étape est grande. Pendant la procédure de réinitialisation, l’unité de commande CSM est configurée pour lire chaque bit d’étape. Ensuite, l’unité de commande est configurée pour mettre la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu, et n représente la granularité (le nombre d’incréments nécessaire pour stocker un bit d’étape). Avant l’achèvement de la procédure de réinitialisation, le dispositif de compteur monotone n’est pas utilisable. En cas de perte d’alimentation persistante, le mot binaire défini est restauré dans le registre de perte d’alimentation PLR via un signal REST à la fin de la procédure de réinitialisation. Par ailleurs, quand l’unité de commande CSM détecte que le système sur puce SOC n’a pas subi de perte d’alimentation, l’unité de commande CSM peut être configurée pour passer à d’autres contrôles de sécurité avant l’exécution de la commande, selon le mode d’exécution de commande stocké dans les registres de configuration CFR. En particulier, dans le cas où un stub de sécurité SS est utilisé entre le dispositif de compteur monotone MTC et le bus BU, la commande peut être exécutée directement, sans autre contrôle de sécurité. En effet, le stub de sécurité est configuré pour mettre en œuvre ces contrôles de sécurité. Toutefois, dans le cas où il n’y a pas de stub de sécurité SS entre le dispositif de compteur monotone MTC et le bus BU, l’unité de commande CSM peut être configurée pour passer à la procédure d’authentification avant l’exécution de la commande. En particulier, dans le mode d’exécution de commande authentifiée, des méthodes cryptographiques sont employées pour assurer l’authentification. Ainsi, le paquet de commande comprend une signature MAC (MAC étant un acronyme de l’anglais « Message Authentication Code » signifiant « code d’authentification de message ») et un champ de fraîcheur. La valeur du champ de fraîcheur est une valeur aléatoire fournie par un générateur de nombres aléatoires du système sur puce ou générée par un générateur pseudo-aléatoire mis en œuvre par un cœur dédié du système sur puce. En particulier, l’unité de commande CSM peut être configurée pour réaliser un contrôle de fraîcheur. Pendant le contrôle de fraîcheur, l’unité de commande vérifie si la valeur du champ de fraîcheur, c’est-à-dire la valeur du registre de compteur volatil CNT, est la valeur attendue. En particulier, l’unité de commande CSM compare la valeur du registre de compteur volatil à la valeur du champ de fraîcheur. Si la valeur du champ de fraîcheur est différente de la valeur du registre de compteur volatil CNT, la commande est rejetée. Sinon, l’unité de commande CSM est configurée pour démarrer une procédure de contrôle de signature. Au début de la procédure de contrôle de signature, l’unité de commande CSM est configurée pour générer une interruption de contrôle de signature spécifique INT2 vers l’un des cœurs du système sur puce SOC et pour attendre un résultat d’un contrôle de signature réalisé par le cœur, afin de savoir si la signature est correcte. En particulier, le cœur du système sur puce SOC est configuré pour exécuter le contrôle de signature et pour envoyer le résultat au dispositif de compteur monotone, le résultat indiquant si la signature est identique à celle qui est attendue. Le cœur peut comprendre des ressources matérielles pour exécuter le contrôle de signature. En variante, le cœur peut aussi être configuré pour exécuter un module logiciel adapté pour réaliser le contrôle de signature. Le cœur peut aussi utiliser à la fois des ressources matérielles et un module logiciel pour réaliser le contrôle de signature. Ensuite, quand l’interruption est traitée par le cœur, l’unité de commande CSM est configurée pour fournir à la demande du cœur le paquet de commande stocké. Le cœur calcule ensuite la signature MAC, en utilisant un autre élément du système sur puce SOC ou par logiciel et fournit la signature calculée à l’unité de commande CSM. La signature calculée peut être écrite à l’intérieur des registres de commandes et de données CDR. Puis l’unité de commande CSM compare la signature calculée à celle reçue avec la commande. Si la signature calculée est différente de la signature reçue avec la commande, la commande est rejetée. Sinon, l’unité de commande CSM exécute la commande. Le résultat de la commande est ensuite communiqué à un hôte selon le mode sélectionné dans les registres de configuration. En particulier, le mode de réponse de commande peut être une réponse directe ou une réponse authentifiée. Dans le cas où le mode de sélection est le mode de réponse directe, l’unité de commande CSM est configurée pour envoyer directement un paquet de réponse de commande à un hôte (interne ou externe au système sur puce) en suivant des règles de protocole de bus. Dans le cas où le mode de sélection est le mode de réponse authentifiée, le paquet de réponse de commande est signé en employant un algorithme MAC, par exemple l’algorithme HMAC-SHA256. Le paquet de réponse de commande comprend ainsi la réponse de commande, un champ de fraîcheur et une signature de réponse. Ce paquet de réponse de commande est envoyé à un hôte (interne ou externe au système sur puce) en suivant des règles de protocole de bus. Un procédé de mise en œuvre du dispositif de compteur monotone est montré sur la . À l’étape initiale 30, le dispositif de compteur monotone démarre une phase de conception. Au cours de cette phase de conception, l’unité de commande stocke le mot binaire défini dans le registre de perte d’alimentation. Le registre de perte d’alimentation est alimenté par l’alimentation persistante. À l’étape 31, le dispositif de compteur monotone reçoit une commande sur son interface de bus BI. À l’étape 32, l’unité de commande CSM reçoit le premier octet de la commande provenant de l’interface de bus, et détermine si la commande est une commande valide. Si l’unité de commande CSM détermine que la commande est une commande valide, l’unité de commande stocke, à l’étape 34, la commande et les données concernées dans des registres de commandes et de données CDR, ou dans des registres de configuration CFR. Si l’unité de commande CSM détermine que la commande n’est pas une commande valide, l’unité de commande CSM rejette la commande à l’étape 33. Après l’étape 34, l’unité de commande vérifie l’intégrité de la valeur du registre de compteur volatil CNT à l’étape 35. En particulier, l’unité de commande lit le mot binaire stocké dans le registre de perte d’alimentation et compare ce mot binaire au mot binaire défini. Si l’unité de commande détermine que le mot binaire stocké dans le registre de perte d’alimentation PLR est le même que le mot binaire défini, l’unité de commande conclut que le système sur puce SOC n’a pas subi de perte d’alimentation, et que la valeur du registre de compteur volatil est correcte. Ainsi, l’unité de commande peut passer à des contrôles de sécurité supplémentaires si nécessaire, à l’étape 39, avant l’exécution de la commande. Cependant, si l’unité de commande détermine que le mot binaire stocké dans le registre de perte d’alimentation PLR est différent du mot binaire défini, l’unité de commande conclut que le système sur puce SOC a subi une perte d’alimentation, et que la valeur du registre de compteur volatil est incorrecte. Dans ce cas, l’unité de commande émet à l’étape 36 une interruption INT1 qui est transmise à l’interface de bus BI. Après l’émission de l’interruption INT1, l’unité de commande exécute une procédure de réinitialisation à l’étape 37 pour récupérer l’intégrité du registre de compteur volatil CNT. En particulier, l’unité de commande lit les registres de configuration pour déterminer quelle sorte de procédure de réinitialisation a été sélectionnée. Par exemple, dans le cas où la procédure de réinitialisation choisie est la troisième précédemment décrite, l’unité de commande CSM lit chaque bit d’étape stocké dans la mémoire non volatile. L’unité de commande est alors configurée pour mettre la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu, et n représente la granularité (le nombre d’incréments nécessaire pour stocker un bit d’étape). Ensuite, l’unité de commande restaure le mot binaire défini dans le registre de perte d’alimentation PLR à l’étape 38. Par ailleurs, comme mentionné ci-dessus, quand l’unité de commande CSM détecte que le système sur puce SOC n’a pas subi de perte d’alimentation, l’unité de commande CSM peut réaliser d’autres contrôles de sécurité si nécessaire, à l’étape 39, avant l’exécution de la commande. En particulier, l’unité de commande lit les registres de configuration CFR pour connaître le mode d’exécution de commande. Si le mode d’exécution de commande est le mode d’exécution directe, l’unité de commande peut exécuter directement la commande à l’étape 41. Si le mode d’exécution de commande est le mode d’exécution de commande authentifié, l’unité de commande exécute d’autres contrôles de sécurité (contrôle de fraîcheur et contrôle de signature, comme décrit plus haut) à l’étape 39. Si la commande passe les contrôles de sécurité, la commande peut être exécutée à l’étape 41. Sinon, la commande est rejetée à l’étape 40. L’exécution de la commande à l’étape 41 conduit à un résultat de commande délivré par le registre de compteur volatil. Ce résultat de commande est transmis à l’unité de commande à l’étape 42. L’unité de commande transmet ce résultat de commande à un hôte via l’interface de bus, selon un mode de réponse sélectionné dans les registres de configuration (réponse authentifiée ou réponse directe, comme décrit ci-dessus). Il ressort que la présente invention est apte à fournir une architecture d’un dispositif de compteur monotone qui peut être intégrée dans un système sur puce pour des applications de cryptographie, qui n’est pas sujette à des pertes de données ou au vieillissement, grâce à l’utilisation d’un registre volatil. En outre, l’emploi d’un registre volatil permet d’augmenter le taux d’accroissement de la valeur de compteur monotone. Il est bien entendu que la présente invention peut être sujette à diverses variations et modifications qui apparaîtront aux personnes du métier. Par exemple, le dispositif de compteur monotone peut comporter plus d’un compteur alimenté par l’alimentation électrique persistante. Dans ce cas, le dispositif de compteur monotone peut encore comporter un seul interpréteur de commandes CI. En particulier, l’unité de commande de l’interpréteur de commandes peut être configurée pour commander chaque compteur en sélectionnant le compteur auquel la commande est adressée. Plus particulièrement, l’unité de commande peut comprendre des sorties destinées à activer ou désactiver les compteurs. Ainsi, pour commander un compteur, l’unité de commande peut valider ce compteur et désactiver les autres compteurs. Système sur puce comprenant : - une alimentation électrique persistante (VP) ; - un moyen anti-répétition comprenant un dispositif de compteur monotone (MTC) comportant un registre de compteur volatil (CNT) alimenté par l’alimentation persistante (VP). Système sur puce selon la revendication 1, dans lequel le dispositif de compteur monotone (MTC) comprend : - une interface de bus (BI) configurée pour recevoir des commandes pour le registre de compteur volatil (CNT), - un interpréteur de commandes (CI) comportant une unité de commande (CSM) configurée pour interpréter les commandes reçues sur l’interface de bus (BI) et pour commander le registre de compteur volatil (CNT) selon les commandes reçues sur l’interface de bus (BI). Système sur puce selon la revendication 2, dans lequel l’interpréteur de commandes (CI) comprend aussi un registre de perte d’alimentation volatil (PLR) alimenté par l’alimentation persistante (VP), et dans lequel l’unité de commande (CSM) est aussi configurée pour : ○ stocker un mot binaire défini dans le registre de perte d’alimentation (PLR), ○ lire un mot binaire dans le registre de perte d’alimentation (PLR) et comparer ce mot binaire au mot binaire défini, ○ émettre une interruption (INT1) quand l’unité de commande détermine à partir de ladite comparaison que le mot binaire du registre de perte d’alimentation (PLR) est différent du mot binaire défini, cette interruption (INT1) étant transmise à l’interface de bus. Système sur puce selon la revendication 3, dans lequel le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 ». Système sur puce selon la revendication 3 ou 4, dans lequel l’unité de commande (CSM) est configurée pour lire le mot binaire stocké dans le registre de perte d’alimentation (PLR) et pour comparer cette valeur du registre de perte d’alimentation au mot binaire défini avant l’exécution d’une commande de compteur. Système sur puce selon l’une des revendications 3 à 5, dans lequel l’unité de commande (CSM) est configurée pour réinitialiser le registre de compteur volatil (CNT) après l’émission de l’interruption, quand le mot binaire du registre de perte d’alimentation (PLR) est différent du mot binaire défini. Système sur puce selon la revendication 6, dans lequel l’unité de commande (CSM) est configurée pour inscrire un bit, appelé bit d’étape, dans une mémoire non volatile tous les n incréments de la valeur du registre de compteur volatil (CNT), et dans le cas d’une réinitialisation du registre de compteur volatil, l’unité de commande (CSM) est configurée pour lire chaque bit d’étape et pour mettre la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu. Système sur puce selon la revendication 6 ou 7, dans lequel l’unité de commande (CSM) est configurée pour restaurer dans le registre de perte d’alimentation (PLR) le mot binaire défini à partir d’une mémoire non volatile après la réinitialisation du registre de compteur volatil (CNT). Système sur puce selon les revendications 1 à 8, dans lequel l’interpréteur de commandes (CI) comporte des registres de configuration (CFR) configurés pour stocker des données de configuration pour le dispositif de compteur monotone. Procédé de mise en œuvre d’un dispositif de compteur monotone d’un système sur puce pour un mécanisme anti-répétition, le dispositif de compteur monotone (MTC) comportant un registre de compteur volatil (CNT), le procédé comprenant une alimentation du registre de compteur volatil au moyen d’une alimentation électrique persistante. Procédé selon la revendication 10, comprenant les étapes suivantes : - recevoir des commandes pour le registre de compteur volatil via une interface de bus (BI) du dispositif de compteur monotone, - interpréter les commandes reçues sur l’interface de bus (BI) en utilisant une unité de commande (CSM) d’un interpréteur de commandes (CI) du dispositif de compteur monotone, - commander le registre de compteur volatil (CNT) selon les commandes reçues sur l’interface de bus (BI) en utilisant l’unité de commande (CSM). Procédé selon la revendication 11, comprenant les étapes suivantes : - alimenter un registre de perte d’alimentation volatil (PLR) du dispositif de compteur monotone au moyen de l’alimentation persistante (VP), - stocker un mot binaire défini dans le registre de perte d’alimentation (PLR), - lire un mot binaire dans le registre de perte d’alimentation (PLR) et comparer ce mot binaire au mot binaire défini, - émettre une interruption (INT1) quand ladite comparaison indique que le mot binaire du registre de perte d’alimentation (PLR) est différent du mot binaire défini, cette interruption (INT1) étant transmise à l’interface de bus. Procédé selon la revendication 12, dans lequel le mot binaire défini comprend une moitié des bits mise à « 0 » et l’autre moitié mise à « 1 ». Procédé selon la revendication 12 ou 13, dans lequel la lecture du mot binaire stocké dans le registre de perte d’alimentation (PLR) et la comparaison de cette valeur du registre de perte d’alimentation avec le mot binaire défini sont exécutées avant l’exécution d’une commande de compteur. Procédé selon l’une des revendications 12 à 14, comprenant une procédure de réinitialisation pour réinitialiser le registre de compteur volatil après l’émission de l’interruption, quand le mot binaire du registre de perte d’alimentation (PLR) est différent du mot binaire défini. Procédé selon la revendication 15, comprenant l’inscription d’un bit, appelé bit d’étape, dans une mémoire non volatile tous les n incréments de la valeur du registre de compteur volatil (CNT), la procédure de réinitialisation comprenant la lecture de chaque bit d’étape et la mise de la valeur du registre de compteur volatil à MTC = ( n +1)* m , où m est le numéro du bit d’étape lu. Procédé selon la revendication 15 ou 16, comprenant la restauration dans le registre de perte d’alimentation (PLR) du mot binaire défini à partir d’une mémoire non volatile après la réinitialisation du registre de compteur volatil (CNT).