Este tópico fornece informações sobre a criação e a validação de assinaturas digitais com base em chaves assimétricas.
Uma assinatura digital é criada através da parte da chave privada de uma chave assimétrica. A assinatura é validada através da parte da chave pública da mesma chave assimétrica.
Antes de começar
Ao criar assinaturas digitais, tem de usar uma chave com o objetivo da chave de
ASYMMETRIC_SIGN
. Quando criar a chave, useASYMMETRIC_SIGN
.Para validar uma assinatura, tem de conhecer o algoritmo completo que foi usado quando criou a chave. Para as instruções da linha de comandos abaixo que usam o comando
openssl
, tem de transmitir estas informações a esses comandos.Conceda a autorização
cloudkms.cryptoKeyVersions.useToSign
na chave assimétrica ao utilizador ou ao serviço que vai realizar a assinatura. Pode saber mais acerca das autorizações no Serviço de gestão de chaves na nuvem em Autorizações e funções.Se for validar uma assinatura, conceda autorização
cloudkms.cryptoKeyVersions.viewPublicKey
na chave assimétrica ao utilizador ou ao serviço que vai transferir a chave pública para usar na validação.Se for usar a linha de comandos, instale o OpenSSL se ainda não o tiver. Se usar o Cloud Shell, o OpenSSL já está instalado.
Dados versus resumo
A entrada fornecida para pedidos AsymmetricSign pode ser transmitida através do campo data
ou do campo digest
. Não é possível especificar estes campos ao mesmo tempo. Existem alguns algoritmos que requerem o campo de dados, como os algoritmos não processados e a assinatura
com uma chave do Cloud External Key Manager.
Algoritmos brutos
Os algoritmos "brutos", identificados pelo prefixo RSA_SIGN_RAW_
, são uma variante da assinatura PKCS #1 que omite a codificação num DigestInfo. Na variante:
- É calculado um resumo sobre a mensagem que vai ser assinada.
- O preenchimento PKCS #1 é aplicado diretamente ao resumo.
- É calculada uma assinatura do resumo preenchido, usando a chave privada RSA.
Para usar estes algoritmos:
- Os dados não processados têm de ser fornecidos (em vez de um resumo) como parte do campo
data
. - Os dados têm um limite de comprimento de 11 bytes inferior ao tamanho da chave RSA. Por exemplo, o PKCS #1 com uma chave RSA de 2048 bits pode assinar, no máximo, 245 bytes.
- Conceda a função de
cloudkms.expertRawPKCS1
ao utilizador ou serviço adequado. Pode saber mais sobre as autorizações no Serviço de gestão de chaves na nuvem em Autorizações e funções.
Ao usar algoritmos não processados, também pode assinar um tipo de resumo para o qual não está disponível um algoritmo predefinido. Por exemplo, pode usar uma chave RSA_SIGN_RAW_2048
para assinar uma estrutura SHA-512
PKCS #1 DigestInfo que já calculou externamente. Este processo cria os mesmos resultados que um algoritmo RSA_SIGN_PKCS1_2048_SHA512
padrão.
Suporte de ECDSA para outros algoritmos de hash
Os 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
.
Uma vez que a hash é realizada antes de criar a assinatura, estes algoritmos de assinatura também podem ser usados com resumos diferentes de SHA, como Keccak. Para usar um resumo Keccak, forneça um valor de hash Keccak e use o algoritmo de resumo SHA com o mesmo comprimento. Por exemplo, pode usar um resumo KECCAK256
num pedido
com o algoritmo EC_SIGN_P256_SHA256
.
Criar uma assinatura
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
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 usar para a assinatura. Substitua key pelo nome da chave. Substitua key-ring pelo nome do conjunto de chaves onde a chave está localizada. Substitua location pela localização do Cloud KMS do conjunto de chaves. Substitua digest-algorithm pelo algoritmo a usar. Omitir digest-algorithm para enviar input-file para o Cloud KMS para assinatura. Substitua input-file e signature-file pelos caminhos locais do ficheiro a assinar e do ficheiro de assinatura.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Trusted Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
Use o método
CryptoKeyVersions.asymmetricSign
para realizar a assinatura. A resposta deste método contém a assinatura codificada em base64.
Validar uma assinatura de curva elíptica
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
Obtenha 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 conjunto de chaves onde a chave se encontra. Substitua location pela localização do Cloud KMS para o conjunto de chaves. Substitua output-file pelo caminho do ficheiro para guardar a chave pública no sistema local.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
Valide a assinatura
Os comandos OpenSSL para validar a assinatura dependem do tipo de assinatura que foi criado. Por exemplo, para validar uma assinatura de curva elíptica SHA-256 com o OpenSSL, tem de especificar -sha256
. Para validar uma assinatura de curva elíptica SHA-384, tem de especificar -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 ficheiro que contém a chave pública (por exemplo,
"./my-key.pub"
).signature-file. Caminho para um ficheiro que contém a assinatura a validar (por exemplo,
"./my-data.sig"
).message-file. Caminho para um ficheiro que contém a mensagem (por exemplo,
"./my-data.txt"
).
Se a assinatura for válida, o comando apresenta a string Verified OK
.
Para obter informações sobre todas as flags e valores possíveis, execute o comando com o subcomando help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Trusted Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
Use o método CryptoKeyVersions.getPublicKey para obter a chave pública e, em seguida, use os comandos apresentados no exemplo de linha de comandos para validar a assinatura.
Validar uma assinatura RSA
gcloud
Para usar o Cloud KMS na linha de comandos, primeiro instale ou atualize para a versão mais recente da CLI do Google Cloud.
Obtenha 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 conjunto de chaves onde a chave se encontra. Substitua location pela localização do Cloud KMS para o conjunto de chaves. Substitua output-file pelo caminho para guardar a chave pública no sistema local.
Para ver informações sobre todas as flags e valores possíveis, execute o comando com a flag --help
.
Valide a assinatura
Os comandos OpenSSL para validar a assinatura dependem do tipo de assinatura que foi criado. Por exemplo, para validar uma assinatura RSA SHA-256 com preenchimento PSS, tem de especificar -sha256
e -sigopt rsa_padding_mode:pss
. Para validar uma assinatura SHA-512
RSA com preenchimento PSS, tem de especificar -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 ficheiro que contém a chave pública (por exemplo,
"./my-key.pub"
).signature-file. Caminho para um ficheiro que contém a assinatura a validar (por exemplo,
"./my-data.sig"
).message-file. Caminho para um ficheiro que contém a mensagem (por exemplo,
"./my-data.txt"
).
Se a assinatura for válida, o comando apresenta a string Verified OK
.
Para obter informações sobre todas as flags e valores possíveis, execute o comando com o subcomando help
.
C#
Para executar este código, primeiro configure um ambiente de desenvolvimento C# e instale o SDK C# do Cloud KMS.
Go
Para executar este código, primeiro configure um ambiente de desenvolvimento Go e instale o SDK Go do Cloud KMS.
Java
Para executar este código, primeiro configure um ambiente de desenvolvimento Java e instale o SDK Java do Cloud KMS.
Node.js
Para executar este código, primeiro configure um ambiente de desenvolvimento do Node.js e instale o SDK do Node.js do Cloud KMS.
PHP
Para executar este código, saiba primeiro como usar o PHP no Trusted Cloud e instale o SDK PHP do Cloud KMS.
Python
Para executar este código, primeiro configure um ambiente de desenvolvimento Python e instale o SDK Python do Cloud KMS.
Ruby
Para executar este código, primeiro configure um ambiente de desenvolvimento Ruby e instale o SDK Ruby do Cloud KMS.
API
Estes exemplos usam o curl como cliente HTTP para demonstrar a utilização da API. Para mais informações sobre o controlo de acesso, consulte o artigo Aceder à API Cloud KMS.
Use o método
CryptoKeyVersions.getPublicKey
para obter a chave pública e, em seguida, use os comandos apresentados no exemplo da linha de comandos para validar a assinatura.