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 firme digitali, devi utilizzare una chiave con lo scopo principale di
ASYMMETRIC_SIGN
. Quando crei la chiave, utilizzaASYMMETRIC_SIGN
.Per convalidare una firma, devi conoscere l'algoritmo completo che è stato utilizzato durante la creazione della chiave. Per le istruzioni della riga di comando che seguono che utilizzano il comando
openssl
, devi passare queste informazioni ai comandi.Concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToSign
sulla chiave asimmetrica all'utente o al servizio che eseguirà la firma. Per saperne di più sulle autorizzazioni in Cloud Key Management Service, consulta Autorizzazioni e ruoli.Se vuoi 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 utilizzerai la riga di comando, installa OpenSSL, se non lo hai già. Se utilizzi Cloud Shell, OpenSSL è già installato.
Confronto tra dati e sintesi
L'input fornito per le richieste AsymmetricSign può essere trasmesso tramite il campo data
o digest
. Questi campi non possono essere specificati
entrambi contemporaneamente. Alcuni algoritmi richiedono il campo dei dati, ad esempio 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 n. 1 che omette la codifica in un DigestInfo. Nella variante:
- Viene calcolato un digest sul messaggio che verrà firmato.
- La spaziatura interna PKCS #1 viene applicata direttamente al digest.
- Viene calcolata una firma del digest riempito utilizzando la chiave privata RSA.
Per utilizzare questi algoritmi:
- Invece di un digest, è necessario fornire i dati non elaborati nel 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. Per saperne di più sulle autorizzazioni in Cloud Key Management Service, consulta Autorizzazioni e ruoli.
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'hash viene eseguito prima della creazione della 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 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 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 keyring in cui si trova la chiave. Sostituisci location con la località di 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, prima configura un ambiente di sviluppo C# e installa l'SDK C# di Cloud KMS.
Go
Per eseguire questo codice, prima configura un ambiente di sviluppo Go e installa l'SDK Cloud KMS Go.
Java
Per eseguire questo codice, prima configura un ambiente di sviluppo Java e installa l'SDK Java di Cloud KMS.
Node.js
Per eseguire questo codice, prima configura un ambiente di sviluppo Node.js e installa l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installare l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, prima configura un ambiente di sviluppo Python e installa l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi prima configurare un ambiente di sviluppo Ruby e poi installare l'SDK Ruby di Cloud KMS.
API
In questi esempi viene utilizzato curl come client HTTP per dimostrare l'utilizzo dell'API. Per maggiori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.
Utilizza il metodo
CryptoKeyVersions.asymmetricSign
per eseguire la firma. La risposta da questo metodo contiene la firma
con codifica Base64.
Convalida di una firma ellittica
gcloud
Per utilizzare Cloud KMS nella riga di comando, devi prima installare o eseguire l'upgrade alla versione più recente di Google Cloud CLI.
Recupera 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 keyring in cui si trova la chiave. Sostituisci location con la località di Cloud KMS per il keyring. Sostituisci output-file con il percorso del file per salvare la chiave pubblica nel 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 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 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 possibili valori, esegui il comando con il sottocomando help
.
C#
Per eseguire questo codice, prima configura un ambiente di sviluppo C# e installa l'SDK C# di Cloud KMS.
Go
Per eseguire questo codice, prima configura un ambiente di sviluppo Go e installa l'SDK Cloud KMS Go.
Java
Per eseguire questo codice, prima configura un ambiente di sviluppo Java e installa l'SDK Java di Cloud KMS.
Node.js
Per eseguire questo codice, prima configura un ambiente di sviluppo Node.js e installa l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installare l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, prima configura un ambiente di sviluppo Python e installa l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi prima configurare un ambiente di sviluppo Ruby e poi installare l'SDK Ruby di Cloud KMS.
API
In questi esempi viene utilizzato curl come client HTTP per dimostrare l'utilizzo dell'API. Per maggiori informazioni 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 nella riga di comando, devi prima installare o eseguire l'upgrade alla versione più recente di Google Cloud CLI.
Recupera 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 keyring in cui si trova la chiave. Sostituisci location con la località di Cloud KMS per il keyring. Sostituisci output-file con il percorso per salvare la chiave pubblica nel 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 spaziatura interna PSS, devi specificare -sha256
e -sigopt rsa_padding_mode:pss
. Per convalidare una firma RSA SHA-512 con spaziatura interna 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 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 possibili valori, esegui il comando con il sottocomando help
.
C#
Per eseguire questo codice, prima configura un ambiente di sviluppo C# e installa l'SDK C# di Cloud KMS.
Go
Per eseguire questo codice, prima configura un ambiente di sviluppo Go e installa l'SDK Cloud KMS Go.
Java
Per eseguire questo codice, prima configura un ambiente di sviluppo Java e installa l'SDK Java di Cloud KMS.
Node.js
Per eseguire questo codice, prima configura un ambiente di sviluppo Node.js e installa l'SDK Node.js di Cloud KMS.
PHP
Per eseguire questo codice, scopri innanzitutto come utilizzare PHP su Google Cloud e installare l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, prima configura un ambiente di sviluppo Python e installa l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, devi prima configurare un ambiente di sviluppo Ruby e poi installare l'SDK Ruby di Cloud KMS.
API
In questi esempi viene utilizzato curl come client HTTP per dimostrare l'utilizzo dell'API. Per maggiori informazioni 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 di riga di comando per convalidare la firma.