Questo argomento fornisce informazioni sulla creazione e la convalida di firme digitali basate su chiavi asimmetriche.
Una firma digitale viene creata utilizzando la parte della chiave privata di una chiave asimmetrica. La firma viene convalidata utilizzando la parte della chiave pubblica della stessa chiave asimmetrica.
Prima di iniziare
Quando crei firme digitali, devi utilizzare una chiave con lo scopo della chiave di
ASYMMETRIC_SIGN
. Quando crei la chiave, utilizzaASYMMETRIC_SIGN
.Per convalidare una firma, devi conoscere l'algoritmo completo utilizzato durante la creazione della chiave. Per le istruzioni della riga di comando riportate di seguito che utilizzano il comando
openssl
, devi trasmettere queste informazioni ai comandi.Concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToSign
sulla chiave asimmetrica all'utente o al servizio che eseguirà la firma. Puoi scoprire di più sulle autorizzazioni in Cloud Key Management Service in Autorizzazioni e ruoli.Se intendi convalidare una firma, concedi l'autorizzazione
cloudkms.cryptoKeyVersions.viewPublicKey
sulla chiave asimmetrica all'utente o al servizio che scaricherà la chiave pubblica da utilizzare per la convalida.Se utilizzi la riga di comando, installa OpenSSL se non lo hai già fatto. Se utilizzi Cloud Shell, OpenSSL è già installato.
Dati e riepilogo
L'input fornito per le richieste AsymmetricSign può essere trasmesso tramite il campo data
o il campo digest
. Questi campi non possono essere specificati
contemporaneamente. Esistono alcuni algoritmi che richiedono il campo dati, ad esempio
algoritmi non elaborati e firma
con una chiave Cloud External Key Manager.
Algoritmi non elaborati
Gli algoritmi "raw", identificati dal prefisso RSA_SIGN_RAW_
, sono una
variante della firma PKCS #1 che omette la codifica in un DigestInfo. Nella
variante:
- Viene calcolato un digest sul messaggio che verrà firmato.
- Il riempimento PKCS #1 viene applicato direttamente al digest.
- Viene calcolata una firma del digest con padding utilizzando la chiave privata RSA.
Per utilizzare questi algoritmi:
- I dati non elaborati devono essere forniti (anziché un digest) come parte del campo
data
. - I dati hanno un limite di lunghezza di 11 byte in meno rispetto alle dimensioni della chiave RSA. Ad esempio, PKCS #1 con una chiave RSA a 2048 bit può firmare al massimo 245 byte.
- Concedi il ruolo
cloudkms.expertRawPKCS1
all'utente o al servizio appropriato. Puoi scoprire di più sulle autorizzazioni in Cloud Key Management Service all'indirizzo Autorizzazioni e ruoli.
Utilizzando gli algoritmi non elaborati, puoi anche firmare un tipo di digest per il quale
non è disponibile un algoritmo predefinito. Ad esempio, puoi utilizzare una chiave RSA_SIGN_RAW_2048
per firmare una struttura PKCS #1 DigestInfo SHA-512
che hai già calcolato esternamente. Questo processo produce gli stessi risultati di
un algoritmo RSA_SIGN_PKCS1_2048_SHA512
standard.
Supporto di ECDSA per altri algoritmi hash
I nostri algoritmi di firma ECDSA hanno il formato generale:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM ha il valore SHA256
, SHA384
o SHA512
.
Poiché l'hashing viene eseguito prima della creazione della firma, questi algoritmi di firma possono essere utilizzati anche con digest diversi da SHA, ad esempio Keccak. Per utilizzare
un digest Keccak, fornisci un valore hash Keccak e utilizza l'algoritmo digest SHA
con la stessa lunghezza. Ad esempio, puoi utilizzare un digest KECCAK256
in una richiesta
con l'algoritmo EC_SIGN_P256_SHA256
.
Creare una firma
gcloud
Per utilizzare Cloud KMS dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di 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
Sostituisci key-version con la versione della chiave da utilizzare per la firma. Sostituisci key con il nome della chiave. Sostituisci key-ring con il nome del keyring in cui si trova la chiave. Sostituisci location con la posizione di Cloud KMS delle chiavi automatizzate. Sostituisci digest-algorithm con l'algoritmo da utilizzare. Ometti digest-algorithm per inviare input-file a Cloud KMS per la firma. Sostituisci input-file e signature-file con i percorsi locali del file da firmare e del file della firma.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag
--help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go di Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installa l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby di Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per saperne di più sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il
metodo
CryptoKeyVersions.asymmetricSign
per eseguire la firma. La risposta di questo metodo contiene la
firma con codifica Base64.
Convalida di una firma a curva ellittica
gcloud
Per utilizzare Cloud KMS dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.
Recuperare la chiave pubblica
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Sostituisci key-version con la versione della chiave. Sostituisci key con il nome della chiave. Sostituisci key-ring con il nome del portachiavi in cui si trova la chiave. Sostituisci location con la posizione di Cloud KMS per il keyring. Sostituisci output-file con il percorso del file in cui salvare la chiave pubblica sul sistema locale.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag
--help
.
Verificare la firma
I comandi OpenSSL per convalidare la firma dipendono dal tipo di firma
che è stato creato. Ad esempio, per convalidare una firma con curva ellittica SHA-256
utilizzando OpenSSL, devi specificare -sha256
. Per convalidare una firma
con curva ellittica SHA-384, devi specificare -sha384
.
openssl dgst \ -sha256 \ -verify public-key-file \ -signature signature-file \ message-file
Sostituisci le variabili con i tuoi valori:
public-key-file. Percorso di un file che contiene la chiave pubblica (ad es.
"./my-key.pub"
).signature-file. Percorso di un file contenente la firma da verificare (ad es.
"./my-data.sig"
).message-file. Percorso di un file che contiene il messaggio (ad es.
"./my-data.txt"
).
Se la firma è valida, il comando restituisce la stringa Verified OK
.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il
sottocomando help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go di Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installa l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby di Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per saperne di più sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il metodo CryptoKeyVersions.getPublicKey per recuperare la chiave pubblica, quindi utilizza i comandi mostrati per l'esempio della riga di comando per convalidare la firma.
Convalida di una firma RSA
gcloud
Per utilizzare Cloud KMS dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.
Recuperare la chiave pubblica
gcloud kms keys versions get-public-key key-version \ --key key \ --keyring key-ring \ --location location \ --output-file output-file
Sostituisci key-version con la versione della chiave. Sostituisci key con il nome della chiave. Sostituisci key-ring con il nome del portachiavi in cui si trova la chiave. Sostituisci location con la posizione di Cloud KMS per il keyring. Sostituisci output-file con il percorso in cui salvare la chiave pubblica sul sistema locale.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag
--help
.
Verificare la firma
I comandi OpenSSL per convalidare la firma dipendono dal tipo di firma creato. Ad esempio, per convalidare una firma RSA SHA-256 con riempimento PSS, devi specificare -sha256
e -sigopt rsa_padding_mode:pss
. Per convalidare una firma RSA SHA-512 con riempimento PSS, devi specificare -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
Sostituisci le variabili con i tuoi valori:
public-key-file. Percorso di un file che contiene la chiave pubblica (ad es.
"./my-key.pub"
).signature-file. Percorso di un file contenente la firma da verificare (ad es.
"./my-data.sig"
).message-file. Percorso di un file che contiene il messaggio (ad es.
"./my-data.txt"
).
Se la firma è valida, il comando restituisce la stringa Verified OK
.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il
sottocomando help
.
C#
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Go e installare l'SDK Go di Cloud KMS.
Java
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Java e installare l'SDK Java Cloud KMS.
Node.js
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Node.js e installare l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installa l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby di Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per saperne di più sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il metodo
CryptoKeyVersions.getPublicKey
per recuperare la chiave pubblica, quindi utilizza i comandi mostrati per l'esempio
della riga di comando per convalidare la firma.