proteger programa para online guardar gestor contraseñas app aplicacion security cryptography passwords hash

security - programa - lastpass



¿Cómo almacenar las contraseñas*correctamente*? (6)

Creo que no hay una iteración adicional sobre la contraseña necesaria, juste asegúrese de que haya una sal y una compleja;) Personalmente uso SHA-1 combinado con 2 frases clave de sal.

Un article que encontré aquí en SO proporcionó enlaces a otros artículos que a su vez proporcionaron enlaces a incluso más articles etc.

Y al final me quedé completamente perplejo, entonces, ¿cuál es la mejor manera de almacenar contraseñas en la base de datos? De lo que puedo juntar deberías:

  • Utilice un sal largo (al menos 128 bits completamente aleatorios), que se almacena en texto plano junto a la contraseña;
  • Use varias iteraciones de SHA-256 (o incluso un nivel de SHA mayor) en la contraseña con sal.

Pero ... cuanto más leo sobre criptografía, más comprendo que realmente no entiendo nada, y que las cosas que había pensado que eran ciertas durante años en realidad son totalmente erróneas. ¿Hay algún experto en el tema aquí?

Agregado: Parece que a algunas personas les falta el punto. Repito el último enlace dado arriba. Eso debería aclarar mis preocupaciones.

https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/


En pocas palabras, use un algoritmo hash criptográficamente seguro y algo de sal para las contraseñas, que debería ser lo suficientemente bueno para el 99.99% de todos los casos de uso. El enlace débil será el código que verifica la contraseña, así como la entrada de la contraseña.


En verdad depende de para que son las contraseñas. Debe guardar con cuidado cualquier contraseña, pero a veces se necesita mucho más cuidado que otros. Como regla general, todas las contraseñas deben estar marcadas con un hash y cada contraseña debe tener un salt único.

Realmente, las sales no necesitan ser tan complejas, incluso las pequeñas pueden causar una verdadera pesadilla para los crackers que intentan ingresar al sistema. Se agregan a una contraseña para evitar el uso de tablas Rainbow para hackear las contraseñas de varias cuentas. No agregaría una sola letra del alfabeto a una contraseña y la llamaría sal, pero tampoco es necesario que sea una guía única que esté encriptada en otra parte de la base de datos.

Otra cosa concerniente a las sales. La clave para hacer que una contraseña + sal funcione cuando el hash es la complejidad de la combinación de los dos. Si tiene una contraseña de 12 caracteres y le agrega 1 sal de carácter, la sal no hace mucho, pero descifrar la contraseña sigue siendo una hazaña monumental. Lo contrario también es cierto.


La longitud de la sal realmente no importa, siempre que sea exclusiva de un usuario. El motivo de un salt es que un intento generado dado en una coincidencia de hash solo es útil para una fila única de la tabla de usuarios en la base de datos.


Lo tienes bien. Sólo dos sugerencias:

  1. Si un día SHA1 se vuelve demasiado débil y quiere usar otra cosa, es imposible descifrar las contraseñas antiguas y volver a usarlas con el nuevo esquema. Por este motivo, sugiero que adjunte a cada contraseña un número de "versión" que le indique qué esquema utilizó (longitud de la sal, qué hash, cuántas veces). Si un día necesita cambiar de SHA a algo más fuerte, puede crear contraseñas de estilo nuevo mientras aún tiene contraseñas de estilo antiguo en la base de datos y aún así diferenciarlas. La migración de usuarios al nuevo esquema será más fácil.

  2. Las contraseñas todavía van del usuario al sistema sin cifrado. Mira a SRP si eso es un problema. SRP es tan nuevo que debería ser un poco paranoico con respecto a su implementación, pero hasta ahora parece prometedor.

Edición: Resulta que bcrypt me ganó con la idea número 1. La información almacenada es (cost, salt, hash), donde el costo es la cantidad de veces que se ha realizado el hashing. Parece que bcrypt hizo algo bien. Aumentar el número de veces que se puede hacer hash sin la intervención del usuario.


Utilizar:

  1. Hashed almacenamiento de contraseñas
  2. Una sal de nivel de usuario de más de 128 bits, aleatoria, regenerada (es decir, crea nuevas sales cuando se crean nuevos hash de contraseñas, no se mantiene la misma sal para un usuario determinado)
  3. Un método de hashing fuerte y computacionalmente costoso.
  4. Metodología que es algo diferente (algoritmo hash, cuántas iteraciones de hash usa, en qué orden se concatenan las sales, algo ) de cualquiera de las "guías de implementación estándar" como estas y de cualquier otra implementación de almacenamiento de contraseñas que haya escrito.