Другие языки программирования и технологии

Функция родительский контроль в гугл. Хэш-функция?

Есть такое приложение от гугл называется family link. Оно позволяет осуществлять контроль с устройства родителя устройства ребенка, в том числе блокировать его, в том числе блокировать/разблокировать его для использования.

Мне интересно вот что: в случае, если родитель хочет разблокировать устройство ребенка, там есть несколько опций. Мне показался интересным механизм, который позволяет разблокировать устройство ребенка в случае отсутствия любой сети (мобильной, интернет). Для этого родителю нужно зайти в приложение на своем устройстве и посмотреть числовой код (состоит из 6 цифр), который потом можно ввести на устройстве ребенка и оно разблокируется. Очевидно, для генерации кода используется алгоритм внутри приложения (доступа в сеть то нет), родительское приложение генерирует код, детское его проверяет на валидность. При этом код действует ровно 30 минут с момента, когда его запросил родитель. Можете предположить, в общих чертах, как действует этот алгоритм? Предлагаю пофантазировать)
Всё предельно просто. По этому же принципу построены любые двуфакторные авторизации. Помните Google Authenticator? Многие считают, что эта программа вообще как-то связана с сайтом/игрой/приложением, куда хочет войти пользователь. Но нет. Это всего лишь «калькулятор».

Так же и здесь. Обычный алгоритм TOTP (Time-based One-time Password).

К примеру, вы зарегистрировались в Майнкрафте. На сервере включена двуфакторка. Вы должны ввести четырёхзначные код, меняющийся каждые 30 секунд. Как это реализовано: при регистрации вам дают секретнейший длинный код вида 2626HHSHSH278273635JSOSOKS и просят ввести его в Google Authenticator. Этот код знаете только вы и сервер игрушки. Есть специальная общепринятая формула, которая на основе вот этого огромного ключа рассчитывает четырехзначный код. Каждые 30 секунд он разный. Почему? А потому что в этой формуле есть одна переменная — количество временных отрезков, равных 30 секундам, прошедшее с начала эпохи UNIX (1 января 1970). И далее этот ваш «калькулятор» (в данном случае — Google Authenticator) высчитывает из этого секретного ключа и переменной короткий код. Вы вводите его на сервере Майнкрафта, и сервер делает тоже самое (по той же формуле). Далее сервер проверяет, есть ли совпадение результатов.

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

Для расчёта по этой формуле «калькулятор» и вовсе не обязателен — можно хоть самому считать, на бумажке. Правда, формула монструозная, криптографическая, считать вы будете точно дольше 30 секунд. Потому существуют «калькуляторы» — огромное количество сайтов, плагинов к браузерам, программ, в т.ч. приложение Google Authenticator.

По такому же принципу работает Family Link. Есть некий ключ, который «прошивается» в момент регистрации и который знают обе стороны (родительские устройства и устройство ребёнка). И далее высчитывается короткий код. Только берётся количество отрезков не по 30 секунд, а по 30 минут.
код действует ровно 30 минут с момента, когда его запросил родитель
Нет! С момента начала очередного 30-минутного отрезка с 1 января 1970-го года. Может так получится, что код будет действовать 1 секунду. Откройте на родительском устройстве и посмотрите, сколько времени осталось до истечения кода. Там будет не 30 мин 0 сек, а что-нибудь некрасивое.
Иван Сидоров
Иван Сидоров
38 633
Лучший ответ
Зачем предполагать?
Никто тайны из этого алгоритма никогда не делал зайти на справочный форум гугла и тебе там все подробно расскажут.
Это обычная система асинхронного шифрования с использованием открытого и закрытого ключа.
На клиенте хранится только открытый ключ что позволяет провести проверку цифрового кода.
На сервере есть закрытый ключ который позволяет рассчитать необходимое число.
"открытый ключь" + "округленная временная метка" + "числовой код" из всего этого считают хеш сумму которую и сравнивают с эталонной хеш суммой.

Задача сервера выдающего "числовой код" подобрать его так что бы в результате получился эталонный хеш.

Точно такую же задачу решают майнеры биткоинов т.е. найти такой числовой код который при добавление его к текущему блоку блокчейна который даст в итоге определенную хеш сумму.
SP
Serg Pismenny
12 593
Евгений Кузьмин Тут нет клиента и сервера, приложения между собой не общаются, сети то нет. Оба приложения - клиенты. Ок, будем считать, что родительское приложение - это сервер. Округленная временная метка - это как? Как приложение-клиент будет знать, в какое время была запущена генерация ключа, ведь он действует 30 минут с момента генерации, а клиент не знает, в какой момент был сгенерирован ключ. Разве что проверять все ключи, которые возможно были сгенерированы в последние 30 минут, что несколько избыточно, на мой взгляд.
Serg Pismenny с фигали он истек ? чепы он истек должен быть другой ближайший час
типа в 0:31 ближайший час уже будит 1:00 и код палученный в 0:29 будит отличацо. Но и это элементарна исправляеца опираясь на тод факт что код сначала нужна соз-дать а толька потом его можна использовать. (просто мне лень весь алгаритм рассписывать).
Вариация Challenge-Responce алгоритма, но как challenge используется время. Как генерация пароля какой-нибудь хеш алгоритм с ключом. Ключ шарится при первоначальной настройке приложений на девайсах.
Бюро Аренды
Бюро Аренды
11 032
да прошей телефон и заблокируй так что бы никто не залез