Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Encryption by Certificate

Termin Definicja
Encryption by Certificate

Encryption by Certificate to metoda szyfrowania danych w SQL Server wykorzystująca certyfikat jako klucz zabezpieczający.

Certyfikat w hierarchii szyfrowania SQL Server

Encryption by Certificate w SQL Server oznacza wykorzystanie obiektu typu certificate do ochrony danych kryptograficznych. Certyfikat w tym mechanizmie zawiera klucz publiczny oraz powiązany z nim klucz prywatny. Klucz publiczny może służyć do szyfrowania, natomiast odszyfrowanie wymaga dostępu do klucza prywatnego. SQL Server przechowuje certyfikaty w bazie danych i może używać ich między innymi do szyfrowania kluczy symetrycznych, danych zapisanych w kolumnach oraz innych sekretów obsługiwanych przez mechanizmy Database Engine.

Certyfikat jest elementem hierarchii kluczy SQL Server, a nie zamiennikiem wszystkich pozostałych mechanizmów ochrony. W typowej hierarchii znajduje się klucz główny usługi, klucz główny bazy danych, certyfikat lub asymetryczny klucz oraz klucz symetryczny. Klucz główny bazy danych, tworzony poleceniem CREATE MASTER KEY, zabezpiecza obiekty kryptograficzne w danej bazie. Jeżeli certyfikat ma być używany do szyfrowania danych, trzeba również zadbać o ochronę i kopię zapasową klucza głównego oraz samego certyfikatu wraz z kluczem prywatnym.

EncryptByCert i sposób ochrony wartości

SQL Server udostępnia funkcję EncryptByCert, która szyfruje dane przy użyciu klucza publicznego certyfikatu. Funkcja przyjmuje identyfikator certyfikatu oraz dane przeznaczone do zaszyfrowania i zwraca wartość typu varbinary. Do uzyskania identyfikatora można użyć funkcji Cert_ID, na przykład EncryptByCert(Cert_ID(N'CertyfikatDanych'), @tekst). Wynik nie jest tekstem czytelnym dla użytkownika i zwykle zapisuje się go w kolumnie binarnej, takiej jak varbinary(max).

Odszyfrowanie wykonuje funkcja DecryptByCert. Wymaga ona identyfikatora certyfikatu oraz zaszyfrowanej wartości, a SQL Server korzysta przy tym z prywatnego klucza certyfikatu. Jeżeli certyfikat został utworzony bez prywatnego klucza, nie może służyć do odszyfrowywania danych. Uprawnienia do użycia certyfikatu mają znaczenie praktyczne: użytkownik wykonujący operację musi mieć odpowiednie uprawnienia do certyfikatu i klucza prywatnego. Po odebraniu dostępu odszyfrowanie przez ten użytkownik może zakończyć się błędem uprawnień, nawet gdy sama wartość w tabeli nie została zmieniona.

Ograniczenia szyfrowania asymetrycznego

Bezpośrednie szyfrowanie każdej wartości certyfikatem nie jest zwykle właściwą metodą dla dużych pól. Certyfikat wykorzystuje kryptografię asymetryczną, która ma większy narzut obliczeniowy i ograniczenie rozmiaru danych możliwych do zaszyfrowania pojedynczą operacją. Dokładny limit zależy od użytego algorytmu oraz długości klucza. Dlatego w SQL Server częściej stosuje się schemat hybrydowy: losowy klucz symetryczny szyfruje właściwe dane, a certyfikat szyfruje ten klucz symetryczny.

Do pracy z takim schematem służą między innymi polecenia CREATE SYMMETRIC KEY, OPEN SYMMETRIC KEY, EncryptByKey oraz DecryptByKey. Certyfikat może otwierać lub zabezpieczać klucz symetryczny, a dane są przetwarzane szybszym algorytmem symetrycznym. Trzeba pamiętać, że klucz symetryczny jest otwierany w ramach sesji. Po otwarciu można wykonywać operacje na danych, lecz zamknięcie sesji albo użycie CLOSE SYMMETRIC KEY uniemożliwia dalsze odszyfrowywanie do czasu ponownego otwarcia klucza. Zmiana definicji certyfikatu lub usunięcie jego prywatnego klucza może uniemożliwić odzyskanie wcześniej zaszyfrowanych wartości.

Dobór mechanizmu i kontrola odzyskiwania danych

Encryption by Certificate powinno być dobierane do konkretnego celu. Szyfrowanie pojedynczych, niewielkich wartości funkcją EncryptByCert może być uzasadnione, gdy aplikacja potrzebuje ochrony wybranych pól i kontrolowanego odszyfrowywania. Dla większych danych praktyczniejszy jest klucz symetryczny zabezpieczony certyfikatem. Taki mechanizm nie zastępuje kontroli dostępu do bazy, bezpiecznej konfiguracji połączeń ani kopii zapasowych. Zaszyfrowany tekst bez właściwego certyfikatu i prywatnego klucza może stać się nieużyteczny, dlatego procedura odtwarzania musi obejmować wszystkie zależności kryptograficzne.

Podczas diagnostyki problemu z odczytem zaszyfrowanych danych sprawdza się przede wszystkim istnienie certyfikatu w odpowiedniej bazie, obecność prywatnego klucza, uprawnienia użytkownika, poprawny identyfikator zwracany przez Cert_ID oraz typ kolumny przechowującej wynik binarny. Warto także rozróżnić szyfrowanie certyfikatem od Transparent Data Encryption, które chroni pliki bazy i kopie zapasowe na poziomie stron danych, oraz od szyfrowania połączenia sieciowego. Każdy z tych mechanizmów działa w innym miejscu i rozwiązuje inny problem, dlatego błędna identyfikacja zastosowanej technologii może prowadzić do nieprawidłowej diagnozy.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę