web-dev-qa-db-fra.com

Quel est le bon moyen d'identifier de manière unique un ordinateur?

Je développe un logiciel de bureau pour un client à revendre. Le client souhaite restreindre le logiciel afin que le code d'enregistrement soit spécifique à un et un seul ordinateur.

Outre l'utilisation du MAC depuis la carte réseau, existe-t-il d'autres techniques (qui fonctionnent à la fois sous Windows et Mac OS X) pour identifier de manière unique un ordinateur?

49
Paul Lefebvre

Une autre solution consiste à utiliser une technologie de licence avec un dongle. Il s'agit d'un petit périphérique qui se connecte à l'USB ou à un autre port d'E/S sur l'hôte et sert de clé physique unique pour activer le logiciel.

Une troisième solution consiste à fournir un license manager. En d’autres termes, lors du démarrage du logiciel, il interroge un serveur du réseau (que ce soit sur le réseau local du client ou auquel vous accédez via votre entreprise via Internet) qui confirme que l’utilisation du logiciel par le client est légitime. C'est une bonne solution pour les "licences simultanées". Les clients peuvent donc installer votre logiciel sur de nombreux hôtes, mais vous le concéderez sous licence pour une utilisation simultanée sur un nombre limité d'hôtes. FLEXnet Publisher est un exemple de solution de gestion de licences.

L'adresse MAC de la carte réseau est la solution que j'ai utilisée la dernière fois que je travaillais pour une société qui concédait sous licence un logiciel sur un hôte spécifique.

Toutefois, je tiens à faire une mise en garde: si vous utilisez ce type de licence, vous devez anticiper que cela deviendra une corvée administrative en cours permettant de suivre les licences de vos clients. Une fois que vous avez quelques centaines de clients, vous serez étonné de la fréquence à laquelle vous recevez des appels téléphoniques avec des demandes de changement de clé.

"Nous avons mis à niveau notre serveur avec une carte réseau Gigabit. À présent, la licence Ne fonctionne pas car la nouvelle carte a Une adresse MAC différente."

Sinon, les clients peuvent remplacer l’ensemble de leur machine et ont besoin d’une licence mise à jour pour exécuter votre logiciel sur la nouvelle machine. Nous recevions ces appels pratiquement tous les jours dans l'entreprise pour laquelle je travaillais. 

Vous devez également faire confiance au client pour qu'il cesse d'utiliser votre logiciel sur l'ancien ordinateur (ou la carte réseau) si vous lui attribuez une nouvelle clé. Si vous ne pouviez pas leur faire confiance pour obéir à la licence en premier lieu, comment pouvez-vous croire qu’ils vont jeter l’ancienne clé?

Si vous ne prévoyez pas comment vous allez soutenir cette activité administrative, n'accordez pas de licence à votre produit de cette manière. Vous ne ferez que gêner vos bons clients, qui auraient quand même coopéré.

38
Bill Karwin

Je vais me faire l'avocat du diable et vous dire que quelque chose comme ce n'est probablement pas la meilleure chose à discuter en "public".

Cela dit, regardez ce que d’autres ont pu faire et éventuellement améliorer (ou en prendre une partie). Comme vous l'avez dit, les adresses MAC peuvent éventuellement être utilisées. J'ai entendu dire que Windows et d'autres programmes utilisent les informations du disque dur (numéro de série) - selon ce site , Windows Activation vérifie 10 éléments différents et en fait une clé unique.

9
Nicholas Head

le meilleur moyen de prendre l’UUID avec C # sous Windows

Le meilleur moyen d'identifier de manière unique une machine Windows

public string GetUUID()
{
    var procStartInfo = new ProcessStartInfo("cmd", "/c " + "wmic csproduct get UUID")
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    var proc = new Process() { StartInfo = procStartInfo };
    proc.Start();

    return proc.StandardOutput.ReadToEnd().Replace("UUID", string.Empty).Trim().ToUpper();
}
8

Je voudrais simplement utiliser l'adresse MAC pour générer une clé de demande, puis demander aux utilisateurs de s'inscrire auprès de votre client. Votre client disposera d'une application spéciale qui prendra cette clé de demande et produira une clé d'activation que l'utilisateur pourra ensuite utiliser pour activer le logiciel. Une fois activé, le logiciel fonctionne, ne fonctionne que - ne téléphonant pas occasionnellement à la maison pour vérification et autres.

C'est si c'était une exigence réelle. Ma première tâche serait d'essayer de convaincre le client que c'était une mauvaise idée.

La raison en est que ces schémas empêchent pratiquement jamais d’empêcher votre code d’être fissuré. Cependant, ils rendent la vie de vos véritables clients plus difficile. Je trouve difficile de penser à une autre industrie qui déplairait avec de vrais clients avec des programmes qui n'atteignent jamais leurs objectifs (autre que le service gouvernemental, bien sûr :-).

Si vous devez faire cela, je ferais un effort symbolique pour respecter l'obligation contractuelle (ne le dites cependant pas à votre client). En prenant l'adresse MAC (ou un nombre aléatoire si, $DEITY interdit, l'ordinateur ne possédait pas de carte réseau) comme clé de demande et en utilisant un programme pour simplement XOR avec une chaîne ASCII pour obtenir la clé d'activation, semble être une approche réalisable. Je voudrais également stocker les deux clés car vous ne voulez pas que le logiciel se désactive s'il ne fait que changer de carte réseau (ou même de carte mère) - il le voit toujours comme le même ordinateur et ne sera pas content si le logiciel cesse de fonctionner.

Votre code sera craqué malgré tout (à moins que le programme ne soit complètement nul, ce qui, j'en suis sûr, ne le sera pas) - cette méthode donnera à vos véritables clients un moyen de transférer leur logiciel sur une autre machine si leur entreprise ne répond plus du tout , cesse ses activités, etc.).

Le principal problème avec tous les schémas qui reposent sur l'unicité d'un matériel est que le client peut choisir de le modifier:

  • le fait de modifier le contenu de leur disque sur un disque dur plus grand entraîne le changement de numéro de série HD.
  • utiliser les numéros de série du processeur signifie que la mise à niveau vers le dernier processeur Intel bigmutha tue votre logiciel.
  • l'utilisation de l'adresse MAC signifie qu'ils ne peuvent pas changer de carte réseau.

Ceux-ci peuvent tous être corrigés en utilisant ces valeurs pour créer une clé au moment de l'installation et vérifier uniquement avec cette clé, pas avec la valeur modifiée six mois plus tard. Cela signifie que vous devez stocker les valeurs de demande et d'activation, mais les mises à niveau ne nécessiteront pas que vos utilisateurs suivent le processus de réactivation de leur logiciel. Croyez-moi, ils vous mépriseront pour avoir à faire cela.

4
paxdiablo

L'idée que je suis en train d'utiliser consiste à utiliser quelques numéros de série ou identifiants uniques liés au matériel et à les hacher ensemble.

Éléments mis à niveau: - Mémoire - MAC (peut être usurpé, les adaptateurs USB sont branchés, etc.)

Choses qui ne sont pas souvent mises à jour: - CPU - BIOS - Carte mère

Utiliser WMIC peut être un excellent moyen de saisir certaines informations. Je commencerais par saisir les éléments qui ne changent pas souvent comme premier choix et le choix préféré. J'aimerais pouvoir identifier au moins deux numéros de série ou périphériques à utiliser pour générer une clé d'enregistrement.

wmic cpu get DeviceId /format:value

Cela va récupérer l'ID du processeur, vous pouvez exécuter cette commande pour:

1 - CPU (cpu: DeviceID) 2 - Carte mère (carte mère: numéro de série) 3 - BIOS (bios: numéro de série)

si vous n'obtenez pas au moins 2 valeurs renseignées, saisissez

4 - Carte réseau - (nic: MACAddress) 5 - RAM - (memphysical: SerialNumber)

En fonction de votre logique métier, vous pouvez utiliser les deux premiers numéros de série disponibles pour créer votre numéro d'enregistrement. Si vous suivez toujours le même ordre, le numéro d'enregistrement fonctionnera toujours lors de la réinstallation. Toutefois, si un périphérique change ou si un utilisateur tente de installez sur un ordinateur secondaire la modification de l'id qui invalide le numéro d'enregistrement. Afin de réduire le nombre d'appels au support technique, le moins de matériel informatique utilisé par votre empreinte digitale sera celui qui causera le moins de maux de tête. Si vous essayez par empreinte digitale, les éléments les moins susceptibles d'être mis à niveau réduiront encore les maux de tête. Ma préférence est l'ordre ci-dessus.

Vous pouvez utiliser un schéma d’échange de clé Diffie-Hellman pour que l’utilisateur génère une paire de clés privée/physique avec leur identifiant matériel comme charge utile, puis transmet cette information à un serveur d’enregistrement sur lequel le serveur d’enregistrement utiliserait une clé publique/privée. déchiffrer la charge et calculer la clé d'enregistrement pour la renvoyer à l'utilisateur final. J'aime utiliser JWT pour échanger des informations avec les clés publiques incluses dans la charge utile du JWT. J'espère que cela pourra aider.

UUID a été mentionné ci-dessus et c'est une excellente idée que vous pouvez obtenir en utilisant la commande ci-dessous à partir de votre Windows cmd.exe:

wmic csproduct get UUID /format:value      

Clause de non-responsabilité: cette commande ne fonctionne que sous Windows, à mon avis, à partir de 2000, mais vous devez vérifier. Elles sont peut-être disponibles pour les systèmes inférieurs à 2000, mais à ce stade, j'essaie vraiment de ne pas prendre en charge ces périphériques. Bonne chance.

Sur Mac:

system_profiler | grep "Serial Number (system)"

Sur Linux (debian):

Sudo dmidecode -t system | grep "Serial Number"

dmidecode et system_profiler ont d'autres composants qu'il peut récupérer des numéros de série similaires à wmic dans Windows. Je ne travaille pas sur les macs, je ne peux donc pas confirmer une liste de spécifications exactes, mais créer une liste de LCD (plus petit dénominateur commun). Les numéros de série des pièces auxquelles les trois commandes peuvent accéder sont rassemblés et corrigés. aux parties les moins susceptibles d'être mises à niveau ou modifiées. Ensuite, une combinaison des 2 ou 3 meilleurs nombres hachés peut donner un identifiant d'ordinateur unique un peu plus robuste et permettre à une application multiplateforme d'être activée même sur un appareil dont le système d'exploitation est mis à jour.

3
Harry Chilinguerian

Il n’existe aucun moyen sûr d’identifier un ordinateur de manière unique, si vous supposez qu’un ordinateur est construit avec de nombreuses pièces pouvant être remplacées éventuellement.

Certaines parties matérielles - adresse MAC, numéro de série du disque dur, même série de la carte mère, etc. - sont quelques bonnes sources de "caractère unique", mais comme vous le savez peut-être si un client décide de mettre à niveau la partie dont dépend la licence ... soyez prêt pour un peu de soutien à la clientèle. Il faut également garder à l’esprit que certaines parties peuvent être usurpées (le MAC en est un).

Une vérification de licence en ligne est un autre bon moyen d’aller. Vous pouvez tout gérer côté serveur et même définir vos propres règles (nombre de licences par client/installation, concurrence, etc.), mais le point important à noter est ce qui se passe quand connexion ne peut pas être établie?

3
J.C. Inacio

Ouvrez le registre et accédez à

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

Trouvez la clé appelée «MachineGuid». Cette clé est générée uniquement lors de l’installation de Windows et ne changera pas, qu’elle soit permutée ou non (à part le remplacement du disque dur amorçable sur lequel les systèmes d’exploitation sont installés). Cela signifie que si vous souhaitez conserver le suivi de l'installation par système d'exploitation, c'est une autre alternative. Cela ne changera que si vous effectuez une nouvelle réinstallation de Windows.

2
Telson Alva

Il est possible de créer une clé de série que l'utilisateur doit saisir une fois .. .. Elle doit inclure l'adresse e-mail de l'utilisateur (quelque chose comme [email protected]). Cela empêchera de nombreuses personnes d'essayer de le modifier ou de le donner à d'autres personnes. Lors de l’activation, le logiciel doit vérifier une base de données en ligne si la clé de série existe.

1
tmighty

Il y avait un numéro de série imprimé dans la CPU, autant que je sache; cette information (PSN, numéro de série Pentium) est obsolète. L'information peut toujours exister, mais au moins dans le monde des PPP, elle avait disparu. De plus, je pense que le choix évident de l'adresse MAC sur le NIC pour l'interface principale utilisée pour l'hôte doit être considéré comme une possibilité réelle. Sauf si votre client ne s'attend pas à ce que des interfaces Ethernet soient présentes sur les hôtes auxquels ils vendent.

1
Suroot

J'ai de l'expérience en la matière. Dans ma solution, nous émettons une clé de service lorsque nous vendons le produit au client.

Au moment où le client installe l’application, il génère une clé en lisant le numéro de série de la carte mère de la machine cliente. Le client est censé envoyer la clé de service et la clé générée lors de l'installation à notre organisation pour activer le produit.

Nous maintenons une application d'administrateur au sein de l'organisation en question, clés d'activation. Nous proposons une seule clé d'activation pour une clé de service donnée.

Nous avons vendu un nombre d'exemplaires et cela fonctionne sans problème. Mais nous avons ensuite découvert que certains ordinateurs ne fournissaient pas de numéro de série de carte mère. Ces machines renvoient une valeur nulle en tant que numéro de série de la carte mère. nous essayons toujours de résoudre ce problème. 

1
gihan

Comment utiliser le numéro de série unique de MotherBoard?

1
user2912991

que diriez-vous de hacher tout ce qui contient un AN gravé, un disque dur, une proc, une RAM, etc., ce hachage restera avec l'ordinateur jusqu'à ce que ses pièces soient remplacées.

1
none

Ou vous pourriez simplement ne pas avoir de code d'activation et vous assurer que vos droits d'audit sont inscrits dans le CLUF et exercer votre droit d'audit de temps à autre. 

Fonctionne à merveille pour Oracle.

0
troy

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

La clé "MachineGuid" est générée uniquement lors de l’installation de Windows et ne changera pas, même après un échange matériel (à part le remplacement du disque dur amorçable sur lequel le système d’exploitation est installé).

MA SUGGESTION

Vous pouvez utiliser ce MachineGuid, numéro de série du disque dur, numéro de série de la carte mère et UUID. Ensemble, hachez-le en utilisant SHA 256 ou toute autre fonction HASH.

UUID- wmic csproduct get UUID

MachineGuid - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography

Numéro de série du disque dur - wmic diskdrive Obtenir le numéro de série

Numéro de série du BIOS - Le bios wmic reçoit le numéro de série

Numéro de série de la carte mère - La carte mère wmic reçoit le numéro de série

0
varshanbp

Vous pouvez envisager un utilitaire de licence tiers qui obtiendra plus probablement ce "droit" et fournira également à vous (ou à votre client) des options supplémentaires en cas de modification des exigences (et non toujours?) Je citerais quelques noms spécifiques, mais je ne les connais pas vraiment.

0
Ðаn