Analýza síly hesel: výpočty a doporučení pro vývojáře
Hesla stále tvoří základní mechanismus ověřování díky jednoduché implementaci a přehlednosti pro uživatele. Přihlašovací jméno identifikuje účet, heslo potvrzuje znalost tajného klíče. I když existují alternativy jako hardwarové klíče, OTP, biometrie nebo WebAuthn, hesla dominují v systémech s nízkou průstupností.
WebAuthn například využívá asymetrické šifrování: soukromý klíč zůstává na zařízení, server ověřuje podpis veřejným klíčem. Biometrická data se ukládají lokálně a nepřenáší se na server, což minimalizuje riziko úniku dat.
Skutečná odolnost: matematické výpočty
Každé heslo je vystaveno bruteforce útoku – bezpečnost závisí na ekonomické nevýhodnosti útoku. Spočítáme čas potřebný ke zlomení pro různé konfigurace.
Pro 5-místný PIN (10⁵ = 100 000 kombinací) při 10 pokusech za sekundu: několik sekund. S botnetem 10 000 zařízení (100 000/sekunda) – méně než 9 minut pro 36-znakový abecední soubor (písmena + číslice, 36⁵ ≈ 52 milionů).
Rozšíření abecedy:
- 62 znaků (velká/malá písmena + číslice): 62⁵ ≈ 916 milionů, ~2,5 hodiny s botnetem.
- 95 znaků (+speciální znaky): 95⁵ ≈ 7,7 miliard, ~21 hodin.
Klíčový faktor – délka. Pro 8 znaků z 95: 95⁸ ≈ 6,6×10¹⁵, více než 2000 let při 100 000 pokusech/sekunda. I bez speciálních znaků (62⁸ ≈ 2,2×10¹⁴) – přibližně 70 let.
| Abeceda | Délka | Kombinací | Čas (100k/sek) |
|---------|-------|------------|----------------|
| 36 | 5 | 52 milionů | 9 minut |
| 62 | 5 | 916 milionů| 2,5 hodiny |
| 95 | 5 | 7,7 miliard | 21 hodin |
| 62 | 8 | 218 bilionů| 70 let |
| 95 | 8 | 6,6 kvintiliónů | 2000+ let |
Throttling je nezbytný: omezení počtu pokusů/IP nutí útočníky používat rozsáhlé botnety, což zvyšuje náklady.
Slovníkové útoky a vzory
Úplný bruteforce je neefektivní proti dlouhým heslům. Skutečnou hrozbou jsou slovníkové útoky a credential stuffing.
Příklady zranitelných hesel:
Qwertyuio1– klávesový vzor.Abcdefghi0– posloupnost.P@ssW0rD36– leetspeak varianta.Ghbdtn– QWERTY rozložení pro „Ahoj“.
Doporučení: fráze z 4–6 náhodných slov (slovník ~20 000: 20 000⁴ = 1,6×10¹⁷, desítky tisíc let zlomení). Vyhnout se citacím, používat oddělovače.
PIN kódy (4 číslice) nejsou chráněny odolností, ale omezením pokusů (3–10), s hardwarovou ochranou hashu.
Chyby vývojářů při ukládání hesel
Na serveru se hesla ukládají jako hash (bcrypt, Argon2, scrypt). Běžné chyby:
- Ukládání v plaintextu nebo slabém MD5/SHA-1.
- Chybějící salt – rainbow tabulky.
- Slabý hash bez iterací (rychlý bruteforce GPU).
- Žádný throttling nebo CAPTCHA.
- Credential stuffing bez kontroly unikátnosti přihlašovacích údajů v databázích úniků (Have I Been Pwned?)
Správný stack: Argon2id s memory-hard parametry, jedinečný salt na uživatele, rate limiting (např. 5 pokusů/min/IP).
Praktická doporučení
Pro uživatele:
- Unikátní heslo pro každý službu.
- Délka ≥12 znaků nebo passphrase (4+ slova).
- Správce hesel:
* Lokální (KeePassXC): plná kontrola, ruční synchronizace.
* Cloudové (Bitwarden): automatická synchronizace, hlavní heslo.
- Zapnout 2FA (TOTP, ne SMS).
Pro vývojáře:
- Vyžadovat passphrase nebo ≥16 znaků.
- Hashovat pomocí Argon2 (p=2, m=64MB, t=3).
- Rate limiting: exponenciální backoff.
- Passkey/WebAuthn pro nové systémy.
- Monitorovat úniky dat.
Co je důležité
- Délka hesla je kritičtější než rozmanitost znaků: 95⁸ >> 62¹² v odolnosti.
- Throttling + botnety = exponenciální nárůst nákladů útoku.
- Passphrase z náhodných slov zajišťuje více než 10¹⁷ kombinací.
- Ukládat pouze hash s salt a Argon2; plaintext = okamžitý kompromis.
- Unikátnost hesel předejde credential stuffing.
— Editorial Team
Zatím žádné komentáře.