In attesa dell'avvio di un nuovo ciclo di corsi continuiamo a pubblicare una serie di articoli sulla crittografia in MySQL.
Nell'articolo precedente di questa serie abbiamo discusso, . Oggi, basandoci sulle conoscenze acquisite in precedenza, esamineremo la rotazione delle chiavi principali.
La rotazione delle chiavi principali consiste nella generazione di una nuova chiave principale, con cui vengono nuovamente crittografate le chiavi degli spazi tabelle (che sono memorizzate nelle intestazioni degli spazi tabelle).
Ricordiamo come appare l'intestazione di uno spazio tabella crittografato:

Dall'articolo precedente sappiamo che il server, all'avvio, legge le intestazioni di tutti gli spazi tabelle crittografati e memorizza l'ID KEY più grande. Ad esempio, se abbiamo tre tabelle con KEYID = 3 e una tabella con KEYID = 4, allora l'identificatore chiave massimo sarà pari a 4. Chiamiamo questo KEY ID — MAX KEY ID.
Come funziona la rotazione della chiave principale
1. L'utente esegue ALTER INNODB MASTER KEY.
2. Il server richiede al keyring la generazione di una nuova chiave principale con UUID del server e KEYID, pari all'aumento di uno del MAXKEYID. In questo modo, otteniamo l'identificatore della chiave principale pari a INNODBKEY-UUID- (MAXKEYID + 1). All'avvio corretto della generazione della chiave principale, il MAX KEY ID aumenta di uno (cioè MAXKEYID = MAXKEYID + 1).
3. Il server esamina tutti gli spazi tabelle crittografati utilizzando la chiave principale e per ogni spazio tabella:
crittografa la chiave dello spazio tabella con la nuova chiave principale;
aggiorna l'identificatore chiave al nuovo MAXKEYID;
se l'UUID è diverso dall'UUID del server, aggiorna l'UUID del server.
Come sappiamo, l'identificatore della chiave principale (Master Key ID), utilizzato per decrittografare la tabella, è composto da UUID e KEY ID, letti dall'intestazione dello spazio tabella. Quello che facciamo ora è aggiornare queste informazioni nell'intestazione di crittografia dello spazio tabella, affinché il server ottenga la corretta chiave principale.
Se abbiamo spazi dei nomi ottenuti da diverse fonti, ad esempio da diversi backup, questi possono utilizzare chiavi principali diverse. Tutte queste chiavi principali devono essere recuperate dal deposito all'avvio del server. Ciò può rallentare l'avvio del server, specialmente se viene utilizzato un deposito di chiavi server. Con la rotazione della chiave principale, risaltiamo le chiavi degli spazi dei nomi con una chiave principale unificata, la stessa per tutti gli spazi dei nomi. Ora, all'avvio, il server deve recuperare solo una chiave principale.
Questo, ovviamente, è solo un piacevole effetto collaterale. L'obiettivo principale della rotazione delle chiavi principali è rendere il nostro server più sicuro. In caso la chiave principale sia stata in qualche modo rubata dal deposito (ad esempio, dal Vault Server), è possibile generare una nuova chiave principale e risaltiamo le chiavi degli spazi dei nomi, rendendo la chiave rubata non valida. Siamo al sicuro... quasi.
Nel precedente articolo ho accennato che dopo il furto della chiave dello spazio dei nomi, una terza parte potrebbe usarla per decriptare i dati, a condizione che abbia accesso al nostro disco. In caso di furto della chiave principale e di accesso ai dati cifrati, è possibile utilizzare la chiave principale rubata per decriptare la chiave dello spazio dei nomi e ottenere i dati decriptati. Come vediamo, la rotazione della chiave principale non aiuta in questo caso. Risaltiamo la chiave dello spazio dei nomi con una nuova chiave principale, ma la chiave effettivamente utilizzata per la cifratura / decrittazione dei dati rimane la stessa. Pertanto, l'hacker può continuare a utilizzarla per decriptare i dati. In precedenza ho accennato che può eseguire una reale risaltiatura degli spazi dei nomi, e non solo una semplice risaltiatura della chiave dello spazio dei nomi. Questa funzionalità è chiamata flussi di cifratura (encryption threads). Tuttavia, al momento questa funzionalità è ancora sperimentale.
La rotazione della chiave principale è utile quando la chiave principale è stata rubata, ma l'attaccante non ha la possibilità di utilizzarla e decriptare le chiavi degli spazi dei nomi.
Leggi anche:
Fonte: habr.com
