Brevet FR3013863A1 — publié le 20150529

SYSTÈMES ET PROCÉDÉS DE MISE EN OEUVRE DE MICROCONTROLEURS SÉCURISÉS CONTEXTE A. Domaine technique La présente invention concerne des microcontrôleurs comportant des programmes de chargement d'amorçage sécurisés et, -plus particulièrement, des systèmes, des dispositifs et des procédés pour étendre de manière sure la fonctionnalité du code de mémoire à lecture seule (ROM). B. Contexte de l'invention Étant donné que les microcontrôleurs sont intégrés dans 15 pratiquement tous les dispositifs électroniques, la demande pour des microcontrôleurs sécurisés augmente sans cesse, et les fabricants de microcontrôleurs s'efforcent de fournir des caractéristiques de sécurité améliorées. Les microcontrôleurs sécurisés permettent aux dispositifs électroniques de satisfaire aux nouvelles spécifications de fiabilité et de 20 conformité aux normes dans les applications, telles que les opérations bancaires ou la défense, comprenant la protection contre les contrefaçons et de la propriété intellectuelle. Malheureusement, les intégrateurs de système perçoivent souvent les caractéristiques de sécurité dans les produits à semi-conducteurs 25 comme imposant des contraintes de conception à un système, nuisant à la facilité d'utilisation et à la flexibilité d'intégration de microcontrôleurs dans un grand nombre d'applications diverses sans augmentation inutile du coût de l'intégration de système. Dans le domaine des microcontrôleurs sécurisés, des méthodes de sécurité robustes, mais 30 cependant faciles à gérer, sont hautement souhaitables pour garantir l'intégrité de la « chaîne de confiance » à chaque niveau du système. L'exécution d'un code sécurisé dans un système intégré protège contre un logiciel malveillant et de nombreux autres scénarios d'attaque. Idéalement, les systèmes intégrés pourraient être configurés d'une 35 manière telle qu'un microcontrôleur sécurisé donné pourrait être configuré pour fonctionner avec n'importe quel dispositif de mémoire externe souhaité. En pratique, cependant, les approches existantes n'offrent qu'un ensemble fixé de possibilités étant donné que les microcontrôleurs et les programmes de chargement initiaux sont conçus pour ne prendre en charge qu'un certain nombre de circuits intégrés de mémoires volatiles et non volatiles externes spécifiques. Plus important, étant donné que les programmes de chargement initiaux sont écrits et mémorisés dans une ROM ou une mémoire flash interne (qui peut être verrouillée, c'est-à-dire, rendue uniquement exécutable), il est pratiquement impossible de les modifier. La modification du code. de ROM, par exemple parce qu'il y a un bug au démarrage d'une application, nécessite généralement une refabrication de la puce entière, ce qui est une entreprise qui prend du temps et qui est très coûteuse. En conséquence, les concepteurs de système ont un choix limité quant aux circuits intégrés de mémoires externes qui pourraient fournir les bénéfices recherchés (économie, disponibilité, etc.). Cette circonstance est davantage aggravée par le fait que la technologie des mémoires évolue rapidement et que les dispositifs de mémoire externes deviennent obsolètes assez rapidement. Dans certaines approches existantes, le microcontrôleur est conçu pour rechercher une mémoire externe appropriée. Cependant, 20 rien n'empêche une mémoire externe incompatible qui n'est pas prise en charge par le microcontrôleur de se connecter et de signaler sa disponibilité au microcontrôleur. Dans le meilleur des cas, le microcontrôleur peut fonctionner avec la mémoire externe non prise en charge, mais retourner à des paramètres par défaut, de sorte que le 25 système ne peut pas entièrement tirer profit de la capacité de performance offerte par le matériel non pris en charge (configuration à vitesse de transmission plus élevée, caractéristiques non standard, etc.). Autrement dit, le microcontrôleur doit s'appuyer sur le plus petit dénominateur commun entre ce que le microcontrôleur prend en charge 30 et le matériel non pris en charge particulier. Souvent, lorsqu'un circuit intégré de mémoire externe autrement pris en charge ne satisfait pas aux spécifications de conception, les concepteurs de système ont recours à l'utilisation d'une mémoire prise en charge connue et ajoutent un programme de chargement d'amorçage 35 secondaire qui configure un circuit intégré de mémoire souhaité. Le programme de chargement initial de ROM est ensuite configuré pour lire dans la mémoire externe non prise en charge. Cependant, de cette manière, le programme de chargement initial de ROM abandonne complètement son contrôle sur la mémoire externe, c'est-à-dire, qu'il ne lance plus aucun appel de fonction, ce qui équivaut à ce que la mémoire externe exécute le processus d'amorçage toute seule sans les fonctions de sécurité du programme de chargement initial de ROM, exposant ainsi le système à des risques de sécurité. De plus, ces approches nécessitent un code, un temps d'amorçage et des circuits intégrés de mémoire (espace de PCB) supplémentaires, ce qui augmente le coût de conception et le risque de pannes de composants. Certaines approches existantes caractérisant une mémoire flash interne offrent un bit de sélection pour l'amorçage soit sur la ROM, soit sur la mémoire flash interne, mais ces approches n'ont pas de mécanisme de sécurité de vérification de code, ce qui rend le système vulnérable aux violations. Il existe un besoin pour des outils pour que les concepteurs de système surmontent les limitations décrites ci- dessus. RÉSUMÉ DE L'INVENTION Les systèmes et les procédés présentés permettent d'étendre de 20 manière sure la fonctionnalité du code de ROM d'un système de microcontrôleur sécurisé dans une phase de démarrage d'un système intégré. Dans divers modes de réalisation de l'invention, cela est accompli en délégant une partie du processus d'amorçage à un applet, ou 25 « appliquette », qui est mémorisé dans une mémoire modifiable. L'applet permet d'accéder à n'importe quel dispositif de mémoire externe, de sorte que le système de microcontrôleur n'est pas limité à l'utilisation uniquement de circuits intégrés de mémoires externes spécifiques qui correspondent à certaines mises en oeuvre de programme de 30 chargement d'amorçage, ce qui élimine le besoin d'une mémoire externe supplémentaire et fournit des options d'amorçage pratiquement illimitées. La fiabilité du code exécuté est préservée étant donné que la sécurité du système n'est pas compromise par la flexibilité que 35 l'exécution de l'applet introduit dans le processus d'amorçage. Dans certains modes de réalisation, un microcontrôleur sécurisé fonctionne avec un code de ROM de confiance par nature inaltérable interne au microcontrôleur sécurisé, tandis que l'applet modifiable et les dispositifs de mémoire externes sont sécurisés par des moyens supplémentaires. Avantageusement, le code d'applet peut être configuré pour contenir des données secrètes. Avantageusement, les données secrètes peuvent être l'une d'une clé cryptographique privée et d'une signature numérique. Avantageusement, la première mémoire peut être configurée pour vérifier les données secrètes. Certaines caractéristiques et certains avantages de la présente 10 invention ont été décrits généralement ici ; cependant, des caractéristiques, des avantages et des modes de réalisation supplémentaires présentés ici seront évidents à l'homme du métier à la vue des dessins, de la description et des revendications. Par conséquent, on devrait comprendre que l'étendue de l'invention n'est 15 pas limitée par les modes de réalisation particuliers présentés dans cette section de résumé. BRÈVE DESCRIPTION DES DESSINS Il va être fait référence à des modes de réalisation de l'invention, 20 dont des exemples peuvent être illustrés sur les figures jointes. Ces figures sont destinées à être illustratives, non limitatives. Bien que l'invention soit décrite généralement dans le contexte de ces modes réalisation, on devrait comprendre que ceci n'est pas destiné à limiter l'étendue de l'invention à ces modes de réalisation particuliers. 25 La figure 1 montre un système intégré de l'art antérieur utilisant un microcontrôleur. La figure 2 illustre un système comprenant un microcontrôleur sécurisé avec une fonctionnalité de code de ROM étendue selon divers modes de réalisation de l'invention. 30 La figure 3 est un organigramme d'un processus illustratif pour étendre de manière sure une fonctionnalité de code de ROM selon divers modes de réalisation de l'invention. DESCRIPTION DÉTAILLÉE DES MODES DE RÉALISATION 35 PRÉFÉRÉS Dans la description qui suit, pour les besoins de l'explication, des détails spécifiques sont présentés afin de permettre une compréhension de l'invention. Il sera évident, cependant, à un homme du métier que l'invention peut être mise en pratique sans ces détails. Un homme du métier reconnaîtra que les modes de réalisation de la présente invention, décrits ci-dessous, peuvent être effectués de diverses 5 manières et en utilisant divers moyens. Les hommes du métier reconnaîtront également que des modifications, des applications et des modes de réalisation supplémentaires sont dans l'étendue de l'invention, comme le sont les domaines supplémentaires dans lesquels l'invention peut s'avérer utiles. Par conséquent, les modes de réalisation 10 décrits ci-dessous sont illustratifs de modes de réalisation spécifiques de l'invention et sont censés éviter d'obscurcir l'invention. Une référence dans la spécification à « un mode de réalisation » signifie qu'une particularité, une structure, une caractéristique ou une fonction particulière décrite en relation avec le mode de réalisation est 15 incluse dans au moins un mode de réalisation de l'invention. Les apparitions de l'expression « dans un mode de réalisation » ou similaire à divers endroits dans la spécification ne font pas nécessairement référence au même mode de réalisation. En outre, les relations entre les composants ou entre les étapes 20 de procédé sur les figures ne sont pas limitées aux relations qui sont effectuées directement. Au lieu de cela, les relations illustrées sur les figures entre les composants ou les étapes de procédé peuvent être modifiées ou autrement changées par l'ajout à ceux-ci de composants ou d'étapes de procédé intermédiaires, sans s'écarter des enseignements 25 de la présente invention. Dans ce document, les expressions « programme de chargement d'amorçage » et « programme de chargement initial » sont utilisées de manière interchangeable. Le mot « programme » est utilisé de manière interchangeable avec le mot « code » et l'expression « logiciel de ROM » 30 est utilisée de manière interchangeable avec l'expression « code de ROM ». Le mot « application » et l'expression « logiciel d'application » font référence à un jeu d'instructions capables d'être exécutées ou interprétées par un microcontrôleur, comprenant des instructions de logiciel ou de micrologiciel et un code source. 35 En outre, bien que les exemples présentés dans le présent document fassent référence à un « microcontrôleur » ou à un « microprocesseur », il est envisagé que l'invention s'applique également à n'importe quel autre dispositif électronique reconnu par un homme du métier, qu'il soit à base de silicium ou non. La figure 1 montre un système intégré de l'art antérieur utilisant un microcontrôleur. Le système intégré 100 est un dispositif électronique qui comprend un microcontrôleur 102, une mémoire non volatile externe 104 et une mémoire volatile externe 106. Le microcontrôleur 102 est généralement un circuit intégré (IC) unique qui est monté sur une carte de circuit imprimé et comprend une mémoire volatile interne qui peut mémoriser un code exécutable et des données. Le microcontrôleur 102 sur la figure 1 comprend une unité centrale (CPU) 140, un bus de mémoire 142, une interface de mémoire externe 144 et une mémoire à lecture seule (ROM) 116. La ROM 116 comprend en outre un programme de chargement initial de ROM 112, et la mémoire non volatile externe 104 comprend un programme en sommeil, tandis que la mémoire volatile externe 106 comprend un programme exécutable. La mémoire volatile externe 106 est n'importe quelle variante de RAM, telle qu'une SD-RAM, une SRAM, etc. La mémoire non volatile externe 104, qui est accessible et qui peut être lue par le microcontrôleur 102, est habituellement une mémoire flash SPI NON ET ou NON OU intégrée dans le système 100, mais elle peut également être mise en oeuvre en tant que carte SD, clé USB, lecteur de disque dur, etc. En fonctionnement, le logiciel de ROM (code de ROM) intégré dans la ROM 116 commande un processus d'amorçage qui est effectué avant l'exécution d'un programme d'application. Le programme d'application commande généralement le dispositif électronique qui comprend le microcontrôleur 102 et échange des signaux de commande et des données avec la mémoire 104, 106 par l'intermédiaire de l'interface externe 144. Le programme d'application dans la mémoire non volatile externe 104 comprend un jeu d'éléments de code exécutable et des données constantes sont mémorisées de manière permanente, avec des données non volatiles associées. Dans certaines conceptions, une combinaison de la CPU 140 et de la mémoire non volatile 104 (par exemple, une mémoire flash NON OU) permet une exécution sur place, c'est-à-dire que le programme d'application en sommeil ne doit pas être copié de la mémoire non volatile 104 dans la mémoire volatile 106 avant son exécution. Une fois que le microcontrôleur 102 a été mis sous tension ou réinitialisé, le programme de chargement initial 112 configure l'interface de mémoire 144 pour permettre à la CPU 140 de lire ou d'écrire dans la mémoire externe 104, 106 selon les besoins. Ensuite, le programme de chargement initial 112 lit dans la mémoire non volatile externe 104 et/ ou écrit dans la mémoire volatile externe 106, ou n'importe quelle combinaison de celles-ci. Le programme d'application en sommeil est initialement mémorisé dans la mémoire non volatile externe 104 et est ensuite copié dans la mémoire volatile externe 106 avant son exécution. La mémoire volatile externe 106 mémorise un programme d'application actif, avec ses données volatiles associées (à moins que le programme d'application actif ne soit mémorisé dans la mémoire non volatile 104, ce qui permet une exécution sur place). Le programme d'application actif comprend un jeu d'éléments de code exécutable exécuté par la CPU 140, des données constantes et des données d'exécution nécessaires (par exemple, des données volatiles, des variables) pour effectuer l'exécution. Le programme de chargement initial de ROM 112, en utilisant le code de ROM, gère le processus de chargement d'amorçage ainsi que le dispositif de mémoire externe 106 qui exécute finalement le programme d'application en transformant le programme en sommeil en un programme d'application actif. Un processus de chargement d'amorçage type comprend 1) la copie du code exécutable en sommeil dans la mémoire 106 pour permettre une récupération de code par la CPU 140 (notez que ceci est optionnel dans les technologies de mémoire qui permettent une exécution sur place) ; 2) l'attribution d'espace pour les données d'exécution dans la mémoire volatile 106 ; 3) la copie des données constantes (binaires) dans l'espace de données d'exécution ; et 4) l'exécution du programme d'application (qui prend le contrôle de la CPU 140). Le programme de chargement initial 112, qui effectue le processus de chargement d'amorçage, est généralement situé dans une ROM exécutable (ou une mémoire flash interne verrouillée) dans le microcontrôleur 102. Certains microcontrôleurs, au lieu de s'amorcer à partir de la ROM 112 s'amorcent indirectement à partir d'un emplacement prédéfini, tel qu'un circuit intégré de mémoire externe désigné. Comme mentionné précédemment, un inconvénient majeur associé au système 100 est qu'une fois que le code de ROM a été écrit, il 5 est pratiquement impossible de le modifier, de sorte que, si le programme de chargement initial 112 ne réussit à démarrer ou ne réussit à configurer, à lire dans ou à écrire dans un circuit intégré de mémoire qui n'est pas pris en charge initialement par le code de ROM, le système 100 peut nécessiter une reconception importante. Par 10 conséquent, il serait souhaitable d'avoir un processus de chargement d'amorçage souple qui permette à des systèmes intégrés de fonctionner avec de nombreux dispositifs de mémoire internes et externes. La figure 2 illustre un système comprenant un microcontrôleur sécurisé avec une fonctionnalité de code de ROM étendue selon divers 15 modes de réalisation de l'invention. Le système 200 est un dispositif électronique qui comprend un microcontrôleur sécurisé 202, une mémoire à accès aléatoire interne (IRAM) 220, une mémoire non volatile externe 204 et une mémoire volatile externe 206. Le microcontrôleur 202 comprend une CPU 240, un bus de mémoire 242, une interface de 20 mémoire externe 244, une ROM 210, qui comprend en outre un programme de chargement initial de ROM 212, une mémoire volatile interne (TRAM) 220 et une mémoire non volatile interne (INVM) 230, qui est une mémoire inscriptible mais non volatile à l'intérieur du microcontrôleur 202 configurée pour mémoriser un code et des 25 données. L'interface de mémoire externe 244 est configurée pour s'interfacer avec une pluralité de composants électroniques externes qui peuvent être montés dans le même dispositif électronique que le système 200 ou dans d'autres dispositifs (par exemple, des mémoires NON ET, une RAM, des clés USB, un afficheur, un clavier) qui sont 30 couplés au dispositif. Dans l'exemple de la figure 2, la CPU 240, la ROM 210, la RAM interne 220, l'INVM 230 et l'interface de mémoire externe 244 sont couplées au bus de mémoire 242, ce qui permet la communication de données entre les composants du microcontrôleur 202. Le système 200 35 comprend en outre une mémoire non volatile externe 204, qui mémorise généralement un programme d'application en sommeil 270, et une mémoire volatile externe 206, qui est utilisée pour exécuter le programme d'application en tant que programme actif 280. Le programme de chargement initial 212 est mémorisé dans une ROM (ou mémoire flash verrouillée) 210 à l'intérieur du microcontrôleur 202. L'IRAM 220 est configurée pour exécuter le code et mémoriser les données d'exécution à la fois du programme de chargement initial 212 et d'un applet de chargement initial 232. L'applet de chargement initial 232 est un programme personnalisable qui est mémorisé dans la mémoire non volatile interne inscriptible (INVM) 230 et commande l'accès en lecture au dispositif de mémoire externe 270, 280 pendant une phase de chargement d'amorçage du programme de chargement initial 212. Dans un mode de réalisation, l'applet 232 comprend un code pour lire dans et configurer n'importe quel type de mémoire externe, par 15 exemple, en écrivant dans la mémoire externe conformément à des spécifications spécifiques. Cela peut être accompli sans utiliser des circuits intégrés de mémoires externes supplémentaires qui contiennent l'applet de chargement initial 232. Dans un mode de réalisation, le programme de chargement initial 212 est un code de ROM inaltérable 20 qui commande un processus d'amorçage dans le microcontrôleur 202 et vérifie le code personnalisé de l'applet de chargement initial 232 afin de s'assurer que la méthode de sécurité du microcontrôleur 202 reste intacte. En fonctionnement, une fois que le microcontrôleur 202 a été mis 25 sous tension ou réinitialisé, le microcontrôleur 202 commence à exécuter le programme de chargement initial 212 en place à partir de la ROM 210. Dans un mode de réalisation, le programme de chargement initial 212 recherche, dans l'INVM 230, l'applet de chargement initial 232. L'applet 232 peut être développé et signé avec une clé privée ou 30 une autre signature numérique, de sorte qu'une fois que l'applet de chargement initial 232 est détecté, il soit chargé dans l'INVM 230 par l'intermédiaire d'un protocole qui utilise une signature numérique. Le programme de chargement initial 212 vérifie la signature de l'applet 232 afin de s'assurer que le code de l'applet 232 provient d'une source de 35 confiance qui n'a pas été modifiée, de sorte qu'en l'absence de la signature numérique, même si l'applet 232 est chargé, il ne fonctionnera pas du fait qu'il n'a pas été signé avec la clé privée correcte. La vérification peut comprendre l'utilisation d'une clé publique, la lecture du binaire entier de l'applet 232, la création d'un condensé de 5 message (valeurs de hachage), ou l'utilisation d'un algorithme de signature, tel que RSA, pour vérifier la signature de l'applet 232. Si la signature numérique ne peut pas être vérifiée, alors le programme de chargement initial 212 rejette l'applet 232 comme étant mauvais. On note que la vérification de signature de l'applet de chargement initial 10 232 peut être optionnelle, par exemple, si le microcontrôleur 202 utilise d'autres caractéristiques de sécurité qui aident à empêcher la modification de la mémoire par des intrus potentiels. Dans un mode de réalisation, l'applet de chargement initial 232 est téléchargé dans une RAM non volatile (non montrée). Un homme du 15 métier apprécierait que l'applet de chargement initial 232 peut être réparti dans deux dispositifs de mémoire répartis ou plus. Dans un mode de réalisation, l'applet de chargement initial 232 est mis en oeuvre en tant qu'applet à deux niveaux, c'est-à-dire qu'une fois que le programme de chargement initial 212 invoque l'applet 232 20 dans l'IRAM 220, l'applet 232 reçoit un certain code d'une troisième mémoire externe qui fournit une capacité de mémorisation supplémentaire. Dans ce mode de réalisation, au moins l'un de l'applet 232 ou du programme de chargement initial 212 devrait authentifier la troisième mémoire externe, par exemple, en utilisant le service de 25 vérification de signature de la ROM 210. De même, le programme de chargement initial 212 peut vérifier l'intégrité d'une application chargée. Dans un mode de réalisation, le programme de chargement initial 212 vérifie une signature numérique d'un programme chargé ou d'une application finale afin de s'assurer 30 que le dispositif qui tente d'exécuter l'application est un dispositif de confiance (par exemple, un terminal de paiement autorisé). Dans un mode de réalisation, cette vérification par le programme de chargement initial 212 a lieu lorsque le programme d'application en sommeil 270 est copié de la mémoire non volatile externe 204 dans la mémoire volatile 35 externe 206. Une fois que la vérification est achevée, le programme de chargement initial 212 peut rendre le contrôle à la CPU 240. Dans un mode de réalisation, le programme de chargement initial 212 appelle une ou plusieurs fonctions de l'applet de chargement initial 232 pour initialiser l'applet 232 et configurer l'interface de mémoire externe 244 afin de permettre une communication correcte entre le 5 microcontrôleur 202 et la mémoire externe 204, 206. La configuration comprend l'envoi de commandes à un bus, par exemple, un bus SPI afin de régler les paramètres du processus et du matériel (par exemple, la vitesse) pour le protocole SPI. Dans un mode de réalisation, l'applet 232 est configuré pour appliquer des étapes de traitement aux données 10 transférées au microcontrôleur 202 et à partir du microcontrôleur 202 à n'importe quel dispositif de mémoire. Par exemple, avant d'exécuter le programme final, l'applet 232 peut lancer un déchiffrement ou une décompression par la mémoire volatile externe 206. Dans un mode de réalisation, le programme de chargement initial 15 212 appelle une fonction copyMem de l'applet de chargement initial 232 afin d'amener la mémoire volatile externe 280 (par exemple, une RAM exécutable) à lire et à copier le programme d'application en sommeil 270 dans la mémoire non volatile externe 204 (par exemple, une mémoire flash cellulaire non exécutable) de manière à rendre l'application 20 exécutable par le microprocesseur 202. On note que la copie peut être effectuée à partir et vers n'importe quel dispositif interne ou externe. Une fois que l'applet 232 a achevé les fonctions qui lui sont déléguées, l'applet 232 renvoie le contrôle au programme de chargement initial 212 25 Dans un mode de réalisation, l'applet 232 échange des données avec les dispositifs autres que la mémoire 204, 206. Par exemple, l'applet 232 peut accéder à une liaison de communication pour lire des données dans une source ou écrire des données à une destination en utilisant un protocole de communication spécifique. Dans un mode de 30 réalisation, l'applet 232 est configuré pour lire des données à partir d'un port série et écrire les données dans un dispositif de mémoire afin de permettre l'amorçage à partir d'une liaison série. Dans un mode de réalisation, le système 200 comprend une pluralité de cartes électroniques, chacune d'elles pouvant comprendre 35 en outre un ou plusieurs microcontrôleurs. Dans ce mode de réalisation, au moins l'un des microcontrôleurs présente les caractéristiques du microcontrôleur 202. En général, étant donné qu'aucun type spécifique de mémoire externe ou de configuration matérielle n'est nécessaire, un accès flexible à la mémoire externe 204, 206 permet de personnaliser complètement et de manière sure le comportement du programme de chargement initial 212 et, ainsi, supprime la barrière des types de mémoire de source et de destination à l'instant d'amorçage. Le système 200 accomplit cela sans affecter la conception du microcontrôleur 202 ou son programme de chargement initial 212 figé dans la ROM 210, tandis que, simultanément, le système 200 préserve la chaîne de confiance. La figure 3 est un organigramme d'un processus illustratif pour étendre de manière sure une fonctionnalité de code de ROM selon divers modes de réalisation de l'invention. Le processus pour étendre de manière sure les fonctions de code de ROM débute à l'étape 304 lorsqu'un programme de chargement initial et un applet de chargement initial sont chargés. Par exemple, le programme de chargement initial peut d'abord être chargé dans la ROM, ensuite, l'applet de chargement initial est chargé dans une certaine mémoire non volatile interne. Ensuite, à l'étape 306, le programme de chargement initial est exécuté. A l'étape 308, la présence initiale de l'applet de chargement est détectée, par exemple par le programme de chargement initial qui effectue une recherche dans la mémoire non volatile interne qui comprend l'applet de chargement initial. A l'étape 310, une fois que l'applet de chargement initial est 25 détecté, sa signature numérique est vérifiée. A l'étape 312, l'applet de chargement initial est exécuté. A l'étape 314, l'applet configure une interface de mémoire externe. A l'étape 316, une application en sommeil est copiée d'une mémoire non volatile externe dans une mémoire volatile externe. 30 A l'étape 318, la signature numérique du programme de chargement est vérifiée. Enfin, à l'étape 320, l'applet rend le contrôle, par exemple, à une CPU. Les hommes du métier apprécieront qu'un plus petit nombre 35 d'étapes ou des étapes supplémentaires peuvent être incorporées avec les étapes illustrées dans le présent document sans s'écarter de l'étendue de l'invention. Aucun ordre particulier n'est impliqué par l'agencement des blocs dans l'organigramme ou dans la description présentée. On appréciera en outre que les exemples et les modes de réalisation qui précèdent sont des exemples et sont donnés à des fins de 5 clarté et de compréhension et non de limitation de l'étendue de la présente invention. Il est voulu que les permutations, les améliorations, les équivalents, les combinaisons et les perfectionnements de ceux-ci qui sont évidents aux hommes du métier, lors d'une lecture de la spécification et d'un examen des dessins, sont tous inclus dans 10 l'étendue de la présente invention. Il 'est par conséquent voulu que les revendications comprennent l'ensemble de ces modifications, permutations et équivalents qui tombent dans l'esprit et l'étendue vrais de la présente invention. REVENDICATIONS1. Appareil (202) pour étendre de manière sure une fonctionnalité de code de ROM, l'appareil comprenant : une première mémoire (210) qui comprend un programme de chargement initial (212) ; et une deuxième mémoire (230) couplée à la première mémoire, la deuxième mémoire comprenant un applet de chargement initial (232), l'applet de chargement initial comprenant un code d'applet capable de 10 configurer un dispositif de mémoire (204, 206). 2. Appareil selon la revendication 1, dans lequel la première mémoire (210) est configurée pour authentifier le code d'applet. 3. Appareil selon la revendication 1, dans lequel le programme de chargement initial (212) est configuré pour détecter l'applet de 15 chargement initial (232) dans la deuxième mémoire (230). 4. Appareil selon la revendication 1, dans lequel le code d'applet est configuré pour contenir des données secrètes. 5. Appareil selon la revendication 4, dans lequel les données secrètes sont l'une d'une clé cryptographique privée et d'une signature 20 numérique. 6. Appareil selon la revendication 4, dans lequel la première mémoire (210) est configurée pour vérifier les données secrètes. 7. Appareil selon la revendication 1, dans lequel le dispositif de mémoire (204, 206) est un dispositif de mémoire externe. 25 8. Appareil selon la revendication 1, dans lequel la deuxième mémoire (230) est l'une d'une RAM non volatile interne, d'une RAM non volatile externe et d'une mémoire répartie. 9. Appareil selon la revendication 1, dans lequel le code d'applet est configuré pour accéder à une liaison de communication par 30 l'intermédiaire d'un protocole de communication. 10. Procédé pour étendre de manière sure une fonctionnalité de code de ROM, le procédé comprenant : l'exécution (306) d'un programme de chargement initial ; la détection (308) d'un applet de chargement initial ; 35 la vérification (310) de l'authenticité de l'applet de chargement initial ,l'exécution (312) de l'applet de chargement initial en réponse à la vérification de l'authenticité ; et la configuration (314) d'une interface de mémoire externe. 11. Procédé selon la revendication 10, dans lequel la 5 configuration de l'interface de mémoire externe comprend le chargement d'un jeu d'instructions d'initialisation dans un dispositif de mémoire. 12. Procédé selon la revendication 10, comprenant en outre le transfert d'un code entre une mémoire non volatile externe et une mémoire volatile externe. 10 13. Procédé selon la revendication 12, comprenant en outre l'application d'étapes de traitement lors du transfert du code. 14. Procédé selon la revendication 10, comprenant en outre la vérification de l'authenticité du programme de chargement initial. 15. Procédé selon la revendication 10, comprenant en outre le 15 chargement de l'applet de chargement initial dans une mémoire non volatile par l'intermédiaire d'un protocole qui utilise une signature numérique. 16. Système (200) pour étendre de manière sure une fonctionnalité de code de ROM, le système comprenant : 20 une première mémoire externe (204) ; une deuxième mémoire externe (206) ; un microcontrôleur sécurisé (202) comprenant en outre : une première mémoire (210) qui comprend un programme de chargement initial (212) ; et 25 une deuxième mémoire (230) couplée à la première mémoire, la deuxième mémoire comprenant un applet de chargement initial (232), l'applet de chargement initial comprenant un code d'applet capable de configurer au moins l'une de la première et de la deuxième mémoire externe (204, 206). 30 17. Système (200) selon la revendication 16, dans lequel le code d'applet est configuré pour appliquer des étapes de traitement aux données transférées entre la première mémoire externe (204) et la deuxième mémoire externe (206). 18. Système (200) selon la revendication 16, dans lequel le code 35 d'applet est configuré pour échanger des données avec un dispositif externe. 19. Système (200) selon la revendication 16, comprenant en outre : une interface de mémoire (244) couplée à la première mémoire externe (204) et à la deuxième mémoire externe (206) ; et un bus de mémoire (242) couplé à l'interface de mémoire, le bus de mémoire permettant la communication entre la première mémoire externe (204) et la deuxième mémoire externe (206). 20. Système (200) selon la revendication 16, dans lequel la première mémoire (210) est configurée pour vérifier l'intégrité d'une 10 application chargée.