Crittografia simmetrica non elaborata

Questo argomento illustra come eseguire le seguenti operazioni non elaborate sulle chiavi simmetriche:

  • Cripta testo o contenuti binari in testo non crittografato in locale o utilizzando Cloud KMS.
  • Decripta i testi criptati in locale o utilizzando Cloud KMS.

Se invece vuoi eseguire un'operazione con chiave simmetrica regolare (non non elaborata), consulta Crittografia e decriptazione dei dati con una chiave simmetrica.

La crittografia simmetrica non elaborata ti consente di criptare e decriptare i tuoi dati localmente on-premise o tramite Cloud KMS e di spostare i dati criptati tra librerie e provider di servizi diversi senza doverli prima decriptare. Questa funzionalità dipende dalla capacità di accedere alla chiave nel punto operativo. Se vuoi utilizzare i testi criptati al di fuori di Google Cloud, devi utilizzare una chiave importata perché le chiavi generate in Cloud KMS non possono essere esportate. Questi algoritmi di crittografia generano testi criptati standard che possono essere decriptati da qualsiasi servizio di decriptazione standard. Supportiamo i seguenti algoritmi di crittografia simmetrica non elaborata:

  • AES-128-GCM
  • AES-256-GCM
  • AES-128-CBC
  • AES-256-CBC
  • AES-128-CTR
  • AES-256-CTR

Tieni presente i seguenti punti in merito a questi algoritmi di crittografia non elaborati:

  • AES-GCM fornisce l'autenticazione basata sui dati autenticati aggiuntivi (AAD) e genera un tag di autenticazione ed è l'algoritmo di crittografia consigliato da utilizzare. I dati criptati mediante algoritmi AES-GCM non possono essere decriptati senza l'AAD fornito.

  • AES-CBC richiede che la dimensione del testo non crittografato sia un multiplo della dimensione del blocco (16 byte). Se il testo non crittografato non è un multiplo delle dimensioni del blocco, inserisci il testo non crittografato prima di criptarlo; in caso contrario, l'operazione non andrà a buon fine e viene visualizzato un errore che indica il problema.

  • AES-CBC e AES-CTR non sono schemi di crittografia autenticati, il che significa che possono comportare un rischio maggiore di uso improprio accidentale. Sono offerte per supportare esigenze legacy e di interoperabilità e devono essere utilizzate con cautela. Per impedire l'uso improprio, l'uso di questi algoritmi di crittografia richiede le seguenti autorizzazioni IAM:

    • cloudkms.cryptoKeyVersions.manageRawAesCbcKeys per AES-CBC.
    • cloudkms.cryptoKeyVersions.manageRawAesCtrKeys per AES-CTR.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare la crittografia non elaborata, chiedi all'amministratore di concederti i seguenti ruoli IAM sulla chiave:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Ruoli aggiuntivi per algoritmi di crittografia non elaborati non autenticati

  • Per utilizzare chiavi AES-CBC: Gestore di chiavi AES-CBC non elaborato avanzato di Cloud KMS (roles/cloudkms.expertRawAesCbc)
  • Per utilizzare chiavi AES-CTR: Gestore delle chiavi AES-CTR non elaborate di Cloud KMS Expert (roles/cloudkms.expertRawAesCtr)

Prima di iniziare

  • Concedi le autorizzazioni per la crittografia simmetrica non elaborata menzionata alle entità previste.
  • Crea un keyring come descritto nella sezione relativa alla creazione dei keyring.
  • Crea e importa una chiave di crittografia simmetrica non elaborata come descritto in Creazione di chiavi e importazione delle chiavi.

Cripta

gcloud

Per utilizzare Cloud KMS nella riga di comando, devi innanzitutto installare o eseguire l'upgrade alla versione più recente di Google Cloud CLI.

gcloud kms raw-encrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --plaintext-file INPUT_FILE_PATH \
    --ciphertext-file OUTPUT_FILE_PATH

Sostituisci quanto segue:

  • LOCATION: la località Cloud KMS del keyring.

  • KEY_RING: il nome del keyring che contiene 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 crittografia.

  • INPUT_FILE_PATH: il percorso del file locale per la lettura dei dati in testo non crittografato.

  • OUTPUT_FILE_PATH: il percorso del file locale per salvare l'output criptato.

Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag --help.

API

In questi esempi viene utilizzato curl come client HTTP per dimostrare l'utilizzo dell'API. Per maggiori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.

Quando utilizzi JSON e l'API REST, i contenuti devono essere codificati in base64 prima di poter essere criptati da Cloud KMS.

Utilizza il metodo rawEncrypt per criptare dati in testo non crittografato:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene il keyring.
  • LOCATION: la località Cloud KMS del keyring.
  • KEY_RING: il nome del keyring che contiene 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 crittografia.
  • BASE64_ENCODED_INPUT: i dati di testo non crittografato con codifica Base64 che vuoi criptare.
  • BASE64_ENCODED_AAD: i dati autenticati aggiuntivi con codifica Base64 utilizzati per fornire garanzie di integrità e autenticità. Questo campo si applica solo agli algoritmi AES-GCM.

L'output è un oggetto JSON contenente il testo crittografato criptato e il vettore di inizializzazione associato come stringhe con codifica Base64.

Decripta

gcloud

Per utilizzare Cloud KMS nella riga di comando, devi innanzitutto installare o eseguire l'upgrade alla versione più recente di Google Cloud CLI.

gcloud kms raw-decrypt \
    --location LOCATION \
    --keyring KEY_RING \
    --key KEY_NAME \
    --version KEY_VERSION \
    --ciphertext-file INPUT_FILE_PATH \
    --plaintext-file OUTPUT_FILE_PATH

Sostituisci quanto segue:

  • LOCATION: la località Cloud KMS del keyring.

  • KEY_RING: il nome del keyring che contiene 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 crittografia.

  • INPUT_FILE_PATH: il percorso del file locale del testo crittografato che vuoi decriptare.

  • OUTPUT_FILE_PATH: il percorso locale del file in cui vuoi salvare il testo non crittografato decriptato.

Per informazioni su tutti i flag e i valori possibili, esegui il comando con il flag --help.

API

In questi esempi viene utilizzato curl come client HTTP per dimostrare l'utilizzo dell'API. Per maggiori informazioni sul controllo dell'accesso, consulta Accesso all'API Cloud KMS.

Quando utilizzi l'API REST, i contenuti devono essere codificati in base64 prima di poter essere decriptati da Cloud KMS.

Per decriptare i dati criptati, utilizza il metodo rawDecrypt:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \
  --request "POST" \
  --header "authorization: Bearer TOKEN" \
  --header "content-type: application/json" \
  --data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene il keyring.
  • LOCATION: la località Cloud KMS del keyring.
  • KEY_RING: il nome del keyring che contiene la chiave.
  • KEY_NAME: il nome della chiave da utilizzare per la decrittografia.
  • KEY_VERSION: l'ID della versione della chiave da utilizzare per la decrittografia.
  • BASE64_ENCODED_DATA: il testo crittografato con codifica Base64 che vuoi decriptare.
  • BASE64_ENCODED_AAD: i dati autenticati aggiuntivi con codifica Base64 utilizzati al momento della crittografia dei dati. Questo campo si applica solo agli algoritmi AES-GCM.
  • BASE64_ENCODED_IV: il vettore di inizializzazione con codifica Base64 utilizzato al momento della crittografia dei dati.

L'output è un oggetto JSON contenente il testo non crittografato decriptato come stringa con codifica Base64.

Passaggi successivi