Что такое uid устройства
Что такое ID, UID? Подробно об идентификаторах
В этом уроке мы разберемся, что такое идентификаторы: (ID, UID, УИД). Эти аббревиатуры часто встречаются в теме информационной безопасности, которую мы начинаем осваивать в новой серии IT-уроков.
Что такое ID?
ID (читается «ай-ди») — это часть английского слова “identifier”, которое переводится как “идентификатор”.
ID или Идентификатор — это информация, которая может идентифицировать субъект (простыми словами — это номер или имя: число или строка символов).
Каждый раз, когда вы где-то регистрируетесь, вы получаете идентификатор, то есть, какое-то имя или номер. И внутри каждой отдельной системы ваш идентификатор уникальный.
Примеры идентификаторов (id):
Пример ID страницы в социальной сети ВКонтакте
Знакомясь с человеком мы в первую очередь спрашиваем его имя, а для связи просим сообщить номер телефона или e-mail, то есть, узнаем его идентификаторы (сюда же можно отнести номер машины, номер паспорта, номер банковской карты, штрих-код и т.д.)
Что такое UID?
Часто встречается надпись “UID”, в которой перед “ID” добавлена буква “U”, которая может быть расшифрована как “unique” — “уникальный”, или как “user” — “пользователь”.
Следовательно, есть два варианта расшифровки аббревиатуры UID:
UID (Unique identifier) или УИД — уникальный идентификатор.
UID (User identifier) — идентификатор пользователя в операционной системе или на сайте.
Всё просто: некоторые идентификаторы являются уникальными, то есть могут принадлежать только одному субъекту (имя может совпадать, а номер паспорта всегда отличается).
Примеры использования UID:
ID с точки зрения информационной безопасности
Обычно идентификатор (id) не является секретным, поэтому только по нему нельзя предоставлять доступ к ресурсу (например, знание адреса электронной почты не даёт права доступа к письмам в почтовом ящике).
Определение идентификатора (идентификация) является первым шагом для доступа к информационным ресурсам (почта, аккаунт в социальной сети и т.д.), далее выполняется аутентификация и авторизация, но об этом мы поговорим в следующем IT-уроке.
Копирование запрещено, но можно делиться ссылками:
UID — что это в устройствах и компьютерах?
UID — это уникальный идентификатор (расшифровка от английского «Unique Identifier») или, реже, пользовательский идентификатор (расшифровка от английского «User Identifier»). В русскоязычном софте применяется аббревиатура УИД (происходит от английского «UID»), например, в программных ERP-средствах (тот же всем известный комплекс «1C»).
Встречается не только пользовательский идентификатор. Есть UID устройства (например, модель и серийный номер электронного гаджета), UID компьютера или UID маршрутизатора (обычно в обоих случаях понимается сетевой MAC-адрес) и так далее. Этот набор символов избавляет нас от необходимости просеивать большое количество похожих элементов в поисках нужного. Значения генерируются случайным или закономерным (с помощью алгоритма или вручную) образом.
Что означает UID?
Простыми словами, в обоих случаях UID значит набор цифр и/или символов для неповторяющейся, то есть уникальной, идентификации пользователя (как, например, при покупке билетов на поезд или самолёт), устройства (компьютера, звена сети). Не относится к персональным данным и потому не может являться единственным средством доступа к какой-либо ценной информации без верификации.
Примеры UID в устройствах и компьютерах
Самый распространённый пример использования UID в реальной жизни — ваш браузер и cookies. Когда открывается веб-сайт по определённому адресу, создаётся уникальный идентификатор пользователя на основе хешированной анонимной информации.
Она может использоваться, как для некорыстных целей (безопасность и программные особенности сайта), так и для коммерческих мотивов (рекламные метрики, персонализация предложения в зависимости от поведенческих факторов). Но это не единственное применение технологии UID в устройствах вроде компьютеров или смартфонов.
Унифицированный идентификатор ресурса (URI, Uniform Resource Identifier)
Это уникальный идентификатор, который делает контент доступным в Интернете за счёт выборочного нацеливания на такие элементы, как текст, видео, изображения и приложения.
Унифицированный указатель ресурсов (URL, Uniform Resource Locator)
Это особый тип URI, нацеленный на веб-страницы, так чтобы когда браузер запрашивает их, они могли бы быть найдены и предоставлены пользователям.
Универсальный уникальный идентификатор (UUID, Universal Unique Identifier)
Это 128-битное число, используемое для уникальной идентификации некоторого объекта/ресурса/сущности в Интернете.
Глобальный уникальный идентификатор (GUID, Global Unique Identifier)
Это номер, который программа Microsoft создаёт для определения уникального идентификатора внутрисистемного объекта — например, документа Word.
Уникальный идентификатор устройства (UDID, Unique Device Identifier)
Это строка из символов, присваиваемая определённым устройствам. Например, у Apple iPhone, iPad и iPod Touch присваивается 40 символов UDID.
Идентификатор набора услуг (SSID, Service Set Identifier)
Это последовательность символов, которая однозначно называет конкретную беспроводную локальную сеть (WLAN).
Уникальные идентификаторы (UID) могут быть присвоены всему, что нужно отличать от других объектов. Простыми словами, отдельным пользователям, компаниям, машинам или веб-сайтам для быстрого нахождения в различных системах нужен UID в виде отличительных значений, которые зависят от потребностей приложения, устройства, компьютера.
Обратитесь в компанию ИТ-аутсорсинга для дальнейшей экспертной поддержки и консультации по этой теме и любым другим техническим вопросам.
Что такое UID. И с чем его едят.
Для новичков
В Symbian OS UID-ы используются повсеместно для разнообразных идентификаций типов
файлов и увязки файлов с теми или иными приложениями. Конечно, пользователю более понятны обычные
имена файлов и Symbian OS гибко поддерживает имена файлов различной длинны. Но с точки зрения системы,
32-битные номера обеспечивают большую однозначность, систематичность и более легкую идентификацию.
Поэтому UID-ы являются фундаметальной характеристикой ОС.
По определению, UID-тип объекта состоит из трех отдельных UID-ов используемых
в комбинациях. Составные компоненты UID-ов называются UID1, UID2 и UID3 имеют следующие основные
характеристики:
— UID1- может быть рассмотрен как идентификатор на уровне системы; например, исполняемые файлы,
DLL, файловые хранилища все различаются по UID1.
— UID2-различия между объектами имеющими один и тот же UID1 и могут быть рассмотрены как идентификатор
интерфейса; например, статический интерфейс (разделяемая библиотека) и полиморфический интерфейс
(приложение или встраеваемая программная оболочка) DLL-ки отличаются по UID2.
— UID3-идентифицирует объекты, имеющие конкретный UID2 и может рассматриваться как идентификатор
проекта; например, UID3 может быть разделен между всеми объектами, принадлежащими данной программе,
включая библиотеки, если имеются, DLL-ки каркасов,и все документы.
UID-тип это объект типа TUidType, которой можно создать из комбинаций всех
или некоторых из трех возможных UID-ов. Если переменная имеет прелставляет собой UID, то можно выяснить
и значения составляющих её компонентов UID1, UID2 и UID3.
Объект в Symbian OS и, особенно, многие файлы в Symbian OS могут иметь все, несколько,
или вообще не иметь не одного из трех возможных UID-ов.
Вариант с отсутсвием UID-ов необходим для того, чтобы можно было взаимодействовать
с другими системами, позволяя легко и свободно использовать по назначению в Symbian OS не родные
файлы данных. Symbian OS позволяет создавать настраиваемые файловые ассоциации и идентификации даже
когда UID-ы отсутсвуют. Это делается по расширениям имен файлов.
Каждый «родной» документ должен иметь соотвествующий UID1. его значение задается
приложением, создавщим этот документ.
Необходимым является только UID1, но в большинстве случаев разработчики захотят
определить второй и третий UID-ы для документов, которые создает и использует их приложение. Значения
этих UID используются каркасом архитектуры приложения, чтобы управлять связями между приложениями
и их документами. Например, это позволяет при открытии файла определить и запустить связанное с ним
приложение, а также правильно отображать иконку этого приложения, возле файла документа. И наоборот
это позволяет приложению, отсортировывать свои файлы среди прочих.
UID задается из диапазона 0х01000000 до 0x0fffffff.
UID можно в любое время посмотреть, зайдя например в программу SmartFileMan, и нажав клавишу «5» на нужном файле.На экране появятся все три UID-a.
Как правильно идентифицировать Android-устройства
Всем привет! Если вам нужно создать уникальный и стабильный идентификатор Android-устройства для использования внутри приложения, то вы наверняка заметили тот хаос, который присутствует в документации и в ответах на stackoverflow. Давайте рассмотрим, как решить эту задачу в 2020 году. О том, где взять идентификатор, стойкий к переустановкам вашего приложения, и какие могут быть сложности в будущем — в этом кратком обзоре. Поехали!
Зачем нужна идентификация
В последнее время обсуждения конфиденциальности пользовательских данных стремительно набирают популярность. Возможно, это спровоцировано ростом выручки рекламных гигантов. Возможно, под этими обсуждениями скрывается обеспокоенность монополиями, которые идентифицируют пользователей и их устройства. Так, Apple, борясь со слежкой и ограничивая всем разработчикам использование IDFA, в то же самое время нисколько не ограничивает его себе. Что можно сказать точно: процесс идентификации пользователя приложения для разработчиков усложнился.
В задачах, опирающихся на идентификацию, встречаются: аналитика возвратов, персонализация контента и рекламы, предотвращение мошенничества.
Среди последних можно выделить несколько актуальных проблем:
Общие аккаунты в сервисах с платной подпиской или уникальным платным контентом. Только представьте сколько теряют сервисы вроде Netflix или Coursera от того, что пользователи заводят один аккаунт на нескольких человек.
Обе проблемы ведут либо к потере выручки, либо к репутационным потерям. Надежность их решения напрямую зависит от надежности идентификации устройств.
Основные способы идентификации
Использование аппаратных идентификаторов
Устаревший и нежизнеспособный в настоящее время способ. Google хорошо поработала над тем, чтобы закрыть доступ к ним, поскольку они не меняются даже после сброса к заводским настройкам. Среди таких идентификаторов:
В настоящее время они недоступны без явного запроса разрешений. Более того, если приложению нужно ими пользоваться, оно может не попасть в Play Market. Оно должно основным функционалом опираться на эти разрешения, иначе будут трудности с прохождением ревью. Поэтому сейчас эта опция доступна приложениям для работы со звонками или голосовым ассистентам.
Такие идентификаторы не меняются после сброса к заводским настройкам, и здесь кроется неочевидный недостаток: люди могут продавать свои устройства, и в таком случае идентификатор будет указывать на другого человека.
Генерация UUID с первым запуском
Данный способ схож с использованием cookie: создаем файл со сгенерированной строкой, сохраняем его в песочнице нашего приложения (например с помощью SharedPreferences), и используем как идентификатор. Недостаток тот же, что и у cookie — вся песочница удаляется вместе с приложением. Еще она может быть очищена пользователем явно из настроек.
При наличии у приложения разрешений к хранилищу вне песочницы можно сохранить идентификатор где-то на устройстве и постараться поискать его после переустановки. Будет ли в тот момент нужное разрешение у приложения — неизвестно. Этот идентификатор можно использовать как идентификатор установки приложения (app instance ID).
Использование идентификаторов, предоставляемых системой
В документации для разработчиков представлен идентификатор ANDROID_ID. Он уникален для каждой комбинации устройства, пользователя, и ключа, которым подписано приложение. До Android 8.0 идентификатор был общим для всех приложений, после — уникален только в рамках ключа подписи. Этот вариант в целом годится для идентификации пользователей в своих приложениях (которые подписаны вашим сертификатом).
Существует и менее известный способ получить идентификатор общий для всех приложений, независимо от сертификата подписи. При первичной настройке устройства (или после сброса к заводским) сервисы Google генерируют идентификатор. Вы не найдете о нем никакой информации в документации, но тем не менее можете попробовать код ниже, он будет работать (по состоянию на конец 2020 года).
Добавляем строчку в файл манифеста нужного модуля:
И вот так достаем идентификатор:
В коде происходит следующее: мы делаем запрос к данным из определенного ContentProvider-a, что поставляется с сервисами Google. Вполне возможно, что Google закроет к нему доступ простым обновлением сервисов. И это даже не обновление самой операционки, а пакета внутри нее, т.е. доступ закроется с обычным обновлением приложений из Play Market.
Но это не самое плохое. Самый большой недостаток в том, что такие фреймворки, как Xposed, позволяют с помощью расширений в пару кликов подменить как ANDROID_ID, так и GSF_ID. Подменить локально сохраненный идентификатор из предыдущего способа сложнее, поскольку это предполагает как минимум базовое изучение работы приложения.
Приложение Device ID Changer в связке с Xposed позволяет подменять практически любой идентификатор. В бесплатной версии — только ANDROID_ID
Создание цифрового отпечатка (fingerprint) устройства
Идея device-fingerprinting не новая, и активно используется в вебе. У самой популярной библиотеки для создания отпечатка — FingerprintJS — 13 тысяч звезд на GitHub. Она позволяет идентифицировать пользователя без использования cookie.
Рассмотрим идею на примере (цифры взяты приблизительные для иллюстрации).
Возьмем ежедневную аудиторию какого-нибудь Android-приложения. Допустим она составляет 4 миллиона. Сколько среди них устройств марки Samsung? Гораздо меньше, примерно 600 тысяч. А сколько среди устройств Samsung таких, что находятся под управлением Android 9? Уже около 150 тысяч. Выделим среди последних такие, что используют сканер отпечатков пальцев? Это множество устройств еще меньше, ведь у многих планшетов нет сканера отпечатков пальцев, а современные модели опираются на распознавание лица. Получим 25000 устройств. Добавляя больше условий и получая больше информации, можно добиться множеств малых размеров. В идеальном случае — с единственным элементом внутри, что и позволит идентифицировать пользователя. Чем больше пользователей можно различить, тем выше энтропия этой информации.
Среди основных источников информации в Android, доступных без пользовательских разрешений, можно выделить аппаратное обеспечение, прошивку, некоторые настройки устройства, установленные приложения и другие.
Обычно всю добытую информацию хешируют, получая цифровой отпечаток. Его и можно использовать в качестве идентификатора.
Из достоинств метода — его независимость от приложения (в отличие от ANDROID_ID), поскольку при одинаковых показаниях с источников отпечатки будут одинаковыми. Отсюда же вытекает первый недостаток — разные устройства с некоторой вероятностью могут иметь одинаковый отпечаток.
Еще одна особенность отпечатка — не все источники информации стабильны. Например, установленные приложения дадут много энтропии. Возьмите устройство друга, и проверьте, одинаков ли у вас набор приложений. Скорее всего — нет, к тому же приложения могут устанавливаться и удаляться почти каждый день.
Таким образом, метод будет работать при правильном соотношении стабильности и уникальности источников энтропии.
Какой метод выбрать
Итак, мы рассмотрели доступные способы идентификации. Какой же выбрать? Как и в большинстве инженерных задач, единственного правильного решения не существует. Все зависит от ваших требований к идентификатору и от требований к безопасности приложения.
Разумный вариант — использовать сторонние решения с открытыми исходниками. В этом случае за изменениями в политике конфиденциальности будет следить сообщество, вовремя поставляя нужные изменения. За столько лет существования проблемы до сих пор нет популярной библиотеки для ее решения, как это есть для веба. Но среди того, что можно найти на android-arsenal, можно выделить две, обе с открытым исходным кодом.
Android-device-identification — библиотека для получения идентификатора. Судя по коду класса, ответственного за идентификацию, используются аппаратные идентификаторы, ANDROID_ID, и цифровой отпечаток полей из класса Build. Увы, проект уже 2 года как не поддерживается, и в настоящий момент скорее неактуален. Но, возможно, у него еще будет развитие.
Fingerprint-android — совсем новая библиотека. Предоставляет 2 метода: getDeviceId и getFingerprint. Первый опирается на GSF_ID и ANDROID_ID, а второй отдает отпечаток, основанный на информации с аппаратного обеспечения, прошивки и некоторых стабильных настроек устройства. Какая точность у метода getFingerprint — пока неясно. Несмотря на это библиотека начинает набирать популярность. Она проста в интеграции, написана на Kotlin, и не несет за собой никаких зависимостей.
В случае, когда импортирование сторонних зависимостей нежелательно, подойдет вариант с использованием ANDROID_ID и GSF_ID. Но стоит следить за изменениями в обновлениях Android, чтобы быть готовым к моменту, когда доступ к ним будет ограничен.
Если у вас есть вопросы или дополнения — делитесь ими в комментариях. А на этом все, спасибо за внимание!
Что такое User ID? Зачем он нужен, как использовать в анализе данных
Разберемся с определениями:
В подавляющем большинстве случаев бизнес интересуют именно пользователи (Users), а не сессии от анонимных устройств, статистику по которым вы получаете, установив Google Analytic “из коробки”. При создании экосистемы GA предполагалось, что User ID нужно начинать использовать при первой же возможности. Так почему же качественно проработанная система присвоения User ID на сайтах встречается еще реже чем электронная торговля?
Ниже приведен характерный пример того, как путь одного и того же пользователя по-разному распознается в “обычном” и “User ID” представлении.
Обычное видит только конкретный Client ID и на длинном пробеге теряет первоначальный источник. Представление User ID отслеживает пользователя на год дальше, на всех трех его устройствах и умеет атрибутировать источник привлечения на сессию из другого устройства.
Незнание аналитиками этого факта часто приводит к излишне усложненным схемам передачи транзакций из CRM при помощи Measurement Protocol.
В следующей статье я опишу известные мне кейсы, в которых User ID позволяет существенно увеличить точность оценки эффективности рекламы.
Итак, бесплатная версия GA (как и GA360) не предлагает “из коробки” адекватных решений по оценке длинного жизненного цикла пользователей, состоящего из длинной цепочки устройств и сессий, среди которых неоднократно встречаются управляемые рекламные каналы.