Questo argomento fornisce informazioni sulla creazione e sulla convalida delle 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 le firme digitali, devi utilizzare una chiave con scopo chiave
ASYMMETRIC_SIGN
. Quando crei la chiave, utilizzaASYMMETRIC_SIGN
.Per convalidare una firma, devi conoscere l'algoritmo completo utilizzato per creare la chiave. Per le istruzioni a riga di comando riportate di seguito che utilizzano il comando
openssl
, devi passare queste informazioni ai comandi.Concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToSign
alla chiave asimmetrica all'utente o al servizio che eseguirà la firma. Per informazioni sulle autorizzazioni in Cloud Key Management Service, consulta Autorizzazioni e ruoli.Se vuoi convalidare una firma, concedi l'autorizzazione
cloudkms.cryptoKeyVersions.viewPublicKey
per la chiave asimmetrica all'utente o al servizio che scaricherà la chiave pubblica da utilizzare per la convalida.Se intendi utilizzare la riga di comando, installa OpenSSL se non lo hai già. Se utilizzi Cloud Shell, OpenSSL è già installato.
Dati e digest
L'input fornito per le richieste AsymmetricSign può essere passato tramite il campo data
o il campo digest
. Questi campi non possono essere specificati contemporaneamente. Esistono alcuni algoritmi che richiedono il campo dei dati, ad esempio gli algoritmi non elaborati e la firma con una chiave Cloud External Key Manager.
Algoritmi non elaborati
Gli algoritmi "non elaborati", 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 padding PKCS #1 viene applicato direttamente al digest.
- Viene calcolata una firma del digest con spaziatura, utilizzando la chiave privata RSA.
Per utilizzare questi algoritmi:
- I dati non elaborati devono essere forniti (anziché un digest) all'interno del campo
data
. - La lunghezza dei dati ha un limite 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. Per saperne di più sulle autorizzazioni in Cloud Key Management Service, consulta Autorizzazioni e ruoli.
Supporto di ECDSA per altri algoritmi hash
I nostri algoritmi di firma ECDSA hanno il seguente formato generale:
EC_SIGN_ELLIPTIC_CURVE_[DIGEST_ALGORITHM]
DIGEST_ALGORITHM ha il valore SHA256
, SHA384
o SHA512
.
Poiché l'hash 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 sulla riga di comando, esegui l'installazione o l'upgrade alla versione più recente 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 mazzo di chiavi in cui si trova la chiave. Sostituisci location con la posizione Cloud KMS del keyring. 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 possibili valori, 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 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, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere 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 sulla riga di comando, innanzitutto installa o esegui l'upgrade alla versione più recente di Google Cloud CLI.
Ottenere 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 dove si trova la chiave. Sostituisci location con la posizione di Cloud KMS per il keyring. Sostituisci output-file con il percorso del file per salvare la chiave pubblica sul sistema locale.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag --help
.
Verifica la firma
I comandi OpenSSL per convalidare la firma dipendono dal tipo di firma 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 contenente 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 possibili valori, 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 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, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere 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 sulla riga di comando, esegui l'installazione o l'upgrade alla versione più recente di Google Cloud CLI.
Ottenere 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 dove si trova la chiave. Sostituisci location con la posizione di Cloud KMS per il keyring. Sostituisci output-file con il percorso per salvare la chiave pubblica sul sistema locale.
Per informazioni su tutti i flag e i possibili valori, esegui il comando con il flag --help
.
Verifica 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 padding PSS, devi specificare -sha256
e -sigopt rsa_padding_mode:pss
. Per convalidare una firma RSA SHA-512 con padding 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 contenente 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 possibili valori, 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 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, devi innanzitutto scoprire come utilizzare PHP su Google Cloud e installare l'SDK PHP Cloud KMS.
Python
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Python e installare l'SDK Python Cloud KMS.
Ruby
Per eseguire questo codice, devi innanzitutto configurare un ambiente di sviluppo Ruby e installare l'SDK Ruby Cloud KMS.
API
Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere all'API Cloud KMS.
Utilizza il metodo
CryptoKeyVersions.getPublicKey
per recuperare la chiave pubblica, quindi utilizza i comandi mostrati per l'esempio
a riga di comando per convalidare la firma.