Neste guia, mostramos como importar uma chave criptográfica para o Cloud Key Management Service como uma nova versão de chave usando um método de importação resistente a ataques quânticos. Essa abordagem ajuda a proteger a chave durante o trânsito contra ataques de "coleta agora, descriptografia depois" (HNDL, na sigla em inglês) por futuros computadores quânticos.
A importação de chaves resistentes a ataques quânticos usa ferramentas padrão de criptografia pós-quântica (PQC), incluindo mecanismos de encapsulamento de chaves (KEMs) e criptografia de chave pública híbrida (HPKE), para proteger sua chave durante o trânsito.
A importação de chaves resistente a ataques quânticos é compatível com chaves protegidas por software (nível de proteção SOFTWARE).
Antes de começar
Antes de importar uma chave, você precisa preparar o projeto, o sistema local e o material da chave.
Preparar o projeto
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
Funções exigidas
Para receber as permissões necessárias para importar uma chave, peça ao administrador que conceda a você os seguintes papéis do IAM no keyring:
-
Para importar apenas para chaves atuais:
Cloud KMS Importer (
roles/cloudkms.importer) -
Para importar para novas chaves:
Administrador do Cloud KMS (
roles/cloudkms.admin)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Preparar o sistema local
Você precisa de uma biblioteca criptográfica no seu sistema local que ofereça suporte a ferramentas de criptografia pós-quântica (PQC), incluindo mecanismos de encapsulamento de chaves (KEMs) e criptografia híbrida de chave pública (HPKE). Você pode usar o Tink, o OpenSSL ou outra biblioteca de criptografia que ofereça suporte ao seguinte:
- Criptografia de chave pública híbrida (HPKE)
- Um dos seguintes algoritmos de KEM:
ML-KEM-768ML-KEM-1024X-WING(um híbrido deML-KEM-768eX25519)
- A função de derivação de chaves (KDF, na sigla em inglês)
HKDF-SHA256 - Criptografia autenticada com dados associados (AEAD) usando o algoritmo
AES-256-GCM
Preparar a chave
Verifique se o algoritmo e o comprimento da
chave são compatíveis. Todas as versões de uma chave precisam ter o mesmo nível de proteção
(SOFTWARE).
Criar a chave e o keyring de segmentação
Quando você importa material de chave, ele se torna uma nova versão de chave em uma chave atual. Essa chave é chamada de chave de destino. O keyring e a chave de destino precisam existir antes que seja possível importar o material da chave.
Siga estas etapas para criar uma chave vazia com suporte de software em um novo keyring usando a Google Cloud CLI ou o console Google Cloud .
Console
No console do Google Cloud , acesse a página Gerenciamento de chaves.
Clique em Criar keyring.
No campo Nome do keyring, digite o nome do seu keyring.
Em Tipo de local, selecione um tipo e um local.
Clique em Criar. A página Criar chave é aberta.
No campo Nome da chave, insira o nome da sua chave.
Em Nível de proteção, selecione Software.
Em Material da chave, selecione Chave importada e clique em Continuar. Isso impede que uma versão de chave inicial seja criada.
Defina a Finalidade e o Algoritmo da chave e clique em Continuar.
Opcional: se você quiser que essa chave contenha apenas versões importadas, selecione Restringir versões de chave apenas à importação. Isso evita que você crie acidentalmente novas versões de chave no Cloud KMS.
Opcional: para chaves importadas, a rotação automática é desativada por padrão. Para ativar a rotação de chaves automática, selecione um valor no campo Período de rotação de chaves.
Se você ativar a rotação automática, as novas versões das chaves serão geradas no Cloud KMS, e a versão importada da chave não será mais a versão padrão da chave após uma rotação.
Clique em Criar.
gcloud
Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.
Crie o keyring de segmentação. Escolha um local compatível com o nível de proteção que você quer usar. Para mais informações sobre os locais compatíveis, consulte Locais do Cloud KMS.
gcloud kms keyrings create KEY_RING \ --location LOCATION
Saiba mais sobre como criar keyring.
Crie a chave de destino usando o comando
kms keys createcom a flag--skip-initial-version-creation. Isso cria uma chave sem versão inicial para que o material de chave importado seja a versão1. Use a flag--import-onlypara impedir que o Cloud KMS gere material de chave para novas versões de chave. Com essa flag definida, novas versões da chave precisam ser importadas. As chaves criadas como--import-onlyprecisam ser giradas manualmente.gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose PURPOSE \ --protection-level SOFTWARE \ --skip-initial-version-creation \ --import-only
Substitua:
KEY_NAME: o nome que você quer usar para a chave.LOCATION: a localização do keyring.KEY_RING: o keyring em que você quer criar a chave.PURPOSE: a finalidade que você quer usar para a chave.
API
Estes exemplos usam curl como um cliente HTTP para demonstrar o uso da API. Para mais informações sobre controle de acesso, consulte Como acessar a API Cloud KMS.
Crie um novo keyring:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?keyRingId=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --header "x-goog-user-project: PROJECT_ID" \ --data "{}"Consulte a documentação da API
KeyRing.createpara mais informações.Crie uma chave vazia, apenas para importação:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?cryptoKeyId=KEY_NAME&skipInitialVersionCreation=true" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --header "x-goog-user-project: PROJECT_ID" \ --data "{"purpose":"PURPOSE", "importOnly": "true", "versionTemplate":{"protectionLevel":"PROTECTION_LEVEL","algorithm":"ALGORITHM"}}"Consulte a documentação da API
CryptoKey.createpara mais informações.
Agora o keyring e a chave existem, mas a chave não contém material de chave, não tem versão e não está ativa. Em seguida, crie um job de importação.
Criar o job de importação
Um job de importação define as características das chaves importadas, incluindo o nível de proteção e o método de importação.
A importação de chaves resistente a ataques quânticos é compatível apenas com o nível de proteção SOFTWARE.
Escolha um dos seguintes métodos de importação resistente a ataques quânticos:
HPKE_KEM_XWING_HKDF_SHA256_AES_256_GCMHPKE_KEM_ML_KEM_768_HKDF_SHA256_AES_256_GCMHPKE_KEM_ML_KEM_1024_HKDF_SHA256_AES_256_GCM
gcloud
Execute o seguinte comando para criar um job de importação com um método de importação resistente a ataques quânticos:
gcloud kms import-jobs create IMPORT_JOB \
--location LOCATION \
--keyring KEY_RING \
--import-method IMPORT_METHOD \
--protection-level software
Substitua:
IMPORT_JOB: um nome exclusivo para usar no job de importação.LOCATION: o local do keyring em que você criou a chave de destino.KEY_RING: o nome do keyring em que você criou a chave de destino.IMPORT_METHOD: o método de importação resistente a ataques quânticos que você quer usar, por exemplo,hpke-kem-xwing-hkdf-sha256-aes-256-gcm.
REST
Chame o método keyRings.importJobs.create:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/importJobs?import_job_id=IMPORT_JOB" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"import_method": "IMPORT_METHOD", "protection_level": "SOFTWARE"}'
Substitua:
PROJECT_ID: o identificador do seu projeto do Cloud KMS.LOCATION: o local do keyring em que você criou a chave de destino.KEY_RING: o nome do keyring em que você criou a chave de destino.IMPORT_JOB: um nome exclusivo para usar no job de importação.TOKEN: o token para autenticar a solicitação.IMPORT_METHOD: o método de importação resistente a ataques quânticos que você quer usar, por exemplo,HPKE_KEM_XWING_HKDF_SHA256_AES_256_GCM.
Verificar o estado do job de importação
O estado inicial de um job de importação é PENDING_GENERATION. Quando o estado é ACTIVE, você pode usá-lo para importar chaves.
Um job de importação expira após três dias. Se o job de importação tiver expirado, você precisará criar um novo.
É possível verificar o status de um job de importação usando a Google Cloud CLI, o consoleGoogle Cloud ou a API Cloud Key Management Service.
Console
No console do Google Cloud , acesse a página Gerenciamento de chaves.
Clique no nome do keyring que contém o job de importação.
Clique na guia Jobs de importação na parte superior da página.
O estado ficará visível em Status, ao lado do nome do job de importação.
gcloud
Para usar o Cloud KMS na linha de comando, primeiro instale ou faça upgrade para a versão mais recente da Google Cloud CLI.
Quando um job de importação está ativo, você pode usá-lo para importar chaves. Talvez isso leve alguns minutos. Use este comando para verificar se o job de importação está ativo. Use o local e o keyring em que você criou o job de importação.
gcloud kms import-jobs describe IMPORT_JOB \ --location LOCATION \ --keyring KEY_RING \ --format="value(state)"
O resultado será o seguinte:
state: ACTIVE
Go
Para executar esse código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK do Cloud KMS para Go.
Java
Para executar esse código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK do Cloud KMS para Java.