Hasła w informatyce
Nazwa użytkownika i hasło jest pierwszym co musimy wpisać rozpoczynając naszą codzienną pracę przy komputerze, uruchamiając program handlowy czy odwiedzając bardziej rozbudowany serwis internetowy.
Jest to najpopularniejszy mechanim uwierzytelniania w świecie informatyki - pozwala nam udowodnić, że my to my, otwierając drogę do niedostępnych publicznie informacji (naszych prywatnych wiadomości, zdjęć itp.).
Dlaczego nazwa użytkownika i hasło?
Nazwa użytkownika (tzw. login) identyfikuje nas w danym systemie komputerowym. Poszczególni użytkownicy mogą mieć przypisane różne uprawnienia lub po prostu być podpisani pod wystawianymi przez nich dokumentami.
Konstrukcja nazwy użytkownika nie ma większego znaczenia a z reguły jedynym wymogiem jest jej unikalnośc (niepowtarzalność) w ramach danego systemu.
Znaczenie hasła
Hasło to już znacznie poważniejsze zagadnienie. Wpisanie poprawnego hasła informuje system o tym, że próbujący uzyskać dostęp jest tym za kogo się podaje.
W związku z tym oczywistym jest, że hasło powinno być możliwie najbezpieczniejsze.
Aby uzmysłowić powagę sytuacji załóżmy, że mam na myśli hasło do sytemu transakcyjnego banku gdzie trzymamy nasze pieniądze :)
Proces uwierzytelniania
Wielu użytkowników żyje w przekonaniu, że ich hasła są wprost wpisane w bazach danych systemów do których się logują i podczas autoryzacji następuje ich porównanie. O tym błednym przekonaniu świadczą liczne prośby użytkowników kierowane do administratorów różnorodnych systemów o podanie im ich własnego, zapomnianego przez nich hasła.
Gdyby hasła rzeczywiście były wpisane w prostej, niezaszyfrowanej formie, administratorzy systemów/pracownicy infolinii mogliby poznć hasło dowolnego klienta nie wspominając już o sytuacji w której ktoś wykradłby taką listę haseł - skutki byłyby katastrofalne (nawiasem mówiąc takie sytuacje zdarzały się w przeszłości lecz przechowywanie niezaszyfrowanych haseł świadczy o skrajnej nieodpowiedzialności i nie jest powszechnie stosowane).
W momencie tworzenia nowego hasła wpisujemy je dwukrotnie aby wykluczyć ewentualną pomyłkę (hasło jest z reguły wpisywane w “wygwiazdkowanym” polu i nie sposób ocenić wzrokowo czy zostało wpisane prawidłowo). Po zaakceptowaniu nowego hasła wysyłane jest ono do systemu wraz z towarzyszącą mu nazwą użytkownika.
W systemie hasło jest (w dużym uproszczeniu) szyfrowane i w takiej właśnie formie zapisane.
Na etapie uwierzytelniania, wpisane hasło również jest szyfrowane i porównywane są dopiero dwa tak właśnie zaszyfrowane hasła.
Sposób “szyfrowania” hasła
Ważnym elementem jest w tym przypadku sposób “szyfrowania” hasła. Operacja ta najczęściej odbywa się przy pomocy funkcji jednokierunkowych, tzw. funkcji skrótu - funkcji mieszających, hashujących (ściśle mówiąc nie powinienem używać w tym przypadku określenia "szyfrowanie" ale robię to dla uproszczenia).
Działanie takich funkcji polega na tym, że dla danego ciągu znaków wylicza się tzw. hash - ciąg znaków o ustalonej długości - zawsze taki sam dla tego samego hasła. Na podstawie hasha nie da się wyliczyć prawdziwego hasła więc przechowywanie haseł w formie hashy jest bezpieczniejsze.
Aby odgadnąć hasło na podstawie hasha należy hashować różne wyrażenia, aż trafi się na takie, którego hash będzie identyczny z hashem hasła którego szukamy a więc wyrażenie będzie po prostu szukanym hasłem.
Pamiętajmy jednak, że moc obliczeniowa komputerów rośnie w zawrotnym tempie i algorytmy szyfrowania niemożliwe do złamania jeszcze kilka lat temu ulegają teraz amatorskiemu sprzętowi wartemu kilka tysięcy złotych.
Gdyby dzisiejszy telefon komórkowy (tzw. smartphone) znalazł się w latach 70-tych ubiegłego wieku, prawdopodobnie byłby “najmocniejszym” na świecie superkomputerem.
Prostym i często stosowanym przykładem fukcji skrótu jest algorytm MD5.
Przyłady hashów wygenerowanych MD5:
"Ala ma kota" = 91162629d258a876ee994e9233b2ad87
natomiast
"Ala ma koty" = 6a645004f620c691731b5a292c25d37f
Jak widać niewielka zmiana tekstu źródłowego daje całkowicie inny wynik (hash).
(źródło: Wikipedia)
Ten sprytny mechanizm nie wymaga przechowywania niezaszyfrowanych haseł użytkowników co znacznie zwiększa bezpieczeństwo.
Nie pytajcie nigdy więcej administratora czy pracownika infolinii aby przypomniał wam zapomniane hasło - w takiej sytuacji jedynym wyjściem jest utworzenie nowego, którego nikt poza wami nigdy nie pozna.
Łamanie haseł
Metoda brutalna - Brute Force
Najprostszą metodą łamania haseł jest tzw. Brute Force, będąca bajecznie prostym pomysłem na odgadnięcie hasła.
Program komputerowy próbuje wszystkich kombinacji znaków o różnych długościach do momentu aż hasło okaże się prawidłowe.
Zaczyna np. od “a”, następnie “b”, “c”, “d”....”aa”, “ab”...”ala ma kota”, “ala ma kotb” …. itd.
Warto zauważyć, że dla hasła “mieszkam w Krakowie pod nr 23” czas odgadnięcia będzie dosyć długi lecz hasło “mama” zostanie odgadnięte bardzo szybko.
Metoda Słownikowa
Aby przyspieszyć metodę Brute Force wymyślono metodę słownikową.
Zamiast sprawdzać absurdalne wyrazy typu “adk+sab2$0” sprawdzane są słowa ze słownika wyrazów używanych w danym języku (lub w wielu językach).
Jest to idealna metoda do odgadywania haseł będących po prostu wyrazami typu “mama”, “komputer”, “samsung”...itp.
Są to oczywiście najprostsze, poglądowe przykłady i istnieje mnóstwo znacznie bardziej wyrafinowanych sposobów wykorzystujących aparat matematyczny i/lub będących rozwinięciem wspomnianych metod.
Skomplikowanie (siła) hasła
Rejestrując się w serwisach społecznościowych czy też zakładając konto e-mail spotykamy się z pojęciem “siły hasła”.
Dlaczego jest to najistotniejszy aspekt naszego bezpieczeństwa?
Jak już wcześniej zauważyliśmy, słowo “mama” nie jest zbyt dobrym kandydatem na hasło, znacznie lepsze będzie np. “!M4mA+_55”.
Dlaczego? Ano dlatego, że w przypadku skomplikowanego hasła o jak największej długości i jak największej różnorodności znaków, czas złamania będzie bardzo duży, a metody słownikowe nie sprawdzą się.
Zatem siła hasła zależy od różnorodności użytych znaków i długości tego hasła.
Nie unikajmy używania w hasłach znaków innych niż litery i cyfry.
Używajmy kombinacji nie mniej niż 10 znaków: dużych i małych liter, cyfr i znaków specjalnych.
Dlaczego to takie ważne?
Moc obliczeniowa a łamanie haseł
Specjaliści i entuzjaści na całym świecie cały czas pracują nad metodami coraz to szybszego łamania haseł.
Przykładem może tu być choćby sposób wykorzystujący moc obliczeniową kart graficznych.
W 2010 roku, Marc Bevand połączył 4 karty graficzne i stworzył oprogramowanie Whitepixel. Zestaw ten umożliwia wyliczanie 33,1 miliarda hashów MD5 w ciągu sekundy. Zestaw pobiera 1230 W mocy i kosztuje 2700 dolarów (grudzień 2010).
W lipcu 2012 projekt Erebus v2.5 wykorzystał 8 kart graficznych, przetwarzając 74,2 miliarda hashów / sekundę.
W 2012 z serwisu LinkedIn wykradziono ponad 6 milionów zahashowanych haseł.
http://www.zdnet.com/blog/btl/6-46-million-linkedin-passwords-leaked-online/79290
W 2011 hasła “wyciekły” z popularnego serwisu dla graczy Steam.
http://www.eurogamer.net/articles/2011-11-10-valve-confirms-steam-security-breach
Pod adresem http://www.informationisbeautiful.net/visualizations/worlds-biggest-data-breaches-hacks/ można obejrzeć wizualizację największych wycieków danych na świecie na przestrzeni ostatnich lat.
Jak widać, licho nie śpi a podobnych przykładów jest wiele, więc najwyższy czas zacząć traktować kwestię bezpieczeństwa haseł poważnie.
Należy pamiętać, że nasze hasło może próbować odgadnąć automat obliczający miliardy kombinacji haseł w ciągu sekundy, uruchomiony przez człowieka siedzącego na drugim końcu świata.
Zasady tworzenia dobrego hasła
- Nie używaj nazwy użytkownika (loginu) jako hasła (nawet ze zmianą wielkości liter, lub pisane wspak)
- Nie używaj swojego imienia i nazwiska, imion rodziny oraz nazw własnych
- Nie używaj informacji związanych z własną osobą (pesel, prawo jazdy, itd.)
- Nie używaj samych cyfr lub samych liter
- Używaj dużych i małych liter (w świecie komputerów "A" i "a" to dwa zupelnie rózne znaki)
- Używaj znaków niealfabetycznych i cyfr (=+-*&%$ itp.)
- Hasło winno składać się z co najmniej 8 a najlepiej więcej niż 10 znaków.
- Nie używaj tych samych haseł w wielu miejscach
- Pamiętaj o okresowej zmianie haseł
Ciekawe linki / źródła
- Ciekawy artykuł o hashach http://www.securitum.pl/baza-wiedzy/publikacje/lamanie-hasel-z-wykorzystaniem-cpu-gpu
- Generator hashów online http://dev.zer0day.com/PHP%20Hasher.php
- Kryptografia, hasła, luki w zabezpieczeniach itp. http://ob-security.info/
- Czas życia algorytmów hashujących http://valerieaurora.org/hash.html
- Chronologiczny ranking najszybszych superkomputerów na świecie http://pl.wikipedia.org/wiki/Superkomputer
- Ranking mocy obliczeniowej telefonów komórkowych http://www.greenecomputing.com/apps/linpack/linpack-top-10/
- Wikipedia - zasady tworzenia mocnego hasła http://pl.wikipedia.org/wiki/Mocne_has%C5%82o