Надежный способ генерации уникального идентификатора оборудования

StackOverflow https://stackoverflow.com/questions/2842116

Вопрос

Вопрос: Мне нужно придумать уникальный идентификатор для каждого сетевого клиента, например:

  • он (идентификатор) должен сохраняться после установки клиентского программного обеспечения на целевом компьютере и должен продолжать сохраняться, если программное обеспечение переустанавливается на тот же компьютер и с той же установкой ОС,
  • он не должен меняться, если конфигурация оборудования изменена большинством способов (кроме замены материнской платы)
  • Когда жесткий диск с установленным клиентским программным обеспечением клонируется на другой компьютер с идентичной аппаратной конфигурацией (или максимально похожей), клиентское программное обеспечение должно учитывать это изменение.

Немного пояснений и немного предыстории:

Этот вопрос, по сути, старый вопрос, который также затрагивает тему защиты программного обеспечения от копирования, поскольку здесь упоминаются некоторые механизмы, используемые в этой области.Здесь мне следует прояснить, что я не ищу схему защиты от копирования.Пожалуйста, читайте дальше.:)

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

Пока я искал решение, я знал следующее:

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

Очевидным выбором для решения такого рода проблем было бы выяснение идентификаторов BIOS (хотя я не уверен на 100%, что они уникальны для идентичных моделей материнских плат), поскольку это единственное, на что я могу положиться, что не дублируется, а передается путем клонирования. , и это невозможно изменить (по крайней мере, с помощью какой-либо пользовательской программы).Все остальное терпит неудачу, поскольку либо ненадежно (клонирование MAC, кто-нибудь?), либо слишком требовательно (слишком чувствительно к изменениям конфигурации).

Подвопрос, который я хотел бы задать: правильно ли я это делаю с точки зрения архитектуры?Возможно, есть лучший инструмент для задачи, которую мне нужно выполнить...

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

Это было полезно?

Решение

Мне кажется, вам следует построить уникальный идентификатор, соответствующий вашим требованиям.Этот идентификатор может быть построен как хэш (например, MD5, SHA1 или SHA512) из ​​важной для вас информации (некоторая информация о программном и аппаратном компоненте).

Вы можете сделать свое решение более безопасным, если подпишете такой хэш своим закрытым ключом, а ваше программное обеспечение при запуске проверит, что ключ (подписанное хеш-значение) подписан (вместе с вашим программным обеспечением должен быть установлен только открытый ключ).Такое решение можно расширить различными онлайн-сервисами, но корпоративным клиентам онлайн-сервисы могут показаться не такими уж приятными.

Другие советы

Что вы ищете, это Windows WMI.. Отказ Вы можете получить идентификатор материнской платы (который является Уникальный по всему типу материнской плате) или многих других типов уникальных идентификаторов и придумывает некоторую умную семянную функцию для генерации UHID. Вау я просто составлял аббревиатуру?

И если вы смотрите специально для получения материнской платы (BIOS) ID:

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

Документация: http://msdn.microsoft.com/en-us/library/aaa394077(vs.85).aspx.
Образец кода: http://msdn.microsoft.com/en-us/library/aaa390423%28vs.85%29.aspx.

Редактировать: Вы не указывали язык (и я предполагал C ++), но это можно сделать в Java (с помощью COM-драйвера), а также любой язык .NE.

Многие программы используют HOSTID, чтобы создать код лицензионного кода (например, на основе FLEXLM). Посмотрите, что делает Matlab в зависимости от оперативной системы:

http://www.mathworks.com/support/solutions/en/data/1-171pi/index.html.

Также взглянуть на этот вопрос:

Получение уникального идентификатора от Unix-подобной системе

Как только я также увидел некоторые программы, основывающие свои лицензии на серийный номер жесткого диска, может быть, это менее вероятно, что можно изменить. Некоторые предполагают использовать Mac вашей карты Ethernet, но это можно перепрограммировать.

Mac
Не полагайтесь на Mac! КОГДА-ЛИБО. Это не постоянно. Пользователь может легко изменить его (до 30 секунд).

Идентификатор объема
Не полагайтесь на ID объема! КОГДА-ЛИБО. Это не постоянно. Пользователь может легко изменить его. Это также меняется просто форматирование привода.

WMI.
WMI - это услуга. Можно легко отключить. На самом деле, я попробовал это, и я узнаю, что на многих компьютерах отключено или сломано (да, довольно часто сломано).

Лицензионный сервер
Подключение к серверу проверки может привести к тому, что вы также много неприятностей, потому что:
* Ваши клиенты не всегда могут быть подключены к Интернету.
* Ваши клиенты могут подключаться со специальными настройками (маршрутизатор / NAT / Proxy / Gateway), что им нужно вводить в вашу программу, чтобы позволить ему подключиться к серверу проверки.
* Они могут быть за брандмауэром, который заблокирует все программы, кроме нескольких (моего случая). В некоторых случаях брандмауэр может не быть под их контролем (действителен для большинства корпоративных пользователей)!
* это супер легко Чтобы перенаправить свою программу на локальный фальшивый веб-сервер, который эмулирует ваш лицензионный сервер.

Аппаратные данные
Если вам нужна сильная защита, вам нужно полагаться на оборудовании. То, что не может быть отредактировано пользователем. Нечто вроде инструкция по назначению CPU, доступна в процессоре Intel / AMD и серийный номер, записанный в интерфейс IDE привода.
ID CPU и HDD ID постоянны. Они никогда не изменится, даже после того, как вы отформатируете компьютер и переустановите Windows.

Это выполнимо. Например Эта библиотека Читает аппаратный идентификатор компьютера. Есть скомпилированная демо, а также Sourcecode /Потрясающий. Отказ Отказ от ответственности: ссылка приводит к коммерческому продукту (19 € / нет роялти).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top