Proč se bezpečností hesla vůbec zabývat
První věc, která běžné uživatele napadne, proč si vlastně lámat hlavu s bezpečností hesla. Přece pokud si dá heslo k e-mailu například obligátní "heslo", "111" anebo třeba jméno svého psa, stejně na to většinou nikdo nepřijde a i kdyby, tak co, stejně v tom e-mailu není nic důležitého. První problém nastane, že "v tom mailu není nic důležitého" na začátku... ovšem třeba za dva roky má tentýž uživatel heslo stále "heslo" a v archivu e-mailu jde dohledat soukromé maily, přístupová hesla k nejrůznějším stránkám, potvrzovací maily elektronického bankovnictví a podobně. V mnoha případech takový uživatel pořád říká "vždyť tam stejně není nic důležitého" a na to, že tam vlastně něco důležitého je přijde až ve chvíli, kdy se s tím mailem něco stane. Navíc si dotyčný na to heslo zvykne a používá ho nebo jeho varianty třeba i ve firemní síti, elektronickém bankovnictví atd. A opět často podceňuje možnosti jeho zneužití. Přitom nejcennější bývají právě informace. Koneckonců, příkladem jak moc se bezpečnost hesel podceňuje je slovenský úřad na ochranu utajovaných skutečností, Národný Bezpečnostný Úrad- NBU SR, kde byl administrátorský účet nbusr s heslem nbusr123. A teprve když je v roce 2006 někdo hacknul, vznikla z toho velká aféra.
Druhý omyl je, že na heslo typu jméno partnera, dětí, domácích zvířat a podobně stejně nikdo nepřijde. Dokonce právě naopak, pokud by se heslo snažil prolomit třeba kolega nebo někdo, kdo daného uživatele alespoň trochu zná, je prolomení takovéhoto hesla otázkou chvilky. Často na to dokonce stačí i jeden jediný pokus.
Co to vůbec znamená bezpečné heslo?
Pro pochopení, jak vytvořit bezpečné heslo, je dobré vědět, jakým způsobem se hesla obvykle lámou. Nejpoužívanější metody jsou:
- Sociální inženýrství. Žádný hacker, zalezlý kdesi s notebookem, mezi nejúčinnější metody útoků patří právě toto. Útočník se snaží zjistit buď přímo zjistit heslo, nebo informace, které ho k heslu dovedou. Představa, že se hacker prostě zeptá uživatele na jeho heslo, zní možná absurdně, nicméně podle experimentů funguje v až neuvěřitelně vysokém procentu případů. Druhá varianta je zjistit si základní informace o daném člověku a potom zkusit zmiňované jméno partnera, dětí, dalších rodinných příslušníků, nebo domácích zvířat. Když jsem byl na vysoké škole, slyšel jsem o jedné spolužačce, která dělala diplomku na téma lámání hesel. Součástí diplomky byla i praktická část, kdy se dohodla s jednou středně velkou firmou, že se jí tam zaměstnají a ona bude mít za úkol získat hesla co nejvíce zaměstnanců firmy. A prý se jí povedlo získat hesla zhruba 80% lidí ve firmě.
- Odchycení hesla. K tomu se používají například tzv. keyloggery (programy pro snímání stisknutých kláves na klávesnici) a podobné. K instalaci takového programu do počítače oběti lze použít opět sociální inženýrství- jak popsal například slavný hacker Kevin Mitnick při své návštěvě v Praze na dotaz, jak by hacknul například počítačovou síť Eurotelu: prý by si vzal oblek a kravatu, šel do centrály Eurotelu a na několika místech tam zanechal CD nadepsané "Mzdové výhledy na 1. čtvrtletí", na kterém by byl uložený škodlivý program.
- Slovníkový útok. Nyní už se dostáváme k tomu, co si asi většina lidí představí pod termínem "hacker". Útočník má slovník slov daného jazyka a zkouší zadat jako heslo jednotlivá slova z tohoto slovníku. Samozřejmě je nezadává ručně, ale automaticky pomocí počítačového programu. Případně se pokusí získat uložený hash hesla, podle kterého se správnost hesla kontroluje, aby mohl heslo porovnávat přímo na svém počítači. Takovým způsobem pak může vyzkoušet mnoho hesel za sekundu.
- Útok hrubou silou. Nejprimitivnější varianta útoku, útočník zkouší postupně zadávat všechny kombinace, například: aaa, aab, aac, aad,... Pro tento typ útoku je skoro nutné nezadávat heslo přímo do aplikace, ale mít možnost porovnávat správnost hesla někde "stranou".
- Poslední je spíše nepřímý útok: prolomení hesla do nějaké špatně zabezpečené aplikace a sázka na to, že uživatel použije stejné heslo i jinde.
Bezpečné heslo je potom takové, které je schopné co nejlépe odolávat zmíněným pokusům o prolomení.
Jaké by mělo být bezpečné heslo?
Existují obecná pravidla, jak by mělo uživatelské heslo vypadat. Zkusím vypsat ta hlavní a připsat k nim i důvody, proč je dodržovat a další komentář.
- Heslo by se neměl tvořit nějaký snadno dohledatelný údaj o uživateli. To bylo myslím dostatečně rozebráno výše.
- Heslo by nemělo být reálně existující slovo a mělo by obsahovat písmena, čísla a další symboly. Důvod je prostý, pokud heslo netvoří existující slovo, nelze ho prolomit slovníkovým útokem (pozor, například "heslo1" je sice bezpečnější, než "heslo", ale důmyslnější slovníkový útok by ho také prolomil). Navíc použití dalších symbolů výrazně zvyšuje počet kombinací při útoku hrubou silou- rozeberu blíže v dalším bodě. Doporučuje se kombinovat i velká a malá písmena, tady už bych si nebyl tak jistý, většinou se takové heslo hůře pamatuje. Osobně bych nedoporučoval používat v hesle písmena s diakritikou, sice je takové heslo bezpečnější, ale vznikají problémy při jeho zadávání.
- Heslo by mělo mít nejméně 6 znaků. Tady je to prosté, čím delší heslo, tím více kombinací a tím složitější útok hrubou silou. Například řekněme, že útočník bude mít k dispozici systém (třeba několik propojených počítačů), který bude schopný porovnat tisíc hesel za sekundu. Písmen anglické abecedy je 26, pokud útočník bude vědět, že heslo má tři znaky a je z malých písmen bez diakritiky, má 26*26*26 = 17 576 různých možností. Útočníkův systém by dokázal porovnat všechny možné kombinace za 17,6 sekundy. Nyní řekněme, že písmena mohou být malá i velká. Počítač ukládá písmena pod číselnými kódy, například slovo "heslo" pro něj bude něco úplně jiného, než "Heslo" nebo "HESLO". Počet možných kombinací se tedy zdvojnásobí. Porovnat všechna tříznaková hesla bude útočníkovi trvat zhruba 35,2 sekundy- pořád nic moc bezpečného. Přidáme čísla, těch je deset, každý znak hesla tak už může mít 72 různých variant. Vyzkoušení všech tříznakových variant už bude na daném systému trvat 373 sekund, tj. přibližně 6 minut. Přidejme ještě tyto symboly: !@#$%^&*_-=+.,:;?" - je jich 18, celkový počet kombinací už bude 90. Stále máme jen tříznakové heslo, ale na daném systému už vyzkoušení všech variant nebude trvat 17,6 sekundy, ale přes 12 minut. Řekněme navíc, že útočník neví, jak dlouhé je heslo. Bude tedy muset postupně zkoušet všechna jednoznaková, dvouznaková (ve skutečnosti by si asi útočník zjistil minimální délku hesla, kterou daná aplikace umožňuje zadat, a zkoušel by od ní nahoru) atd. Prodloužení hesla o jeden každý znak zvyšuje náročnost tolikrát, kolik různých symbolů může na tom místě být. Pokud tedy například útočník ví, že heslo tvoří jen malá písmena (nebo jen velká), přidání jednoho každého znaku zvýší náročnost vyzkoušení všech variant 26krát. Pokud útočník zkouší malá a velká písmena, číslice a uvedených 18 symbolů, každý další znak hesla zvyšuje náročnost vyzkoušení všech variant 90krát. To je rozdíl dost podstatný. Pokud útočník bude mít ten výše uvedený systém a bude zkoušet malá a velká písmena, číslice a symboly, vyzkoušet všechna hesla od 1 do 4 znaků mu bude trvat přes 18 hodin. Vyzkoušet pouze pětiznaková hesla už ale bude trvat přes 68 dní. Všechny šestiznakové varianty už by zabraly 17 let výpočtů. Na tom je vidět, jak prodloužení hesla o pouhý jeden znak může radikálně ovlivnit čas potřebný na jeho prolomení hrubou silou.
Nojo, jenže jak si takové heslo zapamatovat?
Z výše uvedeného vychází jako bezpečné například heslo 9fa50ddac2b6a96cbfcf97e53cbd53e4 jako bezpečné. Problém je, že takové heslo si těžko někdo zapamatuje. A napsat si heslo na lísteček a nalepit si ho na monitor určitě také není zrovna dobré zabezpečení. Přesto lze vytvořit bezpečné a zapamatovatelné heslo. Vtip je v tom, že si sice pamatujete nějaké jednoduše zapamatovatelné heslo, ale to používáte jen jako mnemotechnickou pomůcku pro zadání hesla.
Příklad: Pamatujete si například říkanku "Měla babka čtyři jabka a dědoušek jen dvě" a na základě toho si vytvoříte heslo: mb4j+dj2. Takové heslo je prakticky nemožné odhadnout, nefunguje na něj slovníkový útok a je velmi odolné proti útoku hrubou silou. Přitom není těžké si ho zapamatovat. (poznámka: ale ne že si všichni po přečtení tohoto článku nastavíte heslo zrovna mb4j+dj2 :-) ).
Další možnost je použít takzvaný leet speak. To je jakýsi "internetový slang", který se vyznačuje hlavně komolením anglických slov a nahrazováním písmen ve slovech vizuálně podobnými symboly. Samotné slovo "leet" [lít] vzniklo zkomolením ze slova "elite" (leet speak je tedy "elitní řeč", "řeč elity") na "eleet" a z toho "leet" a píše se jako "l33t" anebo "1337" a "leet speak" například jako "l33t sp34k". Tady je vidět i to nahrazování za vzhledově podobné symboly, například E-3, A-4, T-7, L-1 (také I-1), další jsou například O-0, S-5, R-|2 nebo V-\/. Větší tabulku najdete například na Wikipedii pod heslem leet. Obvykle je to spíše otravné, protože to používají na diskusních fórech lidi, kteří si myslí, že je to "cool" a znepříjemňují tak ostatním čtení svých příspěvků. Pokud si ale na toto zvyknete, je možné to využít pro zvýšení bezpečnosti svých hesel.
Příklad: Máte psa jménem Betynka. Pamatujete si tedy "Betynka", ale napíšete to v leet speaku, například: B37ynk4.
Opět jde o relativně bezpečné heslo, které není těžké si zapamatovat. Jen musíte volit dostatečně dlouhé heslo, například dát si místo "heslo" "h3sl0" je určitě bezpečnější, ale přesto ne úplně bezpečné. V tomto případě by také útočník mohl vylepšit slovníkový útok a takové heslo prolomit. Problém (z pohledu útočníka) ale je, že leet speak má hodně variant a každý používá trochu jiný. Například pro slovo "heslo" by byly obvykle používané náhrady pro leet speak: h na /-/, e na 3, s na $ nebo 5, l na 1, o na 0. Když se sečtou všechny kombinace, dá to místo jednoho slova 48 různých kombinací, a to nepočítám kombinování velkých a malých písmen.
Další možností je například dát si ke jménu psa ještě datum jeho narození a navíc vše posunout o dva znaky. Takže pokud se například Betynka narodila v roce 2004, mohlo by heslo být třeba: tynka04*Be. Výhodou tohoto je, že když chcete heslo například každé dva měsíce měnit, můžete prostě vždy posunout o další znak, tj.: tynka04*Be, ynka04*Bet, nka04*Bety atd. Samozřejmě v zájmu co nejvyšší bezpečnosti je lepší přeskočit ty varianty, kde se slovo "Betynka" vyskytuje dohromady. Jiná varianta je třeba nahradit samohlásky například hvězdičkami. U našeho příkladu a Betynka04 by to bylo: B*t*nk*04.
Různých postupů je mnoho a samozřejmě si můžete vytvořit svůj vlastní, záleží jen na tom, co si budete nejlépe pamatovat.
Zacházení s hesly
Samotné vytvoření hesla je jedna věc, ale bezpečnost hesla může podstatně ovlivnit i další zacházení s hesly. Zde jsou některé obecné rady ohledně hesel:
- Je dobré mít různé "úrovně" hesel. Například jednoduché heslo (typu "heslo123") pro diskusní fórum a vedlejší e-maily (které třeba vnikly kvůli tomu, že na diskusním fóru nechcete používat svou hlavní adresu). Potom "bezpečné" heslo pro hlavní e-mail, pracovní počítač a podobné. A "nejbezpečnější" heslo například pro Internetové bankovnictví. Hesla by si neměla být příliš podobná (například mít "heslo123", "h3sl0123" a "*h3sl0123*" není příliš dobrý nápad). Účelem je zabránit tomu, aby heslo získané například zneužitím špatného zabezpečení diskusního fóra bylo použitelné i pro e-mail anebo dokonce elektronické bankovnictví.
- Pro hesla na té nejbezpečnější úrovni (jako elektronické bankovnictví) lze pro větší bezpečnost přidat ještě dodatečná pravidla: Heslo pravidelně měnit a stejné heslo nepoužívat nikde jinde. Ta nejbezpečnější úroveň hesla se málokdy použije pro více než dva-tři případy, pro většinu lidí snad nebude problém si pamatovat jedno jednoduché heslo, dvě bezpečná (i zde je lepší nepoužívat všude stejné) a dvě aktuální velmi bezpečná.
- Rozhodně neukládejte heslo na nebezpečných místech. To se týká jednak lepení papírku s heslem na monitor :-) a jednak ukládání v počítači- není dobrý nápad mít například heslo k e-mailu uložené ve webovém prohlížeči v Internetové kavárně, ve škole nebo podobně. Stejnětak není dobré například ve zmíněné kavárně odejít a nechat na počítači svůj přihlášený e-mail.
- Dbejte o základní pravidla zabezpečení svého počítače- nainstalované aktualizace v operačním systému, antivir a firewall, neklikat na každý odkaz, který přijde od někoho neznámého e-mailem a podobně.
- Existují stránky, tvářící se jako stránky Internetového bankovnictví různých bank, za účelem vylákání hesla z uživatelů (tzv. phishing). Proti tomu se můžete chránit například tak, že si stránku Internetového bankovnictví uložíte mezi oblíbené a následně na ní chodíte vždy jen přes ten odkaz. Moderní prohlížeče (Opera, Firefox, Internet Explorer 7) mají také funkci ochrany proti podvodným stránkám neboli tzv. phishingu. V takových prohlížečích si můžete aktivovat ověřování stránek a pokud stránka není ověřená, přihlašovací údaje k Internetovému bankovnictví nezadávejte.
Na druhé stránce několik stručných poznámek o heslech z pohledu administrátora a tvůrce webových stránek.