Questo argomento mostra come eseguire manualmente il wrapping di una chiave prima di importarla in Cloud KMS. Devi seguire le istruzioni in questo argomento solo se non vuoi utilizzare Google Cloud CLI per eseguire automaticamente il wrapping della chiave prima di importarla. Per una panoramica delle differenze, consulta Come funziona l'importazione delle chiavi.
Puoi completare i passaggi descritti in questo argomento in 5-10 minuti, esclusi i passaggi descritti in Prima di iniziare.
Prima di iniziare
Prima di poter eseguire il wrapping di una chiave, devi completare i seguenti prerequisiti.
- Crea una chiave e un portachiavi di destinazione e crea un job di importazione.
- Verifica che la chiave sia disponibile localmente e formattata correttamente per l'importazione in Cloud KMS.
- Applica patch e ricompila OpenSSL
Recupera la chiave di wrapping
Questa sezione mostra come recuperare la chiave di wrapping dal job di importazione che hai creato in Prima di iniziare. È consigliabile utilizzare la Google Cloud console.
Console
Vai alla pagina Gestione chiavi nella Google Cloud console.
Fai clic sul nome del portachiavi contenente il job di importazione.
Fai clic sulla scheda Job di importazione nella parte superiore della pagina.
Fai clic su Altro more_vert, quindi su Scarica chiave di wrapping nel menu popup.
gcloud CLI
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 comando seguente 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
ImportJob.getmetodo.Recupera la chiave pubblica tramite il
publicKeycampo dellaImportJob.getrisposta. Questo valore è di tipoWrappingPublicKey. Il campopemdel tipoWrappingPublicKeyè la chiave pubblica codificata in formato PEM (Privacy Enhanced Mail).
Per ulteriori informazioni sul formato codificato PEM, consulta RFC 7468, in particolare le sezioni Considerazioni generali e Codifica testuale delle informazioni sulla chiave pubblica del soggetto.
Imposta le variabili di ambiente
I comandi OpenSSL richiedono diversi percorsi di file come valori di input. Definisci le variabili di ambiente per i percorsi dei file per semplificare l'esecuzione dei comandi. Assicurati di avere l'accesso in scrittura alle directory che definisci di seguito.
Imposta la variabile
PUB_WRAPPING_KEYsul percorso completo della chiave di wrapping scaricata dal job di importazione. La chiave di wrapping termina con.pem.PUB_WRAPPING_KEY="WRAPPING_KEY_PATH"
Imposta la variabile
TARGET_KEYsul percorso completo della chiave di destinazione (non sottoposta a wrapping).TARGET_KEY=TARGET_KEY_PATH
Sostituisci
TARGET_KEY_PATHcon il percorso del file.binper le chiavi simmetriche o il percorso del file.derper le chiavi asimmetriche.Se esegui il wrapping con RSA-AES, imposta la variabile
TEMP_AES_KEYsul percorso completo della chiave AES temporanea.TEMP_AES_KEY=TEMP_AES_KEY_PATH
Imposta la variabile
WRAPPED_KEYsul percorso completo in cui vuoi salvare la chiave di destinazione sottoposta a wrapping e pronta per l'importazione.WRAPPED_KEY=WRAPPED_KEY_PATH
Verifica che tutte le variabili di ambiente siano impostate correttamente utilizzando i 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: solo con RSA o con RSA-AES.
Esegui il wrapping della chiave
Esegui il wrapping della chiave con RSA
In questo approccio, la chiave di destinazione viene sottoposta a wrapping in un blocco RSA. La dimensione della chiave di destinazione è quindi limitata. Ad esempio, non puoi utilizzare questo metodo per eseguire il wrapping di un'altra chiave RSA. 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 quindi sottoposta a wrapping dalla chiave RSA. Queste due chiavi sottoposte a wrapping vengono concatenate e importate. Poiché la chiave di destinazione viene sottoposta a wrapping utilizzando AES anziché RSA, questo approccio può essere utilizzato per eseguire il wrapping di 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 nella località identificata da
${TEMP_AES_KEY}:openssl rand -out "${TEMP_AES_KEY}" 32Esegui 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-256orsa-oaep-4096-sha1-aes-256, utilizzasha1perrsa_oaep_mdersa_mgf1_md. Utilizzasha256perrsa-oaep-3072-sha256-aes-256ersa-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_V110sul percorso dello scriptopenssl.sh. Se hai seguito esattamente le istruzioni per l'applicazione di patch e la ricompilazione di OpenSSL, puoi utilizzare questo comando senza modificare il valore della variabile.OPENSSL_V110="${HOME}/local/bin/openssl.sh"Esegui il wrapping della chiave di destinazione con la chiave AES temporanea utilizzando l'algoritmo
CKM_AES_KEY_WRAP_PADe aggiungila aWRAPPED_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 A65959A6imposta A65959A6 come valore iniziale alternativo. Questo è richiesto dalla specifica RFC 5649.
Passaggi successivi
- La chiave sottoposta a wrapping salvata in
WRAPPED_KEYè ora pronta per l'importazione. Per importare la chiave, segui le istruzioni riportate in Importare una chiave sottoposta a wrapping manualmente.