Вопрос: Мне нужно придумать уникальный идентификатор для каждого сетевого клиента, например:
- it (ID) должен сохраняться после установки клиентского программного обеспечения на целевом компьютере и должен сохраняться, если программное обеспечение переустанавливается на тот же компьютер и ту же версию ОС,
- не должно меняться, если конфигурация оборудования изменяется в большинстве случаев (кроме смены материнской платы)
- Когда жесткий диск с установленным клиентским программным обеспечением клонируется на другой компьютер с идентичной аппаратной конфигурацией (или, насколько возможно, похожей), клиентское программное обеспечение должно знать об этом изменении.
Немного объяснений и немного предыстории:
Этот вопрос является в основном давним вопросом, который также затрагивает тему защиты программного обеспечения от копирования, так как здесь упоминаются некоторые механизмы, используемые в этой области. В этот момент мне должно быть ясно, что я не ищу схему защиты от копирования. Пожалуйста, продолжайте читать. :)
Я работаю над клиент-серверным программным обеспечением, которое должно работать в локальной сети. Одна из проблем, которую мне нужно решить, - это идентификация каждого уникального клиента в сети (не такая уж большая проблема), чтобы я мог применять определенные атрибуты к каждому конкретному клиенту, сохранять и применять эти атрибуты в течение времени жизни конкретного развертывания. клиент.
Пока я искал решение, я знал следующее:
- Система активации Windows использует какой-то механизм «тяжелой дактилоскопии», который чрезвычайно чувствителен к аппаратным модификациям,
- Программное обеспечение для создания образов дисков копирует все идентификаторы томов (привязанные к каждому разделу при форматировании) и настраиваемые уникальные идентификаторы во время процесса установки, во время первого запуска или любым другим способом, который носит исключительно программный характер и сохраняется. в реестре или на жестком диске, так что очень легко перепутать два.
Очевидным выбором для такого рода проблем было бы выяснение идентификаторов BIOS (хотя не на 100% уверен, что он уникален для идентичных моделей материнских плат), так как это единственное, на что я могу положиться, что он не дублируется, передается путем клонирования, и это не может быть изменено (по крайней мере, с помощью некоторой программы пользовательского пространства). Все остальное терпит неудачу из-за того, что оно либо ненадежно (клонирование MAC-адреса, кто-нибудь?), Либо слишком требовательно (с точки зрения того, что оно слишком чувствительно к изменениям конфигурации).
Подвопрос, который я хотел бы задать: правильно ли я делаю, с точки зрения архитектуры? Возможно, есть лучший инструмент для решения этой задачи ...
Другой подход, который я имел в виду, - это что-то похожее на механизм рукопожатия, когда сервер поддерживает внутреннюю таблицу поиска идентификаторов подключенных клиентов (которая может быть даже полностью программной и неуникальной в любой момент времени) и сообщает клиенту нужно придумать другой идентификатор во время рукопожатия, если при подключении предоставляется повторный идентификатор. К сожалению, такой подход не совсем соответствует одному из требований для привязки атрибутов к конкретному клиенту при жизни.