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
- Se necessário, crie uma chave do Cloud HSM num conjunto de chaves numa região suportada pelo Cloud HSM.
Transfira e instale os scripts para analisar os valores da atestação do fabricante do HSM. Transfira cada um destes scripts:
verify_pubkey.pyparse_v1.pyparse_v2.py
Consulte a documentação sobre a utilização dos scripts, disponibilizada na mesma localização.
Transfira e instale o script para validar atestações e os respetivos pré-requisitos, e reveja a documentação do script.
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.
Aceda à página Gestão de chaves na Google Cloud consola.
Selecione o porta-chaves que contém a chave que quer atestar e, de seguida, selecione a chave.
Clique em Mais more_vert para a versão da chave que quer atestar e selecione Validar atestação.
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.
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.
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.
Transfira as cadeias de atestação e de certificados.
Consola
Aceda à página Gestão de chaves na Google Cloud consola.
Selecione o porta-chaves que contém a chave que quer atestar e, de seguida, selecione a chave.
Clique em Mais more_vert para a versão da chave que quer atestar e selecione Validar atestação.
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.
Extraia as cadeias de atestação e de certificados do pacote de atestação.
gcloud
Clique em Ativar Cloud Shell na parte superior da janela da consola.
É 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.
No pedido de linha de comandos da Cloud Shell, use o comando
gcloud kms keys versions describepara obter a atestação da chave que quer atestar. A flag--attestation-fileespecifica 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] \
No pedido de linha de comandos da Cloud Shell, use o comando
gcloud kms keys versions get-certificate-chainpara obter as cadeias de certificados da chave que quer atestar. A flag--output-fileespecifica 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] \
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.
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
Na linha de comandos, atribua
resource_nameao 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"
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}')"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_HEXpara 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)Comparar os valores de
RESOURCE_NAME_HEXeKEYID_HEXcomo 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
0x0102do resultado analisado. Para determinar se uma chave é extraível, examine o campo0x0162. Um valor de\x01étruee 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 prefixoCKK_*. 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.