Зная про тулзу для двухфакторной аутентификации в гугле с использованием yubikey, решил реализовать аналогичную вещь и в linux.
Удобства ради решил использовать python-yubico, предоставляющую нормальный интерфейс. И увидел прелестный пакет python-yubico-tools, в котором и была найдена утилита yubikey-totp.
Неприятной неожиданностью стало то, что код, возвращаемый этой утилитой не соответствовал тому, что возвращал google-authenticator или моя прога на python'e, реализующая totp из rfc6238.
Основное, что следует помнить про g-a, что он хранит ключ в base32, а большинство библиотек хотят шестнадцатеричное представление. Но это не вызывает проблем.
Опасаясь, что косяк мой -- с загрузкой ключа в yubikey (нужен в обычном шестнадцатеричном виде с паддингом нулями), проверил на ключе из вышеупомянутого rfc. И увидел, что всё нормально.
С другой стороны yubikey-totp с параметром --time давал тот же результат, что и написан в стандарте. Меня озадачило это поведение.
Как выяснилось при дебагге, эти товарищи умудрились использовать
int(time.mktime(time.gmtime()))
что при tz отличной от +0000 давало не время от начало Эпохи, а его же с поправкой на временную зону. Т. е. на компе с tz MSK (+0400) это число было на 4 * 3600 меньше текущего unix-time.
Почему эти странные "товарищи" не воспользовались куда более очевидным
int(time.time())
мне не ведомо.
Написал в соответствующую гуглогруппу, посмотрим.
Комментариев нет:
Отправить комментарий