Реализация алгоритма HOTP на SIM-карте позволяет внедрить двухфакторную аутентификацию, не зависящую от модели телефона. Такой подход обеспечивает единообразный пользовательский интерфейс как на кнопочных аппаратах, так и на современных смартфонах.
Проект базируется на создании апплета для Java Card в рамках архитектуры UICC. Приложение регистрируется в меню SIM Toolkit, что дает пользователю возможность генерировать одноразовые пароли непосредственно через системное меню мобильного устройства.
В процессе разработки автор столкнулся с невозможностью хранения HMAC-ключей в постоянной памяти на используемых картах. Проблема была решена путем инициализации ключа в энергозависимой памяти из буфера с секретным ключом при каждом вызове функции.
При генерации пароля апплет запрашивает у терминала текущую дату и время. Для формирования шестизначного кода по стандарту RFC 4226 данные очищаются от секунд и часового пояса, что обеспечивает обновление пароля один раз в минуту.
Для тестирования апплета используется библиотека FunGP. Конфигурация проекта включает JSON-файл, который связывает идентификаторы карт, такие как IMSI, с ключами и счетчиками, что упрощает работу с парком тестовых SIM-карт.





