Brevet FR3105487A1 — publié le 20210625

L’invention concerne un procédé de programmation d’un microcontrôleur (10), ledit procédé comportant les étapes suivantes : - téléchargement d’un premier programme (P1) dans une mémoire interne (13) dudit microcontrôleur (10) au moyen d’un port de programmation (JTAG) ; - destruction des moyens de lecture et d’écriture dudit port de programmation ; - démarrage dudit premier programme (P1) ; ledit premier programme (P1) étant configuré pour : . vérifier la destruction des moyens de lecture et d’écriture dudit port de programmation (JTAG) ; . établir une connexion à un serveur distant (22) de sorte à récupérer un second programme (P2) crypté ; . établir une connexion à un boîtier externe (18) contenant une clé de décryptage dudit second programme (P2) ; ledit boîtier externe (18) étant configuré pour délivrer ladite clé de décryptage uniquement consécutivement à l’action d’un opérateur ; et . installer ledit second programme (P2) dans ladite mémoire interne (13) dudit microcontrôleur (10). Figure pour abrégé : Fig 1 PROCEDE DE PROGRAMMATION D’UN MICROCONTROLLEUR La présente invention concerne un procédé de programmation d'un microcontrôleur de manière sécurisée, c'est-à-dire un procédé dans lequel il est recherché l’inaccessibilité d’au moins une partie du code stocké dans le microcontrôleur par les techniques de lecture ou de piratage classiques. L'invention peut être appliquée à un grand nombre de domaines techniques dans lesquels il est recherché de programmer un microcontrôleur de manière sécurisée. Par exemple, l'invention trouve une application particulièrement avantageuse pour programmer les microcontrôleurs des alimentations intégrées dans les bâtiments et permettant d'alimenter des périphériques de sécurité, tels que les alarmes incendies ou les détecteurs d'intrusion. Un microcontrôleur est un composant électronique permettant d'effectuer une suite d'instructions logiques programmées dans une mémoire interne du microcontrôleur. Un microcontrôleur comporte typiquement des ports d'entrée/sortie permettant de relier des capteurs et/ou des actionneurs. Lorsque le programme intégré sur le microcontrôleur est exécuté, l'état des ports de sortie est déterminé en fonction du programme et de la valeur des ports d'entrée ou d'une ou plusieurs valeurs représentant des états internes au microcontrôleur. Outre ces ports d'entrée/sortie, un microcontrôleur présente également au moins un port de programmation permettant de charger, de lire ou de débuguer le programme interne du microcontrôleur. Typiquement, ce port de programmation est appelé JTAG, pour « Joint Test Action Group » dans la littérature anglo-saxonne. Il est possible d'empêcher la lecture du programme intégré dans un microcontrôleur en détruisant le fusible du port JTAG du microcontrôleur lorsque le programme a été chargé dans celui-ci. Ainsi, un microcontrôleur sécurisé est généralement considéré comme un microcontrôleur dans lequel le port JTAG a été désactivé. Cette sécurisation du microcontrôleur est efficace lorsque le microcontrôleur est sorti de l'entreprise de programmation et qu'il est effectivement mis en œuvre. Cependant, lors de la phase de programmation du microcontrôleur, il est toujours possible de récupérer le programme chargé sur le microcontrôleur, soit en intervenant sur l'ordinateur qui transfère le programme au microcontrôleur, soit en captant les informations transférées sur les connecteurs entre l'ordinateur et le microcontrôleur. Ainsi, si l'ordinateur est infecté par un pirate ou qu'un employée malintentionné travail sur l'ordinateur permettant de charger le programme du microcontrôleur, il lui est possible d'obtenir le code de programme d'un microcontrôleur avant que celui-ci ne soit chargé dans le microcontrôleur. Pour résoudre ce problème, il est connu du document US 10,210,333 d’installer un programme sécurisé sur un microcontrôleur en téléchargeant un premier programme sur le microcontrôleur qui a pour fonction d’aller télécharger un second programme crypté sur un serveur. Le programme crypté peut ensuite être décrypté et installé sur le microcontrôleur au moyen d’une clé de décryptage. Pour obtenir cette clé de décryptage, le microcontrôleur doit s’authentifier sur un serveur de clé, par exemple au moyen de son adresse physique, également appelée adresse MAC pour « Media Access Control » dans la littérature anglo-saxonne. De préférence, le programme crypté est installé uniquement lorsque le premier programme a vérifié que le port JTAG est désactivé. De cette manière, il est plus difficile pour un pirate ou un employé malintentionné d’avoir accès au second programme installé sur le microcontrôleur. Cependant, il est possible de modifier l’adresse MAC d’un périphérique si bien qu’un pirate pourrait utiliser un microcontrôleur pirate pour se connecter à la place du microcontrôleur en utilisant l’adresse MAC du microcontrôleur de sorte à récupérer le programme crypté et la clé associée. Le pirate pourrait ainsi obtenir le programme sur un microcontrôleur pirate pour lequel le port JTAG n’est pas désactivé. Le problème technique de l’invention est donc de fournir un procédé d’installation d’un microcontrôleur qui soit davantage sécurisé que les procédés existants. Pour résoudre ce problème technique, l’invention propose d’utiliser un serveur de clé nécessitant une action manuelle d’un opérateur avant de délivrer la clé de décryptage du programme crypté, de sorte qu’un pirate agissant à distance ne puisse pas simuler la présence du microcontrôleur pour obtenir la clé. Dans les solutions existantes, pour éviter qu’un employé malintentionné ne puisse accéder à la clé de décryptage, le serveur de clé est classiquement installé dans une salle sécurisée distante du microcontrôleur et accessible par un réseau. L’invention propose, au contraire, de rapprocher le serveur de clé en utilisant un boîtier externe sécurisé par le besoin d’une action manuelle de l’opérateur. A cet effet, l’invention concerne un procédé de programmation d’un microcontrôleur, ledit procédé comportant les étapes suivantes : - téléchargement d’un premier programme dans une mémoire interne dudit microcontrôleur au moyen d’un port de programmation ; - destruction des moyens de lecture et d’écriture dudit port de programmation ; et - démarrage dudit premier programme. Ledit premier programme est configuré pour : - vérifier la destruction des moyens de lecture et d’écriture dudit port de programmation ; - établir une connexion à un serveur distant de sorte à récupérer un second programme crypté ; - établir une connexion à un boîtier externe contenant une clé de décryptage dudit second programme ; ledit boîtier externe étant configuré pour délivrer ladite clé de décryptage uniquement consécutivement à l’action d’un opérateur ; et - installer ledit second programme dans la mémoire interne du microcontrôleur. L’invention permet ainsi de programmer un microcontrôleur avec un second programme qui n’est pas disponible sur un ordinateur de programmation, et dont la clé de décryptage ne passe pas par le réseau de sorte qu’un pirate informatique ne puisse pas reconstituer le second programme. Pour sécuriser ce second programme, l’invention nécessite une action manuelle d’un opérateur. Cette action manuelle est contre-intuitive des procédés existants de programmation qui visent à automatiser au maximum les opérations de la programmation de sorte à limiter les tâches réalisées par l'opérateur. En effet, il est bien connu que la plus grande partie des dysfonctionnements d'un système informatique est due à des interventions humaines. Ainsi, il est toujours recherché de limiter les interventions humaines pour les dispositifs sécurisés afin de limiter les risques de dysfonctionnement. L'invention propose, au contraire, d'améliorer la sécurité en augmentant l'intervention humaine lors de la phase de décryptage d'un programme crypté. En outre, l’opérateur n’a pas accès à l’information transmise par le boîtier externe si bien qu’il ne peut pas capter la clé de décryptage pour reconstituer le second programme. Par exemple, l’action manuelle peut correspondre à une mise en route du boîtier externe. Dans cet exemple, la clé de décryptage est délivrée uniquement pendant une durée prédéterminée consécutive à la mise en route du boîtier externe, typiquement 20 secondes. En variante ou en complément, l’action manuelle peut correspondre à la saisie d’un code sur un clavier, la clé de décryptage étant délivrée uniquement si le code saisi sur le clavier correspond à un code prédéterminé. De préférence, dans ce mode de réalisation, le nombre d’essai du code sur le clavier est limité. Pour éviter qu’un pirate ou que l’opérateur puisse avoir accès aux informations échangées entre le microcontrôleur et le serveur distant ou le boîtier externe, le ou les connexions sont préférentiellement réalisées au moyen d’une connexion de type ECDH. Une connexion de type ECDH, pour « Elliptic curve Diffie – Hellman » dans la littérature anglo-saxonne, est un protocole d'échange de clés anonymes qui permet à deux composants électroniques distincts, chacun ayant un couple de clé privée/publique basé sur les courbes elliptiques, d'établir un secret partagé à travers un canal de communication non sécurisé. Ce secret partagé peut être employé directement comme une clé de chiffrement ou être utilisé pour dériver une autre clé qui, à son tour, peut être utilisée pour chiffrer les communications. Ainsi, après une phase d’échange non crypté, il est possible d’obtenir une communication cryptée entre le microcontrôleur et le serveur distant ou le boîtier externe. DESCRIPTION SOMMAIRE DES FIGURES La manière de réaliser l’invention ainsi que les avantages qui en découlent, ressortiront bien du mode de réalisation qui suit, donné à titre indicatif mais non limitatif, à l’appui des figures annexées dans lesquelles les figures 1 à 3 représentent : La figure 1 : une représentation schématique des organes de programmation d’un microcontrôleur mettant en œuvre le procédé de l’invention ; La figure 2 : un ordinogramme des étapes réalisées par un opérateur mettant en œuvre le procédé de l’invention ; et La figure 3 : un ordinogramme des étapes réalisées dans le microcontrôleur mettant en œuvre le procédé de l’invention. La figure 1 illustre les organes de programmation d'un microcontrôleur 10 . Un microcontrôleur 10 est un composant électronique permettant d'effectuer une suite d'instructions logiques programmées dans une mémoire interne 13 . Cette mémoire interne 13 est lue par un processeur 12 qui exécute les instructions logiques en fonction de valeurs présentes sur des ports d'entrées/sorties 11 ou de valeurs des états internes au microcontrôleur 10 , stockées dans une mémoire volatile 14 . Le cadencement des opérations est classiquement séquencé par une horloge injectée sur un port clk relié au processeur 12 . Pour communiquer avec les différentes entrées/sorties 11 , le microcontrôleur 10 comporte préférentiellement un multiplexeur 45 permettant d’adresser les différentes entrées/sorties 11 . Ainsi, sur la figure 1, le microcontrôleur 10 est connecté sur le multiplexeur 45 pour communiquer avec les différentes entrées/sorties 11 . Outre ces entrées/sorties 11 , le microcontrôleur 10 comporte classiquement des bornes d'alimentation électrique, non représentées, permettant d’alimenter le processeur 12 , les mémoires 13 - 14 et le multiplexeur 45 . En variante, un microcontrôleur peut présenter une structure interne différente. Par exemple, l’horloge peut être intégrée au microcontrôleur et le processeur peut être connecté directement sur les différentes entrées/sorties 11 . Un autre port du microcontrôleur 10 correspond à un port de programmation directement relié à la mémoire de programme 13 et permettant d'écrire ou de lire dans cette mémoire de programme 13 afin de modifier le programme exécuté par le processeur 12 . Typiquement, le programme enregistré dans cette mémoire interne 13 peut être téléchargé par un ordinateur 17 lors d'une phase de programmation du microcontrôleur 10 . Le port de programmation peut correspondant à un port JTAG , tel qu’illustré sur la figure 1. En variante, le premier programme P1 peut être téléchargé par d'autres ports que le port JTAG en fonction de l'architecture du microcontrôleur 10 . Tel qu’illustrée à l’étape 50 de la figure 2, la programmation du microcontrôleur 10 de l'invention commence par l'intervention d'un opérateur qui agit sur un ordinateur 17 pour lancer le téléchargement d’un premier programme P1 dans la mémoire interne 13 du microcontrôleur 10 . En variante, le programme P1 est peut être téléchargé par d'autres moyens qu'un ordinateur, par exemple par un autre microcontrôleur dédié. Lorsque le premier programme P1 est téléchargé dans la mémoire interne 13 du microcontrôleur 1 0 , l'opérateur procède à la destruction des moyens de lecture et d'écriture de la mémoire 13 par le port JTAG , dans une étape 51 . Si la programmation de la mémoire 13 peut être effectuée par d'autres moyens que le port JTAG , cette seconde étape 51 est réalisée en désactivant les moyens du microcontrôleur permettant de modifier ou de lire le programme P1 téléchargé dans la mémoire interne 13 . Lorsque le port de programmation JTAG est désactivé, l'opérateur peut ensuite démarrer le microcontrôleur 10 , dans une étape 52 . Le démarrage de ce microcontrôleur 10 a pour effet de lancer le programme P1 , tel qu'illustré sur la figure 3. Ainsi, lorsque le démarrage du microcontrôleur est effectué, dans une étape 60 , le programme P1 commence par vérifier que le port de programmation est effectivement détruit. Cette étape 61 peut être simplement réalisée en essayant de transmettre une information sur ce port de programmation et en détectant si l’information est transmise ou non. Si cette vérification est validée, le premier programme P1 est configuré pour connecter le microcontrôleur 10 à un serveur distant 22 , dans une étape 62 . Tel qu'illustré sur la figure 1, ce serveur distant 22 peut être disposé en dehors du site de programmation 20 de sorte à sécuriser très fortement l'accès à ce serveur distant 22 à toutes les personnes présentes sur le site d'installation 20 . Le microcontrôleur 10 peut être connecté par un de ses ports d’entrées/sorties 11 à un routeur 23 , lui-même connecté au réseau Internet 21 pour atteindre le serveur sécurisé 22 . De préférence, avant d’échanger des informations sensibles avec ce serveur sécurisé 22 , une communication sécurisée est mise en œuvre, par exemple au moyen d'une connexion de type ECDH. Lorsque la connexion sécurisée est mise en œuvre avec le serveur distant 22 , le programme P2 contenu sur ce serveur distant 22 peut être téléchargé par le microcontrôleur 10 . Cependant, pour éviter qu’un microcontrôleur pirate ne puisse accéder à ce second programme P 2 , ce second programme P2 est crypté et il ne peut être décrypté pour être installé dans la mémoire de programme 13 qu'au moyen d'une clé de décryptage. Pour obtenir cette clé de décryptage, le microcontrôleur 10 se connecte à un boîtier externe 18 , intégrant la clé de décryptage. Cette connexion peut être réalisée par une collection filaire utilisant un protocole bas niveau, par exemple un protocole I2C. De préférence, la connexion entre le microcontrôleur 10 et ce boîtier externe 18 est également réalisée au moyen d'une connexion sécurisée, par exemple une connexion de type ECDH. Outre cette connexion sécurisée, l'invention propose de délivrer la clé de décryptage uniquement lorsqu'une action manuelle est réalisée sur le boîtier externe 18 , dans l'étape 52 de la figure 2. Cette action manuelle de l'opérateur peut prendre différentes formes. Par exemple, l'opérateur peut mettre sous tension le boîtier externe 18 sensiblement en même temps qu'il allume le microcontrôleur 10 de sorte que la clé de décryptage puisse être transmise au microcontrôleur 10 que pendant les quelques premières secondes suivant le démarrage du boîtier externe 18 . À l'issue de ce délai, le boîtier externe 18 est configuré pour ne plus fournir la clé de décryptage. Une autre action manuelle possible de l'opérateur est d'utiliser un clavier 19 intégré au boîtier 18 pour saisir un code confidentiel permettant d'activer la transmission de la clé de décryptage par le boîtier externe 18 . En outre, il est possible de combiner plusieurs actions manuelles de l'opérateur pour augmenter encore la sécurité de la transmission de cette clé de décryptage. Ces actions manuelles de l'utilisateur peuvent être également associées à des moyens de contrôle logiciels permettant d'authentifier le microcontrôleur pour lequel la clé de décryptage est recherchée. Par exemple, il est également possible d'utiliser l'adresse physique d'une carte réseau du microcontrôleur pour délivrer la clé de décryptage uniquement si l'adresse physique correspond à une base de données d'adresses physiques authentifiées. À l'issue de cette étape de transmission de la clé de décryptage par le boîtier externe 18 , le microcontrôleur 10 peut procéder à l'installation du second programme P 2 en décryptant ce second programme et en l’installant dans la mémoire de programme 13 , dans l'étape 64 de la figure 3. Le microcontrôleur 10 procède ensuite à son redémarrage, dans une étape 65 . Lors de ce redémarrage, le microcontrôleur 10 est configuré pour ne plus lancer le premier programme P1 , mais pour lancer directement le second programme P2 . Cette modification du lancement du programme utilisé par le processeur 12 du microcontrôleur 10 peut être réalisée lors de l'installation du second programme P2 en modifiant la table associée au cycle de démarrage. Ainsi, lorsque le microcontrôleur 10 redémarre, il charge le second programme P2 , dans une étape 70 . Ce second programme P2 est ainsi entièrement sécurisé puisque l'opérateur ou le pirate agissant sur l'ordinateur de programmation 17 ou ayant accès à l'une des connexions Internet sur laquelle est relié le microcontrôleur 10 ne peut pas obtenir le programme P2 installé dans la mémoire 13 . De préférence, lors du lancement pour la première fois du programme P2 , le programme P1 est supprimé de la mémoire de programme 13 afin qu'il ne reste plus d’information non sécurisée présente dans cette mémoire de programme 13 . Pour conclure, l'invention permet d'obtenir une méthode de programmation d'un microcontrôleur 10 extrêmement sécurisée en demandant à l'opérateur d'effectuer une action manuelle avant de pouvoir confirmer la transmission de la clé de décryptage du programme P2 destiné à être installé sur le microcontrôleur 10 . Procédé de programmation d’un microcontrôleur (10), ledit procédé comportant les étapes suivantes : - téléchargement (50) d’un premier programme (P1) dans une mémoire interne (13) dudit microcontrôleur (10) au moyen d’un port de programmation (JTAG) ; - destruction (51) des moyens de lecture et d’écriture dudit port de programmation (JTAG) ; - démarrage (60) dudit premier programme (P1) ; ledit premier programme (P1) étant configuré pour : . vérifier (61) la destruction des moyens de lecture et d’écriture dudit port de programmation (JTAG) ; . établir une connexion (62) à un serveur distant (22) de sorte à récupérer un second programme (P2) crypté ; . établir une connexion (63) à un boîtier externe (18) contenant une clé de décryptage dudit second programme (P2) ; ledit boîtier externe (18) étant configuré pour délivrer ladite clé de décryptage uniquement consécutivement à l’action d’un opérateur ; et . installer ledit second programme (P2) dans ladite mémoire interne (13) dudit microcontrôleur (10). Procédé de programmation d’un microcontrôleur (10) selon la revendication 1, dans lequel l’action d’un opérateur correspond à une mise en route dudit boîtier externe (18), la clé de décryptage étant délivrée uniquement pendant une durée prédéterminée consécutive à la mise en route dudit boîtier externe (18). Procédé de programmation d’un microcontrôleur (10) selon la revendication 1 ou 2, dans lequel l’action d’un opérateur correspond à la saisie d’un code sur un clavier (19), la clé de décryptage étant délivrée uniquement si le code saisi sur ledit clavier (19) correspond à un code prédéterminé. Procédé de programmation d’un microcontrôleur (10) selon la revendication 3, dans lequel le nombre d’essai du code sur ledit clavier (19) est limité. Procédé de programmation d’un microcontrôleur (10) selon l’une des revendications 1 à 4, dans lequel la connexion entre ledit microcontrôleur (10) et le serveur distant (22) est sécurisée au moyen d’une connexion de type ECDH. Procédé de programmation d’un microcontrôleur (10) selon l’une des revendications 1 à 5, dans lequel la connexion entre ledit microcontrôleur (10) et le boîtier externe (18) est sécurisée au moyen d’une connexion de type ECDH.