Hlavní navigace

Jak se Češi s hesly potýkají: analýza 16 tisíc ukradených hesel

Edvard Rejthar

Dostalo se nám pod ruku přes sto tisíc hesel jednoho českého e-shopu, která hacker odcizil minulý rok. Z nich jsem analyzoval 16 587 kousků obnažených v plaintextu.

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á osmiznaké 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. Tříznaké heslo máme jen jedno: „.85′.“.

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ěle 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ě dvou– či čtyřmí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 (12× Praha, 11× Brno, 8× Ostrava), vyznání (14× Sparta, 8× Baník, 4× Slávie), 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 (4× piva, 1× fernet, 1× 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ň třemi 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 mezi 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í.

Update: 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ž pěti 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 sekund. Na pěti písmenech začíná největší šlendrián – „UTERY“ (alespoň že velkými), „drzek“, 2× „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.

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 výchozí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ů.

Znak „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 stříška ^.

Nejčastější kombinace skupin

Hesel, která jsou tvořena 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 dvě číslice, další dvě na čtyři číslice, tisíc a půl hesel je zakončeno třemi číslicemi, tisícovka jedinou číslicí a půl tisíce má dokonce šest čí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á pět 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

Update: 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 looserovi. Looser 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 zásadní.

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

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.

Článek původně vyšel na blogu CZ.NIC.

Našli jste v článku chybu?
16. 12. 2016 7:21
Prezdivka (neregistrovaný)

Ja bych spis rekl, ze problem je ve vyzadovani registrace pro prakticky kazdou sluzbu i tam, kde to neni nutne.

Samozrejme jsou sluzby, u kterych to bez registrace proste nejde, ale jsem si celkem jisty, ze pocet sluzeb, kde by to bez registace prakticky neslo, oproti poctu sluzeb, ktere dnes registraci vyzaduji apriori (at uz jde o sebemensi blbost), je mene nez polovicni. Treba Root (lupa family) je jednim z poslednich mohykanu, kde clovek jeste muze prispivat bez registrace. Ne ze by se lidi…

16. 12. 2016 1:47
Hnidopich (neregistrovaný)

Jeden ucet vladne vsem. :-) Co ze to tuhle hackli? OpenID? Nebo to bylo jine "UBER ID"... uz nevim. Ja tedy radeji, kdyz mi hacknou jen jeden ucet pro jednu sluzbu...