# Lizenz - welche Möglichkeiten?



## internet (17. Mai 2015)

Hallo zusammen, 

ich möchte eine Software vertreiben.
Ich kenne mich leider auf diesem Gebiet überhaupt nicht aus.
Wie kann ich sicherstellen, dass der User eine Lizenz gekauft hat?
Welche Möglichkeit gibt es?

Über Tipps freue ich mich sehr.
Danke Euch.


----------



## dennisbauer (19. Mai 2015)

Ausgehend von dem schönen, veralteten Modell alter Spieleserien, beginnt deine Reise durch die Welt der Lizenzierung bei "Serial Keys".
Einfach Schlüssel, die mithilfe eines Algorithmus oder einer Generatormatrix erstellt wurden und mit einer Rückumwandlung zu einem Ergebnis führen, welches als "hat eine Lizenz" oder als "hat keine Lizenz" ausgewertet werden kann.

Ich bin kein Profi auf diesem Gebiet und habe mich nur beiläufig mit einigen meiner Projekten mal mit dem Thema Lizenzierung befasst.

Momentan geht der Trend sehr stark in Richtung Online-Verifikation, was bei falschen Einstellungen unsicherer ist, als wenn man eine Strategie mit seriellen Schlüsseln verfolgt.


Mithilfe von Vorratsdatenspeicherung kannst du bei Softwarestart einen Eintrag in deinen Datenbanken ablegen, dass diese IP gerade die Software gestartet hat, einen gewissen Zeitrahmen abwarten, ob eine Lizenz gesendet wurde und wenn nicht hast du einen potenziellen Kandidat, der deine Software illegal nutzt. Ob das ganze auch rechtlich vertretbar ist, ist hier erstmal außen vor.


Ich muss zugeben, man findet sehr wenig darüber im Netz, wenn man nicht weiß, wonach man eigentlich wirklich sucht.


----------



## internet (19. Mai 2015)

Danke für die Antwort.
Da der User nich zwingend online sein muss, scheidet dies eher aus.

Wie genau funktioniert die Lizenzierung bei "Serial Keys" ?
Irgendwo muss ja sichergestellt werden, ob 
a) der Key valide ist 
b) der Key schon Mal verwendet wird (hier fällt mir aber erst mal nichts ein, außer per Internet eine Abfrage zu machen) ?

Danke vorab


----------



## Tobse (19. Mai 2015)

internet hat gesagt.:


> Irgendwo muss ja sichergestellt werden, ob
> a) der Key valide ist


Hier ist die Kryptographie dein Freund. Der einfachere Weg sind Hashfunktionen. Der Schwierigere (aber sicherere) geht über Signierung mit Asymmetrischer Kryptographie.



internet hat gesagt.:


> b) der Key schon Mal verwendet wird (hier fällt mir aber erst mal nichts ein, außer per Internet eine Abfrage zu machen) ?


Es GIBT keine andere Möglichkeit, als einen Zentralen Server darüber zu Informieren. Das muss aber nicht zwingend per INternet funktionieren - Bei WinXP lief es z.B. so:

1. Lizenzschlüssel eingeben
2. Computer generiert einen Langen Zahlensalat (Aus dem Schlüssel und den MAC-Addressen der relevanten Computerkomponenten)
3. Diesen gibt man mei MS auf der Webseite ein oder Stellt ihn Telefonisch durch
4. Man bekommt einen Aktivierungscode

Hier liegt die Sicherheit darin, dass das OS auf dem Computer des Anwenders sicherstellen kann, dass du Microsoft den ursprünglichen Zahlensalat mitgeteilt hast und Microsoft mit der Nutzung einverstanden ist. Auch hier wird viel Asymmetrische Kryptographie benutzt.


----------



## dennisbauer (19. Mai 2015)

Um ein wenig aus der Informationscodierung herauszupicken, hilft dir sicherlich die Handhabung mit Generatormatrizen und Fehlerbehebung. Dies dient zur Sicherheit bei Übertragungen, um eventuell fehlerhafte Bits zu korrigieren. Die Theorie passt aber auch perfekt für solch eine Anwendung.

Linearer Code â€“ Wikipedia Hier finden sich Informationen darüber, wie man solch Matrizen inkl. Checkmatrizen erstellt und berechnet. Wenn du hier extrem große Ausgangspolynome verwendest, solltest du zumindest halbwegs vernünftige Ergebnisse in Sachen Sicherheit erhalten, die mit gängiger Software und seriellen Schlüsseln mithalten kann. Dass jemand dise Matrizen jedoch irgendwie herausfindet und z.B. einen Keygenerator schreibt, der Schlüssel anhand dieser Matrix erzeugt, bist du jedoch, egal mit welcher Variante an seriellen Schlüsseln anhand Offline-basis,  nie auf der absolut sicheren Seite.


----------



## BuckRogers (20. Mai 2015)

Was für Software willst du denn verschiffen?


----------



## Thallius (20. Mai 2015)

Mir stellt sich immer noch die Frage wieso man sich als Java Entwickler überhaupt Gedanken über einen Kopierschutz macht, wenn jeder Möchtegern-Hacker in 5 Min diesen Entfernt hat?

Gruß

Claus


----------



## Tobse (20. Mai 2015)

dennisbauer hat gesagt.:


> Um ein wenig aus der Informationscodierung herauszupicken, hilft dir sicherlich die Handhabung mit Generatormatrizen und Fehlerbehebung. Dies dient zur Sicherheit bei Übertragungen, um eventuell fehlerhafte Bits zu korrigieren. Die Theorie passt aber auch perfekt für solch eine Anwendung.
> 
> Linearer Code â€“ Wikipedia Hier finden sich Informationen darüber, wie man solch Matrizen inkl. Checkmatrizen erstellt und berechnet. Wenn du hier extrem große Ausgangspolynome verwendest, solltest du zumindest halbwegs vernünftige Ergebnisse in Sachen Sicherheit erhalten, die mit gängiger Software und seriellen Schlüsseln mithalten kann. Dass jemand dise Matrizen jedoch irgendwie herausfindet und z.B. einen Keygenerator schreibt, der Schlüssel anhand dieser Matrix erzeugt, bist du jedoch, egal mit welcher Variante an seriellen Schlüsseln anhand Offline-basis,  nie auf der absolut sicheren Seite.


Deswegen Asymmetrische Kryptographie. Die kann so schnell keiner umgehen.




Thallius hat gesagt.:


> Mir stellt sich immer noch die Frage wieso man sich als Java Entwickler überhaupt Gedanken über einen Kopierschutz macht, wenn jeder Möchtegern-Hacker in 5 Min diesen Entfernt hat?


Es gibt Obfuscator etc; man kann auch Relevante, Platformunabhängige Teile der Applikation (z.B. unumgängliche Algorithmen etc) zsm. mit dem Kopierschutz in einer nativen Sprache implementieren (siehe JNI).

Aber wenn man bedenkt, dass die Hacker regelmäßig auch die Kopierschutzmechanismen von riesen Softwarehäußern wie Adobe oder EA knacken, ist es eigentlich Hoffnungslos.


----------

