Rodzaj hasła, które powinieneś utworzyć, ma wiele wspólnego ze sposobem przechowywania hasła.
Wiele lat temu ośmioznakowe losowe hasła składające się z wielkich i małych liter, symboli i cyfr były naprawdę trudne do złamania. W niektórych przypadkach złamanie takiego hasła zajęło lata.
Dzięki dzisiejszej zmieniającej się technologii i wynajmowalnym maszynom czas ten został skrócony do godzin. Ale w jaki sposób te hasła są przechowywane?
Jak hasła są przechowywane online
Systemy nie przechowują haseł użytkowników bezpośrednio w plikach lub bazach danych, ponieważ osoby atakujące mogą przejąć bazę danych, w której systemy przechowują hasła. Zamiast tego systemy szyfrują hasła użytkowników, a osoby atakujące napotykają zaszyfrowaną wersję każdego hasła.
Istnieje kilka algorytmów używanych przez systemy do szyfrowania haseł. Jednym z takich algorytmów jest algorytm symetryczny. Algorytm symetryczny jest rodzajem szyfrowania gdzie możesz użyć tego samego klucza zarówno do szyfrowania, jak i deszyfrowania. Klucz, którego będziesz używać do szyfrowania danych, jest taki sam dla szyfrowania i deszyfrowania. Bezpieczeństwo algorytmów symetrycznych niesie ze sobą pewne ryzyko, ponieważ istnieje tylko jeden klucz do odszyfrowania. Z tego powodu systemy na ogół nie używają algorytmów symetrycznych do szyfrowania haseł.
Ogólnie rzecz biorąc, metodą używaną przez systemy do szyfrowania są algorytmy mieszające. Algorytmy mieszające służą do weryfikowania i przedstawiania integralności danych, a nie do ich szyfrowania. Algorytmy mieszające przekształcają dane w hash o stałym rozmiarze. Te skróty zwykle reprezentują unikalny skrót danych.
Dzięki algorytmowi mieszającemu, jeśli atakujący przejął bazę danych haseł, atakujący nie może uzyskać dostępu do hasła wstecz z tego miejsca. Istnieje bardzo ważny niuans, na który należy zwrócić uwagę. Teoretycznie osoba atakująca, która włamie się do systemu, który używa tego samego algorytmu mieszania dla wszystkich kombinacji haseł, może porównać uzyskane wyniki. Jeśli w wyniku tych porównań osoba atakująca uzyska tę samą wartość, osoba atakująca dowiedziała się, jaka jest otwarta wersja hasła. Ta metoda polega na próbach i błędach, a ta forma ataku jest ogólnie nazywany atakiem brutalnej siły.
Na początku 2000 roku wypróbowanie wszystkich kombinacji 8-znakowych haseł zaszyfrowanych popularnymi algorytmami haszującymi mogło zająć setki lat. Oczywiście nie obejmuje to bardzo prostych kombinacji, takich jak „123456” lub „mojehasło” w tym zestawie. Wraz z rozwojem dzisiejszych technologii programowych i sprzętowych zmienił się również sposób łamania haseł.
Wpływ nowych procesorów graficznych
Z biegiem czasu możliwości procesorów graficznych (GPU) w zakresie równoległego przetwarzania danych uległy poprawie. Procesory graficzne nie są w stanie wykonywać wszechstronnych operacji, takich jak procesory ogólnego przeznaczenia. Więc chociaż istnieją tak wiele rdzeni i mocy przetwarzania równoległego, nie ma sensu używać ich do prawie każdego problemu PROCESOR.
Jednak możliwe jest dość wydajne wykonywanie niektórych algorytmów mieszających używanych do haseł na GPU. Obliczalne skróty na sekundę, które można osiągnąć przy użyciu tradycyjnych procesorów, ogromnie wzrosły wraz z nowymi platformami GPU.
Aby zorientować się, sprawdź liczby haszowania na sekundę algorytmów wyznaczania wartości skrótu, takich jak NTLM, MD5 i SHA1 w poniższej tabeli. Na razie wystarczy wiedzieć, że te algorytmy to tylko algorytm mieszający. Do stworzenia tej tabeli użyłem systemu klastrowego składającego się z 25 procesorów graficznych AMD Radeon.
Algorytm |
Hashowanie na sekundę |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512Krypt |
364.000 |
Bcrypt |
71.000 |
Skrypt |
33.000 |
Jak widać, przy takim systemie można generować hasze NTLM 350 miliardów razy na sekundę. Oznacza to, że możesz wypróbować wszystkie kombinacje 8-znakowego hasła w mniej niż 6 godzin. Co więcej, sprzęt w tym przykładzie należy do lat temu. Wyobraź sobie dzisiejszą moc łamania haseł.
Co powinni zrobić programiści?
Droga, którą powinni podążać programiści, jest dość prosta: powinni preferować algorytmy, których obliczanie wartości skrótu podczas szyfrowania haseł zajmuje więcej czasu. Deweloperzy muszą dowiedzieć się nie tylko o wydajności algorytmu, którego używają na procesorze, ale także o tym, jak odporny jest on na świat GPU.
Jeśli programiści pracują z platformą oprogramowania, która obsługuje również procesy szyfrowania haseł, takie jak Django, Ruby on Rails i Spring Security powinny sprawdzić, czy podjęto w ramach ram właściwe decyzje pod względem bezpieczeństwo.
Na przykład, Wymyślać, jedna z najczęściej używanych bibliotek do operacji użytkownika w Ruby on Rails, używa Bcrypt jako domyślnego algorytmu mieszania. Pozwala również na użycie innej metody jako algorytmu mieszania. Algorytm Bcrypt jest niezawodny, ponieważ nadal trwa bardzo długo, zanim GPU się zepsuje.
Podsumowując, im dłużej trwa obliczanie wartości skrótu, tym bardziej jesteś bezpieczny.
Ile znaków powinno mieć Twoje hasło?
Każdy dodatkowy znak, którego użyjesz, zwiększy geometrycznie liczbę prób i błędów potrzebnych do złamania hasła i zwiększenia jego bezpieczeństwa.
Rozważmy tę sytuację w dwóch różnych scenariuszach. Rozważ wartości w powyższej tabeli dla algorytmu wyznaczania wartości skrótu NTLM i wyobraź sobie, że spróbujesz złamać hasło. Wyobraź sobie, że kierujesz hasła składające się z ośmiu lub więcej znaków.
Liczba znaków |
Wielkie/małe litery i cyfry |
Wielkie/małe litery, cyfry i symbole specjalne |
8 |
mniej niż 1 minuta |
2 minuty |
9 |
2 minuty |
2 godziny |
10 |
2 godziny |
1 tydzień |
11 |
6 dni |
2 lata |
12 |
1 rok |
200 lat |
13 |
ponad 100 lat |
ponad 1000 lat |
Analizując tabelę, można zauważyć, że użycie hasła składającego się z co najmniej 12 znaków jest bezpieczne, jeśli stosuje się wszystkie kombinacje wielkich i małych liter, cyfr i symboli specjalnych. Jeśli nie używasz specjalnych symboli, okazuje się, że musisz użyć 13 znaków jako bezpiecznej długości hasła. Jeśli w tym systemie użyłeś metody skrótu Bcrypt zamiast skrótu NTLM, wystarczyłoby 8 znaków. Nie masz jednak możliwości sprawdzenia, za pomocą jakiej metody hashowania system, do którego wchodzisz przez Internet, przechowuje Twoje hasło. Dlatego należy rozważyć wszystkie możliwości.
Głównym problemem twórców oprogramowania jest to, że prawie niemożliwe jest przekonanie użytkowników do posiadania co najmniej 12-znakowego hasła. Dziś można powiedzieć, że wskaźnik wykorzystania hasła o tej długości jest niski. Dlatego zgodnie ze scenariuszem użytkowania opracowanego systemu konieczne będzie znalezienie złotego środka, który zostanie zaakceptowany przez użytkowników w celu poprawy bezpieczeństwa ich haseł.
ostatnią sugestią dla programistów jest sprawdzenie nie tylko minimalnej, ale także maksymalnej długości danych wejściowych przechodzących przez formularze, które przedstawiłeś użytkownikowi. Zwłaszcza, gdy ze względów bezpieczeństwa włączysz wolno obliczający algorytm mieszania, taki jak Bcrypt celów, możesz napotkać pewne ryzyko, jeśli nie kontrolujesz maksymalnej długości hasła wprowadzanego przez użytkownik. Na przykład osoby atakujące mogą przeprowadzać ataki, próbując jednocześnie dziesiątek haseł o długości 100 tysięcy znaków, korzystając ze specjalnie przygotowanych żądań. W takim przypadku jest wysoce prawdopodobne, że Twój system przestanie odpowiadać innym użytkownikom.
Porady dla użytkowników końcowych
Ustaw długość hasła na co najmniej 12 znaków i upewnij się, że zawiera kombinacje wielkich i małych liter, cyfry i symbole. Nigdy nie zapominaj, że systemy, w których przechowywane są Twoje hasła, mogą zostać zhakowane, a Twoje informacje mogą zostać wykorzystane w nadużyciach. Nie możesz wiedzieć, jakich algorytmów używa system do szyfrowania hasła, więc podjęcie środków ostrożności i utworzenie silnych haseł zależy wyłącznie od Ciebie.