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 di 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 a questi comandi.Concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToSignsulla 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.viewPublicKeysulla 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 l'hai già fatto. Se utilizzi Cloud Shell, OpenSSL è già installato.
Dati e digest
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, come
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 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. - La lunghezza dei dati è limitata a 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.expertRawPKCS1all'utente o al servizio appropriato. Puoi scoprire di più sulle autorizzazioni in Cloud Key Management Service in 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 SHA-512 PKCS #1 DigestInfo che hai già calcolato esternamente. Questo processo crea gli stessi risultati di un algoritmo RSA_SIGN_PKCS1_2048_SHA512 standard.
Supporto 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 di creare la firma, questi algoritmi di firma possono essere utilizzati anche con digest diversi da SHA, come Keccak. Per utilizzare un digest Keccak, fornisci un valore hash Keccak e utilizza l'algoritmo di digest SHA con la stessa lunghezza. Ad esempio, puoi utilizzare un digest KECCAK256 in una richiesta con l'algoritmo EC_SIGN_P256_SHA256.
Creazione di una firma
gcloud
Per utilizzare Cloud KMS nella 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 delle chiavi automatizzate in cui si trova la chiave. Sostituisci location con la località 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# di 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 di 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 e Google Cloud einstallare 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 ulteriori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il
CryptoKeyVersions.asymmetricSign
metodo 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 nella riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.
Scarica 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 delle chiavi automatizzate in cui si trova la chiave. Sostituisci location con la località Cloud KMS delle chiavi automatizzate. 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.
Verifica la firma
I comandi OpenSSL per convalidare la firma dipendono dal tipo di firma creato. Ad esempio, per convalidare una firma a curva ellittica SHA-256 utilizzando OpenSSL, devi specificare -sha256. Per convalidare una firma a 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 contenente 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 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# di 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 di 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 e Google Cloud einstallare 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 ulteriori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il 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 nella riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.
Scarica 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 delle chiavi automatizzate in cui si trova la chiave. Sostituisci location con la località Cloud KMS delle chiavi automatizzate. 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.
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 contenente 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 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# di 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 di 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 e Google Cloud einstallare 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 ulteriori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il
CryptoKeyVersions.getPublicKey
metodo per recuperare la chiave pubblica, quindi utilizza i comandi mostrati per l'
esempio della riga di comando per convalidare la firma.