Pregunta:
¿Cómo proceder si se introduce un nuevo algoritmo hash para contraseñas?
unsettled user
2013-02-23 00:07:35 UTC
view on stackexchange narkive permalink

Tengo una dirección de correo electrónico en una determinada institución. Hace unos días me enviaron un correo electrónico (en alemán), que me gustaría parafrasear sin revelar la institución:

Estimados señoras y señores:

se introdujo un nuevo sistema de gestión de identidades en ... Junto con el nuevo sistema, entró en vigor una nueva directriz de contraseñas. Por lo tanto, ahora es necesario que cada usuario haga que el nuevo sistema verifique su contraseña actual.
Pronto recibirá un correo electrónico personificado con instrucciones sobre cómo confirmar la contraseña a través de la página web de [nombre del departamento de TI ] del ... (Web: [sitio web del departamento de TI] -> ... -> [confirmar contraseña])
Señalamos que en ningún momento le pediremos que envíe su nombre de usuario o contraseña a través de correo electrónico o para cambiar o confirmar su contraseña en cualquier otra página web que no sea https: // idm ... La comunicación con esa página web siempre está encriptada (https). Puede verificar si la página web realmente pertenece a ... haciendo clic en el símbolo de candado en la barra de estado de su navegador. La huella digital del certificado es ...
En caso de que aún no esté seguro de si la solicitud anterior ha sido enviada por ..., comuníquese con el servicio de asistencia técnica. (Web: [sitio web del departamento de TI] -> [Servicios] -> ...)

Atentamente, ...
(administrador de seguridad)

Ahora, esto no me parece un correo electrónico de phishing, y un colega se ha puesto en contacto con la mesa de ayuda: confirmaron que fue nuestro departamento de TI quien envió el correo electrónico. >

Lo que me gustaría saber es si enviar el correo electrónico anterior fue apropiado. Le dijeron a mi colega que tenían que hacer esto debido a un nuevo algoritmo hash que estaban a punto de usar. Entiendo que no pueden producir los nuevos hash a partir de los antiguos, pero sigo pensando que hacerlo a través de un correo electrónico de este tipo es muy extraño en el mejor de los casos: hace que los usuarios se sientan más inseguros cuando el próximo real llega el correo electrónico de phishing. ¡Lo que encuentro particularmente dudoso es el enlace directo a https: // idm ... en el correo electrónico!

Lo que habría esperado en tal caso: El departamento simplemente envía una solicitud para que cada usuario cambie su correo electrónico hasta esta y aquella fecha. ¿Sería ese un mejor enfoque? ¿O el enfoque de los departamentos de TI fue mejor?

Actualización: enviaron el "correo electrónico personificado" un día después. Contenía dos piezas de información nueva:

  • La oración "La contraseña debe cambiarse si no confirma las nuevas reglas de seguridad",
  • una fecha hasta cuándo tendré que confirmar mi contraseña.
A menudo se pueden encadenar los hashes `newhash (salt, oldHash (salt, password))` que permite actualizaciones en el lugar. Luego actualice a un hash limpio en el próximo inicio de sesión. | Si la mayoría de los usuarios inician sesión con regularidad, simplemente se puede actualizar al iniciar sesión sin cadena hash.
@CodesInChaos: ¡Ah, eso suena razonable! ¿Por qué no pensé en esto? :-)
@CodesInChaos: El cambio del algoritmo hash se realiza por una razón. De lo contrario, el cambio puede ocurrir con el tiempo, ya que los usuarios deberán cambiar sus contraseñas. Vale la pena señalar que si se filtraran los hash antiguos, esta solución no sería útil. Es útil si quieres dar respuesta a la necesidad de cambiar el algoritmo hash de forma transparente, como usuario me gusta, pero como administrador, no veo ningún valor añadido. Claro, ahora los hashes son más difíciles de romper, pero eso es solo una de las cosas que queríamos evitar con esta decisión.
Dos respuestas:
Thomas Pornin
2013-02-23 00:20:59 UTC
view on stackexchange narkive permalink

Es cierto que, dado que los buenos servidores nunca almacenan contraseñas, solo tokens de verificación de contraseñas (es decir, hash), no pueden cambiar la función hash sin la cooperación del usuario. Al solicitar a los usuarios que vuelvan a ingresar su contraseña, están diciendo que ya almacenaron las contraseñas de una manera adecuada (o, al menos, no de una manera terriblemente débil).

Sin embargo, pedir a los usuarios, por correo electrónico, que volver a ingresar sus contraseñas (siguiendo las instrucciones en un correo electrónico posterior) es una práctica muy deficiente. Los usuarios deben ser entrenados nunca para hacer tales cosas. Esta institución está deshaciendo años de pacientes esfuerzos educativos. Además, no debería haber "instrucciones especiales": el proceso de actualización de la función hash debería ser automático y transparente en el próximo inicio de sesión del usuario. Me parece bastante sospechoso que los usuarios deban hacer algo especial en ese momento, a menos que estén planeando hacer cumplir una de estas temidas "políticas de contraseñas" que rechazarán las contraseñas que no contengan letras de ambos casos, dígitos, signos de puntuación y dos palabras sánscritas de distintos sutras.

En mi opinión, la forma correcta de actualizar la función hash para el hash de contraseñas es hacerlo de forma transparente durante un período prolongado (varios meses) y simplemente "bloquear" las cuentas que no se hayan utilizado durante todo el período. Si es necesario que los usuarios se conecten realmente de manera inmediata, envíe un correo electrónico indicando que "su cuenta no se ha utilizado en 6 meses; por razones de seguridad, se desactivará si no se conecta en el próximo mes, y la reactivación tendrá que ser manejada a través del servicio de asistencia ".


@CodesInChaos sugiere" encadenar "hashes, es decir, usar el antiguo valor de hash como la" contraseña "para el nuevo valor de hash, al menos de forma transitoria. Esto funciona y proporciona los beneficios de seguridad del nuevo hash siempre que todo lo siguiente sea válido:

  • el antiguo hash era "suficientemente decente" (por ejemplo, era un MD5 en la contraseña, no el antiguo hash de Unix basado en DES que trunca las contraseñas a ocho caracteres);
  • tienes un lugar para almacenar los parámetros adicionales (sal, recuento de iteraciones ...) para el hash antiguo junto con los parámetros para el nuevo hash (o tienen el mismo formato y, por lo tanto, se pueden compartir);
  • está listo para asumir el costo de la CPU de calcular ambas funciones hash al verificar la contraseña;
  • si realiza la transición (es decir, desea que la cadena se haga hash solo hasta el siguiente inicio de sesión para este usuario), entonces hay una manera de marcar el hash almacenado como "transicional", para que el verificador sepa que debe calcular el hash antiguo luego el nuevo hash.

Entonces, depende de cuál era la función anterior, cuál es la nueva función y por qué la cambia. El encadenamiento de hashes es ciertamente una buena idea cuando el hash anterior es una invocación simple, sin sal y no iterada de MD5 o SHA-1.

¡Gracias por tu respuesta! "Deshacer años de pacientes esfuerzos educativos" es lo que pensé también. Y sí, ellos _están_ planeando hacer cumplir una de estas temidas "políticas de contraseñas", vea mi edición. De alguna manera olvidé esa información. (Lo siento, no quiero registrarme en este momento, así que no puedo darte un voto a favor).
Esta es una mala práctica. Podrían simplemente actualizar los hash de forma transparente en el próximo inicio de sesión de usuario, luego, si se determina que su contraseña actual no se ajusta a la nueva política, lo llevará a una página donde puede cambiarla.
Gracias por estos detalles adicionales sobre los "hash encadenados" :-)
Aki
2013-02-23 00:42:54 UTC
view on stackexchange narkive permalink

Estoy de acuerdo con Thomas. No hay justificación en recrear repentinamente hashes con un nuevo algoritmo. Excepto si hubiera una fuga de la base de datos o una nueva vulnerabilidad que hiciera reversibles los hash.

En una nota diferente, si no hay más remedio que cambiar el algoritmo inmediatamente, probablemente así es como lo haría. Notifica a sus usuarios para que tengan tiempo de verificarlo con usted y comprobar que no es un intento de phishing. Luego, configura una plataforma segura para cambiar la contraseña para todos los usuarios. Seguro que alguien podría hacerse pasar por los administradores y enviar un correo electrónico de seguimiento con una dirección falsa, pero el primer correo electrónico parece tratar de educar a las personas, no caerán en la trampa. , el culpable se encuentra fácilmente y se pueden tomar contramedidas de manera efectiva, lo que hace que la suplantación de identidad no sea rentable.

Una buena política es obligar a los usuarios a cambiar sus contraseñas cada 3 meses aproximadamente. Es una molestia, pero se considera una buena práctica por una razón, la gente tiende a usar la misma contraseña en todas partes, o la escribe en papeles o en su teléfono. Con el tiempo suficiente, los riesgos de que estos apoyos se vean comprometidos se vuelven significativos. En mi empresa tenemos que cambiarla cada 3 meses, no podemos usar una contraseña anterior y la nueva debe ser lo suficientemente diferente de las anteriores (es decir, no solo agregue un carácter ..).

Sin embargo, es un dolor, las contraseñas suelen ser así. Soy un gran fanático de los inicios de sesión únicos (SSO) con tokens OTP. Fácil revocable, fácil para el usuario, solo un soporte, etc. Pero tal infraestructura tiene un costo, complicar un poco la vida de los empleados al cambiar las contraseñas regularmente es una buena solución comercial.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...