¿Cambiar a un nuevo método de cifrado (sin perder datos?)

4

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.

    
pregunta anaximander 22.04.2013 - 13:38
fuente

1 respuesta

4

La mejor manera de hacerlo es simplemente migrar el cifrado cuando un usuario inicia sesión, o invalidar su contraseña y datos si esto no ha ocurrido después de unos pocos meses.

Entonces, para las contraseñas, el usuario inicia sesión, conocemos su contraseña de texto sin formato, por lo que simplemente calculamos el nuevo hash. Opcionalmente obligar al usuario a elegir una nueva contraseña. Para los datos cifrados, el usuario inicia sesión, conocemos su contraseña de nuevo, por lo que simplemente volvemos a cifrar.

El problema con el reencriptado es que aún necesita saber la contraseña para que la nueva clave la use. También es propenso a situaciones en las que el cifrado subyacente es débil contra los ataques de análisis de tiempo o de potencia.

El problema con el re-hashing es que cualquier vulnerabilidad de colisión en el primer esquema hash se perpetúa en el nuevo esquema.

Entonces, para ambos, es mejor esperar a que el usuario inicie sesión y luego migrarlos.

Una alternativa es hacer doble hash o doble cifrado como medida temporal, luego migrar al iniciar sesión. Es más trabajo de desarrollo, pero funciona un poco más seguro.

    
respondido por el Polynomial 22.04.2013 - 14:58
fuente

Lea otras preguntas en las etiquetas