¿Es seguro almacenar la clave cifrada en la base de datos (cifrada por otro cifrado)?

1

Quiero mejorar el flujo de cifrado utilizado por mi aplicación. Hoy utilizo el cifrado AES, mientras que su clave y su IvBuffer están codificados en el código. Sé que no está asegurado y quiero mejorar esto. Quiero crear un nuevo cifrado AES mientras que su clave se almacenará en la base de datos. La clave será cifrada por el antiguo cifrado AES.

La aplicación utilizará el nuevo cifrado AES:

  • Descifre la clave para el nuevo cifrado utilizando el antiguo cifrado.
  • Cifre / descifre información usando el nuevo cifrado usando la clave desencriptada.

El flujo permitirá una rotación de claves más fácil en el futuro (puedo elaborarlo, pero no está relacionado con mi pregunta).

¿Cómo se protege el proceso de cifrado?

¿Qué hacer con IvBuffer para el nuevo cifrado AES? ¿Para almacenarlo en la base de datos o para ponerlo en el código?

Agregado

Por la siguiente respuesta, entiendo que la clave codificada adicional no mejora mi seguridad. Necesito almacenar la clave de cifrado en la base de datos (la opción 7 se encuentra aquí Dónde almacenar una clave para el cifrado? ). Desafortunadamente, no puedo usar dispositivos externos para el almacenamiento de claves y, por lo tanto, necesito usar la base de datos.

¿Se pregunta si la seguridad de la opción cuando la clave se almacena en el texto sin formato en la base de datos es mejor que la opción cuando se usa una clave codificada adicional para la misma clave almacenada en la base de datos?

    
pregunta Michael 17.02.2017 - 07:33
fuente

1 respuesta

3

Si lo entendí correctamente, desea continuar usando la clave antigua, que sigue siendo codificada, pero solo la usa para cifrar las claves AES, que luego se usan para cifrar y descifrar sus datos.

Esto no mejora tu seguridad. La vulnerabilidad en su diseño anterior es que la clave y la IV están codificadas. Si cifra la nueva clave con la clave antigua, eso agrega una capa adicional de complejidad (porque necesita manejar varias claves) pero en realidad no soluciona el problema que tuvo (codifica una clave). Si desea realizar la rotación de claves, como dice, debe reemplazar la clave anterior con la nueva después de volver a cifrar los datos que utilizó para cifrar con el cifrado anterior.

En lo que se refiere a la IV: desde un punto de vista criptográfico, siempre que las IV sean únicas por texto cifrado, éstas son públicas. Por ejemplo, en el modo CBC, el IV es solo la primera entrada que XOR en el texto sin formato; para todos los bloques subsiguientes, el texto cifrado del bloque anterior se usa para eso. Lo que importa es la frescura.

Alternativas a la codificación rígida

El almacenamiento de su clave en una base de datos es mejor porque al menos tiene la capacidad de cambiar la clave más adelante. Si protege adecuadamente la base de datos (es decir, la protección con contraseña y el cifrado), podría ser una solución razonablemente segura. Sin embargo, es probable que sea más fácil usar una biblioteca existente que almacena su clave en un archivo, protegido con una frase de contraseña. Eso significaría que para acceder a los datos, su lógica consistiría en:

  • obtener la frase de contraseña
  • extraiga la clave del archivo utilizando la frase de contraseña
  • descartar la frase de contraseña de la memoria
  • descifre los datos usando la clave, cifre y escriba cualquier información nueva
  • descartar la clave de la memoria

Es probable que puedas hacer todas las frases de contraseña usando una biblioteca. Te recomiendo que abras una segunda pregunta si tienes más preguntas sobre ese tema.

    
respondido por el Rens van der Heijden 17.02.2017 - 09:48
fuente

Lea otras preguntas en las etiquetas