Questo documento descrive l'utilizzo dei meccanismi di incapsulamento delle chiavi (KEM) con le chiavi Cloud KMS per stabilire secret condivisi.
L'incapsulamento utilizza la chiave pubblica della coppia di chiavi KEM, mentre il decapsulamento utilizza la chiave privata della coppia di chiavi. Cloud KMS ti consente di recuperare la chiave pubblica, che puoi poi utilizzare con le librerie standard per incapsulare il segreto condiviso. Per decapsulare il segreto condiviso, utilizza i metodi di decapsulamento di Cloud KMS. Non puoi utilizzare il materiale della chiave privata al di fuori di Cloud KMS.
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, che è preinstallato su Cloud Shell. In caso contrario, installa OpenSSL sulla tua macchina.
- Crea una chiave KEM con scopo della chiave
KEY_ENCAPSULATION
. Per vedere quali algoritmi sono supportati per lo scopo della chiaveKEY_ENCAPSULATION
, consulta Algoritmi di incapsulamento delle chiavi.
Concedi le autorizzazioni per la chiave
- Assegna il ruolo
roles/cloudkms.publicKeyViewer
alla chiave a ogni utente o entità che deve recuperare la chiave pubblica per incapsulare il secret. - Concedi il ruolo 'roles/cloudkms.decapsulator' sulla chiave a ogni utente o principal che deve decapsulare i secret con questa chiave.
Per saperne di più su autorizzazioni e ruoli in Cloud KMS, consulta Autorizzazioni e ruoli.
Incapsulamento
Per eseguire l'incapsulamento utilizzando una chiave KEM, recupera la chiave pubblica e utilizzala per l'incapsulamento.
gcloud
Questo esempio richiede l'installazione di OpenSSL sul sistema locale.
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_FILE \ --public-key-format PUBLIC_KEY_FORMAT
Sostituisci quanto segue:
KEY_VERSION
: il numero di versione della chiave che vuoi utilizzare per l'incapsulamento, ad esempio2
.KEY_NAME
: il nome della chiave che vuoi utilizzare per l'incapsulamento.KEY_RING
: il nome delle chiavi automatizzate che contengono la chiave.LOCATION
: la posizione di Cloud KMS delle chiavi automatizzate.PUBLIC_KEY_FILE
: il percorso del file locale in cui verrà salvata la chiave pubblica.PUBLIC_KEY_FORMAT
: il formato di destinazione per la chiave pubblica, ad esempionist-pqc
. Il formato predefinito èpem
.
Incapsula
Per creare un segreto condiviso e un testo cifrato, puoi utilizzare il seguente comando:
openssl pkeyutl \ -encap \ -pubin \ -inkey PEM_PUBLIC_KEY_FILE \ -out CIPHERTEXT_FILE \ -secret SHARED_SECRET_FILE
Sostituisci quanto segue:
PEM_PUBLIC_KEY_FILE
: il percorso del file della chiave pubblica scaricato in formato PEM.CIPHERTEXT_FILE
: il percorso in cui vuoi salvare il testo cifrato risultante.SHARED_SECRET_FILE
: il percorso in cui vuoi salvare il segreto condiviso risultante.
{ echo -n "MIIEsjALBglghkgBZQMEBAIDggShAA==" | base64 -d ; cat PUBLIC_KEY_FILE; } | \ openssl pkey -inform DER -pubin -pubout -out PEM_PUBLIC_KEY_FILE
Sostituisci quanto segue:
PUBLIC_KEY_FILE
: Il percorso del file della chiave pubblica scaricata in formato non elaborato.PEM_PUBLIC_KEY_FILE
: il percorso e il nome del file in cui salvare la chiave pubblica in formato PEM.
Decapsulamento
Utilizza Cloud KMS per decapsulare un testo cifrato.
gcloud
Per utilizzare Cloud KMS dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione di Google Cloud CLI.
gcloud kms decapsulate \ --version KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file CIPHERTEXT_FILE \ --shared-secret-file SHARED_SECRET_FILE
Sostituisci quanto segue:
KEY_VERSION
: la versione della chiave da utilizzare per la decapsulamento, ad esempio3
.KEY_NAME
: il nome della chiave da utilizzare per la decapsulamento.KEY_RING
: il nome delle chiavi automatizzate in cui si trova la chiave.LOCATION
: la posizione di Cloud KMS per le chiavi automatizzate.CIPHERTEXT_FILE
: il percorso del file locale per il testo cifrato di input.SHARED_SECRET_FILE
: il percorso del file locale per salvare il segreto condiviso di output.
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.decapsulate
.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:decapsulate" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"ciphertext": "CIPHERTEXT"}'
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene il portachiavi.LOCATION
: la posizione di Cloud KMS delle chiavi automatizzate.KEY_RING
: il nome delle chiavi automatizzate che contengono la chiave.KEY_NAME
: il nome della chiave da utilizzare per la crittografia.KEY_VERSION
: l'ID della versione della chiave da utilizzare per la crittografiaCIPHERTEXT
: il testo cifrato codificato in base64 che vuoi decapsulare.