Moyen fiable de générer un identifiant matériel unique

Question: je dois trouver un ID unique pour chaque client en réseau, tel que:

  • (ID) qui devrait se poursuivre une fois le logiciel client est installé sur l'ordinateur cible, et devrait continuer à persister si le logiciel est ré-installé sur le même ordinateur et le même OS opus,
  • il ne doit pas changer si la configuration matérielle est modifiée de la plupart des façons (sauf changer la carte mère)
  • Lorsque le disque dur avec le logiciel client installé est cloné à un autre ordinateur avec la configuration matérielle identique (ou, aussi similaire que possible), le logiciel client doit être conscient de ce changement.

Un peu d'explication et un histoire:

cette question est fondamentalement vieille question qui touche également le sujet de la protection de copie de logiciel, comme certains des mécanismes utilisés dans ce domaine sont mentionnés ici. Je tiens à préciser que je ne cherche pas un système de protection contre la copie. S'il vous plaît, lisez la suite. :)

je travaille sur un logiciel client-serveur qui est censé fonctionner dans un réseau local. Un des problèmes que je dois résoudre est d'identifier chaque client unique dans le réseau (pas tellement un problème), de sorte que je puisse appliquer certains attributs à chaque client spécifique, conserver et renforcer ces attributs pendant la durée de déploiement d'un client spécifique.

alors que je cherchais une solution, je savais ce qui suit:

  • le système D'activation de Windows utilise une sorte de mécanisme de prise d'empreintes qui est extrêmement sensible aux modifications du matériel,
  • logiciel d'imagerie de disque copies le long de tous les IDS de Volume (liés à chaque partition une fois formatée), et personnalisé, IDs unique généré au cours du processus d'installation, au cours de la première course, ou de toute autre manière, qui est strictement logiciel dans sa nature, et stocké dans le registre ou sur disque dur, il est donc très facile de confondre deux.

le choix évident pour ce genre de problème serait de trouver des identificateurs BIOS (pas sûr à 100% Si c'est unique à travers des modèles de carte mère identiques, cependant), car c'est la seule chose sur laquelle je peux compter qui n'est pas dupliqué, transféré par clonage, et qui ne peut pas être changé (du moins pas en utilisant un programme d'espace utilisateur). Tout le reste échoue soit qu'on ne soit pas fiable (Clonage MAC, quelqu'un?), ou trop exigeant (en termes de sensibilité aux changements de configuration).

la Sous-question que j'aimerais poser est, Est-ce que je le fais correctement, du point de vue de l'architecture? Il est peut-être un meilleur outil pour la tâche que je dois accomplir...

une autre approche que j'avais à l'esprit est quelque chose de similaire à un mécanisme de poignée de main, où un serveur maintient une table de recherche interne d'IDs client connectés (qui peut être même complètement basé sur le logiciel et non unique à tout moment), et dit au client de venir avec un ID différent pendant la poignée de main, si un ID dupliqué est fourni lors de la connexion. Cette approche, malheureusement, ne fonctionne pas bien avec l'une des exigences de lier les attributs à un client spécifique au cours de la vie.

23
demandé sur cxxl 2010-05-16 03:44:40

4 réponses

il me semble que vous devriez construire L'ID unique correspondant à vos besoins. Cet ID peut être construit comme un hachage (comme MD5, SHA1 ou SHA512) à partir des informations qui sont importantes pour vous (certaines informations sur les composants logiciels et matériels).

vous pouvez rendre votre solution plus sûre si vous signez un tel hachage avec votre clé privée et votre logiciel vérifient au début, que la clé ( hachage signé la valeur ) est signée (seule la clé publique doit être installée avec votre logiciel). On peut étendre ce genre de solution avec différents services en ligne, mais les clients d'entreprise pourraient trouver des services en ligne pas si agréable.

7
répondu Oleg 2018-03-09 09:16:44

ce que vous recherchez est le Windows WMI . Vous pouvez obtenir L'ID de carte mère (qui est unique à travers le même type de carte mère) ou de nombreux autres types d'identificateurs uniques et de venir avec une certaine fonction intelligente semée pour générer un UHID. Waouh ce que je viens de faire un acronyme?

et si vous recherchez spécifiquement pour obtenir la carte mère (BIOS) ID:

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

Document: http://msdn.microsoft.com/en-us/library/aa394077 (VS.85).aspx

Exemple de code: http://msdn.microsoft.com/en-us/library/aa390423%28VS.85%29.aspx

Edit : vous n'avez pas spécifié de langue (et j'ai supposé C++), mais cela peut être fait en Java (avec un pilote COM), et n'importe quel langage .NET, aussi.

7
répondu David Titarenco 2010-05-16 00:00:22

de nombreux programmes utilisent le hostId pour construire un code de licence (comme ceux basés sur FlexLM). Regardez ce que Matlab fait en fonction du système opérationnel:

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

aussi jeter un oeil à cette question:

obtention d'une identification unique à partir d'un système de type unix

une fois j'ai aussi vu certains programmes basant leurs licences sur le numéro de série du disque dur, ce qui est peut-être la chose la moins probable à changer. Certains suggéreraient d'utiliser le MAC de votre carte ethernet, mais cela peut être reprogrammé.

4
répondu SystematicFrank 2017-05-23 12:31:52

DON'T RELY ON MAC AND VOLUME ID!!!!!

la connexion à un serveur de validation peut aussi causer beaucoup de problèmes parce que:

* il se peut que vos clients ne soient pas toujours connectés à Internet.

* vos clients peuvent se connecter avec des paramètres spéciaux (routeur/NAT/proxy/passerelle) qu'ils doivent entrer dans votre programme afin de le laisser se connecter au serveur de validation.

* ils peuvent être à l'origine d'une pare-feu qui bloque tous les programmes sauf quelques-uns (mon cas). Dans certains cas, le pare-feu peut ne pas être sous leur contrôle (valable pour la plupart des utilisateurs de l'entreprise)!

si vous avez besoin d'une protection forte, vous devez vous fier à l'identification du matériel.

Voici une bibliothèque qui offre exactement ce que vous voulez: une façon fiable de lire L'ID matériel d'un ordinateur. Entre autres, il peut lire le CPU ID et le HDD ID qui sont à la fois unique et ne changera jamais (oui, pas même après vous formatez L'ordinateur et réinstallez Windows).

il existe une application de démonstration compilée qui démontre que les IDs sont uniques et permanents: http://www.soft.tahionic.com/download-hdd_id/index.html

il y a aussi du code source de démo pour de nombreux langages de programmation: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

l'usage de la Bibliothèque est un simple appel à une seule fonction (après avoir chargé la DLL en mémoire, bien sûr).

1
répondu Everybody_hates_BillTheLizard 2017-01-04 23:55:10