В настоящее время я использую Google Authenticator для 2FA, например, для подключения к VPN и т.д. Я хотел посмотреть, смогу ли я получить шестизначный код на моем OSX-устройстве, но по какой-то причине oathtool
никогда не возвращает то же значение, что и Authenticator. И код Аутентификатора работает, а oathtool
нет.
Интересно, что я также пробовал в симуляторе iOS с https://github.com/mattrubin/Authenticator в той же системе, и код, который он производит, согласуется с oathtool
а не с Authenticator.
Я подозревал, что, возможно, это проблема синхронизации времени, но после ручной синхронизации времени OSX код остается прежним. Мне интересно, могут ли быть параметры по умолчанию в алгоритме TOTP, которые не совпадают, но я не знаю, какими они будут.
Команда oathtool
выводит что-то вроде следующего
% oathtool --verbose --base32 --totp "$SECRET"
Hex secret: ...
Base32 secret: ...
Digits: 6
Window size: 0
Step size (seconds): 30
Start time: 1970-01-01 00:00:00 UTC (0)
Current time: 2016-10-20 22:27:22 UTC (1477002442)
Counter: 0x2EF3E06 (49233414)
(Обратите внимание, что $SECRET
выше - это то же значение, которое использовалось для генерации QR-кода, используемого Authenticator.)
Любая причина, почему они не согласятся?
Обновить
Я попытался поиграть со временем 30 секунд по обе стороны от времени моей системы, используя
oathtool --now "$(perl -e'use DateTime; print DateTime->now()->subtract(seconds=>30)->strftime( "%Y-%m-%d %H:%M:%S %Z" )')" -b --totp $SECRET -w 20|sort
Perl выше генерирует время в формате
2016-10-20 23:36:15 UTC
Я также выводил 20 номеров каждый раз, но ни одно из них не соответствовало тому, что есть в Authenticator.