¿Cómo saber si es el mismo usuario?

3

Hace un tiempo hice una pregunta sobre cómo crear una sala de chat encriptada eficiente. Lo que terminé haciendo fue hacer que cada usuario genere un RSA KeyPair de 4096 bits, compartir sus claves públicas, y luego uno de los clientes distribuye una clave de cifrado AES de 256 bits que genera de forma aleatoria.

De todos modos, me estaba preguntando. Digamos que un usuario inicia sesión con el nombre de "Austin" y finaliza la sesión.

Digamos más tarde que "Austin" vuelve a iniciar sesión. Quiero saber si es el mismo usuario (o al menos la misma computadora) sin usar algo como una contraseña (sin embargo, podría ser algo verificado por algún tipo de servidor), ¿cómo podría hacerlo?

Estaba pensando en algo parecido a la forma en que Putty verificará a qué servidor se está conectando, pero no estoy seguro de que realmente lo entienda.

Gracias de antemano.

    
pregunta Austin 13.10.2012 - 12:44
fuente

3 respuestas

2

Identificar usuarios basándose en una clave pública se conoce como infraestructura de clave pública (PKI). Hay varias formas de hacer funcionar un PKI. La forma simple es que cuando un usuario se registra en su servicio, se genera una clave para él y su servicio recuerda la asociación entre el nombre de usuario (o el ID de cuenta único, si los nombres de usuario no son necesariamente distintos) y la clave pública. Esta forma simple funciona bien cuando todos los usuarios se registran en el mismo servidor; Las dificultades con PKI comienzan cuando las identidades y las informaciones de autenticación deben sincronizarse entre varios servidores.

SSH (el protocolo en el que estás pensando cuando dices "PuTTY") usa pares de claves para dos cosas diferentes . SSH utiliza pares de claves para identificar la máquina del servidor en la máquina cliente; Una vez que un cliente se ha conectado una vez a un servidor, recuerda la clave pública del servidor. SSH también puede usar claves públicas para identificar al usuario en la máquina del servidor. En ambos casos, el titular de la clave privada demuestra su identidad al demostrar que conoce la clave privada asociada con la clave pública que la identifica. Consulte ¿Qué es la diferencia entre authorized_keys y known_hosts para SSH? para obtener más información.

Para su aplicación, parece que los usuarios deben tener un par de claves que se genera cuando se registran. Si la clave privada debe almacenarse en el cliente o en el servidor depende de las propiedades de seguridad y facilidad de uso que desee lograr. La configuración más probable es generar y mantener la clave privada en el cliente y hacer que envíe la clave pública al servidor. Después de eso, el servidor puede autenticar a un usuario cliente verificando su posesión de la clave privada. Use SSL / TLS para establecer un canal seguro para realizar la autenticación del cliente; una vez que el usuario esté autenticado, haga que el servidor envíe las claves de sesión para los canales de chat en los que el usuario está autorizado a participar.

    
respondido por el Gilles 15.10.2012 - 02:17
fuente
2

Puede hacer que el usuario se autentique a sí mismo firmando el ID de usuario o un ID de sesión con su clave PRIVADA. Ese valor puede ser autenticado por cualquier persona, utilizando su clave PUBLIC. Un esquema de firma digital simple.

    
respondido por el Henning Klevjer 13.10.2012 - 14:56
fuente
1

Para que el nuevo "Austin" se reconozca como la misma entidad que, o una entidad distinta del anterior "Austin", debe haber algo que los distinga entre sí. Todo el mundo puede comprar una computadora; lo que los distingue es lo que saben , es decir, lo que se almacena en la memoria de la computadora + sistema de usuario.

En su caso, los sistemas cliente generan pares de claves, por lo que la solución es simple: simplemente haga que Austin reutilice el mismo par de claves RSA que anteriormente, en lugar de generar uno nuevo. En virtud de usar la misma clave pública (es decir, poder realizar las operaciones que requieren la clave privada, como el descifrado asimétrico), el nuevo Austin puede demostrar que es el mismo Austin que anteriormente. Para lo que vale, este es exactamente el SSH : un nuevo intercambio de claves se realiza para cada conexión, pero el cliente verifica que el servidor use siempre la misma clave pública.

Una contraseña es otra instancia de la misma, en la que los datos se almacenan en el cerebro del usuario en lugar de las entrañas de su computadora. Esto incluye algunas limitaciones, en particular una baja entropía (las contraseñas son inherentemente vulnerables a una búsqueda exhaustiva, también conocidas como "ataques de diccionario") y la necesidad de que el usuario las escriba en algún momento.

    
respondido por el Thomas Pornin 16.10.2012 - 20:27
fuente

Lea otras preguntas en las etiquetas