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
- El cliente generará un par de claves públicas y privadas
- El cliente presentará su clave pública al servidor (que también asume un rol de autoridad confiable)
- El servidor convertirá la clave pública en un certificado y la enviará al cliente
- 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
- El cliente presentará su certificado al servidor
- 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 :
- Prover elige aleatoriamente k ∈ Z n
- Prover envía el verificador Cert (prover), γ = k b mod n
- El verificador comprueba el certificado, rechazando si ver TA (ID (prover) || v, s) verdadero.
- 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 .