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 сек.)
T0{displaystyle T_{0}} — начальное время, необходимое для синхронизации сторон. (По умолчанию — время от начала UNIX эры)
K{displaystyle K} — разделяемый секрет.
CurrentTime{displaystyle CurrentTime} — текущее время.
Тогда[1][6]
- T=(CurrentTime−T0)/X{displaystyle T=(CurrentTime-T_{0})/X}
- HOTP(K,T)=Truncate(HMAC-SHA-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)=Truncate(HMAC-SHA-256(K,T)){displaystyle operatorname {TOTP} (K,T)=Truncate(operatorname {HMAC-SHA-256} (K,T))}
- TOTP(K,T)=Truncate(HMAC-SHA-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
Примечания |
↑ 1234 M'Raïhi, Machani, Pei et al., 2011.
↑ 1234 Nathan Willis, 2010.
↑ Vaidya, Park, Rodrigue, 2009.
↑ OATH Submits TOTP: Time-Based One Time Password Specification to IETF.
↑ 1234 Давлетханов, 2006.
↑ 12 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'Raïhi D., Bellare M., Hoornaert F. et al. HOTP: An HMAC-Based One-Time Password Algorithm — Internet Engineering Task Force, 2005. — 37 p. — doi:10.17487/RFC4226<a href="https://wikidata.org/wiki/Track:Q27105682"></a><a href="https://wikidata.org/wiki/Track:Q22678443"></a><a href="https://wikidata.org/wiki/Track:Q1932841"></a><a href="https://wikidata.org/wiki/Track:Q217082"></a><a href="https://wikidata.org/wiki/Track:Q27105706"></a><a href="https://wikidata.org/wiki/Track:Q3018520"></a>
- Давлетханов М. Концепция одноразовых паролей в построении системы аутентификации // Byte — 2006. — вып. 7-8 (95), июль-август. — ISSN 0360-5280<a href="https://wikidata.org/wiki/Track:Q1018709"></a><a href="https://wikidata.org/wiki/Track:Q21694596"></a><a href="https://wikidata.org/wiki/Track:Q21694594"></a>
- 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 — Springer Berlin Heidelberg. — P. 672–681. — (Lecture Notes in Computer Science; Vol. 5576) — ISBN 978-3-642-02616-4, 978-3-642-02617-1 — ISSN 0302-9743<a href="https://wikidata.org/wiki/Track:Q21694586"></a><a href="https://wikidata.org/wiki/Track:Q21694587"></a><a href="https://wikidata.org/wiki/Track:Q21694585"></a><a href="https://wikidata.org/wiki/Track:Q924044"></a><a href="https://wikidata.org/wiki/Track:Q21694588"></a><a href="https://wikidata.org/wiki/Track:Q21694589"></a><a href="https://wikidata.org/wiki/Track:Q21587985"></a>
- M'Raïhi D., Machani S., Pei M. et al. TOTP: Time-Based One-Time Password Algorithm — Internet Engineering Task Force, 2011. — 16 p. — doi:10.17487/RFC6238<a href="https://wikidata.org/wiki/Track:Q22678443"></a><a href="https://wikidata.org/wiki/Track:Q26882441"></a><a href="https://wikidata.org/wiki/Track:Q26882437"></a><a href="https://wikidata.org/wiki/Track:Q217082"></a><a href="https://wikidata.org/wiki/Track:Q26882439"></a><a href="https://wikidata.org/wiki/Track:Q26882440"></a>
Ссылки |
- OTP Oath HOTP TOTP PSKS DSKPP (неопр.) (недоступная ссылка). Архивировано 24 января 2013 года.
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |