web-dev-qa-db-fra.com

Meilleur mécanisme pour générer des clés de licence

Quelles méthodes/bibliothèques/outils les gens suggéreraient-ils pour générer des clés de licence (ces belles choses AAAAA-AAAAA-AAAAA-AAAAA-AAAAA que vous mettez lorsque vous enregistrez un logiciel)?

Avez-vous des problèmes à surveiller lors de leur mise en œuvre?

(Pour le moment, cela m'intéresse en général plutôt que spécifique à la langue, alors indiquez simplement la langue que vous utilisez si votre solution est spécifique à la langue).

35
Jon Hopkins

C'est à peu près la même chose que lors du stockage des mots de passe. Vous devez avoir une clé secrète unique connue uniquement du générateur et de votre programme. Utilisez cette clé pour manipuler les détails (nom d'utilisateur, mot de passe, organisation, etc.) puis hacher. Vous pouvez ensuite faire quelque chose d'encodage de transfert trivial dans Base32 sur le hachage ou simplement le déplacer vers une chaîne hexadécimale si vous ne vous souciez pas d'un format.

Avez-vous des problèmes à surveiller lors de leur mise en œuvre?

Gardez les secrets secrets et séparés. Rendez votre implémentation améliorable. Si quelqu'un le casse, pouvez-vous facilement changer la mise en œuvre? Une implémentation courante sur les applications de bureau consiste à utiliser un serveur distant pour valider la licence. Cela supprime la possibilité que quelqu'un puisse rétroconcevoir un hachage ou l'algorithme en inspectant l'application elle-même.

23
Josh K

Cette même question a été posée le SO et la réponse acceptée est plutôt bonne. L'essentiel est:

  • Prenez le nom de l'utilisateur
  • Concatentez le nom de l'utilisateur, la clé secrète et le hachage avec (par exemple) SHA1
  • Décompressez le hachage SHA1 en tant que chaîne alphanumérique. Il s'agit de la "clé de produit" de l'utilisateur individuel
  • Dans le programme, faites le même hachage et comparez avec la clé de produit. Si égal, OK.
10
Walter

Ma méthode préférée consiste à générer 10 000 chaînes de licence aléatoires, à les hacher SHA1 (ou MD5) ou à les HMAC, et à inclure tout ou partie du hachage SHA1/MD5 dans l'exécutable lui-même. Lorsqu'une chaîne de licence est entrée, vous utilisez simplement du code obscurci pour générer le hachage de la chaîne et le comparer à ceux de la liste. S'il correspond, c'est une licence valide. Si vous manquez de licences, publiez une nouvelle version avec plus de chaînes.

Utiliser uniquement les 96 premiers bits du hachage SHA1 est suffisant. Ainsi, 10 000 licences prendraient moins de 120 Ko. La génération algorithmique de clés ou la création d'un générateur de clés serait impossible. La seule vulnérabilité dont vous auriez à vous soucier est l'ingénierie inverse ou le contournement. (Ou quelqu'un qui distribue sa clé valide.)

1
David Schwartz