Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как работает гугл-аутентификатор без интернета?

ПрограммированиеGoogle+2
Андрей Диневич
  ·   · 7,8 K
Архитектор собственной жизни  · 25 нояб 2017

Сразу скажу - в исходники не смотрел (для android-приложений их нетрудно вытащить), но в целом принципиальный алгоритм представляется таким:

  1. Берется формула, по двум значениям генерирующая третье:

currentAuthCode = function GetAuthCode (initValue[userInput], tValue[currentTime])

Здесь initValue - код, который вы копируете из приложения при инициализации пароля (текстом или распознавая QR), tValue - цифровое значение текущего момента времени. Для удобства пользователя этот параметр округляется до минуты - чтобы результат в течении минуты не менялся. А результат, собственно, и будет ключом аутентификации.

Раз в минуту происходит пересчет, причем не только по изменившемуся tValue, но и по новому initValue, взятому из предыдущего currentAuthCode:

currentAuthCode = function GetAuthCode (currentAuthCode, tValue)

хотя в упрощенной версии алгоритма может использоваться только новое значение времени, это уберет итерации перерасчетов.

Таким образом, зная начальный код, время его ввода, и промежуток между обновлениями, можно получить код действительный в любое другое время (и только в это время). Эта информация есть в приложении, в котором происходит аутентификация, при проверке кода оно сверяет его по той же функции.

Для проверки - выставьте на устройстве с приложением-аутентификатором неверное время, генерируемые им коды перестанут работать.

Программист, Deutsche Bank  · 25 нояб 2017
Одноразовый пароль, который вы видите на экране, зависит от двух параметров: секретного ключа, который достаточно получить всего один раз, и который потом хранится на вашем телефоне, и текущего времени, округленного до 30 или... Читать далее