Protocolo de Cramer-Damgard-Schoenmakers

De testwiki
Ir a la navegación Ir a la búsqueda

El protocolo de Cramer-Damgard-Schoenmakers o protocolo CDS, también conocido por los nombres protocolo de testigo indistinguible o técnica k-de-n ZKP (del inglés 1-out-of-n ZKP technique) permite probar que se conoce la solución de k problemas de un conjunto de n problemas (k<n) sin revelar para cuales de los problemas se tiene la solución.[1][2]

Descripción

Supongamos que:[1]

  • Existen n diferentes cuestiones Q1,Q2,...,Qn
  • El probador P quiere probar a un verificador V que conoce la solución de una de las cuestiones
  • P no quiere que V encuentre a qué problema él conoce la solución.

Establecemos el siguiente protocolo:[1]

  1. Supongamos que P conoce la solución di de la cuestión Qi, entonces P elige aleatoriamente un ri y calcula un genuino testigo ti. A continuación desafíos falsos cj, y respuestas falsas sj y los usa para fabricar testigo tj,ji. P envía (t1,t2,...,tn) a V.
  2. V aleatoriamente elige un desafío c* y lo envía a P.
  3. P calcula ci=c*jicj y calcula la respuesta real si, usando ri, ci y su conocimiento di. Después de esto P, envía (c1,c2,...,cn) y (s1,s2,...,sn) a V.
  4. V verifica que c*=k=1nck y para todas las cuestiones, cada una de sus pruebas se cumplen. Sin embargo, V no podrá distinguir la prueba real entre las pruebas falsas.

Aplicaciones

Este protocolo se usa en esquemas de voto verificables para probar que un texto cifrado es consecuencia de cifrar alguno de los elementos de un conjunto de valores diferentes.[1]

Ejemplo

Por ejemplo, el protocolo CDS se ha usado para demostrar que un voto cifrado con ElGamal es uno de dos posibles votos que se pueden realizar en un referéndum ("SÍ" o "NO") sin revelar cual es lo cual es un problema 1-de-2 ZKP.[2]

Para llegar a un problema donde aplicar el protocolo CDS codifica con g0 al "NO" y con g1 al "SI". Formalizando se tiene que m=gvi con vi={0,1}. Por tanto los votos cifrados tienen la forma (gxi,Kxig˙vi) con K perteneciente a la clave pública y x_i aleatorio.[2]

Por tanto dado un voto cifrado con ElGamal (x,y)=(gxi,mhxi) se tiene que poder demostrar que m puede ser m0=g0 o m1=g1 sin revelar cual es. El objetivo a demostrar es probar la siguiente sentencia OR demostrable por el protocolo CDS (al que previamente se le ha convertido en un protocolo no interactivo usando la heurística de Fiat-Shamir):[2]

loggx=logh(y/m0)loggx=logh(y/m1)

Demostración: Partiendo de (x,y)=(gxi,mhxi) tenemos:
  • Despejando xi en x=gxi tenemos xi=loggx
  • Despejando xi en y=mhxi tenemos xi=logh(y/m)
  • Uniendo las dos igualdades tenemos xi=loggx=logh(y/m)

Referencias

Plantilla:Listaref

Plantilla:Control de autoridades

  1. 1,0 1,1 1,2 1,3 Verifiable Voting Systems Plantilla:Wayback. Thea Peacock, Peter Y. A. Ryan, Steve Schneider y Zhe Xia. University of Luxembourgy University of Surrey
  2. 2,0 2,1 2,2 2,3 Every Vote Counts: Ensuring Integrity in Large-Scale DRE-based Electronic Voting. Feng Hao, Matthew Nicolas Kreege