LUKS: cifragem de disco completo no Linux — Guia completo (2026)
O LUKS (Linux Unified Key Setup) é o formato padrão de cifragem de disco para Linux, construído sobre o módulo do kernel dm-crypt. É a camada de cifragem usada por predefinição quando seleciona «cifrar o disco» durante a instalação no Fedora, Ubuntu, Debian e na maioria das outras grandes distribuições. Se usa Linux e se importa com a proteção de dados, é quase certo que já está a usar o LUKS — ou deveria estar.
Este guia aborda o LUKS2, a versão atual do formato (introduzida no cryptsetup 2.0.0, em 2018). O LUKS1 ainda é suportado por compatibilidade, mas não tem a derivação de chave Argon2id do LUKS2, a maior flexibilidade do cabeçalho nem a robustez melhorada. As instalações novas devem usar sempre o LUKS2.
Como funciona o LUKS
O LUKS cria uma estrutura no disco composta por:
- Um cabeçalho que contém os metadados: o algoritmo de cifra, a configuração da função de derivação de chave (KDF) e até 32 ranhuras de chave. O cabeçalho ocupa os primeiros megabytes da partição LUKS.
- Ranhuras de chave: cada ranhura contém uma cópia cifrada de forma independente da chave-mestra, cifrada com uma chave derivada de uma palavra-passe do utilizador (ou de um ficheiro de chave). Isto permite que várias palavras-passe ou chaves desbloqueiem o mesmo volume — útil para uma chave de recuperação a par de uma palavra-passe diária.
- A área de dados principal: os dados efetivamente cifrados, que usam a chave-mestra através da camada de dispositivo de blocos
dm-crypt.
A implicação crítica: o cabeçalho LUKS é o ponto único de falha para a recuperação de dados. Se o cabeçalho for corrompido ou sobrescrito, os dados cifrados ficam irrecuperáveis — independentemente de conhecer a palavra-passe. A cópia de segurança do cabeçalho não é opcional.
Criar um contentor LUKS2
Cifrar uma partição ou dispositivo de blocos
# Formatar uma partição como LUKS2 com AES-XTS-512 e KDF Argon2id
sudo cryptsetup luksFormat --type luks2 \
--cipher aes-xts-plain64 \
--key-size 512 \
--hash sha256 \
--pbkdf argon2id \
--pbkdf-memory 1048576 \
--pbkdf-time 5000 \
/dev/sdX2
Ser-lhe-á pedida uma palavra-passe. A opção --pbkdf-memory 1048576 aloca 1 GB de memória para a derivação Argon2id, tornando os ataques de força bruta significativamente mais difíceis. A opção --pbkdf-time 5000 visa 5 segundos de tempo de desbloqueio, aumentando ainda mais o custo dos ataques de força bruta. Ajuste estes parâmetros consoante a memória que o seu ambiente de desbloqueio (initramfs) consegue fornecer.
Abrir (decifrar) e usar o contentor
# Abrir o contentor LUKS, criando um dispositivo /dev/mapper/cryptdata
sudo cryptsetup open /dev/sdX2 cryptdata
# Criar um sistema de ficheiros
sudo mkfs.ext4 /dev/mapper/cryptdata
# ou btrfs: sudo mkfs.btrfs /dev/mapper/cryptdata
# Montar
sudo mount /dev/mapper/cryptdata /mnt/data
Fechar o contentor
sudo umount /mnt/data
sudo cryptsetup close cryptdata
Crítico: cópia de segurança e restauro do cabeçalho
A cópia de segurança do cabeçalho LUKS é o passo operacional mais importante deste guia. Sem ela, a corrupção dos primeiros megabytes da sua partição cifrada significa a perda permanente de dados.
Criar uma cópia de segurança do cabeçalho
sudo cryptsetup luksHeaderBackup /dev/sdX2 \
--header-backup-file luks-header-backup-$(date +%Y%m%d).bin
Guarde este ficheiro de cópia de segurança em pelo menos dois locais: uma cópia offline (unidade USB num local fisicamente separado) e uma cópia na nuvem com cifragem independente. Uma boa opção é guardá-lo num contentor VeraCrypt ou no Proton Drive — a cópia em si não contém os dados, mas qualquer pessoa com a cópia e a sua palavra-passe pode aceder ao volume.
Restaurar um cabeçalho danificado
sudo cryptsetup luksHeaderRestore /dev/sdX2 \
--header-backup-file luks-header-backup-20260612.bin
Isto sobrescreve o cabeçalho atual com a cópia de segurança. Se a cópia for anterior à adição de uma ranhura de chave, essa ranhura desaparecerá após o restauro.
Gerir ranhuras de chave
O LUKS2 suporta até 32 ranhuras de chave por cabeçalho. Use isto para manter uma palavra-passe primária forte e uma chave de recuperação separada guardada offline.
Adicionar uma ranhura de chave
# Adicionar uma nova palavra-passe (pede primeiro a palavra-passe existente)
sudo cryptsetup luksAddKey /dev/sdX2
# Adicionar um ficheiro de chave
sudo cryptsetup luksAddKey /dev/sdX2 /path/to/keyfile.bin
Remover uma ranhura de chave
# Remover por palavra-passe (pergunta qual remover)
sudo cryptsetup luksRemoveKey /dev/sdX2
# Remover por número de ranhura (ranhura 1 neste exemplo)
sudo cryptsetup luksKillSlot /dev/sdX2 1
Ver as ranhuras de chave ativas
sudo cryptsetup luksDump /dev/sdX2 | grep -A3 "Keyslot"
Desbloqueio automático baseado em TPM
As instalações modernas em sistemas com um chip TPM2 podem configurar o desbloqueio automático sem palavra-passe no arranque, protegendo ainda assim a chave contra a remoção do disco. É adequado para computadores de secretária e servidores onde a introdução da palavra-passe no arranque é operacionalmente impraticável.
No Fedora e no Ubuntu com systemd-cryptenroll:
# Registar o TPM2 para a ranhura 0 (requer a palavra-passe existente)
sudo systemd-cryptenroll --tpm2-device=auto /dev/sdX2
# Opcionalmente, vincular a valores PCR (adiciona imposição de measured boot)
sudo systemd-cryptenroll --tpm2-device=auto \
--tpm2-pcrs=0+7 \
/dev/sdX2
O PCR 0 cobre as medições do firmware; o PCR 7 cobre o estado do Secure Boot. Vincular a estes PCR significa que o TPM só libertará a chave se o estado do firmware e do Secure Boot estiver inalterado relativamente ao momento do registo — protegendo contra um bootloader modificado.
Limitação: o desbloqueio automático por TPM protege contra a remoção do disco, mas não contra um atacante que arranque o sistema normalmente (teria de conhecer a palavra-passe de uma ranhura de chave separada, ou comprometer o bootloader sem alterar os valores PCR). Para um portátil com um modelo de ameaça de alto risco, um TPM protegido por PIN ou uma abordagem apenas com palavra-passe pode ser mais apropriado. Veja o guia de reforço do Linux para o enquadramento mais amplo do modelo de ameaça.
Testes de desempenho
Num SSD NVMe moderno com uma CPU que suporta as instruções de hardware AES-NI (todos os processadores x86-64 desde cerca de 2010), o AES-XTS-512 através do dm-crypt adiciona aproximadamente 2–8% de sobrecarga para cargas de trabalho sequenciais. A sobrecarga das E/S aleatórias de 4K pode ser maior — até 10–15% em algumas cargas de trabalho.
Teste o seu hardware específico:
sudo cryptsetup benchmark
Isto executa testes de temporização para todas as combinações de cifras disponíveis. Na maioria do hardware moderno, o AES-XTS-512 com chave de 512 bits (256 bits por chave XTS) atinge um débito sequencial de 3–8 GB/s — bem acima da capacidade da maioria dos dispositivos de armazenamento.
Implicação prática: num portátil moderno com uma unidade NVMe, não notará a sobrecarga do LUKS durante o uso normal do ambiente de trabalho. Poderá notá-la em cargas de trabalho que movem centenas de gigabytes de dados de forma sequencial (cópias de ficheiros grandes, edição de vídeo).
LUKS2 vs VeraCrypt vs BitLocker
| Funcionalidade | LUKS2 | VeraCrypt | BitLocker |
|---|---|---|---|
| Plataforma | Apenas Linux | Linux/Win/macOS | Apenas Windows |
| Volumes ocultos | Não | Sim | Não |
| Integração TPM | Sim (systemd-cryptenroll) | Não | Sim (nativa) |
| Ranhuras multi-chave | 32 | 512 | Limitadas |
| Auditoria independente | Sim | Sim | Parcial (Microsoft) |
| KDF | Argon2id / PBKDF2 | PBKDF2 / Argon2 | PBKDF2 |
Para uma comparação detalhada do VeraCrypt e do LUKS, veja o guia do VeraCrypt. Para o panorama mais amplo da cifragem, incluindo a abordagem do Tails à cifragem de disco, veja a comparação Qubes vs Tails vs Whonix.
FAQ
P: Se me esquecer da minha palavra-passe LUKS, os dados ficam irrecuperáveis? R: Sim — é por concepção. Se nenhuma ranhura de chave tiver uma palavra-passe válida e não existir nenhum ficheiro de chave, a chave-mestra fica inacessível e os dados não podem ser decifrados. É por isso que manter uma ranhura para a chave de recuperação (com uma segunda palavra-passe forte, guardada offline) é essencial. Escreva a palavra-passe de recuperação em papel e guarde-a num local fisicamente seguro.
P: Como adiciono cifragem LUKS a uma partição existente não cifrada sem perda de dados?
R: A ferramenta cryptsetup-reencrypt suporta a cifragem no local dos dados existentes. É estável a partir do cryptsetup 2.4.0, mas exige uma preparação cuidadosa: uma cópia de segurança completa antes de começar, uma alimentação ininterrupta durante o processo e espaço livre no fim da partição para o cabeçalho. Teste primeiro com dados não críticos.
P: A cifragem LUKS protege um sistema Linux em hibernação? R: Em parte. Se a partição de swap também estiver cifrada com LUKS (o que tem de estar, em separado ou como volume lógico dentro do contentor LUKS), então a imagem de hibernação no disco está cifrada. No entanto, a chave de decifragem tem de ser carregada no momento da retoma, o que normalmente exige a palavra-passe. Se o seu sistema retomar automaticamente a partir de um TPM sem palavra-passe, a imagem de hibernação está protegida contra o acesso offline ao disco, mas não contra um ataque com o sistema em execução. Veja o guia de reforço do Linux para a configuração da cifragem do swap.