web-dev-qa-db-fra.com

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

Je me demande comment fonctionnent les générateurs de numéros de série et le validateur. Mon objectif serait de générer un numéro de série en cinq parties constituées uniquement de chiffres et de lettres.

J'aime le codage comme passe-temps et je ne m'appellerais pas programmeur professionnel. Cependant, je suis très intéressé par la façon dont ces fonctions intéressantes fonctionnent techniquement pour élargir mon esprit.

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

42
Simon

Brandon Staggs a écrit un bon article sur Implémentation d'un système de vérification de numéro de série partiel . Les exemples sont écrits en Delphi, mais pourraient être convertis dans d'autres langues.

25
stukelly

Eh bien, traditionnellement, les numéros de série sont des numéros de série ... Donc, le premier exemple hors ligne de production a sn 0001, le suivant est 0002 et le suivant est 0003. Je pense que la plupart des gens peuvent travailler sur cet algorithme.

Je pense que vous posez des questions sur les clés de produit, qui utilisent un mécanisme similaire à la signature des messages de clé publique - la clé de produit est la valeur cryptée, le programme a une clé publique qui lui permet de vérifier que la clé est valide, mais seulement le le fournisseur de logiciels a la clé secrète pour "signer" la clé de produit. L'article de wikipedia sur signatures numériques a 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 simplement une variante de somme de contrôle. Cela a l'inconvénient d'être facile à rétroconcevoir - c'est la sécurité parce que l'algorithme est "secret" plutôt qu'en raison de propriétés cryptographiques. Chaque produit aurait son propre algorithme, et ils se fissurent généralement assez rapidement.

Si vous avez 5 blocs de 5 caractères, vous avez 36 ^ 25 combinaisons, ce qui est supérieur à 2 ^ 128, vous pouvez donc utiliser l'un des algorithmes de signature numérique standard qui génère un 128 bits, puis convertir cette valeur en base 36.

16
Pete Kirkham

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

Quelque part dans l'application, la clé publique est 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 la décrypter. Vérifiez qu'il est divisible par 10000.

La partie difficile est dans l'implémentation - masquer la clé publique dans l'application afin qu'elle ne puisse pas être remplacée facilement. Choisir une séquence que vous pouvez identifier facilement, mais qui ne manque pas de valeurs. Obscurcissant l'application pour que quelqu'un ne puisse pas facilement passer le contrôle en entier. etc...

16
Eclipse

Un GUID ("identifiant globalement unique") pourrait être un moyen facile 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 sous forme de séquence de chiffres hexadécimaux tels que:

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

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

4
mjn

Vous pouvez utiliser un générateur de nombres aléatoires et stocker les sorties dans une base de données. En cas de demande d'activation, il vous suffit de vérifier si la série est dans la base de données et de marquer la série comme "utilisée".

Bien sûr, cela nécessite une connexion Internet, mais est bon contre la méthode "acheter une fois, utiliser plusieurs fois" et en cas d'appel de 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.

3
adrians
1
Gavin Miller
0
ʞɔıu