Brevet FR3017226A1 — publié le 20150807

Procédé de sécurisation d'un code programme, système et processeur correspondants L'invention concerne la sécurisation de codes programmes destinés à être exécutés par un module de traitement informatique, par exemple mais non limitativement un microprocesseur. L'invention s'applique tout particulièrement mais non exclusivement aux systèmes sur puce, communément désignés par l'homme du métier sous l'acronyme anglosaxon « SoC » (« System- On-Chip »). Actuellement, un système sur puce complexe peut comporter, outre un microprocesseur, des centaines de modules différents, communément désignés par l'homme du métier sous l'acronyme anglosaxon IP (Intellectual Property). La plupart de ces modules peuvent contenir des microcontrôleurs qui exécutent du code. Et ces modules peuvent être utilisés par des attaquants comme points d'entrée pour espionner et éventuellement ultérieurement modifier le code programme exécuté par le microprocesseur. Selon un mode de mise en oeuvre et de réalisation, il est proposé une sécurisation d'un code programme destiné à être exécuté par un microprocesseur par exemple, qui rende ce code programme moins sensible aux attaques. Selon un mode de mise en oeuvre et de réalisation, il est également proposé une sécurisation d'un code programme qui permet une vérification de l'intégrité de ce code programme. Selon un mode de mise en oeuvre et de réalisation, il est encore proposé un schéma de sécurisation du code programme distribué tout au long de la chaîne de production et d'exécution et non pas seulement au niveau de la séquence d'amorçage (plus connue par l'homme du métier sous l'acronyme anglosaxon de « Boot »). Selon un aspect, il est proposé un procédé de sécurisation d'un code programme destiné à être exécuté par un module de traitement informatique, par exemple un processeur ou un microprocesseur, comportant au moins un cache de niveau un d'une mémoire cache contenant des lignes de cache possédant chacune un champ d'adresses et un champ de données, ce champ de données étant destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique. Le procédé selon cet aspect comprend : a) un stockage du code programme compilé et chiffré dans des emplacements mémoire d'une première mémoire, par exemple une mémoire vive dynamique (mémoire DRAM), externe au module de traitement informatique, ces emplacements mémoire correspondant à des champs de données de lignes de cache, et lors d'une requête d'un mot d'instruction par l'unité centrale non présent dans le champ de donnée d'une ligne de cache de la mémoire cache, b) une extraction de la première mémoire du contenu chiffré de l'emplacement mémoire contenant ledit mot d'instruction requis et une délivrance de ce contenu chiffré au module de traitement automatique, et c) un déchiffrement au sein du module de traitement informatique, dudit contenu chiffré. Ainsi, lors d'un défaut de cache (« cache miss » en langue anglaise) le contenu d'un emplacement mémoire de la première mémoire, par exemple la mémoire DRAM, est délivré chiffré sur le milieu de communication, par exemple un réseau sur puce (plus communément désigné par l'homme du métier sous l'acronyme anglo saxon de NOC : « Network-On-Chip ») au microprocesseur qui effectue le déchiffrement uniquement en son sein, et plus particulièrement localement au niveau de la mémoire cache. De ce fait, aucun contenu en clair d'une partie du code programme n'est accessible par un attaquant au niveau d'un point d'entrée du système. Il est possible que la mémoire cache soit une hiérarchie de caches et contienne outre le cache de niveau un, au moins un cache de niveau supérieur, par exemple un cache de niveau deux et un cache de niveaux trois, le cache de niveau trois pouvant être éventuellement à l'extérieur du module de traitement informatique. Dans ce cas, le déchiffrement dudit contenu chiffré est avantageusement effectué localement au niveau du cache de niveau un, c'est dire entre le cache de niveau deux et le cache de niveau un ou bien en aval du cache de niveau un, et le contenu chiffré délivré à la mémoire cache reste stocké chiffré dans les différents niveaux de cache de niveaux supérieurs ou égaux à deux. Cela étant plusieurs possibilités existent quant à l'instant de ce déchiffrement par rapport au stockage dans la mémoire cache. Ainsi, il est possible d'effectuer, préalablement au déchiffrement du contenu chiffré, un stockage de ce contenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. En d'autres termes, on stocke d'abord le contenu chiffré dans la mémoire cache avant d'effectuer le déchiffrement. En variante, il apparaît toutefois préférable d'effectuer un déchiffrement du contenu chiffré, puis postérieurement à ce déchiffrement, un stockage du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache. Selon un mode de mise en oeuvre, lors d'une requête d'un mot d'instruction par l'unité centrale déjà présent dans un contenu chiffré du champ de données d'une ligne de cache de la mémoire cache, le procédé comprend avantageusement un déchiffrement au sein du module de traitement informatique dudit contenu chiffré. Selon une variante simplifiée, le procédé comprend, postérieurement audit déchiffrement, une délivrance du mot d'instruction requis à l'unité centrale. En d'autres termes, il n'est alors effectué par exemple aucune vérification de l'intégrité de ce contenu déchiffré avant délivrance du mot d'instruction requis à l'unité centrale. Cela étant, il est préférable, pour augmenter encore le niveau de sécurité, d'effectuer une vérification de l'intégrité du code programme. Ainsi, selon un mode de mise en oeuvre, le procédé comprend en outre, avant délivrance du mot d'instruction requis, une vérification de l'intégrité dudit contenu déchiffré et une délivrance du mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. Plus précisément, selon un mode de mise en oeuvre, le procédé comprend : -une phase initiale, par exemple lors de la compilation du code programme, antérieure à l'étape a), comportant un stockage du code programme modifié compilé et chiffré dans des emplacements mémoire d'une mémoire initiale, par exemple une mémoire non volatile du type FLASH, externe au module de traitement informatique, ces emplacements mémoire correspondant là encore à des champs de données de lignes de cache, le code programme modifié compilé comportant des groupes de mots d'instruction stockés dans lesdits emplacements mémoire de la mémoire initiale, chaque groupe de mots d'instruction comportant des premiers mots d'instruction résultant de la compilation du code programme et un deuxième mot d'instruction, par exemple une instruction de « non-opération » (plus connue par l'homme du métier sous l'acronyme anglosaxon de « instruction NOP » : No OPeration), tous les deuxièmes mots d'instruction étant identiques et situés respectivement à des endroits de référence dans les groupes d'instruction correspondants (ces endroits de référence peuvent occuper des positions identiques, par exemple la dernière position, dans les groupes d'instructions correspondants, ou bien la position d'un endroit de référence dans le groupe correspondant peut être calculable à partir d'un paramètre du groupe, par exemple l'adresse de la ligne de cache ou celle de son emplacement mémoire associé), -une première phase, par exemple lors de la phase d'amorçage (« boot ») comportant un déchiffrement du code compilé et modifié, un remplacement du deuxième mot d'instruction de chaque groupe d'instruction par une indication de contrôle obtenue à partir de certains au moins des premiers mots d'instruction dudit groupe d'instruction, par exemple une somme de contrôle (plus connue par l'homme du métier sous l'acronyme anglosaxon de « checksum »), de façon à former un groupe d'instructions modifié, un chiffrement des groupes d'instructions modifiés et ladite étape a) comporte alors le stockage des groupes d'instructions modifiés chiffrés dans les emplacements mémoire de ladite première mémoire, par exemple la mémoire DRAM, -et ladite vérification de l'intégrité dudit contenu déchiffré comprend une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant alors représentative du caractère intègre dudit contenu déchiffré, et, si le résultat de ladite vérification est représentatif d'un contenu intègre, le procédé comprend alors en outre, avant délivrance du mot d'instruction requis à l'unité centrale, un remplacement de l'indication de contrôle par le deuxième mot d'instruction, en l'espèce l'instruction « NOP ». On obtient alors un schéma de sécurisation du code programme qui est distribué tout au long de la chaîne de production et d'exécution de ce code programme, c'est-à-dire lors de la compilation du code programme, lors de la délivrance de ce code programme depuis la mémoire FLASH vers la mémoire DRAM et lors de l'exécution du code programme de par le fait que le déchiffrement de la portion de code programme délivrée au microprocesseur dans le cas d'un défaut de cache n'est effectué qu'à l'intérieur du microprocesseur et plus précisément localement au niveau de la mémoire cache. Comme indiqué ci-avant, l'indication de contrôle peut être une somme de contrôle (« checksum ») et la vérification de l'intégrité de ladite indication de contrôle comprend alors, après déchiffrement du contenu chiffré, un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le compte rendu déchiffré et de la somme de contrôle nouvellement calculée. De façon à augmenter encore le niveau de sécurité, il est particulièrement avantageux que la première phase comprenne en outre une vérification de l'intégrité du code programme modifié compilé avant remplacement de chaque deuxième mot d'instruction. A cet égard, ladite vérification de l'intégrité du code programme modifié peut être là encore effectuée à l'aide d'une somme de contrôle supplémentaire calculée à partir du code programme modifié. Ainsi, à titre d'exemple, on peut calculer une somme de contrôle avant chiffrement du code programme modifié et stockage dans la mémoire FLASH. Comme indiqué ci-avant, ladite première phase peut être effectuée lors du lancement d'un programme d'amorçage. Selon un autre aspect, il est proposé un système comprenant -un module de traitement informatique comportant au moins un cache de niveau un d'une mémoire cache contenant des lignes de cache possédant chacune un champ d'adresse et un champ de données destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique, -une première mémoire externe au module de traitement informatique possédant des emplacements mémoires correspondant à des champs de données de lignes de caches et destinés à stocker le code programme compilé et chiffré, -un premier contrôleur de mémoire couplé à la première mémoire externe, -un milieu de communication couplé au premier contrôleur de mémoire et au module de traitement informatique, -le module de traitement informatique comportant en outre des moyens de contrôle configurés pour, en présence d'une requête d'un mot d'instruction par l'unité centrale non présent dans le champ de données d'une ligne de cache de la mémoire cache, délivrer sur le milieu de communication à destination du premier contrôleur mémoire une commande de lecture du contenu chiffré de l'emplacement mémoire contenant ledit mot d'instruction requis, -le premier contrôleur mémoire étant configuré pour délivrer ce contenu chiffré au module de traitement informatique, -le module de traitement informatique comportant en outre des moyens de déchiffrement configurés pour déchiffrer ce contenu chiffré. Lorsque la mémoire cache comprend le cache de niveau un et au moins un cache de niveau supérieur, les moyens de déchiffrement sont avantageusement configurés pour effectuer le déchiffrement dudit contenu chiffré au niveau du cache de niveau un. Selon un mode de réalisation, les moyens de contrôle sont configurés pour effectuer, préalablement au déchiffrement du contenu chiffré, un stockage de ce contenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. Selon un autre mode de réalisation possible, les moyens de contrôle sont configurés pour effectuer, postérieurement au déchiffrement du contenu chiffré, un stockage du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache. Selon un autre mode de réalisation, en présence d'une requête d'un mot d'instruction par l'unité centrale présent dans un contenu chiffré du champ de données d'une ligne de cache de la mémoire cache, les moyens de déchiffrement sont configurés pour effectuer un déchiffrement dudit contenu chiffré localement au niveau du cache de niveau un. Selon une première variante, les moyens de contrôle sont configurés pour postérieurement audit déchiffrement, délivrer le mot d'instruction requis à l'unité centrale. Selon une autre variante, le système comprend en outre des moyens de vérification configurés pour, avant délivrance du mot d'instruction requis, effectuer une vérification de l'intégrité dudit contenu déchiffré et délivrer le mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. Selon un mode de réalisation, le système comprend en outre -une mémoire initiale externe au module de traitement informatique possédant des emplacements mémoires correspondant à des champs de données de lignes de caches et destinés à stocker un code programme modifié compilé et chiffré comportant des groupes de mots d'instructions, chaque groupe de mots d'instructions comportant des premiers mots d'instructions résultant de la compilation du code programme et un deuxième mot d'instruction, tous les deuxièmes mots d'instructions étant identiques et situés à des endroits de référence, par exemple au même endroit de référence, dans les groupes d'instructions correspondants, -un contrôleur de mémoire initiale couplé à la mémoire initiale externe et au milieu de communication, -des moyens de traitement configurés pour effectuer un déchiffrement du code compilé modifié, remplacer le deuxième mot d'instruction de chaque groupe d'instructions par une indication de contrôle obtenue à partir de certains au moins des premiers mots d'instructions dudit groupe d'instructions de façon à former un groupe d'instructions modifié, chiffrer les groupes d'instructions modifiés en vue du stockage des groupes d'instructions modifiés chiffrés dans les emplacements mémoire de ladite première mémoire, -et les moyens de vérification sont configurés pour effectuer une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant représentatif du caractère intègre dudit contenu déchiffré, et si le résultat de ladite vérification est représentatif d'un contenu intègre, pour remplacer, avant délivrance du mot d'instruction requis à l'unité centrale, l'indication de contrôle par le deuxième mot d'instruction. Selon un mode de réalisation, ladite indication de contrôle est une somme de contrôle et les moyens de vérification comportent des moyens de calcul configurés pour effectuer, après déchiffrement dudit contenu chiffré, un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le contenu déchiffré et de la somme de contrôle nouvellement calculée. Selon un mode de réalisation, les moyens de traitement comprennent en outre des moyens de vérification initiale configurés pour effectuer une vérification de l'intégrité du code programme modifié compilé avant remplacement de chaque deuxième mot d'instruction. A cet égard, les moyens de vérification initiale peuvent comporter des moyens de calcul initiaux configurés pour calculer une somme de contrôle supplémentaire à partir du code programme modifié. Le système peut comporter un contrôleur d'amorçage contenant avantageusement lesdits moyens de traitement. Le système peut être un système sur puce (« System-OnChip »). Selon un autre aspect, il est proposé un module de traitement informatique, par exemple un processeur ou un microprocesseur, comprenant -une interface destinée à être couplée à un milieu de communication, -une unité centrale, -au moins un cache de niveau un d'une mémoire cache contenant des lignes de cache possédant chacune un champ d'adresse et un champ de données destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique, -des moyens de contrôle configurés pour, en présence d'une requête d'un mot d'instruction par l'unité centrale non présent dans le champ de données d'une ligne de cache de la mémoire cache, délivrer sur le milieu de communication à destination d'une mémoire externe, une commande de lecture du contenu chiffré de l'emplacement mémoire de cette mémoire externe contenant ledit mot d'instruction requis, l'interface étant configurée pour recevoir ce contenu chiffré, et -des moyens de déchiffrement configurés pour déchiffrer ce contenu chiffré. Selon un mode de réalisation, les moyens de contrôle sont configurés pour effectuer, préalablement au déchiffrement du contenu chiffré, un stockage de ce contenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. Selon un autre mode de réalisation possible, les moyens de contrôle sont configurés pour effectuer, postérieurement au déchiffrement du contenu chiffré, un stockage du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache. Selon un mode de réalisation, en présence d'une requête d'un mot d'instruction par l'unité centrale présent dans un contenu chiffré du champ de données d'une ligne de cache de la mémoire cache, les moyens de déchiffrement sont configurés pour effectuer un déchiffrement dudit contenu chiffré localement au niveau du cache de niveau un. Selon une première variante possible, les moyens de contrôle sont configurés pour postérieurement audit déchiffrement, délivrer le mot d'instruction requis à l'unité centrale. Selon une autre variante possible, le module comprend en outre des moyens de vérification configurés pour, avant délivrance du mot d'instruction requis, effectuer une vérification de l'intégrité du contenu déchiffré du champ de données d'une ligne de cache et délivrer le mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. Selon un mode de réalisation, le contenu déchiffré du champ de données d'une ligne de cache contient un groupe de mots d'instructions comportant des premiers mots d'instructions relatifs à un code programme compilé et une indication de contrôle obtenue à partir de certains au moins des premiers mots d'instructions et située à un endroit de référence dans la ligne de cache, qui peut être le même pour toutes les lignes de cache, et les moyens de vérification sont configurés pour effectuer une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant représentatif du caractère intègre dudit contenu déchiffré, et si le résultat de ladite vérification est représentatif d'un contenu intègre, pour remplacer, avant délivrance du mot d'instruction requis à l'unité centrale, l'indication de contrôle par un deuxième mot d'instruction, ce mot d'instruction étant identique pour toutes les lignes de cache. Le deuxième mot d'instruction peut être une instruction de non-opération et ladite indication de contrôle peut être une somme de contrôle et les moyens de vérification comportent alors par exemple des moyens de calcul configurés pour effectuer, après déchiffrement dudit contenu déchiffré, un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le contenu déchiffré et de la somme de contrôle nouvellement calculée. D'autres buts, caractéristiques et avantages de l'invention apparaîtront à l'examen de la description détaillée de modes de mise en oeuvre et de réalisation, sur lesquels les figures 1 à 10 illustrent schématiquement différents modes de mise en oeuvre et de réalisation de l'invention. Sur la figure 1, la référence SYS désigne un système, par exemple un système sur puce (SOC : System-On-Chip) comportant un module de traitement informatique 1, par exemple un microprocesseur, couplé à un milieu de communication 2, en l'espèce un réseau sur puce (NOC : Network-On-Chip). Outre le microprocesseur 1, le système SYS comporte une mémoire 4, également dénommée mémoire initiale, par exemple une mémoire non volatile de type FLASH, associée à un contrôleur 3 de mémoire initiale couplé au réseau 2. Le système SYS comporte également une autre mémoire 6, également dénommée première mémoire, par exemple une mémoire DRAM ainsi qu'un premier contrôleur de mémoire associé 5 couplé également au réseau 2. Le système SYS comporte également différents modules ou IP, 7 (un seul est représenté à des fins de simplification) couplés également au réseau 2. Enfin, dans le cas présent, le système SYS comporte un contrôleur d'amorçage 18 (« boot controller ») couplé également au réseau 2 et configuré pour lancer une séquence d'amorçage (« boot ») du système SYS, et en particulier du microprocesseur 1. Dans le cas présent, le contrôleur d'amorçage 18 comporte des moyens de traitement 180 comportant eux-mêmes des moyens de vérification initiale 1800 incluant des moyens de calcul initiaux 1801, qui peuvent être réalisés par exemple de façon logicielle, et dont on reviendra plus en détail ci-après sur la fonction. Le microprocesseur 1 comporte une interface 10 couplée au réseau 2, une unité centrale 11 (également connue par l'homme du métier sous l'acronyme anglosaxon de CPU : « Central Processing Unit »). Le processeur 1 comporte également dans cet exemple de réalisation, une mémoire cache 12 que l'on suppose être ici uniquement de niveau 1 et comportant un cache d'instructions 120 de niveau 1 et un cache de données 130 de niveau 1. Le processeur 1 comporte également un contrôleur de cache 14 ainsi que des moyens de contrôle 15, des moyens de déchiffrement 16 et des moyens de vérification 17 sur les fonctions desquels on reviendra plus en détail ci-après. Le système SYS comporte par ailleurs un compilateur 19. Comme il est classique en la matière, et illustré sur la figure 2, le cache d'instructions 120 comporte des lignes de caches LCHJ comportant chacune un champ d'adresses TGJ et un champ de données CHDJ. Le champ de données CHDJ comporte plusieurs mots d'instruction exécutables par l'unité centrale 11 du microprocesseur et le champ d'adresses TG; comporte l'adresse du champ de données CHD, dans la première mémoire 6. Certains bits de cette adresse permettent d'identifier les différents mots d'instruction présents dans le champ de données CHDJ. On va maintenant décrire, en se référant aux figures 3 à 9, différents modes de mise en oeuvre du procédé selon l'invention. Sur la figure 3, la référence CP désigne un code programme destiné à être exécuté par le microprocesseur 1. A l'étape 30, le code programme CP est compilé et complété par des mots d'instruction spécifiques, en l'espèce des instructions de non-opération (Instruction NOP : « No OPeration ») de façon à obtenir un code programme compilé et modifié CPM. Comme illustré sur cette figure 3, ce code programme compilé modifié CPM comporte des groupes J, de mots d'instruction. Chaque groupe J, de mots d'instruction comporte des premiers mots d'instruction MIl résultant de la compilation du code programme et un deuxième mot d'instruction, en l'espèce une instruction NOP, tous les deuxièmes mots d'instruction étant identiques et situés au même endroit dans les groupes d'instruction correspondants. Dans l'exemple décrit ici, l'instruction NOP est placée à la dernière position de chaque groupe d'instruction J. Cela étant, cette position pourrait être différente pour autant qu'elle soit par exemple identique dans chacun des groupes ou bien aisément calculable. De même, le deuxième mot d'instruction pourrait être une instruction différente de l'instruction NOP mais cela nécessiterait alors le sacrifice d'un registre du microprocesseur car une telle instruction peut être exécutée par le processeur. De façon à permettre un premier niveau de vérification d'intégrité, le compilateur 19 effectue un calcul 31 d'une somme de contrôle CHS1 (« Checksum ») à partir de certains au moins, et en pratique, de tous les mots d'instruction du code programme compilé modifié. Le code programme compilé modifié CPM ainsi que la somme de contrôle CHS1 sont chiffrés (étape 32) par des moyens de chiffrement classiques pouvant être incorporés dans le compilateur 19. A titre d'exemple non limitatif, on peut utiliser comme algorithme de chiffrement un algorithme du type AES. Le code programme modifié compilé et chiffré est alors stocké (étape 33) sous le contrôle du contrôleur mémoire 3, dans les emplacements mémoire EMO, de la mémoire initiale 4. Ces emplacements mémoire correspondent à des champs de données de lignes de cache. Le procédé de sécurisation comporte ensuite une première phase effectuée avantageusement lors de la phase d'amorçage 34 (« boot ») du processeur. Les opérations qui vont maintenant être décrites sont typiquement effectuées par le contrôleur d'amorçage 18. Les moyens de traitement 180 du contrôleur d'amorçage 18 effectuent un déchiffrement 35 du code programme compilé modifié et de la somme de contrôle CHS1 stockés dans la mémoire initiale 4, et extraits de cette mémoire via le contrôleur mémoire 3. Les moyens de vérification initiale 1800 effectuent alors une vérification 36 de la somme de contrôle CHS1. Plus précisément, de façon classique, les moyens de calcul initiaux 1801 sont configurés pour calculer à nouveau une somme de contrôle supplémentaire à partir du code programme modifié CPM et les moyens de vérification initiale 1800 comparent la somme de contrôle CHS1 avec la somme de contrôle supplémentaire qui vient d'être calculée (étape 37, figure 4). Si la vérification s'avère négative, c'est-à-dire si les deux sommes de contrôle sont différentes, alors ceci est représentatif d'un code programme modifié non intègre ayant été potentiellement corrompu. Dans ce cas, un traitement d'erreur spécifique 38 peut être appliqué. La teneur d'un tel traitement d'erreur varie selon les applications et peut par exemple consister en un blocage du système SYS. Dans le cas où le résultat de la comparaison est positif, c'est-à- dire représentatif d'un contenu intègre du code programme modifié CPM, les moyens de traitement 180 déterminent (étape 39) pour chaque groupe d'instruction J, une somme de contrôle CHS2, obtenue à partir des mots d'instruction MI1 et NOP du groupe J, et remplacent le deuxième mot d'instruction, en l'espèce l'instruction NOP, par cette somme de contrôle CHS2' de façon à former un groupe d'instruction modifié JM,. Puis, les moyens de traitement 180 effectuent un chiffrement 40 des groupes d'instruction modifiés JM, et les stockent (étape 41) via le contrôleur de mémoire 5 dans les emplacements mémoire EM1, de la première mémoire 6. Là encore, ces emplacements mémoire EM1, correspondent à des champs de données de lignes de cache. A ce stade, le code programme est prêt à être exécuté par le microprocesseur 1. Ceci va être explicité plus en détail en référence aux figures 5 à 9. On suppose sur la figure 5, que dans une étape 50, l'unité centrale 11 du microprocesseur requiert le mot d'instruction MI. Les moyens de contrôle 15, qui en pratique peuvent être par exemple réalisés de façon logicielle au sein du contrôleur de cache 14, vérifient, par une comparaison d'adresses dans les différents champs d'adresses TG, du cache 12, si ce mot d'instruction MI est présent dans une ligne de cache LCH du cache 120. Si tel n'est pas le cas, c'est-à-dire dans le cas d'un défaut de cache, les moyens de contrôle délivrent sur le réseau 2 (étape 52) une commande CMD de lecture du contenu chiffré de l'emplacement mémoire de la première mémoire 6 contenant le mot d'instruction requis. Cette commande contient par conséquent l'adresse de cet emplacement mémoire. Le contrôleur de mémoire 5 extrait alors de cet emplacement mémoire son contenu chiffré, c'est-à-dire le groupe d'instructions modifié chiffré, que l'on suppose être dans cet exemple le groupe JM,. Le contrôleur de mémoire délivre alors ce groupe chiffré JM, sur le réseau 2 à destination du microprocesseur 1 (étape 54). Les moyens de déchiffrement 16, qui peuvent être également réalisés de façon logicielle au sein du contrôleur de cache 14, procèdent alors, dans cette variante de réalisation, à un déchiffrement 55 du groupe d'instructions modifié chiffré JM, et les moyens de vérification 17, qui peuvent être également incorporés de façon logicielle au sein du contrôleur de cache, effectuent une vérification 56 de l'intégrité de ce contenu déchiffré, c'est-à-dire du groupe d'instructions modifié déchiffré JM,. A cet égard, les moyens de vérification vont vérifier l'intégrité de la somme de contrôle CHS2, (étape 57). Cette vérification s'effectue de façon classique par un recalcul d'une nouvelle somme de contrôle CHS2'j et par une comparaison de la somme de contrôle CHS2J reçue et de la somme de contrôle CHS2'j calculée. En cas de comparaison négative, représentative d'une non- intégrité du groupe d'instructions modifié reçu, le contrôleur de cache peut mettre en oeuvre un traitement d'erreur spécifique 58. Dans le cas où la vérification de la somme de contrôle est représentative d'un contenu intègre du groupe d'instructions modifié JMJ reçu, les moyens de vérification 17 remplacent la somme de contrôle CHS2J par le deuxième mot d'instruction, en l'espèce l'instruction NOP de façon à obtenir de nouveau le groupe d'instructions Jj qui avait été obtenu à l'issue de l'étape 30 de la figure 3. Ce groupe d'instructions JJ qui comporte les premiers mots d'instruction MI1 et l'instruction NOP, est alors stocké (étape 60) dans le champ de données d'une ligne de cache, en l'espèce la ligne de cache LCH',. Puis, le mot d'instruction requis MI est délivré (étape 61) à l'unité centrale 11 en vue de son exécution, le mot d'instruction requis MI pouvant être soit l'un des mots d'instruction MI1 soit l'instruction NOP. Dans ce mode de réalisation, on a supposé que le déchiffrement d'un contenu chiffré et la vérification de l'intégrité du contenu déchiffré ont été effectués avant stockage dans une ligne de cache. Dans ces conditions, si dans l'étape 51, le mot d'instruction requis MI appartient déjà à une ligne de cache LCH, on procède directement à sa délivrance (étape 61). D'autres variantes de mise en oeuvre sont possibles. Ainsi, comme illustré sur la figure 7, après la délivrance du groupe d'instruction modifié JMJ chiffré au microprocesseur 1, on peut procéder directement (étape 70) au stockage de ce groupe JMJ chiffré dans une ligne de cache, en l'espèce la ligne de cache LCH.. Puis, les moyens de déchiffrement 16 procèdent au déchiffrement du groupe d'instructions modifié JMj (étape 71) et les moyens de vérification 17 procèdent (étape 72) à une vérification de l'intégrité du groupe d'instructions modifié déchiffré d'une façon analogue à ce qui a été décrit précédemment en relation avec l'étape 56 de la figure 5. Dans le cas où ce traitement de vérification est représentatif d'un contenu non intègre (étape 73), un traitement d'erreur 74 est mis en place. Si le traitement de vérification s'avère positif, c'est-à-dire représentatif d'un contenu intègre du groupe d'instructions modifié JMj, les moyens de vérification procèdent alors (étape 75) à un remplacement de la somme de contrôle CHS2j par l'instruction NOP d'une façon analogue à ce qui a été décrit en référence à l'étape 59 de la figure 6, de façon à restituer le groupe d'instructions Jj puis à délivrer, dans l'étape 76, le mot d'instruction requis MI. Si, comme illustré sur la figure 8, le mot d'instruction requis MI appartient à une ligne LCH, par exemple la ligne de cache LCH,,, dont le champ de données est chiffré, alors, on va directement (étape 81) à l'étape 71 de la figure 7 pour effectuer ensuite les étapes 72, 73, éventuellement 74, 75 et 76. Il est également possible, comme illustré sur la figure 9, dans le cas où le mot d'instruction requis MI appartient à une ligne de cache LCH (étape 90), par exemple la ligne de cache LCH', déjà déchiffrée, que l'on effectue le traitement de vérification non pas avant le stockage du contenu déchiffré dans la ligne de cache mais postérieurement à ce stockage avant délivrance du mot d'instruction requis. Dans ce cas, l'étape 91 amène directement à l'étape 56 de la figure 5 de façon à exécuter les étapes 56, 57, éventuellement 58 et 59 à 61. Dans tout ce qui précède, on a supposé que la mémoire cache ne comportait qu'un cache de niveau un. Cela étant, comme illustré sur la figure 10, la mémoire cache peut être une hiérarchie de caches et comporter des caches de niveaux différents, par exemple un cache de niveau un 1201, un cache de niveau deux 1202 et un cache de niveau trois 1203. Certains de ces caches peuvent être même situés en dehors du microprocesseur, comme par exemple le cache de niveau trois. Dans ce cas, tout ce qui vient d'être décrit ci-avant, à savoir le déchiffrement, la vérification d'intégrité, sont effectués localement au niveau du cache de niveau un. En d'autres termes, tout déchiffrement de contenu s'effectuera uniquement soit entre le cache de niveau deux et le cache de niveau un soit en aval du cache de niveau un avant délivrance du mot d'instruction à l'unité centrale. Et, tout contenu extrait de la mémoire 6 restera chiffré tant qu'il reste présent dans un cache de niveau supérieur au niveau un. Chaque cache est associé à un contrôleur de cache. Si le mot d'instruction requis n'est pas présent dans le cache niveau un mais est présent dans le cache niveau deux par exemple, le contenu de la ligne de cache correspondante du cache de niveau deux reste chiffrée dans le cache de niveau deux et est délivrée par le contrôleur de cache de niveau deux au contrôleur de cache de niveau un. Celui-ci peut alors stocker le contenu chiffré dans la ligne de cache du cache de niveau un avant déchiffrement ou bien effectuer d'abord le déchiffrement avant stockage. Dans le cas où le mot d'instruction requis n'appartient à aucun cache, c'est-à-dire dans le cas d'un défaut de cache (« cache miss »), le contenu chiffré extrait de la mémoire DRAM est délivré au contrôleur de cache de niveau trois qui est ici supposé être à l'extérieur du microprocesseur. A ce stade le contrôleur de cache de niveau trois peut soit mettre à jour le cache de niveau 3 en y stockant le contenu chiffré puis délivrer le contenu chiffré au microprocesseur et plus particulièrement au contrôleur de cache de niveau deux, ou bien délivrer directement le contenu chiffré au contrôleur de cache de niveau deux avant de mettre à jour le cache de niveau trois. Le contrôleur de cache de niveau deux peut soit mettre à jour le cache de niveau 2 en y stockant le contenu chiffré puis délivrer le contenu chiffré au contrôleur de cache de niveau un, ou bien délivrer directement le contenu chiffré au contrôleur de cache de niveau un avant de mettre à jour le cache de niveau deux. Et là encore le contrôleur de cache de niveau un peut alors stocker le contenu chiffré dans la ligne de cache du cache de niveau un avant déchiffrement ou bien effectuer d'abord le déchiffrement avant stockage. L'invention n'est pas limitée aux modes de réalisation et de mise en oeuvre qui viennent d'être décrits mais en embrasse toutes les variantes. Ainsi, dans une variante simplifiée, si l'on ne souhaite pas effectuer de traitement de vérification d'intégrité, on peut simplement procéder à un déchiffrement du contenu chiffré extrait de la mémoire DRAM et délivrer le mot d'instruction requis. Par ailleurs, le système n'est pas nécessairement un système sur puce (SoC) mais peut par exemple comporter un processeur et des mémoires externes connectées sur une carte et mutuellement couplés par un bus classique.20 REVENDICATIONS1. Procédé de sécurisation d'un code programme destiné à être exécuté par un module de traitement informatique comportant au moins un cache de niveau un d'une mémoire cache (120) contenant des lignes de cache possédant chacune un champ d'adresse et un champ de données destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique, le procédé comprenant a) un stockage (41) du code programme compilé et chiffré dans des emplacements mémoires d'une première mémoire (6) externe au module de traitement informatique correspondant à des champs de données de lignes de caches, et lors d'une requête d'un mot d'instruction (MI) par l'unité centrale non présent dans le champ de données d'une ligne de cache de la mémoire cache, b) une extraction (53) de la première mémoire (6) du contenu chiffré de l'emplacement mémoire contenant ledit mot d'instruction requis et une délivrance de ce contenu chiffré (JMJ) au module de traitement informatique (1) et, c) un déchiffrement (55) au sein du module de traitement informatique, dudit contenu chiffré. 2. Procédé selon la revendication 1, dans lequel la mémoire cache comprend le cache de niveau un et au moins un cache de niveau supérieur, et le déchiffrement dudit contenu chiffré est effectué localement au niveau dudit cache de niveau un. 3. Procédé selon la revendication 1 ou 2, comprenant, préalablement au déchiffrement (71) du contenu chiffré, un stockage (70) de ce contenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. 4. Procédé selon la revendication 1 ou 2, comprenant postérieurement au déchiffrement (55) du contenu chiffré, un stockage (60) du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache (120). 5. Procédé selon la revendication 1 ou 2, comprenant, lors d'une requête d'un mot d'instruction par l'unité centrale présent dans un contenu chiffré du champ de données d'une ligne de cache de lamémoire cache, un déchiffrement (71) dudit contenu chiffré au sein du module de traitement informatique localement au niveau du cache de niveau un.. 6. Procédé selon l'une des revendications précédentes, comprenant en outre postérieurement audit déchiffrement, une délivrance (61) du mot d'instruction requis à l'unité centrale. 7. Procédé selon l'une des revendications 1 à 5, comprenant en outre avant délivrance du mot d'instruction requis, une vérification (56) de l'intégrité dudit contenu déchiffré et une délivrance (61) du mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. 8. Procédé selon la revendication 7, comprenant une phase initiale, antérieure à l'étape a), comportant un stockage (33) d'un code programme modifié compilé et chiffré dans des emplacements mémoire d'une mémoire initiale (4) externe au module de traitement informatique correspondant à des champs de données de lignes de caches, ledit code programme modifié compilé comportant des groupes de mots d'instructions (J,) stockés dans lesdits emplacements mémoire de la mémoire initiale, chaque groupe de mots d'instructions comportant des premiers mots d'instructions (MI1) résultant de la compilation du code programme et un deuxième mot d'instruction (NOP), tous les deuxièmes mots d'instructions étant identiques et situés respectivement à des endroits de référence dans les groupes d'instructions correspondants, une première phase comportant un déchiffrement (35) du code compilé modifié, un remplacement (39) du deuxième mot d'instruction (NOP) de chaque groupe d'instructions par une indication de contrôle (CHS2,) obtenue à partir de certains au moins des premiers mots d'instructions dudit groupe d'instructions (J,) de façon à former un groupe d'instructions modifié (JM,), un chiffrement (40) des groupes d'instructions modifiés et ladite étape a) comportant le stockage (41) des groupes d'instructions modifiés chiffrés dans les emplacements mémoire de ladite première mémoire (6),et dans lequel ladite vérification (56) de l'intégrité dudit contenu déchiffré comprend une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant représentatif du caractère intègre dudit contenu déchiffré, et si le résultat de ladite vérification est représentatif d'un contenu intègre, le procédé comprend en outre avant délivrance (61) du mot d'instruction requis à l'unité centrale, un remplacement (59) de l'indication de contrôle par le deuxième mot d'instruction (NOP). 9. Procédé selon la revendication 8, dans lequel les endroits de référence occupent des positions identiques dans les groupes d'instructions correspondants. 10. Procédé selon la revendication 8 ou 9, dans lequel le deuxième mot d'instruction est une instruction de non-opération (NOP). 11. Procédé selon la revendication 8, 9 ou 10, dans lequel ladite indication de contrôle est une somme de contrôle (CHS2,) et la vérification de l'intégrité de ladite indication de contrôle comprend après déchiffrement dudit contenu chiffré un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le contenu déchiffré et de la somme de contrôle nouvellement calculée. 12. Procédé selon l'une des revendications 8 à 11, dans lequel la première phase comprend en outre une vérification (36) de l'intégrité du code programme modifié compilé avant remplacement de chaque deuxième mot d'instruction. 13. Procédé selon la revendication 12, dans lequel ladite vérification de l'intégrité du code programme modifié est effectuée à l'aide d'une somme de contrôle supplémentaire (CHS1) calculée à partir du code programme modifié. 14. Procédé selon l'une des revendications 8 à 13, dans lequel ladite première phase est effectuée lors du lancement (34) d'un programme d'amorçage. 15. Système, comprenant-un module de traitement informatique (1) comportant au moins un cache de niveau un d'une mémoire cache (120) contenant des lignes de cache possédant chacune un champ d'adresse et un champ de données destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique, -une première mémoire (6) externe au module de traitement informatique possédant des emplacements mémoires correspondant à des champs de données de lignes de caches et destinés à stocker le code programme compilé et chiffré, -un premier contrôleur de mémoire (5) couplé à la première mémoire externe, -un milieu de communication (2) couplé au premier contrôleur de mémoire et au module de traitement informatique, -le module de traitement informatique (1) comportant en outre des moyens de contrôle (15) configurés pour, en présence d'une requête d'un mot d'instruction par l'unité centrale non présent dans le champ de données d'une ligne de cache de la mémoire cache, délivrer sur le milieu de communication à destination du premier contrôleur mémoire une commande (CMD) de lecture du contenu chiffré de l'emplacement mémoire contenant ledit mot d'instruction requis, -le premier contrôleur mémoire (5) étant configuré pour délivrer ce contenu chiffré au module de traitement informatique, -le module de traitement informatique (1) comportant en outre des moyens de déchiffrement (16) configurés pour déchiffrer ce contenu chiffré. 16. Système selon la revendication 15, dans lequel la mémoire cache comprend le cache de niveau un et au moins un cache de niveau supérieur, et les moyens de déchiffrement (16) sont configurés pour effectuer le déchiffrement dudit contenu chiffré localement au niveau dudit cache de niveau un. 17. Système selon la revendication 15 ou 16, dans lequel les moyens de contrôle (15) sont configurés pour effectuer, préalablement au déchiffrement du contenu chiffré, un stockage de cecontenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. 18. Système selon la revendication 15 ou 16, dans lequel les moyens de contrôle (15) sont configurés pour effectuer, postérieurement au déchiffrement du contenu chiffré, un stockage du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache. 19. Système selon la revendication 15 ou 16, dans lequel, en présence d'une requête d'un mot d'instruction par l'unité centrale présent dans un contenu chiffré du champ de données d'une ligne de cache de la mémoire cache, les moyens de déchiffrement (16) sont configurés pour effectuer un déchiffrement dudit contenu chiffré localement au niveau du cache de niveau un. 20. Système selon l'une des revendications 15 à 19, dans lequel les moyens de contrôle (15) sont configurés pour postérieurement audit déchiffrement, délivrer le mot d'instruction requis à l'unité centrale. 21. Système selon l'une des revendications 15 à 19, dans lequel le module de traitement informatique (1) comprend en outre des moyens de vérification (17) configurés pour, avant délivrance du mot d'instruction requis, effectuer une vérification de l'intégrité dudit contenu déchiffré et délivrer le mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. 22. Système selon la revendication 21, comprenant en outre -une mémoire initiale (4) externe au module de traitement informatique possédant des emplacements mémoires correspondant à des champs de données de lignes de caches et destinés à stocker un code programme modifié compilé et chiffré comportant des groupes de mots d'instructions, chaque groupe de mots d'instructions comportant des premiers mots d'instructions résultant de la compilation du code programme et un deuxième mot d'instruction, tous les deuxièmes mots d'instructions étant identiques et situés respectivement à des endroits de référence dans les groupes d'instructions correspondants,-un contrôleur de mémoire initiale (3) couplé à la mémoire initiale (4) externe et au milieu de communication (2), -des moyens de traitement (180) configurés pour effectuer un déchiffrement du code compilé modifié, remplacer le deuxième mot d'instruction de chaque groupe d'instructions par une indication de contrôle obtenue à partir de certains au moins des premiers mots d'instructions dudit groupe d'instructions de façon à former un groupe d'instructions modifié, chiffrer les groupes d'instructions modifiés en vue du stockage des groupes d'instructions modifiés chiffrés dans les emplacements mémoire de ladite première mémoire, et les moyens de vérification (17) sont configurés pour effectuer une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant représentatif du caractère intègre dudit contenu déchiffré, et si le résultat de ladite vérification est représentatif d'un contenu intègre, pour remplacer, avant délivrance du mot d'instruction requis à l'unité centrale, un l'indication de contrôle par le deuxième mot d'instruction. 23. Système selon la revendication 22, dans lequel les endroits de référence occupent des positions identiques dans les groupes d'instructions correspondants. 24. Système selon la revendication 22 ou 23, dans lequel le deuxième mot d'instruction est une instruction de non-opération (NOP). 25. Système selon la revendication 22, 23 ou 24, dans lequel ladite indication de contrôle est une somme de contrôle (CHS2,) et les moyens de vérification comportent des moyens de calcul configurés pour effectuer, après déchiffrement dudit contenu chiffré, un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le contenu déchiffré et de la somme de contrôle nouvellement calculée. 26. Système selon l'une des revendications 19 à 21, dans lequel les moyens de traitement (180) comprennent en outre des moyens de vérification initiale (1800) configurés pour effectuer unevérification de l'intégrité du code programme modifié compilé avant remplacement de chaque deuxième mot d'instruction. 27. Système selon la revendication 22, dans lequel les moyens de vérification initiale (1800) comportent des moyens de calcul initiaux (1801) configurés pour calculer une somme de contrôle supplémentaire à partir du code programme modifié. 28. Système selon l'une des revendications 19 à 23, comprenant en outre un contrôleur d'amorçage (18) contenant lesdits moyens de traitement (180). 29. Système selon l'une des revendications 15 à 28, formant un système sur puce. 30. Module de traitement informatique, comprenant une interface (10) destinée à être couplée à un milieu de communication (2), une unité centrale (11), au moins un cache de niveau un d'une mémoire cache (120) contenant des lignes de cache possédant chacune un champ d'adresse et un champ de données destiné à stocker des mots d'instructions exécutables par l'unité centrale du module de traitement informatique, des moyens de contrôle (15) configurés pour, en présence d'une requête d'un mot d'instruction par l'unité centrale non présent dans le champ de données d'une ligne de cache de la mémoire cache, délivrer sur le milieu de communication à destination d'une mémoire externe, une commande de lecture du contenu chiffré de l'emplacement mémoire de cette mémoire contenant ledit mot d'instruction requis, l'interface (10) étant configurée pour recevoir ce contenu chiffré, et des moyens de déchiffrement (16) configurés pour déchiffrer ce contenu chiffré. 31. Module selon la revendication 30, dans lequel la mémoire cache comprend le cache de niveau un et au moins un cache de niveau supérieur, et les moyens de déchiffrement (16) sont configurés pour effectuer le déchiffrement dudit contenu chiffré localement au niveau dudit cache de niveau un. 32. Module selon la revendication 30 ou 31, dans lequel les moyens de contrôle (15) sont configurés pour effectuer, préalablement au déchiffrement du contenu chiffré, un stockage de cecontenu chiffré dans le champ de données d'une ligne de cache de la mémoire cache. 33. Module selon la revendication 30 ou 31, dans lequel les moyens de contrôle (15) sont configurés pour effectuer, postérieurement au déchiffrement du contenu chiffré, un stockage du contenu déchiffré dans le champ de données d'une ligne de cache du cache de niveau un de la mémoire cache. 34. Module selon la revendication 30 ou 31, dans lequel, en présence d'une requête d'un mot d'instruction par l'unité centrale présent dans un contenu chiffré du champ de données d'une ligne de cache de la mémoire cache, les moyens de déchiffrement (16) sont configurés pour effectuer un déchiffrement dudit contenu chiffré localement au niveau du cache de niveau un. 35. Module selon l'une des revendications 30 à 34, dans lequel les moyens de contrôle (15) sont configurés pour postérieurement audit déchiffrement, délivrer le mot d'instruction requis à l'unité centrale. 36. Module selon l'une des revendications 30 à 34, comprenant en outre des moyens de vérification (17) configurés pour, avant délivrance du mot d'instruction requis, effectuer une vérification de l'intégrité du contenu déchiffré du champ de données d'une ligne de cache et délivrer le mot d'instruction requis si le résultat de ladite vérification est représentatif d'un contenu intègre. 37. Module selon la revendication 36, dans lequel le contenu déchiffré du champ de données d'une ligne de cache contient un groupe de mots d'instructions comportant des premiers mots d'instructions relatifs à un code programme compilé et une indication de contrôle obtenue à partir de certains au moins des premiers mots d'instructions et située à un endroit de référence dans la ligne de cache, et les moyens de vérification (17) sont configurés pour effectuer une vérification de l'intégrité de l'indication de contrôle, une indication de contrôle intègre étant représentatif du caractère intègre dudit contenu déchiffré, et si le résultat de ladite vérification est représentatif d'un contenu intègre, pour remplacer, avantdélivrance du mot d'instruction requis à l'unité centrale, l'indication de contrôle par un deuxième mot d'instruction (NOP), ce mot d'instruction étant identique pour toutes les lignes de cache. 38. Module selon la revendication 37, dans lequel les endroits de référence sont identiques pour toutes les lignes de cache. 39. Module selon la revendication 37 ou 38, dans lequel le deuxième mot d'instruction est une instruction de non-opération (NOP). 40. Module selon la revendication 37, 38 ou 39, dans lequel ladite indication de contrôle est une somme de contrôle et les moyens de vérification (17) comportent des moyens de calcul configurés pour effectuer, après déchiffrement dudit contenu chiffré, un nouveau calcul d'une somme de contrôle et une comparaison de la somme de contrôle présente dans le contenu déchiffré et de la somme de contrôle nouvellement calculée.