Wie implementiere ich ein einfaches Lizenzierungsschema? [geschlossen]

8

Keine Beleidigung beabsichtigt, aber diskutieren wir nicht, dass Lizenzsysteme geknackt werden können (ich weiß das) und dass der Rückgriff auf das Gesetz normalerweise eine bessere Abschreckung ist (vielleicht in Ihrem Land, aber überhaupt nicht).

Nicht meine Wahl - Mir wurde gesagt, dass ich Lizenzen einführen sollte, gerade gut genug, um Gelegenheits-Hacker fernzuhalten.

Was das etwas anders macht, ist, dass die PCs, auf denen die Software ausgeführt wird, nicht immer Internetzugriffsprivilegien haben werden.

Wenn jemand das Produkt kauft, kann ich Lizenzinformationen darin bauen & amp; Liefern Sie eine Installations-CD. Aber was passiert, wenn sie mehr Lizenzen kaufen wollen? Ich möchte nicht vor Ort sein, um die Lizenzdaten zu aktualisieren, aber sie sind möglicherweise nicht in der Lage, auf meinen Server zuzugreifen, auch nicht auf ihre.

Ich dachte daran, Lizenzen in externen (verschlüsselten) Dateien zu haben, die jeweils eine Anzahl von Lizenzen und ein Ablaufdatum enthalten. Wenn der Benutzer mehr Lizenzen kauft, kann ich eine zusätzliche Datei per E-Mail versenden. Ihre Sicherheit wird geklärt IT-Leute können es auf CD oder USB-Stick brennen und dann in das Anwendungsdatenverzeichnis kopieren.

Scheint das in Ordnung? Kannst du dir etwas besseres vorstellen? Kannst du Probleme sehen? Ich habe nicht viel Zeit, dies umzusetzen.

    
Mawg 20.11.2010, 03:16
quelle

3 Antworten

4

Das wäre in Ordnung, wenn die Lizenz viele Informationen enthält. In der Regel sind sie nicht so können sie mit einigen Schutzfunktionen in 30 bis 50 Zeichen oder so verschlüsselt werden. Diese können dann per E-Mail versendet, ausgeschnitten und eingefügt oder sogar getippt werden.

Was die Schutzschemata betrifft, ist PKV oder Partial Key Verification populär. Es gibt hier eine Reihe von Fragen zu SO, und eine Google-Suche wird eine Reihe verschiedener Sprachimplementierungen bereitstellen.

    
winwaed 20.11.2010, 03:22
quelle
2

Wenn Ihnen Crackversuche nicht besonders wichtig sind:

Erzeuge eine bestimmte Anzahl von völlig zufälligen Schlüsseln (ich weiß nicht ... sage 10.000 wegen dieses Beispiels). Hash jeden dieser Schlüssel mit SHA-1.

Fügen Sie in Ihrem Programm ein Array ein, das die SHA-1-Hashwerte enthält, z. B .:

%Vor%

Wenn der Benutzer eine neue Lizenz (oder ein Paket von Lizenzen) kauft, geben Sie ihm die entsprechende Anzahl an Schlüsseln, scratchen Sie die Schlüssel aus der Liste, und das ist das.

Wenn ein Benutzer einen Schlüssel in die App eingibt, hash es und iteriere die Liste. Wenn Sie den Hash finden, sind Sie gut zu gehen. Wenn Sie dies nicht tun, ist der Schlüssel falsch / nicht autorisiert.

Vorteile:

  • Schlüssel können beliebig lang und komplex sein.
  • Wenn jemand SHA-1 rückgängig machen kann, hat er bessere Dinge zu tun, als deine App zu brechen.
  • Einfach zu implementieren.
  • Einfach zu verwalten.
  • Wenn Ihnen die Schlüssel ausgehen, geben Sie ein App-Update aus und fügen Sie neue Schlüssel am Ende der Tabelle hinzu.
  • Kein Online-Zugriff erforderlich.

Nachteile:

  • Die Leute, die freeload wollen, können Ihre Binärdatei leicht hexeditieren, um ihre eigenen SHA-1-Werte in der Tabelle festzulegen, und sie können dann die Software für sich selbst "lizenzieren".
  • Sie wissen nicht, ob Ihre zahlenden Benutzer den gleichen Schlüssel in 20 Rechnern verwenden.
  • Einfach.

Das Schema kann auf viele verschiedene Arten verbessert werden. Aber es ist ein Ausgangspunkt für dich.

    
Nik Bougalis 17.11.2011 09:58
quelle
2

Ich verwende asymmetrische Kryptographie mit elliptischen Kurven. Um einen neuen Lizenzschlüssel zu erzeugen, den Hash-Benutzernamen (oder eine E-Mail, eventuell mit angehängter App-ID), signiere den Hash mit deinem privaten Schlüssel und kodiere mit base-32, um einen schönen Schlüssel wie HQYRV-OZFNZ-M3L7B-WA644-CXLG4-D7IRD-QZ6FY-GJGTO-MEXEG zu bekommen.

Um die Lizenz zu validieren, hashen Sie den Benutzernamen wie oben und überprüfen Sie die Signatur des Hashs mit Ihrem öffentlichen Schlüssel.

Dies hat zahlreiche Vorteile: Der Schlüssel ist relativ kurz (dank der Verwendung von EC anstelle von RSA / DSA), der Schlüssel ist "zufällig", da jedes Mal ein anderer für den gleichen Benutzernamen generiert wird, und, im entscheidenden Fall, Es gibt keinen keygen-Code in der Anwendung und ein Cracker kann kein keygen schreiben, ohne den privaten Schlüssel zu erhalten.

Ich habe eine Bibliothek dafür auf GitHub: Ссылка (es ist eine Abzweigung des jetzt toten Objective-C-Projekts, ich portable C API hinzugefügt und einige andere Verbesserungen vorgenommen.)

    
Václav Slavík 18.02.2015 12:01
quelle

Tags und Links