it-swarm.com.de

Suchen nach einem Lizenzschlüssel-Algorithmus

Es gibt viele Fragen zu Lizenzschlüsseln für Stack Overflow. Aber sie beantworten diese Frage nicht.

Kann jemand einen einfachen Lizenzschlüssel-Algorithmus bereitstellen, der technologieunabhängig ist und für das Verständnis kein Diplom in Mathematik erforderlich ist?

Der Lizenzschlüssel-Algorithmus ähnelt der Verschlüsselung mit öffentlichen Schlüsseln. Ich brauche nur etwas einfaches, das in jede .NET/Java-Plattform implementiert werden kann und einfache Daten wie Zeichen verwendet. 

Antworten, die als Pseudo-Code geschrieben wurden, sind perfekt.

Wenn also eine Person eine Zeichenfolge darstellt, kann eine ergänzende Zeichenfolge generiert werden, die den Autorisierungscode darstellt. Nachfolgend finden Sie ein gängiges Szenario, für das es verwendet werden würde.

  1. Der Kunde lädt eine Software herunter, die bei der ersten Inbetriebnahme/Installation einen eindeutigen Schlüssel generiert.
  2. Software läuft während der Testphase.
  3. Am Ende der Testphase ist ein Autorisierungsschlüssel erforderlich.
  4. Der Kunde geht zur angegebenen Website, gibt seinen Code ein und erhält einen Autorisierungscode, um die Software zu aktivieren, nachdem er bezahlt hat :)

Scheuen Sie sich nicht, Ihre Antwort so zu beschreiben, als würden Sie mit einem 5-jährigen sprechen, da ich kein Mathematiker bin.

30
angryITguy

Es gibt keinen zuverlässigen Lizenzalgorithmus. Ja wirklich. Nicht einer. Für die beliebteste und teuerste proprietäre Software, die Sie kaufen können, finden Sie auch "Schlüsselgeneratoren" und gehackte Versionen, für die keine Lizenz erforderlich ist.

Anstatt sich darum zu sorgen, dass es "unzerbrechlich" ist, tun Sie einfach etwas. Ein beliebter Mechanismus besteht darin, beim Kauf nach dem Namen des Benutzers zu fragen und ihm dann einen Lizenzschlüssel zu geben, der von einem kryptographischen Hash (z. B. MD5-Summe) des Benutzernamens oder einer Variation davon abgeleitet wird. Dann fragen Sie in der Software erneut nach ihrem Namen und dem Registrierungsschlüssel (das von MD5 abgeleitete Ding). Sie prüfen, ob sie übereinstimmen, wodurch die Software aktiviert wird.

Kann das gehackt werden? Absolut. Sobald jemand herausgefunden hat, wie Sie die Lizenzschlüssel generieren, kann er seine eigenen generieren. Wenn Sie jedoch eine Datenbank mit den "offiziellen" Lizenzschlüsseln behalten, die Sie bisher erstellt haben, können Sie die Betrüger zumindest später identifizieren (vielleicht, wenn sie versuchen, "Premium" -Inhalte herunterzuladen oder so).

Aber machen Sie sich nicht so viele Gedanken darüber, dass die Hacker Ihren Code nicht knacken können. Es wird passieren, aber sie sind so winzig auf dem Markt, dass sie Ihren Gesamtumsatz nicht wesentlich beeinflussen werden.

42
tylerl

Ich benutze ein System wie dieses:

• Erstellen Sie eine Zeichenfolge aus dem Windows-Lizenzschlüssel und dem Enddatum des Testzeitraums

• Erzeugen Sie aus der Zeichenfolge einen Hash (Sha/md5)

• das Enddatum der Testversion in ein int umrechnen (z. B. Anzahl Tage)

• Der Schlüssel wird zu einem Enddatum der Testversion und zu einem Teil des Hashes

• Konvertieren Sie den Schlüssel nur in Großbuchstaben, um die Eingabe zu erleichtern

ABCD-DEFG-HIJK ...

die validierung funktioniert wie

• Schlüssel erneut in Bytes umwandeln

• Enddatum der Testversion extrahieren

• Erstellen Sie einen String aus dem Windows-Lizenzschlüssel und dem Enddatum der Testversion

• Hash

• Hash mit dem Rest des Schlüssels vergleichen

das macht es für mein Publikum schwierig genug. 

6
adrianm

Um ehrlich zu sein, ist es sinnlos, was Sie zu tun versuchen. Unabhängig davon, wie lange es dauert, ein Validierungs-, Verschlüsselungs-/Schlüsselsystem zu schreiben, schätzen Sie ungefähr die Hälfte der Anzahl, die ein Benutzer durchbricht. Auch wenn Sie die endgültige ausführbare Datei verschlüsseln. Als Verzögerungsmaßnahme oder als Weg, die Wahrscheinlichkeit zu verringern, dass Menschen Premium-Support für gestohlene Kopien erhalten, wird dies jedoch hilfreich sein. Auch zur einfachen Nachverfolgung von Käufern. Oder zum Spaß. : p

Es gibt jedoch ein paar Möglichkeiten, wie Sie damit umgehen können. Eine Menge Software verwendet einen Namen (und möglicherweise einen Firmennamen) und eine Hash-Funktion, um einen Schlüssel zu generieren. Dies hat den Vorteil, konstant zu sein (solange der Name derselbe ist, der Hash der Schlüssel ist und so der Schlüssel ist). Es ist auch ein sehr einfaches System, insbesondere wenn Sie einen bekannten Hash wie MD5 verwenden. 

hash = md5(name);

Einige schickere Apps verwenden eine interne Funktion, um einen Validierungscode zu generieren. Wenn Sie diesen und den angegebenen Namen kombinieren, können Sie einen Hash erstellen (und zurücksenden).

validCode = getCode(name);
hash = myHash(name ^ validCode);

Einige verwenden einen systembasierten Code (Windows ist ein gutes Beispiel), bei dem Hardware-Bits abgetastet werden und daraus ein Bezeichner erstellt wird. Wenn Sie den Namen oder die Geschwindigkeit des Prozessors oder etwas anderes ermitteln können, können Sie so etwas ausführen. Das einzige Problem ist, dass Systemänderungen einen Code ungültig machen können. Sie können Ihre Benutzer entweder warnen (und einen Teil des Prozesses verschenken) oder sie aus Versehen herausfinden lassen (nicht gut).

sysID = processor_name() | ram_Speed();
hash = md5(sysID & name);

Sie können eine beliebige Kombination aus Hash-Funktionen, Datenabruf, Zeichenfolgeneingaben, booleschen Operationen usw. verwenden. Zu berücksichtigen ist, dass Sie den Prozess nicht rückgängig machen müssen. Solange Sie es mit den gleichen Ergebnissen replizieren können (jede gute Hash-Funktion kann), können Sie die Hash-Ergebnisse miteinander vergleichen und sicherstellen, dass sie gültig sind. Je mehr Sie einsetzen, desto komplizierter wird es, aber desto schwieriger wird es zu knacken. 

Hoffentlich hilft das bei deiner Frage.

3
ssube

Die Antwort lautet: Nein, es gibt keinen sicheren Lizenzschlüssel-Algorithmus, für den kein mathematisches Diplom erforderlich ist.

Die besten Lizenzschlüssel sind diejenigen, die digital mit einem asymmetrischen Verschlüsselungsalgorithmus signiert sind. Sie signieren die Schlüsseldaten mit einem privaten Verschlüsselungsschlüssel und binden die Signatur in den Schlüssel ein. Die Schlüsselüberprüfung (die unter anderem die Signaturüberprüfung impliziert) erfolgt mit einem öffentlichen Schlüssel. Auf diese Weise kann niemand Lizenzschlüssel erstellen, es sei denn, er hat Zugriff auf den privaten Schlüssel, der ... privat ist. Das Problem ist, dass es sehr wenige (und schwierige) Algorithmen gibt, die ausreichend kurze Signaturgrößen aufweisen, um in einen Produktschlüssel eingebettet zu werden. RSA gehört nicht dazu (Signaturgröße für RSA512 ist 1024 Bit - zu viel). 

Sie können sich das SoftActivate Licensing SDK ansehen. Es verwendet Kryptografie mit elliptischen Kurven, um kurze, digital signierte Lizenzschlüssel zu generieren (C++/C # -Quellcode ist verfügbar).

3
Kevin Levrone

Wenn Sie einen bekannten und getesteten Algorithmus nicht wiederverwenden und versuchen, einen eigenen (mangelndes mathematisches Wissen) zu erstellen, ist dies aus Sicherheitsgründen suizidal.

Disclosure: Ich habe absolut keinen mathematischen Grad, um einen solchen Algorithmus zu erstellen, und da ich ehrlich bin, kenne ich niemanden, der ihn hat

2
Pablo Fernandez

Da jeder Algorithmus, den Sie erstellen, kaputt gehen wird, würde ich Folgendes tun:

const string secretMumboJumbo = "sdfkldafskjlfajmkldsfjaewumaskldfladkkldsfklj"

//For you to generate keys
string GenerateLicenceKey(int idNr)
{
    return Sha1Hmac(key=secretMumboJumbo, messageToEncode=idNr)
}

//For clients to check if key is valid, 
bool IsKeyValid(string key)
{
   for(int i=0;i<maxNrOfLicenceKeys;i++)
      if(key == GenerateLicenceKey(i))
         return true;
   return false;
}

Möglicherweise wird die Überprüfung zu langsam, da alle möglichen Tasten ausprobiert werden müssen. Dies kann jedoch auch eine gute Sache sein, um brutales Forcen zu vermeiden.

Die meisten Frameworks sollten eine HMAC-Funktion für SHA1 oder eine andere Hash-Funktion haben. Im schlimmsten Fall könnten Sie dies durch md5 (Schlüssel + ID) ersetzen.

Nehmen Sie diesen Algorithmus nicht zu ernst, er ist nur ein Beispiel und kann wahrscheinlich sehr leicht gebrochen werden, da der Generierungsschlüssel im Client enthalten sein muss, auch wenn er irgendwo in der Binärdatei verborgen ist.

1
bleo

Lizenzschlüssel sind meiner ehrlichen Meinung nach ziemlich nutzlos.
Was soll Ihren Kunden davon abhalten, diesen Schlüssel an andere weiterzugeben? Sicher, Sie könnten einen Lizenzschlüssel-Server einrichten, der die Anzahl der Aktivierungen aufzeichnet, aber das kostet Geld und was passiert, wenn es ausfällt oder wegfällt?

Erstellen Sie nach meiner professionellen Meinung eine Software, die für einen Benutzer eindeutig gebrandet ist (natürlich innerhalb des Programms verschlüsselt). Wenn Sie beispielsweise zu Hilfe> über die Software gelangen, zeigen Sie den Namen der Person, das Telefon und möglicherweise deren Adresse an. Auf diese Weise, wenn sie es auf eine Piraten-Site hochladen, werden andere Personen nicht nur die persönlichen Informationen dieser Kerle kennen ... sondern auch, um ihn für weitere Lizenzen in Rechnung zu stellen oder ihn zu verklagen.

0
Natalie Adams