Нет, без (локального) «кеша данных» предоставленный код «технической поддержки» не может зависеть «по крайней мере от идентификатора пользователя (целого числа) и даты истечения срока действия».
Более подробно: вопрос требует (одноразовой) аутентификации, где
- вход может быть легко предоставлен человеком через аутентифицированный канал (который также не подлежит прослушиванию).
- приложение не имеет постоянного/пользовательского хранилища.
Основная проблема, которую я вижу, заключается в том, что «кеш данных поврежден»: чтобы проверить ввод, алгоритм должен сравнить результат с другим вводом.
Например, рассмотрим упрощенную процедуру входа в систему на основе хэша:
Пользователь предоставляет пароль. Алгоритм принимает в качестве входных данных пароль вместе со строкой, предоставленной кешем данных; вычисляет хэш пароля и сравнивает его со строкой.
Если нет кеша данных, то алгоритм может использовать только жестко закодированный значения, то есть значения, поставляемые вместе с приложением и не зависящие от пользовательского ввода.
Комментарии:
"чтобы текущая дата могла работать как одноразовый блокнот."
Обратите внимание, что для полной безопасности одноразового блокнота ключ должен быть случайным.Это не добавляет безопасности.
Вне области, поскольку это не считается безопасным, или в рамках вопроса ОП:
Если вам нужно жестко закодированное значение для определенного дня, самым простым способом для этого было бы жестко закодировать изображения односторонней функции (созданной с помощью криптографической хеш-функции) в приложении.
Затем служба технической поддержки может предоставить удобочитаемую парольную фразу (см. Stackexchange: длинная фраза-пароль словаря, Stackexchange: зачем использовать случайные символы в pw? ), где у техподдержки есть "действующая кодовая фраза" на каждый день.
Парольная фраза может быть введена пользователем; изображение которого будет сравниваться с жестко закодированными значениями, связанными с тем днем. Однако это небезопасно по нескольким причинам:
(1) Жестко закодированные значения
- будет одинаковым для всех пользователей, например. не может содержать идентификатор пользователя
- как только кодовая фраза просочилась, кто-нибудь с может получить доступ к приложению
(2) Дата на самом деле не добавляет безопасности, за исключением того, что злоумышленник должен знать, что разные дни имеют разные парольные фразы.
Так что я бы настоятельно рекомендую против этого.