Šifrovanie v MySQL: Rotácia hlavného kľúča

V očakávaní začiatku nového zápisu do kurzu "databáza" pokračujeme v publikovaní série článkov o šifrovaní v MySQL.

V predchádzajúcom článku tejto série sme diskutovali ako funguje šifrovanie hlavného kľúča. Dnes sa na základe poznatkov získaných skôr pozrime na rotáciu hlavných kláves.

Rotácia hlavného kľúča zahŕňa vygenerovanie nového hlavného kľúča a opätovné zašifrovanie kľúčov tabuľkového priestoru (ktoré sú uložené v hlavičkách tabuľkového priestoru) týmto novým kľúčom.

Pripomeňme si, ako vyzerá hlavička šifrovaného tabuľkového priestoru:

Šifrovanie v MySQL: Rotácia hlavného kľúča

Z predchádzajúceho článku vieme, že server pri štarte číta hlavičky všetkých šifrovaných tabuľkových priestorov a pamätá si najväčšie KEY ID. Napríklad ak máme tri tabuľky s KEYID = 3 a jedna tabuľka s KĽÚČOMID = 4, potom maximálne ID kľúča bude 4. Nazvime to ID kľúča - MAX ID kľúča.

Ako funguje rotácia hlavného kľúča

1. Používateľ spustí ALTER INNODB MASTER KEY.

2. Server požaduje, aby sklad kľúčov (kľúčový zväzok) vygeneroval nový hlavný kľúč s UUID a KEY serveraID sa rovná jednej plus MAXKEYID. Takže dostaneme ID hlavného kľúča rovné INNODBKEY-UUID-(MAXKEYID + 1). Po úspešnom vygenerovaní hlavného kľúča sa MAX KEY ID zvýši o jednu (t.j. MAXKEYID=MAXKEYID + 1).

3. Server prehľadá všetky tabuľkové priestory zašifrované hlavným kľúčom a pre každý tabuľkový priestor:

  • zašifruje kľúč tabuľkového priestoru novým hlavným kľúčom;

  • aktualizuje ID kľúča na nové MAXKEYID;

  • ak sa UUID líši od UUID servera, aktualizujte UUID servera.

Ako vieme, ID hlavného kľúča používané na dešifrovanie tabuľky pozostáva z UUID a KEY ID načítaného z hlavičky tabuľkového priestoru. To, čo teraz robíme, je aktualizácia týchto informácií v hlavičke šifrovania tabuľkového priestoru, aby server dostal správny hlavný kľúč.

Ak máme tabuľkové priestory z rôznych miest, napríklad z rôznych záloh, môžu používať rôzne hlavné kľúče. Všetky tieto hlavné kľúče bude potrebné získať z úložiska pri spustení servera. To môže spomaliť spúšťanie servera, najmä ak sa používa úložisko kľúčov na strane servera. Rotáciou hlavného kľúča znova zašifrujeme kľúče tabuľkového priestoru pomocou jedného hlavného kľúča, ktorý je rovnaký pre všetky tabuľkové priestory. Server by teraz mal pri spustení dostať iba jeden hlavný kľúč.

To je, samozrejme, len príjemný vedľajší efekt. Hlavným účelom rotácie hlavného kľúča je zvýšiť bezpečnosť nášho servera. V prípade, že hlavný kľúč bol nejakým spôsobom odcudzený z trezoru (napríklad zo servera trezoru), je možné vygenerovať nový hlavný kľúč a znova zašifrovať kľúče tabuľkového priestoru, čím sa ukradnutý kľúč stane neplatným. Sme v bezpečí...takmer.

V predchádzajúcom článku som hovoril o tom, že keď je kľúč tabuľkového priestoru ukradnutý, tretia strana ho môže použiť na dešifrovanie údajov. Za predpokladu, že je prístup na náš disk. Ak je hlavný kľúč odcudzený a máte prístup k zašifrovaným údajom, môžete pomocou ukradnutého hlavného kľúča dešifrovať kľúč tabuľkového priestoru a získať dešifrované údaje. Ako vidíte, otočenie hlavného kľúča v tomto prípade nepomôže. Znova zašifrujeme kľúč tabuľkového priestoru pomocou nového hlavného kľúča, ale skutočný kľúč použitý na šifrovanie/dešifrovanie údajov zostáva rovnaký. Preto ho „hacker“ môže naďalej používať na dešifrovanie údajov. Skôr som to naznačil Server Percona pre MySQL dokáže vykonať skutočné opätovné zašifrovanie tabuľkového priestoru, nielen jednoduché opätovné zašifrovanie kľúča tabuľkového priestoru. Táto funkcia sa nazýva šifrovacie vlákna. Táto funkcia je však v súčasnosti stále experimentálna.

Rotácia hlavného kľúča je užitočná, keď je hlavný kľúč odcudzený, ale útočník ho nemôže nijako použiť a dešifrovať kľúče tabuľkového priestoru.

Prihláste sa na bezplatnú ukážkovú lekciu.

Čítaj viac:

Zdroj: hab.com