Powrót do strony głównej

Wytrzymałość haseł: obliczenia dla deweloperów

Artykuł omawia matematyczną wytrzymałość haseł z obliczeniami brute-force, zagrożenia ataków słownikowych i zalecenia dotyczące przechowywania (Argon2, sól). Dla deweloperów: throttling, 2FA, unikalność. Dla użytkowników: passphrase i menedżery.

Obliczenie wytrzymałości haseł: dlaczego długość jest najważniejsza
Advertisement 728x90

Analiza wytrzymałości haseł: obliczenia i rekomendacje dla programistów

Hasła nadal stanowią podstawowy mechanizm uwierzytelniania dzięki prostocie implementacji i zrozumieniu przez użytkowników. Login identyfikuje konto, a hasło potwierdza znane hasło. Mimo istnienia alternatyw takich jak klucze sprzętowe, OTP, biometria czy WebAuthn, hasła dominują w systemach o niskim progu dostępu.

Na przykład WebAuthn wykorzystuje szyfrowanie asymetryczne: klucz prywatny pozostaje na urządzeniu, serwer sprawdza podpis za pomocą klucza publicznego. Biometria przechowywana jest lokalnie, nie przesyłana do serwera, co minimalizuje ryzyko wycieków.

Rzeczywista wytrzymałość: obliczenia matematyczne

Każde hasło można przeanalizować metodą siły wymuszonej — bezpieczeństwo zależy od ekonomicznej nieopłacalności ataku. Obliczmy czas przebicia dla różnych konfiguracji.

Google AdInline article slot

Dla 5-cyfrowego PIN-u (10^5 = 100 000 kombinacji) przy 10 próbach/sekundę — kilka sekund. Z botnetem z 10 000 urządzeń (100 000 prób/sekundę) — mniej niż 9 minut dla 36-symbolowego alfabetu (36^5 ≈ 52 miliony).

Rozszerzamy alfabet:

  • 62 symbole (duże i małe litery + cyfry): 62^5 ≈ 916 milionów, ~2,5 godziny z botnetem.
  • 95 symboli (+znaki specjalne): 95^5 ≈ 7,7 miliarda, ~21 godzin.

Kluczowy czynnik — długość. Dla 8 znaków z 95 symboli: 95^8 ≈ 6,6×10^15, >2000 lat przy 100 000 prób/sekundę. Nawet bez znaków specjalnych (62^8 ≈ 2,2×10^14) — ~70 lat.

Google AdInline article slot

| Alfabet | Długość | Kombinacje | Czas (100k/sek) |

|---------|-------|------------|------------------|

| 36 | 5 | 52 miliony | 9 min |

Google AdInline article slot

| 62 | 5 | 916 milionów | 2,5 h |

| 95 | 5 | 7,7 miliarda | 21 h |

| 62 | 8 | 218 bilionów | 70 lat |

| 95 | 8 | 6,6 biliarda | 2000+ lat |

Limitowanie liczby prób (throttlingu) jest konieczne: ograniczenie liczby prób/IP zmusza do używania rozproszonych botnetów, co znacznie zwiększa koszty ataku.

Ataki słownikowe i wzory

Pełna siła wymuszonego przebrania nieefektywna przeciwko długim hasłom. Prawdziwym zagrożeniem są ataki słownikowe i credential stuffing.

Przykłady wrażliwych haseł:

  • Qwertyuio1 — wzór klawiatury.
  • Abcdefghi0 — sekwencja.
  • P@ssW0rD36 — wersja leetspeak.
  • Ghbdtn — układ klawiatury QWERTY dla "Cześć".

Rekomendacja: passphrase z 4–6 losowych słów (słownik ~20 000: 20 000^4 = 1,6×10^17, dziesiątki tysięcy lat przebrania). Unikaj cytowań, używaj separatorów.

Kody PIN (4 cyfry) są chronione nie wytrzymałością, ale ograniczeniem liczby prób (3–10), zabezpieczeniem sprzętowym hashowania.

Błędy programistów przy przechowywaniu haseł

Na serwerze hasła przechowywane są jako hashe (bcrypt, Argon2, scrypt). Typowe błędy:

  • Przechowywanie w postaci jawnej lub słabego MD5/SHA-1.
  • Brak soli — tabele rainbow.
  • Słabe hasze bez iteracji (szybkie przebranie GPU).
  • Brak throttlingu lub CAPTCHA.
  • Credential stuffing bez sprawdzania unikalności login-hasło w bazach wycieków (Have I Been Pwned?)

Poprawny stos: Argon2id z parametrami memory-hard, unikalna sól na użytkownika, limitowanie częstotliwości (np. 5 prób/min/IP).

Praktyczne rekomendacje

Dla użytkowników:

  • Unikalne hasło na każdy serwis.
  • Długość ≥12 znaków lub passphrase (4+ słowa).
  • Menadżery haseł:

* Lokalne (KeePassXC): pełna kontrola, ręczna synchronizacja.

* Chmurowe (Bitwarden): automatyczna synchronizacja, hasło główne.

  • Włącz 2FA (TOTP, nie SMS).

Dla programistów:

  • Wymagaj passphrase lub ≥16 znaków.
  • Hashuj z Argon2 (p=2, m=64MB, t=3).
  • Limitowanie częstotliwości: eksponencjalny backoff.
  • Passkey/WebAuthn dla nowych systemów.
  • Monitorowanie wycieków.

Co jest ważne

  • Długość hasła ma większy wpływ niż różnorodność znaków: 95^8 >> 62^12 pod względem wytrzymałości.
  • Throttling + botnety = wykładniczy wzrost kosztów ataku.
  • Passphrase z losowych słów zapewnia ponad 10^17 kombinacji.
  • Przechowuj tylko hashe z solą i Argon2; plaintext = natychmiastowy kompromis.
  • Unikalność haseł zapobiega credential stuffing.

— Editorial Team

Advertisement 728x90

Czytaj dalej