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).

Nota

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

Procedimento

  1. 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).

  2. 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
  3. 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 de kmk.

  4. 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
  5. 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