Brevet FR3121766A1 — publié le 20221014

Procédé de stockage en mémoire La présente description concerne un procédé de stockage sécurisé, dans une mémoire non volatile, d'une première donnée (Key1) chiffrée en utilisant une deuxième donnée (pwd1), comprenant les étapes suivantes : - choisir (402) un pointeur (P1) visant vers une première adresse (AddP1) d'une cellule mémoire d'une première partie (A) de ladite mémoire non volatile (200) ; - chiffrer (403) ledit pointeur (P1) en utilisant ladite deuxième donnée (pwd1) ; et - stocker ledit pointeur (P1) chiffré dans ladite mémoire non volatile. Figure pour l'abrégé : Fig. 4 Procédé de stockage en mémoire La présente description concerne de façon générale les circuits et dispositifs électroniques et plus particulièrement la protection des données stockées par ces circuits et dispositifs. La présente description s'applique plus particulièrement à la protection de données stockées dans une mémoire non volatile. La présente description concerne des procédés de stockage de données dans une mémoire non volatile et des procédés de lecture associés. Il existe de nombreuses techniques permettant de protéger des données stockées par des dispositifs électroniques. Les techniques cryptographiques, comme le chiffrement de données, sont tout particulièrement utilisées à cet effet. Le chiffrement de données est une opération par laquelle des données utilisables et lisibles sont transformées, à l'aide d'un code, en des données qui ne peuvent être lues que par des personnes ou machines connaissant le code. Ce code utilise, généralement, une clé de chiffrement et/ou de déchiffrement. Il serait souhaitable de pouvoir améliorer au moins en partie certains aspects des techniques de stockage en mémoire non volatile connues. Il existe un besoin pour des procédés de stockage de données en mémoire non volatile plus sécurisés. Il existe un besoin pour des procédés de lecture de données en mémoire non volatile plus sécurisés. Il existe un besoin pour des procédés de lecture de données en mémoire non volatile plus résistants face aux injections de fautes et/ou aux attaques par sonde. Il existe un besoin pour des procédés de lecture utilisant des mots de passe et/ou des clés d'accès plus sécurisés. Un mode de réalisation pallie tout ou partie des inconvénients des procédés de stockage de données en mémoire non volatile connus. Un mode de réalisation pallie tout ou partie des inconvénients des procédés de lecture de données en mémoire non volatile connus. Un mode de réalisation prévoit un procédé de stockage sécurisé, dans une mémoire non volatile, d'une première donnée chiffrée en utilisant une deuxième donnée, comprenant les étapes suivantes : - choisir un pointeur visant vers une première adresse d'une cellule mémoire d'une première partie de ladite mémoire non volatile ; - chiffrer ledit pointeur en utilisant ladite deuxième donnée ; et - stocker ledit pointeur chiffré dans ladite mémoire non volatile. Selon un mode de réalisation, ledit pointeur est choisi aléatoirement. Selon un mode de réalisation, ledit pointeur est choisi parmi un groupe prédéfini de pointeurs visant des adresses de cellules mémoire de ladite première partie de ladite mémoire non volatile. Selon un mode de réalisation, ladite première donnée chiffrée est stockée à ladite première adresse pointée par ledit pointeur. Selon un mode de réalisation, ladite première donnée est chiffrée en utilisant, en outre, une troisième donnée stockée à ladite première adresse pointée par ledit pointeur. Selon un mode de réalisation, ladite première donnée est stockée dans une cellule mémoire, ayant une deuxième adresse, n'appartenant pas à la première partie de ladite mémoire non volatile. Selon un mode de réalisation, ladite première partie est une partie non réinscriptible de la mémoire non volatile. Un autre mode de réalisation prévoit un procédé de lecture d'une première donnée chiffrée et stockée de façon sécurisée dans une mémoire non volatile, comprenant les étapes suivantes : - envoyer une deuxième donnée ; - déchiffrer un pointeur avec ladite deuxième donnée ; - vérifier que le pointeur pointe vers une adresse d'une première partie de ladite mémoire non volatile ; et - déchiffrer la première donnée en utilisant la deuxième donnée. Selon un mode de réalisation, la première donnée chiffrée est lue à ladite première adresse pointée par le pointeur. Selon un mode de réalisation, la première donnée est déchiffrée en utilisant, en outre, une troisième donnée stockée à ladite première adresse pointée par le pointeur. Selon un mode de réalisation, la première donnée chiffrée est stockée dans une cellule mémoire, ayant une deuxième adresse, n'appartenant pas à la première partie de ladite mémoire non volatile. Selon un mode de réalisation, ladite première partie est une partie non réinscriptible de la mémoire non volatile. Encore un autre mode de réalisation prévoit un système électronique adapté à mettre en oeuvre le procédé de stockage décrit précédemment. Encore un autre mode de réalisation prévoit un système électronique adapté à mettre en oeuvre le procédé de lecture décrit précédemment. Encore un autre mode de réalisation prévoit un système électronique adapté à mettre en oeuvre le procédé de stockage décrit précédemment et à mettre en oeuvre le procédé de lecture décrit précédemment. Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : la représente, très schématiquement et sous forme de blocs, un dispositif électronique auquel s'applique les modes de réalisation décrits ; la représente, très schématiquement, une mémoire non volatile ; la représente, très schématiquement et sous forme de blocs, un procédé de stockage sécurisé d'une donnée dans une mémoire non volatile ; la représente, très schématiquement et sous forme de blocs, un mode de mise en oeuvre d'un procédé de stockage sécurisé d'une donnée dans une mémoire non volatile, et le mode de mise en oeuvre du procédé de lecture associé de ladite donnée ; la représente, très schématiquement et sous forme de blocs, un autre mode de mise en oeuvre d'un procédé de stockage sécurisé d'une donnée dans une mémoire non volatile, et le mode de mise en oeuvre du procédé de lecture associé de ladite donnée ; la représente, très schématiquement et sous forme de blocs, un autre mode de mise en oeuvre d'un procédé de stockage sécurisé d'une donnée dans une mémoire non volatile ; et la représente, très schématiquement et sous forme de blocs, un mode de mise en oeuvre du procédé de lecture associé au mode de mise en oeuvre du procédé de stockage de la . De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation décrits ont été représentés et sont détaillés. En particulier, les techniques de chiffrement utilisées ne seront pas décrites, la personne du métier étant apte à choisir les techniques de chiffrement adaptées aux modes de réalisation présentés dans la description. Sauf précision contraire, lorsque l'on fait référence à deux éléments connectés entre eux, cela signifie directement connectés sans éléments intermédiaires autres que des conducteurs, et lorsque l'on fait référence à deux éléments reliés (en anglais "coupled") entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés par l'intermédiaire d'un ou plusieurs autres éléments. Dans la description qui suit, lorsque l'on fait référence à des qualificatifs de position absolue, tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc., ou relative, tels que les termes "dessus", "dessous", "supérieur", "inférieur", etc., ou à des qualificatifs d'orientation, tels que les termes "horizontal", "vertical", etc., il est fait référence sauf précision contraire à l'orientation des figures. Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement", et "de l'ordre de" signifient à 10 % près, de préférence à 5 % près. La représente, très schématiquement et sous forme de blocs, un exemple d'architecture d'un système électronique 100. Le système électronique 100 comprend un processeur 101 (CPU) adapté à mettre en oeuvre différents traitements de données stockées dans des mémoires et/ou fournies par d'autres circuits du système 100. Le système électronique 100 comprend, en outre, différents types de mémoires, parmi lesquelles une mémoire non volatile 102 (NVM), par exemple une mémoire volatile 103 (RAM), et, par exemple, une mémoire morte 104 (ROM). Chaque mémoire est adaptée à stocker différents types de données. Le système électronique 100 comprend, en outre, différents circuits 105 (FCT) adaptés à mettre en oeuvre différentes fonctions. A titre d'exemple, les circuits 105 peuvent comprendre des circuits de mesures, des circuits de conversion de données, des circuits de chiffrement, etc. Le système électronique 100 peut comprendre, en outre, des circuits d'interface 106 (I0/OUT) adaptés à envoyer et/ou à recevoir des données provenant de l'extérieur du système 100. Les circuits d'interface 106 peuvent être, en outre, adaptés à mettre en oeuvre un affichage de données, par exemple, un écran d'affichage. Le système électronique 100 comprend, en outre, un ou plusieurs bus de données 107 adaptés à transférer des données entre ses différents composants. Plus particulièrement, le bus 107 permet de transférer des données entre les différentes mémoires 102 à 104, le processeur 101, les circuits 105 et les circuits d'interface 106. La représente, schématiquement et sous forme de blocs, un exemple d'une mémoire non volatile 200 (NVM) pouvant être utilisée dans un système électronique du type du système 100 décrit en relation avec la . La mémoire non volatile 200 comprend des cellules mémoire, généralement disposées en lignes et en colonnes. Chaque cellule mémoire est adaptée à stocker une donnée, par exemple un mot binaire. De plus, chaque cellule mémoire est caractérisée par son adresse. L'adresse d'une cellule mémoire indique le placement de la cellule mémoire dans la mémoire, et correspond, généralement, au numéro de ligne et de colonne de la cellule mémoire. Dans la suite de la description, lorsqu'on parle d'une donnée stockée à une adresse Add dans la mémoire, cela signifie que la donnée est stockée dans une cellule mémoire d'adresse Add. De plus, lorsque l'on parle d'un pointeur, on désigne une donnée stockant l'adresse d'une cellule mémoire dans laquelle peut être stockée une donnée. La mémoire non volatile 200 peut être divisée en plusieurs parties. Différentes parties de la mémoire peuvent être dédiées au stockage de données de différents types, par exemple des données provenant de différents dispositifs ou circuits électroniques. De plus, une partie de la mémoire 200 peut être réinscriptible ou non réinscriptible. Selon un mode de réalisation, la mémoire 200 comprend au moins une partie A comprenant N cellules mémoire. En , les cellules mémoire sont notées A[0], A[1],…, A[k],…, A[N-1] La mémoire non volatile 200 es utilisée ici pour stocker des données secrètes. Les modes de mise en oeuvre décrits en relation avec les figures 3 à 7 s'appliquent tous à une mémoire du type de la mémoire 200. La comprend deux schémas-bloc (A) et (B) illustrant, respectivement, un exemple de procédé de stockage d'une donnée secrète Key0 dans la mémoire 200 de la , et un exemple de procédé de lecture correspondant ou associé de la donnée secrète Key0. Le procédé de stockage du schéma-bloc (A), ou procédé de stockage (A), a pour but de chiffrer la donnée secrète Key0, puis de la stocker à une adresse AddK0 dans la mémoire 200. Le déroulement du procédé de stockage (A) est le suivant. A une étape 301 ("Encrypt Key0"), la donnée secrète Key0 est chiffrée en utilisant une fonction de chiffrement e prenant en entrée au moins la donnée secrète Key0, et une donnée pwd0. La donnée pwd0 est la clé de chiffrement de la donnée Key0. On note alors la donnée Key0 chiffrée : e[pwd0](Key0). Selon un exemple, la fonction de chiffrement e est une fonction de chiffrement symétrique. A une étape 302 ("Store Key0"), consécutive à l'étape 301, la donnée secrète chiffrée e[pwd0](Key0) est stockée à l'adresse AddK0 dans la mémoire 200. A une étape 303 ("Encrypt pwd0"), consécutive à l'étape 302, la donnée pwd0 est chiffrée en utilisant une fonction H prenant en entrée seulement la donnée pwd0. Le résultat du chiffrement de la donnée pwd0 par la fonction H est une donnée chiffrée notée H(pwd0). La fonction H est, par exemple, une fonction non inversible. Selon un exemple, la fonction H est une fonction de hachage ou une fonction de signature. A une étape 304 ("Store pwd0"), consécutive à l'étape 303, la donnée chiffrée H(pwd0) est stockée à une adresse AddP0 dans la mémoire 200. Le procédé de lecture du schéma-bloc (B), ou procédé de lecture (B), a pour but rendre accessible à un élément la donnée secrète en envoyant seulement la donnée pwd0. L'élément peut être un dispositif électronique comme, par exemple, un processeur. Le déroulement du procédé de lecture (B) est le suivant. A une étape 351 ("Hash pwd"), l'élément voulant avoir accès à la donnée secrète Key0 envoie une donnée pwd. La donnée pwd est ensuite chiffrée en utilisant la fonction H, le résultat de ce chiffrement est noté H(pwd). A une étape 352 ("Compare"), consécutive à l'étape 351, la donnée chiffrée H(pwd) est comparée à la donnée chiffrée H(pwd0) stockée à l'adresse AddP0. Si les données H(pwd) et H(pwd0) sont différentes (sortie "different") alors l'étape suivante est une étape 353 ("Abort"), sinon (sortie "same") alors l'étape suivante est une étape 354 ("Decrypt Key0"). A l'étape 353, consécutive à l'étape 352, l'élément voulant avoir accès à la donnée secrète Key0 n'a pas envoyé la bonne donnée pwd, le procédé de lecture s'arrête là, la donnée Key0 n'est ni déchiffrée ni retournée à l'élément. A l'étape 354, consécutive à l'étape 352, l'élément voulant avoir accès à la donnée secrète Key0 a envoyé la bonne donnée pwd, la donnée chiffrée e[pwd0](Key0) est déchiffrée en utilisant la donnée pwd égale à la donnée pwd0. A une étape 355 ("Return Key0"), consécutive à l'étape 354, la donnée Key0 déchiffrée est envoyée à l'élément. Un inconvénient de cet exemple, est que le procédé de lecture décrit ici est sensible aux attaques dites d'injection de fautes et aux attaques par sonde. En effet, dans cet exemple, l'adresse AddK0 à laquelle est stockée la donnée chiffrée e[pwd0](Key0) est accessible, il suffit de sauter l'étape 352, par exemple en injectant une faute, pour avoir accès à la donnée chiffrée e[pwd0](Key0). La comprend deux schémas-bloc (A) et (B) illustrant, respectivement, un mode de mise en oeuvre d'un procédé de stockage d'une donnée secrète Key1 dans la mémoire 200 de la , et un mode de mise en oeuvre d'un procédé de lecture associé de la donnée secrète Key1. Le procédé de stockage du schéma-bloc (A), ou procédé de stockage (A), a pour but de chiffrer la donnée secrète Key1, puis de la stocker à une adresse secrète AddP1 d'une cellule mémoire de la partie A de la mémoire 200. Le déroulement du procédé de stockage (A) est le suivant. A une étape 401 ("Encrypt Key1"), la donnée secrète Key1 est chiffrée en utilisant une fonction de chiffrement E prenant en entrée au moins la donnée secrète Key1, et une donnée pwd1. La donnée pwd1 est la clé de chiffrement de la donnée Key1. On note alors la donnée Key1 chiffrée : E[pwd1](Key1). Comme la fonction de chiffrement e décrite en relation avec la , la fonction E est une fonction de chiffrement symétrique, par exemple une fonction de chiffrement par bloc comme l'AES (Advanced Encryption Standard, pour Standart de chiffrement avancé). A une étape 402 ("Pick Random P1 Store Key1"), consécutive à l'étape 401, l'adresse AddP1 est choisie de façon aléatoire dans la partie A de la mémoire 200, et un pointeur P1 vers l'adresse AddP1 est généré. Autrement dit, un pointeur P1 est choisi. De plus, à l'étape 402, la donnée secrète chiffrée E[pwd1](Key1) est stockée à l'adresse AddP1 visée par le pointeur P1. A une étape 403 ("Encrypt P1"), consécutive à l'étape 402, le pointeur P1 est chiffré en utilisant la même fonction E utilisée pour le chiffrement de la donnée secrète Key1. De plus, le pointeur P1 est chiffré en utilisant la même donnée pwd1 comme clé de chiffrement. Le résultat du chiffrement du pointeur P1 par la fonction E est une donnée chiffrée notée E[pwd1](P1). A une étape 404 ("Store P1"), consécutive à l'étape 403, la donnée chiffrée E[pwd1](P1) est stockée à une adresse Add1 dans la mémoire 200, de préférence la cellule mémoire d'adresse Add1 n'est pas comprise dans la partie A de la mémoire 200. Le procédé de lecture du schéma-bloc (B), ou procédé de lecture (B), a pour but rendre accessible à un élément la donnée secrète Key1 en envoyant seulement la donnée pwd1. Comme précédemment, L'élément peut être un dispositif électronique comme, par exemple, un processeur. Le déroulement du procédé de lecture (B) est le suivant. A une étape 451 ("Send pwd Get p"), comme dans le procédé de lecture de la , l'élément voulant avoir accès à la donnée secrète Key1 envoie la donnée pwd. De plus, à l'étape 451, la donnée chiffrée E[pwd1](P1) stockée à l'adresse Add1 est déchiffrée en utilisant la donnée pwd comme clé de déchiffrement. On obtient alors un pointeur p. A une étape 452 ("p in A"), consécutive à l'étape 451, on vérifie si le pointeur p vise une adresse appartenant à la partie A de la mémoire 200. Si le pointeur p vise une adresse étant en dehors de la partie A (sortie "N"), l'étape suivante est une étape 453 ("Abort"), sinon (sortie "Y"), l'étape suivante est une étape 454 ("Decrypt Key1"). A l'étape 453, consécutive à l'étape 452, l'élément voulant avoir accès à la donnée secrète Key1 n'a pas envoyé la bonne donnée pwd, ainsi le pointeur p ne vise pas une adresse de la partie A de la mémoire 200. Le procédé de lecture s'arrête là, la donnée Key1 n'est ni déchiffrée ni retournée à l'élément. A l'étape 454, consécutive à l'étape 452, le pointeur p vise une adresse de la partie A, on considère alors que le pointeur p vise la même adresse AddP1 que le pointeur P1. La donnée A[AddP1] stockée à l'adresse AddP1, c'est-à-dire la donnée E[pwd1](Key1) est déchiffrée en utilisant la donnée pwd comme clé de déchiffrement. A une étape 455 ("Return Key1"), consécutive à l'étape 454, l'élément reçoit la donnée Key1 déchiffrée. Un avantage de ce mode de mise en oeuvre est que l'adresse à laquelle la donnée secrète Key1 est tenue secrète, et doit être déchiffrée pour donner accès à la donnée chiffrée E[pwd1](Key1). Ainsi, tant que l’élément voulant avoir accès à la donnée secrète Key1 n’a pas envoyé la bonne donnée pwp1, aucun accès ne sera fait à la cellule mémoire contenant la donnée secrète voulue, et il ne sera pas possible de l’extraire ni par attaque par sonde ni par injection de faute. La comprend deux schémas-bloc (A) et (B) illustrant, respectivement, un mode de mise en oeuvre d'un procédé de stockage d'une donnée secrète Key2 dans la mémoire 200 de la , et un mode de mise en oeuvre d'un procédé de lecture associé de la donnée secrète Key2. Le procédé de stockage du schéma-bloc (A), ou procédé de stockage (A), a pour but de chiffrer la donnée secrète Key2 en utilisant une donnée stockée à une adresse secrète AddP2 d'une cellule mémoire de la partie A de la mémoire 200. Le déroulement du procédé de stockage (A) est le suivant. Selon un mode de réalisation, la partie A de la mémoire 200 est une partie non-réinscriptible. A une étape 501 ("Pick Random P2 Read A[P2]"), l'adresse AddP2 est choisie de façon aléatoire dans la partie A de la mémoire 200, et un pointeur P2 vers l'adresse AddP2 est généré. Autrement dit, un pointeur P2 est choisi. De plus, à l'étape 501, la donnée A[P2] stockée à l'adresse AddP2 visée par le pointeur P2 est lue. A une étape 502 ("Encrypt A[P2]"), successive à l'étape 501, la donnée A[P2] est chiffrée en utilisant la fonction de chiffrement E, décrite en relation avec la , et une donnée pwd2 comme clé de chiffrement. On note alors la donnée A[P2] chiffrée : E[pwd2](A[P2]). A une étape 503 ("Encrypt Key2"), successive à l'étape 502, la donnée secrète Key2 est chiffrée en utilisant une fonction de chiffrement F prenant en entrée au moins la donnée secrète Key2, et la donnée E[pwd2](A[P2]). La donnée E[pwd2](A[P2]) est la clé de chiffrement de la donnée Key2. On note alors la donnée Key2 chiffrée : F[E[pwd2](A[P2])](Key2). La fonction de chiffrement F est du même type que la fonction de chiffrement E décrite en relation avec la . Selon un exemple, la fonction de chiffrement F est une fonction OU EXCLUSIF. A une étape 504 ("Encrypt P2"), consécutive à l'étape 503, le pointeur P2 est chiffré en utilisant la même fonction E utilisée pour le chiffrement de la donnée A[P2]. De plus, le pointeur P2 est chiffré en utilisant la même donnée pwd2 comme clé de chiffrement. Le résultat du chiffrement du pointeur P2 par la fonction E est une donnée chiffrée notée E[pwd2](P2). A une étape 505 ("Store"), consécutive à l'étape 504, les données F[E[pwd2](A[P2])](Key2) et E[pwd2](P2), c'est-à-dire la donnée Key2 et le pointeur P2 chiffrés, sont stockés dans la mémoire 200. Selon un mode de réalisation, les données F[E[pwd2](A[P2])](Key2) et E[pwd2](P2) sont stockées dans la mémoire 200 mais hors de la partie A de la mémoire 200. Plus particulièrement, la donnée F[E[pwd2](A[P2])](Key2) est stockée à une adresse AddK2, et la donnée E[pwd2](P2) est stockée à une adresse Add2. Le procédé de lecture du schéma-bloc (B), ou procédé de lecture (B), a pour but rendre accessible à un élément la donnée secrète en envoyant seulement la donnée pwd2. Comme précédemment, l'élément peut être un dispositif électronique comme, par exemple, un processeur. Le déroulement du procédé de lecture (B) est le suivant. A une étape 551 ("Send pwd Get p"), comme dans le procédé de lecture de la , l'élément voulant avoir accès à la donnée secrète Key2 envoie une donnée pwd. De plus, à l'étape 551, la donnée chiffrée E[pwd2](P2) stockée à l'adresse Add2 est déchiffrée en utilisant la donnée pwd comme clé de déchiffrement. Comme en , on obtient alors un pointeur p. A une étape 552 ("p in A"), consécutive à l'étape 551, on vérifie si le pointeur p vise une adresse appartenant à la partie A de la mémoire 200. Si le pointeur p vise une adresse étant en dehors de la partie A (sortie "N"), l'étape suivante est une étape 553 ("Abort"), sinon (sortie "Y"), l'étape suivante est une étape 554 ("Read A[p] Decrypt Key2"). A l'étape 553, consécutive à l'étape 552, l'élément voulant avoir accès à la donnée secrète Key2 n'a pas envoyé la bonne donnée pwd, ainsi le pointeur p ne vise pas une adresse de la partie A de la mémoire 200. Le procédé de lecture s'arrête là, la donnée Key2 n'est ni déchiffrée ni retournée à l'élément. A l'étape 554, consécutive à l'étape 552, le pointeur p vise une adresse de la partie A, on considère alors que le pointeur p vise la même adresse AddP2 que le pointeur P2. La donnée stockée à l'adresse AddK2, c'est-à-dire la donnée F[E[pwd](A[P2])](Key2) est déchiffrée en utilisant comme clé de déchiffrement la donnée E[pwd](A[P2]), c’est-à-dire la donnée A[P2] lue à l’adresse AddP2 et chiffrée par la donnée pwd. A une étape 555 ("Return Key2"), consécutive à l'étape 554, l'élément reçoit la donnée Key2 déchiffrée. Un avantage de ce mode de mise en oeuvre est que la donnée secrète Key2 est chiffrée en utilisant non pas la seule donnée pwd, mais aussi la donnée A[P2] choisie au hasard dans la partie A de la mémoire 200. Si le pointeur P2 est mal déchiffré alors la donnée secrète Key2 ne peut pas être déchiffrée. Un autre avantage est que, dans certaines mises en oeuvre qui utilisent une grande mémoire non-réinscriptible, cela permet d’augmenter la taille de la zone A, et rendre plus difficile l’extraction de la donnée sensible A[P2]. Selon une variante de réalisation, le pointeur P2 peut être choisi parmi un groupe prédéfini de pointeurs visant des adresses de la partie A de la mémoire 200. Cette liste prédéfinie de pointeurs peut être utilisée pour stocker des données constantes qui ne sont utilisés que pour le procédé de stockage décrit ici. En effet, en choisissant une adresse AddP2 de façon aléatoire, il est possible que la donnée A[P2] stockée à cette adresse soit une donnée régulièrement utilisée qui pourrait "attirer l'attention" d'un utilisateur essayant de retrouver la donnée secrète Key2. Les figures 6 et 7 représentent des schémas-bloc 600 et 650 illustrant, respectivement, un mode de mise en oeuvre d'un procédé de stockage d'une donnée secrète Key3 dans la mémoire 200 de la , et un mode de mise en oeuvre d'un procédé de lecture associé de la donnée secrète Key3. En , le procédé de stockage du schéma-bloc 600, ou procédé de stockage 600, a pour but de stocker la donnée secrète Key3 à une adresse secrète AddP3(0) d'une cellule mémoire de la partie A de la mémoire 200 à laquelle on associe un pointeur P3(0). De plus, le procédé de stockage utilise une chaine comprenant I adresses AddP3(0), …, AddP3(I-1) de cellules mémoire de la partie A de la mémoire 200 pour stocker la donnée secrète Key3. I est un entier naturel supérieur ou égal à deux et inférieur à N le nombre de cellules mémoire de la partie A de la mémoire 200. On associe une chaine de I pointeurs P3(0), …, P3(I-1) à la chaine de I adresses AddP3(0), …, AddP3(I-1). Le déroulement du procédé de stockage 600 est le suivant. A une étape 601 ("Encrypt Key3"), la donnée secrète Key3 est chiffrée en utilisant la fonction de chiffrement E, décrite en relation avec la , prenant en entrée au moins la donnée secrète Key3, et une donnée pwd3. La donnée pwd3 est la clé de chiffrement de la donnée Key3. On note alors la donnée Key3 chiffrée : E[pwd3](Key3). A une étape 602 ("Pick P3(0)"), consécutive à l'étape 601, la première adresse AddP3(0) de la chaine d'adresses est choisie aléatoirement dans la partie A de la mémoire 200. Un pointeur P3(0) visant l'adresse AddP3(0) est généré. Autrement dit, un pointeur P3(0) est choisi. Selon une variante, la première adresse AddP3(0) peut être choisie parmi une liste prédéfinie d'adresses de la partie A. A une étape 603 ("Store Key3"), consécutive à l'étape 602, la donnée secrète chiffrée E[pwd3](Key3) est stockée à l'adresse AddP3(0). A une étape 604 ("i=1"), consécutive à l'étape 603, une donnée i de comptage interne est initialisée à un, i étant un entier naturel. A une étape 605 ("Encrypt P3(i-1)"), le pointeur P3(i-1) d'indice égal à i-1 est chiffré en utilisant la fonction de chiffrement E et en utilisant la donnée pwd3 comme clé de chiffrement. On note alors le pointeur P3(i-1) chiffré : E[pwd3](P3(i-1)). Lorsque l'étape 605 est directement consécutive à l'étape 604, le pointeur P3(i-1) est le pointeur P3(0). A une étape 606 ("Pick P3(i)"), consécutive à l'étape 605, une adresse AddP3(i) d'indice égal à i de la chaine d'adresses est choisie aléatoirement dans la partie A de la mémoire 200. Un pointeur P3(i) d'indice égal à i visant l'adresse AddP3(i) est généré. Autrement dit, un pointeur P3(i) est choisi. Il est à noter que, le pointeur P3(I-1) est une valeur connue par le procédé de lecture décrit en relation avec la , notamment une valeur fixe indépendante de la donnée pwd. Comme précédemment, selon une variante, l'adresse AddP3(i) peut être choisie parmi une liste prédéfinie d'adresses de la partie A. Autrement dit, les adresses AddP3(0) à AddP3(I-1) ne sont pas nécessairement consécutives. A une étape 607 ("Store P3(i-1)"), consécutive à l'étape 606, le pointeur chiffré E[pwd3](P3(i-1)) est stockée à l'adresse AddP3(i) visée par le pointeur P3(i). A une étape 608 ("i=I-1?"), consécutive à l'étape 607, la donnée i de comptage interne est comparée à la valeur I décrémentée de un, notée I-1. Si la donnée i est différente de la valeur I-1 (sortie "different"), l'étape suivante est une étape 609 ("i=i+1"), sinon (sortie "same"), l'étape suivante est une étape 610 ("STOP"). A l'étape 609, la donnée i de comptage interne est incrémentée de un, l'étape suivante est l'étape 605. A l'étape 610, toutes les adresses AddP3(0), …, AddP3(I-1) de la chaine d'adresses ont été utilisées, le procédé de stockage est terminé. En , le procédé de lecture du schéma-bloc 650, ou procédé de lecture 650, a pour but rendre accessible à un élément la donnée secrète en envoyant seulement la donnée pwd3. Comme précédemment, l'élément peut être un dispositif électronique comme, par exemple, un processeur. Le déroulement du procédé de lecture (B) est le suivant. A une étape 651 ("Send pwd"), comme dans les procédés de lecture des figures 4 et 5, l'élément voulant avoir accès à la donnée secrète Key3 envoie une donnée pwd. A une étape 652 ("i=I-1"), consécutive à l'étape 651, la donnée i de comptage interne est initialisée à la valeur I décrémentée de un, toujours notée I-1. A une étape 653 ("Decrypt P3(i), p in A"), la donnée chiffrée E[pwd3](P3(i-1)) stockée à l'adresse AddP3(i) est déchiffrée en utilisant la donnée pwd comme clé de déchiffrement. Comme en , on obtient alors un pointeur p. Le pointeur P3(I-1) est connu du dispositif mettant en oeuvre le procédé de lecture 650. De plus, à l'étape 653, on vérifie si le pointeur p vise une adresse appartenant à la partie A de la mémoire 200. Si le pointeur p vise une adresse étant en dehors de la partie A (sortie "N"), l'étape suivante est une étape 654 ("Abort"), sinon (sortie "Y"), l'étape suivante est une étape 655 ("i-1=0 ?"). A l'étape 654, consécutive à l'étape 653, l'élément voulant avoir accès à la donnée secrète Key3 n'a pas envoyé la bonne donnée pwd, ainsi le pointeur p ne vise pas une adresse de la partie A de la mémoire. Le procédé de lecture s'arrête là, la donnée Key3 n'est ni déchiffrée ni retournée à l'élément. A l'étape 655, consécutive à l'étape 653, le pointeur p vise une adresse de la partie A, on considère alors que le pointeur p vise la même adresse AddP3(i) que le pointeur P3(i). Le procédé de lecture peut continuer. La donnée i de comptage interne décrémentée de 1, notée i-1, est comparée à la valeur nulle (zéro). Si la donnée i-1 est différente de la valeur nulle (sortie "different"), l'étape suivante est une étape 656 ("i=i-1"), sinon (sortie "same"), l'étape suivante est une étape 657 ("Decrypt Key3"). A l'étape 656, la donnée i de comptage interne est décrémentée de un, l'étape suivante est l'étape 653. A l'étape 657, toutes les données stockées aux adresses AddP3(1), …, AddP3(I-1) de la chaine d'adresses ont été déchiffrées, il ne reste plus qu'à déchiffrer la donnée secrète Key3. La donnée i de comptage interne est décrémentée de un pour être égal à zéro. Le pointeur P3(0) est le dernier pointeur déchiffré, il vise l'adresse AddP3(0) à laquelle la donnée chiffrée E[pwd3](Key3) est stockée. La donnée E[pwd3](Key3) est déchiffrée en utilisant la donnée pwd comme clé de déchiffrement. La donnée pwd ayant été utilisée pour déchiffrer les pointeurs P3(0), …, P3(I-1) successifs, on considère que la donnée pwd est égale à la donnée pwd3. A une étape 658 ("Return Key3"), consécutive à l'étape 657, l'élément reçoit la donnée Key3 déchiffrée. Un avantage du mode de mise en oeuvre décrit en relation avec les figures 6 et 7 est qu'il permet de complexifier le procédé de lecture, et donc de le rendre plus résistant face aux attaques. De plus, si, par erreur, un pointeur déchiffré avec la donnée pwd différente de la donnée pwd3 vise une adresse comprise dans la partie A de la mémoire 200, le procédé de lecture sera mis en défaut au déchiffrement du pointeur suivant. Divers modes de réalisation et variantes ont été décrits. La personne du métier comprendra que certaines caractéristiques de ces divers modes de réalisation et variantes pourraient être combinées, et d’autres variantes apparaîtront à la personne du métier. En particulier, l'utilisation d'une chaine de pointeur peut être adaptée au mode de mise en oeuvre décrit en relation avec la . Enfin, la mise en oeuvre pratique des modes de réalisation et variantes décrits est à la portée de la personne du métier à partir des indications fonctionnelles données ci-dessus. Procédé de stockage sécurisé, dans une mémoire non volatile (200), d'une première donnée (Key1 ; Key2 ; Key3) chiffrée en utilisant une deuxième donnée (pwd1 ; pwd2 ; pwd3), comprenant les étapes suivantes : - choisir (402 ; 501 ; 602) un pointeur (P1 ; P2 ; P3(0)) visant vers une première adresse (AddP1 ; AddP2 ; AddP3(0)) d'une cellule mémoire d'une première partie (A) de ladite mémoire non volatile (200) ; - chiffrer (403 ; 504 ; 605) ledit pointeur (P1 ; P2 ; P3(0)) en utilisant ladite deuxième donnée (pwd1 ; pwd2 ; pwd3) ; et - stocker ledit pointeur (P1 ; P2 ; P3(0)) chiffré dans ladite mémoire non volatile (200). Procédé selon la revendication 1, dans lequel ledit pointeur (P1 ; P2 ; P3(0)) est choisi aléatoirement. Procédé selon la revendication 1, dans lequel ledit pointeur (P1 ; P2 ; P3(0)) est choisi parmi un groupe prédéfini de pointeurs visant des adresses de cellules mémoire de ladite première partie (A) de ladite mémoire non volatile (200). Procédé selon l'une quelconque des revendications 1 à 3, dans lequel ladite première donnée (Key1 ; Key3) chiffrée est stockée à ladite première adresse (AddP1 ; AddP3(0)) pointée par ledit pointeur (P1 ; P3(0)). Procédé selon l'une quelconque des revendications 1 à 3, dans lequel ladite première donnée (Key2) est chiffrée en utilisant, en outre, une troisième donnée (A[P2]) stockée à ladite première adresse (AddP2) pointée par ledit pointeur (P2). Procédé selon la revendication 5, dans lequel ladite première donnée (Key2) est stockée dans une cellule mémoire, ayant une deuxième adresse (AddK2), et n'appartenant pas à la première partie (A) de ladite mémoire non volatile (200). Procédé selon la revendication 5 ou 6, dans lequel ladite première partie (A) est une partie non réinscriptible de la mémoire non volatile (200). Procédé de lecture d'une première donnée (Key1 ; Key2 ; Key3) chiffrée et stockée de façon sécurisée dans une mémoire non volatile (200), comprenant les étapes suivantes : - envoyer (451 ; 551 ; 651) une deuxième donnée (pwd) ; - déchiffrer (451 ; 551 ; 653) un pointeur (P1 ; P2 ; P3(0)) avec ladite deuxième donnée (pwd1 ; pwd2 ; pwd3) ; - vérifier (452 ; 552 ; 653) que le pointeur (P1 ; P2 ; P3(0)) pointe vers une première adresse (AddP1 ; AddP2 ; AddP3(0)) d'une première partie (A) de ladite mémoire non volatile (200) ; et - déchiffrer (454 ; 554 ; 657) la première donnée en utilisant la deuxième donnée (pwd1 ; pwd2 ; pwd3). Procédé selon la revendication 8, dans lequel la première donnée (Key1 ; Key3) chiffrée est lue à ladite première adresse (AddP1 ; AddP3(0)) pointée par le pointeur (P1 ; P3(0)). Procédé selon la revendication 8, dans lequel la première donnée (Key2) est déchiffrée en utilisant, en outre, une troisième donnée (A[P2]) stockée à ladite première adresse (AddP2) pointée par le pointeur (P2). Procédé selon la revendication 8 ou 10, dans lequel la première donnée (Key2) chiffrée est stockée dans une cellule mémoire, ayant une deuxième adresse (AddK2), et n'appartenant pas à la première partie (A) de ladite mémoire non volatile (200). Procédé selon l'une quelconque des revendications 8, 10 ou 11, dans lequel ladite première partie (A) est une partie non réinscriptible de la mémoire non volatile (200). Système électronique adapté à mettre en oeuvre le procédé de stockage selon l'une quelconque des revendications 1 à 7. Système électronique, adapté, à mettre en oeuvre le procédé de lecture selon l'une quelconque des revendications 8 à 12. Système électronique selon les revendications 13 et 14.