2009-05-21 2 views
5

Ich versuche, einen einzigartigen CD-KEY zu erstellen, wie in einem normalen CD-KEY in Standard-Software-Boxen, die Benutzer verwenden, um das Produkt zu registrieren.Algorithmus für einzigartige CD-KEY-Generierung mit Validierung

Allerdings verkaufen wir keine Software, wir verkaufen DNA-Sammlung für kriminelle und medizinische Zwecke. Die Benutzer erhalten ein Speichelsammlungskit per Post mit dem CD-KEY und sie werden diesen CD-KEY verwenden, um ein Konto auf unserer Website zu erstellen und ihre Ergebnisse zu erhalten. Die Ergebnisse des Tests werden mit dem CD-KEY verknüpft. Nur so können wir die Ergebnisse mit den Patienten verknüpfen. Es ist daher wichtig, dass es nicht scheitert :)

Eine der Voraussetzungen wäre, dass die Liste der CD-KEYs ausreichend "gespreizt" werden muss, so dass keine Möglichkeit besteht, dass jemand einen falschen CD-KEY eingibt und immer noch für ein anderes Kit zugelassen zu haben und dabei zwei Kits zu vermischen. Das könnte uns Tausende von Dollars an Haftung kosten.

Zum Beispiel kann es nicht eine inkrementelle Zahlenfolge wie
...
sein Der Grund dafür ist, dass, wenn jemand erhält das Kit 00002, sondern registriert sich als 000003 von Unfall, dann werden seine Ergebnisse mit jemand anderem verglichen. So muss es wie Kreditkartennummern sein ... Wenn keine gültige Sequenz eingegeben wird, sind Ihre Chancen zufällig eine gültige Zahl zu schlagen 1 ...

Wir verkaufen auch über 50.000 Kits jährlich an verschiedene Anbieter (wer wird seine eigenen CD-KEYS mit unserem Algorithmus generieren), so dass wir keine Liste aller zuvor ausgegebenen CD-KEYS pflegen können, um nach Duplikaten zu suchen. Der Algorithmus muss eindeutige CD-KEYs generieren.

Wir müssen außerdem sicherstellen, dass der CD-KEY gültig ist, indem wir einen schnellen Prüfalgorithmus verwenden, damit wir den Benutzer informieren können, wenn der eingegebene Code ungültig ist. Dies lässt viele Hashing- oder MD5-Algorithmen aus, die ich glaube. Und es kann kein 128 Bit sein, denn wer würde sich die Zeit nehmen, es auf dem Computerbildschirm auszugeben?

Bisher ist es das, was ich die letzte CD-KEY Struktur denken aussehen würde

(4 char Produkt-Code) - (4 char Reseller-Code) - (12 char eindeutige, überprüfbare CD-KEY)

Bsp. 384A - GTLD - {4565 - FR54 - EDF3}


die Einzigartigkeit der Schlüssel zu gewährleisten, konnte ich das aktuelle Datum (20090521) als Teil der Quelle umfasst. Wir werden nicht mehr als einmal pro Woche eindeutige Schlüssel generieren, daher ändert sich dieser Wert oft genug, um einen eindeutigen Anfangswert zu erhalten.

Welchen möglichen Algorithmus kann ich verwenden, um die eindeutigen Schlüssel zu generieren?

+2

Kryptographie ist unsicher, wenn es Sicherheit nur in Algorithmus ist, der geheim gehalten wird. :) –

+0

Der letzte CD-Schlüssel wird mit einem Hash-Algorithmus mit einem geheimen Schlüssel verschlüsselt. –

Antwort

6

Erstellen Sie die Saiten <providername>000001, <providername>000002 etc. oder was auch immer und verschlüsseln sie mit einem öffentlichen Schlüssel, und das ist Ihr "CD-KEY", dass der Benutzer eingibt. Entschlüsseln Sie den CD-KEY mit dem privaten Schlüssel und bestätigen Sie, dass Sie beim Entschlüsseln eine gültige Zeichenfolge mit einem gültigen Providernamen erhalten.

+0

Danke das ist genau das, was ich gesucht habe. –

+0

Meinst du nicht verschlüsseln mit einem privaten Schlüssel, entschlüsseln mit einem öffentlichen Schlüssel? – Cam

+0

Nein, er verwendet die Begriffe korrekt. Für seine Zwecke kann er den privaten oder öffentlichen Schlüssel verwenden, um die Verschlüsselung durchzuführen, solange er den anderen für die Verschlüsselung verwendet. Wenn bei der Verwendung von öffentlichen/privaten Schlüsseln eine der Aktionen (Verschlüsselung/Entschlüsselung) von einer Gruppe von Personen ausgeführt werden soll, wird der öffentliche Schlüssel dafür verwendet. Hier kommen die Namen her. In diesem Fall ist es nicht wirklich wichtig, welches verwendet wird. – Walter

1

Kreditkartennummern verwenden die Luhn algorithm möchten Sie vielleicht etwas Ähnliches betrachten.

+0

Die Verhoeff-Algorithmus-Referenz sieht dort viel besser aus, da sie Transpozierungsfehler auffängt. – JonnyBoats

1

Ich benutze SeriousBit Ellipter link für Software-Schutz, aber ich sehe keinen Grund, warum Sie eine Gruppe von eindeutigen Schlüssel pro Woche generieren könnte und uns die Bibliothek den Schlüssel Gültigkeit zu prüfen, wenn sie in Ihrer Website eingegeben. Sie können auch optionale Dienste in den Schlüssel einkodieren, mit denen Sie steuern können, wie das Beispiel vom Schlüssel verarbeitet wird (wenn Sie unterschiedliche Service-Level haben).

Da es eine verschlüsselte Methode der Schlüsselerzeugung an erster Stelle verwendet und es relativ billig ist, ist es sicherlich einen Blick wert, würde ich sagen.

+0

Danke für den Vorschlag. Ich habe den Trail ausprobiert und war ein bisschen enttäuscht. Wenn ich die Seriennummer am Ende 00001, 00002 usw. ändere, hat der cd-Schlüssel, den er zurückgibt, nur einen Wert, der geändert wird. –

-1

GUID generieren und eine Zufallszahl verketten. GUID ist garantiert einzigartig und eine Zufallszahl macht es unwahrscheinlich, dass ein Code versehentlich ausgelöst wird. Ändern Sie die GUID in keiner Weise, sonst könnten Sie die Eindeutigkeit beeinträchtigen.

http://msdn.microsoft.com/en-us/library/aa475087.aspx

+0

-1 GUIDs sind nicht kryptographisch sicher. Viele Implementierungen haben deterministische Teile, wie die Aufnahme der MAC-Adresse des Computers. Auch wird eine Internetverbindung benötigt, um tatsächlich zu arbeiten. – Aron

1

ich endlich für einen CD-Key dieser Form

<TIMESTAMP>-<incremented number>-<8 char MD5 hash>-<checksumdigit> 

ich die mod 11 ISBN Prüfsummenziffer Algorithmus erledigt.