Уникальный идентификатор устройства хранения данных

Уникальный идентификатор устройства хранения данных

Я сталкивался с системами лицензирования, которые каким-то образом привязаны к носителю данных. Хотя основывать это на UUID файловой системы довольно просто, я не думаю, что это так (см. ниже). Типичный пример такого поведения выглядит следующим образом:

  1. При каждой загрузке генерируется id-файл.
  2. Система проверит файл-ключ на наличие лицензии. Если ключ совпадает с идентификатором, то все хорошо.
  3. Если ключа нет или он не соответствует идентификатору (например, скопирован из другой системы), лицензия недействительна.

Я наблюдал следующее поведение:

  • Полное стирание данных с CF-карты и ее повторная установка приводит к созданию того же файла идентификатора, поэтому новый файл ключа не требуется.
  • Использование того же ключа на другом CF не сработает, так как он не соответствует содержимому нового файла идентификатора.

Это приводит меня к выводу, что есть способ как-то получить уникальный идентификатор карты CF. Как этого можно добиться в Linux?


P.S.:Я намеренно не стал раскрывать подробности о самом продукте, поскольку мне интересно, как такая система может создать уникальный идентификатор карты CF.

решение1

На карте будет записан большой объем информации, доступной только для чтения.

СтатьяЧтение информации с внутренней SD-картыесть что сказать:

Информация о внутренней SD-карте

Информация о SD-карте закодирована во внутренних регистрах карты. Один из них —Идентификация карты (CID)Регистр, 16-байтовый код, содержащий информацию, которая однозначно идентифицирует SD-карту, включая серийный номер карты (PSN), идентификационный номер производителя (MID) и дату изготовления (MDT). Регистр CID устанавливается при изготовлении карты и не может быть изменен после установки. (Согласно спецификации SD-карты, информация должна быть записана только один раз, однако, если карта не соответствует спецификации, эта информация может быть изменена!)

Как считать CID с SD-карты

Один из способов прочитать CID — использовать ноутбук со слотом для SD-карты. Кардридеры в ноутбуках обычно подключаются напрямую через шину PCI (или шину IDE). Это не будет работать через USB-кардридер, поскольку команда на получение информации о карте перехватывается и не понимается кардридерами. Не все компьютеры со встроенными слотами для карт будут работать, некоторые внутренние кардридеры подключаются через шину USB.

Если у вас есть подходящее оборудование, есть несколько методов, которые вы можете использовать для получения информации о карте. С Linux чтение внутренней информации SD-карты просто. Вставьте карту и посмотрите под ней /sys/block/mmcblk0/device/(это расположение может меняться в зависимости от вашего устройства). Вы увидите несколько доступных атрибутов, которые включают регистр CID и информацию внутри него.

решение2

Как уже отмечали другие, это может быть связано со способом очистки карты CF, но более вероятно, что программное обеспечение идентифицирует карту CF на основе ее прошивки.

Эту информацию обычно можно прочитать с помощью «udevinfo» — например, если карта CF — /dev/sdb udevinfo -a -p $(udevinfo -q path -n /dev/sdb) — скорее всего, она будет содержать достаточно информации для уникальной идентификации карты.

Примечание: в дистрибутивах на базе Debian udevadm infoзаменяет udevinfo:

udevadm info -a -p $( udevadm info -q path -n /dev/sdb )

Связанный контент