• Aucun résultat trouvé

Partie I Introduction à la cryptologie partagée 23

Chapitre 2 Généralités sur la cryptographie partagée 49

2.3 Partage de fonction

Dans cette section, nous allons voir les propriétés des schémas de partage de fonction, la notion de sécurité d’un système de chiffrement, et enfin nous prouverons la sécurité d’une version distribuée du cryptosystème El Gamal.

2.3.1 Propriétés des schémas cryptographiques de partage de fonction

Les protocoles de partage de fonction (signature et déchiffrement) doivent vérifier les deux propriétés suivantes : la sécurité du schéma cryptographique et la robustesse.

Sécurité du schéma cryptographique

La sécurité du schéma signifie que le protocole partagé doit être aussi sûr que le protocole non partagé vu que l’on souhaite résister à des adversaires plus forts que dans le cas “centralisé”.

Dans le cas d’un schéma de signature, on souhaite éviter les forges existentielles face à uneattaque adaptative à messages choisis.

Dans le cas d’un système de déchiffrement, on souhaite prouver la sécurité sémantique contre une attaque à clairs choisis, inévitable en cryptographie à clé publique et contre uneattaque à chiffrés choisisdans le cas le plus fort.

Dans le cas d’un partage de génération d’une clé, on souhaite prouver que l’attaquant ne peut pas obtenir d’information sur la part de clé connue par les serveurs non corrompus.

Robustesse

Certains schémas de partage à seuil sont vulnérables aux attaques d’un adversaire actif essayant de corrompre les parties pour empêcher la génération d’une signature valide, le déchiffrement d’un mes-sage ou la génération d’une clé. Dans le cas où tous les joueurs jouent honnêtement (pas d’adversaire actif), on dit que l’on est dans le modèle honnêtes-mais-curieux car des joueurs “corrompus” qui jouent correctement peuvent se coaliser pour tenter d’obtenir de l’information sur la part des autres.

Considérons un protocole de signature ou de déchiffrement dans lequel un joueur particulier appelé le combineur va envoyer à chaque joueur un messagexà signer ou à déchiffrer. Chaque serveur possède une partie de la clé secrèteski et va calculeryi = f(x,ski). Un attaquant actif, au lieu de renvoyeryi comme tous les serveurs, va renvoyery˜ipour empêcher le déchiffrement ou la génération d’une signature.

Le combineur va recevoir la liste des parts de signature ou de déchiffrement{y1, . . . , yn}et va tenter de reconstuire la signature ou le déchiffrement.

Dans le cas d’une signature, le combineur peut prendret+ 1parts au hasard et tenter de reconstuire la signature. Une signature putative est ensuite testée pour vérifier sa validité. Pour ce faire, le combineur peut essayer de vérifier la signature. La probabilité de tomber sur un groupe de k serveurs honnêtes nécessaires parmi les nserveurs alors qu’il y a au plus tserveurs corrompus est le nombre de sous-ensembles contenantkbons serveurs parmi lesn−tserveurs honnêtes, sur le nombre de groupe dek serveurs possibles parmin: soitP = C

k n−t

Cnk . Pour tomber sur un bon groupe, le combineur doit essayer 1/P groupes en moyenne. Ce nombre est exponentiel en le nombre de serveurs attaqués. Dans le cas où le nombre de serveurs corrompus est petit, t < n/3, l’algorithme de Berlekamp-Welch permet de reconstruire le polynôme. Mais que faire si n3 ≤t < n2?

Une solution consiste pour chaque joueur à prouver que son calcul est correct. Les techniques de preuves non-interactives d’appartenance à un langage difficile ou de preuves de connaissance zero-knowledge vont permettre de résoudre efficacement ce problème.

2.3.2 Sécurité d’un système de chiffrement partagé

Pour prouver la sécurité des schémas partagés, on peut soit effectuer une réduction entre le protocole dans sa version “centralisée” vers le protocole dans sa version “distribuée”, soit montrer une réduction entre un problème difficile et le protocole “distribué”. Dans le premier cas, on prouve que s’il existe un adversaire contre le schéma distribué, alors on peut construire un attaquant contre le schéma centralisé.

Or si ce schéma est sûr, de tels attaquants n’existent pas et il n’existe donc pas non plus d’adversaires contre le schéma distribué.

Modèle formel d’un système de chiffrement partagé

Dans cette sous-section, nous définissons un modèle formel pour un cryptosystème à seuiltparmi n. On suppose l’existence d’un distributeur de confiance et d’un ensemble de serveurs de déchiffrement P1, . . . , Pn.

Dans une phase d’initialisation, le distributeur crée une clé publiquepk, une clé de vérificationvk, et des clés privéessk= (sk1, . . . ,skn). Pour1≤i≤n, la clé privéeski est donnée au serveurPi.

Un utilisateur qui veut envoyer un message avec un label36 donné peut exécuter l’algorithme de chiffrement en utilisant la clé publique.

36. Le service de déchiffrement ne doit pas déchiffrer tout ce qui lui arrive et le donner à n’importe qui, mais doit implémenter une politique de déchiffrement. Pour implémenter de telles politiques, on peut incorporer un label au chiffré durant la phase de chiffrement. Un tel label est une chaîne de bits contenant des informations qui peuvent être utilisées par un tiers pour déterminer si la demande de déchiffrement est autorisée selon la politique. Un label pourrait aussi contenir l’identité du receveur de sorte que les serveurs de déchiffrement lui envoie les parts de déchiffrement.

Un utilisateur qui veut déchiffrer un chiffré, le donne aux serveurs en demandant une part de déchif-frement. Le label est placé dans le chiffré de telle sorte que les serveurs peuvent le vérifier. L’utilisateur peut vérifier la validité des parts en utilisant la clé de vérification. Quand un utilisateur collecte des parts valides d’au moinst+ 1serveurs, il peut exécuter l’algorithme de combinaison pour obtenir le déchiffré.

De manière plus formelle, un système de chiffrement à seuil comprend les algorithmes suivants.

– Un algorithme probabiliste de génération de clésKqui prend en entrée un paramètre de sécurité k, un nombren ≥ 1 de serveurs de déchiffrement, et le paramètre du seuilt (1 ≤ t < n); et retourne

(pk,vk,sk) =K(k, n, t)

oùpkest la clé publique de chiffrement,vkest la clé de vérification, etsk = (sk1, . . . ,skn)est la liste de clés secrètes.

– Un algorithme probabiliste de chiffrementE qui prend en entrée la clé publiquepk, le clairm et un labelL, et retourne le chiffréc=Epk(m, L).

– Un algorithme d’extraction du labelLqui prend en entrée un chiffrécet retourne un labelL = L(c).

– Un algorithme probabiliste de génération d’une part de déchiffréDqui prend en entrée une clé privéeskiet un chiffrécet retourne la part de déchiffrementσi=Dski(c).

– Un algorithme de vérification de partV qui prend en entrée une clé publique de vérificationvki, un chiffréc, une part de déchiffrementσiet retourneVvki(c, σi)∈ {0,1}.

– Un algorithme de combinaisonCqui prend en entrée une clé publique de vérificationvk, un chiffré c, un ensembleSde parts de déchiffrement, et retourne un déchiffrém0 =Cvk(c, S).

Tous ces algorithmes s’exécutent en temps polynomial en la longueur de leurs entrées avec la conven-tion que les entrées de l’algorithmeKsont encodées avec la notation unaire.

Modèle de sécurité d’un schéma sémantiquement sûr CPA dans un environnement distribué On peut définir le jeu de la sécurité sémantique d’un adversaire montant une attaque CPA contre un système partagé comme le montre la figure 2.3.

On peut remarquer que l’attaquant peut obtenir les parts de déchiffré de certains messages. En effet, l’attaquant peut être un serveur. En conséquence, si le combineur envoie des chiffrés σi à déchiffrer, l’attaquant peut voir passermii,f(σi,ski), pouri > tpour desσi qu’il n’a pas choisis. On note par f(.)la fonction de calcul d’une part de déchiffrement. Il est facile de simuler les parts des joueurs non corrompus car le simulateur connaîttparts et le clair donne la part en0qui est lat+ 1-ième part. Ainsi, la formule de Lagrange permet de reconstruire les parts des joueurs honnêtes dans le cas des schémas qui ont des propriétés homomorphiques comme l’exponentiation modulaire.

2.3.3 Exemple : Partage de déchiffrement El Gamal

Dans cette section, on va montrer que le schéma El Gamal distribué est sémantiquement sûr contre les attaques à clairs choisis. On dit aussi que ce système est IND-CPA.

La preuve va se faire par réduction. Dans un premier temps, supposons qu’il existe un adversaire Acontre le schéma El Gamal à seuil et construisons un attaquantB contre le cryptosystème El Gamal non distribué (centralisé). On conclura par la même technique que précédemment, en disant que comme

-mii,f(σi,ski),i > t

-A pk,sk1,sk2, . . . ,skt

Challengeur

m0,m1

cb

b

miif(σi,ski),i > t

FIG. 2.3: Modèle de sécurité sémantique face à une attaque à clairs choisis dans un environnement distribué.

aucun attaquant Bcontre le schéma El Gamal centralisé n’est connu (cf. la section précédente), un tel adversaireAn’existe pas. La figure 2.4 présente ce type de preuve. L’attaquantBque l’on construit va permettre d’attaquer le schéma non distribué, alors que l’adversaireAest un attaquant contre le schéma distribué.

-pk,sk1,sk2, . . . ,skt

-mii,f(σi,ski),i > t

A

mii,f(σi,ski),i > t BSimulateur

Challengeur pk

m0,m1 cb

b b

m0,m1 cb

FIG. 2.4: Modèle de preuve pour montrer la sécurité d’un système de chiffrement partagé sémantique-ment sûr à partir d’un système de chiffresémantique-ment sémantiquesémantique-ment sûr mais centralisé

Soit le système de chiffrement El Gamal rappelé dans la section 1.4.4. Il est clair que l’avantage de l’attaquantBen devinant le bitb correctement est le même que celui de l’adversaireA, doncε0 =εsi l’on noteε=Avantage= 2pr−1oùprest la probabilité de succès deA. Enfin, nous devons montrer que l’adversaire Ane peut pas distinguer les interactions avec un challengeur normal des interactions avec le simulateur qui ne connaît pas les parts des joueurs honnêtes. Pour ce faire, nous devons montrer qu’avec t parts sk1,sk2, . . . ,skt de la clé secrète et m, nous pouvons calculer les parts des serveurs honnêtes à l’aide de la formule de Lagrange. En effet, soit un chiffré(A, B) = (gr, m×yr). Une part du déchiffré est de la formeAskj car l’algorithme de combinaison, à partir des partspi =Aski, calcule Q

ipλ

S 0,i

i =gxr oùS est un ensemble det+ 1valeurs. Le déchiffrement se termine de la même façon que dans le cas non partagé. Pour simuler la part du serveur honnêtej, le simulateur qui connaîtmi et

σi = (Ai, Bi) calculeBi/mi qui vautgxr en théorie. Ainsi, pour calculer la part du serveur j > t, le simulateur calcule la part de déchiffré dejcomme étant(Bi/mi)λSj,0 ×Qt

k=1Askk

S j,k

i modp.

Remarque 10 El Gamal sémantiquement sûr contre les attaques à chiffrés choisis adaptatives. Shoup et Gennaro ont construit et prouvé un schéma de chiffrement basé sur le cryptosystème El Gamal sé-mantiquement sûr dans le modèle de l’oracle aléatoire contre des attaques à chiffrés choisis adaptatives [175].

2.3.4 Sécurité d’un schéma de signature

Dans cette sous-section, nous définissons un modèle formel pour un schéma de signature à seuilt parmin. On suppose l’existence d’un trusted dealer et d’un ensemble de serveurs de signatureP1, . . . , Pn. Dans une phase d’initialisation, le distributeur crée une clé publiquepk, une clé de vérification des partsvk, et des clés privéessk= (sk1, . . . ,skn). Pour1≤i≤n, la clé privéeskiest donnée au serveur Pi.

Un utilisateur, qui veut signer un messagem, l’envoie aux serveurs en demandant une part de signa-ture. Lorsqu’un utilisateur collecte les parts valides d’au moinst+ 1 serveurs, il peut exécuter l’algo-rithme de combinaison pour obtenir la signature.

Une signature résultant d’un protocole de signature à seuil est la même que si elle avait été produite par un serveur unique. La validité de la signature peut être vérifiée par n’importe qui ayant la clé publique correspondante. En d’autres termes, le fait que la signature ait été produite par un protocole distribué est transparent au receveur.

De manière plus formelle, un schéma de signature à seuil comprend les algorithmes suivants.

– Un algorithme probabiliste de génération de clésKqui prend en entrée un paramètre de sécurité k, un nombren≥1de serveurs de signature, et le paramètre du seuilt(1≤t < n); et retourne

(pk,vk,sk) =K(k, n, t)

oùpkest la clé publique de vérification de signature,vk= (vk1, . . . ,vkn)est la clé de vérification des parts, etsk= (sk1, . . . ,skn)est la liste de clés secrètes.

– Un algorithme probabiliste de génération de part de signatureSqui prend en entrée la clé secrète ski, le messagem, et retourne la partσi=Sski(m).

– Un algorithme de vérification de partV qui prend en entrée une clé publique de vérificationvki, une part de signatureσi, et retourneVvki(m, σi)∈ {0,1}.

– Un algorithme de combinaisonCqui prend en entrée une clé publique de vérificationvk, un mes-sagem, un ensembleSdet+1parts valides de signature, et retourne une signatures=Cvk(m, S).

– Un algorithme de vérification de signatureV0qui prend en entrée une clé publiquepk, un message m, une signatureset retourneV0pk(m, s)∈ {0,1}.

Tous ces algorithmes s’exécutent en temps polynomial en la longueur de leurs entrées avec la conven-tion que les entrées de l’algorithmeKsont encodées avec la notation unaire.

Les notions de sécurité pour les schémas de signature partagée sont les mêmes que celles de signature non partagée définies dans le chapitre 1 en prenant en compte des adversaires qui peuvent corrompre jusqu’àtserveurs de manière passive ou active.

La propriété de robustesse est implicitement définie dans la notion de signature et ressemble dans à la consistance dans un système de preuve interactive. On souhaite qu’avec forte probabilité, l’algorithme de génération de signature retournera une signature valide sur un message.