Kouzlo standardizovaného řešení

Je tomu přibližně čtvrt roku, co do datových schránek přibyla možnost rozšířit autentizaci přihlašovacím jménem a heslem o hesla jednorázová (OTP – One Time Password). Toto rozšíření umožňuje výrazně zvýšit zabezpečení datové schránky před prolomením či odcizením hesla.

Jednorázová hesla v datových schránkách si může uživatel buď generovat na mobilním zařízení a nebo nechat zasílat pomocí SMS. Vzhledem k tomu, že druhá možnost je placená, upne se asi většina zájemců o tuto funkci k variantě první. Díky tomu, že se programátoři datových schránek rozhodli v tomto případě použít standardní algoritmus pro jednorázová hesla (RFC 4226), je možné pro jejich generování využít aplikace třetích stran.

Datové schránky oficiálně podporují tři různé aplikace pro platformy iOS, Android a Java ME. Použití standardizovaného OTP algoritmu by však mělo umožnit využít i další podobné programy a dát tak uživatelům větší možnost volby. Jednou z aplikací tohoto druhu je Google Authenticator.

Google zavedl jednorázová hesla jako volitelnou možnost při přihlašování k účtu v únoru toho roku. Způsob jakým se jednorázová hesla u Google aktivují a používají je z pohledu uživatele trochu odlišný, ale základní myšlenka doplnit standardní hesla o další autentizační prvek je stejná. Google by však jako jedna z největších IT firem současnosti asi jen těžko přenesl přes srdce použití aplikace třetích stran pro potřeby vlastních uživatelů a vznikl tak již zmiňovaný Google Authenticator. Ten implementuje stejný standardní algoritmus generování OTP a podporuje platformy iOS, Android a Blackberry (a pro potřeby serveru obsahuje také PAM modul).

Protože OTP používám jak pro datové schránky, tak pro svůj Google účet a protože jako zaměstnanec CZ.NIC LABs musím být od přírody zvědavý, zajímalo mě, jestli půjde Google Authenticator použít i pro datové schránky.

Ukázalo se, že to opravdu jde a jediná komplikace je ve formátu v jakém se předává vstupní tajný klíč mezi serverem datových schránek a mobilní aplikací při prvotní aktivaci OTP. Zatímco datové schránky a jimi doporučované aplikace používají hexadecimální (tedy Base16) formát, Google Authenticator používá Base32. Celý problém použití Google Authenticatoru pro datové schránky se tedy redukuje na triviální úkol převodu mezi těmito dvěma kódováními.

Aby to však nebylo příliš jednoduché, trochu jsem si úlohu zkomplikoval. Google Authenticator totiž oproti ostatním aplikacím nabízí jednu vlastnost, kterou každý, kdo musel přepisovat 40 znaků v hexadecimálním zápisu z mobilu do počítače, určitě ocení – synchronizaci tajného hesla mezi serverem a mobilním zařízením pomocí QR kódu.

Abych již dále neprotahoval již tak dlouhý příspěvek, výsledkem je mini „aplikace“ v čistém JavaScriptu, kterou najdete na konci příspěvku. Ta umožňuje vygenerovat si na straně uživatele v prohlížeči tajný klíč, který poté pouze zkopíruje do systému datových schránek a zároveň jej přes QR kód nahraje do Google Authenticatoru na svém mobilu. Není tedy potřeba nic přepisovat a kontrolovat a pokud už Google Authenticator používáte, ani instalovat kvůli datovým schránkám další aplikaci.

Na závěr tedy nezbývá než pochválit tvůrce datových schránek za to, že si na rozdíl od některých dřívějších rozhodnutí tentokrát vybrali standardizované řešení. Usnadnilo to práci jim i uživatelům a dalo nám to možnost větší volby.

Poznámka: Protože celý proces generování tajného kódu i odpovídajícího QR kódu probíhá ve vašem prohlížeči, nemusíte se bát uniku informací a jejich potenciálního zneužití.

Jméno klíče:

Tajný klíč (zkopírujte do systému DS):

Bedřich Košata, Laboratoře CZ.NIC

P.S.- pokud nad tímto textem nevidíte QR kód, váš prohlížeč pravděpodobně neumí HTML canvas (např. IE), který je nutný pro generování QR kódu na straně klienta.

Autor:

Komentáře (4)

  1. Klimax říká:

    Drobná korekce.
    Canvas neumí IE8 a nižší.
    IE9 ano. (QR vidím…)

  2. Kdosi říká:

    Mel bych jednu hloupou otazku. Je generovani 160ti bitoveho klice pouze na zaklade defautni javascriptove entropie (48bitu, ve firefoxu zalozene pouze na case a 2 adres v pameti) opravdu bezpecne ? Navic pokud se generuje po ctyrech bitech, kde kazda dalsi runda je urcena linearnim generatorem … Neni pak vysledna entropie natolik mala, ze bude stacit zachytit pouze nekolik jednorazovych hesel pro zrekonstruovani klice ?

  3. Bedřich Košata říká:

    Dobrý den, díky za dotaz. Máte pravdu, že použití Math.random() jako zdroje entropie pravděpodobně výrazně omezuje množinu vygenerovatelných klíčů a otevírá tak cestu ke snadnějšímu odhalení klíče brute-force metodou na základě vygenerovaných jednorázových hesel.
    Pokud by mělo být řešení v tomto směru bezpečnější, bylo by vhodné použít jiný zdroj náhodných čísel.

  4. Vašek říká:

    QR kód se mi nezobrazuje, přestože používám prohlížeče umějící HTML canvas (Firefox 40, Chrome 45). Platformě omezený IE bohužel nemám k dispozici.

Zanechte komentář