HOTP

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2017. január 4-én felülvizsgált verziótól ; az ellenőrzéshez 31 szerkesztés szükséges .

A HOTP ( HMAC  -alapú egyszeri jelszó-algoritmus ) egy egyszeri jelszót (One Time Password, OTP) használó biztonságos hitelesítési algoritmus. HMAC (SHA-1) alapján . Ez egy egyirányú hitelesítési algoritmus, nevezetesen: a szerver hitelesíti a klienst .

A jelszógenerálás dinamikájáért felelős paraméterként egy eseményt használnak, vagyis a generálás tényét [1] : minden alkalommal, amikor új jelszót készítenek, az eseményszámláló eggyel növeli az értékét, és ez a monoton növekedés. az algoritmus fő paramétereként használt érték. Az egyszeri jelszavak kiszámításának második paramétere egy szimmetrikus kulcs, amelynek minden generátorhoz (klienshez) egyedinek kell lennie, és mindenkitől privátnak kell lennie, kivéve magát a szervert és magát a generátort (klienst).

Történelem

Az algoritmust először az IETF csapata írta le hivatalosan 2005 decemberében. [2] [3] Ez volt az Initiative for Open Authentication ( OATH ) első igazán sikeres projektje. [4] Az egyszeri jelszavak generálására szolgáló algoritmusok a mobilipar rohamos fejlődése miatt ekkoriban széles körben elterjedtek. Megbízható algoritmust igényel, megvalósítása egyszerű.

2008-ban a HOTP megszületett egy erősebb időalapú egyszeri jelszóalgoritmus (TOTP), amely nagyrészt örökli szülője tulajdonságait. 2010 szeptemberében egy hatékony OATH Challenge-Response Algorithm ( OCRA ) hitelesítési algoritmust fejlesztettek ki a TOTP alapján. [négy]

A HOTP algoritmus újításokat vezetett be az egyszeri jelszavak generálására szolgáló technológiában is. Az akkoriban stabil SHA-1 hash függvényt egy nem triviális megoldással kombinálták az eseményszámlálóval. Ezek a funkciók a HOTP-t olyan szintre emelték, mint az olyan jól bevált algoritmusok, mint az S/KEY . [négy]

Számlálók a HOTP-ben és a TOTP-ben

A fő különbség a két algoritmus között a jelszó generálása az időbélyeg alapján, amelyet a TOTP algoritmus paraméterként használ. Ebben az esetben nem a pontos időértéket használjuk, hanem az aktuális intervallumot, amelynek határait előre beállítottuk (például 30 másodperc) [5]

A HOTP létrehoz egy kulcsot egy megosztott titok és egy időfüggetlen számláló alapján. Ennek az algoritmusnak a modellje eseményeken alapul – például minden alkalommal, amikor a következő egyszeri jelszó generálódik, a számláló növekszik. Ezért a később generált jelszavaknak minden alkalommal másnak kell lenniük.

Emiatt a HOTP-algoritmusban a számláló alapja a többi időzítőt használó algoritmustól eltérően védve van a továbbító eszközök deszinkronizálásától vagy a köztük lévő túl nagy távolságtól (olyan távolságtól, hogy a címzetttől később érkezik válasz a jelszó érvényességi ideje lejár) [2] . Ez lehetővé teszi, hogy a HOTP jelszavak korlátlan ideig érvényesek maradjanak, míg a TOTP jelszavak meghatározott idő elteltével már nem lesznek érvényesek.

Ennek eredményeként, feltételezve, hogy ugyanazt a hash függvényt használják, mint a HOTP-ben, ez az algoritmus működési különbsége biztonságosabb és előnyben részesített megoldássá teszi a TOTP -t az egyszeri jelszavak esetében [6]

Az algoritmus leírása

Jelölés

Általános leírás

Az algoritmusnak legalább 6 számjegyet kell visszaadnia a megfelelő jelszóbiztonság érdekében. A biztonsági követelmények szintjétől függően használhat magasabb számjegyeket a HOTP-hez, hogy a jelszót ellenállóbbá tegye a támadásokkal szemben. Az algoritmus működése a következő képlettel írható le [1] :

H O T P ( K , C ) = T r u n c a t e ( H M A C − S H A − egy ( K , C ) ) {\displaystyle HOTP(K,C)=Csonka(HMAC-SHA-1(K,C))} Az algoritmus folyamata a következő lépésekre osztható:

  1. Egy 20 bájtos karakterlánc jön létre a és paraméterekkel inicializált hash függvény használatával :
  2. 4 bájt van kiválasztva bizonyos módon a következők közül :
    1. Az eredmény utolsó bájtjának utolsó négy bitje számmá alakul
    2. A bájtok sorozatát változóvá alakítjuk
    3. az utolsó 31 bitet adja vissza. A legjelentősebb bit figyelmen kívül hagyásának oka az egész számok számításának különböző megvalósításai a különböző processzorokban [1]
  3. A munka eredményét számsorozattá alakítjuk :

Példa egy 6 számjegyű HOTP-érték kiszámítására

Ez a példa [1] egy olyan algoritmus működését mutatja be, amely 160 bites hitelesítési kódból hatjegyű numerikus jelszót állít elő. Legyen egy bizonyos lépésnél a karakterlánc értéke

int offset = hmac_eredmény[19] & 0xf; int bin_code = (hmac_eredmény[eltolás] & 0x7f) << 24 | (hmac_eredmény[eltolás+1] & 0xff) << 16 | (hmac_eredmény[eltolás+2] & 0xff) << 8 | (hmac_eredmény[eltolás+3] & 0xff);

Akkor az eredmény így fog kinézni:

Byte index 0 egy 2 3 négy 5 6 7 nyolc 9 tíz tizenegy 12 13 tizennégy tizenöt 16 17 tizennyolc 19
Jelentése 1f 86 98 69 0e 02 kb 16 61 85 ötven ef 7f 19 da 8e 94 5b 55 5a
  1. Az utolsó bájt 0x5a
  2. Az alsó 4 bitből kapott shift érték 0xa, így a 10-es számot kapjuk
  3. A 10. pozíciótól kezdődő 4 egymást követő bájt értéke 0x50ef7f19, amely DBC1 [7] bináris kódra (dinamikus bináris kód) lesz konvertálva.
  4. A DBC1-től kapott MSB 0x50. Ezért DBC2 [8] = DBC1 = 0x50ef7f19
  5. Ezenkívül a bináris értékeket pozitív számként kezeli, a magastól az alacsonyig írva, az első bájtot 0x7f értékkel takarja.
  6. A HOTP hatjegyű számának megszerzéséhez az előző lépésben kapott számot kell vennie modulo 10 6  -

Egyszeri jelszó ellenőrzése

A számlálóértékek ellenőrzése

Amikor a generátor (kliens) új egyszeri jelszót hoz létre, a kliens számlálójának értéke eggyel nő. A jövőben a számláló értéke a billentyűvel együtt a hash függvény bemenetére kerül . Ezt követően elküldik a hitelesítési szerverre, ahol összehasonlítják a szerver által kiszámított értékkel. Ha az értékek egyeznek, figyelembe véve az eltérést legfeljebb a deszinkronizálási paraméternél , akkor a szerver eggyel növeli a számláló értékét. Ha az adatok nem egyeznek, akkor a szerver elindítja az újraszinkronizálást, és hiba esetén megismétli, amíg el nem éri a sikertelen hitelesítési kísérletek korlátját . Ezt követően a szerver blokkolja a felhasználói fiókot [1] .

Nincs szinkronban az ügyfél és a szerver között

Ahogy korábban említettük, az ügyfél minden alkalommal frissíti az eseményszámláló értékét, amikor az egyszeri jelszót generálják. A szerveren lévő számláló értéke viszont csak a sikeres hitelesítés után növekszik. Ezen állítások alapján leírható, hogy miért van szükség az újraszinkronizálási folyamat végrehajtására:

  1. Hitelesítés sikertelen. A kliens a jelszó létrehozása után frissítette a számláló értékét, de a szerveren lévő érték nem változott
  2. Kommunikációs probléma. A kliens a jelszó elküldése után megnövelte a számláló értékét, de a jelszó nem jutott el a szerverhez

Ez ahhoz vezet, hogy az out of sync paramétert kell használni , amely annak az ablaknak a méretéért lesz felelős, amelyen belül a kliens és a szerver számlálóértékei szinkronizáltnak tekintendők.

Számláló újraszinkronizálás

Az újraszinkronizálást kizárólag a szerver végzi. Ez abból áll, hogy új értéket számítanak ki az eseményszámlálóhoz úgy, hogy annak értéke megegyezzen az ügyféltől kapott értékkel az értékek közötti különbségen belül, legfeljebb . Ha ez a feltétel teljesül, akkor a szerver frissíti a saját számlálójának értékét [1] .

Ellenkező esetben a szerver újraszámolja a számláló állapotát. A folyamat során a szerver többször is kérhet további OTP értékeket. Ez a biztonsági szint növelése érdekében történik, mivel a jelszavak összehasonlítása ebben az esetben két vagy három pár esetén történik. Ha eléri az újrapróbálkozási korlátot, a szerver zárolja a felhasználói fiókot. A paraméter azt az ablakot is meghatározza, amelyen belül a szerver növeli a számlálót az újraszinkronizálási folyamat során. Ez a limitparaméter a következőkre szolgál:

  1. A helyes jelszó kitalálásának lehetőségét korlátozzák
  2. Akadályozza meg, hogy az értékszámítás egyetlen ellenőrzésen belül hurkoljon

Biztonság

Az algoritmus megbízhatósága

A HOTP segítségével épített biztonsági rendszerek nagyfokú megbízhatósággal rendelkeznek. Ezek többnyire ellenállnak a széles körben elterjedt kriptográfiai támadásoknak, például:

A támadónak gyakran sikerül ellopnia egy kivonatolt felhasználói jelszót a hitelesítési szerverről, amelyet a hitelesítéshez használnak. A jelszó-létrehozó algoritmus azonban eseményszámlálót is használ. Mivel a számláló kezdeti értékét a szerver választja ki, az általában véletlenszerű, ami megnehezíti a kommunikációs csatorna feltörését még akkor is, ha a támadónak megosztott titka van. [3]

A védelem növelésének módjai

Ezek a változtatások nem kötelezőek, illetve az algoritmus szerzői által javasolt bővítések. Saját megvalósításának biztonsági szintjének növeléséhez azonban a következő lehetőségeket használhatja [1] :

Minden új karakter kiemelése az eredményből drasztikusan csökkenti a sikeres támadás esélyét. Ennek köszönhetően kényelmesebbé teheti a jelszavakkal való munkát. Például növelje a beviteli kísérletek számát, vagy bővítse ki a tartományt, amelyben a szerver és a kliens számláló értékeit összehasonlítja.

Ennek az ötletnek az a célja, hogy ne csak számokat használjunk a jelszóhoz, hanem az AZ karaktereket is. Inkább egy alfanumerikus halmaz 32 karakterből álló halmazáról beszélünk. Azonnal láthatja, hogyan nőtt a jelszavas biztonság szintje, mert most a brute-force keresés sikerének valószínűsége a 6 karakterből álló jelszavakra vonatkozik.

Ha a feltételek lehetővé teszik, hogy a kliens ne csak a HOTP értéket, hanem más adatokat is küldjön, akkor az újraszinkronizálási folyamatot sokkal kényelmesebbé és biztonságosabbá teheti, ha a HOTP értékkel együtt a kliens az eseményszámláló állapotát is elküldi a szerver. Ebben az esetben a kliens HOTP értéke a számláló állapot álbeszúrásaként fog működni.

A számlálóértékek hitelességének és megfelelőségének ilyen módon történő ellenőrzésével megtagadhatja a deszinkronizálási paraméter használatát, ami szintén növeli az algoritmus védelmi szintjét, mivel a frissített rendszerben a nyers erő sikerének valószínűsége támadás lesz csak .

Alkalmazás

A HOTP szabványosításával az OATH egyesülése nem adott útmutatást az algoritmus megvalósításához. Éppen ellenkezőleg, a fejlesztők szabadsága lehetővé teszi, hogy új megoldásokat találjanak, igyekezve megfelelni az ügyfél igényeinek, és innovatív módon járuljanak hozzá az OTP technológiához. [2] [3] [9]

A HOTP gyakori megvalósítása Java nyelven az org.jboss.security.otp csomagban található, amely az Apache Jboss ingyenes webszerver szabványos könyvtáraiban található.

A Java nyelv másik megvalósítását közvetlenül az OATH unió biztosítja az org.openauthentication.otp csomagban.

Megemlítheti még a megvalósítást - az OATH Toolkit projektet, amelynek liboath könyvtára lehetővé teszi jelszavak létrehozását HOTP és TOTP módban. [tíz]

Számos alacsony intelligenciájú eszközt kifejezetten jelszavak generálására vagy adatátvitelre terveztek HOTP és TOTP segítségével (Feitian, SecuTech, SmartDisplayer, Vasco, Yubico, Protectimus [11] ). Az algoritmust otthoni hálózatokban is használják perifériák távirányítóval vagy mobiltelefonnal történő vezérlésére. [3]

Az algoritmus megvalósításának követelményei

  1. A kéttényezős hitelesítést támogatni kell. Ebben az esetben feltételezzük, hogy az első tényező az egyszeri jelszógenerátor, a második pedig valamilyen további titok, amelyet az egyszeri jelszóhoz adnak [3]
  2. A szervert védeni kell a brute-force támadásoktól, azaz bizonyos számú sikertelen hitelesítési kísérlet után a felhasználói fiókot le kell tiltani [1]
  3. Biztonságos csatornát kell használnia

Ezen kívül

A HOTP az SHA-1- en alapul , amely már nem tekinthető kellően ütközésállónak. A HOTP algoritmus azonban csak azt használja ki, hogy az alapján számított szám véletlenszerű, így az ütközések jelenléte közvetlenül nem befolyásolja a működését. [2] [9]

Az egyirányú hitelesítés azt jelenti, hogy az ügyfél kérésre megpróbál kapcsolatot létesíteni. A szerver ezután visszaküldi a kérést a kliensnek, és ellenőrzi a válasz hitelességét. Az OCRA algoritmus módosítása lehetővé teszi a felhasználó számára a szerver hitelesítését is. [négy]

Lásd még

Jegyzetek

  1. ↑ 1 2 3 4 5 6 7 8 9 Hoornaert, Frank, Naccache, David, Bellare, Mihir, Ranen, Ohad. HOTP : HMAC-alapú egyszeri jelszó-algoritmus  . tools.ietf.org. Letöltve: 2017. március 26. Az eredetiből archiválva : 2019. április 6..
  2. 1 2 3 4 „Algoritmus agility és OATH”, Burt Kaliski, RSA Laboratories. 2005. május 19.
  3. 1 2 3 4 5 6 7 Binod Vaidya, Jong Hyuk Park és Joel JPC Rodrigues "HOTP-alapú felhasználói hitelesítési rendszere az otthoni hálózatokban". 2009
  4. 1 2 3 4 „ESKÜK: tegnap, ma és holnap”, Nathan Willis, 2010. december 15.
  5. Nathan Schmidt. Nathan Schmidt - Lebontás: HMAC-alapú egyszeri jelszavak  (angol)  (lefelé mutató link) . nathschmidt.net. Letöltve: 2017. március 27. Az eredetiből archiválva : 2016. április 3.
  6. Egyszeri jelszavak - HOTP és TOTP  , aldaris blogja (  2014. február 28.). Archiválva az eredetiből 2018. június 11-én. Letöltve: 2017. március 22.
  7. M. Bellare, R. Canetti és H. Krawczyk. Keyed Hash Functions and Message Authentication // Proceedings of Crypto'96, LNCS Vol. 1109, pp. 1-15..
  8. Krawczyk, H., Bellare, M. és R. Canetti. HMAC: Keyed-Hashing for Message Authentication // RFC 2104 . - 1997. - február.
  9. 1 2 "Attacks on SHA-1" az Initiative for Open AuTHentication által, 2005. március 2.
  10. Simon Josefsson "Az OATH eszköztár bemutatása", 2011.
  11. Protectimus . Letöltve: 2015. augusztus 21. Az eredetiből archiválva : 2018. április 20.

Linkek