Criptografia com Criptsetup/LUKS#

Este guia mostra como configurar volumes encriptados LUKS, para autenticar no arranque com Nitrokey Pro ou Nitrokey Storage.

Para fornecer algum fundo, cryptsetup-initramfs agora tem suporte para usar Cartões Smart Card OpenPGP como o Nitrokey Pro e Nitrokey Storage para desbloquear volumes encriptados em LUKS. Uma vez terminada a configuração, basta inserir o seu Nitrokey no arranque e introduzir o seu PIN de utilizador, em vez de digitar a sua frase-chave de encriptação do disco normal.

Estas instruções foram testadas no Ubuntu 20.04 e no Debian 10.

Aviso

O seguinte guia pode potencialmente bloqueá-lo para fora do seu computador. Você deve estar ciente desses riscos, e recomendamos que você use o script abaixo em um computador secundário, ou após uma cópia de segurança completa, pois você pode perder seus dados.

Requisitos#

  • Um computador Ubuntu ou Debian com pelo menos um volume encriptado em LUKS.

Veja a seção abaixo para determinar qual método é compatível com este guia.

  • A Nitrokey Pro 2 ou Nitrokey Storage 2 inicializado com chaves.

Questões Conhecidas#

Até agora, o script funciona apenas com volumes particionados manualmente, que são compostos de uma partição não criptografada /boot, e uma raiz criptografada / partição.

Por favor, não seleccione a encriptação automática do disco completo fornecida pelo sistema operativo que está a utilizar para este guia. Você enfrentará erros recorrentes quando o particionamento for feito automaticamente, usando a interface de instalação no Ubuntu e na Debian.

Instruções#

  1. Instalar dependências

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Criar diretório smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Baixe o smartcard-luks-script

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Exportar a chave pública

    Para exportar a sua chave pública do chaveiro do GnuPG:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Se você já carregou uma chave pública para um servidor de chaves (ou a guardou em outro lugar), você deve recuperá-la da maneira que mais se sentir confortável, e prosseguir para o passo 5.

  5. Determine e verifique o nome correto do dispositivo LUKS para a sua partição raiz:

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Dica

    Normalmente isto deve ser algo como nvme0n1p3_crypt (para NitroPC) ou sda3_crypt (para NitroPads). Você pode e deve verificar se o UUID referido dentro de /etc/crypttab é a partição designada verificando o link simbólico dentro de /dev/discos/by-uuid/.

  6. Execute o script com o nome do dispositivo luks (por exemplo, nvme0n1p3_crypt) e pubkey.asc como argumentos.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

Uma vez, você executa o script com a chave pública OpenPGP como argumento, ele automaticamente configura um novo segredo LUKS, codifica-o contra essa chave pública, e configura crypttab, LUKS, initramfs, e GRUB.

Primeiro você será solicitado a User PIN`

img1

Assim que desbloquear a Nitrokey, ser-lhe-á pedido o seu OLD passphrase`. É a senha que você digitou para encriptar o seu volume na instalação.

img2

Nota

Esta é uma alternativa de recurso no caso de perder a sua Nitrokey, ou se ela não estiver disponível. Até agora, não foi testado, e os utilizadores devem estar conscientes do risco de ficarem bloqueados fora do seu computador, se o método de fall-back não funcionar.

Uma vez inserida a frase-senha, o script termina a configuração em cerca de um minuto. Não interrompa o script, ou você pode ficar bloqueado fora do seu computador depois de reiniciar.

img3

Feito!

A esta altura já deve poder reiniciar, e deve poder usar a sua Nitrokey para desbloquear a sua unidade encriptada.

Utilização#

Depois de reiniciar, você deve ser solicitado a obter o seu PIN de usuário

img5

Introduza o seu PIN de utilizador para desbloquear a unidade

img6

Outras Dicas#

Alterar a frase-senha#

Uma vez feita esta configuração, você não deve mais usar o utilitário (gnome) discos para mudar a senha (fallback). A maneira correta de fazer isso é chamar cryptsetup diretamente dessa forma:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Com nvme0n1p3 sendo a partição para a qual você configurou as chaves.

Use Múltiplas Chaves#

É fácil usar múltiplas chaves de segurança (hardware) para que cada uma delas seja capaz de desbloquear a unidade LUKS independentemente. Basta exportar várias chaves públicas e também passar várias chaves para o script de configuração como este:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Definir nome do portador do cartão#

Durante a entrada do PIN no arranque para descodificação da partição raiz do LUKS é apresentado ao utilizador um titular do cartão, para definir isto por favor use $ gpg --edit-card e dentro do tipo de prompt admin<` e name` para definir o titular do cartão OpenPGP (Nitrokey Storage 2 ou Nitrokey Pro 2).

Substituir/Delete Keys#

Não é possível adicionar/remover chaves directamente. Portanto, você precisa apagar/remover a configuração antiga e executar novamente a configuração com a(s) chave(s) designada(s):

Remova o keyfile (caminho, se você usou o script acima) do luks-device (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Retire o próprio ficheiro-chave:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Reinicie a configuração acima.

Desbloqueio do LUKS2 com certificado X509#

SystemD suporta desbloquear uma partição LUKS2 usando um certificado X509, encontre uma ótima entrada no blog sobre como realizar isso em Blog pessoal de Vladimir Timofeenko