Neste tópico, fornecemos informações sobre como criar e validar assinaturas digitais com base em chaves assimétricas.
Uma assinatura digital é criada usando a parte de chave privada de uma chave assimétrica. A assinatura é validada usando a parte de chave pública da mesma chave assimétrica.
Antes de começar
Ao criar assinaturas digitais, você precisa usar uma chave que tenha a finalidade de chave de
ASYMMETRIC_SIGN
. Ao criar a chave, useASYMMETRIC_SIGN
.Para validar uma assinatura, você precisa conhecer o algoritmo completo usado na criação da chave. Para as instruções de linha de comando abaixo que usam o comando
openssl
, você precisa passar essas informações para esses comandos.Conceda a permissão
cloudkms.cryptoKeyVersions.useToSign
na chave assimétrica ao usuário ou serviço que executará a assinatura. Saiba mais sobre permissões no Cloud Key Management Service em Permissões e papéis.Para validar uma assinatura, conceda a permissão
cloudkms.cryptoKeyVersions.viewPublicKey
na chave assimétrica ao usuário ou serviço que fará o download da chave pública que será usada para validação.Para usar a linha de comando, instale o OpenSSL, se ainda não o tiver. Se você usa o Cloud Shell, o OpenSSL já está instalado.
Dados x resumo
A entrada fornecida para solicitações AsymmetricSign pode ser transmitida por meio do campo data
ou digest
. Esses campos não podem ser especificados ao mesmo tempo. Alguns algoritmos exigem o campo de dados, como
algoritmos brutos e assinatura
com uma chave do Cloud External Key Manager.
Algoritmos brutos
Os algoritmos "RAW", identificados pelo prefixo RSA_SIGN_RAW_
, são uma variante da assinatura PKCS #1 que omite a codificação em um DigestInfo. Na
variante:
- Um resumo é computado sobre a mensagem a ser assinada.
- O preenchimento PKCS #1 é aplicado diretamente ao resumo.
- Uma assinatura do resumo preenchido é calculada usando a chave privada RSA.
Para usar estes algoritmos:
- Os dados brutos precisam ser fornecidos (em vez de um resumo) como parte do campo
data
. - Os dados têm um limite de comprimento de 11 bytes a menos que o tamanho da chave RSA. Por exemplo, a PKCS #1 com uma chave RSA de 2.048 bits pode assinar no máximo 245 bytes.
- Conceda o papel
cloudkms.expertRawPKCS1
ao usuário ou serviço apropriado. Saiba mais sobre permissões no Cloud Key Management Service em Permissões e papéis.
Suporte a ECDSA para outros algoritmos de hash
Nossos algoritmos de assinatura ECDSA têm o formato geral:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM tem o valor SHA256
, SHA384
ou SHA512
.
Como o hash é realizado antes da criação da assinatura, esses algoritmos de assinatura
também podem ser usados com resumos diferentes do SHA, como o Keccak. Para usar
um resumo Keccak, forneça um valor de hash Keccak e use o algoritmo de resumo SHA
com a mesma duração. Por exemplo, é possível usar um resumo KECCAK256
em uma solicitação
com o algoritmo EC_SIGN_P256_SHA256
.
Como criar uma assinatura
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.
gcloud kms asymmetric-sign \ --version key-version \ --key key \ --keyring key-ring \ --location location \ --digest-algorithm digest-algorithm \ --input-file input-file \ --signature-file signature-file
Substitua key-version pela versão da chave a ser usada para assinatura. Substitua key pelo nome da chave. Substitua key-ring pelo nome do keyring em que a chave está localizada. Substitua location pelo local do Cloud KMS do keyring. Substitua digest-algorithm pelo algoritmo a ser usado. Omita digest-algorithm para enviar input-file ao Cloud KMS para assinatura. Substitua input-file e signature-file pelos caminhos locais do arquivo a ser assinado e pelo arquivo de assinatura.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help
.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
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.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instalar o SDK do Cloud KMS para PHP.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
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.
Use o método CryptoKeyVersions.asymmetricSign
para realizar a assinatura. A resposta desse método contém a assinatura codificada em base64.
Como validar uma assinatura de curva elíptica
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.
Receber a chave pública
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Substitua key-version pela versão da chave. Substitua key pelo nome da chave. Substitua key-ring pelo nome do keyring em que a chave está localizada. Substitua location pelo local do Cloud KMS para o keyring. Substitua output-file pelo caminho do arquivo para salvar a chave pública no sistema local.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help
.
Verificar a assinatura
Os comandos do OpenSSL para validar a assinatura dependem do tipo de assinatura criado. Por exemplo, para validar uma assinatura de curva elíptica SHA-256 usando o OpenSSL, especifique -sha256
. Para validar uma assinatura de curva elíptica SHA-384, especifique -sha384
.
openssl dgst \ -sha256 \ -verify public-key-file \ -signature signature-file \ message-file
Substitua as variáveis pelos seus próprios valores:
public-key-file. Caminho para um arquivo que contém a chave pública (por exemplo,
"./my-key.pub"
).signature-file. Caminho para um arquivo que contém a assinatura a ser verificada (por exemplo,
"./my-data.sig"
).message-file. Caminho para um arquivo que contém a mensagem (por exemplo,
"./my-data.txt"
).
Se a assinatura for válida, o comando gerará a string Verified OK
.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com o subcomando help
.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
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.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instalar o SDK do Cloud KMS para PHP.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
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.
Use o método CryptoKeyVersions.getPublicKey para recuperar a chave pública e use os comandos mostrados no exemplo da linha de comando para validar a assinatura.
Como validar uma assinatura RSA
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.
Receber a chave pública
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Substitua key-version pela versão da chave. Substitua key pelo nome da chave. Substitua key-ring pelo nome do keyring em que a chave está localizada. Substitua location pelo local do Cloud KMS para o keyring. Substitua output-file pelo caminho para salvar a chave pública no sistema local.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com a sinalização --help
.
Verificar a assinatura
Os comandos do OpenSSL para validar a assinatura dependem do tipo de assinatura criado. Por exemplo, para validar uma assinatura RSA SHA-256 com preenchimento PSS, especifique -sha256
e -sigopt rsa_padding_mode:pss
. Para validar uma assinatura SHA-512 RSA com preenchimento do PSS, especifique -sha512
e -sigopt
rsa_padding_mode:pss
.
openssl dgst \ -sha256 \ -sigopt rsa_padding_mode:pss \ -sigopt rsa_pss_saltlen:-1 \ -verify public-key-file \ -signature signature-file \ message-file
Substitua as variáveis pelos seus próprios valores:
public-key-file. Caminho para um arquivo que contém a chave pública (por exemplo,
"./my-key.pub"
).signature-file. Caminho para um arquivo que contém a assinatura a ser verificada (por exemplo,
"./my-data.sig"
).message-file. Caminho para um arquivo que contém a mensagem (por exemplo,
"./my-data.txt"
).
Se a assinatura for válida, o comando gerará a string Verified OK
.
Para informações sobre todas as sinalizações e valores possíveis, execute o comando com o subcomando help
.
C#
Para executar esse código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK do Cloud KMS para C#.
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.
Node.js
Para executar esse código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Cloud KMS para Node.js.
PHP
Para executar esse código, primeiro saiba como usar o PHP no Google Cloud e instalar o SDK do Cloud KMS para PHP.
Python
Para executar esse código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK do Cloud KMS para Python.
Ruby
Para executar esse código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK do Cloud KMS para Ruby.
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.
Use o método CryptoKeyVersions.getPublicKey
para recuperar a chave pública e use os comandos mostrados no exemplo de linha de comando para validar a assinatura.