¿Cuál es la manera recomendada de almacenar datos de clientes cifrados simétricamente en reposo?

0

Tengo el requisito de almacenar datos de clientes cifrados simétricamente en reposo en una base de datos. ¿Cuál es la última forma recomendada de hacer esto? Mi investigación me ha llevado a esto:

  1. Genera 8 bytes aleatorios para una sal
  2. Genere PBKDF2-HMAC-SHA1 usando OpenSSL con el salt # 1, la contraseña del cliente, 2 ^ 16 iteraciones y un tamaño de clave de 32
  3. Cifre los datos con AES-256-CBC usando OpenSSL usando la clave del # 2
  4. Cree un resumen HMAC / SHA1 utilizando OpenSSL de los datos cifrados del paso # 3 y la clave del # 2
  5. Almacene los datos cifrados y el resumen en la base de datos como dos campos separados o como un solo blob con los dos elementos concatenados juntos por un delimitador
  6. Ejecuta lo anterior a la inversa para descifrar
pregunta Kevin 16.01.2016 - 18:39
fuente

1 respuesta

0

Lo que estás proponiendo suena razonable.

La sal está en el lado pequeño de suficiente pero sigue siendo adecuada. Incrementarlo a 12 o 16 bytes probablemente no se vería afectado (la longitud de sal no está muy relacionada con el rendimiento) y puede hacer que el sistema sea un poco más seguro.

En cuanto al número de iteraciones, el consejo es tantos como pueda tolerar. Por lo tanto, aumente el número de iteraciones hasta que el rendimiento se convierta en un problema.

Un tamaño de clave de 32 suena genial.

No me queda claro si necesita el resumen creado en los pasos 4 y 5. Su comentario menciona una preocupación sobre la manipulación indebida durante la transmisión, pero si está usando SSL (y si no lo está, entonces básicamente no tiene seguridad) , la transmisión debe ser segura. Así que realmente no veo una necesidad para ello. Especialmente si está almacenando y transmitiendo los datos encriptados y compaginados juntos. Quizás si guardó el resumen en un sitio separado, podría ayudar a probar que no hubo manipulación (intencional o de otro tipo). Pero no lo veo ayudando en tu situación.

Si bien es probable que no se haya molestado en mencionar que está guardando el salt en su pregunta, le mencionaré que debe guardarlo para poder recrear la clave de cifrado de 32 bytes para el descifrado.

En general, esto suena razonable.

    
respondido por el Neil Smithline 16.01.2016 - 21:54
fuente

Lea otras preguntas en las etiquetas