Brevet FR3129227A1 — publié le 20230519

L’invention concerne un système de gestion d’une mémoire cache (3) comportant : -un module de randomisation (5) configuré pour générer une valeur aléatoire (R) pour chaque processus d’accès à la mémoire cache (3), et pour transformer des adresses de la mémoire cache (3) au moyen de ladite valeur aléatoire en des adresses randomisées (Ar), -une table d’historique (7) configurée pour y stocker sur chaque ligne un couple d’identification associant une valeur aléatoire correspondant à un processus d’accès, à un identifiant dudit processus d’accès correspondant, formant ainsi, des couples d’identifications ayant pour fonction de partitionner dynamiquement la mémoire cache tout en répertoriant l’accès à ladite mémoire cache, et - une machine d’état (9) configurée pour gérer chaque processus d’accès à la mémoire cache en fonction desdits couples d’identifications stockés dans ladite table d’historique (7). Figure pour l'abrégé: Fig. 1 PROCÉDÉ ET SYSTÈME DE GESTION D’UNE MÉMOIRE CACHE La présente invention concerne de manière générale le domaine de gestion des mémoires caches et, plus particulièrement, la sécurisation des mémoires caches face à des attaques par canaux auxiliaires. Elle trouve application dans le domaine de tous les dispositifs électroniques comportant des mémoires caches. Etat de la technique antérieure Les mémoires caches sont très rapides mais présentent une faible capacité de stockage et servent à stocker des données temporaires. Une mémoire cache permet ainsi à un processeur d’exécuter un processus tout en réduisant son temps d’accès à des données initialement stockées dans une mémoire principale. Le terme ‘processus’ désigne aussi bien un programme ou logiciel exécuté par le processeur et susceptible de lire ou d’écrire dans la mémoire cache. Le processeur cherche toujours en premier à accéder à une donnée ou une instruction dans la mémoire cache. Si la donnée recherchée ne se trouve pas dans la mémoire cache, un défaut de cache (dit, cache miss) est déclenché pour que la donnée soit chargée depuis la mémoire principale, puis gardée dans la mémoire cache pour un futur accès. En cas de succès (dit, cache hit), la mémoire principale n’est pas accédée et par conséquent, le temps d’accès est beaucoup plus rapide. Ces variations des temps d’accès entre des caches miss et des caches hit inhérentes à ces mémoires ont été exploitées par des attaquants pour développer des attaques connues sous le terme d’ « attaques par canaux auxiliaires ». Ces attaques permettent de révéler des informations secrètes traitées par un processus exécuté ou de modifier le fonctionnement du processus pour contourner des mesures de sécurité. Les attaques par canaux auxiliaires visant la mémoire cache exploitent des fuites d’informations sur les adresses consultées à partir de divers éléments mesurables comme le temps d’accès à la mémoire ou les compteurs de performance (e.g., les nombres de caches hit et caches miss). Ces attaques micro-architecturales sont apparues très peu de temps après les attaques physiques sur les canaux auxiliaires. Elles peuvent être utilisées pour retrouver des informations secrètes, par exemple, la clé secrète utilisée par des algorithmes de chiffrement. Un moyen classique d’attaque par canaux auxiliaires de cache implique un processus victime et un processus attaquant. Elle se compose généralement des phases de ‘profiling’ et ‘d’exploitation’. Dans la phase de ‘profiling’, l’attaquant identifie des adresses dites cibles, qui sont des adresses dont les modèles d’accès peuvent divulguer des informations secrètes sur le programme de la victime. Ces adresses cibles peuvent être identifiées en analysant le programme de la victime manuellement ou avec des outils automatiques. Dans la phase d’exploitation, l’attaquant observe les accès de la victime aux adresses cibles et en déduit la valeur des informations secrètes. Actuellement, il existe un ensemble de techniques qui sont utilisées pour attaquer les mémoires caches. Ces attaques peuvent être classées en trois catégories. La première catégorie d’attaques est basée sur le temps, dite attaque temporelle. Dans une attaque temporelle l’attaquant mesure le temps d’exécution total de l’opération effectuée par le processus victime. La motivation de cette attaque est que le temps d’exécution varie en fonction des chemins d’exécutions parcourus ou des caches hit/miss, ce qui est souvent dû à des informations secrètes. Ces attaques temporelles nécessitent un grand nombre d’échantillons afin de réduire le bruit introduit par le système d’exploitation. Un exemple d’une attaque temporelle est l’attaque dite ‘Evict + Time’ où l’attaquant cherche à savoir si le temps d’exécution de la victime est plus long dans l’absence de certains ensembles (Sets) de la mémoire cache. L’attaquant monte l’attaque en trois étapes. La première étape consiste à déclencher le processus de la victime. La deuxième étape (dite, Evict) consiste à remplir un ensemble de cache spécifique avec de données de l’attaquant. La troisième étape (dite, Time) consiste à mesurer à nouveau le temps d’exécution de la victime. Après la première exécution, les données utilisées par la victime sont mises en mémoire cache. Si l’attaquant a évincé une ou plusieurs lignes de la mémoire cache, le temps d’exécution du processus victime sera plus lent. En revanche, si les lignes évincées ne sont pas utiles, la deuxième exécution sera plus rapide. Cette technique a permis d’extraire la clé complète utilisée par l’AES. La deuxième catégorie d’attaques est basée sur les accès. Dans ce genre d’attaques, l’attaquant surveille les motifs d’adresses accédés dans la mémoire cache pour déterminer si une instruction spécifique ou une donnée a été utilisée par le processus victime. Cette information est obtenue en mesurant le temps d’accès. Si la victime y a accédé, l’attaquant observera un cache hit, sinon, il observera un cache miss. Une attaque courant sur l’AES, basée sur l’accès, consiste à surveiller les entrées de la table de recherche lors de l’exécution de l’AES. Un exemple d’une attaque basée sur les accès est l’attaque dite ‘Prime + Probe’. L’attaquant remplit d’abord un ou plusieurs ensembles de mémoire cache avec ses propres données et détermine ensuite lesquels ont été remplacés après avoir exécuté le processus victime. En effet, l’attaque repose sur trois étapes. Lors de la première étape (dite, Prime), l’attaquant charge un ou plusieurs ensembles de la mémoire cache avec ses propres données. Lors de la deuxième étape, l’attaquant attend pendant un certain temps que le processus victime s’exécute et utilise la mémoire cache. Finalement, à la troisième étape (dite, Probe), l’attaquant mesure le temps d’accès aux mêmes données qui ont été chargées dans la mémoire cache pendant la première étape (Prime). Si l’attaquant mesure une latence plus importante en chargeant ses lignes de cache, cela veut dire que le processus victime a chargé des données correspondant aux mêmes lignes de cache utilisées par le processus attaquant. Au lieu de mesurer le temps d’exécution global comme dans l’attaque ‘Evict + Time’, ici l’attaquant ne mesure que sa propre durée d’exécution, ce qui est bien plus précis et rend donc l’attaque plus efficace. En revanche la correspondance entre les adresses virtuelles et physiques rend l’attaque compliquée surtout pour les mémoires cache indexées physiquement. La troisième catégorie d’attaques est basée sur les traces. Ces attaques sont beaucoup plus puissantes puisque l’attaquant exploite une ligne spécifique de la mémoire cache. Dans ce type d’attaque, le processus attaquant et le processus victime partagent une même zone mémoire. L’attaquant obtient les traces hit/miss relatives à une entrée partagée de la mémoire cache en utilisant une instruction de maintenance de la mémoire cache pour virer la ligne concernée (par exemple, l’instruction Clflush sur les architectures x86). L’information secrète est retrouvée en se basant sur la séquence de cache hit et de cache miss. Un exemple d’une attaque basée sur les traces est l’attaque dite ‘Flush + Reload’. Cette attaque vise à exploiter la différence de temps d’accès à une ligne en fonction de sa présence dans la mémoire cache ou non. La vulnérabilité exploitée par cette attaque est par exemple, l’absence de restriction pour l’instruction « Cflush » sur les architectures du processeur INTEL x86. Cela permet à un attaquant dans un cœur processeur concurrent au cœur processeur de la victime d’éliminer de la mémoire cache une ligne de mémoire. Cette faiblesse expose le dernier niveau L3 de la mémoire cache qui est partagé entre tous les cœurs du processeur. Cette attaque repose aussi sur trois étapes. A la première étape (dite Flush) une ou plusieurs données sont évincées d’une ou de plusieurs lignes de la mémoire cache en utilisant une instruction de maintenance. Lors de la deuxième étape, l’attaquant attend pendant un certain temps que le processus victime s’exécute et utilise la mémoire cache. Finalement, à la troisième étape (dite, Reload), l’attaquant recharge la ou les donnée(s) évincée(s) en mesurant le temps d’accès sachant qu’il aurait préalablement prédéfini un seuil pour différencier entre le temps de miss et le temps de hit. Ce seuil permet à l’attaquant de savoir si la victime a accédé à la ligne ciblée ou pas. Il existe également des variantes des attaques décrites ci-dessus. La plupart des attaques reposent sur le partage physique de cache entre les processeurs ou les cœurs. En écrivant ou en lisant de manière répétée dans le cache partagé, le processus attaquant est en mesure d’apprendre le schéma à la mémoire de la victime. Ainsi, c’est en traitant le problème au niveau de l’architecture que l’on peut aboutir à une solution optimale. La défense la plus intuitive contre les attaques visant les mémoires caches est le partitionnement. Le concept de base est de séparer les différents processus en leur affectant des régions distinctes dans la mémoire cache, empêchant ainsi, les interférences entre un processus victime et un processus d’attaque. Il existe des techniques de partitionnement matériel dites statiques qui consistent à créer des partitions de cache au niveau du matériel. Par ailleurs, il existe également des techniques de partitionnements logiciels basés sur la coloration du cache. Ces techniques de partitionnement matériel et logiciel sont efficaces pour contrer les attaques par canaux auxiliaires mais avec un surcout au niveau de la dégradation de performance. Ceci dépend du nombre de partitions et peut aller jusqu’à 30% de baisse de performance. Il existe d’autres méthodes de protection qui consistent à obscurcir l’accès à la mémoire cache par une technique de randomisation qui permet un partage complet du cache n’affectant pas ainsi, ses performances. Un exemple de randomisation est décrit dans la demande de brevet EP3671470 de la demanderesse qui utilise une permutation légère basée sur des portes XOR pour casser le lien direct entre les adresses et leurs emplacements dans la mémoire cache. Plus particulièrement, l’architecture selon cette demande de l’art antérieur propose une forme de partitionnement dynamique en associant une valeur différente de clé à chaque processus pour faire son adressage dans la mémoire cache. Les valeurs de clé sont stockées dans une table d’historique pour ne pas dégrader les performances de la mémoire cache. Cette méthode fournit une bonne protection tout en ayant un faible impact sur les performances et un faible surcout de stockage. Toutefois, l’architecture peut être vulnérable à certaines types d’attaques de cache timing et principalement, à l’attaque ‘Flush + Reload’. En outre, la méthode peut présenter un problème de cohérence de mémoire dû au fait que certaines lignes de cache non suivies peuvent être abandonnées sans qu’il y ait une réécriture ‘writeback’ dans la mémoire principale. L’objet de la présente invention est de proposer un procédé et un système de gestion d’une mémoire cache remédiant aux inconvénients précités et fournissant des contremesures efficaces contre les attaques par canaux auxiliaires tout en minimisant l’impact sur les performances de la mémoire cache. Présentation de l’invention La présente invention est définie par un procédé de gestion d’une mémoire cache destinée à équiper un dispositif électronique comprenant un processeur et une mémoire principale, ledit procédé comportant les étapes suivantes : -générer une valeur aléatoire pour chaque processus d’accès à la mémoire cache, -transformer des adresses de la mémoire cache au moyen de ladite valeur aléatoire en des adresses correspondantes, dites adresses randomisées destinées à indexer la mémoire cache, -associer chaque valeur aléatoire correspondant à un processus d’accès, à un identifiant dudit processus d’accès formant ainsi, des couples d’identifications ayant pour fonction de partitionner dynamiquement la mémoire cache tout en répertoriant l’accès à ladite mémoire cache, -stocker chaque couple d’identification composé d’une valeur aléatoire et d’un identifiant correspondant dans une table d’historique, et -gérer chaque processus d’accès à la mémoire cache en fonction desdits couples d’identifications stockés dans ladite table d’historique. Ce procédé permet de renforcer la sécurité de la mémoire cache tout en préservant une très bonne performance. En effet, le fait que l’identifiant soit ajouté dans la table d’historique et non pas dans la mémoire cache permet de minimiser le coût matériel et le temps de vérification. Selon un premier mode de réalisation, le procédé comporte les étapes suivantes : - recevoir une requête courante comprenant l’identifiant courant d’un processus d’accès courant et une adresse d’accès courante à la mémoire cache, - parcourir les lignes de la table d’historique pour vérifier s’il existe un identifiant dans la table d’historique qui correspond à l’identifiant courant du processus d’accès courant, - calculer dans le cas positif, l’adresse randomisée de ladite adresse d’accès courante en utilisant la valeur aléatoire associée à l’identifiant trouvé dans la table d’historique correspondant à l’identifiant courant, - déclencher dans le cas négatif, un défaut de cache entrainant la génération d’une valeur aléatoire courante destinée à être associée à l’identifiant dudit processus d’accès courant pour former un couple d’identification courant, et - stocker ledit couple d’identification courant sur une ligne libre de la table d’historique. Ceci permet d’établir un bon compromis entre la sécurité et la performance. Selon un deuxième mode de réalisation, le procédé comporte l’étape de stocker dans un champ de la mémoire cache, dit champ de permission, un vecteur de permission de dimension égale au nombre de lignes de la table d’historique, chaque composant dudit vecteur de permission correspondant à une et une seule ligne de ladite table d’historique et dont sa valeur indique une légitimité ou une non-légitimité du processus d’accès référencé par son identifiant stocké dans ladite ligne. Ainsi, le champ de process ID dans la mémoire cache permet de corriger le problème d’aliasing mémoire et de partage de données. Avantageusement, le procédé comporte les étapes suivantes : - parcourir les lignes de la table d’historique de manière séquentielle pour calculer à chaque ligne courante, l’adresse randomisée indexant la mémoire cache à partir de la valeur aléatoire stockée dans ladite ligne courante et de l’adresse indiquée dans la requête, et - vérifier la validité (i.e. le bit de validité et l’étiquette) de la ligne courante de la mémoire cache définie par l’adresse randomisée correspondante. Avantageusement, le procédé comporte l’étape de déclencher un défaut de cache au cas où on arrive à la fin de la table d’historique tout en ne validant aucune ligne de la mémoire cache. Avantageusement, le procédé comporte les étapes suivantes : - vérifier la correspondance entre l’identifiant courant et l’identifiant appartenant au couple relatif à la ligne courante (i.e. l’itération courante), au cas où la ligne de la mémoire cache soit validée (i.e. bit de validité et d’étiquette validés), - vérifier si l’identifiant courant existe dans la table d’historique en cas de non-correspondance entre l’identifiant courant et le dit identifiant relatif à ladite ligne courante, - relever, la position d’un identifiant stocké dans la table d’historique si cet identifiant est égal à l’identifiant courant, - déclencher un cache hit si le bit de légitimité du vecteur de permission à une position correspondante à ladite position relevée dudit identifiant stocké dans la table d’historique, est valide, - simuler le déclenchement d’un défaut de cache si le bit de légitimité à ladite position du vecteur de permission est non valide. Ainsi, un cache hit est déclenché au cas où le processus d’accès accède à une donnée partagée existante dans la mémoire cache et à laquelle il a une légitimité d’accès. En revanche, un défaut de cache est déclenché au cas où le processus d’accès accède à une donnée partagée existante dans la mémoire cache mais à laquelle il n’a pas de légitimité. Ceci permet d’interdire le suivi d’accès que peut faire un processus attaquant sur un processus victime. En outre, ceci permet d’avoir un partage de la même donnée par plusieurs processus qui sont déjà répertoriés dans la table d’historique par leur identifiant et leurs valeurs aléatoires respectives. Avantageusement, dans le cas où un défaut de cache est déclenché, le procédé comporte l’étape de retirer la légitimité d’un processus d’accès à une donnée partagée, sans supprimer ladite donnée partagée de la mémoire cache dans le cas où ledit processus d’accès requiert d’évincer ladite donnée partagée de la mémoire cache ou dans le cas où il quitte la table d’historique. Ceci conserve la donnée partagée dans la mémoire cache de sorte que l’autre (ou les autres) processus d’accès partageant la même donnée puisse (ou puissent) toujours accéder à cette donnée. Avantageusement, le procédé comporte l’étape de réécrire ladite donnée partagée dans la mémoire principale au cas où d’une part elle a été modifiée et d’autre part qu’un dernier processus d’accès ayant une légitimité à ladite donnée partagée l’évince de la mémoire cache ou quitte la table d’historique. De cette façon, on résout la gestion de cohérence mémoire. L’invention vise également un système de gestion d’une mémoire cache destinée à équiper un dispositif électronique comprenant un processeur et une mémoire principale, comportant : -un module de randomisation configuré pour générer une valeur aléatoire pour chaque processus d’accès à la mémoire cache, et pour transformer des adresses de la mémoire cache au moyen de ladite valeur aléatoire en des adresses correspondantes, dites adresses randomisées destinées à indexer la mémoire cache, -une table d’historique composée d’un nombre déterminé de lignes configurée pour y stocker sur chaque ligne un couple d’identification associant une valeur aléatoire correspondant à un processus d’accès, à un identifiant dudit processus d’accès correspondant, formant ainsi, des couples d’identifications ayant pour fonction de partitionner dynamiquement la mémoire cache tout en répertoriant l’accès à ladite mémoire cache, et - une machine d’état configurée pour accéder à la table d’historique et pour gérer chaque processus d’accès à la mémoire cache en fonction desdits couples d’identifications stockés dans ladite table d’historique. Avantageusement, le système comporte : -un ensemble de registres destinés à recevoir une requête courante comprenant l’identifiant d’un processus d’accès courant et une adresse d’accès courante à la mémoire cache, et - une machine d’état configurée pour : - parcourir les lignes de la table d’historique pour vérifier s’il existe un identifiant dans la table d’historique qui correspond à l’identifiant courant du processus d’accès courant, - calculer dans le cas positif, l’adresse randomisée de ladite adresse d’accès courante en utilisant la valeur aléatoire associée à l’identifiant trouvé dans la table d’historique correspondant à l’identifiant courant, - déclencher dans le cas négatif, un défaut de cache entrainant la génération d’une valeur aléatoire courante destinée à être associée à l’identifiant dudit processus d’accès courant pour former un couple d’identification courant, et - stocker ledit couple d’identification courant sur une ligne libre de la table d’historique. On notera qu’il existe plusieurs types de mémoires caches comme les mémoires caches à correspondance directe, les mémoires caches associatives, et les mémoires caches associatives par ensembles. A titre d’exemple, non limitatif, la mémoire cache est subdivisée en plusieurs lignes dont chacune comporte un champ de données, une étiquette de lignes, un bit de validité, et un bit de modification. Avantageusement, la mémoire cache comporte en outre un champ de permission du processus d’accès configuré pour y stocker un vecteur de permission de dimension égale au nombre de lignes de la table d’historique, chaque composant dudit vecteur de permission correspondant à une et une seule ligne de ladite table d’historique et dont sa valeur indique une légitimité ou une non-légitimité du processus d’accès référencé par son identifiant stocké dans ladite ligne. Avantageusement, la machine d’état est configurée pour : - parcourir les lignes de la table d’historique de manière séquentielle pour calculer à chaque ligne courante, l’adresse randomisée indexant la mémoire cache à partir de la valeur aléatoire stockée dans ladite ligne courante et de l’adresse indiquée dans la requête, et - vérifier la validité (i.e. le bit de validité et l’étiquette) de la ligne courante de la mémoire cache définie par l’adresse randomisée correspondante. Avantageusement, la machine d’état est configurée pour : - vérifier la correspondance entre l’identifiant courant et l’identifiant appartenant au couple relatif à la ligne courante (i.e. l’itération courante), au cas où la ligne de la mémoire cache soit validée (i.e. bit de validité et d’étiquette validés), - vérifier si l’identifiant courant existe dans la table d’historique en cas de non-correspondance entre l’identifiant courant et le dit identifiant relatif à ladite ligne courante, - relever, la position d’un identifiant stocké dans la table d’historique si cet identifiant est égal à l’identifiant courant, - déclencher un cache hit si le bit de légitimité du vecteur de permission à une position correspondante à ladite position relevée dudit identifiant stocké dans la table d’historique, est valide, - simuler le déclenchement d’un défaut de cache (cache miss) si le bit de légitimité à ladite position du vecteur de permission est non valide. L’invention vise aussi un dispositif électronique comprenant un processeur, une mémoire principale, et une mémoire cache, comportant en outre un système de gestion de la mémoire cache selon l’une quelconque des caractéristiques ci-dessus. Brève description des figures illustre de manière schématique un système de gestion d’une mémoire cache, selon un mode de réalisation de l’invention ; illustre de manière schématique une mise en œuvre d’un système de gestion d’une mémoire cache, selon un mode de réalisation de l’invention ; illustre de manière schématique un procédé de gestion d’une mémoire cache, selon le système mis en œuvre à la ; illustre de manière schématique une mise en œuvre d’un système de gestion d’une mémoire cache, selon un mode de réalisation préféré de l’invention ; et illustre de manière schématique un procédé de gestion d’une mémoire cache, selon le système mis en œuvre à la . Procédé de gestion d’une mémoire cache (3) destinée à équiper un dispositif électronique comprenant un processeur et une mémoire principale, caractérisé en ce qu’il comporte les étapes suivantes : -générer une valeur aléatoire (R) pour chaque processus d’accès à la mémoire cache (3), -transformer des adresses (A) de la mémoire cache (3) au moyen de ladite valeur aléatoire en des adresses correspondantes, dites adresses randomisées (Ar) destinées à indexer la mémoire cache (3), -associer chaque valeur aléatoire correspondant à un processus d’accès, à un identifiant (PID) dudit processus d’accès formant ainsi, des couples d’identifications ayant pour fonction de partitionner dynamiquement la mémoire cache tout en répertoriant l’accès à ladite mémoire cache, -stocker chaque couple d’identification composé d’une valeur aléatoire et d’un identifiant correspondant dans une table d’historique (7), et -gérer chaque processus d’accès à la mémoire cache en fonction desdits couples d’identifications stockés dans ladite table d’historique. Procédé selon la revendication 1, caractérisé en ce qu’il comporte les étapes suivantes : - recevoir une requête courante comprenant l’identifiant courant (PIDc) d’un processus d’accès courant et une adresse d’accès courante (Ac) à la mémoire cache, - parcourir les lignes de la table d’historique (7) pour vérifier s’il existe un identifiant (PIDi) dans la table d’historique qui correspond à l’identifiant courant (PIDc) du processus d’accès courant, - calculer dans le cas positif, l’adresse randomisée (Ar) de ladite adresse d’accès courante en utilisant la valeur aléatoire associée à l’identifiant PIDi trouvé dans la table d’historique correspondant à l’identifiant courant PIDc, et - déclencher dans le cas négatif, un défaut de cache entrainant la génération d’une valeur aléatoire courante destinée à être associée à l’identifiant dudit processus d’accès courant pour former un couple d’identification courant, et - stocker ledit couple d’identification courant sur une ligne disponible de la table d’historique (7). Procédé selon la revendication 1, caractérisé en ce qu’il comporte l’étape de stocker dans un champ de la mémoire cache, dit champ de permission (PP), un vecteur de permission (VP) de dimension égale au nombre de lignes de la table d’historique (7), chaque composant dudit vecteur de permission correspondant à une et une seule ligne de ladite table d’historique (7) et dont sa valeur indique une légitimité ou une non-légitimité du processus d’accès référencé par son identifiant stocké dans ladite ligne. Procédé selon la revendication 3, caractérisé en ce qu’il comporte les étapes suivantes : - parcourir les lignes de la table d’historique (7) de manière séquentielle pour calculer à chaque ligne courante, l’adresse randomisée indexant la mémoire cache (3) à partir de la valeur aléatoire (R j ) stockée dans ladite ligne courante et de l’adresse (Ac) indiquée dans la requête, et - vérifier la validité de la ligne courante de la mémoire cache (3) définie par l’adresse randomisée (A r ) correspondante. Procédé selon la revendication 4, caractérisé en ce qu’il comporte l’étape de déclencher un défaut de cache au cas où on arrive à la fin de la table d’historique (7) tout en ne validant aucune ligne de la mémoire cache. Procédé selon la revendication 5, caractérisé en ce qu’il comporte les étapes suivantes : - vérifier la correspondance entre l’identifiant courant (PIDc) et l’identifiant (PIDj) appartenant au couple (R j , PID j ) relatif à la ligne courante, au cas où la ligne de la mémoire cache soit validée, - vérifier si l’identifiant courant (PIDc) existe dans la table d’historique (7) en cas de non-correspondance entre l’identifiant courant (PIDc) et le dit identifiant (PIDj) relatif à ladite ligne courante, - relever, la position (k) d’un identifiant (PIDk) stocké dans la table d’historique si cet identifiant (PIDk) est égal à l’identifiant courant (PIDc), - déclencher un cache hit si le bit de légitimité du vecteur de permission VP à une position (k) correspondante à ladite position (k) relevée dudit identifiant (PID k ) stocké dans la table d’historique (7), est valide, - simuler le déclenchement d’un défaut de cache si le bit de légitimité à ladite position (k) du vecteur de permission (VP) est non valide. Procédé selon la revendication 6, caractérisé en ce que dans le cas où un défaut de cache est déclenché, ledit procédé comporte l’étape de retirer la légitimité d’un processus d’accès à une donnée partagée, sans supprimer ladite donnée partagée de la mémoire cache (3) dans le cas où ledit processus d’accès requiert d’évincer ladite donnée partagée de la mémoire cache ou dans le cas où il quitte la table d’historique (7). Procédé selon la revendication 6 ou 7, caractérisé en ce qu’il comporte l’étape de réécrire ladite donnée partagée dans la mémoire principale (19) au cas où d’une part elle a été modifiée et d’autre part qu’un dernier processus d’accès ayant une légitimité à ladite donnée partagée l’évince de la mémoire cache (3) ou quitte la table d’historique (7). Système de gestion d’une mémoire cache (3) destinée à équiper un dispositif électronique comprenant un processeur (17) et une mémoire principale (19), caractérisé en ce que ledit système comporte : -un module de randomisation (5) configuré pour générer une valeur aléatoire (R) pour chaque processus d’accès à la mémoire cache (3), et pour transformer des adresses de la mémoire cache (3) au moyen de ladite valeur aléatoire en des adresses correspondantes, dites adresses randomisées (Ar) destinées à indexer la mémoire cache (3), -une table d’historique (7) composée d’un nombre déterminé de lignes configurée pour y stocker sur chaque ligne un couple d’identification associant une valeur aléatoire correspondant à un processus d’accès, à un identifiant dudit processus d’accès correspondant, formant ainsi, des couples d’identifications ayant pour fonction de partitionner dynamiquement la mémoire cache tout en répertoriant l’accès à ladite mémoire cache, et - une machine d’état (9) configurée pour accéder à la table d’historique (7) et pour gérer chaque processus d’accès à la mémoire cache en fonction desdits couples d’identifications stockés dans ladite table d’historique (7). Système selon la revendication 9, caractérisé en ce qu’il comporte : -un ensemble de registres (13) destinés à recevoir une requête courante comprenant l’identifiant d’un processus d’accès courant et une adresse d’accès courante à la mémoire cache, et - une machine d’état (9) configurée pour : - parcourir les lignes de la table d’historique (7) pour vérifier s’il existe un identifiant (PIDi) dans la table d’historique qui correspond à l’identifiant courant (PIDc) du processus d’accès courant, - calculer dans le cas positif, l’adresse randomisée (Ar) de ladite adresse d’accès courante en utilisant la valeur aléatoire associée à l’identifiant (PIDi) trouvé dans la table d’historique correspondant à l’identifiant courant (PIDc), et - déclencher dans le cas négatif, un défaut de cache entrainant la génération d’une valeur aléatoire courante destinée à être associée à l’identifiant dudit processus d’accès courant pour former un couple d’identification courant, et - stocker ledit couple d’identification courant sur une ligne disponible de la table d’historique (7). Système selon la revendication 10, caractérisé en ce que la mémoire cache (3) est subdivisée en plusieurs lignes dont chacune comporte un champ de permission (PP) du processus d’accès configuré pour y stocker un vecteur de permission (VP) de dimension égale au nombre de lignes de la table d’historique (7), chaque composant dudit vecteur de permission correspondant à une et une seule ligne de ladite table d’historique et dont sa valeur indique une légitimité ou une non-légitimité du processus d’accès référencé par son identifiant stocké dans ladite ligne. Système selon la revendication 11, caractérisé en ce que la machine d’état (9) est configurée pour : - parcourir les lignes de la table d’historique (7) de manière séquentielle pour calculer à chaque ligne courante, l’adresse randomisée indexant la mémoire cache (3) à partir de la valeur aléatoire (R j ) stockée dans ladite ligne courante et de l’adresse (Ac) indiquée dans la requête, et - vérifier la validité de la ligne courante de la mémoire cache (3) définie par l’adresse randomisée (A r ) correspondante. Système selon la revendication 12, caractérisé en ce que la machine d’état (9) est configurée pour : - vérifier la correspondance entre l’identifiant courant (PIDc) et l’identifiant (PIDj) appartenant au couple (R j , PID j ) relatif à la ligne courante (j), au cas où la ligne de la mémoire cache soit validée, - vérifier si l’identifiant courant (PIDc) existe dans la table d’historique (7) en cas de non-correspondance entre l’identifiant courant (PIDc) et le dit identifiant (PIDj) relatif à ladite ligne courante, - relever, la position (k) d’un identifiant (PIDk) stocké dans la table d’historique si cet identifiant (PIDk) est égal à l’identifiant courant (PIDc), - déclencher un cache hit si le bit de légitimité du vecteur de permission (VP) à une position (k) correspondante à ladite position (k) relevée dudit identifiant (PID k ) stocké dans la table d’historique (7), est valide, - simuler le déclenchement d’un défaut de cache si le bit de légitimité à ladite position (k) du vecteur de permission (VP) est non valide. Dispositif électronique comprenant un processeur (17), une mémoire principale (19), et une mémoire cache (3) caractérisé en ce qu’il comporte en outre un système de gestion (1) de la mémoire cache (3) selon l’une quelconque des revendications 9 à 11.