¿Mejoro la seguridad agregando todas las contraseñas con una cadena larga fija?

1

He estado leyendo mucho sobre stackoverflow específicamente sobre seguridad para contraseñas de inicio de sesión. Leí que la seguridad se mejora cuando se utilizan una variedad de conjuntos de caracteres y / o contraseñas más largas. Por lo tanto, algo más que a-z, A-Z, 0-9 para incluir cosas como caracteres 'especiales' en francés, alemán o español (diéresis, acentos, etc.) y las contraseñas de 20 caracteres son mejores que las contraseñas con ocho caracteres.

Esto me hizo pensar: digamos que obligo a mis usuarios a ingresar una contraseña, con un mínimo de 8 caracteres de longitud, para incluir el número, mayúscula y minúscula. Digamos que siempre aplico una cadena fija de 1000 caracteres a la contraseña (por lo tanto, está codificada en el javascript y es visible para el cliente a través de la fuente de vista).

Una vez que se hace un hash fuerte con esta cadena extendida, ¿he mejorado mi seguridad de alguna manera, o el hecho de que la cadena codificada no sea pública no me ofrece nada extra?

Sospecho que si alguien quisiera realizar un ataque de diccionario, al agregar una cadena de 1000 caracteres a la fuente los desacelero porque el hash demoraría más en calcularse, ya que se computaría en una cadena extra larga. ¿Verdad o no?

    
pregunta fiprojects 17.09.2016 - 19:56
fuente

3 respuestas

6

No, esto no es una buena idea. Dado que la cadena adjunta es pública, el atacante simplemente la agregaría también a todas las palabras del diccionario cuando realice un ataque de fuerza bruta.

Usted sostiene que el aumento en el tiempo del hashing de una cadena larga en lugar de una corta ralentizaría el ataque, pero el efecto probablemente sería pequeño. Y lo que es más importante, las funciones hash modernas como PBKDF2 y bcrypt ya están diseñadas para ser lentas y tienen un diseño para hacerlas más lentas al permitirle establecer un parámetro de factor de costo. Si quieres reducir la velocidad de un atacante, simplemente aumenta eso. No es necesario que encuentre su propia solución elaborada en casa.

Si no está utilizando un algoritmo de hash de contraseña moderno, este es el momento para arregla eso en lugar de considerar hacks como este.

Si mantuvieras la cadena en secreto (agregándola al servidor en lugar de al cliente), sería una pimienta . Esa es una técnica comúnmente utilizada para aumentar la seguridad de los hashes de contraseña, pero se podría argumentar que simplemente cifrarlos es una mejor solución.

    
respondido por el Anders 17.09.2016 - 22:07
fuente
2

Sí y no. Si cambia un poco su solución, agrega muchos bytes aleatorios en el lado del servidor y diferentes bytes aleatorios para cada usuario, tendrá un 'salt', es un buen enfoque y hace que sus contraseñas sean resistentes a las tablas del arco iris.

Pero en tu caso, no, solo harás un desastre. Piense en la migración de este sistema, será difícil encontrar y transferir algunos códigos javascript del lado del cliente. Como el hashing / salado de contraseñas es algo que es casi un patrón universal para implementar en el lado del servidor.

Sobre la complejidad del craqueo, hablemos de tu escenario. Imaginemos que algún atacante obtenga su base de datos completa, usuarios de 10k, y que conozca su prefijo de 102400 bytes aleatorios, y que todos los usuarios utilicen el mismo prefijo. Si usa md5 por ejemplo (algo que no recomiendo), tiene los ciclos de procesamiento, donde se lee y procesa cierta cantidad de datos en el algoritmo, cambiando su estado interno, lo que cambiará el valor de hash final.

Si tiene una cadena grande inicial, simplemente ingrésela en el algoritmo md5, luego copie el estado de la memoria (también denominado contexto) y actualícelo con la contraseña que está intentando. Después de eso, si la contraseña es incorrecta, simplemente elimine el estado de la memoria (o libre, como desea llamar a esta operación), restaure el estado calculado anterior y actualícelo nuevamente con la siguiente posibilidad.

En términos técnicos, no hay mucha mejora en su solución.

    
respondido por el OPSXCQ 17.09.2016 - 23:43
fuente
1

El hash con métodos modernos no suele llevar mucho tiempo con ningún objeto pequeño. Usar algo más lento, como SHA1, sería mucho más lento en relación con el tamaño de la cadena, pero es inseguro en sí mismo. Si su 'sal' (la cadena de 1kb) es pública, entonces realmente no ayuda con el ataque de diccionario. Sin embargo, detendrá un ataque de tabla arco iris utilizando un algoritmo hash estándar a menos que el atacante compile el suyo.

Tal vez si almacena una lista de hashes aleatorizados con sal en combinación con la administración de los requisitos de contraseña del usuario, sería más seguro.

    
respondido por el Brian 17.09.2016 - 21:23
fuente

Lea otras preguntas en las etiquetas