Brevet FR3118218A1 — publié le 20220624

Selon un aspect, un système sur puce est proposé qui comprend : - une mémoire (MEM) configurée pour stocker un module logiciel externe, - un moyen de calcul (NLFM, CRCM) configuré pour : ° calculer plusieurs modules logiciels modifiés à partir du module logiciel externe (ESW), ° calculer des valeurs de contrôle par itération jusqu’à l’obtention d’une valeur de contrôle finale (CRC(N)), chaque valeur de contrôle étant calculée au moins à partir d’un module logiciel modifié donné et d’une valeur de contrôle précédemment calculée, en commençant avec une valeur de contrôle initiale prédéfinie, - un moyen de comparaison configuré pour comparer la valeur de contrôle finale avec une valeur attendue stockée dans le système sur puce, - un moyen de validation configuré pour valider le module logiciel externe quand la valeur de contrôle finale est égale à la valeur attendue. Figure pour l’abrégé : Fig 2 Procédé pour valider un module logiciel externe en vue de son utilisation par un système sur une puce Les modes de réalisation de la présente invention concernent les systèmes sur puce, et plus particulièrement la validation de modules logiciels externes en vue de leur utilisation par de tels systèmes sur puce. Un module logiciel externe est un logiciel qui n’est pas fourni à l’origine au système sur puce mais qui peut être injecté dans le système sur puce. Un module logiciel externe peut être utilisé par un système sur puce pour mettre en œuvre un service qui n’est pas fourni à l’origine au système sur puce. Par exemple, pour des raisons de coût, certains systèmes sur puce ne comportent pas de mémoire non volatile, comme une mémoire flash ou une mémoire morte, pour stocker un micrologiciel utilisable pour réaliser certaines tâches spéciales. Par exemple, ces tâches spéciales peuvent être le débogage, l’analyse et la reconfiguration de plateformes, ou bien l’analyse profonde d’adresses/défaillances. Il peut donc être avantageux de fournir un tel micrologiciel au système sur puce après qu’il ait été déployé sur site. Toutefois, pour des raisons de sécurité, il est important que le système sur puce valide un module logiciel externe avant de le mettre en œuvre, pour être sûr que le module logiciel externe est un module logiciel autorisé. Pour valider un module logiciel externe, les systèmes sur puce mettent généralement en œuvre des procédés complexes qui font appel à des services de sécurité évolués. Cependant, dans les systèmes sur puce à bas coût, il peut n’y avoir aucun élément de sécurité, comme des fonctions cryptographiques, présent sous forme matérielle ou logicielle pour mettre en œuvre des services de sécurité évolués. Par conséquent, pour de tels systèmes sur puce, il n’y a pas d’élément pour valider les modules logiciels externes injectés sur site à l’intérieur du système sur puce. Par ailleurs, sur ces systèmes sur puce, il peut ne pas y avoir d’accès à certaines régions du système sur puce, en dehors de l’usine, parce que toutes les procédures de sécurité sont indisponibles. Par conséquent, il existe un besoin pour fournir un procédé pour valider/authentifier les modules logiciels externes en vue de leur utilisation par un système sur puce. Selon un aspect, un procédé est proposé pour valider un module logiciel externe en vue de son utilisation par un système sur puce, le procédé comprenant les étapes suivantes réalisées par le système sur puce : - une obtention du module logiciel externe, - des calculs de plusieurs modules logiciels modifiés à partir du module logiciel externe, - une itération d’un calcul d’une valeur de contrôle jusqu’à l’obtention d’une valeur de contrôle finale, chaque valeur de contrôle étant calculée au moins à partir d’un module logiciel modifié donné et d’une valeur de contrôle précédemment calculée, en commençant avec une valeur de contrôle initiale prédéfinie, - une comparaison de la valeur de contrôle finale avec une valeur attendue stockée dans le système sur puce, - une validation du module logiciel externe quand la valeur de contrôle finale est égale à la valeur attendue. Le procédé comprend donc un calcul d’une première valeur de contrôle à partir de la valeur de contrôle initiale et d’un module logiciel modifié. Le procédé comprend ensuite un calcul de plusieurs valeurs de contrôle par itération, chaque valeur de contrôle étant calculée à partir d’au moins une valeur de contrôle précédemment calculée et d’un module logiciel modifié. En particulier, le calcul de valeur de contrôle est itéré un nombre prédéfini de fois jusqu’à ce qu’une valeur de contrôle finale soit obtenue. La valeur de contrôle finale est comparée à une valeur attendue. La valeur attendue est définie par le fabricant du système sur puce à partir d’un module logiciel authentifié. Plus particulièrement, la valeur attendue est calculée de la même manière que la valeur de contrôle finale à partir du module logiciel authentifié. Si la valeur de contrôle finale est égale à la valeur attendue, cela signifie que la probabilité pour que le module logiciel externe soit le module logiciel authentifié est élevée. Ainsi, dans ce cas, le module logiciel externe est validé en vue de son utilisation par le système sur puce. L’itération réalisée pour le calcul de la valeur de contrôle finale permet de réduire la probabilité pour valider un module logiciel externe qui n’est pas un module logiciel authentifié. Un tel procédé permet de valider un module logiciel externe de façon simple et sûre. Selon une mise en œuvre particulièrement avantageuse, chaque valeur de contrôle est calculée en utilisant un algorithme de contrôle par redondance cyclique. Les systèmes sur puce à bas coût comportent généralement un module de contrôle par redondance cyclique. En utilisant un module de contrôle par redondance cyclique, le système sur puce n’a pas besoin de module de sécurité supplémentaire. Ainsi, le procédé peut être mis en œuvre sur un système à bas coût comportant un module de contrôle par redondance cyclique. En variante, chaque valeur de contrôle est calculée en utilisant un algorithme de hachage. De préférence, chaque valeur de contrôle est aussi calculée en utilisant une longueur du module logiciel externe. L’emploi de la longueur du module logiciel externe pour calculer la valeur de contrôle donne plus de robustesse au procédé. En particulier, l’utilisation de la longueur du module logiciel externe pour calculer la valeur de contrôle sert à prévenir les attaques par extension de longueur. Plus particulièrement, pour pirater le système sur puce, un pirate informatique doit être capable de générer un module logiciel ayant la même longueur qu’un module externe authentifié et pour lequel le système sur puce peut générer une valeur de contrôle finale égale à une valeur attendue pour le module externe authentifié. La probabilité de développer avec succès un tel module logiciel est faible. Selon une mise en œuvre particulièrement avantageuse, chaque module logiciel modifié est calculé par une fonction non linéaire. L’utilisation d’une fonction non linéaire garantit un haut degré d’indépendance entre deux modules logiciels modifiés générés consécutivement. Elle augmente ainsi la robustesse du procédé. En variante, chaque module logiciel modifié peut être calculé par une fonction linéaire. Avantageusement, la valeur attendue est stockée dans des bits de configuration du système sur puce ou est codée à un niveau de transfert de registres. Selon un autre aspect, un système sur puce est proposé. Le système sur puce comprend : - une mémoire configurée pour stocker un module logiciel externe, - un moyen de calcul configuré pour : ° calculer plusieurs modules logiciels modifiés à partir du module logiciel externe, ° calculer des valeurs de contrôle par itération jusqu’à l’obtention d’une valeur de contrôle finale, chaque valeur de contrôle étant calculée au moins à partir d’un module logiciel modifié donné et d’une valeur de contrôle précédemment calculée, en commençant avec une valeur de contrôle initiale prédéfinie, - un moyen de comparaison configuré pour comparer la valeur de contrôle finale avec une valeur attendue stockée dans le système sur puce, - un moyen de validation configuré pour valider le module logiciel externe quand la valeur de contrôle finale est égale à la valeur attendue. De préférence, la mémoire est une mémoire volatile. Avantageusement, le système sur puce comprend une unité de traitement pour mettre en œuvre le moyen de comparaison et le moyen de validation. Selon un mode de réalisation particulièrement avantageux, le moyen de calcul comprend un module de contrôle par redondance cyclique pour calculer chaque valeur de contrôle. En variante, le moyen de calcul comprend un module de hachage pour calculer chaque valeur de contrôle. De préférence, le moyen de calcul est configuré pour calculer chaque valeur de contrôle également en utilisant une longueur du module logiciel externe. Selon un mode de réalisation particulièrement avantageux, le moyen de calcul comprend un module de fonction non linéaire configuré pour calculer chaque module logiciel modifié par une fonction non linéaire. De préférence, la fonction non linéaire comprend un décalage de bits du module logiciel modifié. Avantageusement, la valeur attendue est stockée dans des bits de configuration ou est codée à un niveau de transfert de registres. Selon un mode de réalisation particulièrement avantageux, plusieurs valeurs attendues sont stockées dans le système sur puce. Ces différentes valeurs attendues prédéfinies peuvent être utilisées pour valider différents modules logiciels externes qui peuvent fournir différents services supplémentaires au système sur puce. D’autres avantages et caractéristiques de l’invention apparaîtront à la lecture de la description détaillée de modes de réalisation et de mises en œuvre, en aucun cas limitatifs, et à l’étude des dessins annexés dans lesquels : à représentent de façon schématique divers modes de réalisation et mises en œuvre de l’invention. La montre un procédé pour valider un module logiciel externe reçu par un système sur puce en vue de son utilisation par le système sur puce. Le procédé est mis en œuvre par le système sur puce. Le module logiciel externe peut être un module logiciel qui fournit des services supplémentaires au système sur puce. Chaque module logiciel externe qui peut être utilisé par le système sur puce est défini par un fabricant du système sur puce. Le système sur puce est configuré pour calculer plusieurs valeurs de contrôle CRC(k), k allant de 1 à N, à partir du module logiciel externe. Par conséquent, le système sur puce est configuré pour calculer plusieurs valeurs de contrôle CRC(k), en commençant avec une première valeur de contrôle CRC(1), jusqu’à une valeur de contrôle finale CRC(N). Les valeurs de contrôle sont calculées à partir de modules logiciels modifiés dérivés du module logiciel externe reçu par le système sur une puce. Le système sur puce est configuré pour valider le module logiciel externe selon la valeur de contrôle finale CRC(N) calculée. En particulier, si la valeur de contrôle finale CRC(N) est égale à une valeur attendue définie par le fabricant, le module logiciel externe est validé. De préférence, le nombre N est supérieur à 10. Par exemple, le nombre N est compris entre 15 et 20. Le nombre N est choisi de manière à réduire la probabilité d’obtenir une même valeur de contrôle finale pour deux modules logiciels externes différents. En particulier, plus la valeur de N est grande, plus la probabilité d’obtenir la même valeur de contrôle finale pour deux modules logiciels différents est faible. Le nombre N est aussi choisi de manière à ne pas trop accroître le temps de calcul de la valeur de contrôle finale. Plus particulièrement, le procédé comprend une obtention 10 du module logiciel externe par le système sur puce. Le procédé comprend ensuite une étape d’initialisation 11 dans laquelle la valeur k est initialisée à 1, une valeur de contrôle initiale CRC(0) et un nombre N de valeurs de contrôle à calculer sont définis. La valeur de contrôle initiale CRC(0) peut être n’importe quelle valeur. La valeur de contrôle initiale peut être définie de manière aléatoire. Ensuite, le procédé comprend une boucle 12 pour calculer des valeurs de contrôle à partir de différents modules logiciels modifiés. Plus particulièrement, la boucle comprend une étape 13 dans laquelle un module logiciel modifié est calculé à partir du module logiciel externe en utilisant une fonction non linéaire. Le module logiciel modifié peut être exprimé sous la forme suivante : SW_module #(k) = F[SW_module #(k-1)], où SW_module #(k) est le module logiciel modifié à calculer, SW_module #(k-1) est le module logiciel externe quand k est égal à 1 ou le dernier module logiciel modifié calculé quand k est supérieur ou égal à 2, et F est une fonction non linéaire. En variante, le module logiciel modifié peut être exprimé sous la forme suivante : SW_module #(k) = F k [ESW_module], où SW_module #(k) est le module logiciel modifié à calculer, ESW_module est le module logiciel externe, et F k est une fonction non linéaire qui dépend de k. En particulier, le module logiciel externe est formé de mots de données binaires qui sont modifiés par la fonction non linéaire pour obtenir des mots de données modifiés qui forment le module logiciel modifié. En variante, le module logiciel modifié peut être calculé à partir du module logiciel externe en utilisant une fonction linéaire. La fonction utilisée pour calculer un module logiciel modifié permet d’obtenir un nouveau module logiciel modifié distinct du dernier module logiciel modifié calculé. La boucle 12 comprend ensuite, à l’étape 14, un calcul d’une valeur de contrôle CRC(k) à partir du module logiciel modifié, de la dernière valeur de contrôle calculée CRC(k-1) ou de la valeur de contrôle initiale CRC(0), et de la longueur du module logiciel externe. La longueur du module logiciel externe est égale au nombre de mots qui composent ce module logiciel externe. La valeur de contrôle peut être calculée en utilisant un algorithme de contrôle par redondance cyclique, par exemple un algorithme CRC-32, ou un algorithme HASH. En particulier, la valeur de contrôle est calculée à partir d’un mot binaire concaténé du module logiciel modifié utilisé pour calculer la valeur de contrôle, la valeur de contrôle précédente et la longueur du module logiciel externe. Plus particulièrement, la valeur de contrôle CRC(k) peut être exprimée comme suit : CRC(k) = CRC (SW_module #(k) | CRC(k-1) | S), avec k de 1 à N, où SW_module #(k) est un module logiciel modifié, CRC(k-1) est la dernière valeur de contrôle calculée à partir d’un précédent module logiciel modifié SW_module #(k-1) ou de la valeur de contrôle initiale CRC(0), et S est la longueur du module logiciel externe. Ensuite, à l’étape 15, le nombre k est comparé au nombre N. Si le nombre k est plus petit que le nombre N, alors les étapes 13 à 15 sont répétées pour calculer une nouvelle valeur de contrôle, et le nombre k est incrémenté. Toutefois, quand le nombre k est égal à N, cela signifie que la dernière valeur de contrôle calculée est la valeur de contrôle finale. Dans ce cas, le procédé comprend une étape 16 dans laquelle la valeur de contrôle finale est comparée à la valeur attendue définie par le fabricant. Si la valeur de contrôle finale CRC(N) est différente de la valeur attendue définie par le fabricant, le module logiciel externe est rejeté à l’étape 17. Si la valeur de contrôle finale CRC(N) est égale à la valeur attendue définie par le fabricant, le module logiciel externe est validé à l’étape 18. Une fois validé, le module logiciel externe peut être utilisé par le système sur puce. L’emploi de la valeur de contrôle précédente CRC(k-1) pour calculer une nouvelle valeur de contrôle garantit un effet de chaînage au calcul de chaque valeur de contrôle. Par ailleurs, l’utilisation de la longueur du module logiciel externe pour calculer la valeur de contrôle donne plus de robustesse au procédé. En particulier, l’utilisation de la longueur du module logiciel externe pour calculer la valeur de contrôle sert à prévenir les attaques par extension de longueur. Plus particulièrement, pour pirater le système sur puce, un pirate informatique doit être capable de générer un module logiciel ayant la même longueur qu’un module externe authentifié et pour lequel le système sur puce peut générer une valeur de contrôle finale égale à une valeur attendue pour le module externe authentifié. La montre un premier mode de réalisation d’une partie d’un système sur puce configurée pour générer une valeur de contrôle finale. Le système sur puce comprend une machine à états finis FSM, une mémoire volatile MEM, un module de fonction non linéaire NLFM, un multiplexeur MUX, un module de contrôle par redondance cyclique CRCM et des verrous LTCH (en anglais « latches »). La mémoire volatile MEM est configurée pour stocker le module logiciel externe ESW. La mémoire volatile MEM peut être une mémoire RAM (« mémoire à accès aléatoire »). La machine à états finis FSM comprend différentes entrées et sorties. Une première entrée est configurée pour recevoir un signal de réinitialisation RST. Le signal de réinitialisation RST est utilisé pour réinitialiser la machine à états finis FSM. Une deuxième entrée est configurée pour recevoir une horloge de système SYS_CLK. La machine à états finis FSM fonctionne selon l’horloge de système SYS_CLK. La machine à états finis FSM comprend également une sortie configurée pour émettre un signal d’horloge RCLK vers une entrée de la mémoire volatile MEM. Le signal d’horloge RCLK est généré par la machine à états finis FSM. La machine à états finis FSM comprend également une sortie configurée pour émettre un signal RSEL vers une autre entrée de la mémoire volatile MEM. Le signal RSEL est utilisé pour sélectionner la mémoire volatile MEM. La machine à états finis FSM comprend également une sortie configurée pour émettre un signal de lecture RD vers une autre entrée de la mémoire volatile MEM pour ordonner une lecture de la mémoire volatile MEM. La machine à états finis FSM comprend aussi une sortie destinée à délivrer un signal d’adresse ADDR vers une autre entrée de la mémoire volatile MEM. Le signal d’adresse est une adresse de mots de données du module logiciel externe ESW dans la mémoire volatile MEM. Une entrée de la machine à étant finis FSM est configurée pour recevoir le nombre N de valeurs de contrôle à générer pour obtenir la valeur de contrôle finale. La machine à états finis FSM comprend également une entrée configurée pour recevoir un signal NXT d’une sortie du module de fonction non linéaire NLFM. La machine à états finis FSM comprend également une entrée configurée pour recevoir un signal PVS d’une sortie du module de fonction non linéaire NLFM. La machine à états finis FSM comprend également une entrée configurée pour recevoir un signal FRDY d’une sortie du module de fonction non linéaire NLFM. La machine à états finis FSM comprend aussi une sortie configurée pour délivrer un nombre k à l’entrée du module de fonction non linéaire NLFM. La machine à état finis FSM est configurée pour incrémenter le nombre k après chaque calcul d’une valeur de contrôle. En particulier, la machine à états finis FSM est configurée pour initialiser le nombre k à 1 pour le calcul d’une première valeur de contrôle CRC(1). La machine à états finis FSM comprend également une sortie configurée pour émettre un signal SEL vers le multiplexeur MUX. Une autre sortie est configurée pour envoyer par impulsion un signal LTCH_R qui est délivré aux verrous LTCH. Une sortie est configurée pour émettre un signal CLK_CRC au module de contrôle par redondance cyclique CRCM. Une autre entrée est configurée pour recevoir un signal SW_L correspondant à la longueur du module logiciel externe ESW. La machine à états finis FSM comprend une sortie configurée pour émettre un signal RDY vers l’unité de traitement quand la valeur de contrôle finale a été calculée. La machine à états finis FSM est configurée pour mettre en œuvre un procédé pour calculer une valeur de contrôle finale CRC(N). Le module de fonction non linéaire NLFM est configuré pour transformer chaque mot de données DAT du module logiciel externe ESW en un mot de données modifié F k (DAT). Par ce biais, le module de fonction non linéaire NLFM est configuré pour générer un module logiciel modifié formé par chaque mot de données modifié F k (DAT) généré à partir des mots de données DAT du module logiciel externe ESW. Dans ce premier mode de réalisation, le système sur puce est configuré de telle manière que chaque module logiciel modifié est généré par le module de fonction non linéaire NLFM directement à partir du module logiciel externe ESW. En particulier, le module de fonction non linéaire NLFM est configuré pour mettre en œuvre une fonction non linéaire. Ici la fonction non linéaire dépend du nombre k généré par la machine à états finis FSM afin de générer un module logiciel modifié différent pour chaque itération de k. La fonction non linéaire peut consister à décaler les bits du mot de données DAT du module logiciel externe ESW reçu en entrée du module de fonction non linéaire NLFM. Par exemple, dans ce cas, la fonction non linéaire peut être exprimée de la façon suivante : F k (DAT) = DAT k (DAT) LSB+k-m = non (DAT MSB-m ), m allant de 0 à k-1, où F k (DAT) est le mot de données modifié calculé à partir du mot de données DAT, F k (DAT) LSB est le bit de poids faible du mot de données modifié F k (DAT) et DAT MSB est le bit de poids fort du mot de données DAT. La fonction non linéaire peut consister à réaliser une fonction « ou exclusif » entre les différents mots de données DAT du module logiciel externe ESW. Par exemple, dans ce cas, la fonction non linéaire peut être exprimée comme suit : ° F k [DAT(ADDR)] = DAT(ADDR-k) xor DAT(ADDR) xor DAT(ADDR+k), quand ADDR ≥ k et ADDR ° F k [DAT(ADDR)] = DAT(ADDR) xor M, quand ADDR où F k [DAT(ADDR)] est le mot de données modifié calculé pour le mot de données DAT(ADDR) stocké à l’adresse ADDR, DAT(ADDR-1) est le mot de données précédent dans la mémoire, et DAT(ADDR+1) est le mot de données suivant dans la mémoire et ADDR_MAX est l’adresse de mot de données maximale du module logiciel utilisé pour calculer le nouveau module logiciel modifié, l’adresse ADDR allant de 0 à ADDR_MAX, ADDR_MAX étant égal à la longueur du module logiciel externe et M étant une constante, par exemple 0xA5. Le module de fonction non linéaire NLFM comprend des sorties pour délivrer le signal NXT, le signal PVS et le signal FRDY à la machine à états finis FSM. Le module de fonction non linéaire NLFM utilise le signal PVS pour demander à la machine à états finis FSM le mot de données stocké dans la mémoire volatile MEM stockée à une adresse précédente ADDR-k par rapport à une adresse ADDR des données DAT. Le module de fonction non linéaire NLFM utilise le signal NXT pour demander à la machine à états finis FSM le mot de données stocké dans la mémoire volatile MEM stockée à une adresse suivante ADDR+k par rapport à une adresse ADDR des données DAT. Le module de fonction non linéaire NLFM utilise le signal FRDY pour indiquer à la machine à états finis FSM que le mot de données modifié calculé F k (DAT) est disponible. Le module de fonction non linéaire NLFM comprend également une sortie pour délivrer le mot de données modifié F k (DAT) au multiplexeur MUX. Le multiplexeur MUX comprend différentes entrées destinées à recevoir un signal CRC(0), le mot de données modifié F k (DAT), la longueur SW_L du module logiciel externe ESW et la dernière valeur de contrôle calculée CRC(k-1). Le multiplexeur MUX comprend aussi une sortie reliée à une entrée du module de contrôle par redondance cyclique CRCM. Le multiplexeur MUX comprend aussi une entrée destinée à recevoir le signal SEL de la machine à états finis FSM. Le signal SEL permet de sélectionner l’entrée du multiplexeur MUX à délivrer en sortie du multiplexeur MUX. Le module de contrôle par redondance cyclique CRCM est configuré pour calculer une valeur de contrôle CRC(k). En particulier, la valeur de contrôle CRC(k) est calculée à partir du mot de données modifié F k (DAT) calculé par le module de fonction non linéaire NLFM, à partir de la dernière valeur de contrôle calculée ou d’une valeur de contrôle initiale et à partir de la longueur SW_L du module logiciel externe ESW. Plus particulièrement, le mot de données modifié F k (DAT), la dernière valeur de contrôle CRC(k-1) ou la valeur de contrôle initiale CRC(0) et la longueur SW_L du module logiciel externe ESW sont fournis au module de contrôle par redondance cyclique CRCM par le multiplexeur MUX commandé par la machine à états finis FSM. Le module de contrôle par redondance cyclique CRCM peut exécuter un algorithme CRC-32. Le module de contrôle par redondance cyclique CRCM comprend une entrée destinée à recevoir le signal CLK_CRC généré par la machine à états finis FSM. Le module de contrôle par redondance cyclique CRCM comprend une sortie pour délivrer la valeur de contrôle à une entrée des verrous LTCH. Le module de contrôle par redondance cyclique CRCM est utilisé pour calculer un nombre de valeurs de contrôle égal au nombre N reçu sur une entrée de la machine à états finis FSM. La N e valeur de contrôle est la valeur de contrôle finale. Les verrous LTCH sont utilisés pour stocker temporairement chaque valeur de contrôle calculée par le module de contrôle par redondance cyclique CRCM. Les verrous LTCH comprennent aussi une entrée destinée à recevoir le signal LTCH_R de la machine à états finis FSM. Les verrous LTCH comprennent une sortie pour délivrer la dernière valeur de contrôle calculée par le module de contrôle par redondance cyclique CRCM quand le signal LTCH_R est envoyé par la machine à états finis FSM. La sortie des verrous LTCH est reliée à une entrée du multiplexeur MUX pour délivrer le signal CRC(k-1). La sortie des verrous LTCH est également reliée à une unité de traitement. Ainsi, les verrous LTCH sont utilisés pour délivrer la dernière valeur de contrôle calculée CRC(k-1) au multiplexeur MUX pour le calcul d’une autre valeur de contrôle CRC(k) par le module de contrôle par redondance cyclique CRCM. Suite au calcul de la valeur de contrôle finale CRC(N), les verrous LTCH sont configurés pour stocker cette valeur de contrôle finale avant de la délivrer à l’unité de traitement. Lorsque la valeur de contrôle finale est disponible pour l’unité de traitement, la machine à états finis FSM est configurée pour envoyer le signal RDY. Lorsque le signal RDY est envoyé, l’unité de traitement est configurée pour recevoir la valeur de contrôle finale. Ensuite, l’unité de traitement est configurée pour comparer la valeur de contrôle finale à une valeur attendue prédéfinie. La valeur attendue est définie par le fabricant du système sur puce depuis un module logiciel externe ESW autorisé. La valeur attendue est stockée dans le système sur puce. Par exemple, la valeur attendue peut être stockée dans des bits de configuration ou codée en RTL (RTL étant l’acronyme de register-transfer level , ou « niveau de transfert de registres »). Si la valeur de contrôle finale est égale à la valeur attendue, cela signifie que la probabilité pour que le module logiciel externe ESW fourni au système sur puce soit un module logiciel autorisé est élevée. Dans ce cas, l’unité de traitement est configurée pour valider le module logiciel externe ESW. Le module logiciel externe ESW peut ensuite être utilisé par le système sur puce. Autrement, si la valeur de contrôle finale n’est pas égale à la valeur attendue, cela signifie que le module logiciel externe ESW fourni au système sur puce n’est pas un module logiciel autorisé. Dans ce cas, l’unité de traitement est configurée pour rejeter le module logiciel externe ESW. Ainsi, dans ce cas, le module logiciel externe ESW ne peut pas être utilisé par le système sur puce. La montre un exemple de chronogramme des signaux utilisés par les différents éléments du système sur puce de la pour obtenir la valeur de contrôle finale CRC(N). Au début du procédé, le module logiciel externe ESW à valider est stocké dans la mémoire volatile MEM. Le module logiciel externe ESW peut être divisé en plusieurs mots de données stockés dans la mémoire à différentes adresses. Dans notre cas, chaque mot de données comprend 32 bits. La longueur S du module logiciel externe ESW est reçue par la machine à états finis FSM via le signal SW_L. Le nombre N de valeurs de contrôle à calculer est aussi reçu par la machine à états finis FSM. Le procédé comprend une étape d’initialisation dans laquelle la machine à états finis FSM sélectionne, avec le signal SEL, l’entrée du multiplexeur MUX qui reçoit la valeur de contrôle initiale CRC(0) qui peut être codée RTL. Par exemple, la machine à états finis FSM choisit l’entrée n° 0 du multiplexeur avec une valeur « Sel 0 » du signal SEL. La valeur de contrôle initiale CRC(0) peut être égale à n’importe quelle valeur X. Ensuite, le signal d’horloge CLK_CRC est émis par impulsion pour fournir la valeur de contrôle initiale au module de contrôle par redondance cyclique CRCM. La machine à états finis FSM émet ensuite par impulsion le signal LTCH_R pour stocker le signal CRC(0) dans les verrous LTCH. Cette valeur de contrôle initiale est utilisée pour calculer la première valeur de contrôle CRC(1). Ensuite, pour calculer une valeur de contrôle, le procédé commence par calculer un mot de données modifié F k (DAT) pour chaque mot du module logiciel externe ESW. En particulier, la machine à états finis FSM commence par délivrer l’adresse du mot de données DAT à la mémoire volatile MEM. La machine à états finis FSM émet aussi par impulsion le signal RD pour ordonner la lecture de la mémoire volatile MEM du mot de données DAT stocké à l’adresse délivrée par la machine à états finis FSM. La lecture du mot de données DAT commence sur un front montant du signal d’horloge RCLK. La machine à états finis FSM envoie aussi le signal RSEL pour sélectionner la mémoire volatile MEM. Par ailleurs, la machine à états finis FSM sélectionne, avec le signal SEL, l’entrée du multiplexeur MUX qui reçoit le mot de données modifié F k (DAT). Par exemple, la machine à états finis FSM choisit l’entrée n° 1 du multiplexeur avec une valeur « Sel 1 » du signal SEL. Ensuite, le mot de données DAT est délivré par la mémoire volatile MEM au module de fonction non linéaire NLFM. Ensuite, le module de fonction non linéaire NLFM calcule le mot de données modifié F k (DAT) à partir du mot de données DAT délivré par la mémoire volatile MEM. Le calcul du mot de données modifié F k (DAT) est exécuté selon l’horloge de système SYS_CLK. Dans le cas où le module de fonction non linéaire NLFM a besoin d’un mot de données précédent ou d’un mot de données suivant du module logiciel externe ESW pour calculer le mot de données modifié F k (DAT), le module de fonction non linéaire NLFM envoie le signal PVS ou le signal NXT. Lorsque la machine à états finis FSM reçoit le signal PVS ou le signal NXT, la machine à états finis FSM demande la lecture du mot de données stocké à l’adresse précédente ou suivante de la mémoire volatile MEM. Ensuite, le mot de données stocké à l’adresse précédente ou suivante est délivré au module de fonction non linéaire NLFM. Lorsque le calcul d’un mot de données modifié F k (DAT) est terminé, le module de fonction non linéaire NLFM envoie le signal FRDY pour indiquer à la machine à états finis FSM que le mot de données modifié F k (DAT) est disponible. Ensuite, la machine à états finis FSM émet par impulsion l’horloge CLK_CRC pour délivrer le mot de données modifié F k (DAT) au module de contrôle par redondance cyclique CRCM. Quand un mot de données modifié F k (DAT) a été calculé pour chaque mot de données DAT du module logiciel externe ESW, on obtient un module logiciel modifié. Par exemple, sur la , le module de fonction non linéaire n’a pas besoin d’un mot de données précédent ou d’un mot de données suivant du module logiciel externe. Le mot de données modifié F 1 (Data 0) est calculé à partir du mot de données Data 0 stocké à l’adresse 0x00…0 de la mémoire volatile, avec k égal à 1. Le mot de données modifié F 1 (Data S-1) est calculé à partir du mot de données Data S-1 stocké à l’adresse ADDR S-1 de la mémoire volatile, avec k égal à 1. Les mots de données modifiés F 1 (Data 0) à F 1 (Data S-1) forment un premier module logiciel modifié. Le mot de données modifié F N (Data 0) est calculé à partir du mot de données Data 0 stocké à l’adresse 0x00…0 de la mémoire volatile, avec k égal à N. Le mot de données modifié F N (Data S-1) est calculé à partir du mot de données Data S-1 stocké à l’adresse ADDR S-1 de la mémoire volatile, avec k égal à N. Les mots de données modifiés F N (Data 0) à F N (Data S-1) forment un module logiciel modifié final. Ensuite, pour passer au calcul d’une valeur de contrôle, quand tous les mots de données modifiés F k (DAT) (c’est-à-dire le module logiciel modifié) ont été délivrés au module de contrôle par redondance cyclique CRCM, la machine à états finis FSM choisit l’entrée du multiplexeur MUX qui reçoit la dernière valeur de contrôle calculée CRC(k-1) ou la valeur de contrôle initiale CRC(0). Par exemple, la machine à états finis FSM choisit l’entrée n° 3 du multiplexeur avec une valeur « Sel 3 » du signal SEL. Le signal d’horloge CLK_CRC est émis par impulsion par la machine à états finis FSM. Ceci permet de délivrer la dernière valeur de contrôle calculée CRC(k-1) ou la valeur de contrôle initiale CRC(0) au module de contrôle par redondance cyclique CRCM pour le calcul d’une nouvelle valeur de contrôle. Ensuite, la machine à états finis FSM choisit l’entrée du multiplexeur MUX qui reçoit la longueur logicielle S via le signal SW_L. Par exemple, la machine à états finis FSM choisit l’entrée n° 2 du multiplexeur avec une valeur « Sel 2 » du signal SEL. Le signal d’horloge CLK_CRC est émis par impulsion par la machine à états finis FSM. Ceci permet de délivrer la longueur logicielle S au module de contrôle par redondance cyclique CRCM pour le calcul d’une nouvelle valeur de contrôle. Ensuite, la nouvelle valeur de contrôle est calculée par le module de contrôle par redondance cyclique CRCM en utilisant tous les mots de données modifiés calculés F k (DAT), la dernière valeur de contrôle calculée CRC(k-1) ou la valeur de contrôle initiale CRC(0), et la longueur logicielle S. Par exemple, la première valeur de contrôle CRC(1) est calculée à partir de mots de données modifiés F 1 (Data 0) à F 1 (Data S-1) du premier module logiciel modifié, et aussi à partir de la valeur de contrôle initiale CRC(0) et de la longueur S du module logiciel externe. Ensuite, la machine à états finis FSM émet par impulsion le signal LTCH_R pour stocker la nouvelle valeur de contrôle dans les verrous LTCH. On calcule des valeurs de contrôle jusqu’à l’obtention d’une valeur de contrôle finale CRC(N). Par exemple, la valeur de contrôle finale CRC(N) est calculée à partir de mots de données modifiés F N (Data 0) à F N (Data S-1) du module logiciel modifié final, et aussi à partir de la valeur de contrôle précédente CRC(N-1) et de la longueur S du module logiciel externe. Une fois la valeur de contrôle finale calculée, la machine à états finis FSM émet par impulsion le signal LTCH_R pour stocker la valeur de contrôle finale dans les verrous LTCH. Ensuite, la machine à états finis FSM émet par impulsion le signal RDY pour délivrer la valeur de contrôle finale CRC(N) à l’unité de traitement. L’unité de traitement utilise la valeur de contrôle finale pour valider le module logiciel externe ESW. En particulier, comme indiqué précédemment, l’unité de traitement compare la valeur de contrôle finale à une valeur attendue prédéfinie. Si la valeur de contrôle finale est égale à la valeur attendue, l’unité de traitement valide le module logiciel externe ESW. Le module logiciel externe ESW peut alors être utilisé par le système sur puce. Sinon, si la valeur de contrôle finale n’est pas égale à la valeur attendue, l’unité de traitement rejette le module logiciel externe ESW. Ainsi, dans ce cas, le module logiciel externe ESW ne peut pas être utilisé par le système sur puce. La montre un deuxième mode de réalisation d’une partie d’un système sur puce configurée pour générer une valeur de contrôle finale. Ce deuxième mode de réalisation diffère du premier mode de réalisation dans la façon de générer des modules logiciels modifiés par le module de fonction non linéaire NLFM. Plus particulièrement, le module de fonction non linéaire NLFM est configuré pour appliquer exactement la même fonction non linéaire à chaque mot de données DAT reçu à l’entrée du module de fonction non linéaire NLFM. Ainsi, la fonction non linéaire ne dépend pas d’un nombre k. Cependant, le système sur puce est configuré de telle manière que chaque module logiciel modifié est généré par le module de fonction non linéaire NLFM directement à partir d’un module logiciel modifié, le premier module logiciel modifié étant généré à partir du module logiciel externe. En particulier, la mémoire volatile MEM est configurée pour stocker chaque module logiciel modifié. Par exemple, les modules logiciels modifiés peuvent être stockés dans des banques de mémoire TMP1 à TMPm. Par ailleurs, le module de fonction non linéaire NLFM est configuré pour recevoir des mots de données DAT du module logiciel externe ESW ou des mots de données DAT de modules logiciels modifiés stockés dans la mémoire volatile MEM. Le module de fonction non linéaire NLFM est configuré pour calculer un mot de données modifié F(DAT) à partir de chaque mot de données DAT reçu sur son entrée. En particulier, la machine à états finis FSM est configurée pour sélectionner le mot de données DAT du module logiciel externe ESW ou d’un module logiciel modifié à délivrer au module de fonction non linéaire NLFM. Les mots de données modifiés F(DAT) obtenus à partir de mots de données DAT du module logiciel externe ESW ou d’un module logiciel modifié donné forment un nouveau module logiciel modifié. Le module de fonction non linéaire NLFM est configuré pour délivrer chaque mot de données modifié F(DAT) d’un nouveau module logiciel modifié à la mémoire volatile MEM. Le module de fonction non linéaire NLFM est aussi configuré pour envoyer un signal WR pour ordonner une écriture d’un mot de données modifié F(DAT) nouvellement calculé. La fonction non linéaire peut consister à décaler les bits du mot de données DAT du module logiciel externe ESW ou d’un module logiciel modifié reçu à l’entrée du module de fonction non linéaire NLFM. Par exemple, dans ce cas, la fonction non linéaire peut être exprimée de la façon suivante : F(DAT) = DAT LSB = non (DAT MSB ), où F(DAT) est le mot de données modifié calculé à partir du mot de données DAT, F(DAT) LSB est le bit de poids faible du mot de données modifié F(DAT) et DAT MSB est le bit de poids fort du mot de données DAT. La fonction non linéaire peut consister à réaliser une fonction « ou exclusif » entre différents mots de données. Par exemple, dans ce cas, la fonction non linéaire peut être exprimée comme suit : ° F[DAT(ADDR)] = DAT(ADDR-1) xor DAT(ADDR) xor DAT(ADDR+1), quand ADDR > 1 et ADDR ° F[DAT(ADDR)] = DAT(ADDR) xor M, quand ADDR = 0 ou ADDR = ADDR_MAX, où F[DAT(ADDR)] est le mot de données modifié calculé pour le mot de données DAT(ADDR) stocké à l’adresse ADDR, DAT(ADDR-1) est le mot de données précédent dans la mémoire, et DAT(ADDR+1) est le mot de données suivant dans la mémoire et ADDR_MAX est l’adresse de mot de données maximale du module logiciel utilisé pour calculer le nouveau module logiciel modifié, l’adresse ADDR allant de 0 à l’adresse ADDR_MAX, ADDR_MAX étant égale à la longueur du module logiciel externe et M étant une constante, par exemple 0xA5. Autrement, chaque valeur de contrôle est calculée de la même façon que dans le mode de réalisation de la . De préférence, chaque module logiciel modifié stocké dans la mémoire peut être écrasé par un module logiciel modifié nouvellement calculé quand le module logiciel modifié stocké dans la mémoire n’est plus nécessaire pour le calcul d’un nouveau module logiciel modifié. Ceci permet de minimiser la quantité de mémoire nécessaire pour stocker les modules logiciels. Par ailleurs, certains systèmes sur puce peuvent stocker des valeurs attendues prédéfinies différentes afin de valider des modules logiciels externes différents qui peuvent fournir des services supplémentaires différents au système sur puce. Ainsi, pour chaque module logiciel externe qui peut être autorisé à être utilisé par le système sur puce, une valeur attendue prédéfinie est stockée dans le système sur puce. Par exemple, une première valeur attendue peut être définie pour valider un module logiciel externe qui peut être utilisé pour réaliser une fonction HMAC-SHA256. Une deuxième valeur attendue peut être définie pour valider un module logiciel externe qui peut être utilisé pour réaliser une fonction AES. Une troisième valeur attendue peut être définie pour valider un module logiciel externe qui peut être utilisé pour autoriser un module logiciel externe supplémentaire choisi par un utilisateur du système sur puce. Il est entendu que la présente invention peut connaître diverses variantes et modifications qui apparaîtront aux personnes du métier. Par exemple, chaque valeur de contrôle peut être calculée en utilisant des méthodes différentes de celles décrites ci-dessus. En particulier, chaque valeur de contrôle peut être calculée à partir d’un module logiciel modifié calculé par le module de fonction non linéaire, et à partir d’un résultat d’un module de fonction secondaire qui prend comme entrées la dernière valeur de contrôle calculée et la longueur du module logiciel externe. En variante, chaque valeur de contrôle peut être calculée à partir d’un module logiciel modifié calculé par le module de fonction non linéaire, et à partir d’un résultat d’un module de fonction secondaire qui prend comme entrées plusieurs valeurs de contrôle déjà calculées et la longueur du module logiciel externe. Procédé pour valider un module logiciel externe en vue de son utilisation par un système sur puce, comprenant les étapes suivantes réalisées par le système sur puce : - une obtention (10) du module logiciel externe, - des calculs (13) de plusieurs modules logiciels modifiés à partir du module logiciel externe, - une itération d’un calcul (14) d’une valeur de contrôle jusqu’à l’obtention d’une valeur de contrôle finale, chaque valeur de contrôle étant calculée au moins à partir d’un module logiciel modifié donné et d’une valeur de contrôle précédemment calculée, en commençant avec une valeur de contrôle initiale prédéfinie, - une comparaison (16) de la valeur de contrôle finale avec une valeur attendue stockée dans le système sur puce, - une validation (18) du module logiciel externe quand la valeur de contrôle finale est égale à la valeur attendue. Procédé selon la revendication 1, dans lequel chaque valeur de contrôle est calculée en utilisant un algorithme de contrôle par redondance cyclique. Procédé selon la revendication 1, dans lequel chaque valeur de contrôle est calculée en utilisant un algorithme de hachage. Procédé selon l’une des revendications 1 à 3, dans lequel chaque valeur de contrôle est aussi calculée en utilisant une longueur du module logiciel externe. Procédé selon l’une des revendications 1 à 4, dans lequel chaque module logiciel modifié est calculé par une fonction non linéaire. Procédé selon la revendication 5, dans lequel la fonction non linéaire comprend un décalage de bits du module logiciel modifié. Procédé selon l’une des revendications 1 à 6, dans lequel la valeur attendue est stockée dans des bits de configuration du système sur puce ou est codée à un niveau de transfert de registres. Système sur puce comprenant : - une mémoire (MEM) configurée pour stocker un module logiciel externe, - un moyen de calcul (NLFM, CRCM) configuré pour : ° calculer plusieurs modules logiciels modifiés à partir du module logiciel externe (ESW), ° calculer des valeurs de contrôle par itération jusqu’à l’obtention d’une valeur de contrôle finale (CRC(N)), chaque valeur de contrôle étant calculée au moins à partir d’un module logiciel modifié donné et d’une valeur de contrôle précédemment calculée, en commençant avec une valeur de contrôle initiale prédéfinie, - un moyen de comparaison configuré pour comparer la valeur de contrôle finale avec une valeur attendue stockée dans le système sur puce, - un moyen de validation configuré pour valider le module logiciel externe quand la valeur de contrôle finale est égale à la valeur attendue. Système selon la revendication 8, dans lequel le moyen de calcul comprend un module de contrôle par redondance cyclique (CRCM) pour calculer chaque valeur de contrôle. Système selon la revendication 8, dans lequel le moyen de calcul comprend un module de hachage pour calculer chaque valeur de contrôle. Système selon l’une des revendications 8 à 10, dans lequel le moyen de calcul est configuré pour calculer chaque valeur de contrôle également en utilisant une longueur (SW_L) du module logiciel externe (ESW). Système selon l’une des revendications 8 à 11, dans lequel le moyen de calcul comprend un module de fonction non linéaire (NLFM) configuré pour calculer chaque module logiciel modifié par une fonction non linéaire. Système selon la revendication 12, dans lequel la fonction non linéaire comprend un décalage de bits du module logiciel modifié. Système selon l’une des revendications 8 à 13, dans lequel la valeur attendue est stockée dans des bits de configuration ou est codée à un niveau de transfert de registres. Système selon l’une des revendications 8 à 14, dans lequel plusieurs valeurs attendues sont stockées.