it-swarm.dev

Bester Mechanismus zum Generieren von Lizenzschlüsseln

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

Gibt es Fallstricke, auf die Sie bei der Implementierung achten müssen?

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

35
Jon Hopkins

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 diesen Schlüssel, um die Details (Benutzername, Kennwort, Organisation usw.) zu bearbeiten und dann zu hashen. Sie können dann eine triviale Übertragungscodierung in Base32 für den Hash ausführen oder sie einfach in eine Hex-Zeichenfolge verschieben, wenn Sie sich nicht für ein Format interessieren.

Gibt es Fallstricke, auf die Sie bei der Implementierung achten müssen?

Geheimnisse geheim und getrennt halten. Machen Sie Ihre Implementierung verbesserungsfähig. Wenn jemand kaputt geht, können Sie die Implementierung leicht ändern? Eine häufige Implementierung in Desktopanwendungen ist die Verwendung eines Remoteservers zum Überprüfen der Lizenz. Dies beseitigt die Möglichkeit, dass jemand einen Hash oder den Algorithmus zurückentwickeln könnte, indem er die Anwendung selbst überprüft.

23
Josh K

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

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

Meine bevorzugte Methode besteht darin, 10.000 zufällige Lizenzzeichenfolgen, SHA1- (oder MD5-) Hashs oder HMAC-Hashs zu generieren und den gesamten oder einen Teil des SHA1/MD5-Hashs 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 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 ist ausreichend, nur die ersten 96 Bit des SHA1-Hash 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 Sicherheitsanfälligkeit, über die Sie sich Sorgen machen müssen, ist das Reverse Engineering oder das Umgehen. (Oder jemand, der seinen gültigen Schlüssel verteilt.)

1
David Schwartz