42 votes

Par curiosité : Comment sont générés les numéros de série ? Indices, algorithmes ?

Je m'interroge sur le fonctionnement des générateurs de numéros de série et des validateurs. Mon objectif serait de générer un numéro de série en cinq parties, composé uniquement de chiffres et de lettres.

J'aime coder en tant que loisir et je ne me considère pas comme un programmeur professionnel. Cependant, je suis très intéressé par le fonctionnement technique de ces fonctions intéressantes pour m'élargir l'esprit.

Tous les conseils, expériences ou algorithmes écrits sont appréciés.

25voto

stukelly Points 3076

Brandon Staggs a écrit un bon article sur Mise en œuvre d'un système de vérification partielle des numéros de série . Les exemples sont écrits en Delphi, mais peuvent être convertis dans d'autres langages.

16voto

Pete Kirkham Points 32484

Eh bien, traditionnellement les numéros de série sont des numéros de série .... Ainsi, le premier exemplaire sortant de la chaîne de production porte le numéro 0001, le suivant le numéro 0002 et le suivant le numéro 0003. Je pense que la plupart des gens peuvent comprendre cet algorithme.

Je pense que votre question porte en fait sur les clés de produit, qui utilisent un mécanisme similaire à celui de la signature de messages à clé publique - la clé de produit est la valeur cryptée, le programme possède une clé publique qui lui permet de vérifier que la clé est valide, mais seul le vendeur du logiciel possède la clé secrète pour "signer" la clé de produit. L'article de wikipedia sur signatures numériques possède le mécanisme général ; la seule condition est que pour qu'une clé soit saisie par l'utilisateur, elle doit être un peu plus courte qu'une clé PGP.

Si vous êtes limité à un numéro de série très court, il est peu probable qu'il soit assez grand pour stocker le résultat d'un mécanisme de signature typique, auquel cas il est assez courant d'utiliser une variante de somme de contrôle. Cette méthode présente l'inconvénient d'être facile à désosser - sa sécurité est due au fait que l'algorithme est "secret" plutôt qu'à des propriétés cryptographiques. Chaque produit aurait son propre algorithme, et ils sont généralement craqués assez rapidement.

Si vous avez 5 blocs de 5 caractères, vous avez 36^25 combinaisons, ce qui est plus grand que 2^128. Vous pourriez donc utiliser l'un des algorithmes de signature numérique standard qui génère un bit 128, puis convertir cette valeur en base 36.

16voto

Eclipse Points 27662

Procurez-vous un paire de clés publiques/privées . Générer numéros de séquence (10000, 20000, 30000, 40000, ....) qui ont une certaine caractéristique d'identification (par exemple divisible par 10000). Cryptez ce nombre à l'aide de votre clé privée. Encodez cette valeur en utilisant un système lisible par l'homme ( base 32 o 64 ) et séparer les valeurs en groupes pour faciliter leur analyse. Distribuez le numéro de série codé avec chaque vente de votre application.

Quelque part dans l'application, vous avez la clé publique cachée. Lorsqu'un utilisateur saisit un numéro de série codé, décodez-le d'abord en binaire. Utilisez la clé publique pour le décrypter. Vérifiez qu'il est divisible par 10000.

Le plus dur est dans la mise en œuvre - cacher la clé publique dans l'application pour qu'elle ne puisse pas être remplacée facilement. Choisir une séquence que l'on peut identifier facilement, sans être à court de valeurs. Obfuscating l'application pour que quelqu'un ne puisse pas facilement passer à côté de l'ensemble du contrôle. etc...

4voto

mjn Points 19315

Un GUID ("Globally Unique Identifier") pourrait être un moyen simple de résoudre ce problème :

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Les guides contiennent 16 octets et sont le plus souvent écrits dans le texte sous la forme d'une séquence de chiffres hexadécimaux, par exemple :

3F2504E0-4F89-11D3-9A0C-0305E82C3301

Et la plupart des langages de programmation devraient être en mesure de générer un GUID avec l'une des bibliothèques disponibles.

3voto

adrians Points 161

Vous pouvez utiliser un générateur de nombres aléatoires et stocker les résultats dans une base de données. En cas de demande d'activation, il suffit de vérifier si le numéro de série se trouve dans la base de données et de le marquer comme "utilisé".

Bien sûr, cela nécessite une connexion Internet, mais c'est une bonne solution contre la méthode "acheter une fois, utiliser plusieurs fois" et en cas d'appel au support, vous pouvez réactiver cette série pour une autre réinstallation.

Modification ultérieure : Vous devez également utiliser pour la vérification internet une connexion cryptée et authentifiée, comme une connexion HTTPS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X