Questo argomento mostra come eseguire il wrapping manuale di una chiave prima di importarla in Cloud KMS. Tu segui le istruzioni in questo argomento se non vuoi utilizzare Google Cloud CLI per eseguire il wrapping automatico della chiave prima di importarla. Per un per una panoramica delle differenze, consulta Funzionamento dell'importazione delle chiavi.
Puoi completare i passaggi di questo argomento in 5-10 minuti, escluse le Passaggi Prima di iniziare.
Prima di iniziare
Prima di poter eseguire il wrapping di una chiave, devi completare i seguenti prerequisiti.
- Crea un keyring e una chiave di destinazione e crea un job di importazione.
- Verifica che la chiave sia disponibile localmente e formattata correttamente per l'importazione in Cloud KMS.
- Applicare patch e ricompilare OpenSSL
Recupera la chiave di wrapping
Questa sezione mostra come recuperare la chiave di wrapping dal job di importazione creato nella sezione Prima di iniziare. È consigliabile utilizzare la console Google Cloud.
Console
Vai alla pagina Gestione delle chiavi nella console Google Cloud.
Fai clic sul nome del keyring che contiene il job di importazione.
Fai clic sulla scheda Importa job nella parte superiore della pagina.
Fai clic su Altro more_vert, quindi Scarica chiave di wrapping nel menu popup.
Interfaccia a riga di comando gcloud
Per verificare che il job di importazione sia attivo, esegui il comando gcloud kms import-jobs describe
:
gcloud kms import-jobs describe IMPORT_JOB \ --location LOCATION \ --keyring KEY_RING \ --format="value(state)"
state: ACTIVE
Esegui il seguente comando per salvare la chiave pubblica dal job di importazione in
${HOME}/wrapping-key.pem
gcloud kms import-jobs describe \ --location=LOCATION \ --keyring=KEY_RING \ --format="value(publicKey.pem)" \ IMPORT_JOB > ${HOME}/wrapping-key.pem
API
Chiama il metodo
ImportJob.get
.Recupera la chiave pubblica tramite il campo
publicKey
della RispostaImportJob.get
. Questo valore è di tipoWrappingPublicKey
. Il campopem
del tipoWrappingPublicKey
è il campo pubblico codificata in formato PEM (Privacy Enhanced Mail).
Per ulteriori informazioni sul formato con codifica PEM, vedi RFC 7468, in particolare il Considerazioni generali e Codifica testuale delle informazioni sulla chiave pubblica del soggetto sezioni.
Imposta le variabili di ambiente
I comandi OpenSSL richiedono diversi percorsi file come valori di input. Definisci variabili di ambiente per i percorsi file per semplificare l'esecuzione dei comandi. Assicurati di avere accesso in scrittura alle directory che definisci di seguito.
Imposta la variabile
PUB_WRAPPING_KEY
sul percorso completo della chiave di wrapping che hai scaricato dal job di importazione. La chiave di wrapping termina con.pem
.PUB_WRAPPING_KEY="WRAPPING_KEY_PATH"
Imposta la variabile
TARGET_KEY
sul percorso completo della chiave scomposta (target).TARGET_KEY=TARGET_KEY_PATH
Sostituisci
TARGET_KEY_PATH
con il percorso del file.bin
per chiavi simmetriche o il percorso del file.der
per le chiavi asimmetriche.Se esegui il wrapping con RSA-AES, imposta la variabile
TEMP_AES_KEY
sul percorso completo della chiave AES temporanea.TEMP_AES_KEY=TEMP_AES_KEY_PATH
Imposta la variabile
WRAPPED_KEY
sul percorso completo in cui vuoi salvare la chiave di destinazione con wrapping pronta per l'importazione.WRAPPED_KEY=WRAPPED_KEY_PATH
Verifica che tutte le variabili di ambiente siano impostate correttamente utilizzando il metodo seguenti comandi:
echo "PUB_WRAPPING_KEY: " ${PUB_WRAPPING_KEY}; \ echo "TARGET_KEY: " ${TARGET_KEY}; \ echo "TEMP_AES_KEY: " ${TEMP_AES_KEY}; \ echo "WRAPPED_KEY: " ${WRAPPED_KEY}
Quando le variabili sono impostate correttamente, puoi eseguire il wrapping della chiave. Esistono due approcci come descritto di seguito: con solo RSA o con RSA-AES.
Esegui il wrapping della chiave
Esegui il wrapping della chiave con RSA
In questo approccio, la chiave di destinazione è sottoposta a wrapping in un blocco RSA. Le dimensioni della chiave di destinazione
è di conseguenza limitato. Ad esempio, non puoi utilizzare questo metodo per aggregare un altro RSA
chiave. I metodi di importazione supportati sono rsa-oaep-3072-sha256
e
rsa-oaep-4096-sha256
.
Esegui il wrapping della chiave di destinazione con la chiave pubblica di wrapping utilizzando l'algoritmo
CKM_RSA_PKCS_OAEP
:openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TARGET_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
Esegui il wrapping della chiave con RSA-AES
In questo approccio, la chiave di destinazione viene sottoposta a wrapping con una chiave AES temporanea. La
chiave AES temporanea viene poi sottoposta a wrapping dalla chiave RSA. Queste due chiavi con wrapping
concatenate e importate. Poiché la chiave di destinazione viene sottoposta a wrapping utilizzando AES anziché RSA, questo approccio può essere utilizzato per sottoporre a wrapping chiavi di grandi dimensioni. I metodi di importazione supportati sono rsa-oaep-3072-sha1-aes-256
, rsa-oaep-4096-sha1-aes-256
,
rsa-oaep-3072-sha256-aes-256
e rsa-oaep-4096-sha256-aes-256
.
Genera una chiave AES casuale temporanea di 32 byte e salvala in la località identificata da
${TEMP_AES_KEY}
:openssl rand -out "${TEMP_AES_KEY}" 32
Esegui il wrapping della chiave AES temporanea con la chiave pubblica di wrapping utilizzando l'algoritmo
CKM_RSA_PKCS_OAEP
. Se il metodo di importazione èrsa-oaep-3072-sha1-aes-256
orsa-oaep-4096-sha1-aes-256
, usasha1
perrsa_oaep_md
ersa_mgf1_md
. Utilizzasha256
perrsa-oaep-3072-sha256-aes-256
ersa-oaep-4096-sha256-aes-256
.openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TEMP_AES_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:{sha1|sha256} \ -pkeyopt rsa_mgf1_md:{sha1|sha256}
Imposta la variabile
OpenSSL_V110
sul percorso dello scriptopenssl.sh
. Se hai seguito le istruzioni per l'applicazione di patch e ricompilazione di OpenSSL, puoi usare questo comando senza modificare il valore della variabile.OPENSSL_V110="${HOME}/local/bin/openssl.sh"
Aggrega la chiave di destinazione con la chiave AES temporanea utilizzando il metodo
CKM_AES_KEY_WRAP_PAD
e aggiungilo all'algoritmoWRAPPED_KEY
."${OPENSSL_V110}" enc \ -id-aes256-wrap-pad \ -iv A65959A6 \ -K $( hexdump -v -e '/1 "%02x"' < "${TEMP_AES_KEY}" ) \ -in "${TARGET_KEY}" >> "${WRAPPED_KEY}"
Il flag
-iv A65959A6
imposta A65959A6 come valore iniziale alternativo. Questo è richiesto dal modulo RFC 5649 e la specifica del prodotto.
Passaggi successivi
- La chiave con wrapping salvata in
WRAPPED_KEY
è pronta per essere importata. Per importare la chiave, segui le istruzioni riportate in Importare una con wrapping manuale.