A intercambio casual de mensajes en reddit Ayer no me importó. podría ser posible diseñar un protocolo que elimine la necesidad de que los usuarios recuerden una contraseña única para cada uno de los servicios a los que se conecta.
La idea es que, en esencia, cada usuario proporciona credenciales de identificación (nombre, fecha de nacimiento, ciudad de nacimiento) y una contraseña secreta. Sobre la base de esta información y del servicio al que se accede (opcional, en caso de que el usuario no desee realizar un seguimiento entre los servicios), el software del cliente puede generar de manera determinista un par de llaves RSA (utilizando un esquema de hashing seguro, tal vez SHA-512). / p>
El componente público de este par de claves se pasa al servicio y sirve como un token de autenticación y una clave de cifrado. El usuario solo necesita recordar una contraseña y credenciales para acceder a cualquier servicio de cualquier cliente, con la clave pública como su identificación segura. Las claves específicas de sesión efímeras aún se pueden usar para el secreto de reenvío.
Me pregunto cuáles son los inconvenientes de este esquema. No es susceptible de suplantación de identidad a menos que el impostor se apodere de la clave privada, la falta de múltiples contraseñas lo hace más seguro y confiable para los usuarios. Es susceptible a MITM y a un cliente comprometido (porque ve la contraseña), pero es lo mismo que SSL hoy y la amenaza de los registradores de claves.
Por lo tanto, me pregunto si hay algún inconveniente grave que haya pasado por alto, y también si alguien quisiera experimentar con esto, ¿tendría sentido construir esto sobre TLS (una extensión de http, tal vez), o para reemplazarlo?
¡Gracias!
Editar :
Gracias Thomas Pornin por la respuesta bien razonada.
Me pregunto si las siguientes son refutaciones válidas a las (objeciones fundadas) que usted planteó:
1. Dado que solo hay una contraseña en este esquema, no es irrazonable que exista un estricto requisito de complejidad (por ejemplo, al menos 128 bytes, etc.), por lo que no es susceptible de ataques de diccionario. Los ataques de diccionario son realmente lo mismo que decir que si el atacante tiene infinitos recursos a su disposición, puede forzar cualquier esquema. Mientras el esquema sea tal que no se pueda obtener información adivinando partes de la contraseña, entonces seguramente es posible hacer que los ataques de diccionario no sean prácticos.
- Respecto a la necesidad de cambiar la contraseña: esto no sería posible dentro del protocolo limitado descrito en la pregunta. ¿Tal vez al registrar la identidad pública de los usuarios, el servidor puede enviar un código secreto codificado con la clave de los usuarios que debe usarse solo para invalidar la identidad cuando sea necesario? Siempre que haya una clave pública por servicio (es decir, generada de forma determinista en función de una combinación incontenible de contraseña de usuario e identidad de servicio, un atacante solo puede comprometer el acceso a un servicio en particular).
Por cierto, ¿conoces algún algoritmo conocido para generar el par de claves basado solo en un (por ejemplo) número de 512 bits? Supongo que esto es lo mismo que preguntar si hay una manera de encontrar el primo seguro más cercano dado un número. Gracias!