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, utilizza
openssl
, devi passare queste informazioni ai comandi.Concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToSign
sull'asimmetrico per l'utente o il servizio che eseguirà la firma. Puoi scoprire di più in Cloud Key Management Service in Autorizzazioni e ruoli.Se intendi convalidare una firma, concedi Autorizzazione
cloudkms.cryptoKeyVersions.viewPublicKey
per la chiave asimmetrica per l'utente o il 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 entrambi in
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.
- La spaziatura interna PKCS #1 viene applicata 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) all'interno 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. Per informazioni sulle autorizzazioni in Cloud Key Management Service, consulta Autorizzazioni e ruoli.
Supporto del modello ECDSA per altri algoritmi di 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, innanzitutto 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 di Cloud KMS e il keyring. Sostituisci digest-algorithm con l'algoritmo da utilizzare. Omit digest-algorithm per inviare input-file a Cloud KMS per firmare. Sostituisci input-file e signature-file con i percorsi locali da firmare per il file e del file della firma.
Per informazioni su tutti i flag e sui possibili valori, esegui il comando con
--help
flag.
C#
Per eseguire questo codice, per prima cosa configura un ambiente di sviluppo C# e installare l'SDK Cloud KMS C#.
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, prima configura un ambiente di sviluppo Ruby e installa 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, vedi Accesso all'API Cloud KMS.
Utilizza la
CryptoKeyVersions.asymmetricSign
per eseguire la firma. La risposta di questo metodo contiene la firma con codifica base64.
Convalida della firma di una curva ellittica
gcloud
Per utilizzare Cloud KMS nella riga di comando, devi prima 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 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 con curva ellittica SHA-256 utilizzando OpenSSL, devi specificare -sha256
. Per convalidare un modello SHA-384
firma della curva ellittica, 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 di verifica (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 sui possibili valori, esegui il comando con
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, scopri innanzitutto come utilizzare PHP su Google Cloud e installa l'SDK PHP di Cloud KMS.
Python
Per eseguire questo codice, configura prima un ambiente di sviluppo Python e installare l'SDK per Python di Cloud KMS.
Ruby
Per eseguire questo codice, prima configura un ambiente di sviluppo Ruby e installa l'SDK Ruby di Cloud KMS.
API
In questi esempi viene utilizzato curl come client HTTP per dimostrare l'uso dell'API. Per ulteriori informazioni sul controllo dell'accesso, vedi Accesso all'API Cloud KMS.
Utilizza la CryptoKeyVersions.getPublicKey per recuperare la chiave pubblica, quindi utilizza i comandi mostrati della riga di comando di esempio per convalidare la firma.
Convalida di una firma RSA
gcloud
Per utilizzare Cloud KMS sulla riga di comando, innanzitutto 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 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 sui possibili valori, esegui il comando con
--help
flag.
Verifica la firma
I comandi OpenSSL per convalidare la firma dipendono dal tipo di firma
è stato creato. Ad esempio, per convalidare una firma RSA SHA-256 con spaziatura interna PSS,
deve specificare -sha256
e -sigopt rsa_padding_mode:pss
. Per convalidare un modello SHA-512
Firma RSA 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 che contiene la chiave pubblica (ad es.
"./my-key.pub"
).signature-file. Percorso di un file contenente la firma di verifica (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, devi innanzitutto configurare un ambiente di sviluppo C# e installare l'SDK C# Cloud KMS.
Go
Per eseguire questo codice, devi prima configurare un ambiente di sviluppo Go e installa l'SDK Cloud KMS Go.
Java
Per eseguire questo codice, per prima cosa configura un ambiente di sviluppo Java e installare l'SDK Java di Cloud KMS.
Node.js
Per eseguire questo codice, devi prima 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, configura prima un ambiente di sviluppo Python e installare l'SDK per Python di Cloud KMS.
Ruby
Per eseguire questo codice, prima configura un ambiente di sviluppo Ruby e installa l'SDK Ruby di Cloud KMS.
API
In questi esempi viene utilizzato curl come client HTTP per dimostrare l'uso dell'API. Per ulteriori informazioni sul controllo dell'accesso, vedi Accesso 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.