Az új kurzus indítása előtt Folytatjuk a MySQL titkosítással foglalkozó cikkek sorozatát.
A sorozat előző cikkében arról beszéltünk, Ma, az eddig megszerzett tudásunkra alapozva, nézzük meg a fő kulcsok rotációját.
A fő kulcsok rotációja abban áll, hogy egy új fő kulcsot generálunk, és ezzel az új kulccsal újra titkosítjuk a táblatér kulcsait (amelyek a táblatér fejlécében találhatók).
Nézzük meg, hogyan néz ki az egy titkosított táblatér fejléc:

Az előző cikkből tudjuk, hogy a szerver indításkor beolvassa az összes titkosított táblatér fejlécét, és megjegyzi a legnagyobb KEY ID-t. Például, ha van három táblánk KEYID = 3, és egy táblánk KEYID = 4, akkor a kulcs maximális azonosítója 4 lesz. Ezt a KEY ID-t nevezzük MAX KEY ID-nak.
Hogyan működik a fő kulcs rotációja
1. A felhasználó végrehajtja az ALTER INNODB MASTER KEY parancsot.
2. A szerver a kulcskészletben (keyring) kér egy új fő kulcs generálását a szerver UUID-jával és a KEYID-vel, amely megegyezik a MAXKEYID egyesével növelt értékével. Így a fő kulcs azonosítója INNODBKEY-UUID- (MAXKEYID + 1) lesz. A fő kulcs sikeres generálása után a MAX KEY ID egyesével növekszik (vagyis MAXKEYID = MAXKEYID + 1).
3. A szerver átnézi az összes táblateret, amelyet a fő kulccsal titkosítottak, és minden táblatér esetében:
titkosítja a táblatér kulcsát az új fő kulccsal;
frissíti a kulcs azonosítót az új MAXKEYID-vel;
ha a UUID eltér a szerver UUID-jától, frissíti a szerver UUID-ját.
Ahogy tudjuk, a táblázat visszafejtésére használt fő kulcs azonosító (Master Key ID) a táblatér fejlécéből kiolvasott UUID-ból és KEY ID-ból áll. Jelenleg azt a célt szolgáljuk, hogy frissítjük ezt az információt a táblatér titkosítási fejlécében, hogy a szerver megkapja a helyes fő kulcsot.
Ha különböző helyekről, például különböző biztonsági mentésekből származó táblaterek állnak rendelkezésünkre, akkor azok eltérő fő kulcsokat használhatnak. Mindezeket a fő kulcsokat a szerver indításakor le kell kérdezni a tárolóból. Ez lelassíthatja a szerver indítását, különösen, ha kulcs tárolószolgáltatást használunk. A fő kulcs rotációjával újra titkosítjuk a táblatér kulcsait egyetlen fő kulccsal, amely minden táblatér számára azonos. Így indításkor a szervernek csak egy fő kulcsot kell lekérdeznie.
Ez természetesen csak egy kellemes mellékhatás. A fő kulcstokozás fő célja, hogy biztonságosabbá tegye a szerverünket. Ha a fő kulcs valamilyen módon ellopásra kerül a tárolóból (például a Vault Serverből), új fő kulcsot generálhatunk, és újra titkosíthatjuk a táblater kulcsokat, érvénytelenítve a lopott kulcsot. Biztonságban vagyunk… majdnem.
Az előző cikkemben említettem, hogy ha a táblatér kulcsa ellopásra kerül, egy harmadik fél használhatja azt az adatok visszafejtésére, amennyiben hozzáférése van a lemezünkhöz. Ha a fő kulcs ellopásra kerül, és hozzáférés van a titkosított adatokhoz, a lopott fő kulcsot használhatják a táblatér kulcsának visszafejtésére, ezzel megkapva a visszafejtett adatokat. Ahogy látjuk, a fő kulcs rotációja ebben az esetben nem segít. Újra titkosítjuk a táblatér kulcsát egy új fő kulccsal, de az a tényleges kulcs, amelyet az adatok titkosításához/visszafejtéséhez használnak, változatlan marad. Így a "hackerek" továbbra is használhatják azt az adatok visszafejtésére. Korábban már utaltam arra, hogy valódi újratitkosítást végezhet a táblaterek esetében, nem csak a táblatér kulcsának egyszerű újratitkosítását. Ezt a funkciót titkosítási szálaknak (encryption threads) nevezik. Jelenleg ez a funkcionalitás még mindig kísérleti.
A fő kulcs rotáció hasznos, amikor a fő kulcsot ellopják, de a támadónak nincs lehetősége arra, hogy azt felhasználja a táblater kulcsainak visszafejtésére.
Tovább olvasva:
Forrás: habr.com
