Объяснение QR-кодов TOTP 2FA

Технический глубокий анализ формата URI otpauth://, секретов base32 и математики RFC 6238 TOTP.

Что такое TOTP

TOTP (одноразовый пароль на основе времени, RFC 6238), это алгоритм, лежащий в основе Google Authenticator, Authy, 1Password, Bitwarden и любого другого приложения аутентификатора. Он производит 6-значный код, который изменяется каждые 30 секунд на основе общего секрета и текущего времени Unix.

URI otpauth

otpauth://totp/Issuer:account@example.com?secret=BASE32SECRET&issuer=Issuer&algorithm=SHA1&digits=6&period=30

Схема URI, это otpauth://, тип, totp (другой вариант, hotp, на основе счетчика), затем метка, затем параметры запроса. Приложения аутентификатора анализируют этот URI и добавляют его в хранилище пользователя с одной сканировкой.

Метка

Необязательный формат: Issuer:account@example.com. Префикс Issuer избыточен параметром запроса issuer, но большинство приложений уважают оба.

Секрет

Строка байтов, закодированная base32 (A-Z и 2-7, без заполнения). Рекомендуется минимум 128 бит, большинство серверов используют 160 бит (32 символа base32). Никогда не кодируйте секрет URL; оставьте его как сырой base32.

Алгоритм, цифры, период

algorithm: SHA1 (по умолчанию, универсально поддерживается), SHA256 или SHA512. digits: 6 (по умолчанию) или 8. period: 30 секунд (по умолчанию) или 60. Придерживайтесь значений по умолчанию, если у вас нет причины, некоторые приложения аутентификатора не реализуют нестандартные параметры.

Как вычисляется код

На каждом 30-секундном интервале аутентификатор выполняет: HMAC-SHA1(secret, floor(unix_time / 30)), берет последние 4 бита HMAC в качестве динамического смещения, читает 4 байта, начиная с этого смещения, маскирует 31 бит и уменьшает по модулю на 106 для получения 6-значного кода.

Используйте Abundera QR для создания одного

Откройте генератор TOTP, заполните издателя (название вашего бренда), аккаунт (адрес электронной почты пользователя или имя пользователя) и базовый секрет 32. Значения по умолчанию для алгоритма/цифр/периода верны почти для каждого сервера. Загрузите PNG и отправьте его пользователю по электронной почте или SMS, или встройте его в процесс регистрации.

Примечание о конфиденциальности

Ваш секрет TOTP, это общие учетные данные между сервером и пользователем. Abundera QR никогда не видит ни того, ни другого. Все кодирование происходит в браузере. Прочтите полную политику конфиденциальности.