ARTYKUŁ

Czy Mark Zuckerberg zna twoje hasło?

Jak zapisywane w bazie jest hasło – najbardziej podstawowy element autoryzacji użytkownika? W tym artykule poznasz różne tego metody i poznasz odpowiedź na pytanie z tytułu – może cię ona zaskoczyć!
Dev
Czy Mark Zuckerberg zna twoje hasło?

Kryptografia – a co to takiego, a komu to potrzebne?

Jej nazwa składa się pochodzi od greckich słów κρυπτός oraz γράφω gráfo oznaczających „pisać”. Jest to nauka o utajnianiu wiadomości. Kryptografia wykorzystywana jest od tysięcy lat. Poczynając od szyfru przesuwającego, z pomocą którego Juliusz Cezar utajniał swoją prywatną korespondencję, poprzez Enigmę służącą Niemieckiej armii, aż do dzisiaj, kiedy to odgrywa wielką rolę w globalnej komunikacji. To dzięki niej możemy się czuć jakkolwiek bezpieczni w cyfrowym świecie.

Jak oni to robią, czyli metody przechowywania haseł

Logując się każdego dnia na różne portale w Internecie raczej nie myślimy o tym w jaki sposób firmy przechowują nasze hasła. Jest to jednak kluczowa rzecz w kwestii naszego bezpieczeństwa, dlatego warto ją omówić.

Metod przechowywania jest kilka, oto te, z którymi możesz się kiedykolwiek spotkać:

  • czysty tekst (ang. plaintext),
  • w formie zaszyfrowanej
  • jako hash hasła
    (posolony)

Każdą z tych możliwości poniżej pokrótce omówię.

Metoda 1 – czysty tekst

Jest to najniebezpieczniejsza ze wszystkich metod, ponieważ hasła przechowywane są „gołe”. pozyskania wystarczy uzyskać dostęp do bazy danych. Kiedy haker przejmie bazę będzie miał do dyspozycji dane wszystkich użytkowników.

Niestety korzystają z niej nawet „więksi gracze”. Adobe, Imgur, VK i wiele innych portali przechowywało hasła jako czysty tekst. Nie wierzysz? Sprawdź listę wycieków na Have I Been Pwned?, i przy okazji również bezpieczeństwo swoich kont.

Metoda 2 – szyfrowanie symetryczne (tutaj: Blowfish)

Kolejnym sposobem jest szyfrowanie symetryczne. Polega ono na utajnieniu pewnej wiadomości za pomocą jednego klucza, którego można również wykorzystać do jej odszyfrowania. Oznacza to, że jest to metoda dwukierunkowa.

Jest to pozornie bezpieczne rozwiązanie, ponieważ rzeczywiście hasła nie są widoczne ,,na pierwszy rzut oka”, ale wystarczy, że atakujący pozyska klucz szyfrujący ażeby mógł otrzymać dostęp do czystych danych.

Obecnie jest to metoda stosowana bardzo rzadko oraz raczej do ochrony informacji pokroju danych osobowych, historii chorób i temu podobnych. Wynika to z jej nikłego bezpieczeństwa, którego poziom właściwie nie różni się od przechowywania haseł w czystym tekście.

Metoda 3 – funkcje hashujące (tutaj: MD5)

Ta metoda polega na przechowywaniu w bazie wartości bezpiecznej funkcji hashującej (funkcji skrótu kryptograficznego), której podajemy hasło wpisane przez użytkownika.

Dla osób niezaznajomionych z tym pojęciem zapewne brzmi ono bardzo strasznie, ale za chwilę udowodnię, że oznacza coś bardzo prostego do rozumienia.

Funkcje hashujące (mieszające) mają kilka kluczowych właściwości. Jest to przede wszystkim:

Jednokierunkowość – na podstawie wyjścia funkcji nie możemy określić jak ono pierwotnie brzmiało. Pozwala to na stworzenie systemu, który umożliwia logowanie się użytkowników bez przechowywania ich właściwych haseł.

// We wszystkich następnych przykładach będę stosował pseudokod  
  
hash('lambda') => "945F3FC449518A73B9F5F32868DB466C"  
// Tego hasha nie da się bezpośrednio odwrócić

Szybkość – funkcje mieszające są zoptymalizowane pod kątem szybkości tworzenia skrótów (hashy). Dzięki temu logowanie trwa krótko, ale otwiera to furtkę do ataków brute-force. Poprzez wyliczenie każdego możliwego do uzyskania wyniku możemy złamać pierwszą właściwość tej funkcji i „odwrócić” uzyskane hashe.

hash('aaa') => "47BCE5C74F589F4867DBD57E9CA9F808"  
hash('aab') => "E62595EE98B585153DAC87CE1AB69C3C"  
hash('aac') => "A9CED3DAD556814ED46042DE696E1849"  
...

Z każdym kolejnym rokiem bezpieczeństwo funkcji mieszających maleje z wyniku wzrostu mocy obliczeniowej procesorów. Karta graficzna GeForce GTX 970 potrafi wygenerować prawie 300 milionów skrótów SHA3 na sekundę. Aby ten czas ograniczyć można skorzystać z tzw. tęczowych tablic, które zawierają w sobie miliony wygenerowanych już hashy.

Solenie

Kolejnym problemem funkcji hashujących mogą być ich jednakowe wyniki. Kiedy tworzymy hash, funkcja mieszająca zawsze poda ten sam wynik. Pozwala to na np. odkrycie haseł dwóch użytkowników jednocześnie, co przyspiesza ten proces. Tutaj na pomoc przychodzą sole, czyli losowe fragmenty tekstu dołączane do treści, której hash chcemy pozyskać.

hash('qwerty') => "D8578EDF8458CE06FBC5BB76A58C5CA4"  
hash('qwerty') => "D8578EDF8458CE06FBC5BB76A58C5CA4"  
  
hash('qwerty' + _'c2eMEd'_) => "5701404BA6AFFC7F08780E3BB8E4F488"  
hash('qwerty' + _'6yK7ED'_) => "0AAF55F84A2F98322CED23B2E986DE34"  
// hash( hasło + sól ) => hash

Użycie soli zapobiega problemowi, którego opisałem powyżej, i tym zwiększa ilość czasu potrzebną do wykonania ataku brute-force, ale go w dużej mierze nie eliminuje.

Bcrypt

I tu wchodzi bcrypt, cały na biało – bardzo bezpieczna funkcja mieszająca o obecnie coraz większej popularności. Wyróżnia ją to, że została stworzona specjalnie z myślą hashowania haseł statycznych, a nie dowolnych danych binarnych.

Funkcje bcrypt przyjmują trzy wartości:

  • hasło
  • sól
  • koszt

Trzecia wartość najbardziej wyróżnia ten sposób ukrywania treści. Oznacza ona ilość wykonań pętli algorytmu szyfrującego, zatem można ją skojarzyć ze stopniem złożoności obliczeniowej.

Każde zwiększenie złożoności o jeden oznacza dwukrotnie dłuższy czas obliczeń hasha. Jeśli hashe z kosztem = 11 obliczane są w ciągu 0.25 sekundy, to hashe z kosztem = 14 będą obliczane w 2 sekundy. Różnica dla użytkownika będzie praktycznie niezauważalna – jednak w momencie kradzieży bazy danych, agresor w ciągu sekundy będzie mógł sprawdzić co najwyżej kilkaset hashy BCrypt, zamiast milionów hashy MD5/SHA1.

Jest to największa zaleta bcrypt i tym samym zupełnie eliminuje możliwość wystąpienia ataku brute-force. Oczywiście do czasu, bo moc obliczeniowa komputerów nieustannie się powiela. MD5 też kiedyś było bezpieczną funkcją, a teraz odradza się korzystanie z niej we wszystkich przypadkach.

Zatem… czy Zuckerberg zna twoje hasło?

Prawdopodobnie nie dane mu było go poznać i zapamiętać 😉

Ale czy w ogóle ma taką możliwość? Zależy.
Zakładając, że nie obowiązują go procedury bezpieczeństwa i ochrona danych użytkowników, to… również zależy.

Po lekturze tego artykułu powinieneś/powinnaś już wiedzieć, które hashe można odwrócić i tym poznać właściwe hasło. Będzie to oczywiście plaintext, hasła szyfrowane symetrycznie (zakładając znajomość klucza) i z dużą pewnością niebezpieczne funkcje mieszające pokroju MD5.

Jak jest w rzeczywistości? Oczywiście najgorzej jak mogłoby być. Pod koniec marca tego roku w mediach technologicznych pojawiła się informacja, że Facebook przyznał się do przechowywania haseł w… czystym tekście.

Podsumowując, tak, Mark Zuckerberg mógł poznać twoje hasło.

Divider

Świat kreują myśli

Swoimi dzielę się na blogu. Tu poznasz moją opinię o strategiach biznesowych, kwestiach społecznych czy dotyczących IT
Projekty innowacyjnych rozwiązań
Więcej niż artykuł

Agregacja i automatyzacja publikacji treści prasowych

Czy można stworzyć redakcję bez ani jednego człowieka? Dokument opisuje metodę realizacji nowoczesnego agregatora prasowego z pomocą sztucznej inteligencji i nowoczesnych narzędzi IT.
Przeczytaj PDF
Jak zarządzać Pokoleniem Z? Dać działać.

Jak zarządzać Pokoleniem Z? Dać działać.

"Roszczeniowe dzieci dobrobytu" - tak wielu starszych dorosłych widzi wchodzące na rynek pracy Pokolenie Z. Jest to jednak typowy brak zrozumienia dla specyfiki ludzi urodzonych w nowych czasach.
Przeczytaj
,[>.]<, czyli rzecz o bezlitosnym minimalizmie

,[>.]<, czyli rzecz o bezlitosnym minimalizmie

Krótki wstęp do Brainfucka – trudnego, lecz intuicyjnego języka programowania, który odstrasza swoją składnią, ale można się z nią zaprzyjaźnić.
Przeczytaj
Czym jest problem P vs. NP?

Czym jest problem P vs. NP?

Na czym polega największy problem informatyczny?
Przeczytaj
Bańki internetowe - wróg rozwoju osobistego i debaty publicznej

Bańki internetowe - wróg rozwoju osobistego i debaty publicznej

Czym są bańki i dlaczego szkodzą?
Przeczytaj
Nie ucz się (nie w szkole)

Nie ucz się (nie w szkole)

Na szczycie systemu edukacji nic nie znajdziesz.
Przeczytaj
Nie ma nic ponad prostotę

Nie ma nic ponad prostotę

Czym należy kierować się przy tworzeniu wizualnego aspektu produktu? Dekoracje, jaskrawe kolory i zbędne efekty to relikt przeszłości, którego nie tyle należy odrzucić, co traktować jako wzorcowy antyprzykład.
Przeczytaj
Pokaż więcej