Concetti della crittografia AEAD

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 i valori 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:

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 crittografarlo. 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, CBC non è consigliato se non 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:

  1. Creazione di una nuova chiave di crittografia primaria in ogni set di chiavi.
  2. 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 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.