Naprosto každý uživatel internetu to zná: používáte hromadu různých služeb, ke každé máte zvláštní heslo a vše si musíte pamatovat. To máme Google, Facebook, Twitter, firemní mail, Aukro, Wikipedie, ČSFD, Steam, Geocaching, tvárnice, překlady, krovy, latě, tašky, odpad, hřebíky, vruty, šrouby, dráty, to máte ty dvojlinky, trojlinky, plechy, zemnící drát, elektroměr, pojistky, hromosvod, krabice pod vypínače, krabice odbočná… Prostě je toho moc.
Pokud se chcete chovat bezpečně (a vy chcete), začnete dříve nebo později řešit, jak volit ke všem těmto službám hesla. Ta musí být ideálně různá, neodvoditelná, neuhádnutelná, dostatečně složitá a hlavně si je musíte pamatovat. Potíž je, že se jedná o neslučitelné požadavky, protože pokud máte pro každou službu různá hesla typu M3g4-H4X0R*
, začnou se vám velmi rychle plést.
Nejčastějším řešením jsou správci hesel. To jsou aplikace, které fungují jako databáze citlivých údajů, především hesel. Celá jejich databáze je pak šifrovaná jedním heslem, které by mělo být dostatečně silné. Nejznámějšími zástupci jsou KeePass či LastPass. Jsou dostatečně bezpečné a k dispozici mají různé mobilní verze. Přístup k heslům pak máte třeba i z mobilu.
Generátor místo trezoru
Velmi zajímavou alternativou takovým úložištím jsou generátory hesel. Hesla si nikam neukládají, ale jsou schopny je kdykoliv znovu vygenerovat, pokud si to bude uživatel přát. Generování probíhá opět pomocí jednoho hlavního hesla, k němu je ale přidána také informace o doméně, pro kterou se heslo generuje. To má několik nezanedbatelných výhod:
- Nemusíte si hesla složitě vymýšlet
- Na každém webu máte naprosto unikátní heslo
- Heslo je navíc velmi silné
- Neexistuje databáze, kterou byste mohli ztratit
- Neřešíte aplikaci pro mobil a další zařízení
- Hesla máte vždy s sebou, prostě si je vygenerujete
V praxi probíhá generování tak, že do (třeba webové) aplikace zadáte hlavní heslo a doménu. Aplikace pak vezme oba údaje, spojí je do jednoho řetězce a nad ním provede nějakou jednosměrnou hashovací funkci. Pro kombinaci hesla „kytička“ a „root.cz“ tak vyjde například „ytA0NbYJKX“. Pokud při stejném hesle „kytička“ změníte doménu na „facebook.com“, získáte „z5dhVl9y0c“. Hesla se díky hashovací funkci naprosto liší a nemají nic společného. Navíc jde o „náhodnou“ kombinaci nejrůznějších znaků, takže jsou to hesla velmi silná a neuhádnutelná.
Poznámka: Přestože všechny aplikace vás vyzývají k zadání doménového jména, vůbec se takto nemusíte omezovat. Můžete klidně zadat jméno svého serveru a vygenerovat si heslo pro něj. Při generování je totiž jen na vás, co zadáte do políčka „URL“.
Proti ukládání hesel do databáze je také zásadní, že o hesla nemůžete natrvalo přijít. Pokud by třeba váš prohlížeč přišel o databázi hesel a vy byste neměli jejich zálohu, budete v případě standardních hesel poměrně komplikovaně v každé službě žádat o obnovení a může se vám stát, že o některé účty přijdete úplně. S generátorem hesel si ale vše pohodlně vygenerujete zpět a během několika minut máte znovu přístup.
Celá bezpečnost tohoto konceptu závisí na síle hlavního hesla, které zvolíte. Komplikované heslo vám zaručí, že vaše hesla nikdo znovu nevygeneruje. Pokud ale zvolíte slabé heslo, vystavujete se stejnému riziku jako v případě zmíněných databází hesel – někdo heslo prolomí a bude mít přístup ke všem vašim účtům.
SuperGenPass
Existuje několik různých služeb, které podobnou funkci nabízejí. Zřejmě nejrozšířenějším je SuperGenPass, proto se budeme věnovat právě jemu. Pokud by se vám nelíbil, můžete si najít alternativu (třeba PwdHash) nebo si napsat něco podobného ve vlastní režii. Vězte ale, že už to vývojáři udělali za vás.
SuperGenPass najdete na jednoduché webové stránce a v základu se jedná o bookmarklet, tedy JavaScript zapsaný v adresní řádce prohlížeče a uložený v záložce. Jeho spuštěním se na otevřené stránce provede nějaká akce. V tomto případě budete dotázáni na heslo a provede se generování výsledného hesla pro konkrétní web.
Rovnou vás ale varuji před použitím tohoto bookmarkletu. Na jeho velký bezpečnostní problém upozorňuje například Michael Monteleone ve svém článku SuperGenFail. Potíž je v tom, že kód bookmarkletu běží ve stejném DOM prostoru jako samotná stránka. Je tak možné velmi snadno vytvořit webovou stránku, která bude číhat na použití SuperGenPassu (nebo jiného podobného bookmarkletu) a jakmile uživatel zadá své hlavní heslo, stránka si jej bez problémů odchytí a kamkoliv pošle. Proto bookmarklet zásadně nedoporučuji použít. (Nehledě na to, že samotnou koncepci bookmarkletů považuji za velkou čuňárnu.)
Existuje naštěstí podstatně lepší řešení: vygenerovat si heslo stranou nebo si pořídit rozšíření do prohlížeče, které bude odděleno od potenciálně nebezpečných stránek, které z něj heslo nedostanou. Krásně jednoduchou variantu nabízí přímo samotný web projektu v podobě mobilního generátoru. Ten se i přes svůj název vůbec neomezuje na mobilní telefon, ale je použitelný kdekoliv. Nejedná se o nic jiného než o implementaci generátoru v samostatné webové stránce. Ta nic nikam neposílá a vše probíhá v prohlížeči uživatele.
Tohle řešení je naprosto perfektní, funguje úplně všude, stránku otevřete bez problémů ve všech moderních prohlížečích na desktopu, v mobilech i v tabletech. Stránku si můžete uložit pro použití offline (kdyby web nefungoval) a její použití je přímočaré a rychlé. Pokud si pak heslo třeba uložíte do prohlížeče a už jej vlastně generovat nebudete, může vám tato stránka stačit.
Samostatné aplikace
Pokud ale dáváte přednost tomu, že si heslo vždy vygenerujete a nechcete ho mít nikde uložené, budete potřebovat něco, co vám zajistí lepší integraci s se samotným webem a tím pádem i pohodlnější práci při generování hesel. Proto vznikla různá rozšíření do webových prohlížečů.
Pro Firefox existuje Hash Password Generator, který zvládá podstatně více různých algoritmů včetně SuperGenPass. Má jen 43 kB a instalace je proto otázkou sekund. Na stránce s heslem pak stačí stisknout kombinaci Ctrl+Alt+H a objeví se vám dialog pro zadání hlavního hesla. Ten je navíc doplněn o obrázek, který se mění podle zadávaného hesla. Pokud si zapamatujete, jak má obrázek přibližně vypadat, snadno si ověříte, že jste heslo zadali správně.
Hlavní heslo je možné uložit do paměti prohlížeče a až do jeho vypnutí se vám pak bude na každé stránce s formulářem pro heslo automaticky generovat a předvyplňovat správný obsah.
V Chrome používám rozšíření SuperChromePass, které je velmi přívětivé a vřele jej doporučuji. Zdá se ale, že v Chrome Marketu už se nedá získat. Soubor s rozšířením je ale stále možné získat z GitHubu, odkud je možné jej nainstalovat. Vypadá to, že vývoj ustal, ale na druhou stranu na rozšíření už asi není co vylepšovat.
Toto rozšíření vám ke každému pass formuláři na webu přidá zelené ouško s písmenem P. Pokud na něj kliknete, vyjede vám malý dialog, do kterého vložíte své heslo. To se použije pro vygenerování a vložení výsledného hesla. V nastavení rozšíření je opět možné uložit si hlavní heslo pro konkrétní sezení, nebo si natrvalo uložit jeho hash. Formulář pak zezelená, pokud jste hlavní heslo zadali správně.
Zajímavá je ještě aplikace pro Android, která se jmenuje jednoduše SuperGenPass. Integruje se velmi jednoduše do prohlížeče. Pokud ji chcete použít, stačí podržet prst nad URL a vybrat „Sdílet stránku“ se SuperGenPass. Vyskočí na vás dialog, ve kterém si vygenerujete heslo. To se zkopíruje do schránky, takže po návratu na web jej pak stačí vložit.
Podobných řešení existuje celá řada, pro zajímavost nabídnu ještě skript v Perlu, který vám umožní generovat hesla přímo na příkazové řádce.
$ supergenpass master password = kytička domain = root.cz site password = ytA0NbYJKX
Kde jsou háčky?
Nic není dokonalé, takže i tady existuje několik situací, při kterých nebude použití SuperGenPass ideálním řešením. Považuji za nutné vás na ně upozornit předem. Většina z nich naráží na to, jak vypadají hesla, která algoritmus generuje.
Například pokud systém vyžaduje konkrétní podobu hesla, stává se generátor nepoužitelným. Nedokáže totiž vyhovět požadavkům typu „zvolte číselné heslo dlouhé šest až deset znaků“ nebo „heslo musí obsahovat alespoň tři číslice“. V takové situaci musíte sáhnout vedle a vytvořit si heslo jinak.
Stejně tak může systém vyžadovat změnu hesla po určité době. Zde je ale možné použít elegantní řešení: za hlavní heslo nebo za doménu budete přidávat číslici, kterou při každém požadavku o změnu hesla zvýšíte. Po heslu „kytička1“ tak bude následovat „kytička2“ a tak dále. Výhodou je, že výsledné heslo se ve skutečnosti změní výrazně, takže obejdete i automatické hlídače podobných triviálních úprav hesel.
Dalším problémem, na který v denní praxi se SuperGenPass narážím, jsou různá uživatelská jména na různých webech. Jednou má jméno podobu e-mailové adresy, podruhé jde o číslo, jindy zase při registraci není volné vaše běžně užívané jméno. Stejně tedy musíte udržovat nějakou databázi uživatelských jmen. Výhodou ovšem je, že ta už nemusí být nijak zvlášť chráněná a jména můžete mít klidně na lístečku v peněžence. Jejich vyzrazení obvykle není bezpečnostním problémem.
Posledním bezpečnostním problémem je fakt, že vyzrazení jednoho hesla vás bude stát všechny vaše účty, kde SuperGenPass používáte. Neměli byste proto hesla generovat na počítači, kterým si nejste stoprocentně jisti. Já to řeším tak, že mimo své standardní počítače si hesla generuji na mobilu a pak je přepisuji ručně do počítače. Samozřejmě je třeba se chovat obezřetně a do nebezpečných počítačů ideálně nezadávat vůbec nic.