• Aucun résultat trouvé

4.3 Une Nouvelle Construction

4.3.2 Construction

elev´ee `a une puissance R connue. Le point important est que ce chiffr´e est g´en´er´e de mani`ere d´eterministe en fonction du sommet s. Tant que l’utilisateur sera honnˆete, lemasquehx

s ne sera utilis´e qu’une seule fois et assurera sa confidentialit´e. A l’inverse, un fraudeur n’aura pas d’autre choix que de r´eutiliser un masque, ce qui va permettre de l’identifier.

En effet, lorsqu’une double d´epense sera d´etect´ee, la banque disposera de deux traces de transactions contenant (ts, vs) et (ts0, vs0) o`u s et s0 sont deux sommets partageant au moins une feuille commune f ∈ Fn(s) ∩ Fn(s0). Par cons´equent, nous avons e(hs,ges7→f) = e(hs0,egs07→f) ainsi que l’´egalit´e suivante (o`u T = e(vs,egs7→f) et T0 = e(vs0,egs07→f)) :

T · T0−1= e(upkR,egs7→f) · e(hxs,egs7→f) · e(upk−R0,egs07→f) · e(hxs0,egs07→f)−1 = e(upk,egRs7→f·egs−R07→f0 ).

L’´el´ement T · T0−1 ne d´epend donc que de upk et de param`etres connus des transactions. Il est alors possible de tester, pour toute cl´e publique upki du syst`eme, si T · T0−1= e(upki,egs7→fR ·eg−Rs07→f0 ) jusqu’`a tomber sur une ´egalit´e.

L’algorithme d’identification (Identify) a donc un coˆut lin´eaire en le nombre d’utilisateurs, ce qui n’est pas vraiment probl´ematique car les cas de fraudes restent rares notamment en raison de l’utilisation de p´eriph´eriques s´ecuris´es (tels que des cartes `a puces). Par ailleurs, cette proc´edure peut ˆetre efficacement parall´elis´ee et d´el´egu´ee comme c’est le cas pour le sch´ema de tra¸cage de traˆıtres d´ecrit dans [CPP05].

4.3.2 Construction

Nous d´ecrivons `a pr´esent, de mani`ere plus formelle, les algorithmes constituant notre syst`eme de monnaie ´electronique divisible anonyme en distinguant le cas d’une construction dans le ROM de celui d’une construction dans le mod`ele standard. Cette distinction est rendue n´ecessaire par le fait que les preuves Groth-Sahai ne permettent pas de prouver efficacement la connaissance de scalaires, contrairement aux preuves de connaissance de type Schnorr. Dans le premier cas

Chapitre 4 : Techniques Cryptographiques pour le Paiement Anonyme

l’utilisateur devra donc prouver la connaissance d’un ´el´ement ux2 ∈ G1(pour un certain param`etre public u2), tandis que dans le deuxi`eme cas, prouver la connaissance de x suffira.

– Setup(1k, V ) : soient (G1, G2, GT, e) la description de groupes bilin´eaires d’ordre p et g, h, u1, u2, w (resp.eg) des g´en´erateurs de G1 (resp. G2). L’entit´e g´en´erant les param`etres du syst`eme (voir remarque 9) s´electionne une fonction de hachage H : {0, 1}→ Zp r´esistante aux collisions et construit les ´el´ements suivants :

– pour tout s ∈ Sn, rs $ ← Zp et (gs, hs) ← (grs, hrs) ; – pour tout f ∈ Fn, lf $ ← Zp;

– pour tout s ∈ Sn, pour tout f ∈ Fn(s), egs7→feglf/rs.

Les param`etres publics du syst`eme sont alors d´efinis comme ´etant (G1, G2, GT, e), ainsi que g, h, u1, u2, w, eg, et G = e(g,eg), la fonction H, et les ensembles {(gs, hs), s ∈ Sn} et {egs7→f, s ∈ Sn, f ∈ Fn(s)}. Par ailleurs, en fonction du mod`ele de s´ecurit´e, on rajoute : – une autre fonction de hachage H : {0, 1} → Zp, qui sera mod´elis´ee par un oracle

al´eatoire ;

– ou une chaˆıne de r´ef´erence commune (CRS) pour le syst`eme de preuves Groth-Sahai ainsi que la description d’un sch´ema de signature `a usage unique Σots tel que celui propos´e dans [BB08].

Il est important de noter que les utilisateurs et les marchands ont seulement besoin de connaˆıtre les diff´erents g´en´erateurs et {(gs, hs), s ∈ Sn} (ainsi que H, ou CRS et Σots). En pratique, l’ensemble {egs7→f, (s, f ) ∈ Sn× Fn} sera seulement utilis´e par la banque, tandis que {lf, f ∈ Fn} ne sera plus d’aucune utilit´e dans le syst`eme.

– BKeygen() : apr`es avoir re¸cu les param`etres du syst`eme, la banque va s´electionner deux sch´emas de signature.

– Σ0 = (Keygen, Sign, Verify), dont l’espace des message est G21, pour signer certains ´

el´ements des param`etres publics. Un choix possible est le sch´ema de signature propos´e dans [AGHO11] bien qu’il v´erifie une propri´et´e de s´ecurit´e (EUF-CMA) nettement plus forte que ce dont nous avons besoin. En pratique, un sch´ema sˆur face `a des attaques s´electives `a messages choisis serait suffisant.

– Σ1 = (Keygen, Sign, Verify), dont l’espace des messages d´epend du mod`ele de s´ecurit´e. – ROM : l’espace des messages est ici Z2p. Il est cependant n´ecessaire que le sch´ema choisi soit compatible avec un protocole Σ1.SignCommit qui, ´etant donn´e (ux1, uy2) pour une certaine paire (x, y) ∈ Z2p (donc une mise en gage de (x, y)), retourne une signature valide σ sur (x, y). C’est par exemple le cas des sch´emas dˆus `a Camenisch et Lysyans-kaya et `a Boneh et Boyen que nous avons pr´esent´es dans la section 3.2.2 ou celui que nous d´ecrivons dans le chapitre 8.

– Mod`ele Standard : l’espace des messages est ici G21, ce qui rend de nouveau possible l’utilisation du sch´ema de [AGHO11].

Dans tous les cas, la banque obtient (sk1, pk1) ← Σ1.Keygen(p.p.) ainsi que (sk(i)0 , pk(i)0 ) ← Σ0.Keygen(p.p.) pour chaque niveau i de l’arbre (0 ≤ i ≤ n) et calcule, pour tout s ∈ Sn, la signature τs ← Σ0.Sign(sk(|s|)0 , (gs, hs)). Finalement, il d´efinit bsk comme ´etant sk1 et bpk comme ´etant ({pk(i)0 }i, pk1, {τs}s∈Sn).

– Keygen() : chaque utilisateur (resp. marchand) choisit une cl´e secr`ete al´eatoire usk ← Z$ p

(resp. msk) et calcule upk ← gusk (resp. mpk ← gmsk). Dans ce qui suit, nous supposerons que upk (resp. mpk) est publiquement accessible, c’est-`a-dire que tout le monde peut en obtenir une copie valide.

– Withdraw(B(bsk, upk), U (usk, bpk)) : pour retirer une pi`ece divisible, l’utilisateur commence par g´en´erer un scalaire x ∈ Zp al´eatoire, puis calcule uusk1 et ux2. Il envoie alors upk, uusk1 et ux2 `a la banque et lui prouve, en utilisant par exemple une extension du protocole interactif de Schnorr, sa connaissance de x et usk. Si cette preuve est valide et que ux2 n’a pas d´ej`a

4.3. Une Nouvelle Construction

´et´e utilis´e, la banque

– ROM : ex´ecute le protocole Σ1.SignCommit sur (uusk1 , ux2) et envoie la signature r´esultante σ `a l’utilisateur qui d´efinit C ← (x, σ).

– Mod`ele Standard : ex´ecute l’algorithme σ ← Σ1.Sign(sk1, (uusk1 , ux2)) et retourne σ `a l’utilisateur qui d´efinit C ← (x, σ).

– Spend(U (usk, C, bpk, mpk, 2`), M(msk, bpk, 2`)) : pour d´epenser une valeur 2`, l’utilisateur s´electionne un sommet non d´epens´e s de niveau n − ` et calcule R ← H(inf o) (o`u inf o est un ensemble de donn´ees publiques associ´ees au paiement, telles que le montant, la date, etc...) ainsi que (ts, vs) ← (gx

s, upkR· hx

s). Il doit alors prouver que ts et vs sont bien form´es, c’est-`a-dire qu’il a utilis´e des valeurs pr´ealablement certifi´ees lors d’un retrait, donc une preuve de connaissance de σ, et qu’il a utilis´e une paire valide (gs, hs), donc une preuve de l’existence de τs. L`a encore, le protocole dans le ROM diff`ere de celui dans le mod`ele standard.

– ROM : l’utilisateur fournit une preuve de connaissance de usk, x, gs, hs, τs, et σ v´erifiant : ts= gsx∧ vs= (gR)usk· hxs ∧ Σ1.Verify(pk1, (usk, x), σ) = 1

∧ Σ0.Verify(pk(n−`)0 , (gs, hs), τs) = 1.

Cette preuve est alors convertie en une signature de connaissance Π sur le message R, en utilisant la m´ethode Fiat-Shamir pr´esent´ee dans la section 3.3.3.

– Mod`ele Standard : l’utilisateur doit fournir une preuve Groth-Sahai de connaissance de σ et τs. Cependant, l’utilisation de ce type de preuves pose un probl`eme car elles peuvent ˆ

etre r´eg´en´er´ees, c’est-`a-dire qu’´etant donn´ee une preuve valide π, il est possible, sans la connaissance des secrets, d’en calculer une nouvelle version ˜π 6= π prouvant les mˆemes affirmations. Dans notre cas, un marchand malhonnˆete pourrait r´eg´en´erer la preuve d’une trace valide et la d´eposer `a nouveau. Un utilisateur serait alors injustement accus´e de fraude, ce qui contredirait la propri´et´e de non-diffamation attendue d’un syst`eme de monnaie ´electronique divisible.

Pour ´eviter cela, l’utilisateur va g´en´erer une paire de cl´es pour un sch´ema de signature `

a usage unique (skots, pkots) ← Σots.Keygen(1k) et certifier la cl´e publique en calculant µ ← w

1

usk+H(pkots). La cl´e secr`ete sera ensuite utilis´ee pour signer l’int´egralit´e de la trace (et donc les preuves). Une r´eg´en´eration des preuves donne lieu `a une nouvelle trace qui n´ecessite donc une nouvelle signature. Par cons´equent, l’attaque pr´ec´edente ne s’applique plus car aucune entit´e, `a part l’utilisateur, n’est capable de la produire.

Le calcul de la preuve Groth-Sahai commence par les mises en gages de usk, x, gs, hs, τs, σ, µ, U1 = uusk1 et U2 = ux2. L’utilisateur fournit ensuite une preuve non-interactive `a divulgation nulle π que celles-ci v´erifient :

ts= gxs ∧ vs = (gR)usk· hxs ∧ U2 = ux2∧ U1= uusk1 ∧ µ(usk+H(pkots))= w

ainsi qu’une preuve non-interactive π0 satisfaisant l’indistinguabilit´e des t´emoins que les valeurs mises en gage v´erifient :

1 = Σ0.Verify(pk(n−`)0 , (gs, hs), τs) ∧ 1 = Σ1.Verify(pk1, (U1, U2), σ)

Finalement, l’utilisateur calcule η ← Σots.Sign(skots, H(ts||vs||π||π0||R)) et l’envoie `a M ainsi que ts, vs, pkots, π, π0.

Dans tous les cas, le marchand v´erifie que les preuves et les signatures sont valides auquel cas il accepte la transaction. Il conserve alors Z ← (ts, vs) et soit la signature de connaissance Π (dans le cas du ROM) soit l’ensemble Π ← (π, π0, pkots, η) (dans le cas du mod`ele standard).

Chapitre 4 : Techniques Cryptographiques pour le Paiement Anonyme

– Deposit(M(msk, bpk, (2`, Z, Π)), B(bsk, L, mpk)) : lorsqu’un marchand fait remonter la trace d’un paiement `a la banque, celle-ci va commencer par v´erifier qu’elle n’a pas d´ej`a ´et´e re-mont´ee et qu’elle est valide. Si c’est le cas, elle va, pour chaque s0 de niveau n − ` et f ∈ Fn(s0), calculer zi ← e(ts,egs07→f). Elle v´erifie ensuite que ∀i, zi ∈ L auquel cas elle/ ajoute ces ´el´ements `a cette liste (voir la remarque ci-dessous) et conserve la trace (2`, Z, Π). Sinon, il existe un ´el´ement z0 ∈ L tel que zi = z0. La banque retrouve alors la trace (2`0, Z0, Π0) correspondante et retourne [(2`, Z, Π), (2`0, Z0, Π0)].

– Identify((2`1, Z1, Π1), (2`2, Z2, Π2), bpk) : pour identifier l’auteur d’une double d´epense, l’entit´e ex´ecutant cet algorithme va commencer par v´erifier la validit´e des deux traces et retourne ⊥ si l’une d’entre elles n’est pas correcte. Il calcule alors, pour i ∈ {1, 2} et pour toute feuille f , les listes Si,f ← {e(tsi,egs7→f), ∀s ∈ Sn tel que |s| = |si| et f ∈ Fn(s)}, et retourne ⊥ s’il n’y a aucune collision entre S1,f et S2,f pour toute feuille f . Sinon, on peut supposer (voir la remarque ci-dessous) que nous avons e(ts1,ges17→f) = e(ts2,egs27→f) avec ts1 = gxs1 et ts2 = gxs2 pour des sommets s1, s2 ∈ Sn. Comme expliqu´e dans la section pr´ec´edente, on a alors la relation e(vs1,egs17→f) · e(vs2,egs27→f)−1 = e(upk,ges7→fR ·eg−Rs07→f0 ). Il ne reste donc plus qu’`a calculer e(upki,geR

s7→f ·eg−Rs07→f0 ) pour toutes les cl´es publiques jusqu’`a avoir une correspondance, auquel cas on retourne upki. On peut remarquer que la propri´et´e de r´esistance aux collisions attendue de H est n´ecessaire. Sans celle-ci, on pourrait avoir R = R0, et donc egs7→fR ·eg−Rs07→f0 = 1G2 dans le cas o`u s = s0, rendant impossible toute identification.

Remarque 9.

1. Nous avons consid´er´e, pour plus de simplicit´e, que l’algorithme Setup ´etait ex´ecut´e par une unique entit´e. Cependant, la connaissance des scalaires (rs, lf) utilis´es dans cette phase permet de casser l’anonymat du sch´ema. La g´en´eration de la CRS des preuves Groth-Sahai pose le mˆeme probl`eme. En pratique, il est donc indispensable que les param`etres du syst`eme soient g´en´er´es par une autorit´e de confiance ou alors coop´erativement par diff´erentes entit´es aux int´erˆets divergents (telles que la banque et un ensemble d’utilisateurs). Par exemple, la banque pourrait g´en´erer as, cf

$

← Zp pour tout s ∈ Sn et f ∈ Fn, calculer As ← gas

et eAs7→fegcf/as, et prouver sa connaissance de as et cf. Les utilisateurs pourraient alors choisir des scalaires al´eatoires bs et df, calculer Bs ← Abs

s ainsi que eBs7→f ← eAdf/bs

s et prouver connaissance de bs et df.

Si toutes les preuves sont valides alors les param`etres publics sont d´efinis par gs ← Bs et e

gs7→f ← eBs7→f dont les logarithmes discrets ne sont connus par aucune entit´e.

2. Le sommet impliqu´e dans une d´epense n’´etant pas connu, la banque doit calculer et stocker 2n´el´ements zi `a chaque fois qu’une transaction lui est remont´ee, peu importe son montant. Dans le pire des cas (si l’utilisateur d´epense sa pi`ece centime par centime) la banque se retrouvera oblig´ee de conserver 22n´el´ements pour chaque pi`ece d’une valeur 2n. Cependant, en pratique, la banque n’a pas besoin de stocker les ´el´ements zi ∈ GT mais seulement leur empreinte (nettement plus petite) H0(zi) pour une certaine fonction de hachage H0. En cas de collision, la banque commencera par recalculer les zi pour ˆetre sˆure que celle-ci n’est pas due `a la fonction H0 avant de lancer la proc´edure d’identification.

3. Le risque de cette construction, o`u la liste L contient un grand nombre de num´eros de s´erie invalides, serait la pr´esence de faux positifs, `a savoir deux pi`eces de secrets respectifs x1

et x2 pour lesquelles il existerait des sommets s1, s01, s2 et s02 tels que e(grs1x1,egyf/rs0 1) = e(grs2x2,egyf/rs0

2) pour un certain f ∈ Fn. Cependant, cela impliquerait que x1rs1rs0 2 = x2rs2rs0

1 ce qui n’arrive qu’avec une probabilit´e n´egligeable lorsque x1 et x2sont s´electionn´es al´eatoirement.

4.3. Une Nouvelle Construction

La s´ecurit´e de notre construction repose sur celle des sch´emas de signatures employ´es mais ´

egalement sur l’hypoth`ese EXDH − 2. Les r´esultats la concernant sont formellement ´enonc´es par le th´eor`eme suivant. Bien que les deux variantes (ROM et mod`ele standard) soient tr`es similaires, l’analyse de leur s´ecurit´e diff`ere sur l’une des propri´et´es et n´ecessite donc d’ˆetre ´etudi´ee s´epar´ement.

Th´eor`eme 30. 1. Dans le mod`ele de l’oracle al´eatoire, et en supposant que la fonction H est r´esistante aux collisions, notre syst`eme de monnaie ´electronique divisible est anonyme sous l’hypoth`ese EXDH − 2, tra¸cable si Σ0 est EUF-SCMA sˆur et Σ1 est EUF-CMA sˆur, et satisfait la propri´et´e de non-diffamation sous l’hypoth`ese DL.

2. Dans le mod`ele standard, et en supposant que la fonction H est r´esistante aux collisions, notre syst`eme de monnaie ´electronique divisible est anonyme sous l’hypoth`ese EXDH − 2, tra¸cable si Σ0 est EUF-SCMA sˆur et Σ1 est EUF-CMA sˆur, et satisfait la propri´et´e de non-diffamation sous l’hypoth`ese q − SDH si Σots est un sch´ema de signature `a usage unique dont la s´ecurit´e est forte.