Bester Mechanismus zum Generieren von Lizenzschlüsseln [geschlossen]

35

Welche Methoden / Bibliotheken / Tools würden die Leute zur Generierung von Lizenzschlüsseln vorschlagen (diese schönen AAAAA-AAAAA-AAAAA-AAAAA-Dinge, die Sie bei der Registrierung von Software eingeben)?

Gibt es irgendwelche Fallstricke, auf die Sie bei der Implementierung achten sollten?

(Im Moment interessiert mich dies eher allgemein als sprachspezifisch. Geben Sie einfach an, welche Sprache Sie verwenden, wenn Ihre Lösung sprachspezifisch ist.)

Jon Hopkins
quelle

Antworten:

23

Es ist ungefähr das gleiche wie beim Speichern von Passwörtern. Sie sollten einen eindeutigen geheimen Schlüssel haben, der nur dem Generator und Ihrem Programm bekannt ist. Verwenden Sie diese Taste, um die Details (Benutzername, Kennwort, Organisation usw.) zu bearbeiten und dann zu hacken. Sie können dann in Base32 eine einfache Übertragungscodierung für den Hash durchführen oder ihn einfach in eine Hex-Zeichenfolge verschieben, wenn Sie sich nicht für ein Format interessieren.

Gibt es irgendwelche Fallstricke, auf die Sie bei der Implementierung achten sollten?

Geheimnisse geheim halten und trennen. Machen Sie Ihre Implementierung verbesserungsfähig. Wenn jemand kaputt geht, können Sie die Implementierung leicht ändern? Eine übliche Implementierung in Desktop-Anwendungen besteht darin, einen Remote-Server zum Überprüfen der Lizenz zu verwenden. Dadurch wird die Möglichkeit ausgeschlossen, dass jemand einen Hash oder den Algorithmus zurückentwickelt, indem er die Anwendung selbst überprüft.

Josh K
quelle
11
BASE32 zu codieren ist der Standard. Es ermöglicht eine einfache Benutzereingabe;) (Base32: Auswahl von Buchstaben und Zahlen, die sehr unterschiedlich sind. Zum Beispiel sind 0 und O nicht in der Reihenfolge)
1
@ Pierre: Ich wusste das nicht, gute Informationen!
Josh K
10

Dieselbe Frage wurde auf SO gestellt und die akzeptierte Antwort ist ziemlich gut. Der allgemeine Kern ist:

  • Nimm den Namen des Benutzers
  • Konzentrieren Sie den Benutzernamen und den geheimen Schlüssel sowie den Hash mit (zum Beispiel) SHA1
  • Packen Sie den SHA1-Hash als alphanumerische Zeichenfolge aus. Dies ist der "Product Key" des einzelnen Benutzers.
  • Führen Sie innerhalb des Programms denselben Hash durch und vergleichen Sie ihn mit dem Produktschlüssel. Wenn gleich, OK.
Walter
quelle
1

Meine bevorzugte Methode besteht darin, 10.000 zufällige Lizenzzeichenfolgen zu generieren, SHA1 (oder MD5) -Hashs oder HMAC-Hashs zu erstellen und SHA1 / MD5-Hashs ganz oder teilweise in die ausführbare Datei selbst aufzunehmen. Wenn eine Lizenzzeichenfolge eingegeben wird, verwenden Sie einfach verschleierten Code, um den Hash der Zeichenfolge zu generieren und ihn mit den in der Liste aufgeführten zu vergleichen. Wenn es übereinstimmt, ist es eine gültige Lizenz. Wenn Ihnen die Lizenzen ausgehen, veröffentlichen Sie eine neue Version mit mehr Zeichenfolgen.

Es reicht aus, nur die ersten 96-Bit des SHA1-Hashs zu verwenden. 10.000 Lizenzen würden also weniger als 120 KB benötigen. Eine algorithmische Erzeugung von Schlüsseln oder die Erzeugung eines Schlüsselgenerators wäre unmöglich. Die einzige Sicherheitslücke, über die Sie sich Sorgen machen müssen, ist Reverse Engineering oder Bypassing. (Oder jemand, der seinen gültigen Schlüssel verteilt.)

David Schwartz
quelle