Service Master Key, Database Master Key, certyfikaty, klucze czyli model szyfrowania w SQL Server

W poprzednim wpisie podjąłem tematykę bezpieczeństwa danych w SQL Server i sporo w nim było o rozwiązaniach szyfrujących. Jednak w implementacji rozwiązań takich jak Cell-Level, Transparent Data Encryption czy Backup Encrypted, nie możemy pominąć przygotowania zestawów kluczy i certyfikatów. Chcąc kontynuować omawianie rozwiązań bezpieczeństwa uznałem, że warto zacząć od przedstawienia modelu szyfrowania w SQL Server.

Schemat modelu szyfrowania w SQL Server

Spójrz na schemat, sam w sobie wiele wyjaśnia. Resztę doczytaj poniżej w celu doprecyzowania pewnych zagadnień. Na końcu umieściłem przykłady, które też warto prześledzić.

Service Master Key, Database Master Key, certyfikaty, klucze czyli model szyfrowania w SQL Server

Service Master Key

Service Master Key (SMK) jest kluczem symetrycznym, głównym dla instancji SQL Server. Tutaj w zasadzie nie musimy nic robić. SMK jest automatycznie tworzony podczas pierwszego szyfrowania i powiązany z kontem usługi SQL Server. Wykorzystywany jest do tego Windows Data Protection API (DPAPI), dokładniej metoda CryptProtectData() oraz klucz lokalnej maszyny. Najważniejsze, Service Master Key Służy do zaszyfrowania Database Master Key (DMK).

Dobrą praktyką jest wykonanie kopii zapasowej Servce Master Key. Gdy będziemy przenosić SQL Server na inny serwer, przywrócenie klucza SMK może być niezbędne.

Database Master Key

W warstwie niżej mamy Database Master Key. DMK jest również kluczem symetrycznym służącym do ochrony certyfikatów i kluczy asymetrycznych. Dla każdej bazy danych przypada tylko jeden taki klucz lecz nie jest on wymagany. DMK jest szyfrowany hasłem oraz domyślnie kluczem Service Master Key. Celem szyfrowania poprzez SMK jest umożliwienie serwerowi wewnętrznego odszyfrowania DMK bez podawania hasła. W tym celu Database Master Key zapisywany jest nie tylko w bazie, dla której został wygenerowany, ale również w bazie master. Kopia tego klucza jest za każdym razem aktualizowana, gdy nastąpi jakakolwiek zmiana.

Wykorzystując polecenie ALTER MASTER KEY wraz z DROP ENCRYPTION BY SERVICE MASTER KEY możemy zrezygnować z szyfrowania klucza DMK poprzez SMK. Database Master Key, który nie jest w ten sposób szyfrowany, musi zostać otwarty przy użyciu instrukcji OPEN MASTER KEY wraz z hasłem.

W SQL Server 2008 i 2008 R2 do tworzenia kluczy używany jest algorytm 3DES, natomiast w wersjach nowszych jest to AES_256.

Certyfikaty oraz klucze asymetryczne

Poziom niżej występują certyfikaty bądź klucze asymetryczne. Jedno i drugie rozwiązanie wykorzystuje asymetryczny algorytm kryptograficzny – RSA. Pod tym względem nie ma różnicy między nimi w odniesieniu do siły szyfru, biorąc pod uwagę tę samą długość klucza. Od razu warto wspomnieć, algorytmy poniżej RSA_2048 są nierekomendowane i nie należy ich używać.

Certyfikatami możemy bezpośrednio szyfrować dane lub użyć do szyfrowania kluczy symetrycznych. Mamy możliwość wykorzystania certyfikatów dostarczonych z zewnątrz lub wygenerowania w SQL Server.

Druga opcja to klucze asymetryczne. Mogą być również wykorzystywane szyfrowania danych i podpisywania obiektów bazy danych. Klucz asymetryczny składa się z klucza prywatnego i odpowiedniego klucza publicznego, identycznie jak w certyfikatach. Klucz prywatny zarówno w certyfikacie jak i w kluczu asymetrycznym domyślnie szyfrowany jest przy użyciu Database Master Key. Można również zrezygnować z DMK i użyć do zaszyfrowania hasła dodając do polecenia ENCRYPTION BY PASSWORD oraz nasze silne hasło.

Co lepsze? Nie potrafię jednoznacznie odpowiedzieć. Niektórych do certyfikatów przekonuje możliwość wyeksportowania go do pliku .CER.

Klucze symetryczne

Ostatnie są klucze symetryczne. Do stworzenia tego klucza wykorzystuje się AES, które jest szyfrem symetrycznym, co oznacza, że do szyfrowania jak i odszyfrowywania wykorzystywany jest ten sam klucz. Co prawda w dokumentacji mowa jest też o algorytmach takich jak 3DES lub RC4. Jednak tylko algorytmy AES_128, AES_192 i AES_256 NIE są uważane za przestarzałe. Klucze symetryczne w SQL Server muszą zostać zaszyfrowane z jednym z elementów: certyfikatem, kluczem asymetrycznym, hasłem.

Podsumowanie

Service Master Key mamy z „pudełka”. Database Master Key dodajemy osobno dla każdej bazy, choć nie jest to wymagane. Następnie tworzymy certyfikaty lub klucze asymetryczne, szyfrując je za pomocą DMK lub hasła. Na końcu pozostają nam klucze symetryczne do szyfrowania danych . W celu uzyskania najlepszej wydajność, należy szyfrować dane za pomocą kluczy symetrycznych zamiast certyfikatów lub kluczy asymetrycznych. Ponad to używaj zawszę silnych algorytmów szyfrowania. Obecnie dla kluczy asymetrycznych minimum to RSA_2048 natomiast dla certyfikatów oraz kluczy symetrycznych AES_256. Zawsze pamięta o silnych hasłach przy tworzeniu wszelkich kluczy.

Na koniec dwa skrypty, jeden z kluczem DMK, drugi bez niego wraz z certyfikatami oraz kluczami asymetrycznymi i symetrycznymi.

Service Master Key, Database Master Key, certyfikaty, klucze czyli model szyfrowania w SQL Server

Service Master Key, Database Master Key, certyfikaty, klucze czyli model szyfrowania w SQL Server

Z pasją poświęcam czas na zdobywanie wiedzy w zakresie szeroko rozumianej Data Platform. Zachwycony językiem skryptowym Windows PowerShell. Swoją wiedzę, doświadczenia i spostrzeżenia opisuję na blogu.

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *