Jak se Češi s hesly popásají

Dostalo se nám pod ruku přes sto tisíc hesel jednoho českého e-shopu, která hacker odcizil minulý rok a nedávno je umístil na pastebinu. Z nich jsem analyzoval 16 587 kousků obnažených v plaintextu, ostatní hesla zůstala ve výchozí podobě přidělené serverem. Předkládám vám tuto svou skromnou studii, která původně neměla za cíl nic jiného, než si povšechně zaokounět nad podobou českých hesel, nakonec se však vyvinula v kolůsek, který Národnímu bezpečnostnímu CSIRTu pomohl vyvinout lepší způsob regulární analýzy nad množinou dat.

Soudě dle uživatelských jmen se z dobré poloviny jedná o hesla majitelů e-mailu na Seznamu, z šestiny na Gmailu, z desetiny na Centru.

Počet znaků v hesle

Křivka závislosti počtu hesel na délce ze začátku prudce stoupá a potom pozvolněji klesá. Vrchol má v bodě 8 (znaků) – celá čtvrtina uživatelů používá 8znaké heslo (4401), což může být způsobeno tím, že při se zadávání často vyžaduje minimální délka hesla 8. Téměž shodný počet lidí používá kratší heslo (4853), zbylá polovina má heslo delší (7329). Celých 90 % hesel je mezi 6 a 11 znaky. Pouze 6 hesel je delší 18 znaků: jedna snadno zapamatovatelná anglická fráze, frontman Slipknotu s číselnou řadou, vyjádření lásky k hrám Doom a Far Cry. A kraluje 26znakové heslo, které se skládá ze slova „prosím“ a úctyhodných dvaceti číslovek, které musí být med si pamatovat. 3znaké heslo máme jen jedno: „.85′.“.delka_hesla_log_update

Kořeny slov

Stáhl jsem si seznam lemmat českého národního korpusu, odstranil lemmata kratší než 4 znaky a porovnal s textem, abych zjistil, jaké kořeny slov se v heslech nacházejí. Seznam obsahuje všechna používaná slova, tj. nejenom česká, ale narazil jsem i na anglická (player), německá (Wassermann), francouzská (maison), profláklá latinská (deus). Třetina hesel se nepodobá ničemu (‚kekeke78‘, ‚.“y!W‘, ‚IDkfa75jj‘), přes deset tisíc hesel však obsahuje nějaké rozpoznatelné slovo.

Vůbec nejoblíbenější řetězec je „zone“, vyskytuje se v obměnách celkem 184× (‚xzonelogin‘, ‚xzone44‘, ‚psikzone‘). Jistě ne náhodou je to část jména e-shopu – z toho je vidět, jak lidé rádi jméno služby používají v hesle.
Dominují především jména: potkal jsem 103 petrů, 85 janů, na 70 lukášů a martinů, 60 tomášů, 50 davidů, 40 pavlů, na 30 jardů, adamů, míš, jakubů, honzů, pepů a 24 výskytů ojedinělě anglického jména john (další anglické jméno je až george – 8 výskytů). Vzorek není dostatečně reprezentativní, ale zdá se, že převažují jména mužská, ženy se zřejmě volí do zdrobnělin. Ženám vede 22 lenek, 14 peter a aniček, 13 páj, 13 lucek – a zvlášť 13 lucinek, 12 elišek, 8 velkých terez a 9 malých terezek, které mají za sebou důsledně 2 či 4místné číslo nebo partnera martina. Kromě toho 176 hesel obsahuje ženské příjmení končící „-ova“. U 50 z nich obsahuje příjmení i uživatelské jméno a zde v dobré polovině případů totéž příjmení. Lze spekulovat, že druhá polovina představuje jméno ženy za svobodna. Uživatelských jmen na „ova“ je celkem 1186 (po odečtení n-ová-ků).

V říši zvířat jsem našel 33 psů (z toho 13 i se svým jménem), 22 draků a 7 dragonů, 18 lam, 8 králíků a slonů, 7 orlů a kaprů, 6 klokanů, opic, ryb a veverek, 4 osli, tygři a kuřata, 3 očíslované kočky, 6 kocourů, 6 mourků, 3 myši a 3 potkani, 2 krávy, 1 slepici, žirafu, vlka, vlkodlaka a vlka jakuba, 1 pavouka a 6 spiderů.

Co jsem našel dál? Parentální vztahy (11× mama, 10× maminka, 9× tata, 2× tatinek a 1 tataracek), městskou příslušnost (12x Praha, 11x Brno, 8x Ostrava), vyznání (14× sparta, 8× banik, 4× slavie), výrobky (11× asus, 9× acer, 9× nokia, 8× samsung), hambatosti (4× nas*at, 7 orgánů ženského pohlaví, 15 kokotů, 11 hoven a 13× pr*el (v kombinaci s rokem narození, množstvím v ní obsaženého či prováděnou činností); pr*el je k tomu i 6× v e-mailu a coby bonus nalézáme 9× prd v různých situacích), sex (je spíše v uživatelských jménech – 15×, oproti 10 výskytům v heslech) a návykové látky (4x piva, 1x fernet, 1x becherovka).

Nejfrekventovanější heslo coby podstatné jméno je „heslo“ – 68 výskytů (‚tajneheslo1998‘, ‚heslonetreba‘, ‚Megaheslo‘, ‚heslo‘ a číslo…). Se 43 výskyty se objevuje lemma „kolo“ (43×), v závěsu jsou tři anglicismy „game“ (38×), „star“ (34×), pozitivní „kill“ (24×) a „ahoj“ (19×). Následuje seznam slov s alespoň 3 výskyty. Ovšem slova pod deset výskytů jsou zde většinou, jen pokud patří k delším nebo zajímavějším kouskům. Vypsal-li bych všechna ojedinělá kraťoučká slova, asi by vás to nebavilo.
17× shop
16× moto
15× dark
14× fotbal
13× master
12× nakup
12× poklop, super, tiscali (tito autoři nepoužívají současně schránku na doméně tiscali), veslo (asi že se rýmuje s ‚heslo‘: ‚vESLO‘, ‚hesloveslo5‘, ‚oveslo1′,’prdaveslo‘)
11× rock, craft, kolik, destiny, auto
10× forever, team, mega
9× magor a milacek
8× cert (což asi nebude zkratka pro náš bezpečnostní tým CSIRT.CZ), rambo
7× kofola a matrix
7× sluníčko a motor
6× silver a street
5× policie, jahoda, lopata, okurka, kostra, password, shadow, future, citron, mazlik, trabant
5× vanoce a geniove
4× aragorn, chleb, gothic, storm, milanek
3× slunce, kytara, wanted a meloun

Nutno podotknout, že jsem ignoroval lemmata, u nichž se zdálo, že drtivě nereprezentují konkrétní slovo – například hned druhé nejfrekventovanější lemma vůbec, „inka“ (149×), se vyskytuje jen v koncovkách (‚Dusinka‘, ‚pavlinka90‘, ‚zibrinka‘) – skutečnou slečnu „Inka12“ máme jenom jednu.

Cestou hesly jsem nezachytil vůbec žádnou diakritiku. Též všechno jsou jen první pády – pokud si někdo zvykne používat třeba sedmý pád, hned bude odolnější vůči slovníkovému útoku. Lemmat (základních tvarů) existuje na 120 000; pokud použijeme i pády a další tvary slov, hned se topíme v miliónech kombinací.

Aktualizace, 21. 12. 2016: Pozorní čtenáři si všimli, že hesla, která jsem dával za příklad nesmyslných, smyslná jsou, akorát já jejich význam neznal. I vzal jsem proto 6 tisíc slov, které neodpovídaly žádnému mému lemmatu, a prvních pár set porovnal od oka. V nich jsem našel pozpátku patriku (‚akirtap‘), chytré přesmyčky (‚mocomurka‘, ‚tzgrik‘, ‚sfetujse‘), proloženinu („n1a2g3a4n5o“), leet-speak (‚Pr3d@t0R‘, ‚ko!ej?-3‘) a skutečných zatemněných blbostí („fjlsyqwkkf“, „kkhzpm132“) asi třetinu – polovinu: Třetinu, pokud jsem uvažoval jen 1447 hesel bez číslic, polovinu, pokud jsem číslice zahrnoval.
Také jsem zjistil, že Korpus neobsahuje slovo rampepurda (díky heslu ‚rampepur-da‘).

Dále jsem si původně myslel, že se Češi v heslech zdráhají diakritiku používat; než jsem sám zkusil, že Seznam, Centrum ani Google diakritiku v současnosti nedovoluje a že se její použití obecně nedoporučuje. Přestože teoreticky Unicode znakům v heslech nic nebrání a já bych je uvítal s otevřenou náručí, v praxi bychom si vylámali zuby nad nedostupností našich oblíbených znaků na mobilu a v zahraničí a nad systémy, které znaky v hesle nenormalizují. (Nechci zabíhat, ale vězte, že ve světě Unicodu není ‚č‘ jako ‚cˇ‘.).

Skupiny znaků

Žádné heslo o méně než 5 znacích není tvořeno jen malými písmeny; tací autoři se snaží. Vyjma „T601“ a „Pes5“ se jedná o obtížná hesla, co bych asi neuhodl a co by stroji crackujícímu hash mohla trvat i několik vteřin. Na pěti písmenech začíná největší šlendrián – „UTERY“ (alespoň že velkými), „drzek“, 2x „Gabka“ (přičemž jedna z nich se tak jmenuje) apod.

Rozdělil jsem všechna hesla podle kategorií, zda obsahují písmena malá, velká, číslice a všechny ostatní, speciální znaky.

skupina_znaku

Vypadá to, že žádné heslo není tvořeno jen speciálními znaky. Kolik hesel je tvořeno jen číslicemi, nedovedu říct – nerozpoznám je od deafultních hesel. Celkem máme 720 hesel, která používají speciální znak; 124 mají speciální znaky dva, v 46 případech jsou dva speciální znaky za sebou. Nejoblíbenější je tečka, vyskytuje se 211×, z toho 57× na konci slova.
Přidávám úplný seznam speciálních znaků.

skupina_spec_znakuZnak „větší než“ nemá nikdo. Též nikdo nepoužívá dvojtečku, což mě překvapuje, protože je na klávesnicích běžně k dostání, rozhodně o něco více než „větší než“ > a třeba circumflex ^.

Nejčastější kombinace skupin

Hesel, která jsou tvořeny písmeny s číslicemi na konci je většina – 8037 výskytů (‚pepa1256‘, ‚frank167‘, ‚pidos007‘, ‚obchod1254‘). Z toho dvě tisícovky hesel končí na 2 číslice, další dvě na 4 číslice, tisíc a půl hesel je zakončeno 3 číslicemi, tisícovka jedinou číslicí a půl tisíce má dokonce 6 číslic.
Pokud je v hesle číslice, bude to s největší pravděpodobností jednička (5542 hesel). Pokud jsou v hesle dvě číslice za sebou, bude to jedna dva (1101 hesel); pokud číslice mají být totožné, jsou to dvě nuly (584 hesel).

Korelace s přihlašovacím jménem

Zkoumal jsem zajímavou otázku, zda lidé používají heslo, které se podobá přihlašovacímu jménu. Ano; když jsem vzal každý sled pěti znaků hesla a hledal je v řetězci jména, ukázalo se, že každý třináctý uživatel: 1297 hesel má 5 a více znaků stejných nebo zcela shodných s e-mailem.
ondraluk@email.cz → 2ondraluk
zinule.m@seznam.cz → zinulem
genius1006@gmail.com → netGENIUS11
martin.sn@atlas.cz → martin0117
pmachtik@centrum.cz → machta100
alledain@seznam.cz → Alledain

Aktualizace, 21. 12. 2016: Dále jsem na podnět z diskuze provedl analýzu dle Levenshteinovy vzdálenosti řetězců. Neporovnával jsem však vždy uživatelské jméno a heslo, ale bylo-li heslo kratší, zkusil jsem je co nejlépe napasovat na každý kus uživatelského jména: například pro ‚kuřivod‘ a ‚vod‘ bych nepočítal vzdálenost 4 (tj. škrtnuté ‚kuři‘), ale 0; protože ‚vod‘ perfektně pasuje na poslední tři písmena kuřivoda.
Odhlédl jsem od velikosti písmen a zašátral, které dvojice mají vzdálenost maximálně tři (kterážto se mi zdála jako hraniční, abych mezi jménem a heslem viděl jasnou podobnost). Našel jsem tak dalších 558 dvojic se silnou vazbou. Uvádím příklady, jak se uživatelé snaží přesmyknout.

vnovak@example.com → vaclnov (rozvinul křestní jméno místo příjmení)
bob.novak@example.com →bob750 (přidání čísla)
stanislav.opris@example.com → stanoddb (zkrácení křestního jména)
jana2s@example.com → janasu (bytí janou)
ja.broulik@example.com → janbr (vynechání tečky)
mariella@example.com → maryella (měkké i / tvrdé y)
hrabovskyj@example.com →Hr48ovsky (kapitalizace, leet speak)

Závěr

Osobně si myslím, že je lepší heslo delší nežli složitější – deset jednoduchých znaků se vyplatí mnohem více než tři složité. Ovšem jak vidíme, ať je heslo dlouhé či krátké, ať obsahuje obskurní znaky nebo jenom latinku, všechno marné, když poskytovatel příliš nehashuje. Vzpomínám si na vtipy o hackerovi, lamerovi a loserovi. Loser si dá heslo ‚zuzana‘, protože kdo by mohl tušit, že se jeho manželka jmenuje Zuzana? Hacker si dá heslo ‚zuzana‘, protože je mu jedno, jestli ho někdo hackne. Lamer si dá heslo ‚n#FG*[f83‘ a každý týden ho zapomene.

Používejte jiná hesla na různé služby; ach, alespoň na ty kruciální.

Pro psaní článku byl využit Český národní korpus: Srovnávací frekvenční seznamy. Ústav Českého národního korpusu FF UK, Praha 2010. Dostupné z WWW: http:ucnk.ff.cuni.cz/srovnani10.php
Citlivá data použitá v článku jsou pozměněna – všechny e-mailové adresy a některá hesla. Někdo má hezké krátké heslo, tak mu ho tu neprásknu.

Autor:

Komentáře (10)

  1. Petr říká:

    Velmi zajímavý článek, díky. Celkem by mě zajímalo, který eShop ukládá hesla a ne jejich hash :-(

  2. 2.Petr říká:

    Zdravím. Uvítal bych někde stránku, kde by se ty hesla daly zkontrolovat. Neuvádíte e-shop a dost lidí používá stejná hesla.

  3. bezpecak říká:

    Díky za zajímavé statistiky. Dovolím si však výrazně upozornit na jednu nepěknou věc z textu.

    Tvrzení „Češi se zdráhají v heslech používat diakritiku (což je možná škoda)“ zcela chybně nabádá neznalé čtenáře k používání diakritiky, což však má dva zásadní problémy (viz. výzkumné papery na téma hesel):

    a) Použití diakritiky sílu hesla zvýší zcela zanedbatelně (oproti tomu mnohem výrazně zvýší bezpečnost přidání jednoho ASCII písmene k celkové délce hesla).

    b) Způsobuje to nekonečné problémy při přihlašování z jiného než osobního počítače kvůli různícím se klávesovým layoutům (které např. v zahraničí často nebývají dostupné na přihlašovacích obrazovkách), nedostupnosti znaků (různá mobilní zařízení tím trpí) či hloupé systémy, které diakritiku interně ukládají chybně a validace hesla je poté nemožná.

    Mimochodem hochům z CSIRT bych důrazně doporučil prostudovat https://github.com/dropbox/zxcvbn (soudím, že na zxcvbn hoši ještě nenarazili, protože jinak by tento „kolůsek, který Národnímu bezpečnostnímu CSIRTu pomohl vyvinout lepší způsob regulární analýzy nad množinou dat“, jak autor uvádí, CSIRTu příliš nepomohl).

  4. caracho říká:

    9-ti místná hesla tvorena cislicemi nejsou zadne hashe, ale opravdu hesla. Tvoril je takto jejich system automaticky pri registraci.

    2 Petr: ten leak hesel se da snadno vygooglovat

  5. matlafous říká:

    Nevím proč s tím děláte brikule a nenapíšete rovnou XZONE.CZ protože to každý ví a oni se ještě nestyděli prohlásit že používají MD5 což byla velmi pravděpodobně pitomost.

  6. Lukáš říká:

    „Looser“ bude asi spíš „loser“.

    • Vilém Sládek říká:

      Dobrý den a děkujeme za upozornění.

      Omlouváme se, máte samozřejmě pravdu. Chybu jsme už opravili.

      VS

Zanechte komentář

Všechny údaje jsou povinné. E-mail nebude zobrazen.