Autentizace: Jednorázová hesla – S/KEY
V tomto příspěvku si povíme, jak se poměrně bezpečně autentizovat jednorázovým heslem vygenerovaným pomocí S/KEY.
Systém S/KEY funguje tak, že na tajný klíč K, který vznikne spojením uživatelem zvoleného hesla a výzvy serveru aplikuje N-krát hashovací funkci a vygeneruje přesně N jednorázových hesel (One Time Password, zkr. OTP). Přičemž poslední OTP, které uživatel nikdy zadávat nebude, se spolu s výzvou uloží do DB. Způsob, jakým jsou generována jednotlivá OTP, můžeme jednoduše zapsat takto: H(K), H(H(K))…H^N(K).
Uživatel obdrží seznam OTP v opačném pořadí, než jsou vygenerována, tzn., že na prvním místě jeho seznamu se bude nacházet OTP, které bylo vygenerováno jako poslední. Samotná autentizace pak probíhá tak, že uživatel na výzvu systému zadá OTP, které se v jeho seznamu nachází na prvním místě. Systém aplikuje na toto heslo hashovací funkci H a pokud spočtený hash odpovídá hashi, který má systém uložený ve své DB, je uživatel úspěšně autentizován a do DB se uloží uživatelem právě zadané heslo resp. jeho hash, proti kterému se pak při příští autentizaci porovnání uživatelem zadaného hesla provádí.
Pokud zvolíme jako heslo např. „P4$w0Rd“, challenge bude nabývat hodnoty „3 secret“ a necháme si vygenerovat 4 jednorázová hesla, potom získáme následující jednorázová hesla, přičemž OTP, které se nachází na pozici 0, v našem případě CURD FEUD ODIN OVAL ITEM JIG, uživatel nikdy zadávat nebude, to bude v systému uloženo a použito pouze proto, aby bylo proti čemu porovnat uživatelem zadané heslo.
0: CURD FEUD ODIN OVAL ITEM JIG (6DCF F71C 6519 FC40) 1: NE LOUD SEND WHET BRIM IDEA (2B36 6765 7D85 F33C) 2: BONE BAWL OAF COOK DANA LULU (5C0A 84B7 3546 ED68) 3: OVER SAL REB RISK WARD CRUD (CA67 44DB E82F 76D9)
V okamžiku, kdy se uživatel bude chtít přihlásit do systému, zadá heslo, které se nachází na pozici 1, v tomto případě NE LOUD SEND WHET BRIM IDEA. Systém spočte hash tohoto hesla a porovná ho s uloženým hashem a jelikož se hashe rovnají, je uživatel přihlášen. Uživatel si na svém seznamu heslo na pozici 1 škrtne a pro příští přihlášení použije heslo na pozici 2, což je BONE BAWL OAF COOK DANA LULU, jehož hash je pak porovnáván proti posledně použitému heslu.
Interně S/KEY používá 64bitová čísla. Výstupem hashovací funkce MD5, která bývá v S/KEY využívána je ale řetězec o délce 128 bitů, je zřejmé, že se musí provést ještě nějaká úprava. Ano, je to tak, řetězec se rozdělí na dvě poloviny o 64bitech a na ně se aplikuje funkce XOR. Výsledek je pak převeden do hexadecimální soustavy, takže je možné ho zapsat jako 16 hexadecimálních znaků. Ta by se však uživateli špatně přepisovala, proto se hash prodlouží na 66bitový a rozdělí na šest skupin po 11 bitech. Taková skupina pak může nabývat 2^11, což je 2048 různých hodnot. Každé takové hodnotě pak odpovídá krátké slovo o délce 1 až 4 znaky. A z těchto slov jsou pak složena samotná jednorázová hesla, která uživatel při autentizaci zadává. Uživatel je může zadat i malými písmeny a bez mezer.
On-line generátor OTP hesel naprogramovaný v JavaScriptu je možné si vyzkoušet na adrese http://www.ocf.berkeley.edu/~jjlin/jsotp/ odkud je možné si stáhnout i zdrojový kód.
Štítky: autentizace, OTP
K článku “Autentizace: Jednorázová hesla – S/KEY” se zde nenachází žádný komentář - buďte první.
Diskuse na tomto webu je moderována. Pod článkem budou zobrazovány jen takové komentáře, které nebudou sloužit k propagaci konkrétní firmy, produktu nebo služby. V případě, že chcete, aby z těchto stránek vedl odkaz na váš web, kontaktujte nás, známe efektivnější způsoby propagace.