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 a assinatura
com uma chave do gerenciador de chaves externas do Cloud.
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.
Compatibilidade do ECDSA com 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 é executado antes da criação da assinatura, esses algoritmos de assinatura também podem ser usados com resumos diferentes de SHA, como Keccak. Para usar um resumo do Keccak, forneça um valor de hash do Keccak e use o algoritmo de resumo SHA com o mesmo comprimento. 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.