Crittografia envelope

Introduzione

L'archiviazione e la crittografia dei dati su scala di Google richiede l'utilizzo di un Key Management Service di crittografia centrale con più livelli di chiavi per i dati criptati. Un esempio di livello multiplo di chiavi è la crittografia envelope, ovvero il processo di crittografia di una chiave con un'altra chiave.

Puoi criptare i dati sia a livello di applicazione, responsabile della visualizzazione dei dati agli utenti, sia a livello di archiviazione, che fornisce l'archiviazione fisica dei dati.

Per impostazione predefinita, a livello di archiviazione, Google Cloud cripta i contenuti archiviati inattivi dei clienti utilizzando la crittografia envelope, con il Key Management Service interno di Google come archivio chiavi centrale. Se archivi e cripti i dati personalmente, puoi utilizzare Cloud Key Management Service come archivio chiavi centrale a livello dell'applicazione, su cui si concentra questo argomento.

Cloud KMS archivia le chiavi in una gerarchia di chiavi progettata per facilitare l'accesso, con accesso alle risorse nella gerarchia delle chiavi regolato da Identity and Access Management. Di seguito sono riportati i livelli principali di una gerarchia di chiavi Cloud KMS:

Risorse

Scopri di più sulla gerarchia delle chiavi nella pagina dedicata alla gerarchia degli oggetti.

Chiavi di crittografia dei dati

La chiave utilizzata per criptare i dati stessi è chiamata chiave di crittografia dei dati (DEK, Data Encryption Key).

Di seguito sono riportate le best practice per la gestione delle DEK:

  • Genera le DEK localmente.
  • Se vengono archiviate, assicurati sempre che le DEK siano criptate at-rest.
  • Per un facile accesso, memorizza la DEK vicino ai dati che cripta.
  • Genera una nuova DEK ogni volta che scrivi i dati. Ciò significa che non devi ruotare le DEK.
  • Non utilizzare la stessa DEK per criptare i dati di due utenti diversi.
  • Utilizza un algoritmo avanzato, come l'Advanced Encryption Standard (AES) a 256 bit in modalità Galois Counter (GCM).

Chiavi di crittografia della chiave

La DEK è criptata (nota anche come wrapping) da una chiave di crittografia della chiave (KEK). Il processo di crittografia di una chiave con un'altra chiave è noto come crittografia della busta.

Di seguito sono riportate le best practice per la gestione delle KEK:

  • Archivia le KEK a livello centrale.

  • Impostare la granularità delle DEK che criptano in base al caso d'uso. Ad esempio, considera un carico di lavoro che richiede più DEK per criptare i blocchi di dati del carico di lavoro. Puoi utilizzare una singola KEK per eseguire il wrapping di tutte le DEK responsabili della crittografia del carico di lavoro.

  • Ruota le chiavi regolarmente e anche in seguito a un sospetto incidente. Per ulteriori informazioni, consulta la sezione sulla rotazione delle chiavi.

Bilanciare le DEK e le KEK

Avere un numero inferiore di KEK rispetto alle DEK e utilizzare un servizio di gestione delle chiavi centralizzato rende più gestibile l'archiviazione e la crittografia dei dati su larga scala. Un servizio chiavi centrale è inoltre un punto unico per controllare e limitare più facilmente l'accesso ai dati.

A seconda della situazione e del volume dei dati che cripti, puoi scegliere di utilizzare un modello simile. Una singola KEK può essere utilizzata per proteggere molte DEK. Questo modello consente ai singoli oggetti di dati di avere la propria DEK senza aumentare enormemente il volume delle chiavi archiviate in un Key Management Service centrale.

Cloud Key Management Service è stato progettato per gestire le KEK, pertanto la dimensione massima di input dei dati per le funzioni Encrypt e Decrypt è di 64 KiB. Tuttavia, per i dati che non si avvicinano al limite, puoi utilizzare Cloud KMS per criptare e decriptare direttamente i dati.

Come criptare i dati utilizzando la crittografia envelope

Il processo di crittografia dei dati consiste nel generare una DEK localmente, criptare i dati con la DEK, utilizzare una KEK per eseguire il wrapping della DEK e quindi archiviare i dati criptati e la DEK con wrapping. La KEK non lascia mai Cloud KMS.

Flusso di crittografia

Per criptare i dati utilizzando la crittografia envelope:

  1. Genera una DEK localmente. Puoi farlo con una libreria open source come OpenSSL, che specifica un tipo di crittografia e una password da cui generare la chiave. Se vuoi, puoi anche specificare sale e digest.

  2. Utilizza questa DEK localmente per criptare i tuoi dati.

    Ad esempio, potresti utilizzare OpenSSL come mostrato nell'esempio sulla crittografia del messaggio. Come best practice, utilizza la crittografia Advanced Encryption Standard (AES-256) a 256 bit in Galois Counter Mode (GCM).

  3. Genera una nuova chiave in Cloud KMS o utilizza una chiave esistente che agirà come KEK. Utilizza questa chiave per criptare (wrapping) la DEK.

  4. Archivia i dati criptati e la DEK con wrapping.

Come decriptare i dati utilizzando la crittografia envelope

Il processo di decriptazione dei dati consiste nel recuperare i dati criptati e la DEK con wrapping, identificare la KEK che ha eseguito il wrapping della DEK, utilizzare la KEK per annullare il wrapping della DEK e utilizzare la DEK con wrapping per decriptare i dati. La KEK non lascia mai Cloud KMS.

Flusso di decriptazione

Per decriptare i dati utilizzando la crittografia envelope:

  1. Recupera i dati criptati e la DEK con wrapping.

  2. Utilizza la chiave archiviata in Cloud KMS per annullare il wrapping della DEK criptata.

  3. Utilizza la DEK in testo non crittografato per decriptare i dati criptati. Se utilizzi OpenSSL in precedenza, vedi l'esempio sulla decriptazione del messaggio.

Per codice campione che mostra come criptare e decriptare con la crittografia envelope, consulta Crittografia lato client con Tink e Cloud KMS.

Integrazione con i servizi Google Cloud

Diversi prodotti Google Cloud sono integrati con Cloud KMS per supportare la funzionalità CMEK (Customer-Managed Encryption Key). CMEK con Cloud KMS aggiunge un ulteriore livello di protezione per i dati, fornisce il controllo delle chiavi di crittografia e sfrutta i vantaggi di gestione delle chiavi di Cloud KMS. Consulta Utilizzo di Cloud KMS con altri servizi per visualizzare un elenco completo dei prodotti che supportano CMEK.

Altre opzioni per i servizi Google Cloud

Per i dati archiviati in prodotti Google Cloud che non supportano CMEK, puoi implementare la tua crittografia a livello di applicazione. Ciò richiede l'implementazione della tua crittografia envelope come descritto in precedenza, in modo da archiviare i dati criptati localmente in Google Cloud. Questo è anche il modo in cui puoi utilizzare Cloud KMS per criptare i dati archiviati in altri fornitori di servizi cloud o on-premise.

Oltre a supportare CMEK, i prodotti seguenti supportano la funzionalità della chiave di crittografia fornita dal cliente (CSEK).

Prodotto Argomento CSEK
Cloud Storage Chiavi di crittografia fornite dal cliente
Compute Engine Criptare i dischi con chiavi di crittografia fornite dal cliente

Con CSEK, fornisci la tua chiave AES-256 da utilizzare come KEK e la tua chiave protegge le DEK che proteggono i tuoi dati. La chiave CSEK è protetta da un ulteriore livello di protezione, mediante l'uso di una chiave Cloud KMS.

Ora che puoi importare chiavi in Cloud KMS, puoi importarle e utilizzarle con servizi abilitati per CMEK invece di utilizzare CSEK.