Red Hat Training
A Red Hat training course is available for RHEL 8
11.4. Chaves confiáveis e criptografadas
A seção seguinte apresenta chaves confiáveis e criptografadas como uma parte importante do aumento da segurança do sistema.
Trusted e encrypted keys são chaves simétricas de comprimento variável geradas pelo kernel que utilizam o serviço de chaveiro do kernel. O fato de este tipo de chaves nunca aparecer no espaço do usuário de forma não criptografada significa que sua integridade pode ser verificada, o que por sua vez significa que elas podem ser usadas, por exemplo, pelo módulo de verificação estendida (EVM) para verificar e confirmar a integridade de um sistema em execução. Os programas em nível de usuário só podem acessar as chaves sob a forma de criptografia blobs.
As chaves confiáveis precisam de um componente de hardware: o chip Trusted Platform Module (TPM), que é usado para criar e criptografar (selar) as chaves. O TPM sela as chaves usando uma chave RSA de 2048 bits chamada storage root key (SRK).
Para usar uma especificação TPM 1.2, habilite-a e ative-a através de um ajuste no firmware da máquina ou usando o comando tpm_setactive
do pacote tpm-tools
de utilidades. Também é necessário instalar a pilha de software TrouSers
e executar o daemon tcsd
para se comunicar com o TPM (hardware dedicado). O daemon tcsd
faz parte da suíte TrouSers
, que está disponível através do pacote trousers
. O TPM 2.0, mais recente e retroativo, usa uma pilha de software diferente, onde os utilitários tpm2-tools
ou ibm-tss
fornecem acesso ao hardware dedicado.
Além disso, o usuário pode selar as chaves confiáveis com um conjunto específico dos valores TPM's platform configuration register (PCR). A PCR contém um conjunto de valores de gerenciamento de integridade que refletem o firmware, o carregador de inicialização e o sistema operacional. Isto significa que as chaves seladas por PCR só podem ser descriptografadas pelo TPM no mesmo sistema em que foram criptografadas. Entretanto, uma vez que uma chave confiável selada PCR é carregada (adicionada a um chaveiro), e assim seus valores PCR associados são verificados, ela pode ser atualizada com novos (ou futuros) valores PCR, de modo que um novo kernel, por exemplo, possa ser inicializado. Uma única chave também pode ser salva como múltiplos blobs, cada um com diferentes valores de PCR.
As chaves criptografadas não requerem um TPM, pois utilizam o kernel Advanced Encryption Standard (AES), o que as torna mais rápidas do que chaves confiáveis. As chaves criptografadas são criadas usando números aleatórios gerados pelo kernel e criptografadas por um master key quando são exportadas para blobs de espaço do usuário. A chave mestra é uma chave confiável ou uma chave do usuário. Se a chave mestra não for confiável, a chave criptografada é apenas tão segura quanto a chave do usuário usada para criptografá-la.
11.4.1. Trabalhando com chaves confiáveis
A seção seguinte descreve como criar, exportar, carregar ou atualizar chaves confiáveis com o utilitário keyctl
para melhorar a segurança do sistema.
Pré-requisitos
-
Para a arquitetura ARM de 64 bits e IBM Z, o módulo do kernel
trusted
precisa ser carregado. Para mais informações sobre como carregar os módulos do kernel, veja Capítulo 3, Gerenciando módulos do núcleo. - O Módulo de Plataforma Confiável (TPM) precisa estar habilitado e ativo. Para mais informações sobre o TPM veja, O subsistema de integridade do kernel e chaves confiáveis e criptografadas.
Procedimento
Para criar uma chave de confiança usando um TPM, execute:
# keyctl add trusted <name> "new <key_length> [options]" <key_ring>
Com base na sintaxe, construa um comando de exemplo como se segue:
# keyctl add trusted kmk "new 32" @u 642500861
O comando cria uma chave de confiança chamada
kmk
com o comprimento de 32 bytes (256 bits) e a coloca no chaveiro do usuário (@u
). As chaves podem ter um comprimento de 32 a 128 bytes (256 a 1024 bits).
Para listar a estrutura atual dos chaveiros do kernel:
# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmk
Para exportar a chave para um blob de espaço do usuário, execute:
# keyctl pipe 642500861 > kmk.blob
O comando utiliza o subcomando
pipe
e o número de série dekmk
.Para carregar a chave confiável do blob de espaço do usuário, use o sub-comando
add
com o blob como argumento:# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
Criar chaves criptografadas seguras com base na chave de confiança selada por TPM:
# keyctl add encrypted <name> "new [format] <key_type>:<primary_key_name> <keylength>" <key_ring>
Com base na sintaxe, gerar uma chave criptografada utilizando a chave de confiança já criada:
# keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175
O comando utiliza a chave de confiança selada TPM (
kmk
), produzida na etapa anterior, como um primary key para a geração de chaves criptografadas.
Recursos adicionais
-
Para informações detalhadas sobre o uso de
keyctl
, consulte a página do manualkeyctl(1)
. - Para mais informações sobre chaves confiáveis e criptografadas, veja Seção 11.4, “Chaves confiáveis e criptografadas”.
- Para mais informações sobre o serviço de chaveiro do kernel, veja a documentação do kernel a montante.
- Para mais informações sobre o TPM, ver Seção 11.1, “O subsistema de integridade do kernel”.