Não sou um profissional na aŕea e faça por sua conta em risco.
Tutorial de como instalar o Linux com criptografia do disco e negação plausÃvel.
As instalações de Linux convencionais têm um problema, ou contém o /boot e /boot/efi descriptografados ou têm o Headers do LUKS visÃveis, isso protege contra acessos indesejados, mas o atacante ainda sabe que o disco está criptografado com LUKS, nesse método que eu mostrarei, no final o disco aparecerá assim:
Ou seja, vai parecer estar sem alocação.
Do que precisamos? Do disco interno e um dispositivo externo, como um cartão sd (se a bios conseguir dar boot por aqui) ou um pen-drive.
Nesse caso vou usar de exemplo: ssd interno /dev/sdb e pen-drive externo /dev/sdc.
1 Passo
Dar zero fill ou /dev/random nos dois discos.
2 Passo
Particionar os discos.
Eu escolhi fazer assim: /dev/sdb inteiro para o / e /dev/sdc1 com 200mb para /boot/efi e /dev/sdc2 com 3gb para o /boot. Os 2 em GPT.
3 Passo
Criar o arquivo de Headers separado
dd if=/dev/zero of=/root/header.img bs=1M count=32
isso vai criar um arquivo vazio de 32mb no home do root do sistema host, se quiser pode fazer no /tmp mas recomendo gravar no disco para ter um backup caso o pen drive se corrompa.
4 passo
Criar o dispositivo criptografado com LUKS
cryptsetup luksFormat --offset 32768 --header /root/header.img /dev/sdb
Não vou entrar aqui na diferença de LUKS2, KDF Argon2, etc.
esse --offset 32768 é recomendado pela wiki do Arch para colocar a chave de volta no disco se um dia quiser.
5 passo
Abrir o dispositivo criptografado
cryptsetup open --header /root/header.img /dev/sdb cryptroot
6 passo
Criar a partição ext4 (ou o que você preferir) dentro do dispositivo criptografado sdb
mkfs.ext4 /dev/mapper/cryptroot
7 Passo
Agora podemos montar os discos e instalar o sistema normalmente
mount /dev/mapper/cryptroot /mnt/
mkdir /mnt/boot
mount /dev/sdc2 /mnt/boot/
mkdir /mnt/boot/efi
mount /dev/sdc1 /mnt/boot/efi/
8 passo
Instalar o SIstema normalmente
No caso escolhi o Artix só porque estou no Artix no momento, mas poderia ser qualquer uma distro que tenha vergonha na cara e possibilite instalar via chroot, como Arch/Artix, Debian/vuan, Void ou Fedora.
No caso do Arch/tix:
pacstrap /mnt/ base
e depois instalar o restante do sistema.
9 passo
Instalar os pacotes necessários para o boot
São eles: cryptsetup efibootmgr grub mkinitcpio
10 passo (o mais importante)
Configurar o boot
O grub e initramfs por padrão não conseguem descriptografar um disco com headers separado, então vamos ter que criar um hook no mkinitcpio para que o initramfs faça isso.
O melhor de tudo é que com esse script não será necessário passar a partição de root para o GRUB, então nenhuma configuração extra no GRUB é necessária.
10.1
Passar o header.img para a partição boot
cp /root/header.img /mnt/boot/
10.2 Criar os arquivos
/usr/lib/initcpio/hooks/decrypt-interactive
#!/bin/sh
#GPLv3 only
# Configuração: ajuste conforme seu ambiente
# Se o header é um arquivo incluÃdo no initramfs:
HEADER_PATH="/boot/header.img" # caminho dentro do initramfs (via FILES=)
# Se o header está em um dispositivo/partição legÃvel:
# HEADER_PATH="/dev/disk/by-uuid/AAAA-BBBB"
# Identificação do dispositivo de dados (onde estão os blocos criptografados)
#DATA_UUID="SUBSTITUA-PELO-UUID-DA-PARTICAO-DE-DADOS"
# Ou, se preferir explicitamente (evite se possÃvel):
# DATA_DEV="/dev/sdb"
DATA_BYID="dispositivo-id"
# Nome do mapeamento a ser criado
MAPPER_NAME="cryptroot"
# Número de tentativas de senha
RETRIES=3
run_hook() {
udevadm settle
# Resolve o device dos dados
if [ -n "$DATA_DEV" ]; then
data_dev="$DATA_DEV"
else
data_dev="/dev/disk/by-id/$DATA_BYID"
fi
if [ ! -e "$data_dev" ]; then
echo "decrypt-interactive: dispositivo de dados não encontrado: $data_dev" >&2
return 1
fi
# Verifica header
if [ ! -e "$HEADER_PATH" ]; then
echo "decrypt-interactive: header LUKS não encontrado em $HEADER_PATH" >&2
return 1
fi
echo "decrypt-interactive: abrir LUKS (data=$data_dev, header=$HEADER_PATH, name=$MAPPER_NAME)"
echo "Digite a senha do LUKS para o root. Pressione Enter após digitar."
tries=0
while [ "$tries" -lt "$RETRIES" ]; do
# Garantir que tty e teclado estejam prontos (hook keyboard deve estar ativo)
# Prompt interativo padrão do cryptsetup via stdin da console
if cryptsetup --header "$HEADER_PATH" luksOpen "$data_dev" "$MAPPER_NAME"; then
break
fi
tries=$((tries + 1))
echo "Senha incorreta ou falha ao abrir. Tentativa $tries de $RETRIES."
done
if ! [ -e "/dev/mapper/$MAPPER_NAME" ]; then
echo "decrypt-interactive: não foi possÃvel abrir o LUKS após $RETRIES tentativas." >&2
return 1
fi
export root="/dev/mapper/$MAPPER_NAME"
ln -sf "$root" /dev/root
echo "decrypt-interactive: root definido para $root"
}
Tá vendo ali DATA_BYID="dispositivo-id" ? ENtão vamos ter que trocar pelo id do dispositivo ls -l /dev/disk/by-id/ pegue o id do seu dispositivo, no meu caso /dev/sdb ata-CT240BX500SSD1-xxxxxxxx.
Também preste atenção no diretório do header.img
/usr/lib/initcpio/install/decrypt-interactive
#!/bin/bash
build() {
add_binary cryptsetup
add_binary blkid
add_runscript
}
help() {
cat <<'EOF'
decrypt-interactive: solicita a senha do LUKS no boot e abre o root com header separado.
Configure HEADER_PATH e DATA_UUID/DATA_DEV no hook runtime.
Inclua o arquivo de header no initramfs via FILES= se for um arquivo.
EOF
}
com isso o initramfs conseguirá descriptografar o disco com headers separado e jogará a partição descriptografada para o kernel continuar o boot.
10.3
chmod +x /usr/lib/initcpio/hooks/decrypt-interactive
chmod +x /usr/lib/initcpio/install/decrypt-interactive
10.4
Editar o arquivo /etc/mkinitcpio.conf
EM FILES colocar FILES=(/boot/header.img)
Em HOOKS colocar decrypt-interactive depois de keyboard mas antes de block e colocar encrypt depois de block mas antes de filesystems. Sim, a ordem importa aqui.
10.5
mkinitcpio -P + instalar o grub (sem modificações adicionais necessárias) + configurar o fstab (também nada de extra necessário).
E com isso você terá um sistema com criptografia e negação plausÃvel, ou seja, não só estará criptografado, mas também sem saber que está criptografado.
Mas… como usar isso?
Esse setup é mais útil em notebooks que você usa fora de casa, então sempre que for sair com o notebook, guarde o cartão sd ou pen-drive em outro lugar separado do notebook e apenas quando for usar junte os dois, caso alguém tenha acesso ao disco do notebook, aparecerá como um disco com dados aleatórios.
Dica extra: não use o fstrim
Em ssd modernos o fstrim serve para melhorar a longevidade / performance do disco, mas isso revela quais blocos estão vazios, o que pode gerar um possÃvel enfraquecimento da criptografia, como não hjá consenso sobre isso, na dúvida se seguraça > desempenho no seu caso de uso, não use o trim.
Qualquer dúvida/correção, comente!
