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)?
InformationsquelleAutor mr.b | 2010-05-15