Antes de hacer un esfuerzo por intentar que cambien, considere que podrían estar bajo un requisito que desconoce. Por ejemplo, si están usando estas contraseñas para acceder a un entorno de tarjeta de crédito, PCI DSS requiere un cambio de contraseña periódico. Esto podría ser algo completamente fuera de su control.
Si ese no es el caso, puede intentar remitirlos a las recomendaciones más recientes de NIST en SP 800-63B . En la sección 5.1.1.2 Verificadores de Secretos Memorizados (también conocidos como contraseñas), dicen esto [énfasis mío]:
Los verificadores NO DEBEN requerir que se cambien los secretos memorizados
arbitrariamente (por ejemplo, periódicamente). Sin embargo, los verificadores DEBERÁN forzar una
cambiar si hay evidencia de compromiso del autenticador.
La sección completa sobre contraseñas está pensada para ser leída e implementada en su totalidad, por supuesto, pero esta recomendación se mantiene por sí sola. La única queja que tengo en el documento es que su longitud mínima recomendada es de solo 8 caracteres, lo que claramente no es suficiente para resistir un ataque offline de fuerza bruta en los hashes de contraseña que pueden estar expuestos en una violación de datos. Para mitigar eso, requieren que los hash de contraseña almacenados estén suficientemente protegidos contra ataques de fuerza bruta, como 10,000 rondas de PBKDF2.
Se sugieren 10.000 rondas de PBKDF2 para la verificación de la contraseña en línea porque la idea es hacer que sea computacionalmente costoso verificar una sola contraseña, al tiempo que permite el procesamiento en tiempo real durante las frecuentes apariciones de inicios de sesión de usuarios. Pero tenga en cuenta que las confirmaciones de contraseñas antiguas solo se realizarían durante una actividad de cambio de contraseña real, lo que debería ocurrir con mucha menos frecuencia que los inicios de sesión regulares. Y esto abre una oportunidad para mejorar su seguridad.
Considere gastar potencia de procesamiento adicional durante el proceso de cambio de contraseña. Calcule el PBKDF2 (contraseña, 10000) y guárdelo en su tabla de "contraseña diaria", y mantenga un archivo de PBKDF2 (contraseña, 50000) en su tabla de "contraseña anterior". Cuando vuelvan a iniciar sesión, compárelos solo con la tabla de "contraseña diaria". Cuando cambien las contraseñas, realice la búsqueda en todas las entradas de la tabla de contraseñas anteriores; esto será mucho más lento que un inicio de sesión regular, pero debido a que es poco frecuente, no debería interrumpir su negocio normal. Una vez que se haya verificado que es único, descarte y reemplace el hash diario existente con el nuevo hash diario, y agregue el nuevo hash fuerte a la tabla de "contraseña anterior", deshaciéndose de su contraseña anterior más antigua.
Si al final no puede hablar de los cambios periódicos de contraseña, intente que al menos implementen el almacenamiento práctico más sólido de "contraseñas anteriores".