FR 2979043 A1 20130215 FR 1157331 A 20110812 Dispositif et procédé de compression de clés publiques pour algorithme de chiffrement pleinement homomorphique L'invention concerne les dispositifs de chiffrement dit pleinement homomorphique. Plus précisément, l'invention concerne la mise en oeuvre d'opérations et de traitements numériques de génération de clés destinées à un algorithme de chiffrement homomorphique mis en oeuvre dans des microprocesseurs et ce de façon à procurer une taille de clé publique significativement plus réduite que l'art antérieur. L'invention concerne tout particulièrement les infrastructures et dispositifs de génération de clés. Le traitement cryptographique de données numériques nécessite souvent d'effectuer des opérations de chiffrement à clé publique. Dans un algorithme de chiffrement à clé publique, le chiffreur chiffre un message m à l'aide d'un algorithme de chiffrement Enc en un chiffré c = Enc(PK,m), à l'aide d'une clé publique, notée PK. Le destinataire du message, déchiffre le chiffré c en appliquant une fonction de déchiffrement Dec telle que m=Dec(SK,c) où SK est une clé secrète liée à la clé publique PK. Les clés publique et secrète (respectivement PK et SK) sont générées à l'aide d'un algorithme probabiliste dit algorithme de génération de clés 20 Gen. Par exemple, des algorithmes de chiffrement à clé publique célèbres sont l'algorithme dit RSA décrit dans le brevet américain U.S. 4,405,829, ou l'échange de clés Diffie-Hellman décrit dans le brevet américain U.S. 4,200,770. 25 Il est particulièrement intéressant, pour de nombreuses applications pratiques, de disposer d'un Algorithme de Chiffrement Pleinement Homomorphique à clé Publique (ACPH). Un ACPH comporte outre les algorithmes Enc et Dec, deux autres algorithmes notés Add et Mul ayant, pour tous messages m[1] et m[2], les propriétés suivantes : - m[1] x m[2]=Dec(SK, Mul(Enc(PK,m[1]), Enc(PK,m[2]))) - m[1] + m[2]=Dec(SK, Add(Enc(PK,m[1]), Enc(PK,m[2]))) Il est possible de montrer que même si les opérations m[1] + m[2] et m[1] x m[2] s'entendent modulo 2 (à savoir « + » représente l'opération logique de « ou exclusif » et « x » représente le « et logique »), on peut coder n'importe quel traitement complexe de données à l'aide de ces deux seules opérations. Les applications des ACPH sont multiples : - Des ACPH permettent par exemple d'effectuer des calculs sur les données médicales de patients présents dans une base de données sans pour autant avoir à révéler leur identité ni les détails de leur condition médicale exacte. - Des ACPH permettent de connaître le nombre de voix obtenues par les candidats d'une élection sans que l'on dévoile l'identité des votants. - Des ACPH permettent la création de protocoles de paiement 20 anonymes. - Des ACPH permettent la création d'un système de ventes où le montant des enchères resterait inconnu, afin d'éviter que le vendeur cherche la surenchère. Seul le montant le plus important serait dévoilé à la fin de la procédure. 25 Un premier ACPH a été publié par Craig Gentry dans le document Dl correspondant à l'article intitulé « Fully Homomorphic Encryption Using Ideal Lanices » paru dans les actes du colloque 41st ACM Symposium on Theory of Computing (STOC), 2009. Ce procédé souffrant d'une grande complexité de mise en oeuvre, 30 un second procédé d'ACPH, basé sur l'arithmétique sur les entiers fut proposé par Marten van Dijk, Craig Gentry, Shai Halevi, et Vinod Vaikuntanathan (vDGHV) dans le document D2 correspondant à l'article intitulé « Fully Homomorphic Encryption over the Integers » paru dans les actes du colloque EUROCRYPT'2010 aux pages 24 à 43. Une première réduction de la taille de la clé publique de l'algorithme D2 est décrite dans le document D3 correspondant à l'article intitulé « Fully Homomorphic Encryption over the Integers with Shorter Public Keys », paru dans les actes du colloque CRYPTO'2011, volume 6841 de la collection Lecture Notes in Computer Science, pages 483 et suivantes par Jean-Sébastien Coron and Avradip Mandal, David Naccache et Mehdi Tibouchi (CMNT). Le document D3 corrige également une faille de sécurité dans D2 en remarquant que le paramètre p doit être un nombre difficile ou impossible à factoriser. Plus récemment, un autre ACPH a été publié par Zvika Brakerski et Vinod Vaikuntanathan dans le document D4a correspondant à l'article intitulé « Efficient fully homomorphic encryption from (standard) LVVE » paru dans les actes de FOCS 2011 ainsi que dans le document D4b correspondant à l'article « Fully homomorphic encryption for ring-LVVE and security for key dependent messages » publié dans les actes du colloque CRYPTO 2011 par Zvika Brakerski et Vinod Vaikuntanathan. Par opposition à D2 et D3, les ACPHs décrits dans D4a et D4b sont basés sur le problème dit « LWE », bien connu à l'homme de l'art et décrit par Oded Regev dans l'article « On lattices, learning with errors, random linear codes, and cryptography » paru dans les actes du 37e colloque annuel ACM symposium on Theory of computing, 2005, pages 84-93. Dans la méthode vDGHV, décrite dans D2, un procédé de génération Gen de clés secrètes et publiques commence par générer un nombre impair p correspondant à une clé secrète SK, appelée clé secrète vDGHV, et une clé publique PK, appelée clé publique vDGHV correspondant à une collection de nombres entiers xLi] = ex p + rai] pour i allant de 0 à k, où q[i] et r[i] sont des nombres aléatoires respectant les contraintes spécifiées dans les document D2 et/ou D3. Les nombres x[i] sont tels que r[i] est de faible taille relativement à x[i] (par exemple, dans D2, r[i] est un nombre de 80 ou 100 bits). Dans une des variantes décrites dans D2, l'un des éléments de la clé publique vDGHV, l'élément noté x[0], présente une particularité : pour l'élément x[0], la condition r40]=0 doit être observée. L'emploi de x[0] n'est pas obligatoires et une version de l'algorithme sans x[0] est également décrite dans D2. Nous noterons de manière générique par 11=0 ou 11=1 l'index par lequel débute la variante considérée. Afin de chiffrer (via l'algorithme Enc) un bit m, l'expéditeur calcule : c=m+2r+2Z où: - r est un nombre aléatoire de taille à peu près similaire à celle des r[i] (la différence pouvant par exemple être d'un bit ou deux) ; - Z = x[1] e[1] + ... + xLk] eLk] où les e[i] sont des bits aléatoires (i.e e[i] = 0 ou 1 de manière aléatoire) ou des petits entiers. - Si la variante à x[0] est utilisée le chiffré est réduit modulo x[0]. Afin de déchiffrer (via l'algorithme Dec) un chiffré c, le récepteur calcule : m = (c mod p) mod 2. La mise en oeuvre des opérations Add et Mul, utilise la technique dite de « bootstrapping », connue de l'homme du métier et décrite dans les documents Dl et D2. Le procédé de génération de la clé publique vDGHV, dont il a été question précédemment est mis en oeuvre sur un dispositif matériel 10 dont l'architecture matérielle est illustrée par la figure 1. Un microprocesseur 11 est connecté à un moyen d'interface d'entrée et de sortie de données 12, à un générateur aléatoire ou pseudo-aléatoire 13 et à une mémoire 14 dans laquelle le microprocesseur lit les instructions encodant un programme Pg mettant en oeuvre le procédé de génération Gen de clés vDGHV. Au démarrage, le microprocesseur 11 commence à lire le programme Pg dans la mémoire 14. Lors de son exécution sur le microprocesseur 11, le programme Pg génère la clé secrète SK correspondant à un nombre impair p, et la clé publique PK = xLb], ...,xLk]. Une fois les éléments x[i] obtenus, le programme Pg donne instruction au microprocesseur 11 de communiquer les éléments xLb],...,xLk] via l'interface d'entrée et de sortie de données 12 à destination d'un autre dispositif. Le procédé de génération Gen de clés vDGHV (variante à b=0), 10 illustré par la figure 2, met en oeuvre les étapes suivantes (dans n'importe quel ordre) : - Etape 21 : définir r40]=0 ; - Etape 22 : Générer un nombre aléatoire impair p (correspondant à la clé secrète SK) ; 15 Il est connu (document D3) que dans le cas de la variante à b=0, le paramètre p doit être un entier difficile ou impossible à factoriser afin de doter l'algorithme de chiffrement d'un niveau de sécurité approprié. - Etape 23 : Générer k nombres aléatoires rai] notés r[1], ...,rLk] ; 20 - Etape 24 : Générer k+1 nombres aléatoires q[i] notés ge0],...,qWk]. Puis, une étape finale 25 est mise en oeuvre afin de former les éléments x[i] = q[i] p + rai] pour i allant de 0 à k. Les élements x[i] définissant alors la clé publique PK. Remarquons que les étapes 21, 22, 23 et 24 peuvent être réalisées 25 dans n'importe quel ordre. Le procédé de génération Gen de clés de l'ACPH de vDGHV mentionné précédemment présente l'inconvénient de produire une clé publique de taille gigantesque. En effet, même avec l'amélioration décrite dans document D3, la clé 30 publique PK reste une collection de k+b entiers x[i] définis par les relations x[i]=q[i]x p+r[i] pour i=b,...k où p est un nombre de taille eta bits. Les entiers q[i] sont des entiers de taille gamma-eta bits et les r[i] sont des entiers petits de taille rho bits. Pour des raisons de sécurité, il est recommandé de prendre gamma de l'ordre de 2 x107 bits, eta de l'ordre de 3000 bits et rho de l'ordre de 40 bits. Ceci résulte en une collection de x[i] dont la taille totale est de l'ordre de 800 mégaoctets. Une telle clé est gigantesque et empêche tout déploiement industriel pratique de cet ACPH. L'invention a donc pour objectif principal de réduire la taille de la clé publique de plusieurs ordres de grandeur. L'invention a pour second objectif d'accélérer au moins l'une des opérations Enc, Dec, Mul, Add de l'ACPH de vDGHV par le choix d'au moins un x[i] permettant des calculs plus rapides. L'invention a plus généralement pour objectif de pallier à au moins certains inconvénients de l'ACPH connu de vDGHV. Plus précisément, un premier objectif de l'invention est de fournir une technique permettant de générer des clés publiques beaucoup plus courtes pour l'ACPH de vDGHV décrit précédemment. L'invention s'applique aussi, mutatis mutandis, aux ACPH décrits dans D3, D4a et D4b. Un autre objectif d'au moins un mode de réalisation de l'invention est de fournir une technique permettant d'accélérer au moins l'une des opérations Enc, Dec, Mul, Add de l'ACPH de vDGHV par le choix d'au moins un x[i] permettant des calculs plus rapides. A cette fin, il est proposé un procédé génération de clés publiques compressées d[i], pour un algorithme de chiffrement pleinement homomorphique à clé publique, mis en oeuvre dans un dispositif comprenant au moins un microprocesseur et une mémoire. Selon l'invention, ledit procédé de génération de clés publiques compressées comporte une étape de génération déterministe, publique et préférablement pseudo-aléatoire d'au moins un élément de structure algébrique t[i] dont la transformation publique en au moins un élément de structure algébrique x[i] de la clé publique décompressée s'effectue par l'ajout ou par la soustraction à tLi] d'au moins un élément de structure algébrique d[i], dont la taille est significativement inférieure à la taille de x[i]. Un tel procédé peut comporter une étape pour substituer ledit « au moins un élément de structure algébrique d[i] » audit « au moins un élément de structure algébrique x[i] » dans la clé publique compressée. Un procédé conforme à l'invention peut générer des clés publiques compressées pour l'ACPH de vDGHV ou pour l'ACPH de CMNT. Il comporte dès lors les étapes suivantes : (a) Générer un entier impair secret p ; (b) Générer de manière déterministe, publique et préférablement pseudo-aléatoire une collection d'entiers pseudo-aléatoires t[i] ; (c) Générer de manière aléatoire ou pseudo-aléatoire des entiers secrets r[i] ; (c) Déduire des entiers t[i] et r[i] les clés publiques compressées d[i] définies par la relation d[i]=r[i]-t[i] mod p ; (d) Retourner la clé publique compressée PKcomp constituée par l'ensemble des entiers d[i] et par l'information publique nécessaire afin de régénérer les entiers tai]. Remarquons que les étapes a, b et c peuvent être réalisées dans n'importe quel ordre. Un procédé conforme à l'invention peut en outre générer des clés publiques compressées pour l'ACPH de vDGHV ou pour l'ACPH de 25 CMNT lorsque l'un des entiers r[i] est nul. Un procédé conforme à l'invention peut en outre générer des clés publiques compressées pour l'ACPH de CMNT où les éléments x[i] se déclinent en deux familles dites x[i3O] et x[i,1] et où la définition des x[i,j] décompressés est modifiée de x[i,j] = t[i,j]+d[i,j]= t[i,j]+(r[i,j]-t[i,j] mod p) à 30 x[i,j]= t[i,j] + D[i,j]= t[i,j]+(al-21 r[i,j]-t[i,j] mod p) où a est un nombre secret, aléatoire et inversible modulo p et où les D[i,j] remplacent les d[i,j] dans PKcomp. En variante, les deux ensembles d'éléments de la clé publique décompressée (x[i3O]} et (x[i,1]}, peuvent être fusionnés en un ensemble unique (x[i]} au sein duquel sont choisis aléatoirement des couples d'éléments (x[i1], x[i2]) dont les produits x[il]8x[i2] servent à la création du chiffré. Il peut alors être prévu que la définition des éléments de l'ensemble fusionné (x[i]} soit modifiée à x[i]= t[i]+(a-1r[i]-t[i] mod p) où a est un nombre secret, aléatoire et inversible modulo p, dont le carré A = a2 mod p est intégré dans PKcomp de sorte à ce que, lors du chiffrement, la multiplication x[i1]8x[i2] puisse être remplacée par une multiplication corrigée à x[il]8x[i2]8A. L'invention prévoit qu'un procédé conforme à l'invention puisse générer des clés publiques compressées pour l'ACPH de Brakerski et Vaikuntanathan. Selon cette variante, le procédé comporte les étapes suivantes, où la notation « vec » désigne un vecteur dans (Zp)n : (a) Prendre pour clé secrète vec(s) un élément aléatoire de (Zp)n; (b) Générer un vecteur vec(a[i]) de manière déterministe, publique et préférablement pseudo-aléatoire ; (c) Prendre pour r[i] des petits aléas dans Zp ; (d) Retourner la clé publique compressée PKcomp constituée par l'ensemble des entiers d[i]= +r[i] mod p et par l'information publique nécessaire pour régénérer les vecteurs vec(a[i]). Remarquons que les étapes a, b et c peuvent être réalisées dans 25 n'importe quel ordre. Avantageusement, l'invention prévoit, pour certains procédés conformes à l'invention, que les entiers d[i] puissent être protégés par l'ajout ou la soustraction d'une quantité z[i]x p où z[i] est un entier aléatoire secret de taille comprise entre 1 et 200 bits. L'invention prévoit qu'un procédé de compression conforme à l'invention admette un procédé de décompression associé. Un tel procédé comporte les étapes suivantes : - Régénérer les éléments t[i] ; - Ajouter ou soustraire à chaque t[i] l'élément d[i] afin d'obtenir un élément x[i] de la clé publique décompressée, ou afin d'obtenir un élément x'[i] lié à x[i] et intervenant dans l'opération de chiffrement. Selon le procédé de compression prévu par l'invention pour l'ACPH de vDGHV ou pour l'ACPH de CMNT, un tel procédé de décompression, mis en oeuvre dans un dispositif comprenant au moins un microprocesseur et une mémoire, peut se caractériser par le fait que la clé publique décompressée x[i] correspondante à PKcomp est formée par l'ensemble des entiers x[i]=t[i]+d[i] où les t[i] sont régénérés par le chiffreur et où les d[i] sont lus dans la clé publique compressée. En variante, dans le cas de l'ACPH de Brakerski et Vaikuntanathan, la clé publique décompressée x[i] correspondante à PKcomp peut être formée par l'ensemble des xLi] = (vec(a[i]),d[i]) = (vec(a[i]), +r[i] mod p) où les éléments vec(a[i]) sont régénérés de manière déterministe, publique et préférablement pseudo-aléatoire par le chiffreur et où les éléments d[i] sont lus dans la clé publique compressée. L'invention prévoit que pour un procédé conforme à l'invention, la génération de manière déterministe, publique et préférablement pseudoaléatoire de données puisse s'effectuer à l'aide d'un générateur pseudoaléatoire auquel sont fournies en entrée une graine à expanser et un indice i de la donnée t[i] à générer. L'invention prévoit également un dispositif comprenant au moins un microprocesseur coopérant avec un moyen d'interface d'entrée et de sortie de données, un générateur aléatoire et une mémoire. Ledit microprocesseur est adapté pour mettre en oeuvre des moyens de génération, compression ou décompression de clés publiques compressées d[i], pour un algorithme de chiffrement pleinement homomorphique à clé publique, selon l'invention. L'invention prévoit en outre un produit programme d'ordinateur, comprenant des instructions de code de programme pour la mise en oeuvre du procédé conforme à l'invention lorsque ledit programme est exécuté sur un ordinateur. Il est également prévu un médium de stockage lisible par ordinateur et non transitoire, stockant un programme d'ordinateur comprenant un jeu d'instructions exécutables par un ordinateur ou un processeur pour mettre en oeuvre un procédé conforme à l'invention. D'autres caractéristiques et avantages apparaîtront plus clairement à la lecture de la description qui suit et à l'examen des figures qui l'accompagnent parmi lesquelles : - la figure 1 (précédemment décrite) présente un dispositif matériel de génération de clés de l'ACPH de vDGHV selon l'art antérieur (commun aux variantes b=0 et b=1) ; - la figure 2 (précédemment décrite) présente les étapes principales d'un procédé de génération Gen de clés de l'ACPH de vDGHV (variante à 20 sécurité renforcée à b=0 selon D3) ; - la figure 3 présente des étapes d'un procédé de génération Gen' de clés conforme à l'invention. De manière détaillée, il est prévu qu'un procédé de génération de 25 clés secrètes et publiques Gen' de l'ACPH de vDGHV produisant une clé publique de taille réduite, puisse comprendre une étape de génération d'une clé secrète SK correspondant à la génération d'un nombre aléatoire p impair (si b=1) ou difficile ou impossible à factoriser (si b=0). Un tel procédé de génération de clé publique comprend la 30 génération déterministe, publique et préférablement pseudo-aléatoire de k+b entiers t[i] de taille gamma bits et leur transformation en k+b entiers x[i] de gamma bits en leur ajoutant des facteurs correctifs d[i] de taille eta bits, eta étant beaucoup plus petit que gamma. La génération déterministe, publique et préférablement pseudoaléatoire (ci-après « DPPPA ») dont il est question pour la génération des entiers t[i] est idéalement un générateur pseudo-aléatoire F(se,i)-t[i] dont la graine se est intégrée dans la clé publique compressée. Cependant, il est clair à l'homme de l'art que les t[i] peuvent également être des séquences constantes de chiffres, par exemple, des morceaux successifs de gamma bits, prélevés par F[i] en position gammaxi sur une constante telle que pi=3,14159... Nous noterons par F(se,i) la fonction servant à la génération DPPPA des tai], et ce y compris lorsque F n'utilise pas de graine se. Un tel procédé assure, selon un premier mode de réalisation, la génération d'éléments de clé publique compressés d[i], donc beaucoup plus courtes que les x[i], pouvant être utilisées avec les ACPHs publiés dans les documents D2 et/ou D3 dont les procédés de génération Gen sont modifiés en un procédé de génération inventif Gen' de sorte à comporter les étapes suivantes : (a) si b=0 définir r40]=0 ; (b) générer un nombre aléatoire p, impair (si b=1) ou difficile ou 20 impossible à factoriser (si b=0) ; (c) générer k nombres aléatoires ou pseudo-aléatoires secrets r[i] notés r[1], ...,r[k] ; (d) générer de manière DPPPA à partir d'une graine se les k+b nombres pseudo-aléatoires F(se,i)-t[i] notés tLb],...,tLk]; 25 (e) former des éléments d[i] = r[i]-t[i] mod p pour i allant de b à k; (f) retourner ladite clé publique compressée PKcomp = {se, d[b],...,dLk]} et la clé secrète SK = p. Remarquons que les étapes a, b, c et d peuvent être réalisées dans n'importe quel ordre. 30 Ladite clé publique compressée PKcomp peut se décompresser de manière publique ainsi : (a) régénérer à l'aide de F à partir de la graine se les k+b nombres pseudo-aléatoires t[0], ..., tLk] ; (b) former des éléments x[i] = tLi]+d[i] pour i allant de b à k; (c) retourner ladite clé publique décompressée PK = {x[b],...,xLk]} dont l'emploi est parfaitement similaire et compatible aux clés x[i] de l'ACPH de vDGHV et aux clés x[i] dont il est question dans D3. Ainsi, ce procédé permet un décroissement considérable de la taille de la clé publique. Dans une variante, il est proposé un procédé de génération de clés pour les ACPH décrits dans D2 et/ou D3 modifié en ce que la fonction F a pour but de permettre la génération d'au moins un x[i] dont les propriétés arithmétiques sont de nature à accélérer au moins l'une des opérations Dec, Enc, Mul ou Add. Une exemple d'une telle fonction F permettant l'accélération de calculs dans le cas b=0 est la génération d'un x[0] ayant une forme particulière permettant d'accélérer la réduction modulaire modulo x[0]. Un autre exemple d'une telle fonction F permettant l'accélération de calculs est un F générant au moins un t[i] résultant en au moins un x[i] dont la multiplication par la méthode dite de FFT (« Fast Fourier Transform ») est plus rapide ou plus aisée. Un autre exemple d'une telle fonction F permettant l'accélération de calculs est un F générant au moins un t[i] présentant des séquences de chiffres partiellement périodiques rendant les opérations de multiplication ou d'addition plus aisées. Dans une autre variante, il est proposé d'étendre les techniques précédentes applicables aux ACPH de D2 et/ou D3 aux ACPHs basés sur le problème LWE décrits dans D4a et D4b. De telles extensions étant évidentes à l'homme de l'art. L'invention prévoit également un dispositif de calcul comportant un microprocesseur coopérant avec un moyen d'interface d'entrée et de sortie de données, un générateur aléatoire et une mémoire de laquelle ledit microprocesseur lit les instructions encodant un programme inventif de génération de clés fonctionnant selon l'un quelconque des procédés décrits précédemment. La génération inventive des éléments x[i] de la clé publique compressée PKcomp à taille réduite pour un ACPH de type D2 ou de type D3 sur une architecture matérielle est effectuée de la manière suivante. L'architecture matérielle du dispositif selon l'invention (non représenté) reprend les éléments de l'architecture matérielle du dispositif 10 de l'art antérieur décrit dans la figure 1, à savoir un microprocesseur 11 coopérant avec un moyen d'interface d'entrée et de sortie de données 12, un générateur aléatoire 13 et une mémoire 14 de laquelle le microprocesseur 11 lit les instructions encodant mettant en oeuvre le procédé de génération Gen' de clés selon un mode de réalisation de l'invention. Le procédé de génération inventif Gen' de clés compressées diffère du procédé de génération Gen de clés décrit précédemment par l'étape de génération de la clé publique de l'art antérieur. Au démarrage, le microprocesseur 11 génère la clé secrète p selon un mode de réalisation de l'invention, et les éléments correspondants PKcomp-(se, d[b],...,dLk]} de la clé publique compressée. Une fois les éléments x[i] générés, le dispositif selon l'invention transmet PKcomp à destination d'un autre dispositif via l'interface d'entrée et de sortie de données 12. La figure 3 présente des étapes d'un procédé inventif de génération Gen' de clés compressées, dans le cas b=0, selon un mode de réalisation de l'invention : (a) étape 31 : définir r40]=0 ; (b) étape 32 : générer un nombre aléatoire p, difficile ou impossible à factoriser ; (c) étape 33: générer k nombres aléatoires ou pseudo-aléatoires secrets r[i] notés r[1], ..., rLk] ; (d) étape 34: générer de manière DPPPA k+1 nombres t[i] notés tL0],..., tLk] à partir d'une graine se ; (e) étape 35 : former des éléments dLi] = r[i]-t[i] mod p pour i allant de0àk; (f) étape 36 : retourner ladite clé publique compressée PKcomp = {se, d[0],...,dLk]} et la clé secrète SK = p. Remarquons que les étapes a,b,c et d peuvent être réalisées dans 10 n'importe quel ordre. La décompression de PKcomp en une clé décompressée s'effectue selon les étapes suivantes : (a) recevoir PKcomp = {se, d~0], ...,d~k]} ; (b) régénérer les k+1 nombres tL0],..., tLk] à partir de la graine se ; 15 (c) calculer x[i] = t[i] + dLi] pour i allant de 0 à k ; (d) retourner la clé décompressée PK = (xL0],...,xLk]}. Selon un premier mode de réalisation, les dLi] ont une taille significativement plus courte que les x[i]. Selon un second mode de réalisation, au moins un x[i] est construit 20 afin d'avoir une forme ou des propriétés facilitant ou accélérant l'exécution d'au moins l'un les algorithmes Enc, Dec, Add ou Mul. Par exemple, dans le cas b=0 un tel mode de génération de nombres x[0] est connu de l'homme du métier et est, par exemple utilisé afin de générer des clés publiques particulières pour l'algorithme RSA. Un tel algorithme est 25 par exemple décrit dans le document D5 correspondant l'article de Arjen Lenstra intitulé « Generating RSA moduli with a predetermined portion », publié dans les actes du colloque ASIACRYPT 1998. Selon un troisième mode de réalisation au moins l'un des t[i] est 30 généré de sorte à résulter en au moins un x[i] dont la multiplication par la méthode dite de FFT (« Fast Fourier Transform ») est plus rapide ou plus aisée. Par exemple, x[i] peut être généré directement en représentation FFT de sorte à ne pas avoir à être traduit en polynôme. Selon un quatrième mode de réalisation les rho bits les moins significatifs des d[i] sont remplacés par des zéros. Ceci permet une 5 compression supplémentaire de la clé publique. Dans les quatre cas précédents, les tailles des paramètres p, x[i] et r[i] suivent les mêmes recommandations que celles décrites dans le document D2 ou dans le document D3. Selon un cinquième mode de réalisation, propre seulement à la 10 variante du document D3, où les éléments x[i] se déclinent en deux familles (dites x[i3O] et x[i,1]), il est proposé de modifier la définition des x[i,j] décompressées de x[i,j]=t[i,j]+d[i,j]=t[i,j]+(r[i,j]-t[i,j] mod p) en x[i,j]= t[i,j]+D[i,j] où D[i,j]=(a1-2' r[i,j]-t[i,j] mod p) et où a est un nombre aléatoire inversible modulo p. Il est évident à l'homme de l'art qu'une telle variante, 15 qui n'a pas d'impact sur la sécurité, permet une réduction supplémentaire de la taille de la PKcomp dont les éléments sont maintenant D[i,j]. Selon un sixième mode de réalisation, propre seulement à la variante du document D3, où les éléments de la clé publique se déclinent en deux ensembles (dits (x[i3O]} et (x[i,1]}), il est proposé de fusionner les 20 deux ensembles (x[i3O]} et (x[i,1]} en un ensemble unique (x[i]} au sein duquel sont choisis aléatoirement des couples d'éléments (x[i1], x[i2]) dont les produits remplacent les produits de couples d'éléments (x[i3O], x[i,1]) lors du chiffrement. Il est évident à l'homme de l'art qu'une telle variante permet une réduction supplémentaire de la taille de PKcomp. 25 Selon un septième mode de réalisation, la définition des éléments de l'ensemble fusionné (x[i]} du sixième mode de réalisation est modifiée à x[i]= t[i]+(a-1r[i]-t[i] mod p) où a est un nombre aléatoire inversible modulo p, dont le carré A = a2 mod p est intégré dans PKcomp. Lors du chiffrement, la multiplication x[i1]xx[i2] est remplacée par la multiplication corrigée 30 x[i1]xx[i2]XA. Il est évident à l'homme de l'art qu'une telle variante permet une réduction supplémentaire de la taille de la PKcomp. Selon un huitième mode de réalisation, afin d'obtenir une réduction supplémentaire de la taille de PKcomp lors de la mise en oeuvre du septième mode de réalisation, l'entier A pourrait être généré de manière DPPPA et sa racine a calculée ensuite, connaissant la valeur de p. Selon un neuvième mode de réalisation, le procédé inventif peut aussi s'étendre à l'ACPH décrit dans D4a et D4b. Par la suite la notation «vec » désignera un vecteur dans K=(Zp)n. alors que les nombres dépourvus de la notation « vec » seront des entiers. Dans l'ACPH décrit dans D4a et D4b la clé publique est un ensemble de chiffrés de la forme x[i] = (vec(a[i]), +r[i] mod p) où vec(a[i]) est un élément aléatoire de K et la clé secrète vec(s) est aussi un élément aléatoire de K. r[i] est un petit bruit aléatoire pris dans Zp. Ainsi, afin de transposer le procédé inventif à la compression d'une clé publique pour ACPH de type D4a ou D4b, il suffit de générer les vec(a[i]) de manière DPPPA et ne sauvegarder que les termes correctifs de la clé publique compressée d[i]= +r[i] mod p. Selon un dixième mode de réalisation les données d[i] générées pour les ACPHs décrits dans les documents D2, D3, D4a ou D4b, peuvent faire l'objet d'une protection renforcée par l'ajout d'un multiple supplémentaire de p. Ainsi, pour le cas de l'ACPH du document D2, la clé compressée renforcée d'[i] est définie par la relation d'[i] = d[i] + z[i] p = (r[i]-t[i] mod p)+ z[i] p où z[i] est un entier signé aléatoire dont la recherche exhaustive dépasse les moyens de calcul actuels. Selon un onzième mode de réalisation, la génération de manière DPPPA de données dont il est question dans le présent document peut s'effectuer à l'aide d'un générateur pseudo-aléatoire auquel sont fournies en entrée une graine à expanser et un indice i de la donnée à générer. Par ailleurs, l'une quelconque des variantes du procédé selon l'invention, décrites précédemment, peut également être implémentée sous forme de matériel dans un composant programmable de type FPGA (« Field Programmable Gate Array » en anglais) ou de type ASIC Application-Specific Integrated Circuit » en anglais). (« REVENDICATIONS1. Procédé de génération de clés publiques compressées d[i], pour un algorithme de chiffrement pleinement homomorphique à clé publique, mis en oeuvre dans un dispositif comprenant au moins un microprocesseur (11) et une mémoire (14), ledit procédé de génération de clés publiques compressées étant caractérisé en ce qu'il comporte une étape (34) de génération déterministe, publique et préférablement pseudoaléatoire d'au moins un élément de structure algébrique t[i] dont la transformation publique (35) en au moins un élément de structure algébrique x[i] de la clé publique décompressée s'effectue par l'ajout ou par la soustraction à t[i] d'au moins un élément de structure algébrique d[i], dont la taille est significativement inférieure à la taille de x[i]. 2. Procédé selon la revendication 1, caractérisé en ce qu'il comporte une étape pour substituer ledit au moins un élément de structure algébrique d[i] audit au moins un élément de structure algébrique x[i] dans la clé publique compressée. 3. Procédé selon l'une quelconque des revendications 1 ou 2 pour la génération de clés publiques compressées pour l'algorithme de chiffrement pleinement homomorphique à clé publique de van Dijk, Gentry, Halevi et Vaikuntanathan ou pour l'algorithme de chiffrement pleinement homomorphique à clé publique de Coron, Mandal, Naccache et Tibouchi, caractérisé en ce qu'il comporte les étapes suivantes : (a) Générer (32) un entier impair secret p ; (b) Générer (34) de manière déterministe, publique et préférablement pseudo-aléatoire une collection d'entiers pseudo-aléatoires t[i] ; (c) Générer (31, 33) de manière aléatoire ou pseudo-aléatoire des entiers secrets r[i] ;(c) Déduire (35) des entiers t[i] et di] les clés publiques compressées d[i] définies par la relation d[iJ=r[i]-t[i] mod p ; (d) Retourner (36) la clé publique compressée PKcomp constituée par l'ensemble des entiers d[i] et par l'information publique nécessaire afin 5 de régénérer les entiers t[i]. 4. Procédé selon la revendication 3 pour générer des clés publiques compressées pour l'algorithme de chiffrement pleinement homomorphique à clé publique van Dijk, Gentry, Halevi, et 10 Vaikuntanathan ou pour l'algorithme de chiffrement pleinement homomorphique à clé publique de Coron, Mandai, Naccache et Tibouchi, caractérisé en ce que l'un des entiers r[i] est nul. 5. Procédé selon les revendications 3 ou 4 pour la génération de clés 15 publiques compressées pour l'algorithme de chiffrement pleinement homomorphique à clé publique de Coron, Mandat, Naccache et Tibouchi, caractérisé en que les éléments x[i] se déclinent en deux familles dites x[i3O] et x[i,1] et où la définition des x[i,j] décompressés est modifiée de x[i,j] = t[i,j]+d[i,j]= t[i,j]+(r[i,j]-t[i,l] mod p) à x[i,j]= t[i,j] + D[i,1]= t[i,j]+(al-2) r[i,1J- 20 t[i,j] mod p) où a est un nombre secret, aléatoire et inversible modulo p et où des entiers D[i,j] sont utilisés en lieu et place des entiers d[i,j]. 6. Procédé selon l'une quelconque des revendications 1 à 4 pour la génération de clés publiques compressées pour l'algorithme de 25 chiffrement pleinement homomorphique à clé publique de Coron, Mandai, Naccache et Tibouchi, caractérisé en que les éléments x[i] se déclinent en deux ensembles (x[i3O]) et {x[i,1]}, définis pour j=O et j=1 par la relation x[i,j]= t[i,j] + D[i,j]= t[i,j]+(a1 zi r[i,jJ-t[i,j] mod p) où a est un nombre secret, aléatoire et inversible modulo p, r[i,j] sont des entiers secrets 30 générés (31, 33) de manière aléatoire ou pseudo-aléatoire, éventuellement à l'exception d'un entre les r[i,j], et où D[i,j] sont des entiers utilisés enlieu et place des entiers d[i,j], sont fusionnés en un ensemble unique (x[i]] au sein duquel sont choisis aléatoirement des couples d'éléments (x[i1], x[iz]) dont les produits x[il]xx[iz] servent à la création du chiffré. 7. Procédé selon la revendication 6 caractérisé en que, la définition des éléments de l'ensemble fusionné [x[i]] est modifiée à x[i]= t[i]+(a-lr[i]-t[i] mod p) où a est un nombre secret, aléatoire et inversible modulo p, dont le carré A = az mod p est intégré dans PKcomp de sorte à ce que, lors du chiffrement, la multiplication x[i1]xx[i2] puisse être remplacée par une multiplication corrigée à x[i1]xx[iz]xA. 8. Procédé selon l'une quelconque des revendications 1 à 2 pour la génération de clés publiques compressées pour l'algorithme de chiffrement pleinement homomorphique à clé publique de Brakerski et Vaikuntanathan, caractérisé par les étapes suivantes, où la notation « vec » désigne un vecteur dans (Zp)n : (a) Prendre pour clé secrète vec(s) un élément aléatoire de (Zp)n; (b) Générer un vecteur vec(a[i]) de manière déterministe, publique et préférablement pseudo-aléatoire ; (c) Prendre pour r[i] des petits aléas dans Zp ; (d) Retourner la clé publique compressée PKcomp constituée par l'ensemble des entiers d[i]= +r[i] mod p et par l'information publique nécessaire pour régénérer les vecteurs vec(a[i]). 9. Procédé de génération de clés publiques compressées selon l'une quelconque des revendications 1 à 8, où les entiers d[i] sont protégés par l'ajout ou la soustraction d'une quantité z[i]x p où z[i] est un entier aléatoire secret de taille comprise entre 1 et 200 bits. 10. Procédé de décompression de clés publiques compressées selon l'une quelconque des revendications 1 ou 2, caractérisé en ce qu'il comporte les étapes suivantes : - Régénérer les éléments t[i] ; - Ajouter ou soustraire à chaque t[i] l'élément d[i] afin d'obtenir un élément x[i] de la clé publique décompressée, ou afin d'obtenir un élément x'[i] lié à x[i] et intervenant dans l'opération de chiffrement. 11. Procédé de décompression selon la revendication 10 de clés publiques compressées selon un procédé conforme à l'une quelconque des revendications 1,2,3,4,5,6,7,9, ledit procédé de décompression étant mis en oeuvre dans un dispositif comprenant au moins un microprocesseur (11) et une mémoire (14), caractérisé en ce que la clé publique décompressée x[i] correspondante à PKcomp est formée par l'ensemble des entiers x[i]=t[i]+d[i] où les t[i] sont régénérés par le chiffreur et où les d[i] sont lus dans la clé publique compressée. 12. Procédé de décompression selon la revendication 10 de clés publiques compressées selon un procédé conforme à l'une quelconque des revendications 1,2,8,9, ledit procédé de décompression étant mis en oeuvre dans un dispositif comprenant au moins un microprocesseur (11) et une mémoire (14), caractérisé en ce que la clé publique décompressée x[i] correspondante à PKcomp est formée par l'ensemble des x[i] = (vec(a[i]),d[i]) = (vec(a[i]), +r[i] mod p) où les éléments vec(a[i]) sont régénérés de manière déterministe, publique et préférablement pseudo-aléatoire par le chiffreur et où les éléments d[i] sont lus dans la clé publique compressée et r[i] est un petit bruit aléatoire pris dans Zp. 13. Procédé selon l'une quelconque des revendications 1 à 12, où la génération de manière déterministe, publique et préférablement pseudo-aléatoire de données s'effectue à l'aide d'un générateur pseudo-aléatoire auquel sont fournies en entrée une graine à expanser et un indice i de la donnée t[iJ à générer. 14. Dispositif comprenant au moins un microprocesseur (11) coopérant avec un moyen d'interface d'entrée et de sortie de données (12), un générateur aléatoire (13) et une mémoire (14), caractérisé en ce que ledit microprocesseur met en oeuvre des moyens de génération, compression ou décompression de clés publiques compressées d[i], pour un algorithme de chiffrement pleinement homomorphique à clé publique, selon l'une quelconque des revendications 1 à 13. 15. Produit programme d'ordinateur, comprenant des instructions de code de programme pour la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 13 lorsque ledit programme est exécuté sur un ordinateur. 16. Médium de stockage lisible par ordinateur et non transitoire, stockant un programme d'ordinateur comprenant un jeu d'instructions exécutables par un ordinateur ou un processeur pour mettre en oeuvre le procédé selon l'une quelconque des revendications 1 à 13.