Ataki na hasła - jak działają i ile kosztują
Złamanie Twojego hasła może kosztować mniej niż kawa w Starbucksie. Hakerzy wynajmują potężne komputery za kilka dolarów na godzinę i łamią miliony haseł z wycieków - nie włamując się do nikogo, po prostu testując kombinacje offline. Sprawdź, jak działają te ataki i ile naprawdę warte jest Twoje hasło.
Skąd hakerzy biorą dane?
Wycieki baz danych
Głównym źródłem są włamania do serwisów internetowych. Gdy haker uzyskuje dostęp do bazy danych, wykrada tabelę użytkowników zawierającą loginy i hashe haseł. W publicznych wyciekach znajduje się już ponad 17 miliardów skompromitowanych kont.
Największe wycieki w historii - źródło haveibeenpwned.com:
- LinkedIn (2012): 164 miliony kont
- Adobe (2013): 153 miliony kont
- Dropbox (2012): 68 milionów kont
- RockYou (2009): 32 miliony haseł w czystym tekście - do dziś używane jako słownik do ataków
- Morele.net (2018): 2.5 miliona haseł - przykład z naszego podwórka
Skradzione bazy krążą na forach darknetowych, Telegramie i są sprzedawane za kryptowaluty. Wiele trafia ostatecznie do domeny publicznej.
Atak online vs offline
Atak online - haker próbuje logować się bezpośrednio do serwisu. Jest silnie ograniczony przez blokady konta, CAPTCHA i opóźnienia sieciowe. Może wykonać kilka-kilkanaście prób na minutę. Praktycznie niewykonalny dla haseł dłuższych niż 6-7 znaków.
Atak offline - haker ma kopię bazy danych i łamie hasła lokalnie. Brak jakichkolwiek ograniczeń poza mocą obliczeniową. Może testować miliardy kombinacji na sekundę. To główne zagrożenie i na nim koncentruje się reszta artykułu.
Credential stuffing
Szczególny typ ataku - wykorzystanie par login/hasło z jednego wycieku do logowania w innych serwisach. Badania pokazują, że ok 0.1% par działa w innych popularnych serwisach. Przy miliardach dostępnych danych to miliony potencjalnie przejętych kont. Źródło cloudflare.com
Jak serwisy przechowują hasła?
Sposób przechowywania haseł determinuje trudność ich złamania. Odpowiedzialne serwisy nie przechowują hasła w czystej formie, tylko jego "odcisk palca" (hash).
Hashowanie
Hasło jest przekształcane przez jednokierunkową funkcję - nie da się odzyskać hasła z hasha, ale to samo hasło zawsze daje ten sam hash. Podczas logowania serwis porównuje hash wprowadzonego hasła z zapisanym.
hasło: trudnehaslo123 hash: 8d7e4f2a1b3c5d6e9f0a1b2c3d4e5f6a
Sól (salt)
Losowy ciąg znaków dodawany do hasła przed hashowaniem. Każdy użytkownik ma unikalną sól. Dzięki temu nawet identyczne hasła mają różne hashe, a atakujący musi łamać każde hasło osobno.
Szybkie vs wolne algorytmy
Tu leży kluczowa różnica:
| Algorytm | Szybkość (RTX 4090) | Ocena |
|---|---|---|
| MD5 | 164 miliardy/s | ❌ Nigdy nie używać |
| SHA-1 | 51 miliardów/s | ❌ Przestarzały |
| bcrypt (cost 10) | ~6 tysięcy/s | ⚠️ Tylko systemy legacy |
| Argon2id | zależy od parametrów* | ✅ Zalecany (OWASP) |
Różnica jest kolosalna: MD5 jest ~27 milionów razy szybszy do złamania niż bcrypt. Niestety, użytkownik zazwyczaj nie wie, jakiego algorytmu używa serwis.
Metody łamania haseł
Atak słownikowy
Testowanie haseł z przygotowanych list - popularnych haseł, słów ze słowników, znanych fraz. Lista "rockyou.txt" zawiera 14 milionów haseł z prawdziwego wycieku i jest standardem w branży.
Chroni: losowe hasła spoza słowników.
Nie chroni: popularne hasła,
słowa ze słowników, znane frazy.
Atak brute-force
Systematyczne sprawdzanie wszystkich możliwych kombinacji. Gwarantuje sukces, ale czas rośnie wykładniczo z długością hasła.
| Długość | Małe litery | + wielkie litery + cyfry + symbole |
|---|---|---|
| 8 znaków | 2.1 × 10¹¹ | 6.6 × 10¹⁵ |
| 10 znaków | 1.4 × 10¹⁴ | 5.9 × 10¹⁹ |
| 12 znaków | 9.5 × 10¹⁶ | 5.4 × 10²³ |
Chroni: długie hasła (12+ znaków).
Nie chroni: krótkie hasła
niezależnie od złożoności.
Atak hybrydowy
Kombinacja słownika z regułami transformacji - typowe modyfikacje stosowane przez użytkowników:
- Wielka litera na początku:
haslo→Haslo - Cyfry na końcu:
haslo→haslo123 - Zamiana liter:
haslo→h@sl0 - Rok:
haslo→haslo2026
Narzędzie Hashcat z zestawem reguł może przetestować miliardy takich kombinacji.
Chroni: prawdziwie losowe hasła.
Nie chroni: hasła z
przewidywalnymi wzorcami, nawet "skomplikowane" jak H@s1o2026!
Atak na passphrase
Testowanie kombinacji słów ze słownika. Przestrzeń do przeszukania:
| Liczba słów | Słownik 7776 słów | Słownik niezgadniesz.pl (~19000 słów) |
|---|---|---|
| 4 słowa | 3.7 × 10¹⁵ | 1.3 × 10¹⁷ |
| 5 słów | 2.8 × 10¹⁹ | 2.5 × 10²¹ |
| 6 słów | 2.2 × 10²³ | 4.7 × 10²⁵ |
Chroni: passphrase z losowo wybranych słów (5+).
Nie chroni:
sensowne zdania, cytaty, teksty piosenek - są w słownikach ataków.
Realne koszty i czasy łamania
Hakerzy wynajmują karty graficzne w chmurze. Klaster 8x RTX 4090 kosztuje około $3/h (platformy takie jak Vast.ai, RunPod). Poniżej realne koszty złamania passphrase.
MD5 (słaby algorytm) - 8x RTX 4090, ~1.3 biliona H/s
| Passphrase | Słownik 7776 słów | Słownik niezgadniesz.pl (~19000 słów) |
||
|---|---|---|---|---|
| Czas | Koszt | Czas | Koszt | |
| 4 słowa | 17 minut | <$1 | 10 godzin | ~$30 |
| 5 słów | 137 dni | ~$10,000 | 32 lata | ~$850,000 |
| 6 słów | 2,900 lat | ~$76 mln | 620,000 lat | ~$16 mld |
bcrypt cost 10 (silny algorytm) - 8x RTX 4090, ~46 tys. H/s
| Passphrase | Słownik 7776 słów | Słownik 19000 słów | ||
|---|---|---|---|---|
| Czas | Koszt | Czas | Koszt | |
| 4 słowa | 1,260 lat | ~$33 mln | 45,000 lat | ~$1.2 mld |
| 5 słów | 9.8 mln lat | ~$260 mld | 850 mln lat | ~$22 bln |
| 6 słów | 76 mld lat | astronomiczny | 16 bln lat | astronomiczny |
Argon2id (zalecany algorytm) – szacunki dla 8x RTX 4090
Argon2id jest algorytmem memory-hard, co oznacza, że jego szybkość łamania zależy głównie od przepustowości pamięci GPU, nie mocy obliczeniowej. Przy zalecanej przez OWASP konfiguracji (m=19 MiB, t=2, p=1) szacowana szybkość to ~10-50 tys. H/s dla 8x RTX 4090.
Przyjmując konserwatywnie ~35 tys. H/s:
| Passphrase | Słownik 7776 słów | Słownik 19000 słów | ||
|---|---|---|---|---|
| Czas | Koszt | Czas | Koszt | |
| 4 słowa | ~1,700 lat | ~$45 mln | ~60,000 lat | ~$1.6 mld |
| 5 słów | ~13 mln lat | ~$350 mld | ~1.1 mld lat | ~$30 bln |
| 6 słów | ~100 mld lat | astronomiczny | ~21 bln lat | astronomiczny |
Uwaga: Powyższe szacunki dla Argon2id są przybliżone. Przy wyższych ustawieniach pamięci (np. m=64 MiB czy m=128 MiB) czasy łamania rosną proporcjonalnie. Argon2id z odpowiednią konfiguracją jest obecnie najtrudniejszym do złamania algorytmem hashowania haseł.
Co z tego wynika?
- Algorytm ma ogromne znaczenie - ta sama passphrase 4-wyrazowa to 17 minut przy MD5, ale 1,260 lat przy bcrypt
- 4 słowa to za mało przy słabym hashu - koszt poniżej dolara
- 5 słów to bezpieczne minimum - $10,000 przy MD5, miliardy przy bcrypt
- Większy słownik pomaga - przejście z 7776 na 19000 słów zwiększa koszty 35-200x
- Każde dodatkowe słowo = ~8000x trudniej - najefektywniejszy sposób zwiększania bezpieczeństwa
Źródła: benchmarki Hashcat v6.2.6 (Sam Croley), ceny Vast.ai/RunPod 2025
Jak się skutecznie chronić?
Które hasła chronią przed którymi atakami?
| Typ hasła | Słownikowy | Hybrydowy | Brute-force |
|---|---|---|---|
haslo123, qwerty |
❌ | ❌ | ❌ |
P@ssw0rd2024! |
❌ | ❌ | ⚠️ |
Kocham Mojego Psa |
❌ | ❌ | ✅ |
| Losowe 12+ znaków | ✅ | ✅ | ✅ |
| Losowa passphrase 5+ słów | ✅ | ✅ | ✅ |
A co z credential stuffingiem? Siła hasła nie chroni przed tym atakiem. Credential stuffing polega na testowaniu skradzionych par login/hasło z wycieków – jeśli Twoje hasło wyciekło, atakujący już je zna, niezależnie od tego, jak silne było. Jedyna ochrona to używanie unikalnego hasła dla każdego serwisu i włączenie 2FA.
Praktyczne zasady
- Używaj managera haseł - jedno silne hasło główne (passphrase 5-6 słów), reszta generowana automatycznie
- Unikalne hasło dla każdego serwisu - wyciek w jednym miejscu nie zagraża innym kontom
- Włącz weryfikację dwuetapową (2FA) - nawet złamane hasło nie wystarczy do włamania
- Sprawdź swoje dane - haveibeenpwned.com pokazuje, czy Twoje konta wyciekły
- Nie wymyślaj haseł sam - używaj generatora, ludzie są przewidywalni
- Zakładaj najgorszy scenariusz - nie wiesz, jakiego algorytmu używa serwis, więc twórz hasła odporne nawet na słabe hashe