13 апреля 2017 г.

Изменения в работе с идентификаторами устройства в Android O

    Перевод записи https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

    В этой записи рассказывается о том, что вам грозит, когда пользователь обновится на Android O, если вы тем или иным способом пытаетесь этого пользователя распознавать, получать его ID. Как обычно, строго рекомендую читать оригинал, а не мой корявый перевод.


Изменения в работе с идентификаторами устройства в Android O

Posted by Giles Hogben, Privacy Engineer

    В Android O появляются некоторые улучшения, дабы помочь пользователю управлять доступом к своим идентификаторам. Эти улучшения включают:
  • Ограничение на использование постоянных (не сбрасываемых) устройство-зависимых идентификаторов
  • Обновление системой Wi-Fi стека, связанного с изменениями прошивки Wi-Fi чипсета на устройствах типа Pixel, Pixel XL и Nexus 5x для рандомизации MAC адресов во время сканирований сетей
  • Обновление в механизме, которым приложения запрашивали информацию об учётной записи и предоставление большего контроля над данными пользователя

Изменения в Device identifier

    Некоторые изменения в Android O, связанные с идентификаторами устройства:

Android ID

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

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

Build.SERIAL

    Для приложений, с target Android O и новее android.os.Build.SERIAL теперь deprecated. Вместо этого, приложения должны использовать новый Android O API, Build.getSerial(), который возвращает серийный номер, пока предоставлен пермишен PHONE. В будущей версии Android, приложения с таргетом Android O, будут видеть Build.SERIAL как "UNKNOWN". Для сохранения обратной совместимости с легаси приложениями, приложения с таргетом более ранних версий Android будут по-прежнему получать serial id устройства.

Net.Hostname

    Net.Hostname — это сетевое имя устройства. В предыдущих версиях Anrodoid, дефолтное значение сетевого имени и значение сетевого имени по DHCP содержались в Settings.Secure.ANDROID_ID. В Android O net.hostname пуст и DHCP клиент больше не сообщает своего сетевого имени, в соответствии с IETF RFC 7844 (анонимный профиль).

Widevine ID

    Для новых устройств, которые из коробки будут иметь Android O, Widevine Client ID будет возвращать разные значения для каждого имени пакета и web origin (для веб-приложений).

Уникальные system и settings properties

    Дополнительно к Build.SERIAL, некоторые другие settings и system properties не будут доступны в Android O. К примеру:
  • ro.runtime.firstboot: Таймстамп в милисекундах первой загрузки после вайпа или самой недавней загрузки
  • htc.camera.sensor.front_SN: Серийный номер камеры (доступно на некоторых устройствах HTC)
  • persist.service.bdroid.bdaddr: Свойства Bluetooth MAC адреса
  • Settings.Secure.bluetooth_address: Bluetooth MAC адрес устройства. В O он доступен только приложениям, которым предоставлен пермишен LOCAL_MAC_ADDRESS

Рандомизация MAC адреса в сканирующих запросах Wi-Fi

    Мы работали совместно с секьюрити ресёчерами1 для проработки вменяемой рандомизации MAC адресов для сканирующего Wi-Fi трафика, создаваемого прошивками чипсетов устройств Google Pixel and Nexus 5X. Затем команда Android Connectivity работала совместно с производителями для обновления прошивок чипсетов этих устройств. Android O протаскивает эти изменения в Android Wi-Fi стек, так что устройства с такими же чипсетами, которые получили обновление до Android O и выше могут получить те же преимущества.
    Здесь перечислены некоторые изменения, которые мы сделаем в  прошивках Pixel, Pixel XL иNexus 5x, когда выйдет O+:
  • Для каждого Wi-Fi скана, пока устройство отключено от точки доступа, используется новый случайный MAC адрес (не важно, в режиме ожидания устройство или нет).
  • Начальный порядковый номер пакета для каждого сканирования также случайный.
  • Ненужные информационные элементы сканирующих запросов были удалены. Теперь информационные элементы ограничены набором параметров SSID и DS.

Изменения в getAccounts API

    В Android O и выше, пермишена GET_ACCOUNTS больше недостаточно для получения доступа к списку учётных записей устройства. Приложения должны использовать API предоставляемый приложением, управляющем определённым типом учётной записи, или же пользователь должен предоставить пермишен для доступа к учётной записи в активити выбора учётных записей. Например, Gmail может получать учётные записи Google, зарегистрированные на устройстве, потому что Google владеет приложением Gmail, но пользователь должен будет предоставить Gmail доступ к информации о других учётных записях, зарегистрированных на устройстве.
    
    Приложения с таргетом Android O или позже должны использовать любой из двух вариантов — AccountManager#newChooseAccountIntent() или метод, определяемый аутентификатором — для получения доступа к учётной записи. Приложения с таргетом ниже O могут продолжать использовать текущий метод.

    Также в Android O приложения могут использовать методы AccountManager.setAccountVisibility()/ getVisibility() для управления политиками видимости учтётных записей, которыми владеют эти самые приложения.
 
    Дополнительно, бродкаст LOGIN_ACCOUNTS_CHANGED_ACTION теперь deprecated но продолжит работать в Android O. Приложения должны использовать addOnAccountsUpdatedListener() для получения в реальном времени обновлений об учётных записях для тех типов учётных записей, которые они определяют.

Загляните в Best Practices for Unique Identifiers для дополнительной информации

Замечания


  1. Glenn Wilkinson and team at Sensepost, UK, Célestin Matte, Mathieu Cunche: University of Lyon, INSA-Lyon, CITI Lab, Inria Privatics, Mathy Vanhoef, KU Leuven