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 Copiar o linkLink copiado para a área de transferência!
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
trustedprecisa 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>
# keyctl add trusted <name> "new <key_length> [options]" <key_ring>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Com base na sintaxe, construa um comando de exemplo como se segue:
keyctl add trusted kmk "new 32" @u
# keyctl add trusted kmk "new 32" @u 642500861Copy to Clipboard Copied! Toggle word wrap Toggle overflow O comando cria uma chave de confiança chamada
kmkcom 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
# keyctl show Session Keyring -3 --alswrv 500 500 keyring: ses 97833714 --alswrv 500 -1 \ keyring: uid.1000 642500861 --alswrv 500 500 \ trusted: kmkCopy to Clipboard Copied! Toggle word wrap Toggle overflow Para exportar a chave para um blob de espaço do usuário, execute:
keyctl pipe 642500861 > kmk.blob
# keyctl pipe 642500861 > kmk.blobCopy to Clipboard Copied! Toggle word wrap Toggle overflow O comando utiliza o subcomando
pipee 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
addcom o blob como argumento:keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
# keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>
# keyctl add encrypted <name> "new [format] <key_type>:<primary_key_name> <keylength>" <key_ring>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# keyctl add encrypted encr-key "new trusted:kmk 32" @u 159771175Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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”.