Dm-crypt

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Dm-crypt and the translation is 85% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎


Resources

dm-crypt É um sistema de criptografia de disco usando a estrutura de criptografia de kernels e device mapper como subsistema. Com o dm-crypt, os administradores podem criptografar discos inteiros, volumes lógicos, partições, mas também arquivos únicos.

O subsistema dm-crypt suporta o Linux Unified Key Setup (LUKS) estrutura, que permite várias chaves acessar os dados criptografados, bem como manipular as chaves (como alterar as chaves, adicionando frases adicionais, etc.) Embora dm-crypt suporte configurações não-LUKS também, este artigo irá focar a funcionalidade LUKS, principalmente devido à sua flexibilidade, capacidade de gestão, bem como amplo apoio na comunidade.

Configuração

Existem dois pré-requisitos antes que se possa começar a usar dm-crypt:

  1. Configuração do Kernel do Linux
  2. Instalação do pacote sys-fs/cryptsetup

Configuração do Kernel

Para usar dm-crypt há um número de entradas de configuração que são necessárias.

Em primeiro lugar, o suporte à infra-estrutura device mapper, bem como crypt target deve ser incluído:

KERNEL Enabling device mapper and crypt target
[*] Enable loadable module support
Device Drivers --->
    [*] Multiple devices driver support (RAID and LVM) --->
        <*> Device mapper support
        <*>   Crypt target support

Em seguida, o kernel do Linux precisa suportar o conjunto de APIs criptográficas que o administrador deseja usar para criptografia. Estes podem ser: Cryptographic API

KERNEL Enabling cryptographic API functions
[*] Cryptographic API --->
    <*> XTS support
    <*> SHA224 and SHA256 digest algorithm
    <*> AES cipher algorithms
    <*> AES cipher algorithms (x86_64)
    <*> User-space interface for symmetric key cipher algorithms

Se o sistema de arquivos root também será criptografado, será necessário criar um sistema de arquivos ram inicial no qual o sistema de arquivos root será descriptografado antes de ser montado. Assim, isso também requer suporte a initramfs:

KERNEL Enabling initramfs support
General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Instalação do Cryptsetup

O pacote sys-fs/cryptsetup fornece o comando cryptsetup, que é usado para abrir ou fechar o armazenamento criptografado, bem como gerenciar as senhas ou chaves associadas a ele.

root #emerge --ask sys-fs/cryptsetup

Armazenamento Criptografado

Arquivo chave ou Frase de Acesso

Para começar com o armazenamento criptografado, o administrador precisará decidir qual método usar para a chave de criptografia. Com cryptsetup a escolha é uma frase de acesso ou um arquivo chave. No caso de um arquivo chave, este pode ser qualquer arquivo, mas recomenda-se usar um arquivo com dados aleatórios que esteja devidamente protegido (considerando que o acesso a este arquivo de chave significará acesso aos dados criptografados).

Para criar o arquivo chave, utilize o comando: dd

root #dd if=/dev/urandom of=/etc/keys/enc.key bs=1 count=4096

Nas próximas seções, mostraremos todos os comandos para ambas as situações - frase de acesso e arquivo chave. É claro que apenas um método é necessário.

Criando uma plataforma de armazenamento criptografada

Para criar uma plataforma de armazenamento criptografada (que pode ser um disco, partição, arquivo, ...) use o comando cryptsetup com o luksFormat.

Por exemplo, ter /dev/vdb2 como o meio de armazenamento para os dados criptografados:

root #cryptsetup -s 512 luksFormat /dev/vdb2
This will overwrite data on /dev/vdb2 irrevocably.
  
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: ...
Verify passphrase: ...

Para usar um arquivo de chaves em vez de uma frase secreta:

root #cryptsetup -s 512 luksFormat /dev/vdb2 /etc/keys/enc.key
This will overwrite data on /dev/vdb2 irrevocably.
  
Are you sure? (Type uppercase yes): YES

O -s 512 diz cryptsetup Qual keylength usar para a chave de criptografia real (ao contrário da frase secreta ou arquivo chave, que são usados para acessar essa chave de criptografia real).

Abrindo o armazenamento criptografado

A fim de abrir o armazenamento criptografado (isto é, tornar os dados reais acessíveis através de decodificação transparente), utilize luksOpen.

root #cryptsetup luksOpen /dev/vdb2 myname
Enter passphrase for /dev/vdb2: ...

Se um arquivo chave for usado, então o comando ficará assim:

root #cryptsetup luksOpen -d /etc/keys/enc.key /dev/vdb2 myname

Quando o comando termina com êxito, um novo arquivo de dispositivo chamado /dev/mapper/myname será disponibilizado.

Se esta é a primeira vez que este dispositivo criptografado é usado, ele precisa ser formatado. O exemplo a seguir utiliza o sistema de arquivos Btrfs Mas é claro que qualquer outro sistema de arquivos fará:

root #mkfs.btrfs /dev/mapper/myname

Uma vez que o sistema de arquivos é formatado ou a formatação já foi feita no passado, o arquivo do dispositivo pode ser montado no sistema:

root #mount /dev/mapper/myname /home

Fechando o armazenamento criptografado

Para fechar o armazenamento criptografado (ou seja, garantir que os dados reais não são mais acessíveis através da decodificação transparente) utilize: luksClose

root #cryptsetup luksClose myname

Claro, certifique-se de que o dispositivo não está mais em uso.

Manipulando chaves LUKS

As chaves LUKS são usadas para acessar a chave de criptografia real. Elas são armazenados em slots no cabeçalho da partição, disco ou arquivo (criptografado).

Listando os slots

Com o luksDump, informações sobre a partição, disco ou arquivos criptografados podem ser mostrados. Isso inclui os slots:

root #cryptsetup luksDump /dev/vdb2
LUKS header information for /dev/vdb2
  
Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        512
MK digest:      34 3b ec ac 10 af 19 e7 e2 d4 c8 90 eb a8 da 3c e4 4f 2e ce
MK salt:        ff 7c 7f 53 db 53 48 02 a4 32 dc e0 22 fc a3 51
                06 ba b3 48 b3 28 13 a8 7a 68 43 d6 46 79 14 fe
MK iterations:  59375
UUID:           2921a7c9-7ccb-4300-92f4-38160804e08c
  
Key Slot 0: ENABLED
        Iterations:             241053
        Salt:                   90 0f 0f db cf 66 ea a9 6c 7c 0c 0d b0 28 05 2f
                                8a 5c 14 54 98 62 1a 29 f3 08 25 0c ec c2 b1 68
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             273211
        Salt:                   01 4c 26 ed ff 18 75 31 b9 89 5d a6 e0 b5 f4 14
                                48 d0 23 47 a9 85 78 fb 76 c4 a9 d0 cd 63 fb d7
        Key material offset:    512
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

No exemplo acima, são utilizados dois slots. Observe que luksDump não dá nada sensível - é apenas exibido o conteúdo do cabeçalho LUKS. Nenhuma chave de criptografia tem que ser fornecida para chamar luksDump.

Adicionando arquivo chave ou frase secreta

Para adicionar um arquivo chave ou frase secreta para acessar o armazenamento criptografado, utilize: luksAddKey

root #cryptsetup luksAddKey /dev/vdb2
Enter any passphrase: (Enter a valid, previously used passphrase to unlock the key)
Enter new passphrase for key slot: ... 
Verify passphrase: ...

Para usar um arquivo chave para desbloquear a chave (mas ainda adicionar uma frase secreta):

root #cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2
Enter new passphrase for key slot: ...
Verify passphrase: '''

Um arquivo chave deve ser adicionado em (/etc/keys/backup.key):

root #cryptsetup luksAddKey /dev/vdb2 /etc/keys/backup.key

Ou, para usar o primeiro arquivo chave para destravar a chave principal:

root #cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2 /etc/keys/backup.key

Remvoendo arquivo chave ou frase secreta

Com o luksRemoveKey, um arquivo chave ou frase secreta pode ser removido (para que eles não possam mais serem usados para descriptografar o armazenamento):

root #cryptsetup luksRemoveKey /dev/vdb2
Enter LUKS passphrase to be deleted: ...

Ou remova o arquivo chave:

root #cryptsetup luksRemoveKey -d /etc/keys/backup.key /dev/vdb2

Certifique-se de que pelo menos um método para acessar os dados ainda esteja disponível. Uma vez que uma frase secreta ou arquivo chave é removido, não poderá ser recuperado novamente.

Esvaziando o slot

Suponha que a frase secreta ou arquivo chave não é mais conhecido, então o slot pode ser liberado. Naturalmente, isso requer conhecimento prévio de qual slot que a frase secreta ou arquivo chave foi armazenado.

Por exemplo, para esvaziar o slot 2 (que é o terceiro slot, pois os slots são numerados a partir do 0):

root #cryptsetup luksKillSlot /dev/vdb2 2

Este comando pedirá uma frase de acesso válida antes de continuar. Ou pode-se utilizar o arquivo chave:

root #cryptsetup luksKillSlot -d /etc/keys/enc.key /dev/vdb2 2

Automate mounting encrypted file systems

Until now, the article focused on manual setup and mounting/unmounting of encrypted file systems. An init service dmcrypt exists which automates the decrypting and mounting of encrypted file systems.

Configuring dm-crypt

Edit the /etc/conf.d/dmcrypt file and add in entries for each file system. The supported entries are well documented in the file, the below example is just that - an example:

FILE /etc/conf.d/dmcryptAutomatically enabling two encrypted file systems
# Definition for /dev/mapper/home (for /home)
target=home
source=UUID="abcdef12-321a-a324-a88c-cac412befd98"
key=/etc/keys/home.key
 
# Definition for /dev/mapper/local (for /usr/local)
target=local
source=UUID="fedcba34-4823-b423-a94c-cadbefda2943"
key=/etc/keys/local.key

Configuring fstab

The next step is to configure /etc/fstab to automatically mount the (decrypted) file systems when they become available. It is recommended to first obtain the UUID of the decrypted (mounted) file system:

root #blkid /dev/mapper/home
/dev/mapper/home: UUID="4321421a-4321-a6c9-de52-ba6421efab76" TYPE="ext4"

Then, update the /etc/fstab file accordingly:

FILE /etc/fstabAutomounting the decrypted file systems
UUID="4321421a-4321-a6c9-de52-ba6421efab76"   /home        ext4   defaults   0   0
UUID="bdef2432-3bd1-4ab4-523d-badcf234a342"   /usr/local   ext4   defaults   0   0

Add initscript to bootlevel

Don't forget to have the dmcrypt init service launched at boot:

root #rc-update add dmcrypt boot

Recursos adicionais

  • Dm-crypt full disk encryption A Gentoo Wiki fornece informações suplementares sobre o uso de sistemas de arquivos criptografados para instalações do Gentoo Linux
  • The cryptsetup FAQ Hospedado no GitLab abrange uma ampla gama de perguntas frequentes.