FR 3074936 A1 20190614 FR 1761921 A 20171211 Procédé d'écriture d'un ensemble d'informations, par exemple un code programme, cryptées dans une mémoire externe d'un circuit intégré et circuit intégré correspondant Des modes de mise en oeuvre et de réalisation de l'invention concernent l'encryptage et le décryptage d'informations, par exemple des données, ou bien des mots ou instructions d'un code programme, dans une mémoire externe d'un circuit intégré. L'invention s'applique tout particulièrement à l'encryptage et au stockage au vol d'un code programme dans une mémoire externe à un circuit intégré, ce code programme étant destiné à être exécuté par une unité de traitement du circuit intégré, notamment mais non exclusivement un microcontrôleur, par exemple un microcontrôleur de la famille STM32® commercialisé par la société STMicroelectronics. Le fait de stocker un code programme crypté dans une mémoire externe au circuit intégré contenant l'unité de traitement, rend le procédé de cryptage et de stockage plus vulnérable aux attaques par injection de fautes visant notamment à retrouver la clé de cryptage. Il existe donc un besoin de rendre un tel procédé de cryptage et de stockage plus robuste à de telles attaques. Par ailleurs il est souhaitable que l'augmentation de la robustesse soit compatible avec une latence faible du procédé de cryptage, surtout lorsque ce procédé est effectué au vol. Selon un mode de mise en oeuvre et de réalisation il est proposé de répondre à ce besoin de robustesse tout en offrant une faible latence. Selon un aspect, il est ainsi proposé un procédé d'écriture, en particulier au vol, d'informations, par exemple un code programme destiné à être exécuté par une unité de traitement d'un circuit intégré, par exemple un microcontrôleur, l'écriture étant effectuée dans une mémoire externe au circuit intégré. Le procédé comprend, avant de débuter le processus d'écriture des informations, une génération au sein du circuit intégré d'une clé 2 de cryptage, par exemple mais non limitativement une génération aléatoire. Le procédé comprend également, au cours du processus d'écriture, pour chaque information, par exemple une donnée de code, 5 destinée à être écrite à une adresse de la mémoire, un premier encryptage de ladite adresse au sein du circuit intégré par des premiers moyens de cryptage/décryptage, par exemple un algorithme de cryptage symétrique du type AES, utilisant ladite clé de façon à obtenir une analyse cryptée. 10 Le procédé comprend également un deuxième encryptage de l'information au sein du circuit intégré avec des deuxièmes moyens de cryptage/décryptage utilisant ladite adresse cryptée, et une écriture de l'information cryptée à ladite adresse, la mémoire ne pouvant pas être écrite deux fois à la même adresse au cours du processus d'écriture. 15 Ainsi, le fait d'interdire au cours du processus d'écriture des informations, par exemple du code programme, que la mémoire soit écrite deux fois à la même adresse, permet d'éviter qu'un tiers mal intentionné puisse modifier le processus d'écriture pour écrire plusieurs données différentes successives à la même adresse dans le 20 but d'obtenir la clé de cryptage. On peut ainsi effectuer une écriture au vol d'un ensemble d'informations, par exemple un code programme, encrypté de façon robuste, cette génération d'adresses configurée de façon à ce que la mémoire ne puisse pas être écrite deux fois à la même adresse au cours 25 du processus d'écriture, ayant un impact très faible voir nul sur la latence du procédé d'écriture. Une façon particulièrement simple d'interdire une écriture deux fois à la même adresse au cours du processus d'écriture consiste à écrire la première information à une adresse initiale puis à incrémenter 30 l'adresse après chaque écriture d'une donnée. Cela étant, l'écriture de la mémoire dans un mode strictement incrémental n'est qu'un exemple non limitatif. Il serait tout à fait possible par exemple de prévoir une table mémorisant les adresses successives utilisées et des moyens vérifiant, 3 avant d'adresser la mémoire à une adresse courante, que celle-ci ne figure pas déjà dans la table. Par ailleurs, lorsque l'ensemble d'informations, par exemple le code programme, est destiné à être écrit à une plage d'adresses de la 5 mémoire, il est particulièrement avantageux, lorsque toutes les adresses de ladite plage ont été utilisées lors du processus d'écriture, d'interdire toute nouvelle opération d'écriture dans la mémoire avec la clé de cryptage qui vient d'être utilisée. Outre le fait que la génération de la clé de cryptage puisse être 10 avantageusement aléatoire, il est préférable, toujours dans le but d'augmenter la robustesse du procédé d'écriture de l'ensemble d'informations, par exemple du code programme, de générer une nouvelle clé de cryptage avant chaque nouveau processus d'écriture, par exemple lorsque le code programme doit être modifié ou mis à 15 jour. La mémoire externe peut être une mémoire volatile ou non volatile, par exemple une mémoire flash. Par ailleurs, il est avantageux, dans le but du décryptage de l'ensemble d'informations, par exemple du code mémoire, de stocker 20 la clé de cryptage dans un moyen de stockage interne au circuit intégré, par exemple dans une mémoire protégée. Selon un autre aspect, il est proposé un procédé de traitement, en particulier au vol, d'un ensemble d'informations, par exemple un procédé d'exécution d'un code programme, par une unité de traitement 25 d'un circuit intégré, l'ensemble d'informations, par exemple les données de code du code programme, ayant été écrit dans une mémoire externe au circuit intégré selon le procédé tel que défini ci-avant. Le procédé de traitement comprend alors, pour chaque information stockée à une adresse de la mémoire externe et destinée à 30 être chargée dans l'unité de traitement, un premier encryptage de ladite adresse au sein du circuit intégré par les premiers moyens de cryptage/décryptage utilisant ladite clé de façon à obtenir une adresse cryptée, 4 une lecture de l'information cryptée stockée dans la mémoire externe à ladite adresse, un décryptage de ladite information cryptée au sein du circuit intégré avec les deuxièmes moyens de cryptage/décryptage utilisant 5 ladite adresse cryptée, et un chargement de la donnée décryptée dans un registre de l'unité de traitement. Ce registre peut être un registre de données si les informations sont des données ou bien un registre d'instructions si les informations sont des instructions ou données de code d'un code 10 programme. Selon un autre aspect, il est proposé un dispositif comprenant un circuit intégré comportant une unité de traitement et une mémoire externe au circuit intégré, le circuit intégré comprenant une entrée d'information pour recevoir un ensemble 15 d'informations, par exemple un code programme, destiné à être écrit dans la mémoire externe en vue de son traitement ultérieur, par exemple son exécution, par l'unité de traitement, des moyens de génération configurés pour générer une clé de cryptage, des moyens d'adressage configurés pour générer une adresse 20 de la mémoire pour chaque information destinée à être écrite dans la mémoire et pour ne pas générer deux fois la même adresse au cours du processus d'écriture du code programme, des premiers moyens de cryptage/décryptage configurés pour effectuer un premier encryptage de ladite adresse utilisant ladite clé de 25 façon à obtenir une adresse cryptée, des deuxièmes moyens de cryptage/décryptage configurés pour effectuer un deuxième encryptage de ladite information utilisant ladite adresse cryptée, et des moyens d'écriture configurés pour écrire l'information 30 cryptée à ladite adresse. Selon un mode de réalisation, lors du processus d'écriture les moyens d'adressage sont configurés pour générer une adresse initiale et pour incrémenter l'adresse après chaque écriture d'une information. 5 Selon un mode de réalisation, les moyens d'adressage sont configurés pour écrire l'ensemble d'informations à une plage d'adresses de la mémoire, et pour interdire tout nouvel adressage lorsque toutes les adresses de ladite plage ont été utilisées lors du 5 processus d'écriture. Selon un mode de réalisation, les moyens de génération sont configurés pour générer ladite clé de cryptage de façon aléatoire. Selon un mode de réalisation, les moyens de génération sont configurés pour générer une nouvelle clé de cryptage avant chaque 10 nouveau processus d'écriture. Selon un mode de réalisation, les deuxièmes moyens de cryptage/décryptage comportent un opérateur OU EXCLUSIF. Selon un mode de réalisation, les deuxièmes moyens de cryptage/décryptage comportent des moyens de brouillage configurés 15 pour modifier les entrées de l'opérateur OU EXCLUSIF selon un code de brouillage. Selon un mode de réalisation, le dispositif comprend en outre un moyen de stockage interne au circuit intégré configuré pour stocker la clé de cryptage. 20 Selon un mode de réalisation, lorsque la mémoire externe contient des informations, par exemple des données de code cryptées, les premiers moyens de cryptage/décryptage sont configurés pour extraire la clé de cryptage du moyen de stockage interne et pour crypter avec ladite clé de cryptage, chaque adresse à laquelle doit être 25 lue une information, le circuit intégré comprenant des moyens de lecture configurés pour lire dans la mémoire externe à ladite adresse, l'information cryptée, et les deuxièmes moyens de cryptage/décryptage sont configurés pour décrypter l'information cryptée lue avec ladite adresse cryptée, et pour délivrer l'information décryptée dans un 30 registre d'instructions de l'unité de traitement. D'autres avantages et caractéristiques de l' invention apparaîtront à l'examen de la description détaillée de modes de mise en oeuvre et de réalisation, nullement limitatifs, et des dessins annexés sur lesquels : 6 -les figures 1 à 6 illustrent schématiquement des modes de mise en oeuvre et de réalisation de l'invention. Dans tout ce qui suit, on suppose à titre d'exemple non limitatif que l'ensemble d'informations destiné à être stocké encrypté 5 dans une mémoire externe, est un code programme, bien que ces informations puissent être également des données. Sur la figure 1, la référence 1 désigne un dispositif comportant un circuit intégré 10 et une mémoire 11, externe au circuit intégré 10. La mémoire 11 est destinée à stocker un code programme 10 encrypté 110 destiné à être exécuté par une unité de traitement 100 du circuit intégré. Cette unité de traitement peut être par exemple un microcontrôleur tel qu'un microcontrôleur de la famille 5TM32® commercialisé par la société STMicroelectronics. La mémoire externe 11 peut être une mémoire vive ou encore 15 une mémoire morte, par exemple une mémoire flash. Le circuit intégré 10 comporte une entrée de code 107 pour recevoir un code programme destiné à être écrit encrypté dans la mémoire externe 11. Le dispositif 1 comporte également au sein du circuit intégré 20 10, des moyens de génération 101 configurés pour générer une clé de cryptage. Cette clé de cryptage RD peut être générée de façon aléatoire au début du processus d'écriture du code programme. Dans ce cas, préférentiellement, lors de toute répétition d'un processus d'écriture d'un code programme, par exemple lors d'une modification ou une 25 mise à jour du code programme, on pourra avantageusement générer une nouvelle clé de cryptage valable pour le processus d'écriture en cours. De tels moyens de génération 101 sont de structure classique et connue en soi. 30 Le circuit intégré comporte également des moyens d'adressage configurés pour générer une adresse de la mémoire pour chaque donnée de code destinée à être écrite dans la mémoire 11 et pour ne pas générer deux fois la même adresse au cours du processus d'écriture du code programme. 7 On reviendra plus en détail ci-après sur un exemple de structure de ces moyens d'adressage. Le circuit intégré 10 comporte également des premiers moyens de cryptage/décryptage 103, par exemple un algorithme de cryptage 5 symétrique du type AES ou DES, configurés pour effectuer un premier encryptage de l'adresse à laquelle la donnée de code doit être écrite, en utilisant la clé, de façon à obtenir une adresse cryptée. Le circuit intégré comporte également des deuxièmes moyens de cryptage/décryptage 104, configurés pour effectuer un deuxième 10 encryptage de la donnée de code en utilisant l'adresse cryptée. Là encore, des exemples de structures de tels deuxièmes moyens de cryptage/décryptage 104 seront détaillés ci-après. Le circuit intégré 10 comporte également des moyens d'écriture, de structure classique et connue en soi, 105, configurés 15 pour écrire la donnée de code cryptée à l'adresse correspondante. Le circuit intégré 10 comporte également, dans le cadre d'un chargement du code programme dans un registre d'instruction 1000 de l'unité de traitement 100, des moyens de lecture 106, de structure classique et connue en soi, configurés pour lire les données de code 20 programme cryptées 110 contenues dans la mémoire externe 11. On se réfère maintenant plus particulièrement à la figure 2 pour décrire un mode de mise en oeuvre d'un procédé d'encryptage et de stockage d'un code programme dans la mémoire externe 11. On suppose ici que la donnée de code MCi, qui peut être un 25 mot numérique, doit être stockée dans la mémoire externe à l'adresse ADRi. Dans l'étape S20, les moyens de génération 101 génèrent, par exemple de façon aléatoire, la clé de cryptage RD. Cette clé de cryptage RD peut être avantageusement stockée 30 (étape S27) dans une mémoire interne 109 (figure 1) du circuit intégré, par exemple une mémoire morte protégée. Il convient de noter que ce stockage peut être effectué au début, en cours ou à la fin du processus d'écriture du code programme dans la mémoire externe 11. 8 Dans une étape S21, les premiers moyens de cryptage/décryptage 103 encryptent l'adresse ADRi avec la clé de cryptage RD pour fournir une adresse cryptée ADRCi. Puis, dans l'étape S22, les deuxièmes moyens de 5 cryptage/décryptage 104 effectuent un encryptage de la donnée de code MCi avec l'adresse cryptée ADRCi de façon à fournir une donnée de code cryptée MCCi. Les moyens d'écriture 105 écrivent alors (étape S23) la donnée cryptée MCCi dans la mémoire 11 à l'adresse ADRi. 10 On recommence ce qui vient d'être décrit pour l'adresse suivante tant que l'on n'a pas atteint la plage d'adresses prévue pour le stockage du code programme (étapes S24 et S26). Par contre, dans le cas où on a atteint la fin de la plage d'adresses représentée dans l'étape S24 par la valeur N pour l'indice i, 15 alors on stoppe le processus d'écriture et on interdit toute nouvelle écriture dans la mémoire externe 11 avec la clé de cryptage RD qui vient d'être utilisée. Par ailleurs, lorsque dans l'étape S26, on passe de l'adresse ADRi à l'adresse suivante ADRi+1, on génère l'adresse suivante de 20 sorte que la mémoire ne puisse pas être écrite deux fois à la même adresse. Comme illustré sur la figure 3, une façon particulièrement simple de réaliser cette fonction consiste à utiliser un compteur matériel pour la structure des moyens d'adressage 102 de façon à ce 25 que l'adresse ADRi+1 soit égale à l'adresse ADRi incrémentée de 1 par exemple (étape S30). Lorsque le compteur a atteint sa valeur de comptage correspondant à la fin de la plage d'adresses, l'unité de traitement interdit toute nouvelle écriture dans la mémoire externe. Ainsi, si un tiers mal intentionné essaie de stocker dans la 30 mémoire en utilisant le processus de cryptage décrit ci-avant, plusieurs données successives à une même adresse, cela ne sera pas possible car deux données successives ne peuvent pas être écrites à la même adresse comme indiqué ci-avant. 9 Il sera donc plus difficile voire impossible pour le tiers malintentionné d'essayer d'obtenir la clé de cryptage par ce moyen. On se réfère maintenant à la figure 4 pour décrire un procédé d'exécution du code programme stocké dans la mémoire externe 11. 5 Plus précisément, pour une donnée de code cryptée MCCi stockée à l'adresse ADRi dans la mémoire 11, les moyens de lecture extraient cette donnée dans l'étape S40. Par ailleurs, les premiers moyens d'encryptage 103 encryptent l'adresse ADRi avec la clé de cryptage RD extraite dans l'étape S41 de 10 la mémoire protégée 109. On obtient alors l'adresse cryptée ADRCi qui est utilisée par les moyens de décryptage 104 pour effectuer un décryptage S43 de la donnée de code cryptée MCCi de façon à délivrer la donnée de code en clair MCi. 15 Cette donnée de code est alors délivrée (étape S44) par les deuxièmes moyens de cryptage/décryptage 104 directement au registre d'instruction 1000 de l'unité de traitement. Comme illustré sur la figure 5, les deuxièmes moyens de cryptage/décryptage 104 peuvent comporter un opérateur OU 20 EXCLUSIF 1040 recevant en entrée les bits de chaque donnée de code MCi (ou de chaque donnée de code cryptée MCCi) et les bits de l'adresse cryptée correspondante ADRCi pour délivrer le mot de code crypté MCCi (ou le mot de code en clair MCi). En variante, il serait possible, comme illustré sur la figure 6, 25 que les deuxièmes moyens de cryptage/décryptage 104 comportent des moyens de brouillage (« scrambling ») 1041 configurés pour modifier les entrées de l'opérateur REVENDICATIONS1. Procédé d'écriture d'un ensemble d'informations destinées à être traitées par une unité de traitement d'un circuit intégré, dans une mémoire externe (11) au circuit intégré (10), comprenant avant de débuter le processus d'écriture de l'ensemble d'informations, une génération (S20) au sein du circuit intégré d'une clé de cryptage (RD), et au cours dudit processus d'écriture, pour chaque information (MCi) destinée à être écrite à une adresse (ADRi) de la mémoire, un premier encryptage (S21) de ladite adresse au sein du circuit intégré par des premiers moyens de cryptage/décryptage utilisant ladite clé de façon à obtenir une adresse cryptée (ADRCi), un deuxième encryptage (S22) de ladite information au sein du circuit intégré avec des deuxièmes moyens de cryptage/décryptage utilisant ladite adresse cryptée, et une écriture (S23) de l'information cryptée (MCCi) à ladite adresse, la mémoire ne pouvant pas être écrite deux fois à la même adresse au cours du processus d'écriture. 2. Procédé selon la revendication 1, dans lequel lors du processus d'écriture on écrit la première information à une adresse initiale et on incrémente (S30) l'adresse (ADRi) après chaque écriture d'une information. 3. Procédé selon l'une des revendications précédentes, dans lequel l'ensemble d'informations est destiné à être écrit dans à une plage d'adresses de la mémoire, et lorsque toutes les adresses de ladite plage ont été utilisées lors du processus d'écriture, on interdit (S25) toute nouvelle opération d'écriture dans la mémoire avec la clé de cryptage qui vient d'être utilisée. 4. Procédé selon l'une des revendications précédentes, dans lequel la génération (S20) de ladite clé de cryptage est aléatoire. 5. Procédé selon l'une des revendications précédentes, dans lequel on génère une nouvelle clé de cryptage avant chaque nouveau processus d'écriture. 11 6. Procédé selon l'une des revendications précédentes, dans lequel l'unité de traitement (100) est un microcontrôleur. 7. Procédé selon l'une des revendications précédentes, dans lequel l'ensemble d'informations comprend un code programme 5 destiné à être exécuté par l'unité de traitement. 8. Procédé selon l'une des revendications précédentes, comprenant en outre un stockage (S27) de la clé de cryptage dans un moyen de stockage (109) interne au circuit intégré. 9. Procédé de traitement d'un ensemble d'informations par 10 une unité de traitement d'un circuit intégré, ledit ensemble d'informations ayant été écrit dans une mémoire externe au circuit intégré selon le procédé selon la revendication 8, le procédé d'exécution comprenant pour chaque information (MCCi) stockée à une adresse de la mémoire externe et destinée à être chargée dans 15 l'unité de traitement, un premier encryptage (S42) de ladite adresse (ADRi) au sein du circuit intégré par les premiers moyens de cryptage/décryptage utilisant ladite clé de façon à obtenir une adresse cryptée (ADRCi), une lecture (S40) de l'information cryptée (MCCi) stockée dans la mémoire externe à ladite adresse, un décryptage (S43) 20 de ladite information cryptée au sein du circuit intégré avec les deuxièmes moyens de cryptage/décryptage utilisant ladite adresse cryptée, et un chargement (S44) de l'information décryptée dans un registre de l'unité de traitement. 10. Procédé selon la revendication 9, dans lequel ledit 25 ensemble d'informations comprend un code programme comportant des données de code, le traitement dudit ensemble d'informations comprend une exécution du code programme par l'unité de traitement, et chaque donnée de code décryptée étant chargée dans un registre d'instructions de l'unité de traitement. 30 11. Dispositif comprenant un circuit intégré (10) comportant une unité de traitement (100) et une mémoire (11) externe au circuit intégré, le circuit intégré comprenant une entrée d'information (107) pour recevoir un ensemble d'informations destiné à être écrit dans la mémoire externe en vue de son traitement ultérieur par l'unité de 12 traitement, des moyens de génération (101) configurés pour générer une clé de cryptage, des moyens d'adressage (102) configurés pour générer une adresse de la mémoire pour chaque information destinée à être écrite dans la mémoire et pour ne pas générer deux fois la même 5 adresse au cours du processus d'écriture de l'ensemble d'informations, des premiers moyens de cryptage/décryptage (103) configurés pour effectuer un premier encryptage de ladite adresse utilisant ladite clé de façon à obtenir une adresse cryptée, des deuxièmes moyens de cryptage/décryptage (104) configurés pour effectuer un deuxième 10 encryptage de ladite information utilisant ladite adresse cryptée, et des moyens d'écriture (105) configurés pour écrire l'information cryptée à ladite adresse. 12. Dispositif selon la revendication 11, dans lequel lors du processus d'écriture les moyens d'adressage (102) sont configurés 15 pour générer une adresse initiale et pour incrémenter l'adresse après chaque écriture d'une information. 13. Dispositif selon la revendication 11 ou 12, dans lequel les moyens d'adressage (102) sont configurés pour écrire l'ensemble d'informations à une plage d'adresses de la mémoire, et pour interdire 20 tout nouvel adressage lorsque toutes les adresses de ladite plage ont été utilisées lors du processus d'écriture. 14. Dispositif selon l'une des revendications 11 à 13, dans lequel les moyens de génération (101) sont configurés pour générer ladite clé de cryptage de façon aléatoire. 25 15. Dispositif selon l'une des revendications 11 à 14, dans lequel les moyens de génération (101) sont configurés pour générer une nouvelle clé de cryptage avant chaque nouveau processus d' écriture. 16. Dispositif selon l'une des revendications 11 à 15, dans 30 lequel les deuxièmes moyens de cryptage/décryptage (104) comportent un opérateur OU EXCLUSIF (1040). 17. Dispositif selon la revendication 16, dans lequel les deuxièmes moyens de cryptage/décryptage (104) comportent des 13 moyens de brouillage (1041) configurés pour modifier les entrées de l'opérateur OU EXCLUSIF (1040) selon un code de brouillage (CDS). 18. Dispositif selon l'une des revendications 11 à 17, dans lequel l'unité de traitement (100) est un microcontrôleur. 5 19. Dispositif selon l'une des revendications 9 à 18, dans lequel l'ensemble d'informations comprend un code programme comportant des données de code et destiné à être exécuté par l'unité de traitement. 20. Dispositif selon l'une des revendications 9 à 19, 10 comprenant en outre un moyen de stockage (109) interne au circuit intégré configuré pour stocker la clé de cryptage. 21. Dispositif selon la revendication 20, dans lequel, lorsque la mémoire externe contient des informations cryptées, les premiers moyens de cryptage/décryptage (103) sont configurés pour extraire la 15 clé de cryptage du moyen de stockage interne et pour crypter avec ladite clé de cryptage, chaque adresse à laquelle doit être lue une information, le circuit intégré comprenant des moyens de lecture configurés pour lire dans la mémoire externe à ladite adresse, l'information cryptée, et les deuxièmes moyens de cryptage/décryptage 20 (104) sont configurés pour décrypter l'information cryptée lue avec ladite adresse cryptée, et pour délivrer la donnée de code décryptée dans un registre (1000) de l'unité de traitement.