Device identifier (HWID)

What the hashed device identifier is, how Letakof builds it, where it is sent, what changes it and how to turn it off.

When Letakof updates a subscription, it can pass a technical device identifier (HWID) directly to the subscription provider you chose. Providers use it to manage access to a subscription and to limit the number of devices. Letakof does not send this identifier to servers of Lekavot Limited: the request goes to your provider only.

How it is made

Letakof does not send any raw system identifier. It builds the value in two steps, the same on every platform:

  1. A stable identifier of your installation is read: the Windows MachineGuid, the macOS IOPlatformUUID, the iPhone vendor identifier (stored in the Keychain on first launch) or the Android ANDROID_ID.
  2. It is hashed: an MD5 hash gives a derived UUID, then the SHA-256 hash of that UUID is truncated to its first 8 bytes and written in hexadecimal. The result is 16 characters such as 0123456789abcdef (a made-up value).

In terms: this is hashing, truncation and hexadecimal encoding. It is not encryption: there is no key, and nothing is meant to be decrypted. The system identifier cannot be recovered from the value. The same device, however, always produces the same value: the hashing has no secret key, so the identifier is not anonymous to the provider. Recognising the same device is exactly what it is for.

What it depends on

Platform Source Changes when
Windows MachineGuid Windows is reinstalled or you use another computer. Reinstalling Letakof does not change it.
macOS IOPlatformUUID You use another Mac. Reinstalling Letakof or macOS does not change it.
iPhone Vendor identifier, kept in the Keychain The device is erased or restored on another device without an encrypted backup. Reinstalling Letakof keeps it. If the app is re-signed with a different developer team, the old entry may become unreadable and the value change.
Android ANDROID_ID The device is reset, another Android user is used, or the app is signed with another key. Reinstalling with the same signature does not change it.

Android TV counts as a separate device, because it has its own ANDROID_ID.

The value is calculated when needed and is not stored on its own. If the system identifier is unavailable, Windows and macOS fall back to a random value saved on the device; on Android, adding or updating a subscription then fails with Android ID is unavailable on this device while Send HWID is on.

You can see the value in Settings → Subscription and HWID → HWID and copy it with Copy HWID, for example to give it to your provider.

When and where it is sent

  • Only in the request for your subscription address: adding, manual refresh and automatic update. A profile imported from a file makes no request.
  • Only to that address. Not to rule sets, GEO databases, logos, the latency test or the update servers.
  • Together with three more headers: x-device-os, x-ver-os and x-device-model. See Available headers.

Turning it off

Settings → Subscription and HWID → Send HWID is on by default. When it is off, none of the four device headers is sent. The value stays visible in settings.

Providers that limit devices may then refuse the request. A panel often answers with a normal 200 and a placeholder instead of a profile, together with headers that Letakof recognises. You then see The server limits devices by HWID. Enable Send HWID in settings and try again, and your old profile is kept. If the limit is reached, you see The device limit for this subscription has been reached, or Remove a device through your provider: free a slot in the provider’s account and try again.

Questions

Can the provider identify my device? The provider sees the same value for the same device in its requests and can tell devices apart. That is the purpose of the identifier. It does not contain your name, and the system identifier it was made from is not sent.

Does Lekavot Limited see it? No. The app makes no requests to Lekavot Limited servers.

Found a mistake? Open an issue on GitHub.