Kurz vor Beginn des neuen Kurses wir setzen die Veröffentlichung einer Reihe von Artikeln zur Verschlüsselung in MySQL fort.
In dem vorherigen Artikel dieser Serie haben wir diskutiert, . Heute werden wir, basierend auf dem zuvor erlangten Wissen, die Rotation von Hauptschlüsseln betrachten.
Die Rotation von Hauptschlüsseln besteht darin, dass ein neuer Hauptschlüssel generiert wird und dieser neue Schlüssel zum erneuten Verschlüsseln der Schlüssel von Tablespaces (die in den Headern der Tablespaces gespeichert sind) verwendet wird.
Lassen Sie uns daran erinnern, wie der Header eines verschlüsselten Tablespaces aussieht:

Aus dem vorherigen Artikel wissen wir, dass der Server beim Start die Header aller verschlüsselten Tablespaces einliest und den größten KEY ID speichert. Zum Beispiel, wenn wir drei Tabellen mit KEYID = 3 und eine Tabelle mit KEYID = 4 haben, ist der maximale Schlüssel-Identifikator gleich 4. Nennen wir diesen KEY ID – MAX KEY ID.
Wie die Rotation des Hauptschlüssels funktioniert
1. Der Benutzer führt ALTER INNODB MASTER KEY aus.
2. Der Server fordert die Generierung eines neuen Hauptschlüssels im Schlüsselring (keyring) an mit der UUID des Servers und KEYID, die um eins erhöht ist im Vergleich zu MAXKEYID. Dadurch erhalten wir die Hauptschlüssel-Identifikator, der gleich INNODBKEY-UUID- (MAXKEYID + 1) ist. Bei erfolgreicher Generierung des Hauptschlüssels wird MAX KEY ID um eins erhöht (d.h. MAXKEYID = MAXKEYID + 1).
3. Der Server durchläuft alle Tablespaces, die mit dem Hauptschlüssel verschlüsselt sind, und für jeden Tablespace:
verschlüsselt den Schlüssel des Tablespaces mit dem neuen Hauptschlüssel;
aktualisiert die Schlüssel-ID auf den neuen MAXKEYID;
wenn die UUID vom UUID des Servers abweicht, wird die UUID des Servers aktualisiert.
Wie wir wissen, besteht der Identifikator des Hauptschlüssels (Master Key ID), der zur Entschlüsselung der Tabelle verwendet wird, aus der UUID und der KEY ID, die aus dem Header des Tablespaces gelesen wird. Was wir jetzt tun, ist diese Informationen im Header der Verschlüsselung des Tablespaces zu aktualisieren, damit der Server den richtigen Hauptschlüssel erhält.
Wenn wir Tabellenräume aus verschiedenen Quellen haben, zum Beispiel aus unterschiedlichen Backups, können sie unterschiedliche Master-Schlüssel verwenden. Alle diese Master-Schlüssel müssen beim Start des Servers aus dem Speicher abgerufen werden. Dies kann den Start des Servers verlangsamen, insbesondere wenn ein serverseitiger Schlüssel-Speicher verwendet wird. Durch die Rotation des Master-Schlüssels verschlüsseln wir die Schlüssel der Tabellenräume mit einem Master-Schlüssel, der für alle Tabellenräume gleich ist. Jetzt muss der Server beim Start nur einen Master-Schlüssel abrufen.
Das ist natürlich nur ein angenehmer Nebeneffekt. Das Hauptziel der Rotation der Master-Schlüssel besteht darin, unseren Server sicherer zu machen. Falls der Master-Schlüssel irgendwie aus dem Speicher (zum Beispiel dem Vault Server) gestohlen wurde, kann ein neuer Master-Schlüssel generiert und die Schlüssel der Tabellenräume erneut verschlüsselt werden, wodurch der gestohlene Schlüssel ungültig wird. Wir sind in Sicherheit... fast.
In dem vorherigen Artikel sprach ich darüber, dass eine dritte Partei den Schlüssel des Tabellenraums nach dem Diebstahl verwenden könnte, um Daten zu entschlüsseln, vorausgesetzt, dass Zugang zu unserem Laufwerk besteht. Im Fall des Diebstahls des Master-Schlüssels und mit Zugang zu den verschlüsselten Daten kann der gestohlene Master-Schlüssel verwendet werden, um den Schlüssel des Tabellenraums zu entschlüsseln und die entschlüsselten Daten zu erhalten. Wie wir sehen, hilft die Rotation des Master-Schlüssels in diesem Fall nicht. Wir verschlüsseln den Schlüssel des Tabellenraums mit einem neuen Master-Schlüssel, aber der tatsächliche Schlüssel, der zur Verschlüsselung/Entschlüsselung der Daten verwendet wird, bleibt derselbe. Daher kann der „Hacker“ ihn weiterhin zur Entschlüsselung der Daten verwenden. Ich habe zuvor angedeutet, dass kann eine echte erneute Verschlüsselung von Tabellenräumen durchführen, nicht nur eine einfache erneute Verschlüsselung des Schlüssels des Tabellenraums. Diese Funktion wird Encryption Threads genannt. Momentan ist diese Funktionalität jedoch noch experimentell.
Die Rotation des Master-Schlüssels ist nützlich, wenn der Master-Schlüssel gestohlen wurde, der Angreifer jedoch nicht in der Lage ist, ihn zu verwenden und die Schlüssel der Tabellenräume zu entschlüsseln.
Weiterlesen:
Quelle: habr.com
