FR 3010598 A1 20150313 FR 1358597 A 20130906 3010598 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 coeur 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 coeur d'exécution s'est vu adjoindre une mémoire cache. Une telle mémoire est une mémoire située entre un coeur 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 2 3010598 coeur 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 coeur d'exécution peut disposer d'une telle mémoire cache, non partagée avec les autres coeurs d'exécution, 5 comme représenté en figure 1. Dans une telle configuration, la modification par un premier coeur d'une donnée en mémoire partagée peut donner lieu à une incohérence entre les caches de deux coeurs si cette donnée était également présente dans le cache d'un deuxième coeur et qu'elle n'a pas été mise à jour suite à la modification effectuée par le premier coeur. Le deuxième coeur risque alors de lire dans son cache une donnée 10 incorrecte. Il est donc nécessaire de disposer d'un mécanisme assurant la cohérence des caches des différents coeurs d'exécution d'un processeur multi-coeurs. 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 coeurs d'un processeur. En espionnant le bus partagé, chaque 15 coeur a ainsi connaissance des opérations d'écriture en mémoire des autres coeurs et peut mettre à jour son propre cache en conséquence pour assurer la cohérence de celui-ci avec les caches des autres coeurs. 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 20 de maximiser la probabilité qu'un coeur 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 25 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 coeur espionnant l'activité en écriture d'un 30 premier coeur, prenne connaissance de la modification du pointeur en écriture du premier coeur avant que la donnée correspondante ait été écrite ou finie d'être écrite dans la mémoire partagée. Le deuxième coeur peut alors être amené à mettre à jour son cache avec une donnée ne correspondant pas à la donnée mise à jour par le premier coeur. La cohérence des caches n'est alors plus assurée. 3 3010598 Une solution pour éviter un tel problème est d'imposer au second coeur 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 5 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 coeurs. Ainsi un second coeur détectant des écritures en mémoire partagée du premier coeur 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 10 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. 15 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 coeurs 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. 20 PRESENTATION DE L'INVENTION La présente invention se rapporte ainsi selon un premier aspect à un procédé de transmission d'un message par une première unité de traitement à destination d'une seconde unité de traitement par l'intermédiaire d'une mémoire partagée par les deux 25 unités de traitement, le message à transmettre comprenant un contrôle d'intégrité, 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 seconde unités de traitement étant initialisés avec une même graine et synchronisés entre eux ; 30 ledit procédé comprenant les étapes suivantes mises en oeuvre par la première unité de traitement : 4 3010598 - 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 5 fonction de la première suite binaire pseudo aléatoire générée; - transmission et stockage du message chiffré dans la mémoire partagée. La présente invention se rapporte selon un deuxième aspect à un procédé de contrôle d'un message transmis d'une première unité de traitement à destination d'une 10 deuxième unité de traitement conformément au procédé de transmission selon le premier aspect, ledit procédé de contrôle comprenant les étapes suivantes mises en oeuvre par la deuxième unité de traitement : - génération, par le générateur de suites binaires pseudo aléatoires de la deuxième unité 15 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 ; 20 les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques ; - vérification de l'intégrité du message déchiffré à partir du contrôle d'intégrité du message déchiffré. 25 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. 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 à 30 déchiffrer . 5 3010598 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 5 qu'une partie du message notamment l'entête du message. Selon une variante de mise en oeuvre dans laquelle ledit message comprend un entête, le déchiffrement du message comprend le déchiffrement de l'entête, 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. 10 La vérification de l'entête peut alors comprendre une étape de comparaison de l'entête avec un entête prédéterminé. 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 15 message peut ainsi être détectée plus rapidement qu'en déchiffrant le message complet. 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 »). 20 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 25 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. 30 La présente invention se rapporte selon un troisième aspect à un produit programme d'ordinateur comprenant des instructions de code pour l'exécution d'un 6 3010598 procédé selon le premier aspect ou le deuxième aspect lorsque ce programme est exécuté par un processeur. La présente invention se rapporte selon un quatrième aspect à une unité de 5 traitement configurée pour accéder à une mémoire partagée avec une deuxième unité de traitement, ladite deuxième unité de traitement comprenant un générateur de suites binaires pseudo-aléatoires et un module cryptographique ; ladite unité de traitement comprenant : -un générateur de suites binaires pseudo aléatoires pour générer une première suite 10 binaire pseudo aléatoire ; les générateurs de ladite unité de traitement et de la deuxième unité de traitement étant initialisés avec une même graine et synchronisés entre eux ; -un module cryptographique pour chiffrer un message à transmettre à la deuxième unité de traitement en appliquant au message à transmettre une transformation involutive 15 fonction de la première suite binaire pseudo aléatoire générée; ledit message à transmettre comprenant un contrôle d'intégrité, -des moyens pour transmettre et stocker le message chiffré dans la mémoire partagée. La présente invention se rapporte selon un cinquième aspect à une unité de 20 traitement configurée pour accéder à une mémoire partagée avec une première unité de traitement selon le quatrième aspect, ladite mémoire partagée stockant un message à contrôler chiffré par la première unité de traitement en appliquant à un message à transmettre une transformation involutive fonction d'une première suite binaire pseudo aléatoire générée, ledit message à transmettre comprenant un contrôle d'intégrité et 25 ladite 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 ; lesdites première et deuxième suites binaires étant identiques ; 7 3010598 -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 ; les transformations involutives fonction des première et deuxième suites binaires pseudo 5 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é. La présente invention se rapporte selon un sixième aspect à un système comprenant au moins une première unité de traitement selon le quatrième aspect et au 10 moins une deuxième unité de traitement selon le cinquième aspect. De tels produit programme d'ordinateur, unités de traitement et système présentent les mêmes avantages que ceux évoqués pour le procédé selon les premier et deuxième aspects. 15 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 : 20 - 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 25 un autre mode de réalisation de l'invention ; - la figure 4 est un diagramme schématisant un exemple de mise en oeuvre d'un procédé de contrôle selon un premier mode de mise en oeuvre de l'invention ; - la figure 5 est un diagramme schématisant un exemple de mise en oeuvre d'un procédé de contrôle selon un deuxième mode de mise en oeuvre de l'invention . 8 3010598 DESCRIPTION DETAILLEE 5 Une mise en oeuvre 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 10 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 coeurs d'exécution parmi les coeurs d'exécution 302a, , 302n intégrés au sein d'un 15 unique processeur 301. Selon une telle variante, chaque coeur 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 20 accessible en lecture et en écriture à tous les processeurs 202a, , 202n et à tous les coeurs 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 25 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 pseudoaléatoires 205, 305, par exemple un registre à décalage à rétroaction linéaire (« LSFR ») 30 ou un générateur à congruence linéaire (« GCL »), et un module cryptographique 206, 306. 9 3010598 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 5 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 10 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 15 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 20 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 oeuvre 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 25 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 »). 30 Lors d'une première étape 401, le générateur de suites binaires pseudo-alé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 10 3010598 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. 5 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 10 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 15 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 20 é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 25 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). 30 Si la deuxième unité de traitement lit en mémoire partagée les données chiffrées correspondant à un message MI 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 11 3010598 fsi 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(MI) = fs'i (fsi(Mj))= fsi(fsi(Mj)) qui ne correspond donc ni à Mi ni à Mj. 5 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 10 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 15 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 20 é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 oeuvre d'un procédé de contrôle d'un message 25 é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 30 comprendre une somme de contrôle (« checksum »). Le message Mi échangé comporte également un entête hi prédéterminé de longueur n bits. 12 3010598 Lors d'une première étape 501, similaire à la première étape 401 du procédé selon une première mise en oeuvre décrit ci-dessus, le générateur de suites binaires pseudoalé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 5 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é 10 selon une première mise en oeuvre 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 15 et de déchiffrer un message avec la même transformation. Dans ce mode de mise en oeuvre, 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 20 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 25 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 30 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 13 3010598 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 5 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 MI 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 10 du message. En effet, le message chiffré lu en mémoire partagée aura été chiffré avec une transformation fsi 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(fsi(hj)) qui ne correspond pas à l'entête prédéterminé 15 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 20 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 25 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é 30 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 14 3010598 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 5 après l'expiration d'un délai prédéfini. 15 REVENDICATIONS1. Procédé de transmission d'un message (Mi) par une première unité de traitement (202, 302) à destination d'une seconde 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é, 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 seconde unités de traitement étant initialisés avec une même graine et synchronisés entre eux ; ledit procédé comprenant les étapes suivantes mises en oeuvre par la première unité de traitement : - génération (401, 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 (402, 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 (403, 503) du message chiffré (M'i = fsi(Mi)) dans la mémoire partagée (204, 304). 2. Procédé de contrôle d'un message (M'i) transmis d'une première unité de traitement (202, 302) à destination d'une deuxième unité de traitement (202, 302) conformément au procédé de transmission selon la revendication 1, ledit procédé de contrôle comprenant les étapes suivantes mises en oeuvre par la deuxième unité de traitement : - génération (404, 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 ; 16 3010598 - déchiffrement (405, 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) ; 5 les transformations involutives fonction des première et deuxième suites binaires pseudo aléatoires étant identiques ; - vérification (406, 507) de l'intégrité du message déchiffré (fs'i(M1)) à partir du contrôle d'intégrité du message déchiffré. 3. Procédé selon l'une des revendications précédentes dans lequel la transformation 10 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 . 4. Procédé selon l'une des revendications 2 ou 3, dans lequel ledit message (Mi) comprenant un entête, le déchiffrement du message comprend le déchiffrement de l'entête (505), la vérification de l'entête déchiffré (505), et en fonction du résultat de la 15 vérification de l'entête, le déchiffrement du message complet (506). 5. Procédé selon la revendication 4, 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é. 6. 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. 20 7. Procédé selon la revendication 6, dans lequel le code de détection d'erreur est un contrôle de redondance cyclique (CRC) ou une somme de contrôle (« checksum »). 8. 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. 9. Procédé selon l'une des revendications précédentes, dans lequel les générateurs de 25 suites binaires pseudo-aléatoires sont de période supérieure à la taille en bits de la mémoire partagée. 10. 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. 11. 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 deuxième unité de 17 3010598 traitement comprenant un générateur de suites binaires pseudo-aléatoires (205, 305) et un module cryptographique (206, 306) ; ladite 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 5 suite binaire pseudo aléatoire (Si); les générateurs de ladite unité de traitement et de la deuxième unité de traitement étant initialisés avec une même graine et synchronisés entre eux ; -un module cryptographique (206, 306) pour chiffrer un message à transmettre (Mi) à la deuxième unité de traitement en appliquant au message à transmettre une transformation 10 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é, -des moyens pour transmettre et stocker le message chiffré (M'i = fsi(Mi)) dans la mémoire partagée (204, 304). 12. Unité de traitement (202, 302) configurée pour accéder à une mémoire partagée (204, 15 304) avec une première unité de traitement (202, 302) selon la revendication 11, ladite mémoire partagée stockant un message à contrôler (M'i) chiffré par la première unité de traitement en appliquant à un message à transmettre (Mi) une transformation involutive (fsi) fonction d'une première suite binaire pseudo aléatoire (Si) générée, ledit message à transmettre (Mi) comprenant un contrôle d'intégrité et 20 ladite 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) ; 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)) 25 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) ; 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é 30 du message déchiffré. 18 3010598 13. Système comprenant au moins une première unité de traitement (202, 302) selon la revendication 11 et au moins une deuxième unité de traitement (202, 302) selon la revendication 12.