¿Se necesita el nombre de usuario y la contraseña para registrarse y autenticar al usuario con conocimiento cero guillou quisquater?

1

Quiero realizar la autenticación guillou quisquater para un sitio web con Laravel (PHP). La autenticación es entre el servidor y el cliente (usuario). En las referencias que he leído ( aquí y aquí ) el esquema de registro es:

  1. El servidor selecciona 2 primos pyq lo suficientemente grandes para que no sea factible factorizar su producto n = pq.
  2. Luego, el servidor selecciona otra prima grande grande (0 < b < n). Los valores b y n se publican. p y q se mantienen en secreto de todos los probadores y verificadores.
  3. Al generar nuevos certificados, el servidor lanza una nueva clave privada aleatoria u (0 < u < n) y la clave pública su inversa u -1 oculta por la clave de grupo v = u -1 b . Estos valores reemplazan las claves públicas y privadas normalmente generadas por el esquema RSA.

Para el esquema de autenticación:

  1. Alice saca aleatoriamente r (0 < r < n) y envía a Bob.
  2. Bob rueda al azar k (1 < k < n) y calcula y = ku r mod n y x = k b mod n, luego envía (y , hash (x)) a Alice.
  3. Alice calcula z = v r y b mod n y verifica el hash (z) es igual a hash (x).

Mis preguntas son:

  1. Cuando el usuario se registra en mi sitio web, el usuario debe elegir un nombre de usuario y contraseña. Pero el esquema no menciona para qué nombre de usuario y contraseña. Explíqueme cuál es el propósito del nombre de usuario y la contraseña en el registro y el esquema de autenticación.
  2. Cuando el usuario se registra, el esquema dice que el servidor selecciona 2 primos py q. ¿Debo generar los 2 primos en cada registro de usuario? ¿O debería generar los 2 números primos una vez y usar esos números primos para cada usuario?
  3. ¿Existe alguna biblioteca PHP que pueda calcular z = v r y b mod n fast? porque toma hasta 3 minutos al calcular esta ecuación (lo probé con p = 337 y q = 357)
  4. En el esquema de registro (la oración en negrita), ¿debo guardar el valor p y q en la base de datos del servidor?
pregunta kevin 03.05.2017 - 07:14
fuente

1 respuesta

0

El nombre de usuario y la contraseña es un sistema de autenticación en el que transmitiría el canal de canal de par (encriptado) y lo usaría para demostrar al servidor que el cliente es quien dice ser (el conocimiento de la contraseña es la prueba). En contraste, los protocolos de autenticación de Zero Knowledge nunca transmiten una contraseña a través del canal. Trabajan en el esquema de desafío-respuesta.

Ya que está diseñando una solución de conocimiento cero basada en el protocolo de autenticación de Guillou Quisquater, el nombre de usuario y la contraseña anularán el propósito. A su vez, esto respondería a su primera pregunta: no, no tendrá nombre de usuario ni contraseña en el registro. El propósito del registro es presentar al cliente al servidor como un cliente registrado. Durante el registro, un usuario proporcionará algunos medios para que el servidor verifique el cliente en el futuro (autenticación). En el esquema de autenticación de nombre de usuario y contraseña, esta sería la contraseña. Más tarde se usaría para demostrar al servidor que el cliente es el que se registró y el conocimiento de la contraseña es la prueba de ello. El registro en un protocolo de autenticación de conocimiento cero sería un poco diferente.

A nivel puramente teórico, sin entrar en detalles sobre ningún punto específico, aquí están los pasos necesarios para diseñar tal esquema:

Registración

  1. El cliente generará un par de claves públicas y privadas
  2. El cliente presentará su clave pública al servidor (que también asume un rol de autoridad confiable)
  3. El servidor convertirá la clave pública en un certificado y la enviará al cliente
  4. El cliente es responsable de almacenar el certificado y la clave privada correspondiente a este certificado de forma segura. A su vez, el certificado es el nombre de usuario y la clave privada sería la contraseña, aunque nunca se transmitiría por cable.

Autenticación

  1. El cliente presentará su certificado al servidor
  2. El servidor verificará el certificado y lo rechazará si no es válido (no emitido por el servidor). Tomado directamente del artículo que ha vinculado :
  
  1. Prover elige aleatoriamente k ∈ Z n
  2.   
  3. Prover envía el verificador Cert (prover), γ = k b mod n
  4.   
  5. El verificador comprueba el certificado, rechazando si ver TA (ID (prover) || v, s) verdadero.
  6.   
  1. Si la verificación es exitosa, el servidor continuará con el esquema de autenticación como lo describió en su pregunta.

Respuestas a tus preguntas

  

Cuando el usuario se registra, el esquema dice que el servidor selecciona 2   primos p y q. ¿Debo generar los 2 primos en cada usuario?   ¿registro? o debo generar los 2 números primos una vez y usar   esos primos para cada usuario?

Estos dos números no se generan en el registro del usuario sino en la configuración inicial. Los generaría una vez y los usaría en cada registro de usuario.

  

¿Hay alguna biblioteca de PHP que pueda calcular z = vr yb mod n fast?   porque se tarda hasta 3 minutos cuando se calcula esta ecuación (I   probado con p = 337 y q = 357)

Necesitará hacer esta pregunta específica en otra SE, probablemente en stackoverflow.SE. También deberá realizar cálculos matemáticos (RSA) en el lado del cliente y necesitará un conjunto de herramientas similar allí. Aunque todo esto es puramente teórico, tenga en cuenta que hacer criptografía en el navegador es complicado en el mejor de los casos . Además, también deberá resolver el almacenamiento de las credenciales del cliente (certificado y clave privada) en el lado del cliente. ¡Esto no es trivial!

  

En el esquema de registro (la oración en negrita), ¿debo guardar la p   y q valor en la base de datos del servidor?

Dado que todo esto es para su tesis, debe decidir el alcance. Si el almacenamiento seguro de estos dos números está fuera del alcance, puede declarar una base de datos como un almacenamiento suficientemente seguro y guardarla allí. El otro extremo es usar HSM .

    
respondido por el Marko Vodopija 03.05.2017 - 12:27
fuente

Lea otras preguntas en las etiquetas