it-swarm.com.de

Zuverlässige Art, eindeutige Hardware-ID zu generieren

Frage: Ich muss für jeden vernetzten Client eine eindeutige ID angeben, z.

  • die ID (ID) sollte bestehen bleiben, sobald die Client-Software auf dem Zielcomputer installiert ist. Sie sollte auch dann bestehen bleiben, wenn die Software auf demselben Computer und derselben Betriebssysteminstallation erneut installiert wird.
  • es sollte sich nicht ändern, wenn die Hardwarekonfiguration in den meisten Fällen geändert wird (außer dem Ändern des Motherboards)
  • Wenn die Festplatte mit installierter Client-Software auf einen anderen Computer mit identischer Hardwarekonfiguration geklont wird (oder möglichst ähnlich), sollte die Client-Software diese Änderung berücksichtigen.

Eine kleine Erklärung und etwas Hintergrundgeschichte:

Diese Frage ist im Grunde eine uralte Frage, die auch das Thema Software-Kopierschutz berührt, da einige der in diesem Bereich verwendeten Mechanismen hier erwähnt werden. Ich sollte an dieser Stelle klar sein, dass ich nicht nach einem Kopierschutzschema suche. Bitte lesen Sie weiter. :) 

Ich arbeite an einer Client-Server-Software, die in einem lokalen Netzwerk arbeiten soll. Eines der Probleme, die ich lösen muss, ist das Identifizieren jedes einzelnen Clients im Netzwerk (weniger ein Problem), sodass ich bestimmte Attribute auf jeden bestimmten Client anwenden und diese Attribute während der Implementierungsdauer eines bestimmten Objekts beibehalten und durchsetzen kann Klient.

Während ich nach einer Lösung suchte, wusste ich Folgendes:

  • Das Windows-Aktivierungssystem verwendet einen starken Fingerabdruckmechanismus, der äußerst empfindlich auf Hardwaremodifikationen reagiert.
  • Die Disk-Imaging-Software kopiert alle Volume-IDs (bei jeder Formatierung an jede Partition gebunden) sowie benutzerdefinierte, eindeutig generierte IDs während des Installationsvorgangs, während des ersten Durchlaufs oder auf andere Weise, dh ausschließlich von Software, und ist in der Registrierung oder im Verzeichnis gespeichert auf der Festplatte, so ist es sehr leicht, zwei zu verwechseln.

Die offensichtliche Wahl für diese Art von Problem wäre das Ermitteln von BIOS-Bezeichnern (nicht zu 100% sicher, ob dies durch identische Motherboard-Modelle eindeutig ist), da dies die einzige Sache ist, auf die ich mich verlassen kann und die nicht durch Kopieren kopiert wird , und das kann nicht geändert werden (zumindest nicht mit einem User-Space-Programm). Alles andere schlägt fehl, weil es entweder nicht zuverlässig ist (MAC-Klonen, jeder?) Oder zu anspruchsvoll ist (da es zu empfindlich auf Konfigurationsänderungen ist).

Eine Unterfrage, die ich gerne stellen möchte, ist, mache ich das richtig, architektonisch? Vielleicht gibt es ein besseres Werkzeug für die Aufgabe, die ich erledigen muss ...

Eine andere Herangehensweise, die ich mir vorstellte, ist etwas Ähnliches wie ein Handshake-Mechanismus, bei dem ein Server eine interne Nachschlagetabelle mit verbundenen Client-IDs verwaltet (die sogar vollständig softwarebasiert und zu keinem Zeitpunkt eindeutig sein kann) und den Client dazu auffordert Sie erhalten beim Handshake eine andere ID, wenn bei der Verbindung eine doppelte ID bereitgestellt wird. Dieser Ansatz passt leider nicht gut zu einer der Anforderungen, um Attribute während der gesamten Lebensdauer an bestimmte Kunden zu binden.

25
mr.b

Es scheint mir, dass Sie die eindeutige ID entsprechend Ihren Anforderungen erstellen sollten. Diese ID kann als Hash (wie MD5, SHA1 oder SHA512) aus den Informationen aufgebaut werden, die für Sie wichtig sind (einige Informationen zu Software- und Hardwarekomponenten).

Sie können Ihre Lösung sicherer machen, wenn Sie einen solchen Hash mit Ihrem privaten Schlüssel signieren und Ihre Software während des Startens verifizieren, dass der Schlüssel ( signierter Hashwert ) signiert ist (nur der öffentliche Schlüssel muss zusammen mit Ihrer Software installiert werden). . Man kann eine solche Lösung mit verschiedenen Online-Diensten erweitern, aber Firmenkunden könnten Online-Dienste nicht so schön finden.

7
Oleg

Was Sie suchen, ist das Windows WMI . Sie können die Motherboard-ID (die ist für den gleichen Motherboard-Typ eindeutig ist) oder viele andere Arten von eindeutigen Identifikatoren erhalten und mit einer cleveren Seed-Funktion zum Erzeugen einer UHID aufwarten. Wen habe ich mir gerade ein Akronym ausgedacht?

Und wenn Sie gezielt nach der Motherboard (BIOS) ID suchen:

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

Dokumentation: http://msdn.Microsoft.com/de-de/library/aa394077(VS.85).aspx
Beispielcode: http://msdn.Microsoft.com/de-de/library/aa390423%28VS.85%29.aspx

Edit : Sie haben keine Sprache angegeben (und ich habe C++ angenommen), aber dies kann in Java (mit einem COM-Treiber) und in einer beliebigen .NET-Sprache erfolgen.

7
David Titarenco

Viele Programme verwenden die hostId, um einen Lizenzcode zu erstellen (z. B. solche, die auf FlexLM basieren). Schauen Sie sich an, was Matlab abhängig vom Betriebssystem macht:

http://www.mathworks.com/support/solutions/de/data/1-171PI/index.html

Schauen Sie sich auch diese Frage an:

Eine eindeutige ID von einem Unix-ähnlichen System erhalten

Sobald ich auch einige Programme gesehen habe, deren Lizenzen auf der Seriennummer der Festplatte basieren, ändert sich dies möglicherweise weniger. Einige würden vorschlagen, den MAC Ihrer Ethernet-Karte zu verwenden, aber das kann neu programmiert werden.

4
SystematicFrank

Verlassen Sie sich nicht auf MAC und Volumen ID! 

Die Verbindung zu einem Validierungsserver kann zu zahlreichen Problemen führen, weil:
* Ihre Kunden sind möglicherweise nicht immer mit dem Internet verbunden.
* Ihre Kunden können sich mit speziellen Einstellungen (Router/NAT/Proxy/Gateway) verbinden, die sie in Ihr Programm eingeben müssen, damit sie eine Verbindung zum Validierungsserver herstellen können.
* Sie befinden sich möglicherweise hinter einer Firewall, die alle Programme außer einigen (meinem Fall) blockiert. In einigen Fällen steht die Firewall möglicherweise nicht unter ihrer Kontrolle (gültig für MOST-Unternehmensbenutzer)! 

Wenn Sie einen starken Schutz benötigen, müssen Sie sich auf die Hardware-ID verlassen.

Hier ist eine Bibliothek, die genau das bietet, was Sie möchten: eine zuverlässige Methode zum Lesen der Hardware-ID eines Computers. Es kann unter anderem die CPU-ID und die HDD-ID lesen, die beide eindeutig sind und sich niemals ändern werden (Ja, auch nicht nachdem Sie den Computer formatiert und Windows neu installiert haben).

Es gibt eine kompilierte Demo-App, die zeigt, dass die IDs eindeutig und dauerhaft sind: http://www.soft.tahionic.com/download-hdd_id/index.html

Es gibt auch einen Demo-Quellcode für viele Programmiersprachen: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

Die Verwendung der Bibliothek ist so einfach wie das Aufrufen einer einzelnen Funktion (nachdem Sie DLL natürlich in den Speicher geladen haben).

0
Rigel