Создавайте одноразовые коды по времени локально, на основе собственного ключа Base32.
Пример
С открытым тестовым ключом из RFC шестизначный код SHA-1 на 59-й секунде равен 287082 и остаётся 287082 до 59.999 секунды, а на 60-й секунде становится 359152.
Метод расчёта
Генератор следует стандарту TOTP, RFC 6238: он делит текущее время Unix на выбранный период, соединяет полученный счётчик с вашим ключом через HMAC и превращает результат в 6 или 8 цифр. Любой, у кого тот же ключ, те же настройки и верное время, получит тот же код.
Важные замечания
Ключ считается паролем. Он остаётся в памяти этой страницы, не сохраняется, не записывается в журналы и никуда не отправляется, а при сбросе или уходе со страницы стирается. От заражённого устройства или вредоносного расширения браузера это всё же не защищает, поэтому не вставляйте ключи на общих компьютерах.
Часто задаваемые вопросы
Код не принимают — что проверить?
Сначала настройки: большинство служб используют SHA-1, 6 цифр и 30 секунд, и любое расхождение даёт коды, которые выглядят правильными, но не подходят. Тот же ключ и тот же момент дают 94287082 при 8 цифрах, 46119246 с SHA-256 и 90693936 с SHA-512. Затем включите автоматическое время на устройстве и возьмите свежий код.
Какие форматы ключа принимаются?
Введите ключ Base32 ровно так, как его выдала служба: пробелы и строчные буквы допустимы, а изображение QR-кода, код из SMS или ссылка otpauth — нет. Никогда не передавайте свой секрет и помните, что скопированный код попадает в буфер обмена устройства.
Делает ли это резервную копию или восстановление аккаунтов?
Нет. Страница не хранилище учётных записей, не резервная копия и не служба восстановления: держите коды восстановления вашей службы в другом надёжном месте, а для ежедневных входов используйте проверенное приложение-аутентификатор. Ведущие нули — часть кода, как в 081804, и их нужно вводить.