Im Vorfeld des Starts eines neuen Kurses setzen wir die Veröffentlichung unserer Artikelreihe über die Verschlüsselung in MySQL fort.
Im vorherigen Artikel dieser Reihe haben wir besprochen, Heute, basierend auf dem zuvor erworbenen Wissen, werfen wir einen Blick auf die Rotation von Hauptschlüsseln.
Die Rotation von Hauptschlüsseln besteht darin, dass ein neuer Hauptschlüssel generiert wird, und mit diesem neuen Schlüssel werden die Schlüssel der Tabellenräume (die in den Headern der Tabellenräume gespeichert sind) erneut verschlüsselt.
Lassen Sie uns in Erinnerung rufen, wie der Header eines verschlüsselten Tabellenraums aussieht:

Aus dem vorherigen Artikel wissen wir, dass der Server beim Start die Header aller verschlüsselten Tabellenräume liest und die größte KEY ID speichert. Wenn wir beispielsweise drei Tabellen mit KEYID = 3 und eine Tabelle mit KEYID = 4 haben, dann ist die maximale Schlüssel-ID 4. Lassen Sie uns diese KEY ID — MAX KEY ID — nennen.
Wie die Rotation des Hauptschlüssels funktioniert
1. Der Benutzer führt ALTER INNODB MASTER KEY aus.
2. Der Server fordert im Schlüssel-Storage (keyring) die Erstellung eines neuen Hauptschlüssels mit der UUID des Servers und einer KEYID, die um eins erhöht ist, MAXKEYID. So erhalten wir die Identifikation des Hauptschlüssels, die INNODBKEY-UUID- (MAXKEYID + 1). Bei erfolgreicher Generierung des Hauptschlüssels wird die MAX KEY ID um eins erhöht (d.h. MAXKEYID = MAXKEYID + 1).
3. Der Server durchsucht alle Tabellenspeicher, die mit dem Hauptschlüssel verschlüsselt sind, und für jeden Tabellenspeicher:
verschlüsselt den Schlüssel des Tabellenspeichers mit einem neuen Hauptschlüssel;
aktualisiert die Schlüssel-ID auf das neue MAXKEYID;
wenn die UUID von der UUID des Servers abweicht, aktualisiert er die UUID des Servers.
Wie wir wissen, besteht die Identifikation des Hauptschlüssels (Master Key ID), die zur Entschlüsselung der Tabelle verwendet wird, aus UUID und KEY ID, die aus dem Header des Tabellenspeichers gelesen werden. Was wir jetzt tun, ist, diese Informationen im Header der Verschlüsselung des Tabellenspeichers zu aktualisieren, damit der Server den richtigen Hauptschlüssel erhält.
Wenn wir Tabellenräume aus verschiedenen Quellen, wie z.B. aus verschiedenen Sicherungskopien, haben, können sie unterschiedliche Hauptschlüssel verwenden. Alle diese Hauptschlüssel müssen beim Start des Servers aus dem Speicher abgerufen werden. Dies kann den Serverstart verlangsamen, insbesondere wenn ein serverseitiger Schlüsselbund verwendet wird. Durch die Rotation des Hauptschlüssels verschlüsseln wir die Schlüssel der Tabellenräume mit einem einzigen Hauptschlüssel, der für alle Tabellenräume identisch ist. Jetzt muss der Server beim Start nur noch einen Hauptschlüssel abrufen.
Das ist natürlich nur ein angenehmer Nebeneffekt. Das Hauptziel der Rotation der Hauptschlüssel besteht darin, unseren Server sicherer zu machen. Falls der Hauptschlüssel auf irgendeine Weise aus dem Speicher gestohlen wurde (zum Beispiel aus dem Vault Server), kann ein neuer Hauptschlüssel generiert und die Schlüssel der Tabellenräume erneut verschlüsselt werden, wodurch der gestohlene Schlüssel ungültig wird. Wir sind sicher… fast.
In dem vorherigen Artikel habe ich erwähnt, dass eine dritte Partei nach dem Diebstahl des Tabellenraum-Schlüssels diesen zur Entschlüsselung von Daten verwenden kann, vorausgesetzt, der Zugang zu unserem Laufwerk besteht. Im Falle eines Hauptschlüssel-Diebstahls und des Zugangs zu verschlüsselten Daten kann der gestohlene Hauptschlüssel verwendet werden, um den Schlüssel des Tabellenraums zu entschlüsseln und die entschlüsselten Daten zu erhalten. Wie wir sehen, hilft in diesem Fall die Rotation des Hauptschlüssels nicht weiter. Wir verschlüsseln den Schlüssel des Tabellenraums erneut mit einem neuen Hauptschlüssel, aber der tatsächliche Schlüssel, der für die Verschlüsselung / Entschlüsselung der Daten verwendet wird, bleibt der gleiche. Daher kann der „Hacker“ ihn weiterhin zur Entschlüsselung der Daten nutzen. Zuvor habe ich angedeutet, dass eine echte Rekeying des Tabellenraums durchführen kann und nicht nur eine einfache Rekeying des Tabellenraum-Schlüssels. Diese Funktion wird als Verschlüsselungs-Threads (encryption threads) bezeichnet. Diese Funktionalität ist jedoch derzeit noch experimentell.
Die Rotation des Hauptschlüssels ist nützlich, wenn der Hauptschlüssel gestohlen wurde, der Angreifer jedoch nicht in der Lage ist, ihn zu verwenden oder die Schlüssel der Tabellenräume zu entschlüsseln.
Weiterlesen:
Quelle: habr.com
