Šifravimas MySQL: Pagrindinio rakto sukimas

Laukiant naujos registracijos į kursą pradžios "duomenų bazė" ir toliau skelbiame straipsnių ciklą apie šifravimą MySQL.

Ankstesniame šios serijos straipsnyje aptarėme kaip veikia pagrindinio rakto šifravimas. Šiandien, remdamiesi anksčiau įgytomis žiniomis, pažvelkime į pagrindinių klavišų sukimąsi.

Pagrindinio rakto pasukimas apima naujo pagrindinio rakto generavimą ir lentelės srities raktų (kurie saugomi lentelės srities antraštėse) iš naujo užšifravimą šiuo nauju raktu.

Prisiminkime, kaip atrodo šifruotos lentelės srities antraštė:

Šifravimas MySQL: Pagrindinio rakto sukimas

Iš ankstesnio straipsnio žinome, kad serveris paleidžiant skaito visų užšifruotų lentelių erdvių antraštes ir prisimena didžiausią KEY ID. Pavyzdžiui, jei turime tris lenteles su KEYID = 3 ir viena lentelė su KEYID = 4, tada maksimalus rakto ID bus 4. Pavadinkime šį KEY ID – MAX KEY ID.

Kaip veikia pagrindinio rakto sukimas

1. Vartotojas vykdo ALTER INNODB MASTER KEY.

2. Serveris prašo raktų žiedo sugeneruoti naują pagrindinį raktą su serverio UUID ir KEYID lygus vienetui plius MAXPAGRINDINIAIID. Taigi gauname pagrindinio rakto ID, lygų INNODBKEY-UUID-(MAXPAGRINDINIAIID + 1). Sėkmingai sugeneravus pagrindinį raktą, MAX KEY ID padidinamas vienu (t. y. MAXPAGRINDINIAIID=MAXPAGRINDINIAIID + 1).

3. Serveris nuskaito visas lentelių sritis, užšifruotas pagrindiniu raktu, ir kiekvieną lentelių sritį:

  • užšifruoja lentelės vietos raktą nauju pagrindiniu raktu;

  • atnaujina rakto ID į naują MAXPAGRINDINIAIAsmens tapatybės dokumentas;

  • jei UUID skiriasi nuo serverio UUID, atnaujinkite serverio UUID.

Kaip žinome, pagrindinio rakto ID, naudojamas lentelei iššifruoti, susideda iš UUID ir KEY ID, nuskaityto iš lentelės srities antraštės. Šiuo metu mes atnaujiname šią informaciją lentelės erdvės šifravimo antraštėje, kad serveris gautų teisingą pagrindinį raktą.

Jei turime lentelių erdves iš skirtingų vietų, pvz., skirtingų atsarginių kopijų, tada jos gali naudoti skirtingus pagrindinius raktus. Paleidus serverį, visus šiuos pagrindinius raktus reikės gauti iš saugyklos. Tai gali sulėtinti serverio paleidimą, ypač jei naudojama serverio raktų saugykla. Naudodami pagrindinio rakto pasukimą, mes iš naujo užšifruojame lentelės srities raktus vienu pagrindiniu raktu, kuris yra vienodas visoms lentelių erdvėms. Dabar serveris paleidžiant turėtų gauti tik vieną pagrindinį raktą.

Tai, žinoma, yra tik malonus šalutinis poveikis. Pagrindinis pagrindinio rakto pasukimo tikslas yra padaryti mūsų serverį saugesnį. Tuo atveju, jei pagrindinis raktas buvo kažkaip pavogtas iš saugyklos (pavyzdžiui, iš saugyklos serverio), galima sugeneruoti naują pagrindinį raktą ir iš naujo užšifruoti lentelės srities raktus, panaikinant pavogtą raktą. Mes saugūs... beveik.

Ankstesniame straipsnyje kalbėjau apie tai, kaip pavogus lentelės vietos raktą, trečioji šalis gali jį naudoti duomenims iššifruoti. Su sąlyga, kad yra prieiga prie mūsų disko. Jei pagrindinis raktas pavogtas ir turite prieigą prie užšifruotų duomenų, galite naudoti pavogtą pagrindinį raktą iššifruoti lentelės erdvės raktą ir gauti iššifruotus duomenis. Kaip matote, pagrindinio rakto pasukimas šiuo atveju nepadeda. Mes iš naujo užšifruojame lentelės vietos raktą nauju pagrindiniu raktu, tačiau tikrasis raktas, naudojamas duomenims užšifruoti / iššifruoti, išlieka tas pats. Todėl „hakeris“ gali ir toliau jį naudoti duomenims iššifruoti. Anksčiau aš tai užsiminiau „Percona“ serveris, skirtas „MySQL“. gali atlikti tikrą lentelės srities pakartotinį šifravimą, o ne tik paprastą lentelės srities rakto pakartotinį šifravimą. Ši funkcija vadinama šifravimo gijomis. Tačiau ši funkcija šiuo metu vis dar yra eksperimentinė.

Pagrindinio rakto pasukimas yra naudingas, kai pagrindinis raktas yra pavogtas, tačiau užpuolikas negali juo pasinaudoti ir iššifruoti lentelės srities raktus.

Užsiregistruokite į nemokamą demonstracinę pamoką.

Skaityti daugiau:

Šaltinis: www.habr.com