2011-01-12 12 views
1

Ich erstelle ein einfaches Lizenzschlüssel-System, um "ehrliche Leute ehrlich zu halten". Eine besonders stringente Kryptographie interessiert mich nicht.Sollte ich meine Lizenzschlüsselausgabe von der reinen md5-Ausgabe in einen allgemeinen "XXXX-YYYY-ZZZZ" -Code ändern?

Wenn sie mit den Demo-Einschränkungen genervt sind, gehen sie auf meine Registrierungswebseite, bezahlen und geben mir ihre E-Mail. Ich gebe ihnen einen Lizenzschlüssel.

Ich halte es wirklich einfach, so:

license_key = md5(email + "Salt_String"); 

Ich habe PHP und C# Funktionen ausführen, die gleichen Algorithmus und den gleichen Schlüssel.

Das Problem ist, dass die Ausgabe dieser Funktionen ist eine 32-stellige Zeichenfolge wie:

A69761CF99316358D04771C5ECFCCDC5 

Welche potenziell schwer zu merken/Typ. Ja, ich kenne Copy/Paste, aber ich möchte es wirklich einfach für alle zahlenden Kunden machen, die Software zu entsperren.

Sollte ich diese lange Saite irgendwie in etwas kürzer konvertieren?

Lets sagen, dass ich nur die ersten 6 Ziffern verwenden, so: A69761

Es gibt natürlich viel mehr Verschlüsselungs Kollisionen in das, aber wird es auf alles, was in der praktischen Anwendung?

Irgendwelche anderen Ideen, um die Sache menschlicher lesbar/typisierbar zu machen?

Antwort

3

Nach links sind 6-10 Symbole genug - der Benutzer wird sowieso nicht in der Lage sein, den Code zu erraten, und es wäre einfach zu tippen. Auch gute Idee wäre, jede Lizenz auf Ihrem Server zu registrieren, so dass Sie überprüfen können, ob der Benutzer wirklich ehrlich ist und keinen Lizenzschlüssel an eine andere Person weitergegeben hat.

+0

Wenn Sie "jede Lizenz auf Ihrem Server registrieren", meinen Sie, dass die App bei jedem Verbindungsaufbau "nach Hause telefonieren" sollte? Vermutlich werde ich das vorerst vermeiden, da ich davon ausgehe, dass auch echte Cracker das schaffen werden. – cksubs

+0

Und danke für die Zusicherung, nur die ersten 6-10 Symbole zu verwenden. – cksubs

+0

"Registrieren Sie jede Lizenz auf Ihrem Server" - Nein, ich meine nur die Zeit, wenn der Benutzer Lizenzinformationen in die App eingibt. Das würde gegen das Geben des Lizenzschlüssels zum Freund, natürlich nicht gegen wirklichen Cracker helfen –

1

Nach meiner Erfahrung führt die Aufforderung an den Benutzer, einen 30-stelligen Code einzugeben oder zu kopieren, zu frustrierten Kunden. Es ist nicht so schwierig. Es ist einfach eine Hürde, die den Menschen egal ist.

Die Lösung, die ich für my business verwendet habe, ist separate Testversion und erworbene Downloads. Um ihre lizenzierte Kopie zu erhalten, gibt der Kunde seine E-Mail-Adresse und eine kurze Benutzer-ID in das Download-Formular ein. Wenn Sie nur die E-Mail eingeben, wird die Benutzer-ID automatisch erneut gesendet. Sie haben nicht danach gefragt, aber ein System, das automatisch nach dem Code sucht, den der Kunde benötigt, ist noch wichtiger als ein einfaches System. Das Download-System sucht die Benutzerdetails in der Datenbank und stellt eine SetupSomeProductCustomerName.exe bereit, in die die Benutzerlizenz eingebettet ist. Dieses Setup installiert die lizenzierte Kopie des Kunden ohne weitere Identifizierung oder Serververbindungen.

Dieses System hat wirklich gut für uns gearbeitet. Der Kunde muss nur eine Datei sichern und keine Seriennummern verlieren, um sicherzustellen, dass die Software in Zukunft erneut installiert werden kann.

Das heißt, wenn Sie ein System mit einem Einweg-Hash verwenden möchten, verwenden Sie einfach einen Algorithmus, der einen kleineren Hash generiert. Z.B. CRC-32 ergibt 8 hexadezimale Ziffern.

Es hat keinen Sinn, dass der Hash kryptografisch sicher ist. Ein Cracker geht einfach durch den Code, kopiert den gesamten Code-Block, der die E-Mail-Adresse verändert, in den Lizenzschlüssel und fügt ihn in den keygen ein. Dann können sie Lizenzschlüssel für jede E-Mail-Adresse generieren.Sie können das tun, unabhängig davon, wie komplex Ihr Hashing-Algorithmus ist.

Wenn Sie dies verhindern möchten, müssen Sie die Verschlüsselung mit öffentlichem Schlüssel verwenden, was zu viel zu langen Schlüsseln führt. Wenn Sie diesen Weg gehen, müssen Sie Ihre Kunden entweder mit langen Schlüsseln belästigen um Schlüsseldateien einzufügen oder zu trennen, oder verwenden Sie das oben beschriebene personalisierte Download-System.

+0

Wie handhaben Sie Leute mit dem installierten Versuch, der dann deinstalliert/neu installiert werden muss, um die volle Version zu erhalten? Ich würde denken, dass ein Download, der vollständig freigeschaltet werden kann, weniger Unterstützung benötigen würde, nicht mehr. Und die Vollversion hat kein Lizenzsystem? Scheint schlimmer als Keygens, die immer noch ein bisschen lästig/abschreckend sind. – cksubs

+0

Gibt es auch gute Gründe für "zufällige Validierung" (nicht sichere Kryptographie), etwas wie CRC-32 anstelle von md5 auf 6-10 Zeichen verkürzt zu verwenden? Werden beide "gut genug" sein? Die C# - und PHP md5-Funktionen zu vergleichen, war ziemlich zeitaufwendig, also würde ich es lieber nicht wiederholen :) – cksubs

+0

CRC-32 ist eine sehr schlechte Wahl - es ist als Prüfsumme gedacht, um Übertragungsfehler zu erkennen, und es ist einfach kaputt. Ein verkürzter sicherer Hash ist eine bessere Idee. –