СТАНДАРТ ВС 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
WindowsWin32_Processor.ProcessorId
Linux/прочееИнструкция CPUID (leaf 1), напрямую или через helper; для сверки EAX — семейство/модель/степпинг из /proc/cpuinfo
НормализацияНесколько значений (многопроцессорность) — отсортированный список через ,; каждое значение — 8 hex-цифр в верхнем регистре, без пробелов

Примечание. Отпечаток модельного уровня: одинаков у одинаковых моделей CPU. Уникальность HWID обеспечивают поля mb и mac.

3.2 mb — серийный номер базовой платы (SMBIOS)

СвойствоЗначение
ОпределениеЗначение Baseboard.SerialNumber из таблиц SMBIOS/DMI
WindowsWin32_BaseBoard.SerialNumber (без fallback на Product)
Linuxdmidecode -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
Linuxdmidecode -t memory — сумма Size занятых слотов
НормализацияЦелое число MiB, десятичная запись

Запрещено использовать «видимую» ОС память (Windows Available / Linux MemTotal) — значения на одной машине различаются между ОС.

Соответствие легаси: строка Memory: NNNNMB RAM в DxDiag является установленной ёмкостью и допускается как источник.

3.4 gpu — видеоконтроллеры по PCI-идентификаторам

СвойствоЗначение
ОпределениеДля каждого физического видеоконтроллера — ven:dev (vendor:device из PCI-конфигурации)
WindowsWin32_VideoController.PNPDeviceID (шаблон PCI\VEN_xxxx&DEV_xxxx)
Linuxlspci -nn — класс VGA/3D (03xx)
DxDiagDevice 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) сетевых адаптеров
WindowsWin32_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— (отсутствует)
gpuDevice 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 MACAddress

7.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>/device

7.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-адресами.