Validar atestações

Este tópico mostra como validar atestações para chaves do HSM na nuvem, que são sempre armazenadas num módulo de segurança de hardware (HSM).

Vista geral

Em criptografia, uma atestação é uma declaração legível por máquina e comprovável programaticamente que um fragmento de software faz sobre si próprio. As atestações são um componente importante da computação fidedigna e podem ser necessárias por motivos de conformidade.

Para ver e validar as atestações, pede uma declaração de atestação com assinatura criptográfica ao HSM, juntamente com as cadeias de certificados usadas para a assinar. A declaração de atestação é produzida pelo hardware do HSM e assinada por certificados pertencentes à Google e ao fabricante do HSM.

Depois de transferir a declaração de atestação e as cadeias de certificados, pode verificar os respetivos atributos ou validar a validade da atestação através das cadeias de certificados.

O script de atestação é um script Python de código aberto desenvolvido pela Google. Pode ver o código fonte do script para saber mais acerca do formato de atestação e como funciona a validação, ou como um modelo para uma solução personalizada.

Os exemplos neste tópico foram concebidos para ambientes Linux, incluindo o Cloud Shell. Para seguir as instruções em clientes macOS ou Windows, pode ter de fazer modificações.

Antes de começar

Validar a atestação

O processo de validação da atestação pode ser realizado automaticamente através da Google Cloud consola ou manualmente transferindo o pacote de atestação e o script de validação da atestação e executando-o localmente ou no Cloud Shell.

Validar atestações através da Google Cloud consola

Pode validar a atestação através da Google Cloud consola, que abre um Cloud Shell e o pré-preenche com os fragmentos de código necessários para realizar todo o processo de validação da atestação.

  1. Aceda à página Gestão de chaves na Google Cloud consola.

    Aceda à página de gestão de chaves

  2. Selecione o porta-chaves que contém a chave que quer atestar e, de seguida, selecione a chave.

  3. Clique em Mais para a versão da chave que quer atestar e selecione Validar atestação.

  4. Na caixa de diálogo Validar atestação, clique em Abrir Cloud Shell. Esta ação abre o Cloud Shell e pré-preenche-o com o fragmento de código necessário para concluir todo o processo de validação.

  5. Inspecione o fragmento do código pré-preenchido no Cloud Shell. O fragmento transfere o script de validação da atestação e as respetivas dependências, executa os comandos gcloud para transferir a atestação e as cadeias de certificados e, em seguida, executa o script para validar a atestação.

  6. Execute o fragmento do código para validar a atestação.

Validar a atestação manualmente

A atestação, as cadeias de certificados e o script de validação da atestação têm de ser transferidos antes de validar manualmente a atestação.

  1. Transfira as cadeias de atestação e de certificados.

    Consola

    1. Aceda à página Gestão de chaves na Google Cloud consola.

      Aceda à página de gestão de chaves

    2. Selecione o porta-chaves que contém a chave que quer atestar e, de seguida, selecione a chave.

    3. Clique em Mais para a versão da chave que quer atestar e selecione Validar atestação.

    4. Na caixa de diálogo Validar atestação, clique em Transferir pacote de atestação. Esta ação transfere um ficheiro ZIP com as cadeias de atestação e certificados.

    5. Extraia as cadeias de atestação e de certificados do pacote de atestação.

    gcloud

    1. Clique em Ativar Cloud Shell na parte superior da janela da consola.

      Ativar Cloud Shell É aberta uma sessão do Cloud Shell num novo frame na parte inferior da consola e é apresentado um comando. A inicialização da sessão de shell pode demorar alguns segundos.

      Sessão do Cloud Shell

    2. No pedido de linha de comandos da Cloud Shell, use o comando gcloud kms keys versions describe para obter a atestação da chave que quer atestar. A flag --attestation-file especifica o caminho e o nome do ficheiro de destino para a atestação obtida.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. No pedido de linha de comandos da Cloud Shell, use o comando gcloud kms keys versions get-certificate-chain para obter as cadeias de certificados da chave que quer atestar. A flag --output-file especifica o caminho e o nome do ficheiro de destino para os certificados obtidos.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. Transfira o script para validar atestações e os respetivos pré-requisitos, e consulte a documentação do script para validar a atestação no ficheiro de atestação através dos certificados no ficheiro de certificados.

Analisar os valores da atestação

A documentação do fabricante do HSM inclui instruções completas para usar os respetivos scripts para analisar os valores de uma atestação e validar a chave pública de um par de chaves assimétricas. A atestação tem de ser descomprimida com o seguinte comando antes de poder ser analisada.

  • Descomprima a atestação comprimida.

    gzip -d < compressed_attestation.dat > attestation.dat
    

Estes links direcionam para instruções específicas do fabricante do HSM:

As instruções para analisar o valor da atestação incluem uma referência de campos gerais na atestação, não específicos das chaves de HSM no Cloud HSM.

As secções seguintes ilustram como validar informações sobre as suas chaves específicas do Cloud HSM.

Valide o ID da versão da chave

Pode verificar se o hash SHA-256 do ID do recurso da versão da chave está presente na atestação. O nome do recurso da chave faz parte do campo 0x0102 ou do campo do ID da chave no ficheiro de atestação. O ID da chave é composto por dois resumos de hash SHA-256 concatenados no formato hexadecimal. O segundo deve corresponder ao nome do recurso da chave.

  1. Obtenha o ID de recurso da versão da chave para a versão da chave. Pode usar a Google Cloud consola para obter o ID do recurso da versão da chave ou pode executar o seguinte comando:

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

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. Uma vez que o script de análise transfere todos os campos de atestação no formato hexadecimal, o ID da chave teria sido formatado duas vezes no formato hexadecimal. (Uma vez durante a criação do keyID e outra durante a análise da atestação). Para verificar se o nome do recurso corresponde ao ID da chave, converta o nome do recurso num resumo hexadecimal SHA-256, reverta uma conversão hexadecimal do ID da chave no ficheiro de atestação e compare os dois.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. O script de análise transfere todos os campos de atestação no formato hexadecimal e o ID da chave é codificado internamente em hexadecimal uma segunda vez. Defina a variável de ambiente KEYID_HEX para o valor do ID da chave com uma camada de descodificação de codificação hexadecimal:

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. Comparar 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 corresponderem, não é devolvida nenhuma saída e o comando termina com o código 0.

Valide outras propriedades da chave

Pode ver várias propriedades principais, que correspondem a campos na norma PKCS n.º 11. Use os seguintes exemplos como guias para validar outras propriedades da chave.

  • Se uma chave é extraível, é armazenado no campo 0x0102 do resultado analisado. Para determinar se uma chave é extraível, examine o campo 0x0162. Um valor de \x01 é true e um valor de \x00 é false.

    Não é possível extrair chaves do HSM na nuvem.

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

    Pode inferir algumas informações sobre a forma como a chave foi criada no HSM. Se a chave foi criada no Cloud HSM, significa que a chave nunca foi armazenada não encriptada fora de um HSM. Se a chave foi importada, o mecanismo de importação garante que a chave está protegida em trânsito durante o processo de importação e no Cloud HSM posteriormente.

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

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

Informações adicionais

Valida uma atestação para determinar se foi criada uma versão de chave num HSM.