Internetowy password

0

Nie, to nie ten słynny index.html

Samym nickiem nie zaloguje się na Allegro, poczty nie sprawdzę, a co najwyżej odkryje kolejne godziny zegarowe przed premierą 3W – Złodzieje Czasu. Zaraz, przecież nie mam hasła do maila, aby aktywować konto. Kurczę.

Przedwczoraj wyszło na jaw, że filmweb został rozkradziony z kont użytkowników i tak oto poszły maile, nicki, i hasła (niesolone?) w ruch w necie. Kolejna potężna wpadka na miarę wykopu, może czegoś jeszcze. Ale dziś nie o tym.

Jubileuszowo 100 post dzisiaj strzelę trochę o hasłach i ich w miarę bezpiecznemu gromadzeniu.

Trochę historii

Rok 2000. Rejestrujesz konto na onecie, aby otrzymać pocztę. W sumie więcej usług w tamtym czasie zbytnio nie było. Wybierasz nazwę użytkownika, datę urodzenia itd. W końcu czas na pytanie pomocnicze i odpowiedź.

Kiedyś takie czasy były, by odzyskać swoje hasło należało odpowiedzieć poprawnie na ów pytanie pomocnicze. Jak nie trudno się domyślić w przypadku niektórych pytań nie było trudno. I tak znam pierwszą miłość mojego ojca, czy wiem jak nazywa się Twój ulubiony film.

Najśmieszniejsze w całym tym odzyskiwaniu było to, że można było cały dzień siedzieć, próbować brutal dictionary force ( :P ) aż w końcu się udało i poznało się hasło… wiaderko. Kurde, ale one było proste!

Za to najgorsze (patrząc na dzisiejsze czasy) było to, że niektóre strony hasło trzymały jako plain text. Fajnie, spróbujmy to samo hasło teraz na ten serwis randkowy. Bingo.. działa! (Mógł być problem w poznaniu nazwy konta – wtedy zbytnio nie było trendów do używania emaila jako loginu).

Hasłu jako plain text można przypisać chyba tylko jedną zaletę, która jest jednocześcnie ogromną wadą – możesz je sobie dokładnie przypomnieć, jeśli pamięć cię zawodzi… ale z drugiej strony hacker/administrator też je pozna. W takich przypadkach możesz dostać hasło w niezmienionej formie na maila. Żadnych resetów i kolejnych głupich zmian haseł, przecież nie dbamy o bezpieczeństwo, bo po co, nie?

Pierwsze hashe

Potem może i w niektórych głowach przyszedł pomysł na „hashowanie” hasła, przykładowym rot13. Całe zabezpieczenie mogłoby tylko polegać na tym, że totalny noob siedzący nad administracją strony nie byłby w stanie oczytać owego hasła w swoim (lub i nie) ojczystym języku. Ale nie żartujmy już, może i były przypadki używania samego rot13, nie wiem.

Przykładowy hash MD5

Poważniej podchodząc do tematu z czasem zaczęto używać MD5 czy SHA1 (muszę dodawać, że to algorytmy stratne w przeciwieństwie do rot13?). Cała zabawa polegała na podwyższeniu bezpieczeństwa szarych użytkowników, aby również administrator danej strony od razu nie miał na patelni wszystkich wymaganych danych do złodziejowania, szczególnie, gdy nie był twórcą danego skryptu (Rozumiesz? Masa dzieci stawia jakieś strony na cudzych skryptach, aby zbierać loginy i hasła ludzi).

Organizacje kryptograficzne pracowały nad jak najlepszym skonstruowaniem algorytmu, który zabezpieczałby chociażby nasze hasła. I mimo, że te algorytmy mają już po kilkanaście lat, to bardzo dobrze sprawowały się przez ostatnie lata. Do czasu, aż zaczęto wynajdować kolizje.

Zaczęto również generować tablice tęczowe. W większych przypadków wynajdowanie haseł wydajniej wychodzi przez stworzenie kilkudziesięciu (set?/tysięcy?) GB tęczowych tablic i wyszukiwaniu skrótów dla hashy i ich odwrócenie. Nie wątpię, że tworząc potężny indeks alfabetyczny również byłoby bardzo wydajnie.

Ale ten problem dotyczy głównie „czystych” hashy MD5/SHA1 i innych algorytmów.

Posólmy pieczeń

Dzisiaj solimy, aby bardziej zabezpieczyć hasła użytkowników. Solenie polega na doklejeniu jakiegoś ciągu znaków do hasła użytkownika – w wymyślony przez twórcę (Ciebie?) sposób.

Może kiedyś zdarzyło Ci się łamać brutalnie hasło do jakiegoś archiwum, np. RAR? Mając kombinację samym małych liter alfabetu prostego ([a-z]) idzie całkiem szybko i przyjemnie. Dobrze wiesz, co się dzieje, jak dodasz duże litery, cyfry, znaki specjalne… kombinacji rośnie wraz z wymaganym czasem.

Tak samo może być w przypadku solenia. Dodanie choćby jednego znaku do czystego hasła użytkownika w zupełności zmienia jego hash (a raczej powinno). Bezpieczniej, nie? Pomyśl, co się stanie, jak dodasz jeszcze do tego resztę znaków, jakie możesz osiągnąć z klawiatury. Trochę trudniej już tutaj z brute force. Użytkownik, który w haśle wykorzysta najprostrzą paletę znaków może zostać bardzo podratowany specyficzną solą.

Ale to jednak jeszcze nie chroni użytkownika, który przypadkowo ma to samo hasło, co inny. Odkodował x0r hasło pana A, przypadkowo jest ono takie samo jak hasło pana B. Bingo, dwie pieczenie na jednym ogniu.

Sól dodawana do hasła nie powinna być zawsze taka sama (ale to i tak lepsze rozwiązanie niż czysty algorytm). Bardzo często, aby jeszcze bardziej „uwyjątkowić” hasło i hash użytkownika dodaje się jego login. Trudno, aby trafili się dwaj Ci sami goście, aby ten sam hash mieli ;-)… W skrajnych przypadkach mogłoby to być możliwe. Wiele ludzi lubi jeszcze dodawać aktualny microtime() serwera. To też jest dobry pomysł.

Cholera!! Zakodowałem hasło z microtime’em i teraz nie mogę go porównać! Otóż to. Wyjątkowy, generowany losowo lub jakkolwiek inaczej salt musisz zapisywać, aby było możliwe potem porównanie hashy. Niby zapisywanie soli w kolumnie obok hash hasła to lekkie strzelanie sobie w stopę, ale hej.. kto powiedział, że cracker zna Twój algorytm łączenia soli z hasłem?

I tutaj możemy zabawić się w kolejny odcinek „Oszukaj hakiera„. Kto powiedział, że ten salt obok… to jest ten faktyczny salt ;-)? No dobra, hacker wykradł jeszcze skrypty i wyczytał nasz pomysł tworzenia hashy. Jesteśmy w dupie :-(.

Podsumowując

No cóż, od Ciebie zależy finezja skąd wytrzaśniesz hashe dla haseł użytkowników. Jak to wyczytałem w komentarzach na niebezpieczniku (wracając do sprawy filmweb’u), to najlepiej podpiąć mózg kobiety pod kodowanie, a nikt nigdy tego nie rozszyfruje, a co dopiero zrozumie.

Weź się też za wkręcanie ludzi. Na Twoją korzyść wpływa, jeśli cracking potrwa dwa lata, a nie jeden dzień i to tylko z powodu, bo zapchałeś trochę zasobów bazy, aby udawać fikcyjny salt.

I nie baw się w md5(md5($pass)); Tak podobno wrasta prawdopodobieństwo kolizji jak kilka lat temu gdzieś tak wyczytałem.

I jeszcze podmuchaj na zimne

Wklepywanie swojego hasła do Google nie jest dobrym pomysłem (ale można tak szybko wykryć wyciek). Przeliczania hash Twojego hasła dowolną stroną w internecie też nie musi być bezpieczne. Nie raz spotykałem pogłoski, że pewna strona do konwersji plain tekstu przez wiele algorytmów również gromadziła swoją bazę zapytań jak i gotowych hashy – jak myślisz do jakiego celu?

Post trochę niespójny i niezrozumiały, ale co tam – wyślę w eter.

Aktualizacja 2012-12-01 17:45

Widząc, że wpadło na wykop… wziąłęm się za poprawianie błędów.

Aktualizacja 2012-12-01 19:20

Kilka kolejnych poprawek, dzięki kolakao za zgłoszenie ;-)

MOŻE kiedyś napiszę poważny, wartościowy artykuł o hasłach… póki co proszę zadowalać się ZaufanąTrzeciąStroną i Niebezpiecznikiem ;-)

Tagi: , , , , , ,

Skomentuj