Como funciona tecnicamente a autenticação pré-inicialização com criptografia de disco?

Como funciona tecnicamente a autenticação pré-inicialização com criptografia de disco?

Estou procurando uma solução para criptografar totalmente minha unidade SSD de inicialização dupla (ela ainda é nova e vazia e quero configurar a criptografia antes de colocar qualquer coisa nela).

Embora haja muito caos na web em relação a essa questão, parece que o TrueCrypt pode ser capaz de fazer isso, embora eu possa precisar de seu carregador de inicialização em um disco de inicialização extra. Pelo que estou lendo, algumas ferramentas do Linux (incluindo alguns GRUB2 modificados) também podem fazer isso.

No entanto, tenho minhas dúvidas, e nenhum artigo que li foi profundo o suficiente para responder a uma pergunta básica: se todo o disco estiver criptografado e alguma ferramenta de pré-inicialização solicitar ao usuário uma chave para descriptografá-lo, não é? significa que esta ferramenta deve ser executada abaixo do sistema operacional que será inicializado? Em outras palavras, existem ferramentas que deixam o sistema operacional inconsciente do fato de que os discos que ele vê estão realmente criptografados?

Se não existir tal ferramenta, isso não significa que a ferramenta de descriptografia de alguma forma precisa passar as informações de descriptografia para o sistema operacional na inicialização? Posso imaginar que isso seria difícil de fazer em várias plataformas.

Responder1

Se todo o disco estiver criptografado e alguma ferramenta de pré-inicialização solicitar ao usuário uma chave para descriptografá-lo, isso não significa que essa ferramenta deve ser executada no sistema operacional que será inicializado?

Sim, praticamente.Criptografia completa de disco baseada em hardwarefaz isso: a criptografia é tratada inteiramente pelo dispositivo (disco rígido/flash) ou possivelmente em um controlador ao longo da cadeia que leva ao(s) dispositivo(s) físico(s), e não é "visível" para o sistema operacional.
Com isso, o sistema operacional faz E/S exatamente como faria se estivesse lidando com um dispositivo simples e não criptografado, a mágica acontece no hardware (e/ou firmware - "abaixo" do sistema operacional em qualquer caso).

Se não existir tal ferramenta, isso não significa que a ferramenta de descriptografia de alguma forma precisa passar as informações de descriptografia para o sistema operacional na inicialização?

De fato, teria que haver alguma forma de transferência de informações, se a criptografia não pudesse ser feita "embaixo" do sistema operacional (seja como acima, ou possivelmente usando técnicas de virtualização - mas então você tem dois (ou mais) sistemas operacionais em execução). E sim, isso significa que o cross-OS é difícil.
Você também precisará que o código boostrap (pelo menos o bootloader) seja descriptografado se você não tiver assistência de hardware/firmware.

A Wikipédiacriptografia de discoartigo tem mais sobre isso.

Responder2

Se você tiver suporte de hardware (ou mais precisamente firmware, ou seja, BIOS) para unidades criptografadas, poderá criptografar o disco completo com o firmware. Há desvantagens em fazer isso: não existem muitos computadores que suportem criptografia de disco, e isso vincula você a um firmware específico (ou pior, se o seu computador tiver um TPM e a chave de criptografia estiver em um TPM, isso vincula você a esta placa-mãe específica, a menos que você tenha feito backup da chave de criptografia de armazenamento).

Se o sistema operacional fizer a criptografia, deverá haver um pequeno espaço no disco que não esteja criptografado, onde as partes iniciais do sistema operacional serão armazenadas. Uma configuração comum no Linux é ter uma /bootpartição de texto simples separada e criptografar todas as outras partições. “Criptografia de disco completo” é um nome um pouco impróprio: geralmente é usado para significar “criptografia de volume completo”, onde um volume normalmente é uma partição em vez de um disco. A criptografia de disco completo ocorre quando você não criptografa todos os arquivos (ou pelo menos uma árvore de diretórios) separadamente.

No Linux, a ferramenta padrão para criptografia de disco completo édmcrypt. Está disponível em todas as principais distribuições e integrado em muitos instaladores.

Responder3

Sim, com o Grub2 a /bootpartição pode ser criptografada por LUKs:

  • /bootcomo uma pasta /em uma partição criptografada LUKs
  • /bootem um LUKs criptografado em uma partição
  • E assim por diante, já que o Linux permite que você use qualquer lista de bloqueios não classificada como um dispositivo e tal pode ser a raiz (o initramfs é muito complexo de configurar para essa lista de bloqueios não classificada, mas pode ser feito, é uma maneira paranóica)

Também testei a maneira paranóica de criptografar /boot(quando é uma partição) com mais de uma camada:

  1. /dev/sda5como a única partição lógica no disco (MBR com apenas duas partições estendidas /boote /)
  2. Acima /dev/sda5coloquei LUKs nível 1, mapeado para/dev/mapper/level_0001
  3. Acima /dev/mapper/level_0001coloquei LUKs nível 2, mapeado para/dev/mapper/level_0002
  4. Acima /dev/mapper/level_0002coloquei LUKs nível 3, mapeado para/dev/mapper/level_0003
  5. E assim por diante, /dev/mapper/level_####coloquei o nível LUKs ####+1, mapeado para/dev/mapper/level_####+1
  6. Acima /dev/mapper/level_3436coloquei LUKs nível 3437, mapeado para/dev/mapper/level_3436
  7. Por cima /dev/mapper/level_3437coloquei um Ext4, montado como/boot
  8. Mais /booteu instalo o Grub2 depois de executarecho GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. Over /dev/sda6eu coloquei /com apenas um nível de LUKs

Na hora da inicialização ele me pede 3.437 senhas diferentes, eu uso mais de 32 caracteres em cada uma.

Foi apenas uma prova de conceito, o tempo de inicialização é horrível.

Mas se eu fizer o mesmo, /toda a velocidade de leitura/gravação do sistema também será horrível, mas pelo menos o Linux funciona. Também testei com mais de dez mil níveis; funciona parcialmente, a leitura/gravação cai para 10KiB/s (sim, realmente horrível) na minha CPU, a inicialização leva um dia inteiro e os aplicativos tendem a travar muito devido ao tempo limite do disco ao fazer acesso OnLine (navegar, etc) .

Portanto, colocar três ou quatro níveis de LUKs é aceitável, também dez, depende muito da sua CPU e para que você usa CPU versus DISCO, Renderização 3D versus Enorme mistura de dados, etc.

PD: Você também pode usar diferentes funções hash e algoritmos em cada nível de LUKs e também pode usar --iter-time=#para aumentar o tempo de montagem (aviso: na pré-inicialização do Grub2 esse tempo de montagem é três ou quatro vezes maior, usando um valor em torno de dez mil causas quase trinta segundos na pré-inicialização).

informação relacionada