Les Clés de licence sont les defacto standard comme une mesure anti-piratage. Pour être honnête, ce qui me frappe comme la Sécurité Par l'Obscurité, bien que je n'ai vraiment aucune idée de comment les Clés de Licence sont générés. Qu'est ce qu'un bon (sécurisé) exemple de Clé de Licence génération? Ce primitives cryptographiques (le cas échéant) utilisent-ils? Est-ce un message digest? Si oui, quelles données seraient-ils de hachage? Quelles méthodes de développeurs emploient à rendre difficile pour les craquelins de construire leurs propres générateurs de clés? Comment sont les principaux producteurs?
Réponses
Trop de publicités?Pour la vieille école de clés CD, c'était juste une question de faire un algorithme pour lequel les clés CD (qui peut être n'importe quelle chaîne de caractères) sont faciles à générer et facile à vérifier, mais le ratio de valide-CD-clés invalides-CD-keys est tellement petite qu'au hasard de deviner les clés CD est peu probable pour vous valide.
INCORRECT FAÇON DE LE FAIRE:
Starcraft et la Demi-vie est à la fois utilisé la même somme, où les 13 chiffres vérifiées les 12 premiers. Ainsi, vous pouvez entrer quoi que ce soit pour les 12 premiers chiffres, et devinez le 13 (il y a seulement 10 possibilités), conduisant à l'infâme 1234-56789-1234
L'algorithme de vérification est public, et ressemble à quelque chose comme ceci:
x = 3;
for(int i = 0; i < 12; i++)
{
x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;
MANIÈRE CORRECTE DE LE FAIRE
Windows XP prend un peu de l'information, de la crypte, et met la lettre/nombre d'encodage sur un autocollant. Cela a permis de MS à la fois de vérifier votre clé et obtenir le type de produit (familial, Professionnel, etc.) dans le même temps. En outre, elle nécessite l'activation en ligne.
L'intégralité de l'algorithme est assez complexe, mais décrit bien dans ce (tout à fait légal!) livre, publié en Allemagne.
Bien sûr, peu importe ce que vous faites, à moins que vous offrez un service en ligne (comme World of Warcraft), le type de protection contre la copie est juste un décrochage: malheureusement, si c'est tout le jeu en vaut la valeur, quelqu'un va rompre (ou au moins à contourner) le lecteur de CD-algorithme à clé, et tous les autres protection des droits d'auteur.
VÉRITABLE BONNE FAÇON 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 avec leurs serveurs pour en faire un usage quelconque (par exemple. avoir un compte WoW). Le lecteur de CD-algorithme de clé pour World of Warcraft, par exemple, lors de l'achat de temps de jeu de cartes - probablement ressemble à quelque chose comme ceci:
- Générer un très grand chiffrement sécurisé de nombre aléatoire.
- Stocker dans notre base de données et d'impression sur la carte.
Alors, quand quelqu'un entre dans un temps de jeu-numéro de la carte, vérifier si il est dans la base de données, et si elle l'est, associer un nombre à l'utilisateur courant de sorte qu'il ne peut jamais être utilisé à nouveau.
Pour les services en ligne, il n'y a pas de raison de ne pas utiliser le schéma ci-dessus; en utilisant quelque chose d'autre peut conduire à des problèmes.
Quand j'ai d'abord écrit cette réponse, il était sous l'hypothèse que la question était relative à la "mode hors connexion" validation des clés de licence. La plupart des autres réponses d'adresse en ligne de vérification, ce qui est nettement plus facile à manipuler (la plupart de la logique peut être fait côté serveur).
Avec le mode hors connexion de vérification de la chose la plus difficile est de s'assurer que vous pouvez générer un grand nombre de unique des clés de licence, et toujours maintenir une forte algorithme qui n'est pas facilement compromise (comme un simple chiffre de contrôle)
Je ne suis pas très bien versé dans les mathématiques, mais il m'a frappé qu'une façon de le faire est d'utiliser une fonction mathématique qui trace un graphe
La ligne tracée peut avoir (si vous utilisez un assez fine de la fréquence) des milliers de points uniques, de sorte que vous pouvez générer des clés par la sélection aléatoire des points sur le graphique et en codant les valeurs d'une certaine façon
Comme exemple, nous allons tracer le graphique, choisir quatre points et l'encoder dans une chaîne de caractères comme "0,-500;100,-300;200,-100;100,600"
Nous allons chiffrer la chaîne avec un fixe et connue clé (horriblement faible, mais il sert un but), puis de convertir les octets obtenus par le biais de Base32 pour générer la clé finale
L'application peut alors inverser ce processus (base32 de nombre réel, de les décrypter, décoder les points), puis vérifiez chacun de ces points est sur notre secret graphique.
Ses une assez petite quantité de code qui permettrait à un grand nombre de unique et valide les clés pour être généré
Il est cependant très bien la sécurité par l'obscurité. Toute personne prenant le temps de démonter le code devrait être en mesure de trouver la fonction graphique et des clés de chiffrement, puis se moquer d'un générateur de clé, mais c'est probablement très utile pour ralentir les occasionnels de la piraterie.
Vérifier tis article sur Partielle de la Vérification de la Clé qui couvre les exigences suivantes:
Les clés de licence doit être assez facile à saisir.
Nous devons être en mesure de mettre en liste noire (révoquer) une clé de licence dans le cas de refus de paiement ou d'achats avec des cartes de crédit volées.
Pas de "téléphoner maison" pour tester les touches. Bien que cette pratique est de plus en plus et de plus en plus répandus, je n'ai pas encore l'apprécier en tant qu'utilisateur, ne sera donc pas demander à mes utilisateurs de mettre en place avec elle.
Il ne devrait pas être possible pour un pirate de démonter notre libéré de l'application et de produire un travail "keygen". Cela signifie que notre application, vous ne pourrez pas tester une clé pour vérification. Seuls certains de la clé est d'être testé. De plus, chaque nouvelle version de l'application doit tester une autre partie de la clé, de sorte qu'un bidon de clé basé sur une version antérieure ne fonctionnera pas sur une version de notre logiciel.
Important: il ne devrait pas être possible pour un utilisateur légitime d'tapez accidentellement dans une clé non valide qui apparaîtra au travail mais ne sur une version future, en raison d'une erreur typographique.
Je n'ai pas d'expérience avec ce que les gens font pour générer des clés de CD, mais (en supposant que vous êtes ne pas vouloir aller en bas de la route de l'activation en ligne) voici quelques façons dont on pourrait faire une clé:
Exiger que le nombre soit divisible par (dire) 17. Trivial à deviner, si vous avez accès à de nombreuses touches, mais la majorité de potentiel chaînes ne seront pas valides. Similaire serait exigeant que la somme de contrôle de la clé correspondre à une valeur connue.
Exiger que la première moitié de la clé, quand concaténé avec une valeur connue, de la cendre jusqu'à la deuxième moitié de la clé. Mieux, mais le programme contient encore toutes les informations nécessaires pour générer des clés ainsi que pour les valider.
Générer des clés de chiffrement de (avec une clé privée) d'une valeur connue + nonce. Ceci peut être vérifié par le décryptage à l'aide de la clé publique correspondante et de la vérification de la valeur connue. Le programme a désormais suffisamment d'informations pour vérifier la clé sans être en mesure de générer les clés.
Ils sont encore tous ouverts à l'attaque: le programme est toujours là et peut être patché pour contourner le vérifier. Plus sage peut-être pour chiffrer le cadre de ce programme à l'aide de la valeur connue de mon troisième méthode, plutôt que de stocker la valeur dans le programme. De cette façon, vous auriez à trouver une copie de la clé avant de pouvoir déchiffrer le programme, mais il est toujours vulnérable à être copié une fois décryptés et à avoir une personne de prendre leur légitime copier et l'utiliser pour permettre à tout le monde pour accéder au logiciel.
Les CD-Keys ne sont pas une garantie pour non-réseau des trucs, donc, techniquement, ils n'ont pas besoin d'être générée de façon sécurisée. Si vous êtes sur .net, vous pouvez aller avec Guid.NewGuid().
Leur principale utilisation est de nos jours pour la partie Multijoueur, où un serveur peut vérifier la Clé de CD. Pour ça, c'est sans importance, le degré de sécurité il est généré comme il se résume à "Recherche de tout ce qui est passé en et de vérifier si quelqu'un d'autre est déjà à l'utiliser".
Cela étant dit, vous souhaiterez peut-être utiliser un algorhithm afin d'atteindre deux objectifs:
- Ont une somme de contrôle d'une certaine sorte. Qui permet à votre Installateur pour afficher "Clé ne semble pas valide" s'affiche, uniquement pour détecter les fautes de frappe (en Ajoutant par exemple une case dans le programme d'installation signifie en fait que l'écriture d'un Générateur de Clé est trivial que le hacker a tout le code dont il a besoin. N'ayant pas le contrôle et en comptant uniquement sur la validation côté serveur désactive cette case, au risque d'ennuyer votre juridique des clients qui ne comprennent pas pourquoi le serveur n'accepte pas leur Clé de CD qu'ils ne sont pas conscients de la faute de frappe)
- Travailler avec un sous-ensemble limité de caractères. Essayez de taper dans une Clé CD et devinettes "Est-ce un 8 ou un B? un 1 ou un I? une Q ou un " O " ou un 0?" - en utilisant un sous-ensemble de non-ambiguë caractères/chiffres vous permet d'éliminer la confusion.
Cela étant dit, vous voulez encore un grand de la distribution et un peu de hasard pour éviter un pirate simplement deviner une clé valide (c'est valable dans votre base de données, mais encore dans une boîte sur une étagère de magasin) et le vissage sur une légitime client qui arrive à acheter la boîte.