Szyfrowanie, hashowanie, anonimizacja… RODORODO (Rozporządzenie o Ochronie Danych Osobowych) - Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o ochronie danych). W świetle art. 13 mającego zastosowanie od 25 maja 2018 r. RODO jeśli przedsiębiorca gromadzi dane osobowe za pośrednictwem formularza kontaktowego bądź formularza zamówienia umieszczonego na stronie...Czym jest RODO? straszy programistów i właścicieli stron tymi groźnymi pojęciami, w tym wpisie wyjaśniam, na czym one polegają.

Szyfrowanie

Szyfrowanie to działanie polegające na zamianie informacji (ciągu znaków) na inny, niezrozumiały dla osoby postronnej ciąg znaków tak, żeby osoba uprawniona mogła jednak go odczytać. Owo „uprawnienie” najczęściej wiąże się z posiadaniem odpowiedniego klucza, niezbędnego do zdekodowania informacji utajnionej. Możemy mówić o szyfrowaniu symetrycznym i niesymetrycznym.

Szyfrowanie symetryczne zakłada, że istnieje ten sam klucz szyfrujący, który służy do zaszyfrowania i odszyfrowania informacji. Przykładem takiego szyfrowania, które możesz wdrożyć na swojej stronie lub w aplikacji, jest szyfrowanie mechanizmem AES, wspieranym natywnie przez PHPPHP - (Hypertext Preprocessor) to popularny język skryptowy, który jest szeroko stosowany w tworzeniu dynamicznych stron internetowych oraz aplikacji webowych. PHP jest językiem open-source, co oznacza, że jest dostępny bezpłatnie i może być modyfikowany przez użytkowników. Jednym z głównych zastosowań PHP jest generowanie dynamicznych treści na stronach internetowych. Dzięki PHP możliwe jest tworzenie stron, które reagują na dane wprowadzone przez użytkowników, co jest kluczowe w przypadku aplikacji takich jak sklep internetowy czy...Czym jest PHP? oraz MySqlMySQL to system zarządzania relacyjnymi bazami danych (RDBMS - Relational Database Management System), który jest szeroko stosowany w aplikacjach internetowych, serwisach internetowych, systemach e-commerce, systemach zarządzania treścią (CMS) i wielu innych aplikacjach. Jest to otwarte oprogramowanie, które jest dostępne bezpłatnie i obsługiwane przez społeczność deweloperów na całym świecie. MySQL wykorzystuje relacyjną strukturę danych, w której dane są przechowywane w tabelach zdefiniowanych przez zbiór kolumn i wierszy. Ta struktura umożliwia skuteczne...Czym jest MySQL?. Przepisy nie nakazują Ci bezwzględnie szyfrowania danych w bazie, ponieważ o stosowanych zabezpieczeniach administrator decyduje indywidualnie. Uważam, że w większości wypadków dobrą praktyką jest jednak szyfrowanie danych osobowych w Twojej bazie, ponieważ w razie, gdyby dostała się w niepowołane ręce, nie będzie mogła być łatwo wykorzystana. Jako twórca strony lub aplikacji dane możesz szyfrować w warstwie aplikacji albo w warstwie bazodanowej.

Szyfrowanie w aplikacjiSzyfrowanie w bazie
Szeroki wybór gotowych metod, łatwe korzystanie z dodatkowych bibliotekMały wybór metod - tylko te wspierane przez silnik bazodanowy
Możliwość tworzenia autorskich metodPraktyczny brak możliwości stosowania metod autorskich
Dane między serwerem www i bazodanowym są utajnioneDane między serwerem www i bazodanowym są jawne
Trudne wyszukiwanie informacjiŁatwe wyszukiwanie informacji
Niższa wydajnośćWyższa wydajność

Szyfrowanie w warstwie aplikacji oznacza, że informacja zostaje zaszyfrowana podczas wykonywania kodu PHP i w postaci zaszyfrowanej trafia do serwera bazodanowego. Może to być korzystne z punktu widzenia poufności danych, ponieważ jeśli serwer bazodanowy jest „oddalony” od serwera www, na którym wykonujesz kod PHP, to podczas transmisji dane będą zaszyfrowane.

Drugim plusem takiego podejścia jest to, że zbiór mechanizmów szyfrujących dostępnych łatwo w PHP jest większy niż w MySql, a co więcej – możesz też prosto implementować całkowicie autorskie metody, nie przejmując się tym, czy MySql je wspiera – po prostu prześlesz do bazy zaszyfrowany ciąg znaków.

Główną wadą jest wydajność, zwłaszcza podczas odczytywania i selekcji informacji z bazy. Nie możesz prosto stosować komend SqlSQL (Structured Query Language) to język programowania używany do zarządzania i manipulowania bazami danych. Jest to jeden z najważniejszych i najczęściej używanych języków w informatyce, zwłaszcza w kontekście baz danych relacyjnych. SQL umożliwia tworzenie, modyfikowanie oraz usuwanie baz danych, a także wykonywanie zapytań do tych baz w celu pobierania i modyfikowania danych. Dlaczego warto używać SQL? Łatwość użycia: SQL jest językiem deklaratywnym, co oznacza, że użytkownik opisuje, co chce osiągnąć, a nie...Czym jest SQL? do wyjęcia rekordów zawierających jakiś ciąg znaków. Musisz najpierw wczytać i odszyfrować wszystkie rekordy, a następnie wśród nich poszukiwać odpowiedniej wartości, stosując możliwości języka PHP.

Szyfrowanie niesymetryczne polega na tym, że stosuje się parę kluczy. Klucz służący do szyfrowania informacji jest inny, niż potrzebny do ich odczytania. To podejście jest wykorzystywane w tzw. infrastrukturze klucza publicznego (PKI). Występuje tam klucz prywatny oraz klucz publiczny. Klucz prywatny jest znany wyłączenie nadawcy wiadomości. Klucza tego nie da się łatwo odtworzyć dysponując kluczem publicznym. Danym kluczem publicznym da się odczytać wyłącznie wiadomość zaszyfrowaną pasującym kluczem prywatnym i odwrotnie. Taki zestaw kluczy "pasuje" wyłącznie do siebie nawzajem. W ten – asymetryczny sposób – działają np. certyfikaty SSL, chroniące strony i zapewniające szyfrowanie komunikacji między serwerem i przeglądarką użytkownika. W takim wypadku klucz prywatny jest zainstalowany na serwerze.

W obecnych czasach stosowanie certyfikatów SSLSSL (Secure Sockets Layer) to protokół kryptograficzny, który zapewnia bezpieczne połączenie między użytkownikiem a serwerem, chroniąc dane przesyłane przez internet. SSL jest najczęściej używany do zabezpieczania połączeń na stronach internetowych, zwłaszcza tych, które wymagają podania danych osobowych, takich jak loginy, hasła czy informacje o płatnościach. SSL jest niezbędny na każdej stronie internetowej, na której użytkownicy przesyłają dane wrażliwe, na przykład w sklepie internetowym czy podczas rejestracji na stronie. Aby wdrożyć...Czym jest SSL? wydaje się absolutną koniecznością, zwłaszcza, że cena certyfikatów jest w obecnych czasach bardzo niska, a czasem są one dostępne wręcz bezpłatnie. SSL to konieczne zabezpieczenie każdej strony lub aplikacji internetowej, przetwarzającej dane osobowe. Pamiętaj jednak, że certyfikat SSL chroni transmisję danych. Certyfikat nie chroni natomiast przed np. skopiowaniem bazy danych z serwera przez osobę nieuprawnioną, np. gdyby weszła w posiadanie hasła do bazy, bo pechowo zapisałeś je w widocznym miejscu na żółtej karteczce 😉 Dlatego polecam Ci przemyślenie opisanego powyżej szyfrowania symetrycznego w warstwie aplikacji lub samej bazy.

Hashowanie

Funkcja hashująca to funkcja, która dowolny ciąg znaków zamienia na inny ciąg znaków o z góry zadanej, stałej długości, w taki sposób, że nawet minimalna zmiana w źródłowym ciągu znaków powoduje dużą zmianę w wyniku tej funkcji. Jest ona w zasadzie – nieodwracalna.

Dla jednego z najbardziej rozpowszechnionych algorytmów hashowania md5 są to zawsze 32 znaki, dla sha1 - 40 znaków. Mając wynik działania tej funkcji, czyli tzw. hash, nie sposób powiedzieć, jaki był pierwotny ciąg znaków, na podstawie którego hash został obliczony. Nie ma tu żadnego "klucza", który pozwoli łatwo odwrócić ten proces i odczytać pierwotną informację.

Nie jest to zatem metoda zaprojektowana do odczytania informacji. Ważne jednak, że pomijając bardzo niewielkie ryzyko tzw. kolizji, każda informacja ma swoje odzwierciedlenie w unikatowym skrócie, nazywanym hashem. Oznacza to, że można z prawdopodobieństwem graniczącym z pewnością potwierdzić, że dany hash został obliczony na konkretnej informacji. Mając tę informację możemy potwierdzić, czy posiadany skrót był obliczony właśnie z niej. Długość informacji nie ma znaczenia - obojętnie, czy hashujemy kilkuliterowe nazwisko, czy cały rozdział "Pana Tadeusza" - zawsze uzyskujemy ciąg o skończonej i od razu znanej, stałej długości. Łatwo jest zatem projektować w bazie pole, przechowujące taki hash - będzie to zazwyczaj pole o stałej długości znaków, np. typu char(128) dla ciągu 128 znakowego.

Hashowanie jest działaniem jednostronnym. Hasła w dobrze projektowanych systemach są właśnie hashowane, a nie szyfrowane. W bazie po stronie serwera nie zapisujemy Twojego hasła – zapisujemy jedynie jego hash (odcisk, skrót). W ten sposób gdyby baza wpadła w niepowołane ręce – nie da się z niej, co do zasady, odzyskać haseł.

Algorytm hashowaniaRok powstaniaWynik (bity)Komentarz
MD51992128Wciąż popularna, ale uznawana za bardzo mało bezpieczną
SHA11995160Obecnie także uznawana za mało bezpieczną
SHA 2562002256 
SHA 32008224/256/384/512W chwili pisania tego artykułu brak doniesień o skutecznych atakach

Być może niepokoi Cię w tym miejscu sformułowanie „co do zasady”. Wynika ono stąd, że mając informację jawną – np. jawnie podane hasłoW informatyce, hasło jest to sekretne słowo lub zestaw znaków, które upoważnia użytkownika do uzyskania dostępu do określonych zasobów, takich jak konto użytkownika, system komputerowy, sieć, czy też aplikacja. Hasła są używane w celu zapewnienia poufności i bezpieczeństwa, uniemożliwiając nieautoryzowany dostęp do informacji lub zasobów. Dobre praktyki dotyczące bezpiecznych haseł obejmują: Długość: Im dłuższe hasło, tym trudniejsze do złamania. Zaleca się, aby hasło miało co najmniej 12 znaków. Złożoność: Hasło...Czym jest Hasło?, a także informację zahashowaną, można je porównać aby potwierdzić albo zaprzeczyć, że dany hash powstał na bazie danej informacji. Można zatem wyobrazić sobie, że podstawiamy kolejne słowa i sprawdzamy, czy hash obliczony na nich zgadza się z tym w bazie. W ten sposób, jeśli hasło jest trywialne, dysponując odpowiednio dużą mocą obliczeniową, można „odwrócić” taki proces i poznać hasło. Nie jest to dosłownie „odwracanie”, tylko raczej zgadywanie poprzez kolejne podstawienia, wymaga zatem znacznej mocy obliczeniowej. Wiedz jednak, że dla krótkich i trywialnych haseł oraz popularnych metod hashowania istnieją tablice, które zostały już „przeliczone” – przy ich pomocy można dość szybko odgadnąć hasło, jeśli jest krótkie albo trywialne. Istnieją doniesienia, że metoda MD5, przy dzisiejszej mocy obliczeniowej zwykłych komputerów, pozwala na odgadywanie haseł dających określony hash - w ciągu zaledwie kilku minut.

Solenie

Polega na dodawaniu do hashowanego ciągu znaków z góry znanego, jawnego ciągu. Na przykład do hashowanego ciągu dokleja się inny, znany ciąg, powiedzmy "RODO-H88", a hashuje się cały wynik. Jest on istotnie różny niż wynik hashowania pierwotnej informacji.

Najłatwiej wyjaśnić to na przykładzie. Masz proste hasło, np. "stolik". Takie hasło łatwo złamać metodą słownikową, obliczając hash na kolejnych słowach ze słownika i sprawdzając, czy się zgadza z Twoim hashem. Wynik hasha md5 na tym słowie to 8e38a1fa88ccb0649b1032cad66f8d84. Włamywacze do systemów informatycznych mają ogromne, przeliczone już tablice z takimi właśnie słowami i odpowiadającymi im hashami, co pozwala im szybko identyfikować brzmienie prostego hasła. Po sklejeniu ciągu z solą otrzymasz ciąg: "stolikRODO-H88". Hash md5 z takiego ciągu brzmi 5e697a4faacab99233cbb676dc4cdead - całkowicie inaczej! Jednocześnie, nie da się go "zgadnąć" podstawiając metodą słownikową, bo takie słowo nie występuje w żadnym słowniku. Kiedy użytkownik wprowadza hasło logując się do systemu, wpisuje tylko "stolik", a aplikacjaAplikacja to program komputerowy lub mobilny, który wykonuje określone zadania na urządzeniu użytkownika. Aplikacje mogą być przeznaczone do różnych celów, od zarządzania dokumentami, przez gry, po obsługę transakcji w sklepie internetowym. Zrozumienie, czym jest aplikacja i jakie ma zastosowanie, jest kluczowe zarówno dla użytkowników, jak i właścicieli firm. Jakie są rodzaje aplikacji? Aplikacje dzielą się na kilka kategorii: desktopowe (instalowane na komputerze), mobilne (na smartfony i tablety) oraz webowe (uruchamiane...Czym jest Aplikacja? po swojej stronie dokleja sól - w tym wypadku "RODO-H88", dzieje się to poza użytkownikiem. Aplikacja znając odpowiednią sól skleją ją z hasłem, oblicza hash i porównuje z zapisanym w bazie.

Widzisz teraz, dlaczego trywialne hasła są tak podatne na złamanie. Solenie poprawia nieco sytuację, ale jako użytkownik nigdy nie masz pewności, czy i jakie solenie stosuje operator systemu, do którego się logujesz. Dobre hasło powinno być długie i nietrywialne, a przed zapisaniem go do bazy - jeśli to Ty jesteś twórcą strony - pamiętaj o "soleniu". Zdecydowanie polecam takie podejście, jeśli chcesz korzystać z dowolnej metody hashowania.

Anonimizacja

Anonimizacja danych osobowych polega na tym, że w zestawie danych, które zawierają dane osobowe, zostają one bezpowrotnie zamazane. Celowo używam słowa „zamazane” – chodzi o to, że nie musimy usuwać wszystkich informacji, a jedynie te, które umożliwiają łączenie danych z konkretną osobą.

Przykładowo, jeśli prowadzisz statystykę dotyczącą liczby opublikowanych postów danego autora, to posty wciąż możesz liczyć, ale nazwisko autora powinno zostać usunięte lub zastąpione losowym ciągiem znaków. Stosowanie szyfrowania nie jest anonimizacją, ponieważ posiadając klucz wciąż można je odczytać. Anonimizacja oznacza wykonanie jednokierunkowej funkcji na danych. Może to być zastąpienie ich pustym ciągiem znaków albo ciągiem losowym.

Pseudonimizacja

Polega na tym, że w danym zbiorze są przechowywane jedynie identyfikatory, które osobom postronnym, w razie uzyskania dostępu do zbioru, nic nie powiedzą o danych osobowych. Administrator danych posiada jednak możliwość dopasowania każdego takiego identyfikatora do konkretnej osoby fizycznej.

Jeśli projektowałeś kiedykolwiek bazę danych to wiesz, że często stosuje się podobne podejście w projektowaniu tabel. Nazwisko nie musi być powtórzone w każdej tabeli, wystarczy, że będzie w jednej, inne zawierają tylko odpowiedni identyfikator rekordu. Idąc tym tropem możemy wyobrazić sobie podobny mechanizm działający w oparciu o całe aplikacje – aplikacja może przetwarzać dane posługując się wyłącznie identyfikatorem, przy pomocy którego „sama”, bez dodatkowych informacji od Administratora Danych, nie jest w stanie identyfikować konkretnej osoby fizycznej.

Podsumowując

Przepisy o ochronie danych osobowych mówią o konieczności stosowania technik kryptograficznych. W tym artykule poznałeś różnicę między szyfrowaniem (odwracalnym) i hashowaniem (nieodwracalnym).

W razie konieczności anonimizacji danych, najbardziej bezpiecznym sposobem postępowania wydaje się nadpisanie danych osobowych losowym lub pustym ciągiem. Taka operacja jest całkowicie nieodwracalna i nie daje w przyszłości możliwości dowiedzenia że konkretna informacja – np. konkretny adres e-mail – została w ten sposób zanonimizowana.

Tego rodzaju potwierdzenie daje stosowanie hasha. Ponieważ jednak, zwłaszcza dla prostych metod hashowania, jak md5, istnieją sposoby pozwalające odgadnąć zapisane informacje, polecam ostrożność w posługiwaniu się hashowaniem. Pozostaje ono natomiast dobrą metodą w odniesieniu do np. rejestru sprzeciwów etc. – aby wykazać, że np. w odniesieniu do danego adresu mailowego zapisano sprzeciw.

Artur Pajkert z kubkiem cyber_Folks
>
Artur Pajkert
Od 18 lat dzieli się wiedzą i poradami w sprawach e-marketingu i hostingu, jako menedżer, autor publikacji, prelegent, bloger, wykładowca akademicki.

Dodaj komentarz

Twój adres e-mail nie będzie opublikowany.

Polecane dla Ciebie

Szukasz dalej?

Przeglądaj wg dat
  • Przeglądaj wg dat
  • luty 2025
  • styczeń 2025
  • grudzień 2024
  • listopad 2024
  • październik 2024
  • wrzesień 2024
  • sierpień 2024
  • lipiec 2024
  • czerwiec 2024
  • maj 2024
  • kwiecień 2024
  • marzec 2024
  • luty 2024
  • styczeń 2024
  • grudzień 2023
  • listopad 2023
  • październik 2023
  • wrzesień 2023
  • sierpień 2023
  • lipiec 2023
  • czerwiec 2023
  • maj 2023
  • kwiecień 2023
  • marzec 2023
  • luty 2023
  • styczeń 2023
  • grudzień 2022
  • listopad 2022
  • październik 2022
  • wrzesień 2022
  • sierpień 2022
  • lipiec 2022
  • czerwiec 2022
  • maj 2022
  • kwiecień 2022
  • marzec 2022
  • luty 2022
  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021
  • sierpień 2021
  • lipiec 2021
  • czerwiec 2021
  • maj 2021
  • kwiecień 2021
  • marzec 2021
  • luty 2021
  • styczeń 2021
  • grudzień 2020
  • listopad 2020
  • październik 2020
  • wrzesień 2020
  • sierpień 2020
  • lipiec 2020
  • czerwiec 2020
  • maj 2020
  • kwiecień 2020
  • marzec 2020
  • luty 2020
  • styczeń 2020
  • grudzień 2019
  • listopad 2019
  • październik 2019
  • wrzesień 2019
  • sierpień 2019
  • lipiec 2019
  • czerwiec 2019
  • maj 2019
  • kwiecień 2019
  • marzec 2019
  • styczeń 2019
  • grudzień 2018
  • listopad 2018
  • październik 2018
  • sierpień 2018
  • lipiec 2018
  • maj 2018
  • kwiecień 2018
  • marzec 2018
  • styczeń 2018
  • grudzień 2017
  • październik 2017
  • czerwiec 2017
  • kwiecień 2017
  • marzec 2017
  • luty 2017
  • styczeń 2017
  • grudzień 2016
  • listopad 2016
  • październik 2016
  • wrzesień 2016
  • sierpień 2016
  • lipiec 2016
  • czerwiec 2016
  • maj 2016
  • kwiecień 2016
  • marzec 2016
  • lipiec 2015
  • maj 2015
  • grudzień 2014
  • sierpień 2014
  • lipiec 2014
  • czerwiec 2014
  • kwiecień 2014

Chat online

Cześć!

Zapraszamy do rozmowy, chętnie odpowiemy na Twoje pytania. Jeśli dotyczą one bezpośrednio posiadanych przez Ciebie usług, zalecamy wcześniejsze zalogowanie się do swojego panelu klienta. Dzięki autoryzacji będziemy mogli zaoferować pomoc w szerszym zakresie.

Zachęcamy też do sprawdzenia naszej sekcji wsparcia na https://cyberfolks.pl/pomoc.

Aktualny stan pracy serwerów:

Autoryzacja: nieautoryzowany - Zaloguj się

W związku z przepisami o ochronie danych osobowych informujemy, kto i na jakich zasadach będzie administrować Twoimi danymi: Polityka prywatności cyber_Folks S.A.