Supongamos que tiene un sitio web que proporciona algún tipo de servicio. Los usuarios pueden iniciar sesión, pueden almacenar algún tipo de datos y existen varios tipos de cifrado para mantenerlos a salvo. Las contraseñas se escriben con sal y hash, los datos del usuario se cifran, las claves se guardan de forma segura, todo está bien.
Un día, los malos encuentran una vulnerabilidad en el algoritmo de cifrado que estás usando. Los detalles de qué es la vulnerabilidad o qué algoritmo es, etc. son irrelevantes; la parte importante es que algunos o todos sus datos ya no son tan seguros como lo eran, ahora es posible en la práctica real recuperar los datos del usuario de los datos cifrados que ha almacenado.
¿Cómo lidias con esta situación?
En el caso de las contraseñas, puede invalidar las contraseñas de todos, emitir avisos de restablecimiento y esperar que las cuentas de correo electrónico a las que acaba de enviar esas contraseñas no sean vulnerables de forma similar ... ¿es una buena idea?
Para los otros datos ... Bueno, se almacena utilizando un cifrado reversible, así que supongo que podría ejecutar el descifrado y volver a cifrarlo utilizando el nuevo método no roto, pero para eso necesita las claves, que presumiblemente (con suerte) se almacenarán como contraseñas, utilizando el cifrado de un solo sentido, por lo que está un poco atascado. Obviamente, su curso de acción más seguro es limpiar los datos, pero eso parece bastante drástico, y es probable que sus usuarios se sientan un poco molestos por perder todos sus datos ante un riesgo hipotético que puede ser muy pequeño y que nunca se materializará.
Uno de los pensamientos que tuve fue que podía tomar los datos cifrados que tiene y cifrarlos nuevamente con un algoritmo diferente (no roto), para que sepa que no se puede recuperar con la nueva vulnerabilidad, y luego a continuación una vez que el usuario inicie sesión, use el método antiguo seguido del método nuevo y, si funciona, borre el campo y almacene una nueva versión que solo use el método nuevo. Con los hashes salados, también tendrías que almacenar las sales viejas y nuevas, pero eso no es gran cosa. Por lo tanto, su tabla necesitaría una columna adicional para un indicador que le permita saber si ese usuario ha sido migrado o no al nuevo sistema todavía, y en el caso de los hashes salados, otra columna para la sal adicional. ¿Funcionaría esto, o hay una vulnerabilidad en esto que no he detectado? Soy consciente de que la combinación de dos métodos criptográficos a veces puede producir una vulnerabilidad que no está presente en ninguno de los dos métodos cuando se usa solo, pero si sus datos actuales están cifrados utilizando un método que ahora sabe que es inseguro, mi teoría es que podría así como tratarlo como texto simple, en cuyo punto agregar cifrado solo puede hacer que sea más seguro.