Como obter uma criptografia de disco completa utilizável com criptografias diferentes para usuários diferentes

Como obter uma criptografia de disco completa utilizável com criptografias diferentes para usuários diferentes

Quero ter uma criptografia completa do sistema no meu laptop. Mas tenho dois usuários, um para casa e outro para trabalho e quero uma criptografia separada para ambos. Claro que eu poderia fazer uma criptografia completa do disco com dm-crypt e usar uma segunda camada de criptografia com ecryptfs para criptografar os diretórios iniciais. No entanto, isso parece não ser uma boa ideia por razões de desempenho. Então, como posso configurar um sistema tal que:

  • todo o disco rígido é criptografado
  • quando o usuário 1 está logado e o usuário 2 não, os dados do usuário 2 são criptografados para o usuário 1 e vice-versa
  • Eu preciso digitar uma senha na inicialização que descriptografa o sistema (como em uma configuração normal de LVM/dm-crypt) e apenas uma segunda que efetua login no usuário x e descriptografa sua partição
  • o desempenho é semelhante a uma simples criptografia completa de disco
  • a solução deve funcionar em conjunto com um SSD, ou seja, deve suportar TRIM

Eu quero usar o Ubuntu como uma distro para isso, se isso for importante.

Responder1

  1. Não criptografe todo o disco rígido (como em /dev/sda, faça isso por partição (ou mais precisamente por sistema de arquivos - veja abaixo).

  2. Tenha sistemas de arquivos separados montados nas residências para os dois usuários. Estou evitando intencionalmente escrever partições separadas, pois embora essa seja a maneira usual de fazer as coisas, é restritiva em alguns aspectos. Pode ser mais conveniente ter uma partição inicial grande, que contenha arquivos grandes que contenham os sistemas de arquivos criptografados e sejam montados conforme necessário. A vantagem é o redimensionamento mais fácil das casas dos usuários, mantendo-as separadas.

  3. Montagens automáticas no login são possíveis através do PAM. Observe que você não deseja usar a mesma senha para login e para o login real.criptografia de dados. Em vez disso, você usa o LUKS ou o imita, armazenando a chave de criptografia em um arquivo que é criptografado com a senha de login. Isso garante que uma alteração na senha de login não afetará os dados criptografados, mas apenas a chave criptografada e, portanto, você não terá que se preocupar em criptografar novamente os usuários inteiros.

Instruções gerais:

  • uso de particionamento gdisk(também conhecido como gptfdiskàs vezes) partedou qualquer outro programa apropriado, leia as páginas de manual para obter detalhes (o particionamento está um pouco fora do escopo deste controle de qualidade)

  • sistemas de arquivos baseados em arquivos criptografados - tenho algumas objeções ao design do LUKS, então geralmente estou usando cryptsetupo modo "simples", que imita o LUKS em alguns aspectos. Se você escolher LUKS, poderá simplesmente reduzir as etapas para cryptsetup(com opções apropriadamente modificadas)

    1. prepare a chave de criptografia e a senha. Esta é uma parte interessante - para criptografar os dados você quer algo com aleatoriedade suficiente (uma senha de 8 letras realmente não é suficiente) e para a senha algo que você possa alterar facilmente (sem precisar criptografar novamente todo o sistema de arquivos) e que seja razoavelmente fácil para lembrar e digitar. Esses requisitos vão um contra o outro. Portanto, usaremos o mesmo truque que o LUKS faz (e que na verdade pode ser considerado uma variação de umcriptossistema híbridoem algum sentido)). OChave de encriptaçãopode ser mais ou menos aleatório - use alguns dados realmente aleatórios (por exemplo, de /dev/random) ou um hash razoavelmente longo como SHA-2 ou SHA-3 (o primeiro foi projetado pela NSA, se você estiver em dúvida se deve usá-lo ou não em luz dos acontecimentos recentes) de uma senha razoavelmente longa.

      Razoavelmente longo no primeiro caso (e no caso de dados realmente aleatórios) significa que o comprimento deve ser aproximadamente o comprimento da chave escolhida para a cifra usadamaiso comprimento dovetor de inicialização. No segundo caso, significa que deveria ser difícilforça brutaisto. Usar um hash tem a vantagem de poder recuperar a chave se ela for danificada ou perdida (desde que você se lembre da senha inicial que foi criptografada, é claro). Essa chave é então criptografada e armazenada em um arquivo. A senha da chave criptografada no seu caso será a mesma da senha de login.

      # 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 -binaryproduz a forma binária do hash SHA-512 a partir de sua entrada padrão, openssl enc -bfcriptografa-o usandoBaiacu- sinta-se à vontade para escolher hash e cifra de acordo com sua preferência (Twofish ou Rijndael são ambos bastante testados, mas outras cifras disponíveis no kernel também devem servir).

      Manter a chave fora do dispositivo criptografado tem a desvantagem de precisar de algo adicional além dos próprios dados criptografados - o LUKS armazena a chave em seus cabeçalhos, portanto, é independente. Por outro lado, você está vinculado a um conjunto específico de ferramentas. Embora não tenha sido projetado descuidadamente e esteja presente na maioria das instalações, vocêprecisaras ferramentas especiais para acessá-lo.

      Por outro lado, com um arquivo separado, você pode escolher qualquer método de armazenamento da chave. Você pode até colocá-lo em uma mídia removível, inseri-lo antes do login e removê-lo assim que o sistema de arquivos estiver montado (provavelmente você poderia até conectar o login automático no caso de anexar a mídia ao computador). Claro que tudo isto deve ser bem pensado já que a máxima de segurança“Não invente sua própria criptografia”se aplica (ver, por exemploesta postagem no Security SE) - o que pode realmente ser um argumento para usar o LUKS. Fazer backup da chave é obviamente fácil.

    2. crie um arquivo vazio que conterá o sistema de arquivos

      dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
      
    3. crie o dispositivo criptografado

      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 -dpede senha no stdin e tenta descriptografar a chave de criptografia. cryptsetup create ... encryptedfs /path/to/backing_file.enccriou um dispositivo DM criptografado chamado encryptedfscom suporte do arquivo criado anteriormente. Opção importante que -cseleciona a cifra de criptografiaeseu modo de operação

    4. preencha o dispositivo com zeros - isso efetivamente coloca "lixo aleatório" no arquivo de apoio e torna menos óbvio qual pode ser o conteúdo do arquivo (caso contrário, você poderia dizer onde as coisas foram escritas procurando por blocos que não estão zerados da etapa 2).

      dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
      
    5. Crie um sistema de arquivos

      mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
      
    6. Coloque uma linha correspondente /etc/fstabcaso queira fazer tudo sozinho ou em/etc/crypttabse você deseja algum tipo de integração com ferramentas do sistema.

  • para (des)montagem automática no login/logout, vou encaminhá-lo para odocumentação pam_mount.

Responder2

Posso pensar em duas maneiras valiosas de obter esse sistema sem criptografar sua casa duas vezes.

  • partição inicial separada:crie uma partição separada que seja montada em /home. Cada usuário então criptografa sua casa via encfs.
  • partição inicial separada para cada usuário:cada usuário obtém uma partição separada para sua casa, que é criptografada usando dm-crypt. Esta partição é montada /home/userquando ele faz login.

Claro, além da criptografia de /;-)

Em ambos os casos as casas podem ser montadas automaticamente durante o processo de login se você usar a mesma senha para login e criptografia. (pode ser configurado, por exemplo /etc/security/pam_mount.conf.xml, há muitos tutoriais) Embora o primeiro método não criptografe os nomes das pastas de seus usuários, usando o segundo método realmente tudo é criptografado. Então eu prefiro (e realmente uso) o método dois ;-)

informação relacionada