En criptografía , una firma de Schnorres una firma digital producida por el algoritmo de firma de Schnorr que fue descrito por Claus Schnorr. Es un esquema de firma digital conocido por su simplicidad, es eficiente y genera firmas cortas. Es uno de los protocolos utilizados para implementar la «Prueba de conocimiento». En criptografía, una prueba de conocimiento es una prueba interactiva en la que el probador logra ‘convencer’ a un verificador de que el probador sabe algo ‘X’. Para que una máquina conozca ‘X’ se define en términos de computación. Una máquina conoce ‘X’ si esta ‘X’ se puede calcular. El Verificador acepta o rechaza la prueba. Se supone que la prueba de firma convence al Verificador de que se está comunicando con un usuario que conoce la clave privada correspondiente a la clave pública. En otras palabras,
Schnorr Digital Signature para implementar Zero Knowledge Proof :
Tomemos un ejemplo de dos amigos Sachin y Sanchita. Sanchita ha anunciado al mundo que tiene una clave pública y puede aceptar y recibir información a través de ella. Sachin cree que Sanchita miente. Sanchita quiere demostrar su honestidad sin mostrar sus claves privadas. Aquí es donde el protocolo de Schnorr nos ayudará.
Consider the following parameters: p, q, a, s, v, r, x, y where, "p" is any prime number "q" is factor of p-1 “a” such that a^q = 1 mod p
Las tres variables anteriores son globales y públicas, lo que significa que cualquiera puede ver estas tres variables en un escenario determinado.
Tendremos dos llaves.
"s" is the secret key or the private key (0<s<q). "v" is the public key = a^-s mod q.
La clave pública “v” será de conocimiento público y global junto con p, q y a. Sin embargo solo Sanchita tendrá el conocimiento de la clave privada «s».
Ahora Sanchita firma quiere enviar un mensaje encriptado «M». Ella seguirá los siguientes pasos para usar la firma de Schnorr:-
- Primero elegirá un número aleatorio “r” tal que 0<r<q.
- Ahora calculará un valor X tal que: X= a^r mod p.
- Ahora que ha calculado el valor de X, va a concatenar esto con el mensaje original (igual que la concatenación de strings).
Entonces, va a concatenar M y X para obtener M||X. y ella va a almacenar el hash de este valor en e.e = H(M||X) where H() is the hash function
- Ella va a obtener un valor «y» tal que:
y = (r + s*e) mod q
Ahora que todos los cálculos han terminado, le enviará lo siguiente a Sachin.
- El mensaje «M».
- Las firmas e y y.
Junto con esto, Sachin tiene la siguiente información pública:
- Clave pública “v” de Sanchita.
- El número primo que eligió Sanchita es “p”.
- “q” que es el factor de “p-1” que eligió Sanchita.
- “a” tal que a^q = 1 mod p, elegido por Sanchita.
Ahora, Sachin tendrá que calcular X’ tal que:
X’ = a^y * v^e mod p
Sabemos que v = a^-s, sustituyamos eso en la ecuación anterior y obtenemos:
X’ = a^y * a^-se = a ^ (y-s*e)
Ahora también sabemos que,
y = r + s*e Which means: r = y-s*e
Sustituyamos este valor en la ecuación anterior:
We get: X’ = a^r
Como ya hemos visto anteriormente:
X= a^r
Así que técnicamente:
X = X’
Pero Sachin no sabe el valor de “X” porque nunca recibió ese valor. Todo lo que recibió es lo siguiente: El mensaje M, las firmas (e y y) y la multitud de variables públicas (clave pública “v”, p, q, y a).
Así que va a resolver para e haciendo lo siguiente:
e = H ( M||X’)
Tenga en cuenta que anteriormente resolvimos e haciendo:
H(M||X))
Entonces, según esa lógica, si los dos valores de e resultan ser iguales, eso significa
X = X’
Esto sigue las tres propiedades de la prueba de conocimiento cero:
- Completitud –
Sachin estaba convencido de la honestidad de Sanchita porque al final X = X’. - Solidez:
el plan era sólido porque Sanchita solo tenía una forma de demostrar su honestidad y era a través de su clave privada. - Conocimiento cero:
Sachin nunca llegó a saber sobre la clave privada de Sanchita.
Publicación traducida automáticamente
Artículo escrito por ciberexplosion y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA