HOTP ( HMAC -Based One-Time Password Algorithm ) je bezpečný autentizační algoritmus využívající jednorázové heslo (One Time Password, OTP). Založeno na HMAC (SHA-1). Jedná se o jednosměrný ověřovací algoritmus, konkrétně: server ověřuje klienta .
Událost se používá jako parametr odpovědný za dynamiku generování hesla, tedy samotný fakt generování [1] : pokaždé, když je vytvořeno nové heslo, počítadlo událostí zvýší svou hodnotu o jednu, a to je toto monotónní zvýšení hodnota, která se používá jako hlavní parametr algoritmu. Druhým parametrem pro výpočet jednorázových hesel je symetrický klíč, který musí být jedinečný pro každý generátor (klienta) a soukromý od všech kromě serveru a generátoru (klienta) samotného.
Algoritmus byl poprvé formálně popsán týmem IETF v prosinci 2005. [2] [3] Byl to první skutečně úspěšný projekt iniciativy pro otevřenou autentizaci ( OATH ). [4] Algoritmy pro generování jednorázových hesel si v té době získaly velkou oblibu díky rychlému rozvoji mobilního průmyslu. Vyžaduje spolehlivý algoritmus, jednoduchý z hlediska implementace.
V roce 2008 HOTP zrodil silnější časový algoritmus jednorázového hesla (TOTP), který do značné míry zdědil vlastnosti svého rodiče. V září 2010 byl vyvinut výkonný ověřovací algoritmus OATH Challenge-Response Algorithm ( OCRA ) založený na TOTP. [čtyři]
Algoritmus HOTP také představil novinky v technologii generování jednorázových hesel. Hashovací funkce SHA-1 , která byla v té době stabilní, byla kombinována s netriviálním řešením mít čítač událostí. Tyto funkce pozvedly HOTP na stejnou úroveň jako časem prověřené algoritmy, jako je S/KEY . [čtyři]
Hlavním rozdílem mezi těmito dvěma algoritmy je generování hesla na základě časového razítka, které algoritmus TOTP používá jako parametr. V tomto případě se nepoužívá přesná časová hodnota, ale aktuální interval, jehož hranice byly předem nastaveny (například 30 sekund) [5]
HOTP generuje klíč na základě sdíleného tajemství a časově nezávislého čítače. Model tohoto algoritmu je založen na událostech – například při každém vygenerování dalšího jednorázového hesla se počítadlo zvýší. Následně vygenerovaná hesla proto musí být pokaždé jiná.
Díky tomu je základ čítače v algoritmu HOTP, na rozdíl od jiných algoritmů, které používají časovač, chráněn před desynchronizací vysílacích zařízení nebo příliš velkou vzdáleností mezi nimi (taková vzdálenost, že odpověď od příjemce přijde později než vyprší doba platnosti hesla) [2] . To umožňuje, aby hesla HOTP zůstala platná po neomezenou dobu, zatímco hesla TOTP po určité době již nebudou platná.
V důsledku toho, za předpokladu, že je použita stejná hashovací funkce jako v HOTP, tento rozdíl ve fungování algoritmu dělá z TOTP bezpečnější a preferované řešení pro jednorázová hesla [6]
Algoritmus musí vrátit alespoň 6 číslic, aby bylo zajištěno dostatečné zabezpečení hesla. V závislosti na úrovni požadavků na zabezpečení můžete pro HOTP použít vyšší číselné hodnoty, aby bylo heslo odolnější vůči útokům. Činnost algoritmu lze popsat následujícím vzorcem [1] :
H Ó T P ( K , C ) = T r u n C A t E ( H M A C − S H A − jeden ( K , C ) ) {\displaystyle HOTP(K,C)=Truncate(HMAC-SHA-1(K,C))} Proces algoritmu lze rozdělit do následujících fází:Tento příklad [1] demonstruje činnost algoritmu, který generuje šestimístné číselné heslo ze 160bitového ověřovacího kódu. Nechte v určitém kroku hodnotu řetězce od
int offset = hmac_result[19] & 0xf; int bin_code = (hmac_result[offset] & 0x7f) << 24 | (hmac_result[offset+1] & 0xff) << 16 | (hmac_result[offset+2] & 0xff) << 8 | (hmac_result[offset+3] & 0xff);Výsledek pak bude vypadat takto:
Bajtový index | 0 | jeden | 2 | 3 | čtyři | 5 | 6 | 7 | osm | 9 | deset | jedenáct | 12 | 13 | čtrnáct | patnáct | 16 | 17 | osmnáct | 19 |
Význam | lf | 86 | 98 | 69 | 0e | 02 | ca | 16 | 61 | 85 | padesáti | ef | 7f | 19 | da | 8e | 94 | 5b | 55 | 5a |
Když generátor (klient) vytvoří nové jednorázové heslo, hodnota počítadla klienta se zvýší o jedničku. V budoucnu je hodnota čítače přiváděna na vstup hashovací funkce spolu s klíčem . Poté bude odeslána na autentizační server, kde bude porovnána s hodnotou vypočítanou serverem. Pokud se hodnoty shodují, s přihlédnutím k rozdílu ne více než parametru desynchronizace , pak server zvýší hodnotu svého čítače o jednu. Pokud se data neshodují, server zahájí resynchronizaci a v případě selhání ji opakuje, dokud není dosaženo limitu neúspěšných pokusů o autentizaci . Poté server zablokuje uživatelský účet [1] .
Jak již bylo zmíněno, klient aktualizuje hodnotu čítače událostí při každém vygenerování jednorázového hesla. Hodnota čítače na serveru se zase zvýší až po úspěšné autentizaci. Na základě těchto tvrzení je možné popsat důvody, proč je implementace procesu resynchronizace nezbytná:
To vede k nutnosti použít parametr out of sync , který bude zodpovědný za velikost okna, ve kterém budou hodnoty čítače klienta a serveru považovány za synchronizované.
Resynchronizaci provádí výhradně server. Spočívá ve výpočtu nové hodnoty pro jeho počítadlo událostí tak, aby jeho hodnota odpovídala hodnotě přijaté od klienta v rámci rozdílu mezi hodnotami nejvýše . Pokud je tato podmínka splněna, pak server aktualizuje hodnotu vlastního čítače [1] .
V opačném případě server přepočítá stav počítadla. Během tohoto procesu může server několikrát požádat o další hodnoty OTP. To se provádí za účelem zvýšení úrovně zabezpečení, protože porovnání hesel se v tomto případě provádí pro dva nebo tři páry. Pokud je dosaženo limitu opakování, server uzamkne uživatelský účet. Parametr také definuje okno, ve kterém server zvýší čítač během procesu resynchronizace. Tento limitní parametr slouží k:
Bezpečnostní systémy postavené pomocí HOTP mají vysoký stupeň spolehlivosti. Jsou z větší části odolné vůči rozšířeným kryptografickým útokům, například:
Útočníkovi se často podaří ukrást hashované heslo uživatele z ověřovacího serveru, který se používá k ověřování. Algoritmus vytváření hesla však také používá čítač událostí. Protože počáteční hodnotu čítače volí server, je obvykle náhodná, což ztěžuje hacknutí komunikačního kanálu, i když má útočník sdílené tajemství. [3]
Tyto změny nejsou povinné nebo rozšíření doporučená autory algoritmu. Chcete-li však zvýšit úroveň zabezpečení vlastní implementace, můžete použít následující možnosti [1] :
Extrahování každé nové postavy z výsledku drasticky snižuje šance na úspěšný útok. Díky tomu si můžete proces práce s hesly zpříjemnit. Například zvyšte počet pokusů o vstup nebo rozšiřte rozsah, ve kterém se porovnávají hodnoty počítadel serveru a klienta.
Smyslem této myšlenky je použít pro heslo nejen čísla, ale také znaky AZ. Spíše se bavíme o sadě 32 znaků z alfanumerické sady. Okamžitě vidíte, jak vzrostla úroveň zabezpečení hesel, protože nyní je pravděpodobnost úspěchu hledání hrubou silou u hesel skládajících se ze 6 znaků.
Pokud podmínky umožňují klientovi zasílat nejen hodnotu HOTP, ale i další data, pak můžete proces resynchronizace učinit mnohem pohodlnějším a bezpečnějším, pokud klient spolu s hodnotou HOTP odešle stav počítadla událostí do server. V tomto případě bude hodnota klientského HOTP fungovat jako falešná vložka pro stav čítače.
Kontrolou hodnot počítadla na pravost a shodu tímto způsobem můžete odmítnout použití parametru desynchronizace, což také zvýší úroveň ochrany algoritmu, protože v aktualizovaném systému je pravděpodobnost úspěchu hrubé síly útok bude pouze .
Sloučení OATH se standardizovaným HOTP neposkytlo žádné vodítko k implementaci algoritmu. Naopak svoboda vývojářů umožňuje nacházet nová řešení, snažící se vyhovět potřebám zákazníka a inovativním způsobem přispět k technologii OTP. [2] [3] [9]
Běžnou implementaci HOTP v Javě lze nalézt v balíčku org.jboss.security.otp, který je součástí standardních knihoven freewarového webového serveru Apache Jboss.
Další implementaci v jazyce Java zajišťuje přímo unie OATH v balíčku org.openauthentication.otp.
Zmínit lze i implementaci – projekt OATH Toolkit, jehož knihovna liboath umožňuje vytvářet hesla v režimu HOTP a TOTP. [deset]
Velké množství zařízení s nízkou inteligencí je speciálně navrženo pro generování hesel nebo přenos dat pomocí HOTP a TOTP (Feitian, SecuTech, SmartDisplayer, Vasco, Yubico, Protectimus [11] ). Algoritmus se také používá v domácích sítích pro ovládání periferií pomocí dálkového ovladače nebo mobilního telefonu. [3]
HOTP je založen na SHA-1 , který již není považován za dostatečně odolný proti kolizím. Algoritmus HOTP však využívá pouze toho, že na jeho základě vypočítané číslo je náhodné, takže přítomnost kolizí přímo neovlivňuje jeho činnost. [2] [9]
Jednosměrná autentizace znamená, že se klient na požádání pokusí navázat spojení. Server poté odešle požadavek zpět klientovi a ověří jeho odpověď na pravost. Modifikace algoritmu OCRA také umožňuje uživateli ověřit server. [čtyři]