Cifrado de archivos en reposo, consideraciones de contraseña

1

Tengo como máximo 10.000 archivos que quiero almacenar encriptados con uno  contraseña.

La idea actual es:

  1. Tiene 1 archivo maestro que contiene parámetros (caros) para scrypt.
  2. Para el cifrado / descifrado, incluya una contraseña de usuario con los parámetros dados y úsela como clave para el cifrado / descifrado de cifrado simétrico
  3. Cada archivo tiene un prefijo criptográfico seguro aleatorio que es único (solo se usa una vez)

Mis preguntas:

¿Esto es generalmente incorrecto?

Es una contraseña única / clave derivada suficiente o

  1. ¿Debo obtener una nueva clave para cada archivo (me preocupa el tiempo que lleva)?
  2. ¿Debo obtener una nueva clave para una gran cantidad de archivos (por ejemplo, cada 100)?
pregunta Krampenschiesser 22.04.2017 - 18:28
fuente

1 respuesta

1
  

¿Esto es generalmente incorrecto?

Veo dos problemas con tu implementación:

  1. Usar un prefijo aleatorio en lugar de IV

    Esto puede hacerse técnicamente, pero no se recomienda ni se recomienda. Consulte this para más detalles. Genere un IV aleatorio para cada archivo y guárdelo junto con el texto cifrado (como prefijo o sufijo).

  2. Usar clave derivada directamente como clave de cifrado.

    En caso de que se cambie una contraseña, deberá descifrar y cifrar todos los archivos nuevamente. Para resolver esto, debe generar una única clave de cifrado aleatoria que se utilizará para cifrar todos los archivos. Luego cifrará esta clave con una clave maestra derivada de la contraseña del usuario y la guardará en un archivo separado. Cuando se cambia la contraseña (y, por consiguiente, clave maestra ), solo descifrarás y cifrarás el archivo que contiene la clave de cifrado . Para ver un ejemplo de una implementación bien conocida que utiliza un esquema similar, eche un vistazo a DPAPI y cómo maneja las llaves.

  

Es una contraseña única / clave derivada suficiente o

     
  1. ¿Debo obtener una nueva clave para cada archivo (me preocupa el tiempo que lleva)?
  2.   
  3. ¿Debo obtener una nueva clave para una gran cantidad de archivos (por ejemplo, cada 100)?
  4.   

Esto depende de contra qué estés defendiendo. Teniendo en cuenta mis comentarios anteriores, no derivará cada clave de cifrado a partir de la contraseña del usuario, sino que las generará aleatoriamente a partir de un CSPRNG sólido. Si tiene una nueva clave de cifrado aleatoria para cada archivo, deberá almacenar la clave de cifrado cifrada con clave maestra junto con el texto cifrado y IV. Si el archivo clave de cifrado se compromete, solo se compromete un archivo. Debe pensar si es posible que una única clave de cifrado se vea comprometida sin comprometer la clave maestra (¿fuerza bruta?). Si este escenario no es probable o decide no defenderse, puede usar una única clave de cifrado para todos los archivos.

Una cosa más que se debe tener en cuenta al usar una sola clave para todos los archivos es cómo pueden ser los datos de gran tamaño cifrados con una sola clave antes de que necesite cambiar la clave. Para obtener una respuesta a esta pregunta, consulte esto y this .

    
respondido por el Marko Vodopija 24.04.2017 - 11:09
fuente

Lea otras preguntas en las etiquetas