2fa от 979, с отображением одноразовых паролей, действительных в течение определенного времени

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

Стандартизован как RFC 6238.

История

править

С 2004 года OATH работала над проектом одноразовых паролей (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]. Обозначим:

  •  — дискретное значение времени, используемое в качестве параметра (измеряется в единицах , 8 байтов)
  •  — интервал времени, в течение которого действителен пароль (по умолчанию — 30 сек.)
  •  — начальное время, необходимое для синхронизации сторон (по умолчанию — время от начала UNIX-эры)
  •  — разделяемый секрет
  •  — текущее время.

Тогда[1][6]

где

  • 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-хеш-функции:

и так далее[1].

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

править

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

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

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

Примечания

править

Литература

править

Ссылки

править

📚 Artikel Terkait di Wikipedia

Линейное зондирование

caching affects hashing // Proceedings of the Seventh Workshop on Algorithm Engineering and Experiments and the Second Workshop on Analytic Algorithmics

Кривая Гильберта

Haverkort, F. van Walderveen,. Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments. — New York: Society for Industrial and Applied

Метод прогонки

Метод прогонки (англ. tridiagonal matrix algorithm) или алгоритм Томаса (англ. Thomas algorithm) используется для решения систем линейных уравнений вида

Быстрая сортировка

Псевдокод: algorithm quicksort(A, lo, hi) is if lo < hi then p:= partition(A, lo, hi) quicksort(A, lo, p) quicksort(A, p + 1, hi) algorithm partition(A

Цветовое кодирование

PMID 18586721. — PMC 2718641. Hüffner F., Wernicke S., Zichner T. Algorithm Engineering for Color-Coding with Applications to Signaling Pathway Detection //

Конфигурация прямых

Halperin, I. Hanniel, S. Har-Peled, C. Linhart. Proc. 3rd Int. Worksh. Algorithm Engineering (WAE '99). — Springer-Verlag, 1999. — Т. 1668. — С. 139–153. — (Lecture

Цифровой двойник

Архивировано 26 июня 2020 года. S N Masaev, A N Minkin and D A Edimichev. An algorithm for determining the state of a non-stationary dynamic system for assessing

IDEA

IDEA (англ. International Data Encryption Algorithm, международный алгоритм шифрования данных) — симметричный блочный алгоритм шифрования данных, запатентованный