Šifriranje u MySQL: Rotacija glavnog ključa

U iščekivanju početka novog upisa za kurs "baza podataka" nastavljamo da objavljujemo seriju članaka o enkripciji u MySQL-u.

U prethodnom članku iz ove serije raspravljali smo kako funkcionira šifriranje glavnog ključa. Danas, na osnovu znanja stečenog ranije, pogledajmo rotaciju glavnih tipki.

Rotacija glavnog ključa uključuje generiranje novog glavnog ključa i ponovno šifriranje ključeva prostora tablice (koji su pohranjeni u zaglavljima prostora tablice) ovim novim ključem.

Prisjetimo se kako izgleda zaglavlje šifriranog prostora tablice:

Šifriranje u MySQL: Rotacija glavnog ključa

Iz prethodnog članka znamo da server čita zaglavlja svih šifriranih tabličnih prostora pri pokretanju i pamti najveći KEY ID. Na primjer, ako imamo tri tabele sa KEYID = 3 i jedna tabela sa KLJUČOMID = 4, tada će maksimalni ID ključa biti 4. Nazovimo ovaj KEY ID - MAX KEY ID.

Kako funkcionira rotacija glavnog ključa

1. Korisnik izvršava ALTER INNODB MASTER KEY.

2. Server traži od prstena ključeva da generiše novi glavni ključ sa UUID-om i KLJUČOM serveraID jednak jedan plus MAXKLJUČNIID. Tako dobijamo ID glavnog ključa jednak INNODBKLJUČ-UUID-(MAXKLJUČNIID + 1). Nakon uspješnog generiranja glavnog ključa, MAX KEY ID se povećava za jedan (tj. MAXKLJUČNIID=MAXKLJUČNIID + 1).

3. Server skenira sve tablične prostore šifrirane glavnim ključem, a za svaki prostor tablice:

  • šifrira ključ prostora tablice novim glavnim ključem;

  • ažurira ID ključa na novi MAXKLJUČNIID;

  • ako se UUID razlikuje od UUID servera, ažurirajte UUID servera.

Kao što znamo, ID glavnog ključa koji se koristi za dešifriranje tabele sastoji se od UUID-a i KEY ID-a koji se čita iz zaglavlja prostora tablice. Ono što sada radimo je ažuriranje ovih informacija u zaglavlju šifriranja prostora tablice tako da server primi ispravan glavni ključ.

Ako imamo tablične prostore s različitih lokacija, kao što su različite sigurnosne kopije, onda oni mogu koristiti različite glavne ključeve. Svi ovi glavni ključevi će se morati preuzeti iz spremišta kada se server pokrene. Ovo može usporiti pokretanje servera, posebno ako se koristi skladište ključeva na strani servera. Uz rotaciju glavnog ključa, ponovo šifriramo ključeve tabličnog prostora jednim glavnim ključem koji je isti za sve prostore tablice. Server bi sada trebao dobiti samo jedan glavni ključ pri pokretanju.

Ovo je, naravno, samo prijatna nuspojava. Glavna svrha rotacije glavnog ključa je da naš server učini sigurnijim. U slučaju da je glavni ključ na neki način ukraden iz trezora (na primjer, sa servera trezora), moguće je generirati novi glavni ključ i ponovo šifrirati ključeve prostora tablice, čime se ukradeni ključ poništava. Sigurni smo...skoro.

U prethodnom članku govorio sam o tome kako kada je ključ prostora tablice ukraden, treća strana ga može koristiti za dešifriranje podataka. Pod uslovom da postoji pristup našem disku. Ako je glavni ključ ukraden i imate pristup šifriranim podacima, možete koristiti ukradeni glavni ključ da dešifrujete ključ prostora tablice i dobijete dešifrirane podatke. Kao što vidite, rotacija glavnog ključa u ovom slučaju ne pomaže. Ponovno šifriramo ključ prostora tablice novim glavnim ključem, ali stvarni ključ koji se koristi za šifriranje/dešifriranje podataka ostaje isti. Stoga "haker" može nastaviti da ga koristi za dešifriranje podataka. Ranije sam to nagovestio Percona server za MySQL može izvršiti istinsko ponovno šifriranje prostora tablice, a ne samo ponovno šifriranje ključa tabličnog prostora. Ova karakteristika se naziva niti enkripcije. Međutim, ova funkcionalnost je trenutno još uvijek eksperimentalna.

Rotacija glavnog ključa je korisna kada je glavni ključ ukraden, ali ne postoji način da ga napadač iskoristi i dešifruje ključeve prostora tablice.

Prijavite se za besplatnu demo lekciju.

Čitaj više:

izvor: www.habr.com