Brevet FR3104280A1 — publié le 20210611

Système électronique sécurisé comportant un processeur et un composant mémoire ; c omposant programmable associé . Ce système comporte un processeur (10), un composant mémoire (30), et un canal de communication, le canal de communication comportant au moins un bus de commande pouvant être piloté par le processeur (10) pour accéder au composant mémoire (30). Le système électronique (1) comporte, en outre, un composant programmable (22), le composant programmable (22) étant intégré le long du canal de communication, en coupure entre le processeur (10) et le composant mémoire (30), le canal de communication comportant alors un premier bus de commande (41) entre le processeur (10) et le composant programmable (22) et un second bus de commande (52) entre le composant programmable (22) et le composant mémoire (30), le composant programmable (22) étant adapté pour filtrer les commandes adressées par le processeur au composant mémoire. Figure pour l'abrégé : Figure 1 Système électronique sécurisé comportant un processeur et un composant mémoire ; composant programmable associé. La présente invention a pour domaine celui des systèmes électroniques du type comportant un processeur, un composant mémoire, et un canal de communication, le canal de communication comportant au moins un bus de commande pouvant être piloté par le processeur pour accéder au composant mémoire. Les mémoires flash sont largement utilisées pour le stockage de logiciels résidents : programme d’amorçage (« boot » en anglais) d’une unité centrale de traitement ou CPU, applicatifs, banque de données… Parmi les mémoires flash, on connait les mémoires eMMC (pour « Embedded MultiMedia Card » en anglais). Une mémoire eMMC est un composant résultant de l’intégration d’une mémoire flash NAND et d’un contrôleur mémoire. Les mémoires eMMC sont utilisées dans l’industrie et la plupart des processeurs destinés à être intégrés dans des systèmes électroniques embarqués disposent d’une interface eMMC. Or, une mémoire eMMC dispose d’un bus de commande permettant à un composant hôte de piloter les accès à la mémoire. Les commandes de lecture ou d’écriture ne sont donc pas pilotées par une interface d’entrée/sortie de la mémoire, comme par exemple sur les anciennes générations de mémoire flash, mais c’est le composant hôte, en utilisant le bus de commande, qui détermine l’action que la mémoire a à exécuter : lecture (« Read »), écriture (« Write »), état (« Status »), configuration (« Configuration »), etc. Le contrôleur de la mémoire eMMC permet une gestion des autorisations, notamment d’écriture, afin de protéger la mémoire flash NAND contre des écritures non souhaitées et par conséquent de maintenir son contenu intègre. Cependant, le contrôleur de la mémoire eMMC applique une gestion des autorisations qui peut être altérée par le composant hôte. Ainsi, dans le document US2015/286585 A1, même si le contrôleur de la mémoire eMMC est adapté de manière à mettre en œuvre une procédure d’authentification du composant hôte, le composant hôte, une fois authentifié, peut encore altérer la configuration qu’applique le contrôleur de la mémoire eMMC pour la gestion des autorisations. Une protection de la mémoire eMMC gérée par la mémoire eMMC elle-même est donc dépendante du logiciel qui est exécuté par le composant hôte. Elle ne permet pas de protéger de manière efficace la mémoire eMMC de certaines menaces, telles que par exemple en cas de défaillance involontaire du logiciel exécuté par le composant hôte (bogue logiciel ou matériel), ou encore en cas de défaillance volontaire du logiciel exécuté par composant hôte (utilisation de failles de sécurité sur le logiciel par un attaquant pour réaliser des actions non souhaitées et corrompre le contenu de la mémoire eMMC, par exemple en y stockant des données sensibles non désirées par l’utilisateur). La présente invention a pour but de répondre à ce problème de la sécurisation des accès à une mémoire flash munie d’un bus de commande pour être pilotée par le composant hôte. L’invention a pour objet un système électronique du type précité, comportant, en outre, un composant programmable, le composant programmable étant intégré le long du canal de communication, en coupure entre le processeur et le composant mémoire, le canal de communication comportant alors un premier bus de commande entre le processeur et le composant programmable et un second bus de commande entre le composant programmable et le composant mémoire, le composant programmable étant adapté pour filtrer les commandes adressées par le processeur au composant mémoire. La présente invention permet donc de protéger la mémoire flash en mettant un composant programmable en coupure entre la mémoire et le composant hôte. La présence de ce composant programmable offre la possibilité à un composant tiers de confiance de contrôler les autorisations d’accès à la mémoire Suivant des modes particuliers de réalisation, le système électronique comporte une ou plusieurs des caractéristiques suivantes prises isolément ou suivant toutes les combinaisons techniquement possibles : - lorsque le composant programmable est dans un état passant, le composant programmable filtre une commande reçue du processeur de sorte que ladite commande soit retransmise au composant mémoire ; - lorsque le composant programmable est dans un état bloquant, le composant programmable filtre une commande reçue du processeur de sorte que ladite commande soit rejetée ; - l’état bloquant ou l’état passant du composant programmable est sélectionné en fonction du résultat d’un test consistant à comparer la commande reçue du processeur avec une liste de commandes interdites mémorisée par le composant programmable ; - le composant programmable est du type composant logique rapide, de préférence du type ASIC, FPGA ou CPLD ; - il comporte, en outre, un composant de confiance propre à commander le composant programmable de manière à sélectionner, directement ou indirectement, l’état bloquant ou l’état passant du composant programmable ; - le composant de confiance est propre à déterminer un mode de fonctionnement courant du processeur et à commander le composant programmable en fonction du mode de fonctionnement courant du processeur ; - le composant de confiance est propre à commander le composant programmable en mettant à jour une liste de commandes interdites stockée dans la composant programmable et utilisée par le composant programmable pour filtrer les commandes reçues du processeur ; - les premier et second bus sont identiques, le composant programmable effectuant une interception des commandes, ou dans lequel les premier et second bus sont différents, le composant programmable effectuant une conversion des commandes ; - le composant mémoire est une mémoire eMMC, I2C, SPI ou une carte SD. L’invention a également pour objet un dispositif de confiance destiné à être intégré dans le système précédent. L’invention et ses avantages seront mieux compris à la lecture de la description détaillée qui va suivre d’un mode de réalisation particulier, donné uniquement à titre d’exemple illustratif et non limitatif, la description étant faite en se référant aux dessins annexés sur lesquels : La figure 1 est une représentation schématique d’un mode de réalisation préféré d’un système électronique selon l’invention ; La figure 2 est une représentation sous forme de blocs du procédé mis en œuvre par le système de la figure 1 ; et, La figure 3 est un chronogramme représentant des cycles successifs de fonctionnement du système de la figure 1. La figure 1 représente de manière schématique un système électronique 1 selon l’invention. Le système 1 comporte un processeur 10 et une mémoire 30. La mémoire 30 est une mémoire flash du type pilotable par un composant hôte externe au travers d’un bus de commande. La mémoire 30 est par exemple une mémoire eMMC. Dans le mode de réalisation décrit ici en détails, le composant hôte cherchant à accéder à la mémoire 30 est constitué par le processeur 10. Le processeur 10 et la mémoire 30 sont conformes à l’état de la technique. Un canal de communication est établi entre le processeur 10 et la mémoire 30. En coupure entre le processeur 10 et la mémoire 30, le système 1 comporte, le long du canal de communication, un dispositif de sécurité 20. Le dispositif de sécurité 20 est propre à intercepter et à les filtrer les commandes émises par le processeur 10, de manière à retransmettre vers la mémoire 30 uniquement les commandes qui sont conformes à certaines règles de sécurité avec lesquelles le dispositif 20 est configuré. Le dispositif de sécurité 20 est vue depuis le processeur 10 comme une mémoire eMMC. Le dispositif de sécurité 20 émule par conséquent le comportement d’une telle mémoire flash, en particulier celui de la mémoire 30. De manière similaire, vue depuis la mémoire 30, le dispositif de sécurité 20 émule le comportement d’un processeur, en particulier celui du processeur 10. Dans le mode de réalisation actuellement préféré, représenté à la figure 1, le dispositif de sécurité 20 comporte un composant programmable 22 et un composant de confiance 26. Le composant programmable 22 est intégré le long du canal de communication entre le processeur 10 et le composant 30. Plus précisément, le composant programmable 22 comporte un port 24 propre à être couplé avec une interface eMMC 12 du processeur 10. Le composant programmable 22 comporte une interface eMMC 23 propre à être couplée avec un port 32 de la mémoire 30. Ainsi, le canal de communication entre l’interface 12 du processeur 10 et le port 32 de la mémoire 30 est subdivisé en un premier canal de communication 40 entre le processeur 10 et le composant programmable 22 et un second canal de communication 50 entre le composant programmable 22 et la mémoire 30. Les premier et second canaux, 40 et 50, sont conformes à un canal de communication qui aurait permis une communication directe entre le processeur 10 et la mémoire 30. Le premier canal 40 (respectivement le second canal 50) comporte un bus de commande 41 (un bus de commande 51) pour l’échange de commandes et un bus de données 42 (un bus de données 52) pour l’échange de données. Le composant programmable 22 comporte, entre le port 24 et l’interface 23, une unité de filtrage 21. L’unité de filtrage 21 est propre à appliquer une ou plusieurs règles de sécurité. Les règles de sécurité sont par exemple définies par une liste de commandes interdites stockée dans un espace mémoire 25 du dispositif programmable. En communication descendante du processeur 10 vers la mémoire 30, l’unité de filtrage 21 est adaptée pour, dans un état bloquant, bloquer une commande reçue du processeur 10 sur le bus de commande 41 (et éventuellement les données associées à cette commande reçues sur le bus de données 42) ou pour, dans un état passant, retransmettre une commande reçue du processeur 10 sur le bus de commande 41 (et éventuellement les données associées à cette commande reçues sur le bus de données 42) vers la mémoire 30 sur le bus de commande 51 (et éventuellement les données associées à cette commande sur le bus de données 52). En communication montante de la mémoire 30 vers le processeur 10, dans un état passant, l’unité de filtrage 21 retransmet une réponse reçue de la mémoire 30 sur le bus de commande 51 (et éventuellement les données associées à cette réponse reçues sur le bus de données 52) vers le processeur 10 sur le bus de commande 41 (et éventuellement les données associées à cette réponse sur le bus de données 42). Le composant de confiance 26 est par exemple un contrôleur maître du système électronique 1. Le composant de confiance 26 est propre à déterminer un mode de fonctionnement courant du processeur 10, à partir de différentes données INFO reçues de différents composants constitutifs du système électronique 1. Par exemple, le composant de confiance 26 peut déterminer que le mode de fonctionnement courant du processeur 10 est : - un mode « boot » : lors d’une phase de démarrage du processeur 10 ; - un mode « normal » : au cours du fonctionnement normal du processeur 10, après la phase de démarrage ; - un mode « téléchargement » : au cours d’une phase de téléchargement par le processeur 10 d’une mise à jour d’un logiciel. Le composant de confiance 26 est interfacé avec un port 27 du composant programmable 22. Le composant de confiance 26 est propre à commander l’unité de filtrage 21 pour modifier le filtrage réalisé par le composant programmable 22. De préférence, cette modification du filtrage est réalisée en fonction du mode de fonctionnement courant du processeur 10. Pour ce faire, dans le mode de présent mode de réalisation, le composant de confiance 26 vient changer la liste des commandes interdites qui est stockée dans l’espace mémoire 25 du composant programmable 22 et que ce composant utilise pour réaliser le filtrage des commandes. Par exemple, dans le mode « boot », la liste des commandes interdites est telle que toute fonction de lecture ou écriture du processeur dans la mémoire est interdite. Dans le mode « normal », la liste des commandes interdites est telle que seules les fonctions de lecture dans la mémoire sont autorisées. Dans le mode « téléchargement », la liste des commandes interdites est telle que seules les fonctions d’écriture à certaines adresses de la mémoire sont autorisées. En se référant aux figures 2 et 3, le fonctionnement du dispositif de sécurité 20 va être expliqué. Le procédé de sécurité 100 est mis en œuvre lorsque le processeur 10 cherche à accéder à la mémoire 30. Ainsi, au cours d’un cycle de fonctionnement du canal de communication, le processeur 10 émet (étape 110) une nouvelle commande. Par exemple, sur les figures 3, pour le premier cycle, CYCLE1, une commande CMD1 est émise par le processeur 10. Par exemple encore, pour le cycle suivant ou second cycle, CYCLE2, une commande CMD2 est émise par le processeur 10. Une commande comporte une fonction (aussi dénommée action), ainsi qu’une adresse de la mémoire 30 où la fonction doit être appliquée. La fonction est par exemple une fonction d’écriture à l’adresse associée, une fonction de lecture de l’adresse associée, ou autre. Dans ce qui suit on considère par exemple que les commandes CMD1 et CMD2 sont des commandes d’écriture. Toute commande émise par le processeur 10 sur le bus de commande 41 est interceptée par le composant programmable 22. A l’étape 120, le composant programmable 22 filtre la commande interceptée. Pour cela, l’unité de filtrage 21 compare la commande avec la liste des commandes interdites de manière à déterminer si la commande reçue est autorisée et doit être transmise à la mémoire 30 ou si la commande reçue est interdite et doit être rejetée. Dans le cas où la commande est autorisée (cas par exemple de la commande CMD1), le composant programmable 22 est placé dans l’état passant pour le reste du cycle CYCLE1. Le procédé passe alors à l’étape 130, dans laquelle l’unité de filtrage 21 réémet la commande CMD1 sur le bus de commande 51. A la suite de la réception de la commande CMD1 sur le bus de commande 51, la mémoire 30 émet une réponse, REP1, à destination de l’émetteur de la commande, indiquant que la mémoire 30 est prête à écrire des données à l’adresse indiquée dans la commande CMD1 et qu’elle attend de recevoir les données à écrire sur le bus de données 52. Le composant programmable 22 étant passant, la réponse REP1 est réémise sur le bus de commande 41 vers le processeur 10. Recevant la réponse REP1, le processeur 10 émet alors les données à écrire dans la mémoire sur le bus de données 42. Sur la figure 3 ces données sont représentées par le bloc DATA1. Le composant programmable 22 étant passant, les données DATA1 reçues sur le bus de données 41 sont retransmises sur le bus de données 52 vers la mémoire 30. Lorsque la mémoire 30 reçoit les données DATA1, elle les écrit à l’adresse indiquée dans la commande CMD1. En revanche à l’étape 120, si l’unité de filtrage 21 détermine que la commande est interdite, le composant programmable 22 est placé dans l’état bloquant jusqu’à la fin du cycle CYCLE2, de sorte qu’aucune commande, ni donnée ne peut être transmise sur le second canal de communication 50. Le procédé de sécurité 100 se déplace à l’étape 140, dans laquelle le composant programmable 22 émet, en réponse à la commande CMD2, une réponse REP2 sur le bus de commande 41 à destination du processeur 10. La réponse REP2 correspond à un rejet de la commande CMD2. Lors de la réception de la réponse REP2 négative, le processeur 10 constatant que sa demande d’écriture a été rejetée, n’émet aucune donnée sur le bus de données 42. Comme présenté ci-dessus en référence à l’étape 120, l’unité de filtrage 21 met en œuvre des règles de sécurité pour déterminer si une commande reçue est autorisée oui ou non. Le composant de confiance 26 peut venir modifier les règles de sécurité, de sorte que le résultat du filtrage d’une commande dépende du mode de fonctionnement courant du processeur. Par exemple, dans le mode « boot », le composant de confiance 26 configure le composant programmable 22 pour qu’il bloque toute commande, pour éviter que la moindre donnée ne soit lue ou écrite dans la mémoire 30. Par exemple encore, dans le mode « normal », le composant de confiance 26 configure le composant programmable 22 pour interdire les commandes d’écriture dans la mémoire 30, mais autoriser la lecture dans la mémoire 30. Enfin, dans le mode « téléchargement », le composant de confiance 26 configure le composant programmable 22 pour autoriser les commandes d’écriture dans la mémoire 30, de manière à permettre le stockage du logiciel que le processeur a téléchargé. De nombreuses variantes du mode de réalisation venant d’être décrit sont envisageables par l’homme du métier. Notamment, le dispositif de sécurité pourrait être constitué d’un seul composant ou de plus de deux composants. Cependant, il est préférable que le dispositif de sécurité soit constitué de deux composants. Le composant programmable devant être un composant logique rapide de manière à ne pas introduire de latence le long du canal de communication entre le processeur et la mémoire. En effet, l’introduction d’une latence pourrait indiquer au processeur 10 qu’il n’accède pas directement à la mémoire 30. Un tel composant rapide est par exemple un circuit ASIC (« Application-specific integrated circuit »), ou un circuit logique programmable, tel qu’un FPGA (« field-programmable gate array”) ou un CPLD (« complex programmable logic device”). Le composant de confiance permettant de commander le composant programmable n’a pas besoin d’être aussi rapide que le composant programmable, puisque les changements de mode de fonctionnement du processeur n’interviennent qu’avec un temps caractéristique bien supérieur à celui des échanges sur le canal de communication. En variante, au lieu que le composant de confiance ne commande le composant programmable à travers la reconfiguration des règles de sécurité que ce dernier doit mettre en œuvre, le composant de confiance pourrait commander directement le composant programmable pour le faire passer de l’état bloquant à l’état passant et inversement. Le composant programmable est alors réduit à un interrupteur logique : dans l’état bloquant, toutes les commandes sont rejetées, et dans l’état passant, toutes les commandes sont transmises à la mémoire. Alternativement, la liste de commandes interdites est stockée dans le composant programmable sans pouvoir la modifiée, et le composant de confiance vient commander le composant programmable pour le faire placer soit dans un état actif (dans lequel le composant programmable filtre les commandes selon la listes de commandes interdites), soit dans un état passant (dans lequel le composant programmable est totalement transparent laissant passer toutes les commandes). En variante, le bus de commande au lieu d’être indépendant du bus de données, pourrait être multiplexé avec ce dernier. Par ailleurs, si dans le mode de réalisation présenté ci-dessus en détail, les premier et second bus sont de même nature, en variante, ils pourraient être de nature différente. Il y aurait ainsi une « rupture » de bus entre le processeur et le composant mémoire. Par exemple, le premier bus entre le processeur et le composant programmable pourrait être du type Ethernet, tandis que le second bus entre le composant programmable et le composant mémoire serait du type eMMC. Cette variante présente l’avantage de pouvoir adapter les débits sur chacun des premier et second bus indépendamment l’un de l’autre, notamment pour corriger des effets de latence introduits entre le processeur et la mémoire eMMC. Elle permet également une adaptation du composant mémoire aux spécifications du port (et du pilote associé) utilisé par le processeur pour piloter le composant mémoire. Il est à noter que dans cette variante, le composant programmable n’effectue pas une simple interception des commandes, mais une conversion des commandes pour jouer le rôle d’interface entre les premier et second bus. Le composant programmable n’émule plus le comportement du composant mémoire qu’il masque au processeur. La présente invention pourra aussi couvrir d’autres types de composant mémoire. En effet, outre les mémoires eMMC (intégrant un bus eMMC et une mémoire flash), l’invention est applicable aux mémoires I2C (« Inter Integrated Circuit ») (intégrant un bus I2C et une mémoire par exemple RAM ou flash), aux mémoires SPI (« Serial Peripheral Interface ») (intégrant un bus SPI et une mémoire par exemple RAM ou flash), aux cartes SD (« Secure Digital »), ou l’équivalent. De manière générale, l’invention s’applique à tout composant mémoire disposant d’un bus de commande piloté par le composant hôte. Système électronique (1) du type comportant un processeur (10), un composant mémoire (30), et un canal de communication, le canal de communication comportant au moins un bus de commande pouvant être piloté par le processeur (10) pour accéder au composant mémoire (30), caractérisé en ce que le système électronique (1) comporte, en outre, un composant programmable (22), le composant programmable (22) étant intégré le long du canal de communication, en coupure entre le processeur (10) et le composant mémoire (30), le canal de communication comportant alors un premier bus de commande (41) entre le processeur (10) et le composant programmable (22) et un second bus de commande (52) entre le composant programmable (22) et le composant mémoire (30), le composant programmable (22) étant adapté pour filtrer les commandes adressées par le processeur au composant mémoire. Système selon la revendication 1, dans lequel, lorsque le composant programmable (22) est dans un état passant, le composant programmable (22) filtre une commande reçue du processeur (10) de sorte que ladite commande soit retransmise au composant mémoire (30). Système selon la revendication 1 ou la revendication 2, dans lequel, lorsque le composant programmable (22) est dans un état bloquant, le composant programmable (22) filtre une commande reçue du processeur (10) de sorte que ladite commande soit rejetée. Système selon la revendication 2 ou la revendication 3, dans lequel l’état bloquant ou l’état passant du composant programmable (22) est sélectionné en fonction du résultat d’un test consistant à comparer la commande reçue du processeur (10) avec une liste de commandes interdites mémorisée par le composant programmable. Système selon l’une quelconque des revendications 1 à 4, dans lequel le composant programmable (22) est du type composant logique rapide, de préférence du type ASIC, FPGA ou CPLD. Système selon la revendication 5, comportant, en outre, un composant de confiance (26) propre à commander le composant programmable (22) de manière à sélectionner, directement ou indirectement, l’état bloquant ou l’état passant du composant programmable (22). Système selon la revendication 6, dans lequel le composant de confiance (26) est propre à déterminer un mode de fonctionnement courant du processeur (10) et à commander le composant programmable (22) en fonction du mode de fonctionnement courant du processeur (10). Système selon la revendication 6 ou la revendication 7, dans lequel le composant de confiance (26) est propre à commander le composant programmable (22) en mettant à jour une liste de commandes interdites stockée dans la composant programmable et utilisée par le composant programmable pour filtrer les commandes reçues du processeur (10). Système selon l’une quelconque des revendications 1 à 8, dans lequel les premier et second bus sont identiques, le composant programmable effectuant une interception des commandes, ou dans lequel les premier et second bus sont différents, le composant programmable effectuant une conversion des commandes. Système selon l’une quelconque des revendications 1 à 9, dans lequel le composant mémoire (30) est une mémoire eMMC, I2C, SPI ou une carte SD. Composant programmable (22) destiné à être implanté dans un système électronique (1) selon l’une quelconque des revendications 1 à 9.