2011-08-07 27 views
7

solo buscando un consejo. Tengo un sitio web con alrededor de 2500 usuarios, pequeño pero en crecimiento. Lo construí usando cifrado SHA1 en las contraseñas. He leído que el SHA1 es inseguro y me gustaría cambiar para decir SHA256 con una sal.Quiere convertir una contraseña de sitio web de cifrado de SHA1 a SHA256

¿Alguien tiene algún consejo sobre cómo hacer una transición como esta? Sería genial si pudiera descifrar las contraseñas y simplemente volver a manipularlas pero no parece hacerlo.

THX Adam

Respuesta

11

La forma más habitual de ir sobre esto es la siguiente:

  1. Hacer la columna de contraseñas encriptado más grande para acomodar un hash SHA256, y añadir una columna 'sal'
  2. Ajuste el campo de la sal a NULL inicialmente y ajuste su código de verificación de contraseña para que una sal NULA signifique sha1, y no NULA signifique sha256
  3. Una vez que sha1-use haya iniciado sesión exitosamente, vuelva a hash la contraseña para sha256 con salt, y actualice la base de datos.

Con el tiempo, los usuarios migrarán a sha256 por sí mismos; el único problema son los usuarios que inician sesión solo esporádicamente o no lo hacen. Para estos, es posible que desee enviar un recordatorio por correo electrónico, o incluso amenazar con cerrar su cuenta si no inician sesión antes del día X (sin dar la razón real ...)

7

Solo para aclarar, SHA es un algoritmo de hash, que es (generalmente) una calle de sentido. No puede descifrar los hashes, que es la fuerza de usarlos para autenticar contraseñas. Estás en el camino correcto para pasar a un hash salado, y así es como lo haría.

La única manera de obtener contraseñas es dejar que el usuario las escriba en ellas. A medida que los usuarios visiten su sitio e inicien sesión, actualicen las contraseñas una a una. En su método de autenticación, realizaría el hash que está haciendo ahora y lo compararía con lo que hay en el campo existente (nada nuevo aquí). Suponiendo que coincida, continúe y sal/vuelva a usar hash utilizando SHA256, y actualice el campo de contraseña en la base de datos. Si lo desea, mantenga un poco en su tabla de usuarios que rastrea qué usuarios han sido actualizados.

Estoy haciendo muchas suposiciones, pero así es como he resuelto el algoritmo hash en el pasado. ¡Buena suerte!

1

I tener otra sugerencia para migrar el hash de contraseña de SHA1 a SHA256 inmediatamente sin esperar a que el usuario vuelva a visitar el sitio para volver a configurar la contraseña. El cambio será una migración de hash de contraseña de un solo uso y cambiará a su función de validación de inicio de sesión.

Suponga que su hash de la contraseña se generan mediante la función: contraseña + sal [SHA1] -> Hash-SHA1

migrar a SHA256, es posible convertir el hash de la contraseña utilizando el siguiente algoritmo:

Hash -sha1 + salt [Sha256] -> Hash-sha256 (La sal se utiliza para aumentar la complejidad de la entrada.)

Dependiendo del valor aceptable de su función sha256, puede considerar codificar el Hash-sha1 en base64 para ascii imprimible.

Para su función de validación de inicio de sesión, la contraseña debe algoritmo hash utilizando el siguiente algoritmo:

contraseña + sal [SHA1] -> hash SHA1 + sal [sha 256] -> hash SHA256

La desventaja es hash dos veces (use algo de tiempo de CPU) pero simplifica la migración y mejora la seguridad.

+0

Creo que [el principio de Kerckhoff] (https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle) se aplica al motivo por el cual esta es una mala idea: "seguridad a través de la oscuridad". La contraseña de base todavía se almacena como SHA1. Si vas a hacer algo como esto, entonces HMAC probablemente tenga sentido. –

0

Cambiar a SHA256 dificilmente hará que su sitio web sea más seguro.

SHA1 y SH512 son resúmenes de mensajes, eran Nunca destinado a ser las funciones de hash (o la tecla-derivación). (Aunque un resumen de mensaje podría usarse como un bloque de construcción para un KDF, como en PBKDF2 con HMAC-SHA1.)

Una función de codificación de contraseñas debe defenderse de ataques de diccionario y tablas de arcoiris.

Actualmente, la única función de derivación de clave o derivación de clave estándar (como sancionada por NIST) es PBKDF2. Mejores opciones, si no se requiere el uso de un estándar, son brypt y el más nuevo scrypt. Wikipedia tiene páginas para las tres funciones:

La página a la https://crackstation.net/hashing-security.htm contiene una extensa discusión de seguridad de la contraseña.

Dicho esto, tdhammers ofrece buenos consejos sobre cómo manejar la migración.

Cuestiones relacionadas