Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD OF MANAGING CONSISTENCY OF CACHES
Document Type and Number:
WIPO Patent Application WO/2015/032921
Kind Code:
A1
Abstract:
The present invention relates to a method of transmitting a message comprising an integrity check and a header, between two processing units via a shared memory, comprising steps of: - generation (501), by a first processing unit, of a first pseudorandom binary string; - encryption (502) of the message to be transmitted by applying an involutive transformation dependent on the first pseudorandom binary string generated; - transmission and storage (503) of the encrypted message in the shared memory; - generation (504), by the second processing unit, of a second pseudorandom binary string; - decryption of the message stored by applying an involutive transformation dependent on the second pseudorandom binary string, and by decrypting the header (505) of said message, by verifying the decrypted header (505), and as a function of the result of the verification, by decrypting the complete message (506); - verification (507) of the integrity of the decrypted message on the basis of its integrity check.

Inventors:
VALPARD CHRISTIAN (FR)
Application Number:
PCT/EP2014/068990
Publication Date:
March 12, 2015
Filing Date:
September 05, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SAGEM DEFENSE SECURITE (FR)
International Classes:
H04L9/06
Foreign References:
US5841873A1998-11-24
Other References:
WEIDONG SHI ET AL: "Architectural Support for High Speed Protection of Memory Integrity and Confidentiality in Multiprocessor Systems", PROCEEDINGS OF THE 13TH INTERNATIONAL CONFERENCE ON PARALLEL ARCHITECTURES AND COMPILATION TECHNIQUES, 29 September 2004 (2004-09-29), pages 123 - 134, XP055118206, ISSN: 1089-795X, ISBN: 978-0-76-952229-6, DOI: 10.1109/PACT.2004.8
BRIAN ROGERS ET AL: "Efficient data protection for distributed shared memory multiprocessors", PROCEEDINGS OF THE 15TH INTERNATIONAL CONFERENCE ON PARALLEL ARCHITECTURES AND COMPILATION TECHNIQUES , PACT '06, 1 January 2006 (2006-01-01), New York, New York, USA, pages 84, XP055118400, ISBN: 978-1-59-593264-8, DOI: 10.1145/1152154.1152170
Attorney, Agent or Firm:
REGIMBEAU (FR)
Download PDF:
Claims:
REVENDICATIONS

1 . Procédé de transmission d'un message (Mi) entre une première unité de traitement (202, 302) et une deuxième unité de traitement (202, 302) par l'intermédiaire d'une mémoire partagée (204, 304) par les deux unités de traitement, le message à transmettre (Mi) comprenant un contrôle d'intégrité et un entête, chaque unité de traitement comprenant un générateur de suites binaires pseudoaléatoires (205, 305) et un module cryptographique (206, 306) ; les générateurs des première et deuxième unités de traitement étant initialisés avec une même graine et synchronisés entre eux ; ledit procédé comprenant les étapes suivantes :

- génération (501 ), par le générateur de suites binaires pseudo aléatoires (205, 305) de la première unité de traitement, d'une première suite binaire pseudo aléatoire (Si) ;

- chiffrement (502) du message à transmettre (Mi) par le module cryptographique (206, 306) de la première unité de traitement en appliquant au message à transmettre (Mi) une transformation involutive (fSi) fonction de la première suite binaire pseudo aléatoire générée (Si); - transmission et stockage par la première unité de traitement (503) du message chiffré (M'i = fSi(Mi)) dans la mémoire partagée (204, 304).

- génération (504), par le générateur de suites binaires pseudo aléatoires (205, 305) de la deuxième unité de traitement, d'une deuxième suite binaire pseudo aléatoire (S'i) ; lesdites première et deuxième suites binaires étant identiques;

- déchiffrement (505, 506) du message (M'i = fSi(Mi)) stocké dans la mémoire partagée (204, 304), par le module cryptographique (206, 306) de la deuxième unité de traitement, en appliquant au message stocké une transformation involutive (fS'i) fonction de la deuxième suite binaire pseudo aléatoire (S'i), le déchiffrement du message comprenant le déchiffrement de l'entête (505) dudit message, la vérification de l'entête déchiffré (505), et en fonction du résultat de la vérification de l'entête, le déchiffrement du message complet (506); les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques ;

- vérification par la deuxième unité de traitement (507) de l'intégrité du message déchiffré (fS'i(M'i)) à partir du contrôle d'intégrité du message déchiffré.

2. Procédé selon la revendication 1 dans lequel la transformation involutive fonction d'une suite binaire est une opération OU exclusive (XOR) appliquée entre ladite suite binaire et le message à chiffrer ou à déchiffrer .

3. Procédé selon l'une des revendications 1 ou 2, dans lequel la vérification de l'entête (505) comprend une étape de comparaison de l'entête avec un entête prédéterminé.

4. Procédé selon l'une des revendications précédentes, dans lequel le contrôle d'intégrité est un code de détection d'erreur.

5. Procédé selon la revendication 4, dans lequel le code de détection d'erreur est un contrôle de redondance cyclique (CRC) ou une somme de contrôle (« checksum »).

6. Procédé selon l'une des revendications précédentes, dans lequel la mémoire partagée (204, 304) est une mémoire tampon circulaire.

7. Procédé selon l'une des revendications précédentes, dans lequel les générateurs de suites binaires pseudo-aléatoires sont de période supérieure à la taille en bits de la mémoire partagée.

8. Produit programme d'ordinateur comprenant des instructions de code pour l'exécution d'un procédé selon l'une quelconque des revendications précédentes lorsque ce programme est exécuté par un processeur.

9. Système comprenant : - au moins une première unité de traitement (202, 302) configurée pour accéder à une mémoire partagée (204, 304) avec une deuxième unité de traitement (202, 302), ladite première unité de traitement (202, 302) comprenant :

-un générateur de suites binaires pseudo aléatoires (205, 305) pour générer une première suite binaire pseudo aléatoire (Si);

-un module cryptographique (206, 306) pour chiffrer un message à transmettre (Mi) à la deuxième unité de traitement en appliquant au message à transmettre une transformation involutive (fSi) fonction de la première suite binaire pseudo aléatoire générée (Si) ; ledit message à transmettre (Mi) comprenant un contrôle d'intégrité et un entête,

-des moyens pour transmettre et stocker le message chiffré (M'i = fSi(Mi)) dans la mémoire partagée (204, 304) ; et au moins une deuxième unité de traitement (202, 302) configurée pour accéder à ladite mémoire partagée (204, 304) avec ladite première unité de traitement (202, 302), ladite deuxième unité de traitement comprenant : -un générateur de suites binaires pseudo aléatoires (205, 305) pour générer une deuxième suite binaire pseudo aléatoire (S'i) ; les générateurs de ladite unité de traitement et de ladite deuxième unité de traitement étant initialisés avec une même graine et synchronisés entre eux et lesdites première et deuxième suites binaires étant identiques ;

-un module cryptographique (206, 306) pour déchiffrer le message chiffré (M'i = fSi(Mi)) stocké dans la mémoire partagée en appliquant au message chiffré stocké une transformation involutive (fS'i) fonction de la deuxième suite binaire pseudo aléatoire (S'i), le déchiffrement du message comprenant le déchiffrement de l'entête (505) dudit message, la vérification de l'entête déchiffré (505), et en fonction du résultat de la vérification de l'entête, le déchiffrement du message complet (506) ; les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques; -des moyens pour vérifier l'intégrité du message déchiffré à partir du contrôle d'intégrité du message déchiffré.

Description:
Procédé de gestion de cohérence de caches

DOMAINE TECHNIQUE GENERAL

L'invention a pour objet un mécanisme de gestion de cohérence de caches.

Elle concerne plus particulièrement un procédé d'échanges de données entre deux unités de traitement partageant des données par l'intermédiaire d'une mémoire partagée.

ETAT DE LA TECHNIQUE

Afin de répondre à des besoins toujours croissants en puissance de calcul, les processeurs utilisés dans les systèmes informatiques doivent être capables de réaliser un nombre de plus en plus grand d'opérations par seconde. Pendant des années, l'augmentation de la fréquence de fonctionnement des processeurs a permis de proposer des processeurs répondant à une telle demande croissante en puissance de calcul. L'augmentation de la fréquence de fonctionnement augmentant également la chaleur dégagée, la finesse de gravure des processeurs a été progressivement réduite afin de contenir la quantité de chaleur à dissiper dans des limites acceptables. Néanmoins, la miniaturisation des circuits des microprocesseurs est devenue de plus en plus complexe alors que la finesse de gravure devenait inférieure au micromètre jusqu'à atteindre maintenant une dizaine de nanomètres.

En conséquence une autre voie a été explorée afin de continuer à augmenter la puissance de calcul des processeurs tout en n'augmentant pas ou peu la chaleur à dissiper : exécuter plusieurs opérations en même temps, en parallèle, au lieu de chercher à augmenter le nombre d'opérations exécutées séquentiellement par un même cœur d'exécution. Des processeurs multicoeurs ont ainsi été développés. Par ailleurs, afin de diminuer le temps d'exécution d'une instruction par un processeur, chaque cœur d'exécution s'est vu adjoindre une mémoire cache. Une telle mémoire est une mémoire située entre un cœur et la mémoire vive du système. Le temps d'accès à cette mémoire bien inférieur au temps d'accès à la mémoire vive permet au cœur d'accéder plus rapidement à une partie des informations stockées en mémoire et peut donc permettre d'accélérer l'exécution des instructions.

Dans le cas d'un système multiprocesseur, chaque cœur d'exécution peut disposer d'une telle mémoire cache, non partagée avec les autres cœurs d'exécution, comme représenté en figure 1. Dans une telle configuration, la modification par un premier cœur d'une donnée en mémoire partagée peut donner lieu à une incohérence entre les caches de deux cœurs si cette donnée était également présente dans le cache d'un deuxième cœur et qu'elle n'a pas été mise à jour suite à la modification effectuée par le premier cœur. Le deuxième cœur risque alors de lire dans son cache une donnée incorrecte. Il est donc nécessaire de disposer d'un mécanisme assurant la cohérence des caches des différents cœurs d'exécution d'un processeur multi-cœurs.

Un mécanisme développé pour répondre à cette problématique est la cohérence « par espionnage ». Selon un tel mécanisme, chaque écriture en mémoire transite par un bus partagé entre tous les cœurs d'un processeur. En espionnant le bus partagé, chaque cœur a ainsi connaissance des opérations d'écriture en mémoire des autres cœurs et peut mettre à jour son propre cache en conséquence pour assurer la cohérence de celui-ci avec les caches des autres cœurs. Un cache étant d'une taille réduite, il est nécessaire de renouveler le contenu d'un cache afin de minimiser la probabilité d'occurrence d'un défaut de cache, c'est-à-dire afin de maximiser la probabilité qu'un cœur trouve dans son cache les données qu'il cherche à lire pour éviter d'avoir à aller les chercher dans un cache de niveau supérieur ou en mémoire vive. L'écriture d'une donnée en cache et l'écriture de cette même donnée en mémoire vive peuvent être décalées dans le temps si une donnée modifiée en cache n'est écrite en mémoire vive que lorsque cette donnée est supprimée du cache lors du renouvellement de celui-ci. En fonction de l'algorithme de renouvellement de cache employé, il est même possible que l'ordre dans lequel plusieurs données sont écrites en mémoire ne soit pas le même que l'ordre dans lequel ces données ont été écrites précédemment en cache. Il est ainsi possible dans le cadre d'un mécanisme de cohérence par espionnage, qu'un second cœur espionnant l'activité en écriture d'un premier cœur, prenne connaissance de la modification du pointeur en écriture du premier cœur avant que la donnée correspondante ait été écrite ou finie d'être écrite dans la mémoire partagée. Le deuxième cœur peut alors être amené à mettre à jour son cache avec une donnée ne correspondant pas à la donnée mise à jour par le premier cœur. La cohérence des caches n'est alors plus assurée.

Une solution pour éviter un tel problème est d'imposer au second cœur d'attendre un certain temps avant de lire la donnée mise à jour en mémoire partagée pour laisser le temps à la donnée mise à jour d'être écrite en mémoire partagée avant cette lecture. Néanmoins une telle solution ralentit la mise à jour des caches et peut donc diminuer les performances du processeur.

Une autre solution consiste à horodater l'ensemble des opérations d'écriture à l'aide d'une horloge partagée entre les différents cœurs. Ainsi un second cœur détectant des écritures en mémoire partagée du premier cœur peut reconstituer l'ordre dans lequel ces écritures ont été réalisées et peut s'assurer de lire en mémoire partagée la donnée correspondant à la mise à jour du pointeur en écriture détectée. Néanmoins, une telle solution alourdit considérablement le coût en ressources du mécanisme de cohérence de cache. Chaque donnée écrite doit en effet être stockée avec sa date d'écriture, augmentant ainsi la quantité de données à échanger sur le bus intercoeur et à stocker dans les différentes mémoires.

Il existe donc un besoin d'un mécanisme de cohérence de cache permettant d'assurer la cohérence des caches des différents cœurs d'un système informatique, sans diminuer notablement les performances dudit système et sans augmenter la quantité de données à stocker en mémoire. PRESENTATION DE L'INVENTION

La présente invention se rapporte ainsi selon un premier aspect à un procédé de transmission d'un message entre une première unité de traitement et une deuxième unité de traitement par l'intermédiaire d'une mémoire partagée par les deux unités de traitement, le message à transmettre comprenant un contrôle d'intégrité et un entête, chaque unité de traitement comprenant un générateur de suites binaires pseudoaléatoires et un module cryptographique; les générateurs des première et deuxième unités de traitement étant initialisés avec une même graine et synchronisés entre eux ; ledit procédé comprenant les étapes suivantes :

- génération, par le générateur de suites binaires pseudo aléatoires de la première unité de traitement, d'une première suite binaire pseudo aléatoire;

- chiffrement du message à transmettre par le module cryptographique de la première unité de traitement en appliquant au message à transmettre une transformation involutive fonction de la première suite binaire pseudo aléatoire générée;

- transmission et stockage par la première unité de traitement du message chiffré dans la mémoire partagée ; - génération, par le générateur de suites binaires pseudo aléatoires de la deuxième unité de traitement, d'une deuxième suite binaire pseudo aléatoire; lesdites première et deuxième suites binaires étant identiques;

- déchiffrement du message stocké dans la mémoire partagée, par le module cryptographique de la deuxième unité de traitement, en appliquant au message stocké une transformation involutive fonction de la deuxième suite binaire pseudo aléatoire, le déchiffrement du message comprenant le déchiffrement de l'entête dudit message, la vérification de l'entête déchiffré, et en fonction du résultat de la vérification de l'entête, le déchiffrement du message complet; les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques ;

- vérification par la deuxième unité de traitement de l'intégrité du message déchiffré à partir du contrôle d'intégrité du message déchiffré. Un tel procédé permet à la deuxième unité de traitement de s'assurer que le message lu en mémoire et déchiffré est bien celui transmis et stocké dans la mémoire partagée par la première unité de traitement. De plus, l'utilisation d'un tel entête permet de réaliser lors du déchiffrement une première vérification du message lu en mémoire, tout en nécessitant moins de calcul que le déchiffrement et la vérification de l'intégrité du message complet. La lecture d'un mauvais message peut ainsi être détectée plus rapidement qu'en déchiffrant le message complet.

La transformation involutive fonction d'une suite binaire peut être une opération OU exclusive (XOR) appliquée entre ladite suite binaire et le message à chiffrer ou à déchiffrer.

Une telle transformation permet de par son caractère involutif de chiffrer et déchiffrer un message avec une seule transformation tout en requérant une quantité réduite de puissance de calcul pour le chiffrement et le déchiffrement. De plus, une telle transformation peut être appliquée bit à bit au message ce qui permet de ne déchiffrer qu'une partie du message notamment l'entête du message.

La vérification de l'entête peut comprendre une étape de comparaison de l'entête avec un entête prédéterminé.

Selon une caractéristique avantageuse et non limitative, le contrôle d'intégrité est un code de détection d'erreur.

Ce code de détection d'erreur peut être un contrôle de redondance cyclique (CRC) ou une somme de contrôle (« checksum »).

L'utilisation d'un tel code permet de vérifier que le déchiffrement du message chiffré lu en mémoire a été correctement effectué et donc que le message lu est bien celui qui a été transmis et stocké par la première unité de traitement dans la mémoire partagée.

La mémoire partagée peut être une mémoire tampon circulaire.

Les générateurs de suites binaires pseudo-aléatoires peuvent être de période supérieure à la taille en bits de la mémoire partagée.

Dans le cas d'une mémoire tampon circulaire, ceci permet d'éviter le déchiffrement par erreur d'anciennes données lorsqu'une écriture a été réalisée une fois à tous les emplacements de la mémoire tampon.

La présente invention se rapporte selon un deuxième aspect à un produit programme d'ordinateur comprenant des instructions de code pour l'exécution d'un procédé selon le premier aspect lorsque ce programme est exécuté par un processeur.

La présente invention se rapporte selon un troisième aspect à un système comprenant : - au moins une première unité de traitement configurée pour accéder à une mémoire partagée avec une deuxième unité de traitement, ladite première unité de traitement comprenant :

-un générateur de suites binaires pseudo aléatoires pour générer une première suite binaire pseudo aléatoire; -un module cryptographique pour chiffrer un message à transmettre à la deuxième unité de traitement en appliquant au message à transmettre une transformation involutive fonction de la première suite binaire pseudo aléatoire générée; ledit message à transmettre comprenant un contrôle d'intégrité et un entête, -des moyens pour transmettre et stocker le message chiffré dans la mémoire partagée ; et au moins une deuxième unité de traitement configurée pour accéder à ladite mémoire partagée avec ladite première unité de traitement, ladite deuxième unité de traitement comprenant :

-un générateur de suites binaires pseudo aléatoires pour générer une deuxième suite binaire pseudo aléatoire; les générateurs de ladite unité de traitement et de ladite deuxième unité de traitement étant initialisés avec une même graine et synchronisés entre eux et lesdites première et deuxième suites binaires étant identiques;

-un module cryptographique pour déchiffrer le message chiffré stocké dans la mémoire partagée en appliquant au message chiffré stocké une transformation involutive fonction de la deuxième suite binaire pseudo aléatoire, le déchiffrement du message comprenant le déchiffrement de l'entête dudit message, la vérification de l'entête déchiffré, et en fonction du résultat de la vérification de l'entête, le déchiffrement du message complet; les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques;

-des moyens pour vérifier l'intégrité du message déchiffré à partir du contrôle d'intégrité du message déchiffré.

De tels produit programme d'ordinateur et système présentent les mêmes avantages que ceux évoqués pour le procédé selon le premier aspect.

PRESENTATION DES FIGURES

D'autres caractéristiques et avantages apparaîtront à la lecture de la description qui va suivre d'un mode de réalisation. Cette description sera donnée en référence aux dessins annexés dans lesquels : la figure 1 illustre schématiquement des moyens matériels dans un système multiprocesseurs; la figure 2 illustre schématiquement des moyens matériels dans un système selon un mode de réalisation de l'invention ; la figure 3 illustre schématiquement des moyens matériels dans un système selon un autre mode de réalisation de l'invention ; - la figure 4 est un diagramme schématisant un exemple de mise en œuvre d'un procédé de contrôle selon un premier mode de mise en œuvre de l'invention ; la figure 5 est un diagramme schématisant un exemple de mise en œuvre d'un procédé de contrôle selon un deuxième mode de mise en œuvre de l'invention .

DESCRIPTION DETAILLEE

Une mise en œuvre de l'invention concerne un procédé de transmission d'un message entre deux unités de traitement d'un système informatique par l'intermédiaire d'une mémoire partagée par ces deux unités de traitement.

Comme représenté en figure 2, ces unités de traitement peuvent être deux processeurs d'un même système informatique multiprocesseur 201 comportant plusieurs processeurs 202a, 202n. Chaque processeur 202a, 202n est relié à une mémoire cache 203a, 203n. Les mémoires caches 203a, 203n ne sont pas partagées. Seul le processeur auquel une mémoire cache appartient peut lire son contenu.

Selon une variante représentée en figure 3, les unités de traitement sont des cœurs d'exécution parmi les cœurs d'exécution 302a, 302n intégrés au sein d'un unique processeur 301. Selon une telle variante, chaque cœur d'exécution est relié à sa propre mémoire cache non partagée 303a, 303n.

Les mémoires caches 203a, 203n et 303a, 303n peuvent être des mémoires caches de niveau 1 , de niveau 2 ou de niveau supérieur. Toutes les mémoires caches sont reliées à une mémoire partagée 204, 304 accessible en lecture et en écriture à tous les processeurs 202a, 202n et à tous les cœurs d'exécution 302a, 302n. Selon une première variante, une telle mémoire partagée peut être une mémoire cache de niveau supérieur à celui de la mémoire cache non partagée 203a, 203n, 303a, 303n, donc une mémoire cache de niveau 2 ou supérieur. Selon une autre variante, la mémoire partagée 204, 304 est la mémoire vive du système informatique.

La mémoire partagée 204, 304 peut être une mémoire tampon circulaire, pouvant implémenter une logique de type FIFO. Chaque unité de traitement comporte un générateur de suites binaires pseudo-aléatoires 205, 305, par exemple un registre à décalage à rétroaction linéaire (« LSFR ») ou un générateur à congruence linéaire (« GCL »), et un module cryptographique 206, 306.

Les générateurs de suites binaires pseudo-aléatoires 205, 305 de toutes les unités de traitement sont initialisés avec une même graine (« seed ») et sont tous synchronisés entre eux.

Le module cryptographique permet aux unités de traitement de chiffrer et de déchiffrer un message à échanger.

Le chiffrement et le déchiffrement d'un message comprennent l'application au message à chiffrer ou à déchiffrer d'une même transformation fSi fonction d'une même suite binaire pseudo-aléatoire Si et involutive c'est à dire vérifiant fSi o fSi = id. Cette suite binaire pseudo aléatoire Si est générée à l'identique par le générateur de suites binaires pseudo aléatoires de chaque unité de traitement pour le chiffrement et le déchiffrement d'un même message, les générateurs étant initialisés avec une même graine et restant synchronisés entre eux.

Selon une première variante, la transformation involutive fSi correspond à l'application d'une opération OU EXCLUSIF entre le message à chiffrer ou à déchiffrer et la suite binaire pseudo aléatoire Si générée par les unités de traitement. Selon une deuxième variante, la transformation involutive fSi correspond à la différence entre le nombre binaire défini par la suite Si et le nombre binaire correspondant au message binaire à chiffrer ou déchiffrer.

Ainsi, suite à l'écriture d'un message en mémoire partagée, une unité de traitement cherchant à mettre à jour son cache peut s'assurer que le message qu'elle lit en mémoire est bien celui dont elle a détecté l'écriture.

Plus précisément, un premier mode de mise en œuvre d'un procédé de contrôle d'un message échangé entre deux unités de traitement par l'intermédiaire d'une mémoire partagée est décrit ci-dessous en référence à la figure 4.

Le message Mi échangé comprend un contrôle d'intégrité. Il peut ainsi être issu d'un codage permettant la détection d'erreur tel qu'un contrôle de redondance cyclique (« cyclic redundancy check » ou « CRC »). Il peut également à titre d'exemple comprendre une somme de contrôle (« checksum »). Lors d'une première étape 401 , le générateur de suites binaires pseudoaléatoires d'une première unité de traitement émettrice du message génère une première suite binaire pseudo aléatoire Si. Si la suite binaire générée est la première suite générée après l'initialisation du générateur, elle correspond à la première suite de la séquence de suites correspondant à la graine employée. Si au moins une suite binaire a déjà été générée précédemment après l'initialisation du générateur, la suite binaire générée lors de la première étape 401 est la suite suivante de cette séquence.

Lors d'une deuxième étape 402, le module cryptographique de la première unité de traitement émettrice du message chiffre le message à échanger en appliquant à celui-ci une transformation fSi fonction de la première suite binaire pseudo aléatoire générée à la première étape 401 et involutive, c'est-à-dire qu'elle vérifie l'équation fSi o fSi = Id, Id étant la fonction identité. Il est donc possible à la fois de chiffrer et de déchiffrer un message avec la même transformation. Lors d'une troisième étape 403, le message chiffré (M'i = fSi(M)) est transmis et stocké par la première unité de traitement dans la mémoire partagée. Lors d'une quatrième étape 404, une deuxième unité de traitement souhaite accéder en lecture au message M'i stocké en mémoire partagée par l'intermédiaire de son cache. Le générateur de suites binaires pseudo aléatoires de cette deuxième unité de traitement génère alors une deuxième suite binaire S'i. Ce générateur de suites binaires a été initialisé avec la même graine que celle utilisée pour initialiser le générateur employé lors de la première étape 401 et ces deux générateurs sont restés synchronisés entre eux depuis leur initialisation. Ainsi la deuxième suite binaire S'i générée lors de la quatrième étape 404 est identique à la première suite binaire Si générée lors de la première étape 401 .

Lors d'une cinquième étape 405, la deuxième unité de traitement lit le message chiffré M'i stocké en mémoire partagée par l'intermédiaire de son cache. Puis son module cryptographique déchiffre le message chiffré M'i en lui appliquant une transformation fS'i involutive et fonction de la deuxième suite binaire pseudo aléatoire S'i. Cette transformation fS'i est identique à la tranformation fSi puisque la deuxième suite binaire pseudo aléatoire S'i est identique à la première suite binaire aléatoire Si. Le déchiffrement du message chiffré produit alors le message à échanger qui a été chiffré lors de la deuxième étape 402 (fS'i(M'i) = fS'i(fSi (Mi)) = fSi(fSi (Mi)) = Id(Mi) = Mi). Si la deuxième unité de traitement lit en mémoire partagée les données chiffrées correspondant à un message M'j distinct du message M'i à échanger, par exemple parce que cette lecture intervient avant que le message M'i chiffré ait été écrit dans la mémoire partagée, la deuxième unité de traitement ne pourra pas le déchiffrer correctement. En effet, le message chiffré lu en mémoire partagée aura été chiffré avec une transformation fSj différente de la transformation fSi car définie en fonction d'une suite binaire Sj différente de la première suite binaire Si. Lors du déchiffrement de ce message chiffré avec la fonction fS'i, le module cryptographique de l'unité de traitement obtiendra pour résultat fS'i(M'j) = fS'i (fSj(Mj))= fSi(fSj(Mj)) qui ne correspond donc ni à Mi ni à Mj.

Lors d'une sixième étape 406, la deuxième unité de traitement vérifie l'intégrité du message déchiffré à l'aide de son contrôle d'intégrité. Si le message transmis a été déchiffré avec succès lors de la cinquième étape 405, le message est intègre et la deuxième unité de traitement cherchant à mettre à jour son cache a la preuve qu'elle a lu le bon message dans la mémoire partagée. A l'inverse, si le déchiffrement ne s'est pas déroulé correctement lors de la cinquième étape 405, le message déchiffré n'est pas intègre et la deuxième unité de traitement sait ainsi que le message lu en mémoire partagée n'est pas le message recherché pour mettre à jour son cache.

Selon une variante, en cas d'échec de la vérification de l'intégrité du message déchiffré, la deuxième unité de traitement exécute à nouveau la cinquième étape 405 après l'expiration d'un délai prédéfini.

Les générateurs de suites binaires pseudo-aléatoires 205, 305 peuvent être de période supérieure à la taille en bits de la mémoire partagée. Ceci permet d'éviter, par exemple dans le cas d'une mémoire tampon circulaire, de pouvoir déchiffrer par erreur une ancienne valeur lorsque la mémoire a fait un tour, c'est- à-dire lorsque une écriture a été réalisée une fois à tous les emplacements de la mémoire et que des emplacements contenant des anciennes données sont réutilisés pour y écrire des données plus récentes.

Un deuxième mode de mise en œuvre d'un procédé de contrôle d'un message échangé entre deux unités de traitement par l'intermédiaire d'une mémoire partagée est décrit ci-dessous en référence à la figure 5.

Le message Mi échangé comprend un contrôle d'intégrité. Il peut ainsi être issu d'un codage permettant la détection d'erreur tel qu'un contrôle de redondance cyclique (« cyclic redundancy check » ou « CRC »). Il peut également à titre d'exemple comprendre une somme de contrôle (« checksum »).

Le message Mi échangé comporte également un entête hi prédéterminé de longueur n bits.

Lors d'une première étape 501 , similaire à la première étape 401 du procédé selon une première mise en œuvre décrit ci-dessus, le générateur de suites binaires pseudo-aléatoires de la première unité de traitement émettrice du message génère une suite binaire pseudo aléatoire Si. Si la suite binaire générée est la première suite générée après l'initialisation du générateur, elle correspond à la première suite de la séquence de suites correspondant à la graine employée. Si au moins une suite binaire a déjà été générée précédemment après l'initialisation du générateur, la suite binaire générée lors de la première étape 501 est la suite suivante de cette séquence. Lors d'une deuxième étape 502, similaire à la deuxième étape 402 du procédé selon une première mise en œuvre décrit ci-dessus, le module cryptographique de la première unité de traitement émettrice du message chiffre le message à échanger en appliquant à celui-ci une transformation fSi fonction de la première suite binaire pseudo aléatoire Si générée à la première étape 501 et involutive, c'est-à-dire qu'elle vérifie l'équation fSi o fSi = Id, Id étant la fonction identité. Il est donc possible à la fois de chiffrer et de déchiffrer un message avec la même transformation.

Dans ce mode de mise en œuvre, la transformation fSi doit pouvoir également être appliquée aux n premiers bits d'un message chiffré pour ne déchiffrer que l'entête h'i du message chiffré. Par exemple dans le cas où cette transformation est une fonction OU exclusif, elle peut être appliquée uniquement entre les n premiers bits de la suite Si et du message chiffré de façon à déchiffrer uniquement l'entête.

Lors d'une troisième étape 503, le message chiffré (M'i = h'i :: d'i = fSi(Mi) = fsi (hi :: di)) est transmis et stocké par la première unité de traitement dans la mémoire partagée.

Lors d'une quatrième étape 504, similaire à la quatrième étape 404 du procédé décrit ci-dessus, une deuxième unité de traitement souhaite accéder en lecture au message M'i stocké en mémoire partagée. Le générateur de suites binaires pseudo aléatoires de cette deuxième unité de traitement génère alors une deuxième suite binaire pseudo aléatoire S'i. Ce générateur de suites binaires a été initialisé avec la même graine que celle utilisée pour initialiser le générateur employé lors de la première étape 501 et ces deux générateurs sont restés synchronisés entre eux depuis leur initialisation. Ainsi la deuxième suite binaire S'i générée lors de la quatrième étape 504 est identique à la première suite binaire Si générée lors de la première étape 501 . Lors d'une cinquième étape 505, la deuxième unité de traitement lit le message chiffré M'i stocké en mémoire partagée lors de la troisième étape 503. Puis son module cryptographique déchiffre uniquement l'entête h'i du message chiffré M'i en lui appliquant une transformation fS'i involutive et fonction de la deuxième suite binaire pseudo aléatoire S'i. La deuxième suite binaire pseudo aléatoire S'i étant identique à la première suite binaire pseudo aléatoire Si, la transformation fS'i est identique à la transformation fSi. Le déchiffrement de l'entête h'i du message chiffré M'i produit alors l'entête prédéterminé hi utilisé comme entête du message Mi qui a été chiffré lors de la deuxième étape 502. Si la deuxième unité de traitement lit en mémoire partagée les données chiffrées correspondant à un message M'j distinct du message M'i à échanger, par exemple parce que cette lecture intervient avant que le message chiffré M'i ait été écrit dans la mémoire partagée, la deuxième unité de traitement ne pourra pas déchiffrer correctement l'entête du message. En effet, le message chiffré lu en mémoire partagée aura été chiffré avec une transformation fSj différente de la transformation fSi car définie en fonction d'une suite binaire Sj différente de la suite binaire Si. Lors du déchiffrement de l'entête de ce message chiffré avec la transformation fS'i, le module cryptographique de l'unité de traitement obtiendra pour résultat fS'i(fSj(hj)) qui ne correspond pas à l'entête prédéterminé hi ou hj utilisé comme entête des messages Mi et Mj.

Si le déchiffrement de l'entête du message chiffré n'a pas produit l'entête prédéterminé, la deuxième unité de traitement exécute à nouveau la quatrième étape 504 après l'expiration d'un délai prédéfini.

Si le déchiffrement de l'entête du message chiffré produit l'entête prédéterminé, la deuxième unité de traitement exécute la sixième étape suivante 506.

Lors de la sixième étape 506, le module cryptographique de la deuxième unité de traitement déchiffre le reste du message chiffré M'i lu en mémoire partagée en lui appliquant la transformation fS'i involutive et fonction de la deuxième suite binaire pseudo aléatoire S'i. Cette transformation fS'i est identique à la transformation fSi puisque la deuxième suite binaire pseudo aléatoire S'i est identique à la première suite binaire aléatoire Si. Le déchiffrement du message chiffré produit alors le message à échanger qui a été chiffré lors de la deuxième étape 502 (fS'i(M'i) = fS'i(fSi (Mi)) = fSi(fSi (Mi)) = Id(Mi) = Mi).

Lors d'une septième étape 507, la deuxième unité de traitement vérifie l'intégrité du message déchiffré à l'aide de son contrôle d'intégrité. Si le message transmis a été déchiffré avec succès lors de la sixième étape 506, le message est intègre et la deuxième unité de traitement a la preuve qu'elle a lu le bon message dans la mémoire partagée. A l'inverse, si le déchiffrement ne s'est pas déroulé correctement lors de la sixième étape 506, le message déchiffré n'est pas intègre et l'unité de traitement sait ainsi que le message lu en mémoire partagée n'est pas le message recherché.

Selon une variante, en cas d'échec de la vérification de l'intégrité du message déchiffré, la deuxième unité de traitement exécute à nouveau la cinquième étape 505 après l'expiration d'un délai prédéfini.