Вопрос или проблема
Я использую расширение prf для паролей, которое доступно начиная с iOS 18 и macOS 15. Я использую фиксированный, жестко закодированный ввод prf при создании или получении учетных данных. После создания пароля я пытаюсь получить учетные данные и извлечь вывод prf, что работает отлично, но я получаю разные выводы prf для одних и тех же учетных данных и одного и того же ввода prf в следующих сценариях:
При входе напрямую (платформенный аутентификатор) на мой MacBook/iPhone/iPad я постоянно получаю “вывод prf X” для всех трех устройств.
Когда я использую свой iPhone/iPad для сканирования QR-кода на моем MacBook (кроссплатформенный аутентификатор), я постоянно получаю “вывод prf Y” как на своем iPad, так и на iPhone.
Это задумано? Есть ли способ получить детерминированный вывод prf как для платформенных, так и для кроссплатформенных аутентификаторов, используя одни и те же учетные данные и ввод prf?
Ответ или решение
Вопрос, который вы подняли, касается использования расширения PRF для паролей в контексте аутентификации с использованием платформенных и кроссплатформенных аутентификаторов. На первый взгляд, вы столкнулись с разницей в выходных значениях PRF даже при использовании одного и того же входного значения для одного и того же идентификатора, но в разных сценариях аутентификации.
Объяснение поведения PRF
Во-первых, важно отметить, что различная обработка PRF (Pseudo-Random Function) при аутентификации может быть намеренной. Платформенные аутентификаторы (такие как Touch ID или Face ID на iOS и macOS) могут использовать специфические для платформы механизмы, которые влияют на итоговый результат PRF. В случае кроссплатформенной аутентификации, когда вы используете QR-код для сканирования, принцип работы может отличаться, что и приводит к генерации другого выходного значения.
Причины различий
- Параметры аутентификации: Платформенные аутентификаторы могут включать дополнительные параметры, такие как уникальные идентификаторы устройств или данные о сессии, которые могут влиять на генерацию выходного значения.
- Метод генерации: В зависимости от того, используется ли криптографическая библиотека, относящаяся к конкретной платформе или кроссплатформенной, может отличаться алгоритм генерации PRF, что также приведет к различиям.
- Состояние устройства: Аутентификация на разных устройствах может учитывать текущее состояние устройства (например, учетные записи пользователя, настройки безопасности и прочее).
Решения и рекомендации
-
Проверка настроек: Убедитесь, что обе среды (платформенная и кроссплатформенная) используют одни и те же настройки конфигурации и одинаковые параметры среды. Проверьте, что входные данные PRF идентичны.
-
Использование идентификаторов: Рассмотрите возможность использования фиксированных и идентифицируемых параметров, которые будут одинаковыми для всех устройств.
-
Документация и обновления: Ознакомьтесь с документацией и спецификациями PRF от разработчиков системы или библиотек, которые вы используете. Возможно, были введены обновления или изменения, влияющие на поведение функционала.
-
Поддержка: Если проблема сохраняется и вы не можете вывести одно и то же PRF-выходное значение в обеих средах, рекомендуется обратиться в техническую поддержку платформы или в сообщество разработчиков, работающих с API аутентификации. Возможно, у других разработчиков также есть аналогичные проблемы или решения.
Заключение
Ваша проблема с различиями в PRF-выходных значениях между платформенными и кроссплатформенными аутентификаторами, вероятнее всего, связанна с внутренними различиями в их логике работы. Чтобы гарантировать детерминированный выход, важно обеспечить консистентность всех параметров, связанных с аутентификацией.