Brevet FR2898747A1 — publié le 20070921

PROCÉDÉ DE CHIFFREMENT CHERCHABLE DÉCHIFFRABLE, SYSTÈME POUR UN TEL CHIFFREMENT La présente invention se rapporte au domaine de la cryptographie. Elle se rapporte plus particulièrement au domaine des procédés de chiffrement permettant la recherche de mots-clé chiffrés. De tels procédés de chiffrement permettant la recherche de mots- 10 clé chiffrés sont connus de l'art antérieur, notamment par la publication de Boneh, Di Crescenzo, Ostrovski et Persiano Public key encryption with keyword search EUROCRYPT 2004, Volume 3027 dans Lecture notes in Computer science , pages 506-522. 15 Dans un tel procédé dit procédé PEKS pour Public-key Encryption with Keyword Search en langue anglaise, une entité A fournit à une passerelle, une trappe de recherche Tm calculée à partir de sa clé privée, et associée au mot-clé m. Lorsqu'une entité 20 B souhaite envoyer un message à l'entité A par un procédé de chiffrement symétrique, il chiffre un mot clé m' grâce à la clé publique de l'entité A, pk, de sorte à obtenir un chiffré C, qui est envoyé à la passerelle. La passerelle applique alors un test TEST (Tm, C) utilisant la trappe de recherche Tm pour déterminer si le 25 chiffré C correspond à un chiffrement du mot clé m par la clé publique pk ou non. De la sorte, la passerelle peut déterminer si le chiffré C correspond ou non à un chiffrement du mot clé m, mais sans avoir accès à ce mot clé, ni au mot clé m' chiffré dans C. 30 Ce type de chiffrement avec possibilité de recherche de mots clé dans les chiffrés est notamment utilisé dans le domaine de la transmission de données. Le test TEST (Tm, C) est dans ce cas discriminant pour que la passerelle route un message vers tel ou tel poste de l'entité A, par exemple poste fixe, ordinateur portable, téléphone mobile, en fonction du mot clé associé à la trappe Tm. Dans de tels procédés, on ne désire pas que la passerelle puisse déchiffrer le chiffré C reçu pour faire le routage des messages. Aucune possibilité de déchiffrage n'est donc prévue dans les procédés de chiffrement permettant une recherche par mots clé actuels. Toutefois, il peut être avantageux de permettre un déchiffrage cherchable des chiffrés reçus. Par exemple, dans le cas d'un abonné d'un opérateur téléphonique qui reçoit régulièrement un relevé des communications passées chiffré par l'opérateur avec la clé publique de l'abonné, le relevé est une liste de numéros téléphoniques chiffrés l'un après l'autre avec la clé publique de l'abonné. L'abonné est donc le seul à pouvoir déchiffrer le relevé à l'aide de sa clé privée de déchiffrement, et le relevé chiffré peut donc être transmis à l'abonné sur un canal de communication non confidentiel tel qu'Internet. Toutefois, dans ce cas de chiffrement déchiffrable classique, la clé de déchiffrement de l'abonné déchiffre nécessairement l'ensemble des informations chiffrées. Or, il est possible qu'un tiers, par exemple un juge ou une autorité de police désire avoir accès à ces informations chiffrées. Avec les procédés de chiffrement de l'art antérieur, il n'est pas possible pour une telle autorité d'avoir accès à un numéro particulier sans déchiffrer l'ensemble des numéros, ce qui peut nuire à l'exigence de confidentialité des communications. La présente invention entend notamment pallier cet inconvénient de l'art antérieur. Par ailleurs, dans un procédé de chiffrement asymétrique déchiffrable, il convient de générer une clé publique pour chiffrer le message, et une clé privée associée à la clé publique destinée au déchiffrement du message. Ainsi, à partir d'un chiffré C, chiffré à partir d'une clé publique pk et d'un mot clé déterminé m, il est possible de retrouver m, à l'aide de la clé privée sk associée à la clé publique pk. Toutefois, il convient de noter que ce déchiffrement ne permet pas une recherche comme dans les algorithmes de recherche tels que précédemment décrits dans l'art antérieur. En effet, dans de tels algorithmes, l'entité réalisant la recherche ne connaît pas le mot clé m en clair. Ainsi, même lorsque l'on fournit une clé de déchiffrement, il n'est donc pas possible de réaliser une recherche consistant à déchiffrer le chiffré C en un mot m' et à comparer ce mot m' à des mots déterminés m, puisque l'entité réalisant la recherche n'a pas à sa disposition les mots m. Ainsi, les procédés de chiffrement/déchiffrement connus ne permettent pas de réaliser des recherches par mot clé. La présente invention a également pour but de pallier cet inconvénient. Un premier but de la présente invention est donc de fournir un 30 procédé de chiffrement qui permette à la fois de réaliser des recherches sur des mots clé et un déchiffrement des mots clé.25 Ce but est atteint par la présente invention qui concerne selon un premier aspect un procédé de chiffrement/déchiffrement d'un message comprenant des étapes consistant à : - générer une pluralité de clés comprenant des sous-étapes consistant à : o générer une clé publique ; o générer une clé de déchiffrement associée à ladite clé publique ; o générer une clé de dérivation associée à ladite clé publique ; - pour une première entité, chiffrer ledit message à l'aide de ladite clé publique en un chiffré ; - pour une seconde entité, déchiffrer ledit chiffré pour retrouver ledit message ; - générer une trappe associée audit message, ladite trappe correspondant à une dérivée de ladite clé de dérivation spécifique audit message ; - pour un chiffré de test, tester, à l'aide de ladite trappe associée audit message (m), si ledit chiffré de test est un chiffrement dudit message à l'aide de ladite clé publique. Grâce au procédé ci-dessus, la clé de déchiffrement permet de réaliser le déchiffrement du message chiffré. Par ailleurs, la trappe définie grâce à la dérivée d'une clé de dérivation permet de réaliser les tests de recherche sur un chiffré de test. Ainsi, dans l'exemple ci-dessus d'une liste de numéros de téléphone, puisque la clé de dérivation permettant de générer des trappes de recherche est différente de la clé de déchiffrement, le procédé selon l'invention permet de calculer des trappes de recherche associées à certains numéros de téléphones particuliers. De la sorte, si cette clé de dérivation est détenue par un juge, celui-ci peut émettre des trappes de recherche associées à des numéros de téléphone de personnes recherchées par la police. Ces trappes de recherche peuvent ensuite servir à détecter la présence dans le relevé chiffré de ces numéros, tout en préservant la confidentialité des numéros innocents. L'invention concerne également un procédé de chiffrement d'un message, comprenant des étapes de : - génération de clés comprenant des sous-étapes consistant à : o générer une clé publique ; o générer une clé de déchiffrement associée à ladite clé publique ; o générer une clé de dérivation associée à ladite clé publique ; dans lequel, ladite clé publique comprend une première sous-clé et une seconde sous-clé, ladite première sous-clé étant une clé publique d'encapsulation d'un premier algorithme d'encapsulation de clé; dans lequel ladite clé de déchiffrement est la clé privée associée à ladite première sous-clé, ladite seconde sous-clé est une clé publique basée sur une identité d'un second algorithme d'encapsulation de clé basé sur une identité, ladite clé de dérivation est la clé privée associée à ladite seconde sous-clé, ledit procédé comprenant des étapes consistant à : - appliquer ledit premier algorithme d'encapsulation de clé ; - appliquer ledit second algorithme d'encapsulation de clé basé sur une identité, le paramètre d'identité dudit second algorithme d'encapsulation de clé basé sur une identité étant ledit message. Les algorithmes d'encapsulation de clé (ou KEM pour Key Encapsulation Mechanism en langue anglaise) sont connus en tant que tels. Ils comprennent notamment un algorithme de génération de clés, qui prend en entrée un paramètre de sécurité et qui génère une clé publique et une clé privée, un algorithme d'encapsulation de clé qui calcule une clé aléatoire et l'encapsule dans un chiffré en utilisant la clé publique et un nombre aléatoire, et un algorithme de décapsulation qui prend en entrée un chiffré c, la clé publique précédemment générée, la clé privée précédemment générée, et qui retourne la clé aléatoire encapsulée dans le chiffrée. Les algorithmes d'encapsulation de clé basés sur une identité (ou ID-KEM pour Identity-based Key Encapsulation Mechanism ) sont également connus en tant que tels. Ils comprennent notamment un algorithme de génération de clés qui prend en entrée un paramètre de sécurité et génère une clé publique et une clé secrète maîtresse de dérivation de clés, un algorithme de dérivation de clés qui prend en entrée les paramètres publics du système, la clé maîtresse de dérivation et une identité, et qui calcule une clé secrète associée à l'identité, un algorithme probabiliste d'encapsulation de clés qui utilise les paramètres publics du système et une identité pour générer une clé aléatoire encapsulée dans un chiffré, et un algorithme de décapsulation de clés qui prend en entrée un chiffré et la clé secrète associée à l'identité et retourne la clé aléatoire encapsulée dans le chiffré. Ainsi, dans le procédé de chiffrement sus-mentionné, les clés générées permettant à la fois le déchiffrement et la recherche sont 30 donc basées sur les clés générées par ces deux algorithmes. Selon un mode de réalisation particulier, ledit procédé de chiffrement sus-mentionné comprend des étapes consistant à : o définir un premier bloc de traitement implémentant ledit premier algorithme d'encapsulation de clé ; o définir un second bloc de traitement implémentant ledit second algorithme d'encapsulation de clé basé sur une identité ; o définir un troisième bloc de traitement ; o définir un quatrième bloc de traitement ; o fournir en entrée dudit premier bloc de traitement, un premier paramètre d'entrée ; o générer, en sortie dudit premier bloc de traitement, une première sortie correspondant à une première clé de session symétrique, et une seconde sortie correspondant à un premier chiffré de clé de ladite première clé de session à l'aide de ladite première sous-clé; o fournir ladite première clé de session en entrée dudit troisième bloc de traitement ; o fournir ledit message en entrée dudit troisième bloc ; o générer un second chiffré de message à l'aide de ladite première clé de session symétrique et dudit message ; o fournir ladite première clé de session en entrée dudit second bloc de traitement ; o fournir ledit message en entrée dudit second bloc de traitement ; o générer, en sortie dudit second bloc de traitement, une première sortie correspondant à une seconde clé de session symétrique, et une seconde sortie correspondant à un troisième chiffré de clé de ladite seconde clé de session à l'aide de ladite seconde sous-clé et dudit message ; o fournir ladite seconde clé de session en entrée dudit quatrième bloc de traitement ; o fournir ledit premier paramètre d'entrée en entrée dudit quatrième bloc de traitement ; o générer un quatrième chiffré de paramètre à l'aide dudit premier paramètre d'entrée et de ladite seconde clé de session ; dans lequel ledit chiffré comprend ledit premier chiffré, ledit second chiffré, ledit troisième chiffré et ledit quatrième chiffré 10 L'invention concerne également un procédé de déchiffrement lorsque le message à déchiffrer est chiffré conformément au procédé sus-mentionné. Ce procédé de déchiffrement comprend alors des étapes consistant à : 15 - retrouver ladite première clé de session symétrique à partir dudit premier chiffré et de ladite clé de déchiffrement ; - déchiffrer ledit second chiffré à l'aide de ladite clé de session symétrique pour ledit troisième bloc de traitement ; retrouver ledit message. 20 Selon un autre mode de réalisation du procédé de chiffrement sus-mentionné, le procédé comprend des étapes consistant à : o définir un cinquième bloc de traitement implémentant ledit second algorithme d'encapsulation de clé basé sur une 25 identité ; o définir un sixième bloc de traitement implémentant ledit premier algorithme d'encapsulation de clé ; o définir un septième bloc de traitement ; o fournir en entrée dudit cinquième bloc de traitement, un 30 second paramètre d'entrée ; o fournir en entrée dudit cinquième bloc de traitement, ledit message ; o générer, en sortie dudit cinquième bloc de traitement, une première sortie correspondant à une troisième clé de session symétrique, et une seconde sortie correspondant à un cinquième chiffré de clé de ladite troisième clé de session à l'aide de ladite seconde sous-clé et dudit message ; o fournir ladite troisième clé de session symétrique audit sixième bloc de traitement ; o générer, en sortie dudit sixième bloc de traitement, une première sortie correspondant à une quatrième clé de session symétrique, et une seconde sortie correspondant à un sixième chiffré de clé de ladite quatrième clé de session à l'aide de ladite première sous-clé ; o fournir en entrée dudit septième bloc de traitement ladite quatrième clé de session ; o fournir en entrée dudit septième bloc de traitement, ledit second paramètre d'entrée ; o fournir en entrée dudit septième bloc de traitement, ledit message ; o générer, en sortie dudit septième bloc de traitement, un septième chiffré correspondant à un chiffré dudit message et dudit second paramètre par ladite quatrième clé de session ; dans lequel ledit chiffré comprend ledit cinquième chiffré, ledit sixième chiffré et ledit septième chiffré. Dans ce mode de réalisation, le déchiffrement du chiffré comprend des étapes consistant à : - retrouver ladite quatrième clé de session symétrique à partir dudit sixième chiffré et de ladite clé de déchiffrement : - déchiffrer ledit septième chiffré à l'aide de ladite quatrième clé de session symétrique pour ledit septième bloc de traitement ; - retrouver ledit message. L'invention concerne également un programme d'ordinateur comprenant un code lisible par au moins un ordinateur, ledit code provoquant l'exécution par ledit ordinateur des étapes du procédé sus-mentionné. L'invention concerne également un cryptosystème pour le chiffrement/déchiffrement d'un message, ledit cryptosystème 10 comprenant : - une unité de génération de clés apte à générer des clés de chiffrement, ladite première unité comprenant : o une première sous-unité apte à générer une clé publique ; 15 o une seconde sous-unité apte à générer une clé de déchiffrement associée à ladite clé publique ; o une troisième sous-unité apte à générer d'une clé de dérivation associée à ladite clé publique ; - une unité de chiffrement apte à chiffrer ledit message à l'aide 20 de ladite clé publique en un chiffré ; - une unité de déchiffrement apte à déchiffrer ledit chiffré pour retrouver ledit message ; - une unité de génération d'une trappe apte à générer une trappe associée audit message, ladite trappe correspondant à 25 une dérivée de ladite clé de dérivation spécifique audit message ; - une unité de test apte, pour un chiffré de test, à déterminer si ledit chiffré de test est un chiffrement dudit message à l'aide de ladite clé publique. 30 L'invention concerne enfin une unité de chiffrement comprenant : - une unité de génération de clés apte à générer des clés de chiffrement, ladite première unité comprenant : o une première sous-unité apte à générer une clé publique ; o une seconde sous-unité apte à générer une clé de déchiffrement associée à ladite clé publique ; o une troisième sous-unité apte à générer d'une clé de dérivation associée à ladite clé publique ; dans lequel, ladite clé publique comprend une première sous-clé et une seconde sous-clé, ladite première sous-clé étant une clé publique d'encapsulation d'un premier algorithme d'encapsulation de clé, ladite clé de déchiffrement est la clé privée associée à première sous-clé, ladite seconde sous-clé étant une clé publique basée sur une identité d'un second algorithme d'encapsulation de clé basé sur une identité, ladite clé de dérivation étant la clé privée associée à ladite seconde sous-clé, ladite unité de chiffrement comprenant en outre, - une première sous-unité d'encapsulation de clé apte à appliquer ledit premier algorithme d'encapsulation de clé ; - une seconde sous-unité d'encapsulation de clé basée sur l'identité apte à appliquer ledit second algorithme d'encapsulation de clé basé sur une identité, le paramètre d'identité dudit second algorithme d'encapsulation de clé basé sur une identité étant ledit message. L'invention sera mieux comprise à la lumière de la description détaillée ci-dessous en référence aux figures annexées dans lesquelles : - la figure 1 représente un procédé de chiffrement selon un premier mode de réalisation de l'invention ; - la figure 2 représente un procédé de chiffrement selon un second mode de réalisation de l'invention. Selon les modes de réalisation illustrés FIG. 1 et 2, l'invention met en oeuvre un algorithme d'encapsulation de clés KEM et un algorithme d'encapsulation de clé basée sur une identité ID-KEM. Ces deux types d'algorithmes sont connus en tant que tels. Nous décrivons maintenant les éléments principaux de ces algorithmes. 10 Un algorithme d'encapsulation de clés KEM est une primitive cryptographique mettant en relation deux entités, dans le but de générer une clé de session et de l'échanger. Il se compose des algorithmes suivants : 15 - KeyGenKEM(lk) : un algorithme de génération de clés qui prend en entrée un paramètre de sécurité k et qui génère une clé publique pkK et une clé privée ski( ; -EncKEM(pkK, r) : un algorithme d'encapsulation de clé qui calcule une clé aléatoire s et l'encapsule dans un chiffré c en 20 utilisant la clé publique pkK et un nombre aléatoire r ; - KDKEM(pkK, ski(, c) : un algorithme de décapsulation qui prend en entrée un chiffré c, la clé publique pkK, la clé privée skK, et qui retourne la clé aléatoire s encapsulée dans le chiffré c. 25 L'algorithme d'encapsulation de clé basé sur une identité ID-KEM se compose quant à lui des algorithmes suivants : - KeyGen,D_KEM(lk) : un algorithme de génération de clés, qui prend en entrée un paramètre de sécurité k et génère une clé 30 publique pi(' et une clé secrète maîtresse de dérivation de clés tk, ; - KeyDer,D_KEM(tk,, pk,, ID) : un algorithme de dérivation de clés qui prend en entrée la clé publique pk,, la clé maîtresse de dérivation tk, et une identité ID, et qui calcule une clé secrète sk,D associée à l'identité, - Enc,D_KEM(pk,, ID, r) : un algorithme probabiliste d'encapsulation de clés qui utilise la clé publique pk,, une identité ID, et un nombre aléatoire r pour générer une clé aléatoire u encapsulée dans un chiffré c ; - KDID-KEM(sk,D, c) : un algorithme de décapsulation de clés qui prend en entrée un chiffré c et la clé secrète associée à l'identité sk,D et retourne la clé aléatoire u encapsulée dans le chiffré sous l'identité ID. Selon l'invention, on fournit un schéma de chiffrement asymétrique déchiffrable permettant la recherche d'un mot-clé m. Le schéma selon l'invention sera noté par la suite DPEKS pour Decryptable Public-key Encryption with Keyword Search en langue anglaise. Pour cela, on définit d'abord un algorithme de génération de clés KeyGenDPEKs(lk) qui prend en entrée un paramètre de sécurité 1 k et génère une clé publique pk, une clé de déchiffrement dk, et une clé de dérivation de trappes tk. Selon l'invention, la clé publique pk est un couple composé des clés publiques pkK et pk, générées respectivement par l'algorithme de génération de clés KeyGenKEM(lk) de l'algorithme d'encapsulation de clés KEM, et par l'algorithme de génération de clés KeyGen,D_KEM(lk) de l'algorithme d'encapsulation de clés basée sur l'identité ID-KEM. La clé de déchiffrement dk correspond à la clé privée ski( générée par l'algorithme de génération de clés KeyGenKEM(lk) de l'algorithme d'encapsulation de clés KEM. La clé de dérivation de trappes tk correspond à la clé privée tk, générée par l'algorithme de génération de clés KeyGen,D_KEM(lk) de l'algorithme d'encapsulation de clés basée sur une identité ID- KEM. On définit également selon l'invention un algorithme de chiffrement EncDPKES(pk, m, r) qui chiffre un mot clé m en un chiffré c à l'aide d'une clé publique pk et d'un nombre aléatoire r. Cet algorithme est probabiliste. Les FIG. 1 et 2 illustrent deux exemples d'un tel algorithme de chiffrement utilisant les clés telles que précédemment générées par l'algorithme KeyGenDPEKS. Dans l'exemple de la FIG. 1, on fournit en entrée d'un bloc de traitement KEM tel que défini précédemment, un nombre aléatoire r. Le bloc KEM génère une clé de session s, encapsulée dans un chiffré cl. Cette clé de session s est obtenue à partir de cl par l'algorithme de décapsulation du bloc KEM à partir de la clé privée skK. On fournit ensuite cette clé de session s en entrée d'un bloc de chiffrement symétrique El. On fournit également en entrée de El, le message m dont on veut réaliser le chiffrement déchiffrable et cherchable. La sortie de El génère un second chiffré c2. On fournit également en entrée d'un bloc de traitement ID-KEM la clé de session s en tant qu'aléa d'entrée, et le message m en tant qu'identité. On génère ainsi une clé u sous l'identité m, qui est encapsulée dans un troisième chiffré c3. Cette clé u est ensuite utilisée pour chiffrer le nombre aléatoire r dans un bloc de chiffrement symétrique E2. Le chiffré résultat de l'algorithme de chiffrement EncDPKES(pk, m, r) est alors le quadruplet (cl, c2, c3, c4). Ce chiffrement est par exemple réalisé par une première entité, qui 5 transmet le chiffré obtenu à une seconde entité pour déchiffrement et recherche. On décrit maintenant un algorithme de déchiffrement DecDPEKS (dk, c) qui déchiffre un chiffré c à l'aide d'une clé de déchiffrement dk. Comme décrit plus haut, selon l'invention, la clé de déchiffrement est la clé ski( générée par l'algorithme KEM. Ainsi, à partir du chiffré c=(cl, c2, c3, c4), le chiffré cl et la clé de 15 déchiffrement ski( permettent de retrouver la clé de session s par l'algorithme de décapsulation du KEM. On déchiffre ensuite c2 avec la clé de session s pour le bloc de chiffrement El, ce qui permet d'obtenir le message voulu m. 20 On vérifie également la validité des chiffrés c3 et c4. Pour ce faire, on entre les valeurs obtenues lors du déchiffrement m et s, dans l'algorithme d'encapsulation de l'ID-KEM pour l'identité correspondant au message Enc,D_KEM(pk,, m, s), afin de vérifier que l'on obtient bien le chiffré c3. Ce chiffré c3 permet d'obtenir une 25 clé u à l'aide de l'algorithme de décapsulation de l'ID-KEM et de la clé privée skm dérivée de la clé maîtresse tk, pour le message m. On peut alors déchiffrer l'aléa r à partir du bloc E2 et de la clé u. On contrôle ensuite la validité du chiffré c en fournissant l'aléa r en entrée du KEM et en vérifiant que l'on obtient bien cl et s. 30 La trappe T(m) fournie pour la recherche de mot clé est définie à partir de la clé de dérivation tk, et du message m en utilisant 10 l'algorithme de dérivation de clés de l'ID-KEM, T(m) = KeyDerlp_ KEM(tkl, pkl, m)= Skm. L'entité chargée de la recherche du message m peut alors réaliser un test pour déterminer si le chiffré (cl, c2, c3, c4) fourni correspond bien à un chiffrement du message m à l'aide de la clé publique pk=(pkK, pki). Selon la définition précédente des cl, i=1 à 4, à partir de c3 et de T(m), on retrouve la clé u par l'algorithme de décapsulation de clés de l'ID-KEM, KDID_KEM(Skm, c3). La clé u permet alors de déchiffrer c4 pour le bloc E2. On obtient alors l'aléa d'entrée r. Avec cet aléa r, on lance EncKEM(pkK, r). On obtient un chiffré cl*, et une clé s*. A l'aide de s*, on déchiffre c2 pour le bloc El, et on obtient m*. On lance alors Enclp_KEM(pkl, m*, s*) pour obtenir un chiffré c3*. Le test selon l'algorithme de la présente invention est alors TeStDPEKS= {cl =cl * & c3=c3* & m=m*}. Ainsi, par l'algorithme tel que décrit précédemment, il est possible à la fois de déchiffrer le chiffré reçu et de tester si le chiffré reçu correspond bien à un mot clé prédéfini résultant du chiffrement par une clé publique fixée. On décrit maintenant des exemples d'algorithmes d'encapsulation de clés KEM et d'encapsulation de clés basés sur une identité IDKEM utilisables dans le cadre de la présente invention. Un exemple de KEM est l'échange de clés selon le protocole de Diffie-Hellman, utilisé dans le chiffrement ElGamal. Dans ce cas, les paramètres publics du système sont un groupe G d'ordre premier q, un générateur g de ce groupe, et un élément y. La clé secrète x est alors le logarithme discret de y en base g. Pour l'encapsulation, on génère une clé à partir d'un aléa r en calculant s=y', et elle est encapsulée dans un chiffré c avec c=g'. La décapsulation d'une clé encapsulée dans un chiffré c est réalisée par s=c". Un exemple de ID-KEM est quant à lui par exemple donné dans la construction de la fonction PEKS dans la publication de Boneh, Di Crescenzo, Ostrovski et Persiano Public key encryption with keyword search EUROCRYPT 2004, Volume 3027 dans Lecture notes in Computer science , pages 506-522. Par ailleurs, il est entendu que le schéma décrit FIG. 1 peut être complété par d'autres fonctions de hachage ou unidirectionnelle et/ou des générateurs pseudo-aléatoires selon le niveau de sécurité requis. On décrit maintenant un second mode de réalisation d'un schéma de chiffrement déchiffrable et cherchable illustré FIG.2. Selon ce second mode de réalisation, afin de réaliser un chiffrement cherchable et déchiffrable, on génère comme précédemment une clé publique pk composée des clés publiques pkK et pk, générées respectivement par l'algorithme de génération de clés KeyGenKEM(lk) d'un algorithme d'encapsulation de clés KEM, et par l'algorithme de génération de clés KeyGen,D_KEM(lk) d'un algorithme d'encapsulation de clés basée sur l'identité IDKEM. Ce mode de réalisation fait également intervenir un bloc de chiffrement symétrique E. Le chiffrement d'un message m est réalisé de la façon suivante. On fournit en entrée de l'ID-KEM, un nombre aléatoire r', et le message m. Ceci génère une clé aléatoire u', qui est ensuite encapsulée dans un chiffré c5. Cette clé u' est ensuite utilisée comme aléa d'entrée pour l'algorithme KEM, de sorte à générer une clé s', qui est encapsulée dans un chiffré c6. Enfin, cette clé s' est fournie en entrée du bloc symétrique E pour chiffrer le couple (m,r) en un chiffré c7. Le chiffré c retourné est alors le triplet (c5, c6, c7). Afin de réaliser le déchiffrement à partir d'un chiffré (c5, c6, c7), la clé de déchiffrement ski( permet d'abord de retrouver la clé s'. Cette clé s' permet ensuite le déchiffrement du chiffré c7 pour le bloc E. Ceci permet de retrouver le message m ainsi que le nombre aléatoire r'. On vérifie ensuite la validité du reste du chiffré en lançant l'algorithmed'encapsulation de l'ID-KEM Enc,D_KEM(pk,, m, r') et en vérifiant que l'on obtient bien c5. L'algorithme d'encapsulation de l'ID-KEM fournit également une clé u', et on lance EncKEM(pki(, u') pour vérifier si l'on obtient bien c6 et s'. Comme dans le mode de réalisation précédent, la trappe utilisée pour la recherche du mot clé m est définie à partir de la clé de dérivation tk, et du message m en utilisant l'algorithme de dérivation de clés de l'ID-KEM, T(m) = KeyDer,D_KEM(tk,, pk,, m)= Skm. L'entité chargée de la recherche du message m peut alors réaliser un test pour déterminer si le chiffré (c5, c6, c7) fourni correspond bien à un chiffrement du message m à l'aide de la clé publique pk=(pkK, pki). Pour ce faire, avec c5 et la trappe T(m), on retrouve une clé u'*. On lance alors EncKEM(pkK, u'*) et on obtient un clé s'* et un chiffré c6*. On déchiffre alors c7 avec la clé s'* pour le bloc E, ce qui donne un couple (m*, r'*). On lance alors l'algorithme d'encapsulation de l'ID-KEM Enc,D_KEM(pk,, m*, r*) et on obtient un chiffré c5*. Le test utilisé est alors TeStDPEKS = {c5=c5*&c6=c6*&m=m*}. REVENDICATIONS 1. Procédé de chiffrement/déchiffrement d'un message (m) comprenant des étapes consistant à : - générer des clés comprenant des sous-étapes consistant à : o générer une clé publique (pk) ; o générer une clé de déchiffrement (dk) associée à ladite clé publique ; o générer une clé de dérivation (tk) associée à ladite clé 10 publique ; pour une première entité, chiffrer ledit message (m) à l'aide de ladite clé publique (pk) en un chiffré (c) ; pour une seconde entité, déchiffrer ledit chiffré (c) pour retrouver ledit message (m) ; 15 générer une trappe (T(m)) associée audit message (m), ladite trappe correspondant à une dérivée de ladite clé de dérivation spécifique audit message (m) ; pour un chiffré de test (c'), tester, à l'aide de ladite trappe (T(m)) associée audit message (m), si ledit chiffré de test (c') 20 est un chiffrement (c) dudit message (m) à l'aide de ladite clé publique (pk). 2. Procédé de chiffrement d'un message (m), comprenant des étapes consistant à : 25 - générer des clés comprenant des sous-étapes consistant à : o générer une clé publique (pk) ; o générer une clé de déchiffrement (dk) associée à ladite clé publique ; o générer une clé de dérivation (tk) associée à ladite clé 30 publique ; dans lequel, ladite clé publique (pk) comprend une première sous-clé (pkk) et une seconde sous-clé (pk,), ladite première sous-clé (pkK) étant une clé publique d'encapsulation d'un premier algorithme d'encapsulation de clé (KEM), dans lequel ladite clé de déchiffrement (tk) est la clé privée (skK) associée à ladite première sous-clé (pkk), ladite seconde sous-clé étant une clé publique basée sur une identité d'un second algorithme d'encapsulation de clé basé sur une identité (ID-KEM), ladite clé de dérivation (tk) étant la clé privée (tk,) associée à ladite seconde sous-clé (pk,), et comprenant des étapes consistant à: - appliquer ledit premier algorithme d'encapsulation de clé (KEM) ; - appliquer ledit second algorithme d'encapsulation de clé basé sur une identité (ID-KEM), le paramètre d'identité dudit second algorithme d'encapsulation de clé basé sur une identité étant ledit message (m). 3. Procédé de chiffrement selon la revendication 2, comprenant des étapes consistant à : o définir un premier bloc de traitement implémentant ledit premier algorithme d'encapsulation de clé (KEM) ; o définir un second bloc de traitement implémentant ledit second algorithme d'encapsulation de clé basé sur une identité (IDKEM) ; o définir un troisième bloc de traitement (E1) ; o définir un quatrième bloc de traitement (E2) ; o fournir en entrée dudit premier bloc de traitement, un premier paramètre d'entrée (r) ; o générer, en sortie dudit premier bloc de traitement, une première sortie correspondant à une première clé de session symétrique (s), et une seconde sortie correspondant à un premier chiffré de clé (cl) de ladite première clé de session à l'aide de ladite première sous-clé (pkK) ; o fournir ladite première clé de session en entrée dudit troisième bloc de traitement ; o fournir ledit message en entrée dudit troisième bloc ; o générer un second chiffré de message (c2) à l'aide de ladite première clé de session symétrique et dudit message ; o fournir ladite première clé de session en entrée dudit second bloc de traitement ; o fournir ledit message en entrée dudit second bloc de traitement ; o générer, en sortie dudit second bloc de traitement, une première sortie correspondant à une seconde clé de session symétrique (u), et une seconde sortie correspondant à un troisième chiffré de clé (c3) de ladite seconde clé de session à l'aide de ladite seconde sous-clé et dudit message ; o fournir ladite seconde clé de session en entrée dudit quatrième bloc de traitement ; o fournir ledit premier paramètre d'entrée en entrée dudit quatrième bloc de traitement ; o générer un quatrième chiffré de paramètre (c4) à l'aide dudit premier paramètre d'entrée et de ladite seconde clé de session ; dans lequel ledit chiffré comprend ledit premier chiffré, ledit second chiffré, ledit troisième chiffré et ledit quatrième chiffré. 4. Procédé de déchiffrement d'un message chiffré selon la revendication 3, comprenant des étapes consistant à : - retrouver ladite première clé de session symétrique (s) à partir dudit premier chiffré (cl) et de ladite clé de déchiffrement ; - déchiffrer ledit second chiffré (c2) à l'aide de ladite clé de session symétrique (s) pour ledit troisième bloc de traitement ; - retrouver ledit message (m). 5. Procédé de chiffrement selon la revendication 2, comprenant des étapes consistant à : o définir un cinquième bloc de traitement implémentant ledit second algorithme d'encapsulation de clé basé sur une identité (IDKEM) ; o définir un sixième bloc de traitement implémentant ledit premier algorithme d'encapsulation de clé (KEM) ; o définir un septième bloc de traitement (E) ; o fournir en entrée dudit cinquième bloc de traitement, un second paramètre d'entrée (r') ; o fournir en entrée dudit cinquième bloc de traitement, ledit message (m) ; o générer, en sortie dudit cinquième bloc de traitement, une première sortie correspondant à une troisième clé de session symétrique (u'), et une seconde sortie correspondant à un cinquième chiffré de clé (c5) de ladite troisième clé de session à l'aide de ladite seconde sous-clé (pki) et dudit message ; o fournir ladite troisième clé de session symétrique (u') audit sixième bloc de traitement (KEM) ; o générer, en sortie dudit sixième bloc de traitement (KEM), une première sortie correspondant à une quatrième clé de session symétrique (s'), et une seconde sortie correspondant à un sixième chiffré de clé (c6) de ladite quatrième clé de session à l'aide de ladite première sous-clé (pkK) ; o fournir en entrée dudit septième bloc de traitement (E) ladite quatrième clé de session (s') ; o fournir en entrée dudit septième bloc de traitement, ledit second paramètre d'entrée (r') ; o fournir en entrée dudit septième bloc de traitement, ledit message (m) ; o générer, en sortie dudit septième bloc de traitement, un septième chiffré (c7) correspondant à un chiffré dudit message (m) et dudit second paramètre (r') par ladite quatrième clé de session (s') ; dans lequel ledit chiffré comprend ledit cinquième chiffré, ledit sixième chiffré et ledit septième chiffré. 6. Procédé de déchiffrement d'un message chiffré selon la revendication 5 comprenant des étapes consistant à : - retrouver ladite quatrième clé de session symétrique (s') à partir dudit sixième chiffré (c6) et de ladite clé de déchiffrement ; - déchiffrer ledit septième chiffré (c7) à l'aide de ladite quatrième clé de session symétrique (s') pour ledit septième bloc de traitement ; - retrouver ledit message (m). 7. Programme d'ordinateur comprenant un code lisible par au moins un ordinateur, ledit code provoquant l'exécution par ledit au moins un ordinateur des étapes du procédé selon l'une des revendications précédentes. 8. Cryptosystème pour le chiffrement/déchiffrement d'un message (m), ledit cryptosystème comprenant : - une unité de génération de clés apte à générer des clés de chiffrement, ladite première unité comprenant : o une première sous-unité apte à générer une clé publique (pk) ; o une seconde sous-unité apte à générer une clé de déchiffrement (dk) associée à ladite clé publique ; o une troisième sous-unité apte à générer d'une clé de dérivation (tk) associée à ladite clé publique ; - une unité de chiffrement apte à chiffrer ledit message (m) à l'aide de ladite clé publique (pk) en un chiffré (c) ; - une unité de déchiffrement apte à déchiffrer ledit chiffré (c) pour retrouver ledit message (m) ; - une unité de génération d'une trappe apte à générer une trappe (T(m)) associée audit message (m), ladite trappe correspondant à une dérivée de ladite clé de dérivation spécifique audit message (m) ; - une unité de test apte, pour un chiffré de test (c'), à l'aide de ladite trappe (T(m)) associée audit message (m), à tester si ledit chiffré de test (c') est un chiffrement (c) dudit message (m) à l'aide de ladite clé publique (pk). 9. Unité de chiffrement comprenant - une unité de génération de clés apte à générer des clés de chiffrement, ladite première unité comprenant : o une première sous-unité apte à générer une clé publique (pk) ; o une seconde sous-unité apte à générer une clé de déchiffrement (dk) associée à ladite clé publique ; o une troisième sous-unité apte à générer d'une clé de dérivation (tk) associée à ladite clé publique ; dans lequel, ladite clé publique (pk) comprend une première sous- clé (pkk) et une seconde sous-clé (pk,), ladite première sous-clé (pkk) étant une clé publique d'encapsulation d'un premier algorithme d'encapsulation de clé (KEM), dans lequel ladite clé de déchiffrement (dk) est la clé privée (skk) associée à ladite première sous-clé (pkk), ladite seconde sous-clé (pki) étant une clé publique basée sur une identité, d'un second algorithme d'encapsulation de clé basé sur une identité (ID-KEM), ladite clé de dérivation (tk) étant la clé privée (ski) associée à ladite seconde sous-clé, ladite unité de chiffrement comprenant en outre, - une première sous-unité d'encapsulation de clé apte à appliquer ledit premier algorithme d'encapsulation de clé (KEM) ; - une seconde sous-unité d'encapsulation de clé basée sur l'identité apte à appliquer ledit second algorithme d'encapsulation de clé basé sur une identité (ID-KEM), le paramètre d'identité dudit second algorithme d'encapsulation de clé basé sur une identité étant ledit message (m).