Como verificar atestados

Este tópico mostra como verificar atestados para chaves do Cloud HSM, que são sempre armazenadas em um módulo de segurança de hardware (HSM, na sigla em inglês).

Visão geral

Na criptografia, um atestado é uma instrução legível por máquina que pode ser programada por um software. Os atestados são um componente importante da computação confiável e podem ser necessários por motivos de conformidade.

Para visualizar e verificar os atestados, solicite uma declaração de atestado assinada por criptografia no HSM, com as cadeias de certificados usadas para assiná-los. A declaração de atestado é produzida pelo hardware HSM e assinada por certificados de propriedade do Google e do fabricante do HSM.

Depois de fazer o download da declaração de atestado e das cadeias de certificados, é possível verificar os atributos ou verificar a validade do atestado usando as cadeias de certificado.

O script de atestado é um script Python de código aberto desenvolvido pelo Google. É possível ver o código-fonte do script para saber mais sobre o formato do atestado e como a verificação funciona ou como um modelo para uma solução personalizada.

Os exemplos neste tópico foram desenvolvidos para ambientes Linux, incluindo o Cloud Shell. Para acompanhar os clientes do macOS ou do Windows, talvez seja necessário fazer modificações.

Antes de começar

Como verificar o atestado

O processo de verificação dos atestados pode ser feito de modo automático pelo console do Google Cloud ou manualmente, fazendo o download do pacote de atestado e script de verificação de atestado e executá-lo localmente ou no Cloud Shell.

Como verificar atestados no console do Google Cloud

É possível verificar o atestado no console do Google Cloud, que abrirá um Cloud Shell e o preencherá com os snippets de código necessários para executar todo o processo de verificação.

  1. Acesse a página Gerenciamento de chaves no console do Google Cloud.

    Acessar a página "Gerenciamento de chaves"

  2. Selecione o keyring que contém a chave que você quer atestar e selecione a chave.

  3. Clique em Mais na versão da chave que você quer atestar e selecione Verificar atestado.

  4. Na caixa de diálogo Verificar atestado, clique em Abrir o Cloud Shell. O Cloud Shell será aberto e preenchido com o snippet de código necessário para o processo de verificação.

  5. Inspecione o snippet de código pré-preenchido no Cloud Shell. O snippet faz o download do script de verificação do atestado e das respectivas dependências, executa os comandos da gcloud para fazer o download do atestado e das cadeias de certificados e, em seguida, executa o script para verificar o atestado.

  6. Execute o snippet de código para verificar o atestado.

Como verificar o atestado manualmente

O atestado, as cadeias de certificados e o script de verificação de atestado precisam ser baixados antes de verificar manualmente o atestado.

  1. Faça o download das cadeias de atestados e certificados.

    Console

    1. Acesse a página Gerenciamento de chaves no console do Google Cloud.

      Acessar a página "Gerenciamento de chaves"

    2. Selecione o keyring que contém a chave que você quer atestar e selecione a chave.

    3. Clique em Mais na versão da chave que você quer atestar e selecione Verificar atestado.

    4. Na caixa de diálogo Verificar atestado, clique em Fazer download do pacote de atestado. Isso fará o download de um arquivo ZIP contendo as cadeias de atestado e de certificado.

    5. Extraia as cadeias de atestados e certificados do pacote de atestados.

    gcloud

    1. Clique em Ativar o Cloud Shell na parte superior da janela do console.

      Ativar o Cloud Shell Uma sessão do Cloud Shell é aberta em um novo frame na parte inferior do console, e um prompt de linha de comando é exibido. A inicialização da sessão do shell pode levar alguns segundos.

      Sessão do Cloud Shell

    2. No prompt de linha de comando do Cloud Shell, use o comando gcloud kms keys versions describe para recuperar o atestado da chave que você quer atestar. A sinalização --attestation-file especifica o caminho e o destino do nome de arquivo do atestado recuperado.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. No prompt de linha de comando do Cloud Shell, use o comando gcloud kms keys versions get-certificate-chain para recuperar as cadeias de certificado da chave que você quer atestar. A sinalização --output-file especifica o caminho e o destino do nome de arquivo do certificado recuperado.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. Faça o download do script para verificar atestados. e os pré-requisitos e conferir a documentação do script para verificar o atestado no arquivo de atestado usando os certificados em o arquivo de certificados.

Como analisar os valores do atestado

A documentação do fabricante do HSM (em inglês) inclui instruções completas sobre o uso dos scripts para analisar os valores de um atestado e verificar a chave pública de um par de chaves assimétricas. O atestado precisa ser descompactado com o comando a seguir antes de ser analisado.

  • Descompacte o atestado compactado.

    gzip -d < compressed_attestation.dat > attestation.dat
    

Esses links vão diretamente para instruções específicas do fabricante do HSM:

As instruções para analisar o valor do atestado incluem uma referência de campos gerais no atestado, não específicas para chaves HSM no Cloud HSM.

As seções a seguir ilustram como verificar informações sobre suas chaves que são específicas do Cloud HSM.

Verificar o ID da versão da chave

Você pode verificar se o hash SHA-256 do código do recurso da versão-chave está no atestado. O nome do recurso da chave faz parte do campo 0x0102 ou do campo de ID da chave no arquivo de atestado. O ID da chave é composto de dois resumos de hash SHA-256 concatenados no formato hexadecimal. O segundo deve corresponder ao nome do recurso da chave.

  1. Consiga o ID do recurso da versão da chave para a versão da chave. Você pode usar o o console do Google Cloud para acessar o ID de recurso da versão da chave ou execute o seguinte comando:

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. Na linha de comando, atribua resource_name ao ID do recurso da versão da chave que você acabou de recuperar.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. Como o script de análise despeja todos os campos de atestado no formato hexadecimal, o ID da chave teria sido formatado duas vezes em hexadecimal. Uma vez ao criar o ID da chave e outra ao analisar o atestado. Para verificar se o nome do recurso corresponde ao ID da chave, converta-o em um resumo hexadecimal de SHA-256, reverta uma conversão hexadecimal do ID da chave no arquivo de atestado e compare os dois.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. O script de análise despeja todos os campos de atestado no formato hexadecimal, e o código da chave é codificado internamente em hexadecimal. Defina a variável de ambiente KEYID_HEX como o valor do código da chave com uma camada de codificação hexadecimal decodificada:

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. Compare os valores de RESOURCE_NAME_HEX e KEYID_HEX como strings:

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    Se os valores forem correspondentes, nenhuma saída será retornada e o comando será encerrado com o código 0.

Verificar outras propriedades da chave

Você pode visualizar várias propriedades de chave, que correspondem aos campos no padrão PKCS #11. Use os seguintes exemplos como guias para verificar outras propriedades da chave.

  • Se uma chave é extraível, ela é armazenada no campo 0x0102 da saída analisada. Para determinar se uma chave pode ser extraída, observe o campo 0x0162: Um valor de \x01 é true e um valor de \x00 é false.

    Chaves do Cloud HSM não podem ser extraídas.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • Como a chave chegou ao HSM, se ela foi criada diretamente ou importada, é armazenado no campo 0x0163. Se a chave tiver sido criada localmente no HSM, o campo será definido como \x01. O campo de uma chave importada é definido como \x00.

    Você pode inferir algumas informações sobre como a chave chegou ao HSM. Se a chave foi criada no Cloud HSM, isso significa que ela nunca foi armazenada sem criptografia fora de um HSM. Se a chave foi importada, o mecanismo de importação garante que ela esteja protegida durante o processo de importação e no Cloud HSM posteriormente.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • O tipo de chave é armazenado no campo 0x0100. Os tipos de chave são documentados no padrão PCKS#11 com o prefixo CKK_*. Por exemplo, uma chave AES tem um tipo de \x1f.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

Mais informações

Verifique um atestado para determinar se uma versão de chave foi criada em um HSM.