Szyfrowanie w MySQL: rotacja klucza głównego

W przededniu nowego naboru na kurs „Bazy danych” kontynuujemy publikację serii artykułów na temat szyfrowania w MySQL.

W poprzednim artykule tej serii omówiliśmy, jak działa szyfrowanie z głównym kluczem (Master Key). Dziś, opierając się na wcześniej zdobytej wiedzy, przyjrzymy się rotacji głównych kluczy.

Rotacja głównych kluczy polega na tym, że generowany jest nowy główny klucz, a tym nowym kluczem ponownie szyfrowane są klucze przestrzeni tabel (które są przechowywane w nagłówkach przestrzeni tabel).

Przypomnijmy sobie, jak wygląda nagłówek zaszyfrowanej przestrzeni tabel:

Szyfrowanie w MySQL: rotacja klucza głównego

Z poprzedniego artykułu wiemy, że serwer podczas uruchomienia odczytuje nagłówki wszystkich zaszyfrowanych przestrzeni tabel i zapamiętuje największy IDENTYFIKATOR KLUCZA. Na przykład, jeśli mamy trzy tabele z IDENTYFIKATOREM KLUCZA= 3 oraz jedną tabelę z IDENTYFIKATOREM KLUCZA= 4, to maksymalny identyfikator klucza wynosi 4. Nazwijmy ten IDENTYFIKATOR KLUCZA – MAX IDENTYFIKATOR KLUCZA.

Jak działa rotacja głównego klucza

1. Użytkownik wykonuje ALTER INNODB MASTER KEY.

2. Serwer żąda w magazynie kluczy (keyring) wygenerowania nowego głównego klucza z UUID serwera i IDENTYFIKATOREM KLUCZA, równym zwiększonemu o jeden MAXIDENTYFIKATOR KLUCZA.W ten sposób uzyskujemy identyfikator głównego klucza równy INNODBKEY-UUID- (MAXIDENTYFIKATOR KLUCZA.ID + 1). Po pomyślnym wygenerowaniu głównego klucza MAX IDENTYFIKATOR KLUCZA zwiększa się o jeden (tj. MAXIDENTYFIKATOR KLUCZA.ID = MAXIDENTYFIKATOR KLUCZA.ID + 1).

3. Serwer przegląda wszystkie przestrzenie tabel, zaszyfrowane przy użyciu głównego klucza, a dla każdej przestrzeni tabel:

  • szyfruje klucz przestrzeni tabel nowym głównym kluczem;

  • aktualizuje identyfikator klucza na nowy MAXIDENTYFIKATOR KLUCZA.IDENTYFIKATOR KLUCZA;

  • jeśli UUID różni się od UUID serwera, to aktualizuje UUID serwera.

Jak wiemy, identyfikator głównego klucza (Master Key ID), używany do deszyfrowania tabeli, składa się z UUID i IDENTYFIKATORA KLUCZA, odczytanych z nagłówka przestrzeni tabel. To, co teraz robimy, to aktualizujemy te informacje w nagłówku szyfrowania przestrzeni tabel, aby serwer uzyskiwał właściwy główny klucz.

Jeśli mamy przestrzenie tabelowe uzyskane z różnych miejsc, na przykład z różnych kopii zapasowych, mogą one używać różnych głównych kluczy. Wszystkie te klucze główne będą musiały być uzyskane z magazynu podczas uruchamiania serwera. Może to spowolnić uruchamianie serwera, szczególnie jeśli używane jest serwerowe przechowywanie kluczy. Dzięki rotacji klucza głównego ponownie szyfrujemy klucze przestrzeni tabelowych jednym kluczem głównym, identycznym dla wszystkich przestrzeni tabelowych. Teraz, podczas uruchamiania, serwer musi uzyskać tylko jeden klucz główny.

Oczywiście jest to tylko miły efekt uboczny. Głównym celem rotacji kluczy głównych jest zwiększenie bezpieczeństwa naszego serwera. W przypadku, gdy klucz główny został w jakiś sposób skradziony z magazynu (na przykład z Vault Server), można wygenerować nowy klucz główny i ponownie zaszyfrować klucze przestrzeni tabelowych, czyniąc skradziony klucz nieważnym. Jesteśmy bezpieczni… prawie.

W poprzednim artykule mówiłem o tym, że po kradzieży klucza przestrzeni tabelowej strona trzecia może go użyć do odszyfrowania danych, pod warunkiem, że ma dostęp do naszego dysku. W przypadku kradzieży klucza głównego i dostępu do zaszyfrowanych danych można użyć skradzionego klucza głównego do odszyfrowania klucza przestrzeni tabelowej i uzyskania odszyfrowanych danych. Jak widać, rotacja klucza głównego w tym przypadku nie pomaga. Ponownie szyfrujemy klucz przestrzeni tabelowej nowym kluczem głównym, ale faktyczny klucz używany do szyfrowania/dekodowania danych pozostaje ten sam. Dlatego „hacker” może nadal go używać do odszyfrowania danych. Wcześniej wspomniałem, że Percona Server for MySQL może wykonywać prawdziwą ponowną rotację szyfrowania przestrzeni tabelowych, a nie tylko prostą ponowną rotację klucza przestrzeni tabelowej. Ta funkcjonalność nazywa się wątkami szyfrowania (encryption threads). Jednak w tej chwili ta funkcjonalność jest nadal eksperymentalna.

Rotacja klucza głównego jest przydatna, gdy klucz główny został skradziony, ale napastnik nie ma możliwości jego użycia i odszyfrowania kluczy przestrzeni tabelowych.

Zapisz się na bezpłatną lekcję demonstracyjną.

Czytaj dalej:

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster