Одноразовый пароль на основе HMAC ( HOTP ) — это алгоритм одноразового пароля (OTP), основанный на HMAC . Он является краеугольным камнем Инициативы по открытой аутентификации (OATH).
HOTP был опубликован как информационный IETF RFC 4226 в декабре 2005 года, документирующий алгоритм вместе с реализацией Java. С тех пор алгоритм был принят многими компаниями по всему миру (см. ниже). Алгоритм HOTP является свободно доступным открытым стандартом .
Алгоритм HOTP обеспечивает метод аутентификации путем симметричной генерации человекочитаемых паролей или значений , каждое из которых используется только для одной попытки аутентификации. Одноразовое свойство напрямую вытекает из однократного использования каждого значения счетчика.
Стороны, намеревающиеся использовать HOTP, должны установить некоторыепараметры ; обычно они указываются аутентификатором и либо принимаются, либо нет аутентифицированным:
Обе стороны вычисляют значение HOTP, полученное из секретного ключа K и счетчика C. Затем аутентификатор сверяет свое локально сгенерированное значение со значением, предоставленным аутентифицированным.
Аутентификатор и аутентифицированный увеличивают счетчик C независимо друг от друга, причем последний может увеличиваться раньше первого, поэтому протокол повторной синхронизации является разумным. RFC 4226 на самом деле не требует ничего подобного, но дает рекомендацию. Это просто заставляет аутентификатор многократно пытаться выполнить проверку раньше своего счетчика через окно размером s . Счетчик аутентификатора продолжает опережать значение, при котором проверка проходит успешно, и не требует никаких действий со стороны аутентифицированного.
Рекомендуется, чтобы имело место постоянное регулирование проверки значений HOTP, чтобы решить проблему их относительно небольшого размера и, следовательно, уязвимости к атакам методом подбора. Предлагается, чтобы проверка блокировалась после небольшого количества неудачных попыток или чтобы каждая неудачная попытка влекла за собой дополнительную (линейно увеличивающуюся) задержку.
6-значные коды обычно предоставляются фирменными аппаратными токенами от ряда поставщиков, сообщая значение по умолчанию d . Усечение извлекает 31 бит или десятичную цифру, что означает, что d может быть не более 10, причем 10-я цифра добавляет меньше вариаций, принимая значения 0, 1 и 2 (т. е. 0,3 цифры).
После проверки аутентификатор может аутентифицировать себя, просто генерируя следующее значение HOTP, возвращая его, а затем аутентифицированный может генерировать свое собственное значение HOTP для его проверки. Обратите внимание, что счетчики гарантированно синхронизируются на этом этапе процесса.
Значение HOTP представляет собой понятный человеку выходной проект, представляющий собой d -значное десятичное число (без пропуска начальных нулей):
То есть значение представляет собой d наименее значимых цифр HOTP в десятичной системе счисления.
HOTP — это усечение HMAC счетчика C (под ключом K и хэш-функцией H ):
где счетчик C должен использоваться в формате big-endian .
Усечение сначала берет 4 наименее значимых бита MAC и использует их как смещение байта i :
где ":" используется для извлечения битов от начального номера бита до конечного номера бита включительно, где эти номера битов имеют 0-источник. Использование "19" в приведенной выше формуле относится к размеру выходных данных хэш-функции. При значении по умолчанию SHA-1 выходные данные будут следующими:20 байт , и поэтому последний байт — это байт 19 (0-источник).
Этот индекс i используется для выбора 31 бита из MAC , начиная с бита i × 8 + 1:
31 бит — это всего один бит, недостающий 4-байтовому слову. Таким образом, значение может быть помещено внутрь такого слова без использования знакового бита (старшего бита). Это делается для того, чтобы определенно избежать выполнения модульной арифметики с отрицательными числами, поскольку она имеет много различных определений и реализаций. [1]
Как аппаратные, так и программные токены доступны от различных поставщиков, для некоторых из них см. ссылки ниже. Аппаратные токены, реализующие OATH HOTP, как правило, значительно дешевле своих конкурентов, основанных на собственных алгоритмах. [2] По состоянию на 2010 год аппаратные токены OATH HOTP можно было приобрести по незначительной цене. [3] Некоторые продукты можно использовать для надежных паролей, а также OATH HOTP. [4]
Программные токены доступны для (почти) всех основных платформ мобильных телефонов/ смартфонов ( J2ME , [5] Android , [6] iPhone , [7] BlackBerry , [8] Maemo , [9] macOS , [10] и Windows Mobile [8] ).
Хотя в 2004 и 2005 годах первоначальный отклик со стороны компьютерной прессы был негативным, [11] [12] [13] после того, как IETF приняла HOTP в качестве RFC 4226 в декабре 2005 года, различные поставщики начали выпускать совместимые с HOTP токены и/или целые решения для аутентификации.
Согласно статье «Дорожная карта: замена паролей на аутентификацию OTP» [2] по строгой аутентификации, опубликованной Burton Group (подразделение Gartner, Inc. ) в 2010 году, « Gartner ожидает, что форм-фактор аппаратных OTP продолжит демонстрировать скромный рост, в то время как OTP для смартфонов будут развиваться и со временем станут аппаратной платформой по умолчанию».