Crittografia simmetrica non elaborata

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

  • Crittografa i contenuti di testo o di testo non cifrato binario localmente o utilizzando Cloud KMS.
  • Decripta i testi cifrati localmente o utilizzando Cloud KMS.

Se invece vuoi eseguire un'operazione con una chiave simmetrica normale (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 dati localmente on-premise o utilizzando Cloud KMS e di spostare i dati criptati tra diverse librerie e fornitori di servizi senza doverli prima decriptare. Questa funzionalità dipende dalla possibilità di accedere alla chiave al punto di operazione. Se vuoi utilizzare i testi cifrati 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 cifrati standard che possono essere decriptati da qualsiasi servizio di decrittografia standard. Supportiamo i seguenti algoritmi di crittografia simmetrica non elaborati:

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

Tieni presente quanto segue in merito a questi algoritmi di crittografia non elaborati:

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

  • AES-CBC richiede che la dimensione del testo non cifrato sia un multiplo della dimensione del blocco (16 byte). Se il testo non è un multiplo della dimensione del blocco, completalo prima di criptarlo. In caso contrario, l'operazione non andrà a buon fine e verrà visualizzato un errore che indica il problema.

  • AES-CBC e AES-CTR non sono schemi di crittografia autenticata, il che significa che possono comportare un rischio maggiore di uso improprio accidentale. Sono offerti per supportare le esigenze legacy e di interoperabilità e devono essere utilizzati con cautela. Per evitare un uso improprio casuale, l'utilizzo 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 per la chiave:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Ruoli aggiuntivi per algoritmi di crittografia non autenticati non elaborati

  • Per utilizzare le chiavi AES-CBC: Cloud KMS Expert Raw AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc)
  • Per utilizzare le chiavi AES-CTR: Cloud KMS Expert Raw AES-CTR Key Manager (roles/cloudkms.expertRawAesCtr)

Prima di iniziare

  • Concedi le autorizzazioni di crittografia simmetrica non elaborata indicate ai principali previsti.
  • Crea un keyring come descritto nella sezione relativa alla creazione di keyring.
  • Crea e importa una chiave di crittografia simmetrica non elaborata come descritto nella sezione sulla creazione di chiavi e sull'importazione di chiavi.

Cripta

gcloud

Per utilizzare Cloud KMS sulla riga di comando, esegui l'installazione o 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 posizione di Cloud KMS della raccolta di chiavi.

  • KEY_RING: il nome del mazzo di chiavi 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 normale.

  • OUTPUT_FILE_PATH: il percorso del file locale per il salvataggio dell'output criptato.

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

API

Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere 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 i dati in testo normale:

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 la chiave automatizzata.
  • LOCATION: la posizione di Cloud KMS della raccolta di chiavi.
  • KEY_RING: il nome del mazzo di chiavi 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 in testo normale codificati in base64 che vuoi criptare.
  • BASE64_ENCODED_AAD: i dati aggiuntivi autenticati con codifica base64 utilizzati per garantire l'integrità e l'autenticità. Questo campo si applica solo agli algoritmi AES-GCM.

L'output è un oggetto JSON contenente il testo criptato e il vettore di inizializzazione associato sotto forma di stringhe con codifica base64.

Decripta

gcloud

Per utilizzare Cloud KMS sulla riga di comando, esegui l'installazione o 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 posizione di Cloud KMS della raccolta di chiavi.

  • KEY_RING: il nome del mazzo di chiavi 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 cifrato che vuoi decriptare.

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

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

API

Questi esempi utilizzano curl come client HTTP per dimostrare l'utilizzo dell'API. Per ulteriori informazioni sul controllo dell'accesso, consulta Accedere 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 la chiave automatizzata.
  • LOCATION: la posizione di Cloud KMS della raccolta di chiavi.
  • KEY_RING: il nome del mazzo di chiavi 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 cifrato codificato in base64 che vuoi decriptare.
  • BASE64_ENCODED_AAD: i dati autenticati aggiuntivi con codifica Base64 utilizzati durante la crittografia dei dati. Questo campo si applica solo agli algoritmi AES-GCM.
  • BASE64_ENCODED_IV: il vettore di inizializzazione codificato in base64 utilizzato durante la crittografia dei dati.

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

Passaggi successivi