Esta página foi traduzida pela API Cloud Translation.
Switch to English

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 ver e verificar os atestados, solicite uma declaração de atestado assinada criptograficamente com o pacote de certificados usado para assiná-lo. 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 dos certificados, você verifica a validade dos certificados no pacote e a própria declaração de atestado.

O formato da declaração de atestado é definido pelo fabricante do HSM. Não é possível verificar um atestado usando o Console do Cloud, a API Cloud KMS ou a ferramenta gcloud. A verificação é intencionalmente independente do Google.

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 fazer o download dos artefatos

Antes de atestar uma chave, faça o download dos certificados e da declaração de atestado.

Como fazer o download dos certificados

A assinatura de um atestado pode ser verificada usando um pacote de certificado que leva aos certificados raiz do Google e do fabricante HSM e assinado pelas autoridade de certificação (CAs, na sila em inglês) do Google e do fabricante HSM.

  1. Faça o download do pacote de certificado que leva o certificado raiz do Google.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-google.pem
    
  2. Faça o download do pacote de certificado que leva até o certificado raiz do fabricante do HSM.

    curl -O https://www.gstatic.com/cloudhsm/cloud-kms-prod-[location]-cavium.pem
    
  3. Faça o download do certificado raiz do Google.

    curl -O https://www.gstatic.com/cloudhsm/roots/global_1498867200.pem
    
  4. Faça o download e extraia o certificado raiz e a chave pública do fabricante do HSM.

    curl -O https://www.marvell.com/content/dam/marvell/en/public-collateral/security-solutions/liquid_security_certificate.zip
    
    unzip liquid_security_certificate.zip
    

    O certificado é extraído para liquid_security_certificate.crt e a chave pública é extraída para liquid_security_certificate.txt.

Como fazer o download da declaração de atestado

Faça o download do atestado para uma versão de chave criptográfica usando o Console do Google Cloud ou a linha de comando. A declaração de atestado é baixada diretamente do dispositivo de HSM que contém a chave.

Console

  1. Acesse a página Chaves criptográficas no Console do Cloud.

    Acessar a página "Chaves criptográficas"

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

  3. Clique em Mais para a versão da chave que você quer atestar e selecione Receber atestado.

  4. Na caixa de diálogo Conseguir atestado, clique em Fazer o download. O download do arquivo de atestado é feito no sistema local.

    O formato do nome do arquivo de atestado é [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat. Cada parte do nome do arquivo é separada por um hífen. Por esse motivo, o texto do marcador é delimitado por colchetes ([ e ]).

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.

    Seçã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 formato de atestado da chave que você quer atestar.

    gcloud kms keys versions describe key-version \
      --key key-name \
      --location location \
      --keyring keyring-name
    

    A saída deste comando mostra o formato de atestado da versão da chave, necessária para a próxima etapa.

  3. 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, substituindo attestation-format pelo formato de atestado recuperado na etapa anterior. A sinalização --attestation-file especifica o caminho e o destino do nome de arquivo do atestado recuperado. Cada parte do nome do arquivo é separada por um hífen. Por esse motivo, o texto do marcador é delimitado por colchetes ([ e ]).

    gcloud kms keys versions describe key-version \
     --key key-name \
     --location location \
     --keyring keyring-name \
     --attestation-file \
     [keyring-name]-[key-name]-[key-version]-[attestation-format]-attestation.dat
    

Como verificar a assinatura do atestado

Para verificar a assinatura criptográfica de um atestado, use um script de código aberto.

Também é possível verificar a chave pública para um par de chaves assimétricas.

Como analisar os valores do atestado

A documentação do fabricante do HSM 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 a nota compactada.

    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. Use o Console do Cloud para conseguir o ID do recurso da versão da chave ou executar 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. Como a verificação é intencionalmente independente do Google, não é possível verificar um atestado usando o Console do Cloud, a API Cloud KMS ou a ferramenta gcloud.