Questo documento fornisce informazioni sulla creazione e sull'utilizzo di una chiave per la crittografia asimmetrica utilizzando una chiave RSA. Se vuoi utilizzare chiavi asimmetriche per creare e convalidare le firme, consulta Creazione e convalida di firme digitali. Se vuoi utilizzare chiavi simmetriche per la crittografia e la decrittografia, consulta Cripta e decripta i dati.
La crittografia asimmetrica utilizza la parte della chiave pubblica della chiave asimmetrica e la decrittografia utilizza la parte della chiave privata della chiave. Cloud Key Management Service fornisce funzionalità per recuperare la chiave pubblica e per decriptare il testo cifrato che è stato criptato con la chiave pubblica. Cloud KMS non consente l'accesso diretto alla chiave privata.
Prima di iniziare
Questo documento fornisce esempi che vengono eseguiti dalla riga di comando. Per semplificare l'utilizzo degli esempi, utilizza Cloud Shell. L'esempio di crittografia utilizza OpenSSL, preinstallato su Cloud Shell.
Crea una chiave asimmetrica con scopo della chiave
ASYMMETRIC_DECRYPT. Per vedere quali algoritmi sono supportati per lo scopo della chiaveASYMMETRIC_DECRYPT, consulta Algoritmi di crittografia asimmetrica. Non puoi seguire questa procedura con una chiave con scopoASYMMETRIC_SIGN.Se utilizzi la riga di comando, installa OpenSSL se non lo hai già. Se utilizzi Cloud Shell, OpenSSL è già installato.
- Utenti macOS: la versione di OpenSSL installata su macOS non supporta i flag utilizzati per decriptare i dati in questo argomento. Per seguire questi passaggi su macOS, installa OpenSSL da Homebrew.
Controlla l'accesso alla chiave
Per un utente o un servizio che recupererà la chiave pubblica, concedi l'autorizzazione
cloudkms.cryptoKeyVersions.viewPublicKeysulla chiave asimmetrica. La chiave pubblica è necessaria per criptare i dati.Per un utente o un servizio che decripterà i dati criptati con la chiave pubblica, concedi l'autorizzazione
cloudkms.cryptoKeyVersions.useToDecryptsulla chiave asimmetrica.
Per saperne di più su autorizzazioni e ruoli in Cloud KMS, consulta Autorizzazioni e ruoli.
Cripta i dati
Per criptare i dati utilizzando una chiave di crittografia asimmetrica, recupera la chiave pubblica e utilizzala per criptare i dati.
gcloud
Questo esempio richiede l'installazione di OpenSSL sul tuo sistema locale.
Scarica chiave pubblica
Scarica la chiave pubblica:
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--output-file PUBLIC_KEY_PATH
Sostituisci quanto segue:
KEY_VERSION: la versione della chiave della coppia di chiavi asimmetriche per cui vuoi scaricare la chiave pubblica.KEY_NAME: il nome della chiave.KEY_RING: il keyring che contiene la chiave.LOCATION: la posizione delle chiavi automatizzate.PUBLIC_KEY_PATH: il percorso in cui vuoi salvare la chiave pubblica.
Cripta i dati
Cripta i dati utilizzando la chiave pubblica che hai appena scaricato e salva l'output in un file:
openssl pkeyutl -in INPUT_PATH \
-encrypt \
-pubin \
-inkey PUBLIC_KEY_PATH \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:HASH_SIZE \
-pkeyopt rsa_mgf1_md:HASH_SIZE \
> OUTPUT_PATH
Sostituisci quanto segue:
INPUT_PATH: il percorso dei dati in testo non crittografato che vuoi crittografare.PUBLIC_KEY_PATH: il percorso della chiave pubblica.HASH_SIZE: la dimensione dell'hash, ad esempio256per SHA256.OUTPUT_PATH: il percorso in cui vuoi salvare i dati criptati.
C#
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo C# e installa l'SDK Cloud KMS C#.
Go
Per utilizzare Cloud KMS dalla riga di comando, innanzitutto installa o esegui l'upgrade all'ultima versione di Google Cloud CLI.
Java
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo Java e installa 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, innanzitutto configura un ambiente di sviluppo Python e installa l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo Ruby e installa l'SDK Cloud KMS per Ruby.
Decripta i dati
Utilizza Cloud KMS per eseguire la decriptazione.
gcloud
Per utilizzare Cloud KMS dalla riga di comando, innanzitutto installa o esegui l'upgrade all'ultima versione di Google Cloud CLI.
gcloud kms asymmetric-decrypt \
--version KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file INPUT_PATH \
--plaintext-file OUTPUT_PATH
Sostituisci quanto segue:
KEY_VERSION: la versione della coppia di chiavi asimmetriche utilizzata per criptare i dati. Puoi omettere il flag--versionper rilevare automaticamente la versione.KEY_NAME: il nome della chiave utilizzata per criptare i dati.KEY_RING: il nome delle chiavi automatizzate che contengono la chiave.LOCATION: la posizione delle chiavi automatizzate.INPUT_PATH: il percorso del file che contiene il testo cifrato.OUTPUT_PATH: il percorso del file che conterrà il testo non cifrato.
Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag --help.
Per visualizzare i contenuti del file decriptato, aprilo in un editor di testo o utilizza il comando cat per visualizzarlo in un terminale.
C#
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo C# e installa l'SDK Cloud KMS C#.
Go
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo Go e installa l'SDK Cloud KMS Go.
Java
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo Java e installa 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, innanzitutto configura un ambiente di sviluppo Python e installa l'SDK Python di Cloud KMS.
Ruby
Per eseguire questo codice, innanzitutto configura un ambiente di sviluppo Ruby e installa l'SDK Cloud KMS per Ruby.
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.asymmetricDecrypt.
Risoluzione dei problemi
incorrect key purpose: ASYMMETRIC_SIGN
Puoi decriptare i dati solo con una chiave con scopo della chiave ASYMMETRIC_DECRYPT.
invalid parameter durante la decriptazione su macOS
La versione di OpenSSL installata su macOS non supporta i flag utilizzati per decriptare i dati in questo argomento. Per seguire questi passaggi su macOS, installa OpenSSL da Homebrew.
data too large for key size
La dimensione massima del payload per la decrittografia RSA dipende dalla dimensione della chiave e dall'algoritmo di spaziatura interna. Tutti i formati di crittografia RSA utilizzati da Cloud KMS utilizzano OAEP, standardizzato in RFC 2437. Come riferimento rapido, i seguenti algoritmi supportano le seguenti dimensioni massime del payload.
| Algoritmo | Parametri | Lunghezza massima del messaggio (byte) |
|---|---|---|
| RSA_DECRYPT_OAEP_2048_SHA256 | k = 256; hLen = 32; | 190 |
| RSA_DECRYPT_OAEP_3072_SHA256 | k = 384; hLen = 32; | 318 |
| RSA_DECRYPT_OAEP_4096_SHA256 | k = 512; hLen = 32; | 446 |
| RSA_DECRYPT_OAEP_4096_SHA512 | k = 512; hLen = 64; | 382 |
La crittografia asimmetrica non è consigliata per i messaggi di lunghezza variabile che potrebbero superare questi limiti. Ti consigliamo di utilizzare la crittografia ibrida. Tink è una libreria crittografica che utilizza questo approccio.