¿Es seguro este sistema sin contraseña?

13

Una persona tiene un formulario que solicita un nombre y una contraseña. La contraseña se envía al servidor donde se crea un hash a partir del hashing del nombre y la contraseña. Este hash se convierte en un número utilizando el valor ascii. El número está limitado a 10 dígitos y se usa para inicializar un generador de números aleatorios. Tres números aleatorios se generan de 1-77616. Estos números se utilizan para seleccionar palabras de una lista de 77616 palabras en inglés. Las tres palabras formadas se utilizan como el nombre de usuario de las personas.

77616 ^ 3 es aproximadamente 2 ^ 48, por lo que la probabilidad de una colisión después de un millón de generaciones de nombre de usuario debe ser ~ 0.001774778278169853.

¿Parece una forma segura de administrar usuarios, de esa manera no es necesario implementar un sistema de registro / inicio de sesión? ¿Hay algún beneficio de utilizar este tipo de sistema en un sistema tradicional de inicio de sesión / registro?

    
pregunta klenex 13.05.2017 - 17:25
fuente

4 respuestas

36

No, esto no parece seguro.

Colisiones

Mersenne Twister es un RNG determinista, por lo que no es adecuado para la mayoría de las tareas criptográficas (aunque su uso tiene sentido, porque si no fuera determinista, su enfoque, por supuesto, no funcionará).

En este caso, las colisiones no se producirían en la etapa en la que usted asume y basan sus cálculos. En su lugar, ocurrirían cuando limitas el valor de ascii a 10 dígitos, por lo que la probabilidad de colisiones es mucho mayor de lo que supones.

Comentarios sobre el enfoque

Lo que tienes es básicamente una función de hash hecha en casa. Toma alguna entrada, le aplica alguna función (es) y recibe una salida de longitud fija (3 palabras). El espacio de entrada es más grande que el espacio de salida, y es imposible revertir el procedimiento (obtener la contraseña de las tres palabras almacenadas).

No haga su propia y No seas un Dave aplicar. Para codificar correctamente las contraseñas, consulte ¿Cómo hash seguro las contraseñas? .

Todavía está implementando un sistema de registro e inicio de sesión (un usuario debe ingresar el nombre de usuario y la contraseña, lo almacena de alguna forma y luego puede comparar el valor almacenado con los valores ingresados recientemente para autenticar al usuario).

Si se detuviera en este paso: "La contraseña se envía al servidor donde se crea un hash", tendría un proceso normal. Pero en su lugar, agrega pasos adicionales, que no aumentan, sino que disminuyen la seguridad.

    
respondido por el tim 13.05.2017 - 17:59
fuente
6

Empiezas con un hash de nombre de usuario y contraseña, con la esperanza de que este último sea un hash criptográfico con al menos 256 bits. Luego lo conviertes en un número de 10 dígitos, tirando todos menos 33 bits. Luego, utiliza esto como una semilla para un generador de números pseudoaleatorios para calcular una clave de palabras de 48 bits, pero la información ya está perdida. No puede estirar 33 bits en 48 bits, solo habrá (como máximo) 10 ^ 10 opciones posibles para las tres palabras. Por lo tanto, su método, incluso si está bien implementado, entrega mucha entropía sin ningún beneficio. También puede requerir que los usuarios tengan contraseñas de 7 letras sin mayúsculas o símbolos.

    
respondido por el Charles 14.05.2017 - 06:46
fuente
3

Aparte de las matemáticas, su sistema es inseguro debido a las suposiciones de los usuarios. Los usuarios normales generalmente no tratan su nombre de usuario como un secreto. La mayoría de los sistemas no lo ocultan de otros usuarios (por ejemplo, en este mismo sitio, todos podemos ver los nombres de usuario de los demás). Sus usuarios no tendrán ninguna inclinación a no compartirla y no entenderán que está ingresando con este nombre de usuario (asumirán ingenuamente que hay una cookie o certificado o algo que está haciendo un inicio de sesión automático).

    
respondido por el Tom 14.05.2017 - 10:20
fuente
3

No, no has eliminado la contraseña. Ha eliminado el nombre de usuario y luego ha cambiado el nombre de la contraseña como "nombre de usuario". Ya que lo están llamando "nombre de usuario", sus usuarios asumirán que "este es mi nombre de usuario, puedo compartirlo en línea con mis amigos" y su cuenta será pirateada.

No haga que la seguridad se base en el secreto de un "nombre de usuario".

    
respondido por el Buge 14.05.2017 - 10:34
fuente

Lea otras preguntas en las etiquetas