GoogleSQL per BigQuery supporta la crittografia autenticata con dati associati (AEAD) la crittografia.
Questo argomento spiega i concetti alla base della crittografia AEAD in GoogleSQL. Per una descrizione delle diverse funzioni di crittografia AEAD che che supporta GoogleSQL, vedi Funzioni di crittografia AEAD.
Scopo della crittografia AEAD
BigQuery protegge i tuoi dati utilizzando la crittografia at-rest. BigQuery offre inoltre assistenza per modelli chiavi di crittografia (CMEK), che consentono di criptare le tabelle usando chiavi di crittografia. In alcuni casi, però, potrebbe essere opportuno crittografare all'interno di una tabella.
Ad esempio, vuoi mantenere in comune i dati di tutti i tuoi clienti e crittografare ogni file dei tuoi clienti usando una chiave diversa. Hai distribuiti in più tabelle che vuoi "crypto-delete". La cripto-eliminazione, o crypto-shredding, è il processo di Eliminare una chiave di crittografia per rendere illeggibili i dati criptati usando quella chiave.
Le funzioni di crittografia AEAD consentono di creare set di chiavi contenenti chiavi per la crittografia e la decrittografia, usa queste chiavi per criptare e decriptare i 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 di crittografia, una delle quali è la prima chiave di crittografia e gli eventuali altri componenti crittografici secondari chiave. Ogni chiave codifica una algoritmo per la crittografia o la decrittografia; se la chiave sia abilitato, disabilitato o eliminato; e, per le chiavi non eliminate, i byte delle chiavi le istanze server autonomamente. La chiave di crittografia primaria determina come criptare l'input testo non crittografato. La chiave di crittografia primaria non può mai essere in stato disabilitato. Le chiavi di crittografia secondarie servono solo per la decriptazione e possono essere abilitato o disabilitato. Un set di chiavi può essere utilizzato per decriptare i dati utilizzati per la crittografia.
La rappresentazione di un set di chiavi in GoogleSQL è sotto forma di
google.crypto.tink.Keyset
buffer di protocollo in BYTES
.
Esempio
Di seguito è riportato un esempio di un set di chiavi AEAD, rappresentato come una stringa JSON, con tre tasti.
{
"primaryKeyId": 569259624,
"key": [
{
"keyData": {
"typeUrl": "type.googleapis.com/google.crypto.tink.AesGcmKey",
"value": "GiDPhTp5gIhfnDb6jfKOT4SmNoriIJc7ah8uRvrCpdNihA==",
"keyMaterialType": "SYMMETRIC"
},
"status": "ENABLED",
"keyId": 569259624,
"outputPrefixType": "TINK"
},
{
"keyData": {
"typeUrl": "type.googleapis.com/google.crypto.tink.AesGcmKey",
"value": "GiBp6aU2cFbVfTh9dTQ1F0fqM+sGHXc56RDPryjAnzTe2A==",
"keyMaterialType": "SYMMETRIC"
},
"status": "DISABLED",
"keyId": 852264701,
"outputPrefixType": "TINK"
},
{
"status": "DESTROYED",
"keyId": 237910588,
"outputPrefixType": "TINK"
}
]
}
Nell'esempio precedente, la chiave di crittografia primaria ha un ID 569259624
e
è la prima chiave elencata nella stringa JSON. Esistono due tipi di regole
chiavi di crittografia, una con ID 852264701
in stato disattivato e l'altra
con ID 237910588
in stato eliminato. Quando una funzione di crittografia AEAD utilizza
questo set di chiavi per la crittografia, il testo crittografato risultante codifica la
ID della chiave di crittografia 569259624
.
Quando una funzione AEAD utilizza questo set di chiavi per la decrittografia, la funzione sceglie
la chiave adeguata per la decrittografia in base all'ID chiave codificato nel testo crittografato. nel
nell'esempio precedente, tentando di decriptare utilizzando gli ID chiave 852264701
o
237910588
causerebbe un errore perché l'ID chiave 852264701
è disattivato e
L'ID 237910588
è stato eliminato. Ripristino dello stato attivo dell'ID chiave 852264701
in corso...
lo renderebbe utilizzabile per la decrittografia.
Il tipo di chiave determina la modalità di crittografia da utilizzare con chiave.
La crittografia del testo non crittografato più di una volta utilizzando lo stesso set di chiavi in genere restituisce diversi valori di testo crittografato a causa di vettori di inizializzazione (IV), che vengono scelti utilizzando generatore di numeri pseudo-casuali fornito da OpenSSL.
Set di chiavi avvolte
Se devi gestire in modo sicuro un set di chiavi o trasmetterlo tramite non attendibile, prendi in considerazione l'utilizzo di un set di chiavi con wrapping. Quando aggrega un set di chiavi non elaborato, questo processo cripta il set di chiavi non elaborato utilizzando un Chiave Cloud KMS.
I set di chiavi con wrapping possono criptare e decriptare i dati senza esporre i dati del set di chiavi. Sebbene esistano altri modi per limitare l'accesso ai dati a livello di campo, il wrapping i set di chiavi offrono un meccanismo più sicuro per la gestione dei set di chiavi rispetto set di tasti non elaborati.
Come per i set di chiavi, i set di chiavi con wrapping possono e dovrebbero essere periodicamente ruotato. I set di chiavi a capo vengono utilizzati Funzioni di crittografia della busta AEAD.
Ecco alcune funzioni con esempi di set di chiavi con wrapping:
KEYS.NEW_WRAPPED_KEYSET
: crea un nuovo set di chiavi con wrapping.KEYS.ROTATE_WRAPPED_KEYSET
: ruota un set di chiavi con wrapping.KEYS.REWRAP_KEYSET
: aggrega un set di chiavi con wrapping con un nuovo e i dati di Google Cloud.KEYS.KEYSET_CHAIN
: ottieni un set di chiavi Tink che sia è criptato con una chiave Cloud KMS.
Advanced Encryption Standard (AES)
Le funzioni di crittografia AEAD utilizzano Crittografia Advanced Encryption Standard (AES). La crittografia AES utilizza il testo non crittografato come input, insieme a una chiave di crittografia e restituisce una sequenza criptata di byte come output. Questo di byte possono essere decriptati in un secondo momento utilizzando la stessa chiave usata per e la crittografia. AES utilizza un blocco di 16 byte, il che significa che il testo non crittografato trattati come una sequenza di blocchi da 16 byte. Il testo crittografato conterrà un Prefisso specifico Tink che indica la chiave utilizzata per eseguire la crittografia. AES la crittografia supporta diverse modalità di crittografia a blocchi.
Modalità di crittografia a blocchi
Le modalità di crittografia a due blocchi supportate dalle funzioni di crittografia AEAD sono GCM e CBC.
GCM
Modalità contatore/Galois (GCM) è una modalità per la crittografia AES. I numeri di funzione si bloccano in sequenza, quindi combina questo numero di blocco con un vettore di inizializzazione (IV). Un'inizializzazione vettoriale è un valore casuale o pseudo-casuale che costituisce la base del casuale dei dati in chiaro. Quindi, la funzione cripta blocco numerico e IV utilizzando AES. La funzione viene quindi eseguita in modo bit a bit un'operazione logica esclusiva o (XOR) sul risultato della crittografia e testo non crittografato per produrre il testo crittografato. La modalità GCM utilizza una chiave di crittografia di lunghezza pari a 128 o 256 bit.
Modalità CBC
"catene" CBC blocchi tramite l'XOR di ogni blocco di testo non crittografato con il blocco precedente del testo crittografato prima di criptarlo. La modalità CBC utilizza una chiave di crittografia 128, 192 o 256 bit di lunghezza. CBC utilizza un'inizializzazione a 16 byte come blocco iniziale e invia XOR a questo blocco con il primo blocco di testo non crittografato.
La modalità CBC non è Schema AEAD in senso crittografico in quanto non fornisce l'integrità dei dati; ovvero modifiche dannose i dati criptati non vengono rilevati, il che compromette i dati riservatezza. Pertanto la CBC non è consigliata a meno che non sia necessario per motivi precedenti.
Dati aggiuntivi
Le funzioni di crittografia AEAD supportano l'uso di un argomento additional_data
,
noti anche come dati associati (AD) o dati autenticati aggiuntivi.
Un testo crittografato può essere decriptato solo se vengono utilizzati gli stessi dati aggiuntivi utilizzati per criptare
per la decriptazione. I dati aggiuntivi possono quindi essere utilizzati
per associare il testo crittografato a un contesto.
Ad esempio, additional_data
potrebbe essere l'output di
CAST(customer_id AS STRING)
durante la crittografia dei dati di un determinato cliente.
In questo modo, quando i dati vengono decriptati, sono stati precedentemente criptati utilizzando
il valore previsto per customer_id
. È richiesto lo stesso valore di additional_data
per
la decrittografia. Per ulteriori informazioni, vedi
RFC 5116.
Decriptazione
L'output di AEAD.ENCRYPT
è
testo crittografato BYTES
. La
AEAD.DECRYPT_STRING
oppure
Le funzioni di AEAD.DECRYPT_BYTES
possono decriptare
testo crittografato. Queste funzioni devono utilizzare un keyset che
contiene la chiave utilizzata per la crittografia. La chiave deve trovarsi in un
'ENABLED'
. Inoltre devono usare lo stesso additional_data
usato in
la crittografia.
Quando il set di chiavi viene utilizzato per la decrittografia, viene scelta la chiave appropriata la decrittografia in base all'ID chiave codificato nel testo crittografato.
L'output di AEAD.DECRYPT_STRING
è in testo non crittografato
STRING, mentre l'output di AEAD.DECRYPT_BYTES
è
testo non crittografato BYTES
. AEAD.DECRYPT_STRING
può decriptare
testo crittografato che codifica un valore STRING;
AEAD.DECRYPT_BYTES
può decriptare il testo crittografato che codifica una
BYTES
valore. L'utilizzo di una di queste funzioni per
decriptare un testo crittografato che codifica il tipo di dati errato, ad esempio utilizzando
AEAD.DECRYPT_STRING
per decriptare il testo crittografato che codifica una
BYTES
, causa un comportamento indefinito e potrebbe
generano un errore.
Rotazione chiave
Lo scopo principale della rotazione delle chiavi di crittografia è ridurre la quantità dati criptati con una chiave particolare, in modo che una chiave potenzialmente consentirebbe all'aggressore di accedere a meno dati.
La rotazione del set di chiavi comporta:
- Creazione di una nuova chiave di crittografia primaria in ogni set di chiavi.
- Decriptare e ricriptare tutti i dati criptati.
La KEYS.ROTATE_KEYSET
o
KEYS.ROTATE_WRAPPED_KEYSET
esegue il primo passaggio, aggiungendo una nuova chiave di crittografia primaria a un
set di chiavi e modifica della vecchia chiave di crittografia primaria in una crittografia secondaria
chiave.
Chiavi Cloud KMS
GoogleSQL supporta le funzioni di crittografia AEAD con le chiavi Cloud KMS per proteggere ulteriormente i tuoi dati. Questo un livello di protezione aggiuntivo cripta la chiave di crittografia dei dati (DEK) con un chiave di crittografia della chiave (KEK). La KEK è un set di chiavi di crittografia simmetrica, archiviati in modo sicuro in Cloud Key Management Service e gestiti mediante Autorizzazioni e ruoli di Cloud KMS.
In fase di esecuzione della query, utilizza KEYS.KEYSET_CHAIN
per fornire il percorso della risorsa KMS della KEK e il testo crittografato dal
DEK con wrapping. BigQuery chiama Cloud KMS per eseguire l'unwrapping della DEK e poi utilizza
chiave per decriptare i dati nella query. La versione senza wrapper della DEK
viene archiviato in memoria solo per la durata della query e poi eliminato.
Per ulteriori informazioni, vedi Crittografia a livello di colonna SQL con le chiavi Cloud KMS.