Verschlüsselung in MySQL: Master Key Rotation

In Erwartung des Beginns einer neuen Einschreibung für den Kurs "Datenbank" Wir veröffentlichen weiterhin eine Reihe von Artikeln über die Verschlüsselung in MySQL.

Im vorherigen Artikel dieser Reihe haben wir darüber gesprochen wie die Hauptschlüsselverschlüsselung funktioniert. Schauen wir uns heute, basierend auf den zuvor gewonnenen Erkenntnissen, die Drehung der Haupttasten an.

Bei der Hauptschlüsselrotation wird ein neuer Hauptschlüssel generiert und die Tablespace-Schlüssel (die in den Tablespace-Headern gespeichert sind) mit diesem neuen Schlüssel neu verschlüsselt.

Erinnern wir uns daran, wie der Header eines verschlüsselten Tablespace aussieht:

Verschlüsselung in MySQL: Master Key Rotation

Aus dem vorherigen Artikel wissen wir, dass der Server beim Start die Header aller verschlüsselten Tablespaces liest und sich die größte KEY-ID merkt. Zum Beispiel, wenn wir drei Tabellen mit KEY habenID = 3 und eine Tabelle mit KEYID = 4, dann ist die maximale Schlüssel-ID 4. Nennen wir diese SCHLÜSSEL-ID - MAX SCHLÜSSEL-ID.

So funktioniert die Hauptschlüsselrotation

1. Der Benutzer führt ALTER INNODB MASTER KEY aus.

2. Der Server fordert den Schlüsselbund auf, einen neuen Hauptschlüssel mit der Server-UUID und dem SCHLÜSSEL zu generierenID gleich eins plus MAXWESENTLICHEAUSWEIS. Wir erhalten also eine Hauptschlüssel-ID gleich INNODBSCHLÜSSEL-UUID-(MAXWESENTLICHEID + 1). Bei erfolgreicher Generierung des Hauptschlüssels wird die MAX KEY ID um eins erhöht (d. h. MAXWESENTLICHEID=MAXWESENTLICHEID + 1).

3. Der Server scannt alle mit dem Hauptschlüssel verschlüsselten Tablespaces und führt für jeden Tablespace Folgendes aus:

  • verschlüsselt den Tablespace-Schlüssel mit dem neuen Hauptschlüssel;

  • Aktualisiert die Schlüssel-ID auf den neuen MAXWESENTLICHEICH WÜRDE;

  • Wenn sich die UUID von der Server-UUID unterscheidet, aktualisieren Sie die Server-UUID.

Wie wir wissen, besteht die zum Entschlüsseln einer Tabelle verwendete Master-Key-ID aus einer UUID und einer KEY-ID, die aus dem Tablespace-Header gelesen wird. Was wir jetzt tun, ist, diese Informationen im Tablespace-Verschlüsselungsheader zu aktualisieren, damit der Server den richtigen Hauptschlüssel erhält.

Wenn wir Tablespaces von unterschiedlichen Standorten haben, beispielsweise aus unterschiedlichen Backups, dann verwenden sie möglicherweise unterschiedliche Hauptschlüssel. Alle diese Hauptschlüssel müssen beim Starten des Servers aus dem Repository abgerufen werden. Dies kann den Serverstart verlangsamen, insbesondere wenn ein serverseitiger Schlüsselspeicher verwendet wird. Bei der Master-Key-Rotation verschlüsseln wir Tablespace-Schlüssel mit einem einzigen Master-Schlüssel neu, der für alle Tablespaces derselbe ist. Der Server sollte jetzt beim Start nur einen Hauptschlüssel erhalten.

Das ist natürlich nur ein angenehmer Nebeneffekt. Der Hauptzweck der Hauptschlüsselrotation besteht darin, unseren Server sicherer zu machen. Für den Fall, dass der Hauptschlüssel auf irgendeine Weise aus dem Tresor gestohlen wurde (z. B. vom Vault-Server), besteht die Möglichkeit, einen neuen Hauptschlüssel zu generieren und die Tablespace-Schlüssel neu zu verschlüsseln, wodurch der gestohlene Schlüssel ungültig wird. Wir sind in Sicherheit ... fast.

In einem früheren Artikel habe ich darüber gesprochen, wie ein Dritter, sobald ein Tablespace-Schlüssel gestohlen wurde, ihn zum Entschlüsseln der Daten verwenden kann. Vorausgesetzt, es besteht Zugriff auf unsere Festplatte. Wenn der Hauptschlüssel gestohlen wird und Sie Zugriff auf die verschlüsselten Daten haben, können Sie den gestohlenen Hauptschlüssel verwenden, um den Tablespace-Schlüssel zu entschlüsseln und die entschlüsselten Daten zu erhalten. Wie Sie sehen, hilft die Drehung des Hauptschlüssels in diesem Fall nicht. Wir verschlüsseln den Tablespace-Schlüssel erneut mit dem neuen Hauptschlüssel, aber der tatsächliche Schlüssel, der zum Ver-/Entschlüsseln der Daten verwendet wird, bleibt derselbe. Daher kann der „Hacker“ es weiterhin zum Entschlüsseln der Daten verwenden. Das habe ich vorhin schon angedeutet Percona-Server für MySQL kann eine echte Tablespace-Neuverschlüsselung durchführen, nicht nur eine einfache Tablespace-Schlüssel-Neuverschlüsselung. Diese Funktion wird als Verschlüsselungsthreads bezeichnet. Allerdings ist diese Funktionalität derzeit noch experimentell.

Die Rotation des Hauptschlüssels ist nützlich, wenn der Hauptschlüssel gestohlen wird, es für einen Angreifer jedoch keine Möglichkeit gibt, ihn zu verwenden und die Tablespace-Schlüssel zu entschlüsseln.

Melden Sie sich für eine kostenlose Demo-Lektion an.

Weiterlesen:

Source: habr.com