Fiable façon de générer un IDENTIFIANT matériel unique
Question: je dois venir avec ID unique pour chaque client en réseau, tels que:
- il (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 devrait pas changer si la configuration matérielle est modifié dans la plupart des cas (à l'exception de la modification de la carte mère)
- Lorsque le disque dur avec un logiciel client installé est cloné à un autre ordinateur avec la même configuration matérielle (ou, aussi semblable 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 logiciel de protection contre la copie, comme certains des mécanismes utilisés dans ce domaine sont mentionnés ici. Je dois être clair à ce moment que je ne suis pas à la recherche d'une protection contre la copie régime. S'il vous plaît, lisez la suite. 🙂
Je suis en train de travailler sur un client-serveur logiciel qui est censé fonctionner dans un réseau local. L'un des problèmes que j'ai à résoudre est d'identifier chaque client unique dans le réseau (pas tellement un problème), de sorte que je peux appliquer certains attributs spécifiques à chaque client, de fidéliser et de faire appliquer ces attributs lors du déploiement durée de vie d'un client spécifique.
Alors que je cherchais une solution, j'ai été conscient de ce qui suit:
- D'activation de Windows, le système utilise une certaine sorte de forte empreinte mécanisme qui est extrêmement sensible à des modifications du matériel,
- Logiciel d'imagerie de disque copies le long de tout le Volume de l'IDs (lié à chaque partition formaté), et personnalisée, unique Id générés pendant le processus d'installation, lors de la première exécution, ou par tout autre moyen, c'est strictement le logiciel dans sa nature, et stockées dans la base de registre ou sur disque dur, il est donc très facile de confondre les deux.
Le choix évident pour ce genre de problème serait de savoir BIOS identificateurs (pas sûr à 100% si ce qui est unique à travers l'identique des modèles de carte mère, tout de même), que c'est la seule chose que je peux compter sur qui ne sont pas dupliquées, transférés par le clonage, et qui ne peut pas être changé (du moins pas en utilisant une partie de l'espace utilisateur du programme). Tout le reste échoue, soit comme n'étant pas fiable (clonage de l'adresse MAC, quelqu'un?), ou trop exigeant (dans les conditions qu'il est trop sensible à des modifications de configuration).
Sous-question que je voudrais poser est: suis-je la faire correctement, architecture-sage? 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 semblable à un mécanisme de poignée de main, où un serveur maintient interne d'une table de recherche de client connecté Id (qui peut même être complètement basé sur le logiciel et non unique à un moment donné), et indique au client de venir avec un ID différent au cours de la poignée de main, si un ID en double est fourni au moment de la connexion. Cette approche, malheureusement, ne joue pas bien avec l'une des exigences pour attacher des attributs spécifiques du client pendant la durée de vie.
- Salut monsieur.b un problème intéressant, j'ai fait quelques recherches car il m'intrigue. Mais quelque chose s'est produite pour moi, de regarder les choses d'un angle différent vous êtes à la recherche au moyen de l'identification univoque d'un utilisateur après la connexion à un serveur? S'il peut être au niveau de l'utilisateur, contrairement à une machine de niveau - pouvez-vous générer l'ID vous-même côté serveur et sur la machine? Similaire à la façon dont un id de session conserve la trace des utilisateurs au sein d'une application web et stocke un cookie (mais persister plus longtemps)?
Vous devez vous connecter pour publier un commentaire.
Il me semble que vous devez construire l'IDENTIFIANT unique correspondant à vos exigences. Cet ID peut être construit comme un de hachage (comme MD5, SHA1 ou SHA512) à partir de l'information qui est important pour vous (un peu d'informations sur les logiciels et le matériel composant).
Vous pouvez faire de votre solution la plus sûre si vous signer ce genre de hachage avec votre clé privée et de vos logiciels de vérifier, pendant le démarrage, que la clé (signé valeur de hachage) est signé (seule la clé publique doit être installé avec le logiciel). On peut étendre ce type de solution avec les différents services en ligne, mais les clients peuvent trouver les services en ligne n'est pas très joli.
Ce que vous cherchez est la Windows WMI. Vous pouvez obtenir la carte mère IDENTIFIANT (qui est unique à travers le même type de carte mère) ou de nombreux de nombreux autres types d'identificateurs uniques et de venir avec quelques intelligent graines de fonction pour générer un UHID. Waouh ce que je viens de faire un acronyme?
Et si vous êtes à la recherche spécifiquement pour l'obtention de la carte Mère (BIOS) ID:
Documentation: http://msdn.microsoft.com/en-us/library/aa394077(SV.85).aspx
Exemple de code: http://msdn.microsoft.com/en-us/library/aa390423%28VS.85%29.aspx
Modifier: Vous n'avez pas de spécifier une langue (et j'ai supposé que C++), mais cela peut être fait en Java (avec un pilote COM), et tout .NET de la langue, en tant que bien.
Beaucoup de programmes utilisent le hostId afin de construire un code de licence (tels que ceux basés sur FlexLM). Jetez un oeil à ce que Matlab ne en fonction sur le système opératif:
http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html
Également jeter un oeil à cette question:
L'obtention d'un id unique à partir d'un système unix
Une fois que j'ai vu aussi quelques programmes de baser leurs licences sur le numéro de série du disque dur, un peut-être qui est le moins susceptible chose à changer. Certains suggèrent d'utiliser le MAC de la carte ethernet, mais qui peut être reprogrammé.
MAC
NE COMPTEZ PAS SUR MAC! JAMAIS. Il n'est pas permanent. L'utilisateur peut facilement modifier (en moins de 30 secondes).
ID de Volume
NE COMPTEZ PAS SUR le Volume de la pièce d'identité! JAMAIS. Il n'est pas permanent. L'utilisateur peut facilement changer. Par ailleurs, il modifie simplement le formatage du disque.
WMI
WMI est un service. Peut être facilement désactivé. En fait, j'ai essayé et je trouve que sur de nombreux ordinateurs est désactivé ou cassé (oui, assez souvent cassé).
Serveur de licence
Connexion à un serveur de validation peut vous causer beaucoup d'ennuis à cause de:
* vos clients ne peuvent pas toujours être connecté à Internet.
* vos clients peuvent se connecter avec des paramètres spéciaux (routeur/NAT/proxy/gateway) dont ils ont besoin pour entrer dans votre programme pour qu'il puisse se connecter au serveur de validation.
* ils peuvent être derrière un pare-feu qui bloque tous les programmes à l'exception de quelques-uns (mon cas). Dans certains cas, le pare-feu ne peut pas être sous leur contrôle (valable pour la PLUPART des utilisateurs de l'entreprise)!
* il est super facile pour rediriger votre programme à un faux serveur web qui émule votre serveur de licences.
Matérielle de données
Si vous avez besoin d'une forte protection dont vous avez besoin de s'appuyer sur le matériel. Quelque chose qui ne peut pas être modifié par l'utilisateur. Quelque chose comme le CPU ID instruction disponible dans le processeur Intel/AMD Cpu et le numéro de série dans le lecteur de l'interface IDE.
Le numéro d'identification du CPU et du disque dur ID sont permanents. Ils ne changeront jamais, pas même après avoir formater l'ordinateur et réinstaller Windows.
Que c'est faisable. Par exemple cette bibliothèque lit l'ID de matériel d'un ordinateur. Il est compilé démo et aussi le code source/DLL. Avertissement: le lien mène à un produit commercial (19€/pas de royalties).