Crittografia simmetrica non elaborata

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

  • Cripta contenuti di testo o binari in formato non criptato localmente o utilizzando Cloud KMS.
  • Decripta i testi criptati localmente o utilizzando Cloud KMS.

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

La crittografia simmetrica non elaborata consente di criptare e decriptare i dati localmente on-premise o utilizzando Cloud KMS e di spostare i dati criptati tra diverse librerie e diversi fornitori di servizi senza doverli prima decriptare. Questa funzionalità dipende dalla possibilità di accedere alla chiave al momento dell'operazione. 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 cifrati standard che possono essere decriptati da qualsiasi servizio di decrittografia 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 quanto segue in merito a questi algoritmi di crittografia non elaborati:

  • AES-GCM fornisce l'autenticazione in base ai dati autenticati aggiuntivi (AAD) e genera un tag di autenticazione. È l'algoritmo di crittografia consigliato. 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 crittografato sia un multiplo della dimensione del blocco (16 byte). Se il testo non crittografato non è un multiplo della dimensione del blocco, aggiungi il padding prima di crittografarlo; 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. Vengono offerti per supportare le esigenze di interoperabilità e legacy e devono essere utilizzati con cautela. Per evitare un uso improprio occasionale, 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 ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci 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

  • 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 menzionate ai principal 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 in Creazione di chiavi e Importazione di chiavi.

Cripta

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 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 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 crittografia.

  • INPUT_FILE_PATH: il percorso del file locale per la lettura dei dati non criptati.

  • 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

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.

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 non criptato:

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 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 crittografia.
  • BASE64_ENCODED_INPUT: i dati non criptati codificati in base64 che vuoi criptare.
  • BASE64_ENCODED_AAD: i dati autenticati aggiuntivi codificati in 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 dalla riga di comando, devi prima installare o eseguire l'upgrade all'ultima versione 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 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 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 crittografato decriptato.

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

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.

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 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 decrittografia.
  • KEY_VERSION: l'ID della versione della chiave da utilizzare per la decriptazione.
  • BASE64_ENCODED_DATA: il testo cifrato codificato in base64 che vuoi decriptare.
  • BASE64_ENCODED_AAD: i dati autenticati aggiuntivi codificati in 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 per criptare i dati.

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

Passaggi successivi