A TOTP ( Time-based One-Time Password Algorithm , RFC 6238 [1] ) egy OATH - algoritmus egyszeri jelszavak generálására a biztonságos hitelesítéshez , amely a HOTP (HMAC-alapú egyszeri jelszó-algoritmus) továbbfejlesztése . Ez egy egyirányú hitelesítési algoritmus – a szerver ellenőrzi a kliens azonosságát . A TOTP és a HOTP közötti fő különbség az idő alapú jelszógenerálás, azaz az idő egy paraméter [2] . Ilyenkor általában nem az idő pontos jelzését használják, hanem az aktuális intervallumot előre beállított határokkal (általában 30 másodperc).
2004 óta az OATH ( The Initiative for open authentication ) az egyszeri jelszó (OTP) projekten dolgozik. Az első eredmény a HOTP (a Hash-based Message Authentication Code (HMAC) OTP-algoritmus) volt, amelyet 2005 decemberében tettek közzé. Projektként benyújtották az IETF-hez (The Internet Engineering Task Force) [2] [3] .
Az OATH további munkát végzett a HOTP fejlesztésén, és a TOTP-t 2008-ban vezették be [4] . Ez az algoritmus nem használ számlálót a kliens és a kiszolgáló szinkronizálására, hanem egy jelszót generál az idő alapján, amely bizonyos időtartamig érvényes. Az algoritmus a következőképpen működik: a kliens veszi az időzítő és a titkos kulcs aktuális értékét, ezeket valamilyen hash függvény segítségével kivonatolja és elküldi a szervernek, a szerver viszont elvégzi ugyanazokat a számításokat, ami után már csak összehasonlítani kell ezeket az értékeket [5] . Nem csak az SHA-1 hash függvényen valósítható meg, ellentétben a HOTP-vel, így a hash függvény is bemeneti paraméter [2] .
Később egy új algoritmust vezettek be, amely még tovább bővíti a TOTP-t. 2010 szeptemberében mutatták be, és az OATH Challenge-Response Algorithms (OCRA) nevet kapta . A fő különbség a korábbi algoritmusokhoz képest az, hogy a szerver is részt vesz a hitelesítésben. Így a kliens is biztos lehet a hitelességében [2] .
Valójában a TOTP a HOTP algoritmus egy változata, amelyben egy időfüggő érték helyettesíti a számláló értéket [1] . Jelöli:
ahol
jelölje Karakterlánc — a HMAC-SHA-1(K,T) eredménye; OffsetBits – alacsony, 4 bites karakterlánc ; Offset = StringToNumber(OffsetBits) és a Truncate eredménye egy négy karakterből álló karakterlánc lesz - String[Eltolás] ... Karakterlánc[Eltolás + 3] [6]
Azt is érdemes megjegyezni, hogy a HOTP-vel ellentétben, amely csak SHA-1 alapú , a TOTP a HMAC-SHA-256 , HMAC-SHA-512 és más HMAC hash függvényeket is használhatja:
stb. [1]
Az egyszeri jelszavak koncepciója modern kriptográfiai módszerekkel párosulva biztonságos távoli hitelesítési rendszerek megvalósítására használható [5] . A TOTP meglehetősen ellenálló a kriptográfiai támadásokkal szemben, de van esély a feltörésre, például lehetséges az ember a középső támadás egy ilyen változata :
Az ügyfélforgalom figyelésével a támadó elkaphatja az elküldött bejelentkezési nevet és az egyszeri jelszót (vagy az abból származó hash-t). Ekkor elég, ha letiltja az "áldozat" számítógépét, és a saját nevében küldi el a hitelesítési adatokat. Ha ezt egy időn belül sikerül megtennie , akkor hozzáférhet. Ezért érdemes kicsire tenni. De ha a jelszó lejárati ideje túl rövidre van állítva, akkor enyhe deszinkronizálás esetén a kliens nem tud hozzáférni [5] .
A kiszolgáló és a kliens időzítőinek szinkronizálásához is kapcsolódik egy sebezhetőség, mivel fennáll az időinformációk deszinkronizálásának veszélye a szerveren és a felhasználó szoftverében és/vagy hardverében. Mivel a TOTP az időt használja paraméterként, ha az értékek nem egyeznek, minden felhasználói hitelesítési kísérlet meghiúsul. Ebben az esetben valaki más hamis bevallása is lehetetlen lesz. Meg kell jegyezni, hogy egy ilyen helyzet valószínűsége rendkívül kicsi [5] .