¿Este proceso es una forma segura para que los usuarios inicien sesión? Si es así, ¿hay un nombre para eso ya?

-1

Pensé en este proceso específicamente para detener los ataques y ataques de "hombre en el medio":

  1. El usuario escribe su nombre de usuario en la aplicación cliente.
  2. La aplicación cliente envía el nombre de usuario al servidor.
  3. ¡El servidor responde con una cadena de texto (llamémosla SecretA ) que es el cifrado de una cadena aleatoria RandomString usando la contraseña para el nombre de usuario recuperado como clave de codificación! es decir, SecretA = encrypt( message: RandomString, key: Password)
  4. El usuario escribe su contraseña y presiona "iniciar sesión".
  5. La aplicación cliente toma la contraseña ingresada por el usuario y SecretA . Descifra SecretA usando la contraseña ingresada por el usuario para descubrir RandomString (solo si el usuario ingresó la contraseña correcta). Cifra el RandomString usando la contraseña de usuario concatenada con una marca de tiempo (que se reduce a los microsegundos) como la clave, produciendo SecretB . es decir, SecretB = encrypt(message: RandomString, key: concat(Password, TimestampInMicroseconds))
  6. El cliente envía SecretB al servidor junto con la marca de tiempo utilizada en el cifrado en el paso.
  7. El servidor descifra SecretB concatenando la contraseña del usuario con la marca de tiempo que también recibió del cliente. Si el descifrado es RandomString , entonces el usuario inicia sesión.
  8. El servidor deniega el acceso si el cliente de marca de tiempo envía una diferencia demasiado grande con la hora en que el servidor recibe el mensaje.
pregunta Adé 18.06.2015 - 17:50
fuente

1 respuesta

1

Si su objetivo es detener al hombre en los ataques medios, en teoría funciona, pero prácticamente hablando, se desmorona con bastante facilidad. Esto es justo lo que veo como obvio. Estoy seguro de que hay más cosas que me he perdido.

Confías en el secreto de la contraseña para proteger toda la conversación, lo que significa que es efectivamente una clave simétrica. Las contraseñas definidas por el usuario son fundamentalmente no aleatorias, por lo que la capacidad de adivinar la clave es un problema real. Podría usar una clave derivada basada en la contraseña y eso haría que la clave sea un poco más fuerte.

Debe almacenar la contraseña sin protección (no hash), lo que suele ser algo malo, ya que cualquier infracción de esa lista significa que todos los usuarios están equivocados. Puede almacenar la clave derivada equivalente, pero luego, si el atacante obtiene ese valor, simplemente puede omitir la derivación en el lado del cliente.

Aquí también hay una serie de requisitos de criptografía indefinidos, como acuerdo de algoritmo, uso de IV, etc. ¿Cómo protege el canal de un MITM que especifica un algoritmo débil, o usa un IV de { 0, 0, 0, 0, 0, 0, 0, 0 } , o etc.

Los pasos 5-6 pueden ser repetidos por un atacante un número infinito de veces dentro del período de validez de la marca de tiempo. Tanto el cliente como el servidor deben estar sincronizados en el tiempo, de lo contrario es muy fácil para ellos divergir y usted necesitará una ventana más amplia, de lo contrario obtendrá una interminable cantidad de solicitudes erróneas. Este es un problema bastante serio con los sistemas distribuidos. Necesita una forma de saber en ambos lados que nunca antes ha visto ese mensaje en particular.

¿Qué sucede cuando ha autenticado ambas partes? ¿Es asi? ¿Una cosa del tiempo? ¿Qué pasa con el resto de las comunicaciones entre los dos? Las probabilidades son bastante buenas, no solo estás autentificando. Un atacante solo puede esperar a que finalice la autenticación antes de que comiencen a jugar con los datos para hacer lo que quieran.

Lo que estás tratando de hacer es probar la autenticidad de ambas partes y luego crear un canal seguro entre ellas basado en esa autenticidad. Como tal, necesitas acordar una clave para el canal. Este es un intercambio de claves de algún tipo. Esta podría ser una pregunta útil para mirar en demasiado.

    
respondido por el Steve 18.06.2015 - 18:54
fuente

Lea otras preguntas en las etiquetas