HOTP
HOTP (сокр. от англ. HMAC-based One-time Password, одноразовый пароль на основе HMAC) — это алгоритм генерации одноразовых паролей, основанный на криптографической хеш-функции и секретном ключе, разделяемом между сервером и клиентом. Относится к классу одноразовых паролей (OTP) и является одним из двух стандартов, определённых в спецификации RFC 4226 (декабрь 2005 года), наряду с TOTP (Time-based One-time Password). HOTP используется в системах двухфакторной аутентификации (2FA) для подтверждения личности пользователя без передачи пароля по сети в открытом виде.
История
Алгоритм HOTP был разработан консорциумом OATH (Initiative for Open Authentication) при участии таких организаций, как VeriSign, RSA Security, и других. Основной целью создания было обеспечение открытого, стандартизированного и не требующего лицензирования метода генерации одноразовых паролей, который мог бы заменить проприетарные решения (например, RSA SecurID). В декабре 2005 года спецификация была опубликована в виде RFC 4226, а в 2008 году HOTP был включён в список рекомендованных методов аутентификации для федеральных информационных систем США (NIST SP 800-63). В России алгоритм не имеет статуса государственного стандарта, но широко применяется в коммерческих и банковских системах.
Принцип работы
HOTP основан на вычислении кода аутентификации сообщения (MAC) с использованием ключа хеширования (HMAC). Алгоритм использует следующие параметры:
- K — секретный ключ, разделяемый между клиентом и сервером. Длина ключа обычно составляет 128 бит (16 байт) или более.
- C — счётчик (counter) — 64-битное целое число, увеличивающееся на единицу после каждой успешной аутентификации. Счётчик хранится как на стороне клиента, так и на сервере.
- Hash — криптографическая хеш-функция. В спецификации RFC 4226 в качестве базовой используется SHA-1, но допускается применение SHA-256 и SHA-512.
Этапы генерации пароля
- Вычисление HMAC: HMAC-SHA-1(K, C) — вычисляется хеш-значение от счётчика C с использованием ключа K.
- Извлечение динамического кода: из полученного 20-байтового хеша извлекается 4-байтовая последовательность (dynamic truncation). Для этого используется младший полубайт последнего байта хеша как смещение (offset) для выборки 4 байт.
- Приведение к длине: 4-байтовое значение преобразуется в 31-битное целое число (старший бит обнуляется для избежания отрицательных чисел). Затем берётся остаток от деления на 10^d, где d — длина пароля (обычно 6 или 8 цифр). Результат дополняется ведущими нулями до нужной длины.
Верификация
Сервер, получив от клиента пароль, вычисляет ожидаемое значение HOTP для текущего счётчика C. Если пароль совпадает, счётчик увеличивается на единицу, и аутентификация считается успешной. Для предотвращения рассинхронизации (например, из-за случайного нажатия кнопки генерации) сервер может проверять несколько последовательных значений счётчика (обычно от 0 до 100). Если пароль совпадает с одним из них, счётчик синхронизируется с этим значением.
Отличия от TOTP
Основное отличие HOTP от TOTP (Time-based One-time Password, RFC 6238) заключается в механизме изменения входного параметра:
- HOTP использует счётчик, который увеличивается только при успешной аутентификации. Это делает его устойчивым к временным расхождениям, но требует ручной синхронизации при рассинхронизации счётчика.
- TOTP использует текущее время (с шагом, обычно 30 секунд) в качестве входного параметра. Это упрощает синхронизацию, но требует точного времени на устройствах.
HOTP считается более защищённым от перебора в офлайн-режиме, так как злоумышленник, перехвативший один пароль, не может предсказать следующий без знания счётчика. Однако TOTP удобнее для пользователей, так как не требует ручного сброса счётчика.
Применение
Двухфакторная аутентификация (2FA)
HOTP широко используется в качестве второго фактора аутентификации в веб-сервисах, банковских системах и корпоративных сетях. Примеры:
- Аппаратные токены: устройства, генерирующие пароли по нажатию кнопки (например, YubiKey, RSA SecurID). В России распространены токены «Рутокен» (производства компании «Актив») и «JaCarta» (компания «Аладдин Р.Д.»).
- Программные токены: мобильные приложения (Google Authenticator, Microsoft Authenticator, Authy) и десктопные программы (KeePass с плагинами). Большинство приложений поддерживают как HOTP, так и TOTP.
- Банковские системы: в России HOTP используется в системах ДБО (дистанционное банковское обслуживание) для генерации одноразовых паролей при подтверждении платежей. Например, в Сбербанке, ВТБ и Альфа-Банке применяются как аппаратные токены, так и SMS-пароли, основанные на HOTP.
Синхронизация счётчика
Для предотвращения рассинхронизации серверы обычно хранят не только текущее значение счётчика, но и «окно» допустимых значений (например, 10–100 шагов вперёд). Если клиент отправил пароль, соответствующий значению счётчика, отличному от ожидаемого, сервер корректирует свой счётчик. В некоторых реализациях (например, в YubiKey) счётчик может быть сброшен принудительно через административную процедуру.
Безопасность
Криптостойкость
Безопасность HOTP основана на стойкости HMAC и секретности ключа K. При условии, что ключ генерируется случайным образом (например, с использованием криптостойкого генератора псевдослучайных чисел) и хранится в защищённом окружении, алгоритм считается устойчивым к атакам. Длина пароля (6–8 цифр) даёт 10^6–10^8 возможных комбинаций, что делает перебор в реальном времени (онлайн) неэффективным при правильной настройке ограничения числа попыток.
Угрозы
- Перехват ключа: если злоумышленник получает доступ к секретному ключу (например, через взлом сервера или вредоносное ПО на устройстве клиента), он может генерировать неограниченное количество паролей.
- Атака «человек посередине» (MITM): при передаче пароля по незащищённому каналу (например, HTTP) злоумышленник может перехватить пароль и использовать его для аутентификации. Для защиты требуется использование TLS.
- Рассинхронизация счётчика: если клиент генерирует пароль, но не отправляет его (например, из-за сбоя), счётчик на сервере и клиенте расходится. Это может привести к блокировке аутентификации до ручного сброса.
- Фишинг: злоумышленник, создав поддельный сайт, может запросить у пользователя текущий пароль и использовать его для аутентификации на настоящем сервере (если счётчик ещё не изменился). Для защиты от фишинга используются дополнительные меры, такие как привязка к URL или домену.
Ограничения
HOTP не защищает от атак, при которых злоумышленник уже имеет доступ к устройству клиента (например, к смартфону с установленным приложением-генератором). В таких случаях требуется дополнительная защита, например, PIN-код на устройстве или биометрическая аутентификация.
Реализации
Аппаратные токены
- YubiKey (Yubico) — поддерживает HOTP и TOTP. В России доступен через официальных дистрибьюторов.
- RSA SecurID (RSA Security) — проприетарная реализация, основанная на HOTP, но с дополнительными мерами безопасности.
- Рутокен (Актив) — российский аппаратный токен, поддерживающий HOTP и TOTP. Сертифицирован ФСБ России для использования в государственных информационных системах.
- JaCarta (Аладдин Р.Д.) — российский токен, поддерживающий HOTP, TOTP и другие алгоритмы.
Программные реализации
- Google Authenticator — мобильное приложение, поддерживающее HOTP и TOTP. Распространяется бесплатно.
- Microsoft Authenticator — приложение для iOS и Android, поддерживающее HOTP и TOTP.
- FreeOTP — открытое приложение от Red Hat, поддерживающее HOTP.
- KeePass — менеджер паролей с плагинами (например, KeePassOTP) для генерации HOTP и TOTP.
Серверные библиотеки
- OATH Toolkit (Linux) — набор утилит для генерации и проверки HOTP и TOTP.
- PyOTP (Python) — библиотека для работы с HOTP и TOTP.
- Google Authenticator PAM module — модуль для Linux, позволяющий использовать HOTP для аутентификации в системе.
Стандартизация
HOTP определён в RFC 4226 (декабрь 2005 года) как открытый стандарт. Позднее алгоритм был включён в RFC 6238 (май 2011 года) как часть TOTP. В России HOTP не является государственным стандартом, но широко применяется в коммерческих системах. Для использования в государственных информационных системах (ГИС) требуется сертификация ФСБ России, которую проходят некоторые аппаратные токены (например, «Рутокен» и «JaCarta»).
Критика
Основные критические замечания в адрес HOTP касаются:
- Неудобства синхронизации: при рассинхронизации счётчика пользователь может быть вынужден генерировать несколько паролей подряд или обращаться к администратору для сброса.
- Уязвимость к атакам на счётчик: если злоумышленник перехватит последовательность паролей, он может восстановить счётчик, хотя это не даёт ему ключа.
- Ограниченная длина пароля: 6-значные пароли (10^6 комбинаций) могут быть перебраны за несколько минут при отсутствии ограничения числа попыток, хотя на практике серверы обычно блокируют после 3–5 неудачных попыток.
В ответ на критику были разработаны улучшенные алгоритмы, такие как TOTP, который не требует синхронизации счётчика, и HOTP с увеличенной длиной пароля (8 цифр) или с использованием более длинных ключей (256 бит).
Источники
- RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm (2005)
- RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (2011)
- NIST SP 800-63 — Digital Identity Guidelines (2017)
- OATH Initiative — Open Authentication Reference Architecture (2004)
- «Рутокен» — техническая документация (Актив, 2020)
- «JaCarta» — руководство пользователя (Аладдин Р.Д., 2021)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →