Clevis (Português)

Related articles
Booster
Mkinitcpio
Dracut
Dm-crypt
YubiKey
Trusted Platform Module
Clevis
permite vincular um volume LUKS a um sistema, criando uma chave e criptografando-a usando o TPM, e selando a chave usando valores PCR que representam o estado do sistema no momento da criação do pin Clevis.
Senhas digitadas manualmente por um usuário são uma forma tradicional e amplamente utilizada para desbloquear partições LUKS criptografadas. Mas isso tem algumas desvantagens:
Requer intervenção manual e, portanto, não funciona com configurações que exigem inicialização automática (por exemplo, um grande server farm).
Um cérebro humano médio é capaz de memorizar senhas relativamente simples (~20-30 bits de entropia) que são muito mais fracas do que as chaves usadas para cifras de bloco modernas (128/256 bits).
Uma solução para isso seria criptografar dados com uma chave forte armazenada de forma segura em outro lugar, por exemplo, no seu chip
TPM
ou
YubiKey
ou em algum serviço de rede. Clevis é uma estrutura que implementa essa ideia. Ele permite criptografar (em termos de clevis
bind
— vincular) dados com um
pin
conectável (pluggable). Atualmente, o clevis implementa 3 pins:
TPM2 - vinculação de dados (funciona apenas se você tiver um chip
Trusted Platform Module
no seu computador).
Serviço de Rede (chamado
Tang
) - vinculação de dados.
Shamir's Secret Sharing
- que permite combinar outros pins.
YubiKey - vinculação usando um
plugin externo
.
Warning
Se você usar este método no seu volume root, isso significa que, contanto que as condições mencionadas anteriormente sejam atendidas, seu computador
desbloqueará automaticamente
na inicialização sem a necessidade de digitar uma senha de criptografia.
Isso significa que o acesso aos dados não está protegido caso o hardware seja roubado.
Esteja ciente de que este método o torna mais vulnerável a
ataques de reinicialização a frio (cold boot)
, pois mesmo que seu computador tenha sido desligado por um longo tempo (garantindo que a memória esteja completamente limpa), um invasor pode simplesmente ligá-lo e esperar que o TPM carregue a chave automaticamente. Isso pode ser uma preocupação para alvos de alto valor.
Instalação
Para usar o clevis,
instale
o pacote
clevis
.
Vincular alguns dados (Bind some data)
Aqui está um exemplo de vinculação de dados com TPM2:
$ clevis encrypt tpm2 '{}' <<< 'olá, mundo'
eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA
Esta longa mensagem codificada em base64 é o nosso texto criptografado com uma chave TPM interna. Ela pode ser descriptografada apenas neste computador. Tentar descriptografá-la em outro computador (ou melhor, com outro chip TPM) retornará um erro.
$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'
olá, mundo
Vincular um volume LUKS (Bind a LUKS volume)
This article or section needs language, wiki syntax or style improvements. See
Help:Style
for reference.
Reason:
please use the first argument of the template to provide a brief explanation.
(Discuss in
Talk:Clevis (Português)
)
Warning
Defina uma senha de backup forte caso o unsealing (remoção do selo) do TPM falhe, usando:
# cryptsetup luksAddKey /dev/sd
X
Para vincular um volume LUKS ao TPM, use:
# clevis luks bind -d /dev/sd
X
tpm2 '{}'
onde
'{}'
contém a configuração: mesmo sem parâmetros, o drive não pode ser descriptografado em outro computador, a menos que o invasor saiba a senha de backup.
Note
Para selar a chave LUKS contra as configurações de UEFI e a política de
Secure Boot
, use:
'{"pcr_ids":"1,7"}'
Se as configurações de UEFI ou Secure Boot forem modificadas, o TPM calculará valores PCR diferentes e a descriptografia falhará. Isso oferece proteção contra
ataques de 'Evil Maid' (empregada malvada)
.
Para uma lista de parâmetros, consulte
clevis-encrypt-tpm2(1) § CONFIG
.
Para uma explicação simplificada do significado dos PCRs, consulte
Trusted Platform Module#Accessing PCR registers
.
Para uma explicação completa do significados dos PCRs, consulte a
especificação TCG
(§ 2.3.4).
If this fails with
ERROR: pcr-input-file filesize does not match pcr set-list
, you should specify a different pcr bank:
'{"pcr_bank":"sha256","pcr_ids":"1,7"}'
Em agosto de 2022, o Clevis suporta apenas os bancos sha1 (padrão) e sha256, então naturalmente a única opção diferente é sha256 - você pode verificar os bancos disponíveis e usados usando
# tpm2_pcrread
.
Para gerar um novo Clevis pin após alterações na configuração do sistema que resultam em valores PCR diferentes, por exemplo, atualizar o UEFI quando o PCR 0 é usado, execute
# cryptsetup luksDump /dev/sd
X
Tokens:
slot do token
: clevis
        Keyslot:
keyslot
para encontrar o slot usado para o pin Clevis, então
# clevis luks regen -d /dev/sd
X
-s
keyslot
Para remover a vinculação Clevis, execute:
# clevis luks unbind -d /dev/sd
X
-s
keyslot
Warning
Verifique novamente se você escolheu o slot correto, ou você pode perder o acesso ao seu volume.
Você pode desbloquear um volume vinculado ao TPM usando:
# clevis luks unlock -d /dev/sd
X
Para a descriptografia automatizada de volumes em
/etc/crypttab
,
habilite
clevis-luks-askpass.path
.
Para a descriptografia automatizada do volume root, devemos fazer algumas alterações nos nossos geradores de
Initramfs
:
Hook do Mkinitcpio
Instale o pacote
mkinitcpio-clevis-hook
AUR
. Em seguida, habilite o hook clevis editando
mkinitcpio.conf
:
/etc/mkinitcpio.conf
# Edite os hooks e adicione clevis antes do hook 'encrypt'. Ex:
HOOKS=(.. clevis encrypt ..)
Note
Se você estiver usando plymouth, substitua o hook
plymouth-encrypt
por encrypt.
plymouth-encrypt
é relatado como problemático quando o dispositivo já está desbloqueado.
Mais informações.
No final,
regenere o initramfs
.
Booster
Felizmente, o
Booster
descriptografa automaticamente volumes LUKS vinculados usando Clevis pronto para uso!
Booster é também capaz de ler os tokens LUKS, decodificar as informações do clevis, reconstruir a senha e desbloquear a partição automaticamente.
O pin Tang (vinculação de rede) requer que a rede esteja habilitada. Consulte a seção
Booster#Configuration
para obter mais informações sobre a configuração de rede com o booster.
Dracut
Dracut
precisa dos seguintes pacotes extras:
libpwquality
luksmeta
nmap
Seguido por uma regeneração do initramfs:
# dracut -f
Note
Se você pretende usar o PIN Tang do Clevis para desbloquear seu(s) drive(s), o
curl
deve ser incluído na imagem do kernel. Adicione um arquivo em
/etc/dracut.conf.d
instruindo o dracut a incluí-lo antes de executar
dracut -f
:
/etc/dracut.conf.d/curl.conf
install_items+=" /usr/bin/curl "
Dicas e truques
Vinculação YubiKey
Clevis permite vincular uma partição LUKS usando o modo de desafio-resposta da YubiKey. Para vincular uma partição LUKS, execute
# clevis luks bind -d /dev/sd
X
yubikey '{"slot":1}'
Instale o
yubikey-personalization
. Edite o arquivo de configuração e adicione a seguinte opção:
/etc/booster.yaml
extra_files: ykchalresp
Regenere as imagens do booster
. O Booster detectará esta configuração durante a inicialização e usará a YubiKey presente para desbloquear o drive.
Veja também
Página do projeto
Página do mkinitcpio-clevis-hook