Serial Key prüfen -> String mit privatem Key und dann abgleichen; Summe = 0

beta20

Top Contributor
Hallo,

ich würde gerne folgendes prüfen:

1)
Bevor meine Installation des Programms gestartet werden kann, möchte ich gerne einen Check machen, ob der Serial Key überhaupt valide ist.
Hierzu stelle ich mir folgendes vor:
a) Serial Key wird eingegeben
b) Serial Key wird mit einem privaten Schlüssel versehen, den der User natürlich nicht weiß, steckt irgendwo dann im Code meiner Installation
c) Nun die Frage: wie kann ich diesen Check dann machen??
Ich hätte mir irgendwie was vorgestellt wie: den privaten Schlüssel zu subtrahieren und dann komme ich immer auf eine Zahl oder sowas. Wenn diese Zahl die gewünschte ist, dann ist der Key gültig. Z.B. die Summe muss immer 0 sein oder ähnliches (Bei Strings wird das Subtrahieren dann natürlich schwierig). Hat hier jemand eine Idee?


________
Nach der Installation kommt dann natürlich noch die eigentliche Aktivierung, was dann Online gemacht wird. (Das ist dann aber wieder ein anderes Thema...)

Danke für jede Hilfe.
 
Wozu soll das gut sein ? Dann stelle ich den Serial key ins Internet und jeder kann sich den runterladen und Dein Programm benutzen.

Reine Zeitverschwendung

Gruß

Claus
 
Ich gebe Thallius diesbezüglich Recht. Haben wir das nicht schon einmal etwas durchgekaut?

Also der Check eines Serial-Keys kann bereits relativ trivial gemacht werden und mir fallen gleich eine ganze Reihe an Möglichkeiten ein. Ohne Dir zu nahe treten zu wollen: Wieso investierst Du so viel Energie in sowas? Ich würde die Zeit in die Applikationen stecken und dafür sorgen, dass die Leute meine Applikation nutzen wollen. Spätere Versionen kann ich ggf. schützen, wenn es sich lohnt, das zu schützen.

Möglichkeiten, die mir so durch den Sinn gehen:
- Wenn es mit private / public key sein soll, könnte der Key einfach etwas sein, denn Du signiert hast. Also Name und Key - Name signiert ist der Key. Zum signieren brauchst Du den private key, Unterschrift prüfen geht mit public key.
- Einfache mathematische Formeln - hier wäre also z.B. eine Checksumme denkbar. Das lässt sich auch etwas komplizierter machen mit mehreren Checksummen oder mit der Einberechnung von externen Konstanten. Generell ist hier der Ansatz, dass Du eine Formel hast, für die gelten muss:
a) Du musst die Formel einwandfrei berechnen (prüfen) können.
b) Du musst in der Lage sein, jederzeit neue Versionen zu erstellen.
Also ein kleines, ganz einfaches Beispiel wäre:
Formel: (x1-p1) *127 + (x2-p2) *371 = (x3-p3)
Key: x1-x2-x3
Produkt: p1-p2-p3
Beispielprodukt: 3-2-1
Beispielkey: 4-3-499
Das nur als eine einfache kleine Spinnerei um zu zeigen, wie trivial das sein kann.

Im Netz wird es noch viel mehr Ideen geben.
 
Danke zunächst mal.
Wäre es denn nicht auch möglich:

1. User kauft Software
2. Aus Emailadresse, Datum und dem private Key (der auf dem Webserver liegt, der den Serial Key erzeugt) wird die Serial Key generiert.
3. User will nun Software installieren. In meinem Installer, die der User ausführt, ist ebenfalls der private Key drin (natürlich nicht sichtbar für den User)
4. Serial Key wird nun mit dem private Key wieder entschlüsselt und gibt eben true oder false zurück.
-> Falls der Key falsch ist (also demnach auch der private Schlüssel nicht passt), dann ist die Serial Nummer falsch.

Ist das Konzept ebenfalls ok?
 
Also wenn, dann nutzt ein Asymetrisches Verfahren und das bedeutet, dass Du einen public und einen private key hast. Die Namen sagen dabei ja schon alles aus: Der eine ist public und den gibt man raus und der andere ist private und den gibt man nicht raus.

Also würde der private Key etwas signieren (z.B. Emailadresse) und diese Signatur wäre dann der Key.
Die Signatur ist mit dem public key überprüfbar.
 
hm, steige da leider noch nicht ganz durch.
Hast Du einen Code, speziell auch:

a) Wie muss der Code auf meinem Webserver (Generierung des Serial Key) programmiert werden?
b) Was muss beim Installer programmiert sein?

Wäre wirklich sehr nett
 
Ich brauche doch aber keinen Random??
Code:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);

Der private Key soll doch immer gleich sein?
So wie ich es verstanden habe ist dann:

a) Privater Schlüssel auf meinen Webserver
b) öffentlicher Schlüssel in der Installationsdatei

Hm die Beispiele sind etwas irreführend, was z.B. ist "test ? (in deinem zweiten Link)
Code:
byte[] data = "test".getBytes("UTF8");
 
Ja, die Schlüssel generierst Du nur ein einziges Mal und speicherst diese dann. Da ist Dein Verständnis richtig. In dem Beispiel geht es ja nur darum, schnell etwas zu zeigen, das lauffähig ist.

"test" ist der String, der signiert wird. Das könnte also die Email-Adresse bei Dir sein.
 

Neue Themen


Zurück
Oben