Идентификатор устройства (HWID)

Что такое хешированный идентификатор устройства, как Letakof его формирует, куда передаёт, что его меняет и как отключить.

При обновлении подписки Letakof может передавать технический идентификатор устройства (HWID) непосредственно выбранному вами провайдеру подписки. Провайдеры используют его для управления доступом к подписке и ограничения числа устройств. Letakof не передаёт этот идентификатор на серверы Lekavot Limited: запрос уходит только вашему провайдеру.

Как он формируется

Letakof не отправляет никакого сырого системного идентификатора. Значение строится в два шага, одинаково на всех платформах:

  1. Читается постоянный идентификатор вашей установки: MachineGuid Windows, IOPlatformUUID macOS, идентификатор поставщика iPhone (сохраняется в Keychain при первом запуске) или ANDROID_ID Android.
  2. Он хешируется: хеш MD5 даёт производный UUID, затем хеш SHA-256 этого UUID усекается до первых 8 байт и записывается в шестнадцатеричном виде. Результат — 16 символов вида 0123456789abcdef (выдуманное значение).

В терминах: это хеширование, усечение и шестнадцатеричное кодирование. Это не шифрование: ключа нет, и расшифровывать нечего. Системный идентификатор по значению восстановить нельзя. Но одно и то же устройство всегда даёт одно и то же значение: у хеширования нет секретного ключа, поэтому для провайдера идентификатор не анонимен. Узнавать одно и то же устройство — его прямое назначение.

От чего зависит

Платформа Источник Меняется, когда
Windows MachineGuid Переустановлена Windows или вы используете другой компьютер. Переустановка Letakof его не меняет.
macOS IOPlatformUUID Вы используете другой Mac. Переустановка Letakof или macOS его не меняет.
iPhone Идентификатор поставщика, в Keychain Устройство стёрто или восстановлено на другом без зашифрованной копии. Переустановка Letakof его сохраняет. Если приложение переподписано другой командой разработчика, старая запись может стать недоступной, и значение изменится.
Android ANDROID_ID Устройство сброшено, используется другой пользователь Android или приложение подписано другим ключом. Переустановка с той же подписью его не меняет.

Android TV считается отдельным устройством, потому что у него свой ANDROID_ID.

Значение вычисляется по мере необходимости и отдельно не хранится. Если системный идентификатор недоступен, Windows и macOS используют случайное значение, сохранённое на устройстве; на Android при включённом Отправлять HWID добавить или обновить подписку тогда не удастся — с ошибкой Android ID недоступен на этом устройстве.

Значение видно в Настройки → Подписка и HWID → HWID, его можно скопировать кнопкой Скопировать HWID, например чтобы передать провайдеру.

Когда и куда передаётся

  • Только в запросе на адрес вашей подписки: при добавлении, ручном обновлении и автообновлении. Профиль, импортированный из файла, запросов не делает.
  • Только на этот адрес. Не наборам правил, не базам GEO, не логотипам, не проверке задержки и не серверам обновлений.
  • Вместе с тремя другими заголовками: x-device-os, x-ver-os и x-device-model. См. Список заголовков.

Отключение

Настройки → Подписка и HWID → Отправлять HWID по умолчанию включено. Если выключить, ни один из четырёх заголовков устройства не отправляется. Значение по-прежнему видно в настройках.

Провайдеры, ограничивающие устройства, после этого могут отказать в запросе. Панель часто отвечает обычным 200 и заглушкой вместо профиля, добавляя заголовки, которые Letakof распознаёт. Тогда вы увидите Сервер ограничивает устройства по HWID. Включите «Отправлять HWID» в настройках и повторите, а прежний профиль сохранится. Если лимит исчерпан, вы увидите Достигнут лимит устройств для этой подписки или Удалите одно из них на стороне провайдера: освободите место в аккаунте у провайдера и повторите.

Вопросы

Может ли провайдер опознать моё устройство? Провайдер видит в своих запросах одно и то же значение для одного и того же устройства и может различать устройства. Для этого идентификатор и нужен. В нём нет вашего имени, а системный идентификатор, из которого он получен, не отправляется.

Видит ли его Lekavot Limited? Нет. Приложение не делает запросов к серверам Lekavot Limited.

Нашли ошибку? Создайте обращение на GitHub.