СТАНДАРТ ВС 3
Стандарт: Единый метод отпечатка оборудования (HWID)
Дата введения: 2026-08-01
Дата ревизии: 2026-08-03
1 Назначение
Настоящий стандарт устанавливает единый метод сбора и нормализации полей оборудования cpu, mb, ram, gpu, mac, обеспечивающий идентичный отпечаток (HWID) для одной и той же машины независимо от:
- операционной системы (Windows, Linux и др.);
- источника данных: готовые отчёты, живые сборщики на любой ОС.
HWID обеспечивает:
- уникальность для каждой машины, в том числе для физических близнецов (одинаковые CPU, платы, память);
- стабильность при переименовании или переезде машины (имя рабочего места в отпечаток не входит);
- чувствительность к замене оборудования: замена CPU на другую модель, платы, модулей памяти, видеокарты или сетевой карты меняет HWID;
- воспроизводимость: метод описывает что собрать и как нормализовать, а не конкретный скрипт.
2 Термины и общие положения
2.1 HWID — детерминированный идентификатор оборудования, вычисляемый из канонических полей по разделу 4. Представляется только как UUID4 (полная форма) или его 8-символьный префикс (короткая форма); иные формы (например SHA256) как идентификатор не применяются.
2.2 Каноническое поле — нормализованное значение (по разделу 3), входящее в отпечаток.
2.3 Отчёт сборщика (HWID-REPORT) — текстовый построчный файл KEY=value, который обязан выдавать любой сборщик на любой ОС (раздел 5).
2.4 Легаси-отчёт — существующий источник данных, не выдающий поля напрямую в каноническом виде (например, DxDiag). Соответствие легаси-отчётов каноническим полям — раздел 6.
2.5 Мусорный серийник — значение поля серийного номера платы, не идентифицирующее конкретный экземпляр: служебная заглушка, модельное значение (название модели) или вырожденное значение. Заменяется на oem (п. 3.2).
2.6 LAA (locally administered address) — MAC-адрес, у которого установлен бит 1 старшего октета (второй hex-символ нечётный).
2.7 PCI ven:dev — идентификатор PCI-устройства в виде vendor:device (по 4 hex-цифры, нижний регистр).
3 Канонические поля
Все поля собираются на уровне аппаратуры/SMBIOS/CPUID, а не на уровне «взгляда» операционной системы, — это гарантирует одинаковые значения на разных ОС.
3.1 cpu — модель процессора (уровень CPUID)
| Свойство | Значение |
|---|---|
| Определение | Значение CPUID(1).EAX (младшие 4 байта) и CPUID(1).EDX (старшие 4 байта), склеенные в формат %08X%08X (EDX в старшей половине). Пример: BFEBFBFF000306A9 |
| Windows | Win32_Processor.ProcessorId |
| Linux/прочее | Инструкция CPUID (leaf 1), напрямую или через helper; для сверки EAX — семейство/модель/степпинг из /proc/cpuinfo |
| Нормализация | Несколько значений (многопроцессорность) — отсортированный список через ,; каждое значение — 8 hex-цифр в верхнем регистре, без пробелов |
Примечание. Отпечаток модельного уровня: одинаков у одинаковых моделей CPU. Уникальность HWID обеспечивают поля
mbиmac.
3.2 mb — серийный номер базовой платы (SMBIOS)
| Свойство | Значение |
|---|---|
| Определение | Значение Baseboard.SerialNumber из таблиц SMBIOS/DMI |
| Windows | Win32_BaseBoard.SerialNumber (без fallback на Product) |
| Linux | dmidecode -s baseboard-serial-number или /sys/class/dmi/id/board_serial |
| Нормализация | Обрезать пробелы; мусорные значения → oem (п. 2.5) |
Поле mb — только серийный номер конкретного экземпляра платы. Модель платы (значение Product, название модели) в отпечаток не входит: модельные значения повторяются у многих экземпляров и не идентифицируют конкретную плату. При отсутствии или мусорном серийнике поле принимает oem; Product не подставляется.
Справочник мусорных значений (сравнение без учёта регистра, после обрезки):
To be filled by O.E.M.
Default string
INVALID
None
Not Specified
System Serial Number
N/A
O.E.M.
<пустая строка>
Критерий отнесения значения к мусорным: не идентифицирует конкретный экземпляр (п. 2.5). Справочник не исчерпывающий: любое модельное значение (например G31M-S., X99) или иная строка, не являющаяся серийником экземпляра, также заменяется на oem.
3.3 ram — ёмкость установленных модулей памяти (SMBIOS), MiB
| Свойство | Значение |
|---|---|
| Определение | Сумма значений Size занятых слотов Memory Device (SMBIOS), в MiB (целое) |
| Windows | Сумма Win32_PhysicalMemory.Capacity |
| Linux | dmidecode -t memory — сумма Size занятых слотов |
| Нормализация | Целое число MiB, десятичная запись |
Запрещено использовать «видимую» ОС память (Windows Available / Linux MemTotal) — значения на одной машине различаются между ОС.
Соответствие легаси: строка
Memory: NNNNMB RAMв DxDiag является установленной ёмкостью и допускается как источник.
3.4 gpu — видеоконтроллеры по PCI-идентификаторам
| Свойство | Значение |
|---|---|
| Определение | Для каждого физического видеоконтроллера — ven:dev (vendor:device из PCI-конфигурации) |
| Windows | Win32_VideoController.PNPDeviceID (шаблон PCI\VEN_xxxx&DEV_xxxx) |
| Linux | lspci -nn — класс VGA/3D (03xx) |
| DxDiag | Device Key в секции Display Devices (VEN_xxxx&DEV_xxxx) |
| Нормализация | Список отсортирован, ,-join, каждое значение ven:dev в нижнем регистре |
Исключения: программные и базовые адаптеры — Microsoft Basic Display/Render Driver (Windows ROOT\BASIC*, vendor 1414), виртуальные адаптеры.
Маркетинговые имена карт (
Radeon RX 570 Series) в отпечаток не входят — они зависят от ОС и драйвера и служат только справочными данными.
3.5 mac — MAC-адреса физических сетевых адаптеров
| Свойство | Значение |
|---|---|
| Определение | Аппаратные MAC-адреса физических (PCI/USB) сетевых адаптеров |
| Windows | Win32_NetworkAdapter — фильтр физических: PNPDeviceID начинается с PCI\ или USB\ |
| Linux | /sys/class/net/*/address; физичность — наличие каталога /sys/class/net/*/device |
| Нормализация | Lowercase, формат aa:bb:cc:dd:ee:ff, список отсортирован, ,-join |
Исключения: loopback, виртуальные адаптеры (TAP/VPN, Hyper-V, VMware, WireGuard и т.п.).
LAA допускаются и входят в отпечаток. Примечание о рисках: LAA может задаваться ОС и не совпасть при переустановке между ОС; для близнецов с одинаковыми cpu/mb именно MAC обеспечивает уникальность (раздел 8).
4 Формула и форматы вывода
4.1 Каноническая строка
raw = cpu | mb | ram | gpu | mac
cpu— значение по п. 3.1 (,-join при списке);mb— значение по п. 3.2;ram— значение по п. 3.3 (десятичные MiB);gpu— значение по п. 3.4 (,-join);mac— значение по п. 3.5 (,-join);- разделитель полей —
|. Пустые поля не допускаются.
4.2 Полная форма — UUID4 (RFC 4122, big-endian)
HWID — UUID4 (RFC 4122, big-endian), lowercase. SHA256(raw) применяется только как промежуточный источник байтов: берутся первые 16 байт SHA256(raw), устанавливаются биты версии 4 (b[6] = (b[6] & 0x0F) | 0x40) и вариант RFC 4122 (b[8] = (b[8] & 0x3F) | 0x80). Вывод — без перестановок байт (big-endian):
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Пример:
raw: BFEBFBFF000106A2|SN1234567890|8192|8086:0102|aa:bb:cc:dd:ee:ff
HWID: a48e1044-e289-4091-9691-55a57a3fad64
4.3 Короткая форма — short
Первые 8 hex-символов полной формы (UUID4), нижний регистр. Совпадает с первыми 8 hex-символами SHA256(raw).
Пример: a48e1044
5 Отчёт сборщика HWID-REPORT v1
Текстовый, построчный, UTF-8:
HWID-REPORT v1
NAME=<имя машины>
CPU=<ProcessorId[,ProcessorId...]>
MB=<серийник платы или oem>
RAM=<ёмкость модулей, MiB>
GPU=<ven:dev[,ven:dev...]>
MAC=<aa:bb:cc:dd:ee:ff[,...]>
Требования к сборщику:
- выдать все шесть полей; отсутствие любого поля делает отчёт недействительным;
- применить нормализацию по разделу 3 до записи в отчёт;
- для одной машины сборщик на любой ОС обязан выдать идентичные значения полей;
- интерпретация отчёта не должна зависеть от порядка полей (построчный парсинг
KEY=value).
6 Соответствие легаси-источников
| Поле | DxDiag | Минимальный отчёт сборщика |
|---|---|---|
cpu | — (отсутствует) | CPU(...) — уже канон (п. 3.1) |
mb | — (отсутствует) | МП(...) — уже канон; мусор → oem (п. 3.2) |
ram | строка Memory: NNNNMB RAM | — (отсутствует) |
gpu | Device Key секции Display Devices: VEN_xxxx&DEV_xxxx; исключить ROOT\BASIC* | — (отсутствует) |
mac | — (отсутствует) | MAC(...) — lowercase, ,-join, сортировка |
Примечание. HWID, вычисленный из легаси-отчётов, совпадает с HWID по отчёту HWID-REPORT только при соблюдении канонических определений раздела 3.
7 Приложение. Получение полей
7.1 Windows (PowerShell)
# cpu
(Get-WmiObject Win32_Processor).ProcessorId
# mb
(Get-WmiObject Win32_BaseBoard).SerialNumber
# ram (MiB)
(Get-WmiObject Win32_PhysicalMemory | Measure-Object Capacity -Sum).Sum
# gpu (ven:dev)
(Get-WmiObject Win32_VideoController).PNPDeviceID
# mac (физические)
Get-WmiObject Win32_NetworkAdapter |
Where-Object { $_.PNPDeviceID -like 'PCI\*' } |
Select-Object -ExpandProperty MACAddress7.2 Linux
# cpu: инструкция CPUID (leaf 1) через helper; сверка EAX по /proc/cpuinfo:
# processor family / model / stepping -> EAX
grep -E "vendor_id|cpu family|model|stepping" /proc/cpuinfo
# mb
dmidecode -s baseboard-serial-number
# ram (MiB): сумма Size занятых слотов (dmidecode -t memory)
# gpu (ven:dev)
lspci -nn | grep -E "VGA|3D"
# mac (физические): /sys/class/net/<if>/address при наличии .../<if>/device7.3 Пример отчёта HWID-REPORT
HWID-REPORT v1
NAME=PC-001
CPU=BFEBFBFF000106A2
MB=SN1234567890
RAM=8192
GPU=8086:0102
MAC=aa:bb:cc:dd:ee:ff
8 Коллизии и близнецы
- Уникальность HWID обеспечивается полем
mac; без него одинаковые комплекты (модель CPU + OEM-плата + объём памяти + встроенная графика) дают коллизии. - Проверка уникальности HWID обязательна при ведении реестра машин; появление двух одинаковых HWID означает либо ошибку сбора, либо неразрешимых близнецов без различимых MAC.
- Физические близнецы с одинаковыми
cpu/mb(одинаковые серийники платы) разводятся MAC-адресами.