Time-based One-time Password Algorithm

TOTP (Time-based One-Time Password Algorithm, RFC 6238[1]) — OATH-алгоритм создания одноразовых паролей для защищённой аутентификации, являющийся улучшением HOTP (HMAC-Based One-Time Password Algorithm). Является алгоритмом односторонней аутентификации — сервер удостоверяется в подлинности клиента. Главное отличие TOTP от HOTP — это генерация пароля на основе времени, то есть время является параметром[2]. При этом обычно используется не точное указание времени, а текущий интервал с установленными заранее границами (обычно — 30 секунд).

## Содержание

* 1 История
* 2 Принцип работы
* 3 Надёжность алгоритма
* 4 См. также
* 5 Примечания
* 6 Литература
* 7 Ссылки

## История

[править | править код]

С 2004 года OATH (The Initiative for open authentication[англ.]) трудилась над проектом одноразовых паролей (OTP). Первым результатом был HOTP (the Hash-based Message Authentication Code (HMAC) OTP algorithm), опубликованный в декабре 2005 года. Он был представлен как проект IETF (The Internet Engineering Task Force)[2][3].

Дальнейшая работа OATH шла на улучшение HOTP и в 2008 году был представлен TOTP[4]. Этот алгоритм не использует счётчик для синхронизации клиента и сервера, а генерирует пароль в зависимости от времени, который действителен в течение некоторого интервала. Алгоритм действует так: клиент берёт текущее значение таймера и секретный ключ, хеширует их с помощью какой-либо хеш-функции и отправляет серверу, в свою очередь сервер проводит те же вычисления после чего ему остаётся только сравнить эти значения[5]. Он может быть реализован не только на хеш-функции SHA-1, в отличие от HOTP, поэтому хеш-функция также является входным параметром[2].

Позднее был представлен новый алгоритм, расширяющий TOTP ещё больше. Он был представлен в сентябре 2010 года и назван OATH Challenge-Response Algorithms (OCRA). Главное отличие от предыдущих алгоритмов заключается в том, что в проверке подлинности участвует и сервер. Так что клиент может быть также уверен в его подлинности[2].

## Принцип работы

[править | править код]

По сути, TOTP является вариантом HOTP алгоритма, в котором в качестве значения счётчика подставляется величина, зависящая от времени[1]. Обозначим:

* T {\displaystyle T} — дискретное значение времени, используемое в качестве параметра (измеряется в единицах  X {\displaystyle X} , 8 байтов)
* X {\displaystyle X} — интервал времени, в течение которого действителен пароль (по умолчанию — 30 сек.)
* T 0 {\displaystyle T_{0}} — начальное время, необходимое для синхронизации сторон (по умолчанию — время от начала UNIX-эры)
* K {\displaystyle K} — разделяемый секрет
* C u r r e n t T i m e {\displaystyle CurrentTime} — текущее время.

Тогда[1][6]

T = ( C u r r e n t T i m e − T 0 ) / X {\displaystyle T=(CurrentTime-T_{0})/X}

HOTP ⁡ ( K , T ) = T r u n c a t e ( H M A C - S H A - 1 ⁡ ( K , T ) ) {\displaystyle \operatorname {HOTP} (K,T)=Truncate(\operatorname {HMAC-SHA-1} (K,T))}

TOTP = HOTP ⁡ ( K , T ) {\displaystyle \operatorname {TOTP} =\operatorname {HOTP} (K,T)}

где

* HMAC-SHA-1(K,T) — генерация 20 байт на основе секретного ключа и времени с помощью хеш-функции SHA-1.
* Truncate — функция выбора определённым способом 4 байт:

обозначим String — результат HMAC-SHA-1(K,T); OffsetBits — младшие 4 бита строки String; Offset = StringToNumber(OffsetBits) и результатом Truncate будет строка из четырёх символов — String[Offset]…String[Offset + 3][6].

В отличие от HOTP, который основан только на SHA-1, TOTP может также использовать HMAC-SHA-256, HMAC-SHA-512 и другие HMAC-хеш-функции:

* TOTP ⁡ ( K , T ) = T r u n c a t e ( H M A C - S H A - 256 ⁡ ( K , T ) ) {\displaystyle \operatorname {TOTP} (K,T)=Truncate(\operatorname {HMAC-SHA-256} (K,T))}
* TOTP ⁡ ( K , T ) = T r u n c a t e ( H M A C - S H A - 512 ⁡ ( K , T ) ) {\displaystyle \operatorname {TOTP} (K,T)=Truncate(\operatorname {HMAC-SHA-512} (K,T))}

и т. д.[1]

## Надёжность алгоритма

[править | править код]

Концепция одноразовых паролей вкупе с современными криптографическими методами может использоваться для реализации надёжных систем удалённой аутентификации[5]. TOTP достаточно устойчив к криптографическим атакам, однако вероятности взлома есть, например возможен такой вариант атаки «человек посередине»:

Прослушивая трафик клиента, злоумышленник может перехватить посланный логин и одноразовый пароль (или хеш от него). Затем ему достаточно блокировать компьютер «жертвы» и отправить аутентификационные данные от собственного имени. Если он успеет это сделать за промежуток времени  X {\displaystyle X} , то ему удастся получить доступ. Именно поэтому  X {\displaystyle X} стоит делать небольшим. Но если время действия пароля сделать слишком маленьким, то в случае небольшой рассинхронизации клиент не сможет получить доступ[5].

Также существует уязвимость, связанная с синхронизацией таймеров сервера и клиента, так как существует риск рассинхронизации информации о времени на сервере и в программном и/или аппаратном обеспечении пользователя. Поскольку TOTP использует в качестве параметра время, то при несовпадении значений все попытки пользователя на аутентификацию завершатся неудачей. В этом случае ложный допуск чужого также будет невозможен. Стоит отметить, что вероятность такой ситуации крайне мала[5].

## См. также

[править | править код]

* HOTP
* OTP
* OCRA

## Примечания

[править | править код]

1. ↑ 1 2 3 4 M'Raïhi, Machani, Pei et al., 2011.
2. ↑ 1 2 3 4 Nathan Willis, 2010.
3. ↑ Vaidya, Park, Rodrigue, 2009.
4. ↑ OATH Submits TOTP: Time-Based One Time Password Specification to IETF.
5. ↑ 1 2 3 4 Давлетханов, 2006.
6. ↑ 1 2 M'Raïhi, Bellare, Hoornaert et al., 2005.

## Литература

[править | править код]

* Nathan Willis. OATH: yesterday, today, and tomorrow (англ.) // LWN.net : электронный журнал. — 2010.
* Joann Killeen, Madison Alexander. OATH Submits TOTP: Time-Based One Time Password Specification to IETF (англ.). Архивировано 23 января 2013 года.
* M'Raihi D., Bellare M., Hoornaert F., Naccache D., Ranen O. HOTP: An HMAC-Based One-Time Password Algorithm (англ.) — IETF, 2005. — 37 p. — doi:10.17487/RFC4226
* Давлетханов М. Концепция одноразовых паролей в построении системы аутентификации // Byte — США: 2006. — вып. 7-8 (95), июль-август. — ISSN 0360-5280; 1082-7838
* Vaidya B., Park J. H., Rodrigues J. J. P. C. HOTP-Based User Authentication Scheme in Home Networks (англ.) // Advances in Information Security and Assurance: Third International Conference and Workshops, ISA 2009, Seoul, Korea, June 25-27, 2009. Proceedings — Berlin, Heidelberg, New York City, London: Springer Berlin Heidelberg, 2009. — P. 672—681. — (Lecture Notes in Computer Science; Vol. 5576) — ISBN 978-3-642-02616-4, 978-3-642-02617-1 — ISSN 0302-9743; 1611-3349 — doi:10.1007/978-3-642-02617-1_68
* M'Raihi D., Machani S., Pei M., Rydell J. TOTP: Time-Based One-Time Password Algorithm (англ.) — IETF, 2011. — 16 p. — doi:10.17487/RFC6238

## Ссылки

[править | править код]

* OTP Oath HOTP TOTP PSKS DSKPP (неопр.). Архивировано из оригинала 24 января 2013 года.

Эта статья входит в число добротных статей русскоязычного раздела Википедии.

|