vote up 0 vote down
star

Ich will mein Programm schützen dadurch, dass es aktiviert werden soll. Per Telefon, Fax oder Email. Das erste was mir einfällt ist eine Eingabe des Aktivierungsschlüsseln, der als Antwort auf die Anfrage des Kunden kommt. Welcher Verfahren ist dafür empfehlenswert ?

Danke.

flag

2 Answers

vote up 1 vote down

Ein asymmetrisches Kryptoverfahren wie z.B. RSA ist gut für Aktivierungsschlüssel geeignet. Dabei enthält die Software den Public Key des Softwareherstellers. Im ersten Schritt erzeugt die Software auf Basis von lokalen Informationen einen Registrierungsschlüssel. Dieser kann z.B. folgende Information enthalten:

  • Name des Benutzers/Firma und weitere persönliche Information
  • MAC oder IP Adressen zur Identifizierung des PCs
  • Zufallszahl zur Identifizierung einer Installation der Software
  • Systemresourcen (z.B. je nach Lizenzmodell Anzahl der Prozessoren etc.)

Dieser Registrierungsschlüssel wird dann zum Softwarehersteller übertragen. Dabei kann optional eine Hashfunktion eingesetzt werden, um die Datenmenge so gering zu halten, dass man sie auch per Telefon weitergeben kann. Der Softwarehersteller prüft die Daten (sofern ungehashed) und die Bestellung/Bezahlung des Kunden und erstellt dann für den gelieferten Registrierungsschlüssel mit seinem Private Key einen Aktivierungsschlüssel.

Der Aktivierungsschlüssel kann innerhalb der Software mit dem Public Key entschlüsselt werden und gegen die lokalen Daten geprüft werden, z.B. ein Vergleich der IP Adressen.

Sowohl Registrierungsschlüssel als auch Aktivierungsschlüssel werden häufig durch Hashfunktionen verkürzt, kodiert und in Blöcken für leichtere Lesbarkeit ausgegeben, wobei die folgenden Zeichen verwendet werden: A B C D E F G H J K L M N P Q R S T W X Y Z 3 4 7 9

Vorteilhaft an diesem Verfahren ist, dass der zurückgelieferte Aktivierungsschlüssel auch zusätzliche Information enthalten kann wie z.B. zu aktivierende Module oder Zeitstempel für Evaluierungszeiträume, die dann von der Software geprüft und/oder angezeigt werden können.

Häufig werden Lizenzdateien verwendet, welche die freizuschaltenden Produktfeatures im Klartext enthält und digital Signiert ist. Diese kann man zwar nicht mehr so leicht per Telefon oder Fax versenden, haben dafür aber den Vorteil dass sie einfacher zu verstehen und zu warten sind. Diese werden bei der Bestellung/Bezahlung gleich mitgeneriert. Der Nachteil ist allerdings, dass diese dann nicht an später gelieferte Information gebunden ist, wie z.B. eine einmalige Ziffer pro Installation oder MAC-Adresse der Netzwerkkarte.

Edit:

Für verkürzte Aktivierungskeys kann eine einfache Zufallszahl eingesetzt werden:

public byte[] generateRegistrationKey() {
	// Zufälliger Seed pro Installation
	long number = random.nextLong() + Integer.MAX_VALUE;
	BigInteger big = BigInteger.valueOf(number);

	// Mehr Information in Zufallszahl kodieren
	if (Runtime.getRuntime().availableProcessors() == 1) {
		big = big.clearBit(CPU_MULTI_CORE);
	} else {
		big = big.setBit(CPU_MULTI_CORE);
	}

	// In lesbare Form konvertieren:
	String raw = big.toString(Character.MAX_RADIX);
	System.out.println("Aktivierungskey: " + raw);
	// Beispiel: "Aktivierungskey: mkmslufz31kb"
	return raw.getBytes();
}
link|flag
Yeap. Habe auch als erstes über diese Lösung nachgedacht. Ich habe mit Hilfe RSA, wie Sie beschrieben haben, einen aktivierungsschlüssel generiert und dann mit base32 kodiert, damit man es zB auch per Telefon/Fax übertragen kann. Leider aber bekomme ich Aktivierungsschlüsseln, die über 30-40 Zeichen lang sind...und das ist natürlich nicht besonders einfach einzugeben. Haben Sie vielleicht einen Tipp, wie man den Schlüssel verkürzen könnte ? :) Vielen Dank! – Igor Nov 2 at 12:55
Sehr gut! Kleine Anmerkung: Bei längeren Schlüsseln ist es sinnvoll diesen alle n Zeichen zu trennen. Z.B. mit einem Bindestrich. Das Eingabefeld für den Schlüssel wird dann dementsprechend gesplittet. Das erleichtert die Eingabe ganz erheblich. Es ist ansonsten schwer bei einem 30-40 Zeichen langem Schlüssel den Überblick zu behalten an welcher Stelle man gerade war. Siehe Microsoft, z.B. – iknowit Nov 2 at 18:25
Mit 30-40 Zeichen war ich wohl voreilig :) RSA Produziert Blöcke von 128byte... in base32 sind es über 200 Zeichen, in base64 sind es 172 zeichen. Das einzutippen kann man keinem zutrauen :( Das kann man keinem Nutzer zutrauen... wissen Sie vllt. wie man da die Situation retten kann ? – Igor Nov 3 at 14:35
vote up 0 vote down

Statt RSA kann auch einfach ein Hash genommen werden. Diesen kann man evtl. noch kürzen, um z.B. auf 16 oder 20 Zeichen zu kommen. Mögliche Eingabeparameter wurden ja schon genannt.

link|flag

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.