Можно ли использовать значение SSAID (он же ANDROID_ID) для ключей шифрования? - PullRequest
0 голосов
/ 01 июня 2019

Я видел некоторые приложения для Android, которые используют ANDROID_ID (SSAID - Безопасные настройки Android ID) в качестве облегченного инструмента для вычисления ключа шифрования, который известен только этому приложению / устройству / пользователю для защиты данных в состоянии покоя , Хотя я не вижу какой-либо очевидной слабости (при условии, что устройство не имеет прав root, поскольку все ANDROID_ID могут быть перечислены), документация не затрагивает эту тему (событие, которое не советует). Таким образом, мне интересно, если кто-нибудь знает какие-либо проблемы со схемой?

-

Ниже приводится мотивация того, почему он выглядит безопасным для нерутированных устройств.

-

Документация разработчика Android (для API> 26) гласит следующее о ANDROID_ID :

В Android 8.0 (уровень API 26) и более поздних версиях платформы - 64-разрядное число (в виде шестнадцатеричной строки), уникальное для каждой комбинации ключа подписи приложения, пользователя и устройства. Значения ANDROID_ID ограничены подписывающим ключом и пользователем. Значение может измениться, если на устройстве выполнен сброс к заводским настройкам или изменился ключ подписи APK.

В блоге 1020 * есть также следующее:

В O идентификатор Android (Settings.Secure.ANDROID_ID или SSAID) имеет разные значения для каждого приложения и каждого пользователя на устройстве. Разработчики, которым требуется идентификатор области устройства, должны вместо этого использовать сбрасываемый идентификатор, такой как Рекламный идентификатор, предоставляя пользователям больший контроль. Рекламный идентификатор также предоставляет пользователю возможность ограничить отслеживание рекламы. Дополнительно в Android O:

  • Значение ANDROID_ID не будет изменяться при удалении / переустановке пакета, если имя пакета и ключ подписи совпадают. Приложения могут полагаться на это значение для поддержания состояния при переустановках.
  • Если приложение было установлено на устройстве с более ранней версией Android, идентификатор Android остается неизменным при обновлении устройства до Android O, если только приложение не удалено и не установлено заново.
  • Значение Android ID изменяется только в том случае, если устройство сбрасывается до заводских настроек или ключ подписи вращается между событиями удаления и повторной установки.
  • Это изменение требуется только для производителей устройств, которые предоставляют услуги Google Play и ID рекламы. Другие производители устройств могут предоставить альтернативный сбрасываемый идентификатор или продолжать предоставлять идентификатор ANDROID.

Более того, глядя на исходный код SettingsProvider.java , где рассчитывается SSAID, кажется, что процесс выглядит следующим образом:

  1. каждому пользователю устройства назначается 32-байтовый случайный ключ.
  2. для каждого APK: hmac с sha256 используется для вычисления SSAID для ключей подписывающего APK (где используется ключ, созданный на шаге 1).
  3. hmac усекается до 16 символов.
  4. усеченное значение сохраняется в settings_ssaid.xml (будущие запросы для ANDROID_ID ищутся из этого файла).

Таким образом, защита, по-видимому, полностью обеспечивается секретностью ключа, сгенерированного на шаге 1 (который также хранится в settings_ssaid.xml).

...