Объяснение 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 никогда не видит ни того, ни другого. Все кодирование происходит в браузере. Прочтите полную политику конфиденциальности.