V předvečer zahájení nového zápisu do kurzu pokračujeme v publikování série článků o šifrování v MySQL.
V předchozím článku této série jsme prodiskutovali, . Dnes, na základě předchozích znalostí, se podíváme na rotaci hlavních klíčů.
Rotace hlavních klíčů spočívá v tom, že se vygeneruje nový hlavní klíč a tímto novým klíčem se znovu zašifrují klíče tabulkových prostorů (které jsou uloženy v hlavičkách tabulkových prostorů).
Pojďme si připomenout, jak vypadá hlavička zašifrovaného tabulkového prostoru:

Z předchozího článku víme, že server při spuštění načítá hlavičky všech zašifrovaných tabulkových prostorů a zapamatuje si největší KEY ID. Například, pokud máme tři tabulky s KEYID = 3 a jednu tabulku s KEYID = 4, pak maximální identifikátor klíče bude roven 4. Označme tento KEY ID jako MAX KEY ID.
Jak probíhá rotace hlavního klíče
1. Uživatel provede ALTER INNODB MASTER KEY.
2. Server požaduje v úložišti klíčů (keyring) vygenerování nového hlavního klíče s UUID serveru a KEYID, které je rovno zvýšenému o jedničku MAXKEYID. Tímto získáme identifikátor hlavního klíče, který je rovný INNODBKEY-UUID- (MAXKEYID + 1). Při úspěšné generaci hlavního klíče se MAX KEY ID zvyšuje o jedničku (tj. MAXKEYID = MAXKEYID + 1).
3. Server prochází všechny tabulkové prostory, zašifrované pomocí hlavního klíče, a pro každý tabulkový prostor:
zašifruje klíč tabulkového prostoru novým hlavním klíčem;
aktualizuje identifikátor klíče na nový MAXKEYID;
pokud se UUID liší od UUID serveru, aktualizuje UUID serveru.
Jak víme, identifikátor hlavního klíče (Master Key ID), používaný pro dešifrování tabulky, se skládá z UUID a KEY ID, které jsou načteny z hlavičky tabulkového prostoru. Co právě děláme, je aktualizace těchto informací v hlavičce šifrování tabulkového prostoru, aby server získal správný hlavní klíč.
Pokud máme tabulková prostory získaná z různých míst, například z různých záloh, mohou mít různé hlavní klíče. Všechny tyto hlavní klíče bude třeba získat z úložiště při spuštění serveru. To může zpomalit spuštění serveru, zejména pokud se používá serverové úložiště klíčů. Pomocí rotace hlavního klíče znovu šifrujeme klíče tabulkových prostorů jediným hlavním klíčem, který je stejný pro všechny tabulkové prostory. Nyní při spuštění server získá pouze jeden hlavní klíč.
To je samozřejmě pouze příjemný vedlejší efekt. Hlavním cílem rotace hlavních klíčů je učinit náš server bezpečnějším. V případě, že byl hlavní klíč nějakým způsobem ukraden z úložiště (například ze serveru Vault), lze vygenerovat nový hlavní klíč a znovu zašifrovat klíče tabulkových prostorů, což učiní ukradený klíč neplatným. Jsme v bezpečí... téměř.
V předchozím článku jsem zmiňoval, že po krádeži klíče tabulkového prostoru může třetí strana použít klíč k dešifrování dat. Za předpokladu, že má přístup k našemu disku. V případě krádeže hlavního klíče a přístupu k zašifrovaným datům lze použít ukradený hlavní klíč k dešifrování klíče tabulkového prostoru a získat dešifrovaná data. Jak vidíme, rotace hlavního klíče v tomto případě nepomáhá. Znovu šifrujeme klíč tabulkového prostoru novým hlavním klíčem, ale skutečný klíč používaný k šifrování/dešifrování dat zůstává stejný. Proto může „hacker“ nadále používat tento klíč k dešifrování dat. Dříve jsem naznačil, že může provádět skutečné opětovné šifrování tabulkových prostorů, a ne pouze jednoduché opětovné šifrování klíče tabulkového prostoru. Tato funkce se nazývá šifrovací vlákna (encryption threads). Nicméně v tuto chvíli je tato funkčnost stále experimentální.
Rotace hlavního klíče je užitečná, když je hlavní klíč ukraden, ale útočník nemá možnost jej použít a dešifrovat klíče tabulkových prostorů.
Číst víc:
Zdroj: habr.com
