Les clés de licence sont la norme de facto comme mesure anti-piratage. Pour être honnête, cela me semble être (in) Security Through Obscurity , bien que je ne sache vraiment pas comment les clés de licence sont générées. Qu'est-ce qu'un bon exemple (sécurisé) de génération de clé de licence? Quelle primitive cryptographique (le cas échéant) utilise-t-elle? Est-ce un condensé de message? Si oui, quelles données hacheraient-ils? Quelles méthodes les développeurs utilisent-ils pour empêcher les crackers de construire leurs propres générateurs de clés? Comment sont fabriqués les générateurs clés?
361
Réponses:
Pour les clés de CD à l'ancienne, il s'agissait simplement de créer un algorithme pour lequel les clés de CD (qui pourraient être n'importe quelle chaîne) sont faciles à générer et à vérifier, mais le rapport entre les clés de CD valides et les CD invalides -keys est si petit qu'il est peu probable que deviner des clés de CD au hasard vous en obtienne une valide.
MANIÈRE INCORRECTE DE LE FAIRE:
Starcraft et Half-life ont tous deux utilisé la même somme de contrôle, où le 13e chiffre a vérifié les 12 premiers. Ainsi, vous pouvez entrer n'importe quoi pour les 12 premiers chiffres, et deviner le 13e (il n'y a que 10 possibilités), conduisant à l'infâme
1234-56789-1234
L'algorithme de vérification est public et ressemble à ceci:
BONNE FAÇON DE LE FAIRE
Windows XP prend un certain nombre d'informations, les chiffre et met l'encodage des lettres / chiffres sur un autocollant. Cela a permis à MS de vérifier votre clé et d' obtenir en même temps le type de produit (résidentiel, professionnel, etc.). De plus, il nécessite une activation en ligne.
L'algorithme complet est assez complexe, mais bien décrit dans cet article (complètement légal!), Publié en Allemagne.
Bien sûr, peu importe ce que vous faites, à moins que vous n'offriez un service en ligne (comme World of Warcraft ), tout type de protection contre la copie n'est qu'un blocage: malheureusement, si c'est un jeu qui vaut la peine, quelqu'un va casser (ou du moins contourner) ) l'algorithme de clé CD et toutes les autres protections de copyright.
VRAIE FAÇON CORRECTE DE LE FAIRE:
Pour les services en ligne, la vie est un peu plus simple, car même avec le fichier binaire, vous devez vous authentifier auprès de leurs serveurs pour en faire usage (par exemple, avoir un compte WoW). L'algorithme de clé CD pour World of Warcraft - utilisé, par exemple, lors de l'achat de cartes de jeu - ressemble probablement à ceci:
Pour les services en ligne, il n'y a aucune raison de ne pas utiliser le schéma ci-dessus; utiliser autre chose peut entraîner des problèmes .
la source
1234-56789-1234
clé Starcraft, mais je me souviens qu'il n'a fallu que cinq minutes environ pour "forcer brutalement" le vérificateur en écrasant le clavier et en réessayant.Lorsque j'ai écrit cette réponse à l'origine, c'était sous l'hypothèse que la question concernait la validation «hors ligne» des clés de licence. La plupart des autres réponses concernent la vérification en ligne, qui est beaucoup plus facile à gérer (la plupart de la logique peut être effectuée côté serveur).
Avec la vérification hors ligne, la chose la plus difficile est de garantir que vous pouvez générer un grand nombre de clés de licence uniques, tout en conservant un algorithme solide qui n'est pas facilement compromis (comme un simple chiffre de contrôle)
Je ne connais pas très bien les mathématiques, mais cela m'a frappé qu'une façon de le faire est d'utiliser une fonction mathématique qui trace un graphique
La ligne tracée peut avoir (si vous utilisez une fréquence suffisamment fine) des milliers de points uniques, vous pouvez donc générer des clés en choisissant des points aléatoires sur ce graphique et en encodant les valeurs d'une manière ou d'une autre
Par exemple, nous tracerons ce graphique, choisirons quatre points et encoderons dans une chaîne comme "0, -500; 100, -300; 200, -100; 100,600"
Nous allons crypter la chaîne avec une clé connue et fixe (horriblement faible, mais cela sert à quelque chose), puis convertir les octets résultants via Base32 pour générer la clé finale
L'application peut ensuite inverser ce processus (base32 en nombre réel, décrypter, décoder les points) puis vérifier que chacun de ces points se trouve sur notre graphe secret.
C'est une assez petite quantité de code qui permettrait de générer un grand nombre de clés uniques et valides
C'est cependant beaucoup la sécurité par l'obscurité. Quiconque prend le temps de démonter le code pourrait trouver la fonction graphique et les clés de chiffrement, puis simuler un générateur de clés, mais c'est probablement très utile pour ralentir le piratage occasionnel.
la source
Consultez cet article sur la vérification partielle des clés qui couvre les exigences suivantes:
Les clés de licence doivent être assez faciles à saisir.
Nous devons être en mesure de mettre sur liste noire (révoquer) une clé de licence en cas de rétrofacturation ou d'achats avec des cartes de crédit volées.
Pas de «phoning home» pour tester les clés. Bien que cette pratique soit de plus en plus répandue, je ne l'apprécie toujours pas en tant qu'utilisateur, donc je ne demanderai pas à mes utilisateurs de l'accepter.
Il ne devrait pas être possible pour un cracker de démonter notre application publiée et d'en produire un «keygen» fonctionnel. Cela signifie que notre application ne testera pas entièrement une clé pour vérification. Seule une partie de la clé doit être testée. De plus, chaque version de l'application doit tester une partie différente de la clé, de sorte qu'une clé bidon basée sur une version antérieure ne fonctionnera pas sur une version ultérieure de notre logiciel.
Important: il ne devrait pas être possible pour un utilisateur légitime de taper accidentellement une clé non valide qui semblera fonctionner mais échouera sur une future version en raison d'une erreur typographique.
la source
Je n'ai aucune expérience de ce que les gens font réellement pour générer des clés de CD, mais (en supposant que vous ne voulez pas emprunter la voie de l'activation en ligne), voici quelques façons de créer une clé:
Exigez que le nombre soit divisible par (disons) 17. Pratique à deviner, si vous avez accès à de nombreuses clés, mais la majorité des chaînes potentielles ne seront pas valides. De même, il faudrait que la somme de contrôle de la clé corresponde à une valeur connue.
Exiger que la première moitié de la clé, lorsqu'elle est concaténée avec une valeur connue, hache jusqu'à la seconde moitié de la clé. Mieux, mais le programme contient toujours toutes les informations nécessaires pour générer des clés ainsi que pour les valider.
Générez des clés en chiffrant (avec une clé privée) une valeur connue + nonce. Cela peut être vérifié en déchiffrant à l'aide de la clé publique correspondante et en vérifiant la valeur connue. Le programme dispose désormais de suffisamment d'informations pour vérifier la clé sans pouvoir générer de clés.
Ceux-ci sont toujours ouverts aux attaques: le programme est toujours là et peut être corrigé pour contourner la vérification. Plus intelligent pourrait être de crypter une partie du programme en utilisant la valeur connue de ma troisième méthode, plutôt que de stocker la valeur dans le programme. De cette façon, vous devez trouver une copie de la clé avant de pouvoir décrypter le programme, mais il est toujours vulnérable à la copie une fois décryptée et à ce qu'une personne prenne sa copie légitime et l'utilise pour permettre à tous les autres d'accéder au logiciel.
la source
Les clés de CD ne sont pas vraiment une sécurité pour tout ce qui n'est pas en réseau, donc techniquement, elles n'ont pas besoin d'être générées en toute sécurité. Si vous êtes sur .net, vous pouvez presque utiliser Guid.NewGuid ().
De nos jours, leur utilisation principale est le composant multijoueur, où un serveur peut vérifier la clé CD. Pour cela, il est sans importance de savoir comment il a été généré en toute sécurité car il se résume à "Rechercher tout ce qui est transmis et vérifier si quelqu'un d'autre l'utilise déjà".
Cela étant dit, vous voudrez peut-être utiliser un algorhithme pour atteindre deux objectifs:
Cela étant dit, vous voulez toujours une grande distribution et un peu d'aléatoire pour éviter qu'un pirate ne devine simplement une clé valide (qui est valide dans votre base de données mais toujours dans une boîte sur une étagère de magasin) et visser un client légitime qui arrive à acheter cette boîte .
la source
Si vous n'êtes pas particulièrement préoccupé par la longueur de la clé, une méthode assez éprouvée est l'utilisation du cryptage des clés publiques et privées.
Ont essentiellement une sorte de nonce et une signature fixe.
Par exemple: 0001-123456789
Où 0001 est votre nonce et 123456789 est votre signature fixe.
Ensuite, chiffrez-le à l'aide de votre clé privée pour obtenir votre clé CD qui ressemble à: ABCDEF9876543210
Ensuite, distribuez la clé publique avec votre application. La clé publique peut être utilisée pour déchiffrer la clé de CD "ABCDEF9876543210", dont vous vérifiez ensuite la partie de signature fixe de.
Cela empêche alors quelqu'un de deviner quelle est la clé CD pour le nonce 0002 car il n'a pas la clé privée.
Le seul inconvénient majeur est que vos clés de CD seront assez longues lors de l'utilisation de clés privées / publiques de 1024 bits. Vous devez également choisir un nonce assez long pour ne pas crypter une quantité triviale d'informations.
Le côté positif est que cette méthode fonctionnera sans "activation" et vous pouvez utiliser des choses comme une adresse e-mail ou le nom du titulaire de licence comme nonce.
la source
Le système de clés doit avoir plusieurs propriétés:
Une solution qui devrait vous les fournir serait d'utiliser un schéma de signature à clé publique . Commencez avec un "hachage système" (par exemple, récupérez les macs sur n'importe quelle carte réseau, triés et les informations sur l'ID du processeur, ainsi que d'autres éléments, concaténez le tout ensemble et prenez un MD5 du résultat (vous ne voulez vraiment pas être gérer les informations personnellement identifiables si vous n'êtes pas obligé)) d'ajouter le numéro de série du CD et de refuser de démarrer à moins qu'une clé de registre (ou un fichier de données) ait une signature valide pour le blob. L'utilisateur active le programme en vous expédiant le blob et vous renvoyez la signature.
Les problèmes potentiels incluent que vous proposez de signer pratiquement n'importe quoi, vous devez donc supposer que quelqu'un exécutera un texte brut et / ou des attaques de texte chiffré choisis . Cela peut être atténué en vérifiant le numéro de série fourni et en refusant de traiter les demandes de personnes invalides ainsi qu'en refusant de traiter plus d'un nombre donné de requêtes à partir d'un s / n donné dans un intervalle (disons 2 par an)
Je dois souligner quelques points: premièrement, un attaquant qualifié et déterminé sera en mesure de contourner toutes les sécurités dans les parties auxquelles il a un accès illimité ( c'est- à- dire tout ce qui se trouve sur le CD), le mieux que vous puissiez faire pour ce compte est il est plus difficile d'obtenir un accès illégitime que d'obtenir un accès légitime. Deuxièmement, je ne suis pas un expert, il pourrait donc y avoir de graves lacunes dans ce projet.
la source
Il existe également des comportements DRM qui intègrent plusieurs étapes au processus. L'un des exemples les plus connus est l'une des méthodes d'Adobe pour vérifier une installation de leur Creative Suite. La méthode traditionnelle de clé CD discutée ici est utilisée, puis la ligne d'assistance d'Adobe est appelée. La clé CD est remise au représentant Adobe et celui-ci donne un numéro d'activation à utiliser par l'utilisateur.
Cependant, en dépit d'être divisé en étapes, cela tombe en proie aux mêmes méthodes de fissuration utilisées pour le processus normal. Le processus utilisé pour créer une clé d'activation vérifiée par rapport à la clé CD d'origine a été rapidement découvert et des générateurs incorporant les deux clés ont été créés.
Cependant, cette méthode existe toujours comme moyen pour les utilisateurs sans connexion Internet de vérifier le produit. À l'avenir, il est facile de voir comment ces méthodes seraient éliminées à mesure que l'accès à Internet deviendrait omniprésent.
la source
Tous les algorithmes de protection contre la copie sur CD ne gênent pas les utilisateurs honnêtes tout en n'offrant aucune protection contre le piratage.
Le "pirate" n'a besoin que d'avoir accès à un cd légitime et à son code d'accès, il peut alors faire n copies et les distribuer.
Peu importe la sécurité cryptographique du code, vous devez le fournir avec le CD en texte brut ou un utilisateur légitime ne peut pas activer le logiciel.
La plupart des systèmes sécurisés impliquent que l'utilisateur fournisse au fournisseur du logiciel certains détails de la machine qui exécutera le logiciel (numéros de série du processeur, adresses mac, adresse Ip, etc.), ou, nécessite un accès en ligne pour enregistrer le logiciel sur le site Web du fournisseur et en retour, recevez un jeton d'activation. La première option nécessite beaucoup d'administration manuelle et ne vaut que pour les logiciels de très grande valeur, la deuxième option peut être usurpée et est absolument exaspérante si vous avez un accès réseau limité ou si vous êtes coincé derrière un pare-feu.
Dans l'ensemble, il est beaucoup plus facile d'établir une relation de confiance avec vos clients!
la source
Vous pouvez utiliser et implémenter l'API Secure Licensing à partir de ( https://www.nuget.org/packages/SystemSoulLicense/ ) très facilement dans vos projets logiciels en l'utilisant (vous devez télécharger l'application de bureau pour créer une licence sécurisée à partir de https: / /www.systemsoulsoftwares.com/ ) 1. Crée un UID unique pour le logiciel client basé sur le matériel système (CPU, carte mère, disque dur) (l'UID agit comme clé privée pour ce système unique) 2. Permet d'envoyer très facilement la chaîne de licence cryptée au système client, Il vérifie la chaîne de licence et ne fonctionne que sur ce système particulier 3. Cette méthode permet aux développeurs de logiciels ou à l'entreprise de stocker plus d'informations sur les logiciels / développeurs / services de distribution / fonctionnalités / client 4. Elle permet de contrôler le verrouillage et le déverrouillage des fonctionnalités du logiciel client, ce qui fait gagner du temps aux développeurs pour faire plus de version pour le même logiciel avec des fonctionnalités changeantes 5. Il faut aussi se soucier de la version d'essai pendant un certain nombre de jours 6. Il sécurise la chronologie de la licence en vérifiant DateTime en ligne lors de l'enregistrement 7. Il déverrouille toutes les informations matérielles pour les développeurs 8.Il a toutes les fonctions de pré-construction et personnalisées auxquelles le développeur peut accéder à chaque processus de licence pour créer un code sécurisé plus complexe
la source