prueba de conocimiento, ¿dónde lo usamos?

8

prueba de conocimiento cero , ¿dónde lo utilizamos en línea? Pensé que usábamos principalmente el algoritmo RSA .

    
pregunta 0x90 29.03.2013 - 06:26
fuente

1 respuesta

11

Las pruebas de conocimiento cero son componentes de algunos protocolos bastante complejos, en particular esquemas de votación electrónica, en los que los votos están cifrados, pero el votante debe poder demostrar que la votación cumple con un formato específico (por ejemplo, es el cifrado de "0" o de "1", pero nada más) sin revelarlo.

También es posible convertir (genéricamente) cualquier prueba de conocimiento cero en un esquema de firma digital . La idea es que, en una prueba ZK, el provergente envía compromisos , luego el verificador envía un desafío a lo que el prover debe responder; las matemáticas involucradas aseguran que un simulador falso no pueda responder correctamente a todos los valores de desafío posibles. Lo que hace que la prueba sea "convincente" es que el verificador no se confunde con el prover y realmente envía un desafío aleatorio, no solo "valores de desafío fácil". Por lo tanto, la prueba ZK interactiva es convincente solo en la medida en que confiamos en el verificador para que no participe. La prueba se vuelve no interactiva calculando el desafío con una función hash sobre todo el conjunto de compromisos del prover (las funciones hash actúan "aleatoriamente" por construcción). Al incluir el mensaje para iniciar sesión en la entrada de la función hash, obtiene un esquema de firma digital.

El esquema de firma Schnorr es una aplicación de este principio de construcción. Funciona en un grupo donde el logaritmo discreto es difícil; por ejemplo, hay parámetros conocidos públicamente p , q y g ( p es una gran referencia, q es un número primo más pequeño pero aún grande que divide p-1 , g es un módulo de número entero p tal que g q = 1 mod p ). El firmante conoce un valor privado x , y la clave pública correspondiente es y = g ^ x mod p . Para firmar el mensaje m , el firmante hace esto:

  • El firmante genera un valor aleatorio k en el rango 1..q-1 y calcula r = g ^ k mod < em> p .
  • El firmante calcula e = H (m || r) donde H es una función hash (por ejemplo, SHA-256) y "||" denota concatenación.
  • El firmante calcula s = k - xe mod q

La firma es entonces el par (r, s) . La verificación se realiza de esa manera:

  • El verificador vuelve a calcular e = H (m || r) .
  • El verificador calcula r '= g s y e mod p .
  • El verificador verifica que r '= r .

Si queremos verlo como una prueba ZK adaptada, entonces r es el compromiso del promotor (el firmante, que desea demostrar su conocimiento de x ); e es el desafío , y s es la respuesta al desafío. La respuesta no revela nada en x siempre que el probador responda a un único valor de desafío, para un compromiso dado (es decir, para cada firma, el firmante generará un nuevo k que debe ser aleatorio y uniforme, y nunca revelado a nadie).

Sin embargo, para un simulador falso que no sabe x , responder al desafío con un valor s que se ajusta a la ecuación de verificación no es factible a menos que pueda < em> predice el desafío e y crea su falso compromiso de acuerdo. Por ejemplo, si el desafío e se conoce de antemano, el simulador falso puede simplemente elegir un s aleatorio y calcular su compromiso falso r = g s y e mod p . Ahí es donde la función hash H entra en la escena: no se puede hacer trampa con una función hash. Si la función hash es un random oracle , su salida no se puede predecir de antemano, y desde el compromiso r se utiliza como entrada para la función hash, el prover está necesariamente "comprometido" con su compromiso.

En la práctica, el esquema de firma de Schnorr se usa muy poco, pero una variante conocida como DSA es bastante generalizada con su versión de curva elíptica ECDSA ). DSA incluye algunos giros que hacen que la firma sea más corta y lo suficientemente diferente del esquema de firma de Schnorr para estar fuera del alcance de la patente de Schnorr (esa patente ahora está expirada de todos modos).

La mayoría de los certificados X.509 en libertad, y por lo tanto los sitios web habilitados para SSL, usan RSA, que no está construido alrededor de una prueba ZK. Pero ECDSA gana popularidad porque las curvas elípticas están muy de moda.

    
respondido por el Thomas Pornin 29.03.2013 - 14:45
fuente

Lea otras preguntas en las etiquetas