Concetti della crittografia AEAD

Questo argomento spiega i concetti alla base della crittografia AEAD in BigQuery. Per una descrizione delle diverse funzioni di crittografia AEAD supportate da BigQuery, consulta Funzioni di crittografia AEAD.

Scopo della crittografia AEAD

BigQuery protegge i tuoi dati utilizzando la crittografia dei dati inattivi. BigQuery supporta anche le chiavi di crittografia gestite dal cliente (CMEK), che consentono di criptare le tabelle utilizzando chiavi di crittografia specifiche. In alcuni casi, tuttavia, potresti voler criptare i singoli valori all'interno di una tabella.

Ad esempio, vuoi conservare i dati di tutti i tuoi clienti in una tabella comune e criptare ogni dato dei tuoi clienti utilizzando una chiave diversa. Hai distribuito dati in più tabelle che vuoi criptare o eliminare. L'eliminazione delle crittografie, o crittografie, è il processo di eliminazione di una chiave di crittografia per rendere illeggibili tutti i dati criptati mediante tale chiave.

Le funzioni di crittografia AEAD consentono di creare set di chiavi che contengono chiavi per la crittografia e la decriptazione, utilizzare queste chiavi per criptare e decriptare singoli valori in una tabella e ruotare le chiavi all'interno di un set di chiavi.

Set di chiavi

Un set di chiavi è una raccolta di chiavi crittografiche, una delle quali è la chiave crittografica principale, mentre le altre sono chiavi crittografiche secondarie. Ogni chiave codifica un algoritmo per la crittografia o la decriptazione, se la chiave è abilitata, disabilitata o eliminata e, per le chiavi non distrutte, i byte stessi. La chiave di crittografia principale determina come criptare il testo non crittografato dell'input. La chiave di crittografia principale non può mai essere in stato disattivato. Le chiavi di crittografia secondarie vengono utilizzate solo per la decriptazione e possono essere attivate o disattivate. Un set di chiavi può essere utilizzato per decriptare i dati che sono stati utilizzati per la crittografia.

La rappresentazione di un set di chiavi in BigQuery è come un buffer di protocollo google.crypto.tink.Keyset in serie in BYTES.

Esempio

Di seguito è riportato un esempio di set di chiavi AEAD, rappresentato come una stringa JSON, con tre chiavi.

primary_key_id: 569259624
key {
  key_data {
    type_url: "type.googleapis.com/google.crypto.tink.AesGcmKey"
    value: ",&\264kh\377\306\217\371\233E<\0350A4\023B-pd\203\277\240\371\212^\210bf\347\256"
    key_material_type: SYMMETRIC
  }
  status: ENABLED
  key_id: 569259624
  output_prefix_type: TINK
}
key {
  key_data {
    type_url: "type.googleapis.com/google.crypto.tink.AesGcmKey"
    value: "\374\336+.\333\245k\364\010`\037\267!\376\233\\3\215\020\356B\236\240O\256U\021\266\217\277\217\271"
    key_material_type: SYMMETRIC
  }
  status: DISABLED
  key_id: 852264701
  output_prefix_type: TINK
}
key {
  status: DESTROYED
  key_id: 237910588
  output_prefix_type: TINK
}

Nell'esempio precedente, la chiave di crittografia principale ha un ID 569259624 ed è la prima chiave elencata nella stringa JSON. Esistono due chiavi di crittografia secondarie, una con ID 852264701 in stato disattivato e un'altra con ID 237910588 in stato eliminato. Quando una funzione di crittografia AEAD utilizza questo set di chiavi per la crittografia, il testo crittografato codifica l'ID della chiave crittografica principale di 569259624.

Quando una funzione AEAD utilizza questo set di chiavi per la decriptazione, la funzione sceglie la chiave appropriata per la decriptazione in base all'ID della chiave codificato nel testo crittografato; nell'esempio precedente, il tentativo di decriptare mediante gli ID chiave 852264701 o 237910588 comporterebbe un errore, poiché l'ID chiave 852264701 è disabilitato e l'ID 237910588 viene eliminato. Se ripristini l'ID chiave 852264701 in uno stato abilitato, è possibile utilizzarlo per la decriptazione.

Il tipo di chiave determina la modalità di crittografia da utilizzare con quella chiave.

La crittografia del testo non crittografato più volte utilizzando lo stesso set di chiavi restituisce in genere diversi valori di cifratura diversi a causa di diversi vettori di inizializzazione (IV), che vengono scelti utilizzando il generatore di numeri casuali assegnati da OpenSSL.

Crittografia avanzata (AES)

Le funzioni di crittografia AEAD utilizzano la crittografia AES (Advanced Encryption Standard). La crittografia AES utilizza il testo non crittografato come input, insieme a una chiave di crittografia, e restituisce come output una sequenza criptata di byte. Questa sequenza di byte può essere successivamente decriptata utilizzando la stessa chiave utilizzata per la crittografia. AES utilizza una dimensione di blocco di 16 byte, vale a dire che il testo non crittografato viene trattato come una sequenza di blocchi di 16 byte. Il testo crittografato conterrà un prefisso specifico per Tink che indica la chiave utilizzata per eseguire la crittografia. La crittografia AES supporta diverse modalità di crittografia dei blocchi.

Bloccare le modalità di crittografia

Le modalità di crittografia a due blocchi supportate dalle funzioni di crittografia AEAD sono GCM e CBC.

GCM

La modalità GCM (Galois/Counter Mode) è una modalità di crittografia AES. I numeri di funzione vengono bloccati in sequenza, poi uniscono il numero di blocco a un vettore di inizializzazione (IV). Un vettore di inizializzazione è un valore casuale o pseudo-casuale che costituisce la base della randomizzazione dei dati del testo non crittografato. Quindi, la funzione cripta il numero di blocco combinato e l'IV utilizzando l'algoritmo AES. La funzione esegue quindi un'operazione bit per logica o esclusiva (XOR) sul risultato della crittografia e sul testo non crittografato per produrre il testo crittografato. La modalità GCM utilizza una chiave di crittografia di 128 o 256 bit di lunghezza.

Modalità CBC

I blocchi "CBC" della CBC XOR un po' di ogni testo crittografato con il precedente blocco di testo crittografato prima di criptarlo. La modalità CBC utilizza una chiave di crittografia di 128, 192 o 256 bit di lunghezza. CBC utilizza un vettore di inizializzazione di 16 byte come blocco iniziale e XOR questo blocco con il primo blocco di testo non crittografato.

La modalità CBC non è uno schema AEAD in senso crittografico in quanto non fornisce integrità dei dati; in altre parole, le modifiche dannose ai dati criptati non verranno rilevate, il che comprometterebbe anche la riservatezza dei dati. Pertanto, il metodo CBC è sconsigliato se non è necessario per motivi legacy.

Dati aggiuntivi

Le funzioni di crittografia AEAD supportano l'utilizzo di un argomento additional_data, noto anche come dati associati (AD) o dati autenticati aggiuntivi. A differenza del set di chiavi, questi dati aggiuntivi non consentono da soli la decriptazione del testo crittografato risultante. Questi dati aggiuntivi garantiscono l'autenticità e l'integrità dei dati criptati, ma non la loro segretezza.

Ad esempio, additional_data potrebbe essere l'output di CAST(customer_id AS STRING) durante la crittografia dei dati per un determinato cliente. In questo modo, quando i dati vengono decriptati, vengono criptati in precedenza con il customer_id previsto. Per la decriptazione è richiesto lo stesso valore additional_data. Per ulteriori informazioni, consulta il documento RFC 5116.

Decriptazione

Il risultato per AEAD.ENCRYPT è il testo crittografato BYTES. Le funzioni AEAD.DECRYPT_STRING o AEAD.DECRYPT_BYTES possono decriptare questo testo crittografato. Queste funzioni devono utilizzare un set di chiavi contenente la chiave utilizzata per la crittografia. La chiave deve essere in stato 'ENABLED'. Devono utilizzare lo stesso additional_data utilizzato per la crittografia.

Quando il set di chiavi viene utilizzato per la decriptazione, viene scelta la chiave appropriata per la decriptazione in base all'ID chiave codificato nel testo crittografato.

L'output di AEAD.DECRYPT_STRING è un testo non crittografato STRING, mentre l'output di AEAD.DECRYPT_BYTES è testo non crittografato BYTES. AEAD.DECRYPT_STRING può decriptare il testo crittografato che codifica un valore STRING; AEAD.DECRYPT_BYTES può decriptare il testo crittografato che codifica un valore BYTES. L'utilizzo di una di queste funzioni per decriptare un testo crittografato che codifica il tipo di dati errato, come l'utilizzo di AEAD.DECRYPT_STRING per decriptare il testo crittografato che codifica un valore BYTES, causa un comportamento non definito e potrebbe generare un errore.

Rotazione di una chiave

Lo scopo principale della rotazione delle chiavi di crittografia è ridurre la quantità di dati criptati con una chiave particolare, in modo che una potenziale chiave compromessa possa consentire a un utente malintenzionato l'accesso a una quantità inferiore di dati.

La rotazione del set di chiavi comporta:

  1. Creazione di una nuova chiave di crittografia primaria all'interno di ogni set di chiavi.
  2. Decriptazione e nuova crittografia di tutti i dati criptati.

La funzione KEYS.ROTATE_KEYSET esegue il primo passaggio, aggiungendo una nuova chiave di crittografia primaria a un set di chiavi e cambiando la vecchia chiave di crittografia primaria.

Protezione di Cloud KMS

BigQuery supporta le funzioni AEAD con le chiavi Cloud KMS per proteggere ulteriormente i dati. Questo livello di protezione aggiuntivo cripta la tua chiave di crittografia dei dati (DEK) con una chiave di crittografia della chiave (KEK). La KEK è un set di chiavi di crittografia simmetrica archiviato in modo sicuro in Cloud Key Management Service (KMS) e gestito con ruoli e autorizzazioni (IAM) e Identity and Access Management (IAM).

Al momento dell'esecuzione della query, utilizza la funzione KEYS.KEYSET_CHAIN per fornire il percorso della risorsa KMS della KEK e il testo crittografato della DEK criptata. BigQuery chiama Cloud KMS per decriptare la DEK, che quindi utilizza la chiave per decriptare i dati nella query. La versione decriptata della DEK viene archiviata in memoria solo per la durata della query e poi eliminata.

Per ulteriori informazioni, consulta la crittografia a livello di colonna SQL con chiavi Cloud KMS.