In vista dell'inizio di un nuovo ciclo del corso continuiamo a pubblicare una serie di articoli sulla crittografia in MySQL.
Nell'articolo precedente di questa serie abbiamo discusso . Oggi, basandoci sulle conoscenze precedenti, daremo un'occhiata alla rotazione delle chiavi principali.
La rotazione delle chiavi principali consiste nel generare una nuova chiave principale e riutilizzare questa nuova chiave per crittografare nuovamente le chiavi degli spazi delle tabelle (che sono memorizzate negli header degli spazi delle tabelle).
Rinfreschiamo la memoria su come appare l'intestazione di uno spazio tabellare crittografato:

Dall'articolo precedente sappiamo che il server, all'avvio, legge gli header di tutti gli spazi tabellari crittografati e memoriza il KEY ID più grande. Ad esempio, se abbiamo tre tabelle con KEYID = 3 e una tabella con KEYID = 4, quindi l'identificatore massimo della chiave sarà 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 l'UUID del server e il KEYID pari a MAXKEY incrementato di uno.ID. Quindi otteniamo l'identificatore della chiave principale, pari a INNODBCHIAVE-UUID- (MAXKEY incrementato di uno.ID + 1). Al termine della generazione della chiave principale, MAX KEY ID aumenta di uno (cioè MAXKEY incrementato di uno.ID = MAXKEY incrementato di uno.ID + 1).
3. Il server esamina tutti gli spazi delle tabelle crittografati con la chiave principale e, per ogni spazio delle tabelle:
crittografa la chiave dello spazio delle tabelle con la nuova chiave principale;
aggiorna l'identificatore della chiave con il nuovo MAXKEY incrementato di uno.ID;
se il UUID è diverso dal UUID del server, allora aggiorna il 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 delle tabelle. Quello che facciamo ora è aggiornare queste informazioni nell'intestazione della crittografia dello spazio delle tabelle, affinché il server riceva la corretta chiave principale.
Se abbiamo spazi di tabella provenienti da fonti diverse, ad esempio da backup diversi, potrebbero utilizzare chiavi principali diverse. Tutte queste chiavi principali dovranno essere recuperate dal deposito all'avvio del server. Ciò potrebbe rallentare l'avvio del server, specialmente se si utilizza un deposito di chiavi server. Con la rotazione della chiave principale, ri-crittografiamo le chiavi degli spazi di tabella con una chiave principale unica, uguale per tutti gli spazi di tabella. 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. Nel caso in cui la chiave principale sia stata in qualche modo rubata dal deposito (ad esempio, dal Vault Server), è possibile generare una nuova chiave principale e ri-crittografare le chiavi degli spazi di tabella, rendendo la chiave rubata non valida. Siamo al sicuro... quasi.
Nell'articolo precedente ho parlato del fatto che, dopo il furto della chiave dello spazio delle tabelle, una terza parte possa utilizzarla per decifrare i dati, a condizione che ci sia accesso al nostro disco. In caso di furto della chiave principale e di accesso ai dati crittografati, è possibile utilizzare la chiave principale rubata per decifrare la chiave dello spazio delle tabelle e ottenere i dati decifrati. Come vediamo, la rotazione della chiave principale in questo caso non aiuta. Ricryptiamo la chiave dello spazio delle tabelle con una nuova chiave principale, ma la chiave effettivamente utilizzata per la crittografia / decifratura dei dati rimane la stessa. Pertanto, l'"hacker" può continuare a utilizzarla per decifrare i dati. In precedenza avevo accennato che può eseguire un vero ri-cifraggio degli spazi delle tabelle, e non solo un semplice ri-cifraggio della chiave dello spazio delle tabelle. Questa funzionalità è chiamata thread di crittografia (encryption threads). Tuttavia, al momento questa funzionalità è ancora sperimentale.
La rotazione della chiave principale è utile quando la chiave principale è stata rubata, ma il malintenzionato non ha la possibilità di utilizzarla e decrittografare le chiavi degli spazi delle tabelle.
Leggi di più:
Fonte: habr.com
