Sécurisé algorithme pour la création de clés de licence?
je voudrais distribuer une application, mais avoir une clé de licence qu'ils peuvent entrer pour déverrouiller. Qu'est-ce qu'un bon algorithme pour créer une clé concise qui contient des informations sur la version qu'ils ont acheté, ainsi que des choses supplémentaires telles que la durée de la licence, etc.
je me rends compte que cette protection peut être brisée, mais elle garde les gens honnêtes. Il se peut que je ne mette pas en œuvre l'activation en ligne, mais je suis principalement concerné par une bonne façon de générer ces touches.
nous avons tous vu cette situation, quel algorithme fonctionne le mieux? Dois-je demander un nom d'utilisateur en clair et l'utiliser pour créer une clé produit unique basée sur leurs propres informations?
existe-il un système qui peut être utilisé pour faire près impossible de générer une clé valide?
peut-être une situation de chiffrement mixte public/privé où seul le fabricant possède la clé privée et où les données peuvent être validées par une clé publique, mais le public la clé ne peut pas être détournée pour créer des clés valides.
comme il s'agit d'une clé produit, ce serait génial si elle était assez courte, 64 caractères ou peut-être 128 max, mais le plus court le mieux, 32 ou moins serait génial.
2 réponses
vous n'avez pas dit sur quelle plate-forme vous êtes, mais en voici une dans Microsoft. NET:
http://jclement.ca/devel/dotnet/reallysimplelicensing.html
cette page documente un très simple système de licence que vous pouvez utiliser avec votre application. Net. Il est destiné être assez sécurisé, facile à mettre en œuvre et facile à étendre. La version de démonstration vous permet de fournir des fichiers de licence avec un nom de client inclus dans les mais vous pouvez facilement l'étendre à ajouter autres informations d'identification, machine reliures, dates d'expiration, etc.
ce schéma fait usage de Microsoft Bibliothèque RSA et signature XML. Fondamentalement vous mettez tout ce que vous voulez dans un XML Documentez et signez ce document. Puis vous pouvez fournir le fichier à votre le client et l'application peut lire les informations de licence, de ce que fichier. Puisque le fichier est numériquement signé le fichier de licence ne peut pas être altéré, à moins que vous relâchez votre clé privée (qui vous vraiment ne pas faire).
pas D'accès Internet et des clés de tir
en ce qui concerne la taille des clés de série, il y a un compromis entre les clés courtes / lisibles par l'utilisateur (moins sûr) et ayant de longues clés ou éventuellement des fichiers de licence (plus sécurisé).
si vous voulez des clés courtes et lisibles par l'homme qui vous permettent de stocker des choses telles que la date d'expiration et les fonctionnalités, vous pouvez utiliser SKGL avec Software Protector, qui sont à la fois open source (https://help.cryptolens.io/faq/what-is-skgl).
cependant, l'inconvénient est qu'ils vont très probablement utiliser la cryptographie symétrique et/ou stocker l'algorithme de génération de clés à l'intérieur de l'application. Cela signifie que l'utilisateur final peut essayer de trouver la clé de cryptage et / ou l'algorithme (voir http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET).
accès à Internet (ou hors ligne avec activation) les fichiers)
Une meilleure alternative est d'utiliser un système basé sur le cloud qui conserve la trace de toutes les clés de licence et vous permet de les modifier à tout moment.
si vous avez un système de licence basé sur le web, vous pouvez garder les clés plus courtes et ne pas avoir à stocker l'information à l'intérieur de la clé réelle (ce qui est le cas avec la plupart des systèmes basés hors ligne).
La les solutions sont:
construire un tel système vous-même - qui va prendre beaucoup de temps et vous distraire de ses fonctionnalités principales de l'application.
utiliser un système open source existant comme point de départ - bien que cela puisse être tentant puisque c'est open source et gratuit, cela prendra du temps pour les amener au cloud + le configurer à vos besoins particuliers + le maintenir. les systèmes open source que j'ai la fonctionnalité observée a tendance à être très large, ce qui contribue à la complexité.
externaliser à un tiers
dans mon esprit, toute la procédure devrait être externalisée à un tiers qui est spécialisé dans le développement de cette composante particulière. Une fois que vous avez mis l'échelle, vous pourriez avoir besoin de changer la logique de licence. Au lieu de le développer vous-même, les chances sont que le tiers appuie déjà ce scénario.
Il y a plusieurs solutions là-bas ( assurez-vous de chercher ceux qui sont basés sur le web), Cryptolens en est un exemple. Si vous développez une application .NET, voici un exemple étape par étape:https://help.cryptolens.io/examples/key-verification.
Avertissement: je suis l'auteur de SKGL / Software Protector, l'article sur la licence systèmes, et Cryptolens.