Cómo obtener un cifrado de disco completo utilizable con diferentes cifrados para diferentes usuarios

Cómo obtener un cifrado de disco completo utilizable con diferentes cifrados para diferentes usuarios

Quiero tener un cifrado completo del sistema en mi computadora portátil. Pero tengo dos usuarios, uno para casa y otro para el trabajo, y quiero un cifrado separado para ambos. Seguro que podría cifrar el disco completo con dm-crypt y usar una segunda capa de cifrado con ecryptfs para cifrar los directorios de inicio. Sin embargo, esto no parece ser una buena idea por motivos de rendimiento. Entonces, ¿cómo puedo configurar un sistema tal que:

  • todo el disco duro está cifrado
  • Cuando el usuario 1 inicia sesión y el usuario 2 no, los datos del usuario 2 se cifran para el usuario 1 y viceversa.
  • Necesito escribir una contraseña en el arranque que descifre el sistema (como en una configuración habitual de LVM/dm-crypt) y solo una segunda que inicie sesión en el usuario x y descifre su partición.
  • el rendimiento es similar a un simple cifrado de disco completo
  • la solución debería funcionar junto con un ssd, es decir, debería ser compatible con TRIM

Quiero usar ubuntu como distribución para esto, si es importante.

Respuesta1

  1. No cifre todo el disco duro (como en /dev/sda, hágalo por partición (o más precisamente por sistema de archivos; consulte a continuación).

  2. Tenga sistemas de archivos separados montados en los hogares para los dos usuarios. Estoy evitando intencionalmente escribir particiones separadas, ya que si bien esa es la forma habitual de hacer las cosas, resulta restrictiva en algunos aspectos. Podría ser más conveniente tener una partición principal grande, que contenga archivos grandes que contengan los sistemas de archivos cifrados y se monten según sea necesario. La ventaja es que es más fácil cambiar el tamaño de las casas de los usuarios y mantenerlas separadas.

  3. Los montajes automáticos al iniciar sesión son posibles a través de PAM. Tenga en cuenta que no desea utilizar la misma contraseña para iniciar sesión y para la sesión real.cifrado de datos. En su lugar, puede utilizar LUKS o imitarlo almacenando la clave de cifrado en un archivo que a su vez está cifrado con la contraseña de inicio de sesión. Esto garantiza que un cambio en la contraseña de inicio de sesión no afectará los datos cifrados sino solo la clave cifrada y, por lo tanto, no tendrá que encargarse de volver a cifrar la casa de usuarios completos).

Instrucciones generales:

  • uso de particionamiento gdisk(también conocido como gptfdiska veces), partedo cualquier otro programa apropiado, lea las páginas de manual para obtener más detalles (el particionamiento está un poco fuera del alcance de este control de calidad)

  • sistemas de archivos cifrados basados ​​en archivos: tengo algunas objeciones al diseño de LUKS, por lo que generalmente lo uso cryptsetupen el modo "simple", que imita a LUKS en algunos aspectos. Si elige LUKS, puede simplemente reducir los pasos a cryptsetup(con las opciones modificadas adecuadamente)

    1. Prepare la clave de cifrado y la contraseña. Esta es una parte interesante: para cifrar los datos, desea algo con suficiente aleatoriedad (la contraseña de 8 letras realmente no es suficiente) y para la contraseña, algo que pueda cambiar fácilmente (sin necesidad de volver a cifrar todo el sistema de archivos) y que sea razonablemente fácil. recordar y escribir. Estos requisitos van bastante contra otros. Por lo tanto, usaremos el mismo truco que hace LUKS (y que en realidad puede considerarse una variación de uncriptosistema híbridoen algún sentido)). ElClave de encriptaciónpuede ser más o menos aleatorio: use algunos datos realmente aleatorios (por ejemplo, de /dev/random) o un hash razonablemente largo como SHA-2 o SHA-3 (el primero fue diseñado por la NSA, si se pregunta si usarlo o no en luz de los acontecimientos recientes) de una frase de contraseña razonablemente larga.

      Razonablemente largo en el primer caso (y en el caso de datos realmente aleatorios) significa que la longitud debe ser aproximadamente la longitud de la clave elegida para el cifrado utilizado.másla longitud delvector de inicialización. En el segundo caso significa que debería ser difícilfuerza brutaél. Usar un hash tiene la ventaja de poder recuperar la clave si se daña o se pierde (siempre que recuerde la frase de contraseña inicial que fue codificada, por supuesto). Luego, esta clave se cifra y se almacena en un archivo. La frase de contraseña para la clave cifrada en su caso será la misma que la contraseña de inicio de sesión.

      # set up the encrypted encryption key
      printf "Reasonably long and complicated passphrase" \
          | openssl dgst -sha512 -binary \
          | openssl enc -bf > /path/to/key.enc
      

      openssl dgst -sha512 -binaryproduce una forma binaria del hash SHA-512 a partir de su entrada estándar, openssl enc -bflo cifra usandopez globo- Siéntete libre de elegir hash y cifrado a tu gusto (Twofish o Rijndael están bastante bien probados, pero otros cifrados disponibles en el kernel también deberían funcionar).

      Mantener la clave fuera del dispositivo cifrado tiene la desventaja de necesitar elementos adicionales además de los datos cifrados en sí: LUKS almacena la clave en sus encabezados, por lo que es autónoma. Por otro lado, estás vinculado a un conjunto particular de herramientas. Si bien no está diseñado descuidadamente y está presente en la mayoría de las instalaciones, ustednecesidadlas herramientas especiales para acceder a él.

      Por otro lado, con un archivo separado, usted es libre de elegir cualquier método para almacenar la clave. Incluso puede colocarlo en un medio extraíble, insertarlo antes de iniciar sesión y eliminarlo una vez que el sistema de archivos esté montado (probablemente incluso podría conectar el inicio de sesión automático en caso de conectar el medio a la computadora). Por supuesto, todo esto debe estar bien pensado ya que la máxima de seguridad"No inventes tu propia criptomoneda"se aplica (ver por ej.esta publicación sobre Seguridad SE), lo que en realidad podría ser un argumento a favor del uso de LUKS. Obviamente, hacer una copia de seguridad de la clave es fácil.

    2. crear un archivo vacío que contendrá el sistema de archivos

      dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
      
    3. crear el dispositivo cifrado

      openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \
          | cryptsetup create \
                  -c twofish-cbc-essiv:sha256 \
                  -s 256 \
                  -h plain \
                  encryptedfs /path/to/backing_file.enc
      

      openssl enc -bf -dSolicita una contraseña en la entrada estándar e intenta descifrar la clave de cifrado. cryptsetup create ... encryptedfs /path/to/backing_file.encDispositivo DM cifrado creado llamado encryptedfsrespaldado por el archivo creado previamente. Opción importante -cque selecciona el cifrado de cifrado.ysu modo de funcionamiento

    4. llene el dispositivo con ceros: esto efectivamente coloca "basura aleatoria" en el archivo de respaldo y hace que sea menos obvio cuál podría ser el contenido del archivo (de lo contrario, podría saber dónde se han escrito las cosas escaneando en busca de bloques que no estén puestos a cero). del paso 2).

      dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
      
    5. Crear un sistema de archivos

      mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
      
    6. Ponga una línea correspondiente /etc/fstaben caso de que quiera hacer todo por su cuenta, o en/etc/crypttabsi desea algún tipo de integración con las herramientas del sistema.

  • para el (des)montaje automático al iniciar/cerrar sesión, lo remitiré aldocumentación pam_mount.

Respuesta2

Se me ocurren dos formas valiosas de lograr un sistema de este tipo sin cifrar su hogar dos veces.

  • partición de casa separada:cree una partición separada que se monte en /home. Luego, cada usuario cifra su hogar mediante encfs.
  • partición de inicio separada para cada usuario:Cada usuario obtiene una partición separada para su hogar que a su vez está cifrada mediante dm-crypt. Esta partición luego se monta /home/usercuando inicia sesión.

Por supuesto, además de cifrado de /;-)

En ambos casos, las casas se pueden montar automáticamente durante el proceso de inicio de sesión si utiliza la misma contraseña para iniciar sesión y cifrar. (Se puede configurar, por ejemplo /etc/security/pam_mount.conf.xml, hay muchos procedimientos) Si bien el primer método no cifra los nombres de las carpetas de sus usuarios, con el segundo método realmente todo se cifra. Así que preferiría (y de hecho uso) el método dos ;-)

información relacionada