Algorithme sécurisé pour la création de clés de licence?
-
06-07-2019 - |
Question
Je souhaite distribuer une application, mais disposer d'une clé de licence à saisir. Qu'est-ce qu'un bon algorithme pour créer une clé concise contenant des informations sur la version achetée, ainsi que des éléments supplémentaires tels que la durée de la licence, etc.
Je réalise que cette protection peut être fissurée, mais elle garde les honnêtes gens honnêtes. Je peux ou non implémenter l'activation en ligne, mais je suis principalement préoccupé par un bon moyen de générer ces clés.
Nous avons tous vu cette situation, quel algorithme fonctionne le mieux? Devrais-je demander un nom en clair à l'utilisateur et l'utiliser pour créer une clé de produit unique basée sur ses propres informations?
Existe-t-il un système permettant de rendre presque impossible la génération d’une clé valide?
Peut-être une situation de chiffrement de paire de clés publique / privée où seul le fabricant possède la clé privée et où les données peuvent être validées par une clé publique, mais la clé publique ne peut pas être piratée pour créer des clés valides.
Comme il s'agit d'une clé de produit, ce serait génial si elle était assez courte, 64 caractères ou peut-être 128 max, mais plus court sera le mieux, 32 ou moins serait génial.
La solution
Vous n'avez pas précisé sur quelle plate-forme vous vous trouvez, mais en voici un dans Microsoft .Net:
http://jclement.ca/devel/dotnet/reallysimplelicensing.html
Cette page documente un très simple régime de licence que vous pouvez utiliser avec votre application .NET. C'est intensionnel être assez sécurisé, facile à mettre en œuvre et facile à étendre. La version exemple vous permet de fournir des fichiers de licence avec un nom de client intégré mais vous pouvez facilement l'étendre pour ajouter autres informations d'identification, machine reliures, dates d'expiration, etc.
Ce schéma utilise Microsoft Bibliothèque RSA et signature XML. Fondamentalement vous mettez ce que vous voulez dans un XML Documentez et signez ce document. ensuite vous pouvez fournir ce fichier à votre le client et l'application peuvent lire les informations de licence sur cette fichier. Puisque le fichier est numériquement signé le fichier de licence ne peut PAS être altéré sauf si vous relâchez votre clé privée (que vous avez vraiment ne devrait pas faire).
Autres conseils
Pas d'accès Internet et de clés d'accès
En ce qui concerne la taille de la clé de série, il existe un compromis entre les clés lisibles courtes / lisibles par l'homme. ( moins sécurisé ) 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 éléments tels que la date d'expiration et les fonctionnalités, vous pouvez utiliser SKGL avec Software Protector, deux sources ouvertes ( https://help.cryptolens.io/faq/what-is-skgl ).
Cependant, l’inconvénient est qu’ils utiliseront très probablement la cryptographie symétrique et / ou stockeront l’algorithme de génération de clé dans l’application. Cela signifie que l'utilisateur final peut tenter 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 connexion avec les fichiers d'activation)
Une meilleure alternative consiste à utiliser un système basé sur le cloud qui garde une 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 raccourcir les clés et ne pas avoir à stocker d'informations dans la clé réelle (ce qui est le cas avec la plupart des systèmes hors ligne).
De plus, vous pourrez prendre en charge davantage de modèles de licence, par exemple, un modèle basé sur un abonnement.
Les solutions sont les suivantes:
-
construisez vous-même un tel système , ce qui prendra beaucoup de temps et vous distraira des fonctionnalités essentielles de l'application.
-
utilisez un système open source existant comme point de départ - même si cela peut être tentant, étant donné qu'il est open source et gratuit, il faudra du temps pour les amener dans le cloud + configurer à vos besoins particuliers + maintenez-le. les systèmes open source que j'ai observés ont tendance à avoir une fonctionnalité très large, ce qui contribue à la complexité.
-
sous-traiter à un tiers - l'inconvénient est que la plupart d'entre eux ne sont pas gratuits.
À mon avis, l’ensemble de la procédure devrait être sous-traitée à un tiers spécialisé dans le développement de cet élément. Une fois l’échelle mise à l’échelle, vous devrez peut-être modifier la logique de gestion des licences. Au lieu de le développer vous-même, il est probable que la tierce partie prenne déjà en charge ce scénario.
Il existe plusieurs solutions ( assurez-vous de rechercher celles qui sont basées 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 .
Clause de non-responsabilité : je suis l'auteur de SKGL / Software Protector, l'article sur les systèmes de licence et Cryptolens.