Šifriranje v MySQL: rotacija glavnega ključa

V pričakovanju začetka novega vpisa na tečaj "Baza podatkov" nadaljujemo z objavo serije člankov o šifriranju v MySQL.

V prejšnjem članku v tej seriji smo razpravljali kako deluje šifriranje z glavnim ključem. Danes si na podlagi prej pridobljenega znanja poglejmo vrtenje glavnih tipk.

Rotacija glavnega ključa vključuje generiranje novega glavnega ključa in ponovno šifriranje ključev prostora tabel (ki so shranjeni v glavah prostora tabel) s tem novim ključem.

Spomnimo se, kako je videti glava šifriranega prostora tabel:

Šifriranje v MySQL: rotacija glavnega ključa

Iz prejšnjega članka vemo, da strežnik ob zagonu prebere glave vseh šifriranih prostorov tabel in si zapomni največji ID KLJUČA. Na primer, če imamo tri tabele s KEYID = 3 in ena tabela s KLJUČEMID = 4, potem bo največji ID ključa 4. Poimenujmo to ID KLJUČA - MAX KEY ID.

Kako deluje vrtenje glavnega ključa

1. Uporabnik izvede ALTER INNODB MASTER KEY.

2. Strežnik zahteva, da obesek ključev ustvari nov glavni ključ s strežnikovim UUID in KEYID enak ena plus MAXKEYID. Tako dobimo ID glavnega ključa, ki je enak INNODBKEY-UUID-(MAXKEYID + 1). Po uspešnem ustvarjanju glavnega ključa se MAX KEY ID poveča za eno (tj. MAXKEYID=MAXKEYID + 1).

3. Strežnik pregleda vse prostore tabel, šifrirane z glavnim ključem, in za vsak prostor tabel:

  • šifrira ključ prostora tabel z novim glavnim ključem;

  • posodobi ID ključa na nov MAXKEYID;

  • če se UUID razlikuje od UUID strežnika, posodobite UUID strežnika.

Kot vemo, ID glavnega ključa, ki se uporablja za dešifriranje tabele, sestoji iz UUID-ja in ID-ja KLJUČA, prebranega iz glave prostora tabel. Kar počnemo zdaj, je posodabljanje teh informacij v glavi šifriranja prostora tabel, tako da strežnik prejme pravilen glavni ključ.

Če imamo prostore tabel z različnih lokacij, na primer različne varnostne kopije, lahko uporabljajo različne glavne ključe. Vse te glavne ključe bo treba pridobiti iz repozitorija, ko se strežnik zažene. To lahko upočasni zagon strežnika, zlasti če se uporablja shramba ključev na strani strežnika. Z rotacijo glavnega ključa ponovno šifriramo ključe prostora tabel z enim glavnim ključem, ki je enak za vse prostore tabel. Strežnik bi moral zdaj ob zagonu prejeti samo en glavni ključ.

To je seveda le prijeten stranski učinek. Glavni namen rotacije glavnega ključa je povečati varnost našega strežnika. V primeru, da je bil glavni ključ nekako ukraden iz trezorja (na primer iz strežnika trezorja), je mogoče ustvariti nov glavni ključ in ponovno šifrirati ključe prostora tabel, s čimer razveljavite ukradeni ključ. Varni smo ... skoraj.

V prejšnjem članku sem govoril o tem, kako lahko tretja oseba, ko je ključ prostora tabel ukraden, uporabi za dešifriranje podatkov. Pod pogojem, da je dostop do našega diska. Če je glavni ključ ukraden in imate dostop do šifriranih podatkov, lahko z ukradenim glavnim ključem dešifrirate ključ prostora tabel in pridobite dešifrirane podatke. Kot lahko vidite, rotacija glavnega ključa v tem primeru ne pomaga. Ključ prostora tabel ponovno šifriramo z novim glavnim ključem, vendar dejanski ključ, uporabljen za šifriranje/dešifriranje podatkov, ostane enak. Zato ga lahko "heker" še naprej uporablja za dešifriranje podatkov. Prej sem namignil na to Strežnik Percona za MySQL lahko izvede resnično ponovno šifriranje prostora tabel, ne le preprosto ponovno šifriranje ključa prostora tabel. Ta funkcija se imenuje šifrirne niti. Vendar je ta funkcija trenutno še poskusna.

Vrtenje glavnega ključa je uporabno, ko je glavni ključ ukraden, vendar ni možnosti, da bi ga napadalec uporabil in dešifriral ključe prostora tabel.

Prijavite se na brezplačno predstavitveno lekcijo.

Preberi več:

Vir: www.habr.com