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 les valideurs. Mon but serait de générer un numéro de série de cinq parties composé uniquement de chiffres et de lettres.

J’apprécie le codage en tant que passe-temps et ne me qualifierais pas de programmeur professionnel. Cependant, je suis très intéressé par la manière dont ces fonctions intéressantes fonctionnent techniquement pour élargir mon esprit.

Tout conseil, expérience ou algorithme écrit sont appréciés.

    Brandon Staggs a écrit un bon article sur la mise en œuvre d’un système de vérification du numéro de série partiel . Les exemples sont écrits en Delphi, mais pourraient être convertis en d’autres langages.

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

    Je pense que vous êtes en train de poser 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 chiffrée, le programme a une clé publique qui lui permet de vérifier la validité de la clé Le fournisseur du logiciel a la clé secrète pour «signer» la clé du produit. L’article de Wikipedia sur les signatures numériques est doté du mécanisme général; La seule condition est que pour qu’une clé soit saisie par l’utilisateur, celle-ci doit être un peu plus courte que celle d’une 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 la sum de contrôle. Cela présente l’inconvénient d’être facile à inverser: sa sécurité est due au fait que l’algorithme est «secret» plutôt que dû à des 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 plus grand que 2 ^ 128, pourrait 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.

    Procurez-vous une paire de clés publique / privée . Générez des numéros de séquence (10000, 20000, 30000, 40000, ….) qui ont des caractéristiques d’identification (par exemple, divisibles par 10000). Cryptez ce numéro en utilisant votre clé privée. Encodez cette valeur en utilisant un système lisible par l’homme ( base 32 ou 64 ) et séparez les valeurs en groupes pour faciliter leur parsing. Dissortingbuez le numéro de série encodé à chaque vente de votre application.

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

    La partie la plus difficile réside dans la mise en œuvre – en masquant 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 ne pas manquer de valeurs. Obfusquer l’application afin que quelqu’un ne puisse pas facilement passer le contrôle complet. etc…

    Vous pouvez utiliser un générateur de nombres aléatoires et stocker les sorties dans une firebase database. En cas de demande d’activation, il vous suffit de vérifier si le numéro de série se trouve dans la firebase database et de marquer le numéro de série comme “utilisé”.

    Bien sûr, cela nécessite une connexion Internet, mais contre la méthode «Acheter une fois, utiliser beaucoup, 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 chiffrée et authentifiée, telle qu’une connexion HTTPS.

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

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

    Les guids 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 pouvoir générer un GUID avec l’une des bibliothèques disponibles.

    En utilisant mon Google-Foo, j’ai trouvé cet article:

    http://www.mactech.com/articles/mactech/Vol.13/13.02/SerialNumberGenerator/index.html