Como usar um arquivo como uma chave do dispositivo Luks

Como usar um arquivo como uma chave do dispositivo Luks

Luks é o acrônimo da configuração do Linux Unified Key: É a implementação de criptografia mais usada usada nos sistemas Linux e pode ser configurada como uma alternativa à configuração simples do DM-CRIPT. Comparado ao último, ele fornece alguns recursos adicionais, como hash e salga de senha e a capacidade de armazenar várias senhas no chamado cabeçalho Luks. Neste tutorial, assumirei que o leitor tem uma certa familiaridade com Luks; Se você quiser saber mais sobre esse assunto, pode verificar nosso guia básico sobre criptografar partições Linux com Luks. A maneira mais comum de proteger um dispositivo Luks é usar uma senha, mas também é possível usar um arquivo como chave; Neste tutorial, veremos como fazer isso. Vamos!

Neste tutorial, você aprenderá:

  • Como criar um arquivo com dados aleatórios para usar como uma chave do dispositivo Luks
  • Como adicionar uma chave a um dispositivo Luks
  • Como descriptografar automaticamente um dispositivo Luks na inicialização usando um arquivo como uma chave
Como usar um arquivo como uma chave do dispositivo Luks

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Qualquer distribuição Linux
Programas Cryptsetup
Outro Permissões de raiz para acessar dispositivos de bloco criptografados
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Criando um contêiner Luks



Para o bem deste tutorial, criaremos um contêiner Luks em um arquivo preenchido com zeros que geraremos usando DD. Para criar o arquivo que podemos executar:

$ sudo dd if =/dev/zero de =/luks-container.img bs = contagem de 1m = 300 

No exemplo acima, usamos o /dev/zero arquivo como o dd fonte de entrada de comando (/dev/zero é um arquivo "especial": toda vez que lemos, ele retorna 0s) e /Luks-container.img como destino e argumento do DD de operando. Instruímos DD a ler e escrever 300 blocos de 1 mib de tamanho usando respectivamente o bs e contar operando. Para usar o arquivo como um contêiner Luks, devemos prepará -lo usando Cryptsetup; Podemos correr:

$ sudo Cryptsetup LuksFormat --Type = Luks1--hash = sha512 --key-size = 512--cipher = aes-xts-plan64 /luks-container.img 

O LuksFormat Subcomando de CryptSetup é usado para inicializar um recipiente Luks e definir a senha inicial. Depois de executar o comando acima, será avisado de que a operação é destrutiva, pois substituirá todos os dados existentes. Seremos solicitados a confirmar que queremos executar a operação; nós escrevemos SIM (letras maiúsculas) e pressione Enter para confirmar:

AVISO! ======== Isso substituirá os dados sobre /luks-container.IMG irrevogavelmente. Tem certeza? (Digite 'Sim' em letras maiúsculas): Sim 

Neste ponto, seremos solicitados a fornecer e confirmar uma senha que será usada como a primeira das oito teclas possíveis do dispositivo:

Digite a senha para /Luks-container.IMG: Verifique a senha: 


Nosso contêiner Luks está agora pronto. Podemos usar o Luksdump Subcomando de Cryptsetup para despejar cabeçalho Informação:

$ sudo CryptsetupUp Luksdump /Luks-container.IMG LUKS Cabeçalho Informações para /Luks-Contrainer.Versão IMG: 1 Nome da cifra: AES Modo cifra: XTS-Plain64 Hash Spec: SHA512 Deslocamento da carga útil: 4096 Mk Bits: 512 Mk Digest: 91 da 2e 2e 7f ea ae a1 f7 81 55 cc B7 27 FD B1 AB F4 65 F1 Mk Sal: F1 03 65 E2 F1 D7 4E 77 99 48 E8 57 75 65 DD 73 A3 EB A4 24 BE 36 9E 84 F7 84 C5 D3 94 2E D8 52 MK ITERAÇÕES: 79054 UUID: EA23C244-2DC5-402E-B23E-B23E Slot 0: Iterações ativadas: 1108430 Sal: 69 99 95 88 6e 2f E8 B9 D8 9C 91 36 B6 A2 55 C1 35 27 C7 DA 5D 9A 9E F9 8C EC 70 68 db 41 53 4B Material key Ofset: 8 Afs: 4000 Chave Slot 1: Slot de chave desativado 2: Chave desativada Slot 3: Chave desativada Slot 4: Slot para desativado da chave 5: Chave desativada Slot 6: Slot para desativado de chave 7: Desativado 

Na saída acima, podemos ver várias informações são relatadas: o Nome da cifra e Modo cifra usado para o dispositivo, por exemplo. O que realmente nos interessa neste caso, no entanto, é o Principais slots seção. Como você pode ver, neste caso, apenas o primeiro keyslot é usado: ele armazena a senha que fornecemos quando formatamos o dispositivo. Nesse caso, há um total de 8 slots; 7 estão disponíveis para armazenar chaves adicionais. Usaremos um deles para armazenar o arquivo que usaremos para desbloquear o dispositivo Luks.

Criando um arquivo de dados aleatórios para usar como uma chave

Qualquer arquivo existente pode ser usado como uma chave do dispositivo Luks, no entanto, pode ser mais seguro criar um arquivo especificamente para esse fim, fora de dados aleatórios. Para criar o arquivo, mais uma vez, vamos recorrer ao venerável dd comando, desta vez usando /Dev/Urandom como fonte de dados:

$ sudo dd if =/dev/urandom de =/contêiner-key bs = 512 contagem = 8 8+0 registros em 8+0 registra 4096 bytes (4.1 kb, 4.0 kib) copiado, 0.000631541 s, 6.5 mb/s 


O /Dev/Urandom o arquivo funciona de maneira semelhante a /dev/zero mas retorna dados aleatórios toda vez que são lidos. Desta vez lemos 8 blocos de 512 bytes, criando um arquivo "preenchido" com 4096 bytes de dados aleatórios.

Adicionando o arquivo-chave ao dispositivo Luks

Depois que o arquivo é criado, podemos adicioná -lo ao cabeçalho Luks e usá -lo como uma chave. O Cryptsetup subcomando que nos vamos executar esta tarefa é Luksaddkey.

O primeiro argumento é necessário para o dispositivo Luks para o qual a chave deve ser usada; o segundo, opcional, é o caminho de um Arquivo -chave para ser usado como chave. Se for omitido, o usuário será solicitado a fornecer uma senha. Entre as opções aceitas pelo comando, existe --slot-chave: Com ele, podemos especificar qual slot -chave deve ser usado para armazenar a chave. Nesse caso, omitiremos a opção, para que o primeiro slot disponível será usado (neste caso o slot número 1).

Para adicionar o arquivo como uma chave Luks, executamos:

$ sudo CryptsetupUp Luksaddkey /Luks-container.IMG /Chave de Container 

Somos solicitados a fornecer uma senha já existente para o contêiner; Depois de fazê -lo, a nova chave será adicionada. Depois que o comando acima é executado com sucesso, se corrermos Luksdump Novamente, podemos observar um novo slot agora está em uso:

[…] Slot -chave 0: iterações ativadas: 1108430 Sal: 69 99 95 88 6e 2f E8 B9 D8 9C 91 36 B6 A2 55 C1 35 27 C7 DA 5D 9A 9E F9 8C EC 70 68 db 41 53 4B Material chave: 8 AF AF: 4000 itens -chave 1: ITERAÇÕES ENFERIADAS: 921420 SAL: 62 54 F1 61 C4 D3 8D 87 A6 45 3E F4 E8 66 B3 95 E0 5d 5d 78 18 6a E3 F0 AE 43 6D E2 24 14 BC 97 Offset de material -chave: 512 AF Stripes: 4000 Slot -chave 2: Chave de desativação do slot 3: Chave de desativação Slot 4: Slot para chave desativado 5: Chave desativada Slot 6: Slot de chave desativado 7: Desativado […] 

Abrindo o contêiner Luks

Para verificar se a chave está funcionando, agora podemos tentar abrir o contêiner Luks usando -a. Para esse fim, usamos o Luksopen Subcomando de CryptSetup: são necessários dois argumentos obrigatórios:

  1. O dispositivo Luks
  2. O nome a ser usado para mapear o dispositivo depois de ser aberto.

Como podemos especificar que queremos usar um arquivo para abrir o dispositivo? Fácil! Nós usamos o
--arquivo de chave opção e passe o caminho para o arquivo -chave como argumento. Na nossa
Caso, para abrir o dispositivo, o comando completo a ser executado é:

$ sudo CryptsetupUp Luksopen /Luks-container.IMG Luks-container-Crypt --key-FILE =/Teclado de contêiner 


Se tudo correr como o esperado, devemos encontrar uma entrada para o recipiente aberto sob o /dev/mapeador Diretório, neste caso: /dev/mapper/luks-container.

A propósito, agora podemos tratar o contêiner exatamente como faríamos com qualquer dispositivo de bloco: talvez possamos criar um sistema de arquivos nele e montá -lo:

sudo mkfs.Ext4/dev/mapper/luks-container-crypt && sudo montagem/dev/mapper/luks-container-crypt/mídia 

Abra um contêiner Luks automaticamente na inicialização

Depois que aprendemos a usar um arquivo como uma chave de contêiner Luks, podemos fazer para que um dispositivo LUKS seja aberto automaticamente na inicialização, sem interação do usuário. Basta -se por si só que esta é uma configuração que representa riscos de segurança, por isso deve ser usado com muito cuidado! Pelo menos em lugares inseguros, o arquivo usado para desbloquear o dispositivo deve estar acessível apenas pelo usuário root e deve ser armazenado em um sistema de arquivos criptografado; caso contrário, a criptografia se torna inútil (é o equivalente a usar uma trava de grande gordura para proteger um porta, mas deixando a chave onde pode ser alcançada por qualquer pessoa).

Para fazer para que um contêiner de Luks seja desbloqueado automaticamente na inicialização, devemos especificar as informações necessárias dentro do /etc/cripttab arquivo. Este arquivo é usado para descrever dispositivos de bloco criptografados configurados durante a inicialização do sistema. A sintaxe a ser usada no arquivo é bastante fácil de entender; Em cada linha que acrescentamos, precisamos especificar, em ordem:

  1. O nome a ser usado para o mapeamento do dispositivo (no exemplo anterior que usamos Luks-container-Crypt)
  2. O dispositivo que hospeda o recipiente Luks que deve ser aberto
  3. A senha do dispositivo (opcional)
  4. As opções a serem usadas (opcional)

Nesse caso, entraríamos nesta linha:

Luks-container-Crypt /Luks-container.IMG /Luks de tecla de contêineres 

Na próxima bota, o dispositivo será desbloqueado automaticamente!

Conclusões

Neste tutorial, aprendemos como podemos usar um arquivo como chave para desbloquear um contêiner Luks. Embora qualquer arquivo possa ser usado para esse fim, vimos como usar o DD para criar um arquivo de dados aleatórios, e vimos como adicioná-lo a um dos 8 slots de cabeçalho Luks disponíveis usando o Luksaddkey comando. Finalmente, vimos como é possível desbloquear automaticamente o contêiner Luks na inicialização usando um arquivo de key, fornecendo as informações necessárias dentro do /etc/cripttab arquivo, e vimos por que isso pode representar um possível risco de segurança.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Como fazer senhas de hash no Linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Melhor leitor de PDF para Linux
  • Como usar Luks com um cabeçalho destacado
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
  • Criptografia de disco completo com veracrypt no Ubuntu Linux
  • Download do Linux
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…