Brevet FR3118233A1 — publié le 20220624

Procédé de détection d’extraction linéaire d’information dans une unité de traitement (CPU) utilisant un registre d’instruction (IR) destiné à stocker une instruction comprenant un code d’opération (OpC), le procédé comprenant une surveillance des instructions successivement stockées dans le registre d’instruction comportant un décodage des codes d’opération, une détermination d’un nombre de codes d’opération consécutifs codant des branchements incrémentaux, et une génération d’un signal de détection (LCEdetec) si ledit nombre est supérieur ou égal à un seuil de détection (Th). Figure pour l’abrégé : Fig 3 PROCÉDÉ DE DÉTECTION D’INGÉNIERIE INVERSÉE SUR UNE UNITÉ DE TRAITEMENT UTILISANT UN REGISTRE D’INSTRUCTION ET CIRCUIT INTÉGRÉ CORRESPONDANT La présente invention concerne le domaine de la microélectronique, et en particulier les systèmes de protection contre l’ingénierie inversée. Classiquement, un procédé d’ingénierie inversée est utilisé pour étudier et éventuellement cloner un comportement d’un microcontrôleur. Un microcontrôleur comprend typiquement au moins un processeur et une mémoire reliés par l’intermédiaire d’un bus de données. Un procédé d’ingénierie inversée utilisé sur les microcontrôleurs peut comprendre une technique du type « Extraction Linéaire de Code », plus connue sous le terme anglais « Linear Code Extraction ». Dans la technique du type « Extraction linaire de Code », le processeur peut être forcé à exécuter des instructions de branchement incrémental qui imposent à un circuit de récupération d’adresse du processeur de lire séquentiellement les adresses de la mémoire, c’est-à-dire l’une après l’autre, de sorte à parcourir l’ensemble des adresses de la mémoire. Un exemple d’un tel procédé d’ingénierie inversée comprend une phase d’analyse matérielle, utilisant des techniques de déstratification et de microscopie avancée pour identifier les éléments matériels véhiculant des informations secrètes. La phase d’analyse matérielle permet notamment d’identifier la logique contrôlant un registre d’instruction du processeur (usuellement nommée en anglais « instruction register » ou « IR »). Dans le procédé d’ingénierie inversée, une phase d’extraction de données utilisant des faisceaux d’ions focalisés « FIB » (pour « Focalised Ion Beam » usuellement en anglais), ou bien des techniques d’injection de fautes, peut comprendre une modification d’une instruction courante stockée dans le registre d’instruction. En particulier, l’instruction courante peut être forcée pour contenir un code d’opération correspondant à un branchement incrémental, dont le mode d’adressage comprend une incrémentation par rapport à l’adresse en cours de lecture dans le processeur. Ainsi, la technique d’extraction de données comprend une étape visant à imposer des instructions de branchement incrémental de sorte à forcer le processeur à fonctionner dans un mode d’exécution linéaire, c’est-à-dire un mode de fonctionnement dans lequel le processeur lit dans la mémoire en suivant l’ordre des adresses. En conséquence, le processeur va lire séquentiellement l’ensemble du contenu de la mémoire, et des technologies de sondes microscopiques permettent d’extraire le contenu lu par le processeur. Par exemple, l’extraction des données peut être faite au niveau du bus de donnée sur lequel transite temporairement chaque contenu d’une adresse en provenance de la mémoire et à destination du registre d’instruction. À partir de contenus secrets ainsi extraits par le procédé d’ingénierie inversée, il est possible de reconstruire le logiciel embarqué du microcontrôleur et de réaliser des produits clonés. Les solutions classiques pour prévenir les procédés d’ingénierie inversée, utilisant des couches matérielles de protection génériques, ou bien des techniques de fonctionnement croisé de deux processeurs, sont connues et des parades permettant de les contourner ont été développées. Il existe donc un besoin de détecter les tentatives d’extraction d’un code source contenu dans une mémoire. De plus, il existe un besoin de réagir face à de telles tentatives. Par ailleurs, il existe également un besoin de rendre les solutions de détection et de réaction difficiles à identifier afin de compliquer la conception d’éventuelles parades. Selon un aspect, il est proposé un procédé de détection d’extraction linéaire d’information dans une unité de traitement utilisant un registre d’instruction destiné à stocker une instruction comprenant un code d’opération, le procédé comprenant une surveillance des instructions successivement stockées dans le registre d’instruction comportant un décodage des codes d’opération, une détermination d’un nombre de codes d’opération consécutifs codant des instructions de branchement incrémental, et une génération d’un signal de détection si ledit nombre est supérieur ou égal à un seuil de détection. Par « surveillance des instructions successivement stockées dans le registre d’instruction comportant un décodage des codes d’opération », on entend par exemple une lecture et un décodage systématiques et réguliers des codes d’opération des instructions stockées dans le registre d’instruction. La surveillance n’a avantageusement pas d’incidence sur l’usage classique du registre d’instruction en tant que stockage de l’instruction courante en cours de traitement dans l’unité de traitement. Par « instructions de branchement incrémental », on entend par exemple une instruction qui, une fois traitée par l’unité de traitement, entraine automatiquement une lecture d’une prochaine instruction stockée à une adresse mémoire directement consécutive par rapport à une adresse mémoire de l’instruction courante. Or, une étape d’extraction linéaire de code d’un procédé d’ingénierie inversée produit un nombre d’instructions de branchement incrémental pouvant être plus important que la normale, autrement dit plus grand que le seuil de détection choisi à cet égard. Ainsi, la surveillance des instructions successivement stockées dans le registre d’instruction et la génération du signal de détection selon cet aspect permettent de détecter et de signaler qu’un procédé d’ingénierie inversée, en particulier une étape d’extraction linéaire de code, est en cours sur l’unité de traitement. Par ailleurs, l’instruction courante est classiquement stockée dans le registre d’instruction qui est situé à l’intérieur de l’unité de traitement. Ainsi le procédé selon cet aspect peut être mis en œuvre par des moyens intégrés directement dans l’unité de traitement et difficiles à identifier dans le cadre d’une ingénierie inversée. Cela contribue à complexifier la procédure d’ingénierie inversée et tend à rendre ce type de procédure non rentable au global. Selon un mode de mise en œuvre, la détermination du nombre de codes d’opération consécutifs codant des branchements incrémentaux comprend une comparaison entre les codes d’opération décodés et une liste de codes d’opération codant des branchements par sauts. Par exemple, il peut être prévu pour l’unité de traitement une liste exhaustive des codes d’opération codant des branchements par sauts. En revanche, il n’est pas forcément prévu de liste exhaustive des codes d’opération pour les instructions de branchement incrémental, car l’unité de traitement peut être configurée pour effectuer par défaut une instruction de branchement incrémental lorsqu’un code d’opération n’est pas reconnu. Ainsi, la comparaison entre les codes d’opération décodés et la liste de codes d’opération codant des branchements par sauts permet de déterminer si un code d’opération correspond ou ne correspond pas à une instruction de branchement incrémental et donc de surveiller la continuité d’une série de branchements incrémentaux, en vue de détecter une extraction linéaire de code. On entend par « instruction de branchement par saut », les instructions de branchements qui ne sont pas des branchements incrémentaux, par exemple les instructions de saut, d’appel ou de retour (usuellement « jump », « call » et « return » en anglais). Ainsi, la liste de codes d’opération peut comprendre un code d’opération codant une instruction de saut, un code d’opération codant une instruction d’appel de procédure, et un code d’opération codant une instruction de retour de procédure. Cela correspond à une liste pouvant être exhaustive ou non, selon le langage du code de l’unité de traitement, incluant les principaux codes d’opération codant un branchement par saut. Selon un mode de mise en œuvre, la détermination du nombre de codes d’opération consécutifs codant des branchements incrémentaux comprend en outre : – une décrémentation d’une valeur d’un compteur, préalablement initialisé à un seuil de détection, lorsqu’un code d’opération parmi les codes d’opération décodés code une instruction de branchement incrémental ; – une réinitialisation de la valeur du compteur au seuil de détection, lorsqu’un code d’opération parmi les codes d’opération décodés comprend un code d’opération codant un branchement par saut ; et ledit signal de détection est généré lorsque la valeur du compteur est nulle. L’utilisation de la décrémentation est plus robuste, par construction, qu’une incrémentation dans un cas où un registre contenant la valeur seuil de détection venait à être forcé à son point de départ lors d’une tentative de parade au procédé de détection. En effet, un compteur décrémenté est initialisé à la valeur du seuil, qui n’est a priori pas connue par l’exécutant de l’ingénierie inversée, au contraire, un compteur incrémenté est apriori initialisé à une valeur nulle. En conséquence, la procédure d’ingénierie inversée nécessitera des travaux supplémentaires en vue d’identifier le point de départ du compteur, qui contribuent à complexifier la mise en œuvre de la procédure dans le but de la rendre non rentable au global. Selon un mode de mise en œuvre, un choix de la valeur du seuil de détection et une implémentation d’un code source sont effectués conjointement, pour permettre des exécutions d’instructions de branchement incrémental consécutives lors d’une exécution normale du code source par l’unité de traitement. Ainsi, le choix conjoint du seuil de détection et de l’implémentation du code source permet d’assurer un bon compromis entre le niveau de sécurité attendu et la performance d’exécution du code source. Prévoir conjointement l’implémentation du code source et la valeur du seuil de détection permet d’éviter de générer un signal de détection lors du fonctionnement normal de l’unité de traitement. En particulier, le code source doit se conformer à la valeur du seuil. Si une exécution normale du code source déclenche un signal de détection, alors des instructions de branchement par saut peuvent être introduites dans le code source afin d’interrompre sa linéarité. Étant donné que le choix de la valeur du seuil de détection limite un nombre d’instructions qui peuvent être extraites pendant une procédure d’ingénierie inversée, il est avantageux de minimiser la valeur du seuil de détection, en adaptant éventuellement l’implémentation du code source à cet égard. Selon un autre aspect, il est prévu un procédé de protection contre une extraction linéaire d’information comprenant le procédé de détection défini précédemment, et comprenant en réponse à la génération du signal de détection une étape forçant l’adresse mémoire d’une prochaine lecture par l’unité de traitement à des emplacements de mémoire dont les contenus sont non confidentiels. Par exemple, ladite étape comprend une réinitialisation d’un pointeur d’instruction sur des valeurs du pointeur d’instruction prises avant la génération du signal de détection, ou une commande d’accès à des emplacements de mémoire dont les contenus d’origine sont non confidentiels. On entend par « des contenus d’origine non confidentiels » des informations par exemple initialement prévues pour être communicables à un tiers. Ainsi, forcer l’unité de traitement à lire les contenus non confidentiels à la suite de la génération du signal de détection permet s’assurer que les informations extraites au cours de la tentative d’extraction linaire d’information ne sont pas exploitables dans le cadre du procédé d’ingénierie inversée. De plus, forcer l’unité de traitement à continuer à lire la mémoire pendant la tentative permet de rendre le procédé de détection difficile à identifier étant donné que l’unité de traitement continue a priori de fonctionner dans un mode d’extraction linéaire d’information qui ne témoigne pas de la détection de l’ingénierie inversée. L’alternative réinitialisant le pointeur d’instruction (terme bien connu de l’homme de l’art désignant un pointeur de l’adresse d’une instruction courante) sur des valeurs antérieures permet de forcer l’unité de traitement à lire uniquement des contenus de la mémoire déjà lus lors de l’extraction linéaire, avant la génération du signal de détection. Selon un autre aspect, il est prévu un circuit intégré de détection comprenant une unité de traitement comprenant un registre d’instruction destiné à stocker une instruction comprenant un code d’opération, et un circuit intégré de détection comprenant un moyen de surveillance configuré pour surveiller des instructions successivement stockées dans le registre d’instruction et pour décoder des codes d’opération des instructions, un moyen de comptage configuré pour déterminer un nombre de codes d’opération consécutifs codants des branchements incrémentaux, et un moyen de génération configuré pour générer un signal de détection si ledit nombre est supérieur ou égal à un seuil de détection. Selon un mode de réalisation, le moyen de comptage est configuré pour comparer les codes d’opération décodés par le moyen de surveillance et une liste de codes d’opération codant des branchements par sauts. Selon un mode de réalisation, la liste de codes d’opération comprend un code d’opération codant une instruction de saut, un code d’opération codant une instruction d’appel de procédure, et un code d’opération codant une instruction de retour de procédure. Selon un mode de réalisation, le moyen de comptage est configuré pour décrémenter une valeur d’un compteur, destiné à être préalablement initialisé au seuil de détection lorsqu’un code d’opération parmi les codes d’opération décodés code une instruction de branchement incrémental, et pour réinitialiser la valeur du compteur au seuil de détection, lorsqu’un code d’opération parmi les codes d’opération décodés comprend un code d’opération codant un branchement par saut et dans lequel le moyen de génération est configuré pour générer le signal de détection lorsque la valeur du compteur est nulle. Selon un mode de réalisation, le choix de la valeur du seuil de détection et une implémentation d’un code source, sont conjointement adaptés pour permettre des exécutions d’instructions de branchement incrémental consécutives lors d’une exécution normale du code source par l’unité de traitement. Selon un mode de réalisation, le circuit intégré défini précédemment comporte en outre un circuit de réaction configuré pour forcer l’adresse mémoire d’une prochaine lecture par l’unité de traitement à des emplacements de mémoire dont les contenus sont non confidentiels, en réponse à l’émission du signal de détection. Selon un mode de réalisation, le circuit de réaction est configuré pour réinitialiser un pointeur d’instruction sur des valeurs du pointeur d’instruction prises avant la génération du signal de détection ou pour commander un accès à des emplacements de mémoire dont les contenus d’origine sont non confidentiels. Selon un mode de réalisation, le circuit de détection et le circuit de réaction comportent des moyens logiques situés dans une région de circuit logique du type glue logique de l’unité de traitement. D’autres avantages et caractéristiques de l’invention apparaîtront à l’examen de la description détaillée de modes de mise en œuvre et de mise en œuvre, nullement limitatifs, et des dessins annexés sur lesquels :     illustrent des modes de réalisation et de mise en œuvre de l’invention. La figure 1 illustre schématiquement un microcontrôleur PE pendant une tentative de mise en œuvre d’un procédé d’ingénierie inversée du type « Extraction Linéaire de Code », plus connu sous le terme anglais « Linear Code Extraction » ou encore sous une forme abrégée par l’acronyme « LCE ». Le microcontrôleur comprend une unité de traitement CPU, par exemple un processeur, connectée à au moins une mémoire MEM1, MEMn, par l’intermédiaire d’un bus de donnée B. Par simplification on fera référence à la mémoire pour désigner l’une des mémoires MEM1, …, MEMn. L’unité de traitement CPU comprend une unité de contrôle UC et un circuit IDEX comprenant un circuit de décodage et un circuit d’exécution. L’unité de contrôle UC comprend notamment un circuit d’extraction d’adresse FA, un registre d’instruction IR et un registre d’un pointeur d’instruction PC qui contient l’adresse mémoire de l’instruction en cours d’exécution. Lors d’un cycle de fonctionnement classique de l’unité de traitement CPU le registre d’instruction IR contient une instruction courante contenant un code d’opération, plus connu sous le terme technique anglais « opcode ». Le registre d’instruction IR est connecté au circuit IDEX. Le code d’opération est une partie d’une instruction en langage machine qui spécifie une opération à effectuer par l’unité de traitement. Outre le code d’opération, la plupart des instructions précisent également des données à traiter, appelées opérandes. Ainsi, afin de déterminer quelle opération effectuer, le code d’opération de l’instruction courante est décodé par le circuit de décodage. Le circuit de décodage est connecté au circuit d’extraction d’adresse FA. Ensuite, le circuit d’extraction d’adresse FA calcule une adresse de la prochaine instruction à lire en fonction du code d’opération de l’instruction courante. Enfin, le cycle recommence, la prochaine instruction vient remplacer l’instruction courante dans le registre d’instruction IR. La tentative d’extraction linaire de code peut comprendre une modification du cycle de fonctionnement de l’unité de traitement CPU en attaquant le registre d’instruction IR. En particulier, la tentative d’extraction linéaire de code peut comprendre une étape dans laquelle le registre d’instruction IR est forcé à stocker une instruction corrompue. L’instruction corrompue comprend par exemple un code d’opération « pirate », c’est-à-dire un code d’opération imposé lors de la procédure d’ingénierie inversée, permettant l’extraction linéaire de code, c’est-à-dire un code d’opération configuré pour coder une instruction de branchement incrémental. On entend par « instruction de branchement incrémental » par exemple une instruction courante qui, une fois traitée par l’unité de traitement, entraine automatiquement une lecture d’une prochaine instruction stockée à une adresse mémoire directement consécutive à l’adresse mémoire de l’instruction courante. Une instruction de branchement incrémental utilise un mode d’adressage dans lequel une prochaine adresse à lire par l’unité de traitement est définie par rapport à l’adresse en cours de lecture, par exemple en spécifiant une quantité à incrémenter par rapport à l’adresse en cours de lecture. Lorsque plusieurs instructions de branchement incrémental sont exécutées à la suite on parle de lecture linéaire de la mémoire par l’unité de traitement CPU. Les instructions de branchement incrémental s’opposent aux instructions de branchement par saut provoquant un saut vers une adresse mémoire indépendante de l’adresse courante ou de la dernière adresse lue par l’unité de traitement CPU. Des instructions de branchement par saut sont par exemple des instructions du langage assembleur telles que des instructions de saut, d’appel de procédure, et de retour après une procédure (respectivement appelés usuellement en anglais « JUMP », « CALL » et « RETURN »). Il peut être prévu pour l’unité de traitement CPU une liste exhaustive des codes d’opération codant des branchements par sauts. En revanche, il n’est typiquement pas prévu de liste exhaustive des codes d’opération codant des branchements incrémentaux. En effet, l’unité de traitement CPU est configurée pour lire par défaut une prochaine instruction stockée à une adresse mémoire directement consécutive par rapport à une adresse mémoire de l’instruction courante, lorsqu’un code d’opération n’appartient pas à la liste des codes d’opération codant des branchements par sauts. Le code d’opération pirate vise donc à mettre l’unité de traitement CPU dans un mode le fonctionnement par défaut, de sorte que l’unité de traitement CPU lise dans l’ordre l’ensemble des adresses de la mémoire MEM1,…, MEMn. En pratique, la tentative d’extraction linéaire de code peut comprendre un premier moyen de mise en œuvre A1, utilisant par exemple des faisceaux d’ions focalisés « FIB » (pour « Focalised Ion Beam » usuellement en anglais) sur le registre d’instruction IR, permettant d’imposer le code d’opération pirate. Alternativement, les moyens de mise en œuvre A1, peuvent comprendre des techniques d’injection de fautes permettant de forcer le registre d’instruction IR pour imposer le code d’opération pirate. De telles techniques d’injection de fautes prévoient notamment de modifier physiquement le circuit (par exemple en ajoutant/enlevant une connexion) afin d’imposer un code d’opération pirate dans le registre d’instruction IR. De plus, la tentative peut comprendre également l’utilisation d’un deuxième moyen de mise en œuvre A2 permettant d’extraire des valeurs logiques provenant de la mémoire. Le deuxième moyen de mise en œuvre A2 utilise des micros-sondes disposées sur un chemin sur lequel transite des données de la mémoire vers le registre d’instruction IR, par exemple directement sur le bus de données B reliant le registre d’instruction IR et la mémoire. Il est donc classiquement possible de lire le code source extrait linéairement de la mémoire et stocké de manière transitoire dans le registre d’instruction IR. La figure 2 illustre le circuit d’extraction d’adresse FA, le registre d’instruction IR, le circuit IDEX, ainsi qu’un circuit de détection DIR permettant de détecter une corruption du registre d’instruction IR du microcontrôleur MC décrit en relation avec la figure 1. Le circuit de détection DIR est notamment configuré pour signaler une tentative d’extraction linaire de code, « LCE », telle que décrite en relation avec la figure 1. Lors de la tentative d’extraction linaire de code, le premier moyen de mise en œuvre A1 force une instruction corrompue contenant un code d’opération pirate dans le registre d’instruction IR. À la suite de cette corruption, le décodeur sépare le code d’opération pirate et les opérandes. Le code d’opération pirate est transmis à un sélecteur d’un multiplexeur MUX qui produit une adresse en sortie du circuit d’extraction FA selon le code d’opération pirate. Le code d’opération pirate force le multiplexeur à sélectionner l’adresse de l’instruction directement suivante par rapport à l’adresse de l’instruction courante. Par exemple, le multiplexeur sélectionne l’adresse dont une valeur est égale à l’adresse de l’instruction courante AD additionnée à la taille Cst de l’instruction courante, c’est-à-dire le nombre d’adresses de mémoire occupées par l’instruction courante. L’adresse de la prochaine instruction est forcée à être linéairement liée à l’adresse de l’instruction courante, au détriment d’autres adresses d’instruction AD1,…, ADn pouvant théoriquement être également sélectionnées et produites en sortie du multiplexeur MUX. Le forçage du code d’opération pirate dans le registre d’instruction IR entraine donc une lecture linéaire du code de la mémoire. Pour mettre en œuvre la détection de cette tentative d’extraction linéaire de code, le circuit de détection DIR comprend un moyen de surveillance configuré pour surveiller les instructions stockées successivement dans le registre d’instruction IR et pour décoder les codes d’opération des instructions. Par exemple, le moyen de surveillance est intégré à une partie du circuit de décodage qui reçoit les instructions et décode les codes d’opération, dans le circuit IDEX. De plus, le circuit de détection DIR comprend également un moyen de comptage configuré pour déterminer un nombre de codes d’opération consécutifs codant des branchements incrémentaux. À cette fin, le moyen de comptage peut par exemple comprendre un compteur dont la valeur courante est représentative du nombre d’instructions de branchement incrémental consécutives. La tentative d’extraction linaire est détectée par exemple lorsque la valeur du compteur indique un nombre d’instructions de branchement incrémental consécutives égal ou supérieur à un seuil de détection et un signal de détection est généré en conséquence. Le circuit de détection DIR comprend à cet égard un moyen de génération configuré pour émettre un signal de détection si le nombre d’instructions de branchement incrémental consécutives est supérieur ou égal au seuil de détection. Par ailleurs, un choix de la valeur du seuil de détection peut être prévu conjointement avec une implémentation particulière du code source contenu dans la mémoire. En particulier, le choix de la valeur du seuil de détection et l’implémentation du code source sont configurés pour permettre le nombre « normal » d’instructions de branchement incrémental exécutées consécutivement sans déclencher le signal de détection. En effet, le fonctionnement normal du microcontrôleur utilise un nombre normal d’instructions de branchement incrémental ne déclenchant pas le signal de détection. On entend par fonctionnement normal du microcontrôleur le fonctionnement pour lequel il a été conçu, par exemple tel que spécifié dans un manuel d’utilisation constructeur (communément appelé « datasheet » en anglais). Afin de pouvoir minimiser la valeur du seuil, il peut être prévu durant l’implémentation du code source d’introduire des instructions de branchement par saut pour s’adapter au seuil de détection choisi, de sorte à diminuer le nombre normal d’instructions de branchement incrémental présent à la suite dans le code. Le nombre normal d’incrémentations d’une quantité constante peut être obtenu automatiquement par simulation de l’exécution du code source par l’unité de traitement CPU, ou à la lecture du code source. Par ailleurs, il est avantageusement prévu une réaction en réponse à la détection de la tentative d’extraction linéaire du code source, de façon à protéger le contenu de la mémoire n’ayant pas encore été lu lors de la tentative d’extraction linéaire de code. Un circuit de réaction, par exemple inclus dans le circuit de détection DIR, est configuré pour forcer l’unité de traitement CPU à lire des adresses mémoires comprenant des contenus non confidentiels. On entend par « contenus non confidentiels » des informations prévues pour être communicables à un tiers qui ne fournissent pas d’informations utilisables dans le cadre du procédé d’ingénierie inversée. Le circuit de réaction peut par exemple avoir directement accès à la borne de commande du multiplexeur MUX et être configuré pour forcer une adresse AD n , d’une prochaine instruction calculée par le circuit d’extraction d’adresse FA. Par ailleurs, le circuit de détection DIR et le circuit de réaction peuvent par exemple être intégrés et « cachés » à l’intérieur de l’unité de traitement CPU. En particulier, il est avantageux que les circuits de détection et de réaction soient dans une région du type « glue logique », plus communément connue sous le terme anglais « glue logic ». En effet, il existe des techniques connues permettant de dissimuler un circuit logique dans une telle région. Ainsi, intégrer le circuit de détection DIR parmi des éléments d’une région du type glue logique a notamment pour avantage de rendre difficile une corruption du circuit de détection DIR. La figure 3 illustre un exemple d’étapes de fonctionnement mises en œuvre par le circuit de détection DIR décrit en référence à la figure 2. Une première étape S1 comprend une surveillance des instructions successivement stockées dans le registre d’instruction et un décodage des codes d’opération OpC, et cela pour chaque nouvelle instruction courante stockée. La surveillance des instructions successivement des instructions et le décodage des codes d’opérations OpC peut par exemple être mis en œuvre par le circuit de décodage de l’unité de traitement. Une deuxième étape S2 comprend une comparaison Comp entre les codes d’opération OpC décodés et une liste de codes d’opération codant des branchements par sauts. La comparaison Comp permet de déterminer si l’instruction courante est une instruction de branchement incrémental ou de branchement par saut. Par exemple, la comparaison Comp peut faire passer à la valeur logique 1 un résultat de la comparaison si le code d’opération de l’instruction courante appartient à la liste de codes d’opération. Sinon, la comparaison Comp peut faire passer le résultat de la comparaison à la valeur logique 0. La liste de codes d’opération peut par exemple comprendre des codes d’opérations correspondant à une instruction de saut Jmp, une instruction d’appel de procédure Cll, ou encore une instruction de retour de procédure Rtn. Une troisième étape S3 comprend deux actions différentes selon le résultat de la comparaison Comp de l’étape précédente S2. D’une part, si le code d’opération de l’instruction courante code une instruction de branchement incrémental, c’est-à-dire si le résultat de la comparaison Comp est égal à 0, alors la troisième étape S3 comprend une décrémentation d’une valeur d’un compteur Cnt, préalablement initialisé au seuil de détection Th. Alternativement, il est possible d’incrémenter de compteur Cnt jusqu’à la valeur du seuil de détection Th, dans ce cas la valeur du compteur Cnt est préalablement initialisée à zéro. D’autre part, si au contraire le code d’opération de l’instruction courante code une instruction de branchement par saut, c’est-à-dire si le résultat de la comparaison Comp est égal à 1, alors la troisième étape S3 comprend une réinitialisation de la valeur du compteur au seuil de détection Th.   Une quatrième étape S4 comprend une lecture de la valeur du compteur Cnt. Si la valeur du compteur Cnt est comprise entre la valeur zéro et le seuil de détection Th, alors le procédé revient à la première étape S1 en attendant que la prochaine instruction soit stockée dans le registre d’instruction IR. Dans le cas où le compteur est décrémenté, lorsque la valeur du compteur Cnt est égale à zéro, alors la quatrième étape S4 comprend une génération du signal de détection LCEdetec dans laquelle une valeur de signal de détection LCEdetec passe par exemple de la valeur logique 0 à la valeur logique 1. Alternativement, dans le cas où le compteur est incrémenté, c’est lorsque la valeur du compteur Cnt est égale au seuil de détection Th que le signal de détection LCEdetec passe de la valeur logique 0 à la valeur logique 1. Dans les deux cas, lorsque le signal de détection LCEdetec est généré et le compteur Cnt est réinitialisé. En alternative, le décompte (ou le compte) du compteur Cnt peut être effectué dans une plage de valeurs comprises entre deux bornes décalées arbitrairement du point zéro. En effet, une valeur de décalage non nulle peut avantageusement être choisie de sorte à décaler les deux bornes du compteur Cnt. Cela permet que ni le point de départ ni le point d’arrivée du compteur Cnt ne puissent être connus par avance. Par exemple, on peut choisir que la borne haute de la plage soit égale au seuil de détection additionnée à une valeur de décalage, et que la borne basse de la plage soit égale à la valeur de décalage. Dans cet exemple, le compteur est décrémenté de la borne haute à la borne basse, ou incrémenté de la borne basse à la borne haute. En outre, dans cette alternative, il peut également être prévu une génération du signal de détection LCEdetec si la valeur du compteur Cnt n’est pas comprise entre la borne basse et la borne haute. Une telle génération permet de contrecarrer une tentative de forçage des valeurs du compteur Cnt en dehors des deux bornes. Cela permet d’introduire un travail supplémentaire pour effectuer une procédure d’ingénierie inversée et contribue à complexifier ladite procédure, dans le but de la rendre non rentable au global. Procédé de détection d’extraction linéaire d’information dans une unité de traitement (CPU) utilisant un registre d’instruction (IR) destiné à stocker une instruction comprenant un code d’opération (OpC), le procédé comprenant une surveillance des instructions successivement stockées dans le registre d’instruction comportant un décodage des codes d’opération, une détermination d’un nombre de codes d’opération consécutifs codant des branchements incrémentaux, et une génération d’un signal de détection (LCEdetec) si ledit nombre est supérieur ou égal à un seuil de détection (Th). Procédé selon la revendication 1, dans lequel la détermination du nombre de codes d’opération consécutifs codant des branchements incrémentaux comprend une comparaison entre les codes d’opération (OpC) décodés et une liste de codes d’opération codant des branchements par sauts. Procédé selon la revendication 2, dans lequel la liste de codes d’opération comprend un code d’opération codant une instruction de saut (Jmp), un code d’opération codant une instruction d’appel de procédure (Cll), et un code d’opération codant une instruction de retour de procédure (Rtn). Procédé selon l’une des revendications précédentes, dans lequel la détermination du nombre de codes d’opération consécutifs codant des branchements incrémentaux comprend en outre : – une décrémentation d’une valeur d’un compteur (Cnt), préalablement initialisé à un seuil de détection (Th), lorsqu’un code d’opération parmi les codes d’opération décodés code une instruction de branchement incrémental ; – une réinitialisation de la valeur du compteur au seuil de détection (Th), lorsqu’un code d’opération parmi les codes d’opération décodés comprend un code d’opération codant un branchement par saut (Jmp, Cll, Rtn) ; et dans lequel ledit signal de détection (LCEdetec) est généré lorsque la valeur du compteur est nulle. Procédé selon l’une des revendications précédentes, dans lequel un choix de la valeur du seuil de détection et une implémentation d’un code source sont effectués conjointement, pour permettre des exécutions d’instructions de branchement incrémental consécutives lors d’une exécution normale du code source par l’unité de traitement (CPU). Procédé de protection contre une extraction linéaire d’information comprenant le procédé de détection selon l’une des revendications 1 à 5, et comprenant en réponse à la génération du signal de détection (LCEdetec), une étape forçant l’adresse mémoire d’une prochaine lecture par l’unité de traitement (CPU) à des emplacements de mémoire dont les contenus sont non confidentiels. Procédé de protection selon la revendication 6, dans lequel ladite étape comprend une réinitialisation d’un pointeur d’instruction sur des valeurs du pointeur d’instruction prises avant la génération du signal de détection, ou une commande d’accès à des emplacements de mémoire dont les contenus d’origine sont non confidentiels. Circuit intégré comprenant une unité de traitement (CPU) comprenant un registre d’instruction (IR) destiné à stocker une instruction comprenant un code d’opération (OpC), et un circuit de détection (DIR) comprenant un moyen de surveillance configuré pour surveiller des instructions successivement stockées dans le registre d’instruction et pour décoder des codes d’opération des instructions, un moyen de comptage configuré pour déterminer un nombre de codes d’opération consécutifs codants des branchements incrémentaux, et un moyen de génération configuré pour générer un signal de détection (LCEdetec) si ledit nombre est supérieur ou égal à un seuil de détection (Th). Circuit intégré selon la revendication 8, dans lequel le moyen de comptage est configuré pour comparer les codes d’opération (OpC) décodés par le moyen de surveillance et une liste de codes d’opération codant des branchements par sauts. Circuit intégré selon la revendication 9, dans lequel la liste de codes d’opération comprend un code d’opération codant une instruction de saut (Jmp), un code d’opération codant une instruction d’appel de procédure (Cll), et un code d’opération codant une instruction de retour de procédure (Rtn). Circuit intégré selon l’une des revendications 8 à 10, dans lequel le moyen de comptage est configuré pour décrémenter une valeur d’un compteur (Cnt), destiné à être préalablement initialisé au seuil de détection (Th) lorsqu’un code d’opération parmi les codes d’opération décodés code une instruction de branchement incrémental, et pour réinitialiser la valeur du compteur au seuil de détection, lorsqu’un code d’opération parmi les codes d’opération décodés comprend un code d’opération codant un branchement par saut (Jmp, Cll, Rtn) et dans lequel le moyen de génération est configuré pour générer le signal de détection (LCEdetec) lorsque la valeur du compteur est nulle. Circuit intégré selon l’une des revendications 8 à 11, dans lequel le choix de la valeur du seuil de détection (Th) et une implémentation d’un code source, sont conjointement adaptés pour permettre des exécutions d’instructions de branchement incrémental consécutives lors d’une exécution normale du code source par l’unité de traitement (CPU). Circuit intégré selon l’une des revendications 8 à 12, comportant en outre un circuit de réaction configuré pour forcer l’adresse mémoire d’une prochaine lecture par l’unité de traitement (CPU) à des emplacements de mémoire dont les contenus sont non confidentiels, en réponse à l’émission du signal de détection (LCEdetec). Circuit intégré selon la revendication 13, dans lequel le circuit de réaction est configuré pour réinitialiser un pointeur d’instruction sur des valeurs du pointeur d’instruction prises avant la génération du signal de détection ou pour commander un accès à des emplacements de mémoire dont les contenus d’origine sont non confidentiels. Circuit intégré selon l’une des revendications 8 à 14, dans lequel le circuit de détection (DIR) et le circuit de réaction comportent des moyens logiques situés dans une région de circuit logique du type glue logique de l’unité de traitement (CPU).