Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Gedankenspiel: möglichst sicherer Kopierschutz? (https://www.delphipraxis.net/79272-gedankenspiel-moeglichst-sicherer-kopierschutz.html)

Phoenix 19. Okt 2006 13:03


Gedankenspiel: möglichst sicherer Kopierschutz?
 
Ich weiss, das Thema gabs schon zigfach, und ich weiss auch: Einen sicheren Kopierschutz kann es nicht geben. Was jedoch geht, ist den Aufwand für den Angreifer möglichst hoch zu setzen.

Mir geht es darum eine, Idee auf Durchführbarkeit zu prüfen, wie man dieses Ziel mit möglichst wenig eigenem Aufwand realisieren könnte.

Was will ich erreichen?
Ziel soll es sein, eine Lizenz auf einen bestimmten Rechner festzulegen. Das Kopieren der Software soll ohne Funktionalitätseinbussen nicht möglich sein.

Wie will ich es erreichen?
Basis des mir vorschwebenden Verfahrens soll ein Public Key Kryptosystem sein.

Dabei gelten folgende Randbedingungen:
  • Wir befinden uns in der .NET - Welt
  • Der Private Key soll abhängig vom Rechner jedes mal neu berechnet und NIE irgendwo abgelegt werden
    Das heisst: Der Key muss auf einem Rechner jedes mal berechnet werden und immer das gleiche Ergebnis geben. Wird die Software auf einem anderen Rechner ausgeführt ändert sich entsprechend der Key.
  • Ein Teil der Software muss mit dem Public Key des Rechners verschlüsselt abgelegt werden
    Dies erfordert freilich ein eigenes, nur für diesen Rechner verschlüsseltes Assembly.
  • Eine 'Aktivierung' der Lizenz soll über das Internet möglich sein

Idee: Mit einem gültigen (gekauften) Lizenzschlüssel kann einmalig(!) von der Software das verschlüsselte Assembly per Webservice abgerufen werden. Hierzu wird der Public Key und der Lizenzschlüssel übertragen und das verschlüsselte Assembly zurückgeliefert. Ist der Key verbraucht muss ein neuer Key angefordert werden (z.B. wenn die Software von einem Rechner auf einen anderen Umgezogen wird).

Keygens greifen nicht, da ein erzeugter Key in einer Datenbank eingetragen wird und beim abrufen des Assemblys durch den Webservice geprüft und danach gelöscht wird. Somit wird sichergestellt, dass nur gültige und bezahlte Keys auch ein Assembly bekommen.

Das Assembly mit den entsprechenden Funktionalitäten liegt also nur für den entsprechenden Rechner verschlüsselt auf der Platte. Die Applikation liest das Assembly ein, entschlüsselt es mit dem Private Key und läd es. Diese Prozedur ist zwingend, ein unverschlüsseltes Assembly kann nicht geladen werden.

Die Applikation selber ist ein signiertes Assembly, so dass Modifikationen an der Executable dazu führen, dass die Anwendung nicht mehr gestartet werden kann.


Was haltet ihr von diesem Konzept? Insbesondere spreche ich freilich unsere Spezialisten an ;-)

chaosben 19. Okt 2006 13:18

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Eines vorneweg ... ich bin kein Experte, bloß weil ich als erster antworte :-D

Mir ist hier
Zitat:

Zitat von Phoenix
Der Private Key soll abhängig vom Rechner jedes mal neu berechnet und NIE irgendwo abgelegt werden

folgender "Umweg" eingefallen:

Ich (bin einer Böser ;) ) und kaufe mir die Software einmal. Per Debugging bekomme ich heraus wo der private Schlüssel generiert wird. Per DLL-Injection erhalte ich Zugriff auf den Prozess und lese den generierten Schlüssel aus. Dieser wird gespeichet und zusammen mit einem Runtime-Patch (wieder per DLL-Injection) immer "als Konstante" zurückgegeben. -> Imho: geknackt.

Oder?

Ghostwalker 19. Okt 2006 13:46

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Das erste Problem, das ich sehe, ist ermstmal einen Rechner eindeutig zu identifizieren. Woran machst du fest, das es genau dieser Rechner ist ? Wenn ich das Mainboard austausche ist es dann ein neuer Rechner oder noch der Alte ?


Der Kopierschutz sollte ja auch noch für den "ehrlichen" Kunden tragbar sein. Ich entsinne mich nur des Chaos, als XP auf den Markt kam....

Luckie 19. Okt 2006 13:48

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Ein weiteres Problem ist die unbedingt nötige Internetverbindung. Habe ich keine, kann ich das Programm nicht nutzen.

markusj 19. Okt 2006 14:18

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Zitat:

Zitat von Phoenix
Keygens greifen nicht, da ein erzeugter Key in einer Datenbank eingetragen wird und beim abrufen des Assemblys durch den Webservice geprüft und danach gelöscht wird. Somit wird sichergestellt, dass nur gültige und bezahlte Keys auch ein Assembly bekommen.

Risiko: Ein Key kann doppelt von dir Ausgegeben werden, keine eindeutige Zuordnung Key-Kunde ... Besser wäre ein "Used"-Flag, welches gesetzt wird.

mfG

Markus

Phoenix 19. Okt 2006 15:04

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Zitat:

Zitat von chaosben
Per DLL-Injection erhalte ich Zugriff auf den Prozess und lese den generierten Schlüssel aus. Dieser wird gespeichet und zusammen mit einem Runtime-Patch (wieder per DLL-Injection) immer "als Konstante" zurückgegeben. -> Imho: geknackt.

Soweit ich weiss, ist das bei .NET - Programmen nicht möglich. Oder gibts da Gegenbeweise?

Zitat:

Zitat von Luckie
Ein weiteres Problem ist die unbedingt nötige Internetverbindung. Habe ich keine, kann ich das Programm nicht nutzen.

Das ist kalkuliertes Risiko. Alternativ kann man sich eine schriftliche Aktivierung vorstellen, bei der der Kunde seinen Lizenzkey und seinen Public Key ausdruckt und einschickt und ihm das für ihn verschlüsselte Assembly auf CD zugeschickt wird.

Zitat:

Zitat von markusj
Risiko: Ein Key kann doppelt von dir Ausgegeben werden, keine eindeutige Zuordnung Key-Kunde ... Besser wäre ein "Used"-Flag, welches gesetzt wird.

Das ändert m.M.n. nichts an der Sicherheit des Systems. Durch das löschen bin ich mir zu 100% sicher, dass die nächste Aktivierungsanfrage keinen Datensatz mehr finden wird und demnach auch keine Aktivierung zulässt.

Nicolai1234 19. Okt 2006 15:20

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Zitat:

Zitat von Luckie
Ein weiteres Problem ist die unbedingt nötige Internetverbindung. Habe ich keine, kann ich das Programm nicht nutzen.

Da ist die Frage, bis wann man darauf noch Rücksicht nimmt. (natürlich unter Berücksichtigung der Zielgruppe)


Zitat:

Zitat von Ghostwalker
Das erste Problem, das ich sehe, ist ermstmal einen Rechner eindeutig zu identifizieren. Woran machst du fest, das es genau dieser Rechner ist ? Wenn ich das Mainboard austausche ist es dann ein neuer Rechner oder noch der Alte ?

Evtl. könnte man das am Key des OS festmachen. Das wäre wenigstens für alle XP User relativ sicher. Natürlich gibt es auch da viele illegale Kopien, aber das wird auch immer weniger (jedenfalls wenn ich mich da in meinem Bekannten-/Freundeskreis umgucke)

Khabarakh 19. Okt 2006 15:36

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Nett, hab mir selbst auch schon einmal überlegt, ob .Net nicht eine/die Lösung des Schwarzkopierens (ich hoffe, niemand wird hier das Wort "Raubkopieren" verwenden -.- ) sein könnte.


Zitat:

Zitat von Phoenix
Zitat:

Zitat von Luckie
Ein weiteres Problem ist die unbedingt nötige Internetverbindung. Habe ich keine, kann ich das Programm nicht nutzen.

Das ist kalkuliertes Risiko. Alternativ kann man sich eine schriftliche Aktivierung vorstellen, bei der der Kunde seinen Lizenzkey und seinen Public Key ausdruckt und einschickt und ihm das für ihn verschlüsselte Assembly auf CD zugeschickt wird.

Vielleicht gäbe es in Zukunft auch die Möglichkeit, die Signierung gleich beim Kauf durchzuführen (Public-Key mitgebracht auf einem Blatt/Magnetkarte/RFID-Chip/... ;) ). Wobei wie schon von Nicolai erwähnt in dieser Zukunft das Signieren per Internet sowieso kein Problem mehr darstellen könnte.

Phoenix 19. Okt 2006 16:08

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Offtopic:
Zitat:

Zitat von Khabarakh
(ich hoffe, niemand wird hier das Wort "Raubkopieren" verwenden -.- )

Warum eigentlich nicht? Wer meine Software illegal vervielfältigt 'raubt' mir meine Einnahmen. Das entzieht mir letzlich die Lebensgrundlage. Wenn das zu viele machen und ich nichts mehr verdiene muss ich mir überlegen, ob es sich noch lohnt das weiterzumachen. Meine Pläne gegen später vielleicht sogar mal Mitarbeiter einzustellen wären dann für die Katz' (nein, nicht Du, Sakura). Das vernichtet letzlich sogar Arbeitsplätze. Von daher sehe ich nicht ein, das hier auf die leichte Schulter zu nehmen und als Kavaliersdelikt abzustempeln. Das ist m.E. eine massive Straftat und sollte auch so behandelt werden. Schliesslich steht da meine Existenz auf dem Spiel.

Ende Offtopic ;-)

Olli 19. Okt 2006 16:16

Re: Gedankenspiel: möglichst sicherer Kopierschutz?
 
Zitat:

Zitat von Phoenix
Der Private Key soll abhängig vom Rechner jedes mal neu berechnet und NIE irgendwo abgelegt werden
Das heisst: Der Key muss auf einem Rechner jedes mal berechnet werden und immer das gleiche Ergebnis geben. Wird die Software auf einem anderen Rechner ausgeführt ändert sich entsprechend der Key.

Woraus willst du ihn berechnen? Der Computername kann sich genau wie eine SID oder die Hardware jederzeit ändern. Allerdings bist du mit der SID noch auf einer relativ sicheren Seite.

Zitat:

Zitat von Phoenix
Ein Teil der Software muss mit dem Public Key des Rechners verschlüsselt abgelegt werden
Dies erfordert freilich ein eigenes, nur für diesen Rechner verschlüsseltes Assembly.

Wer hat überhaupt den Private und den Public Key? Wenn ich die Software einmal entschlüsselt habe (und die muß ja entschlüsselt werden um zu laufen), ist der Schutz dahin, weil ich dann theoretisch auch eigene Assemblies erstellen könnte, oder?

Zitat:

Zitat von Phoenix
Keygens greifen nicht, da ein erzeugter Key in einer Datenbank eingetragen wird und beim abrufen des Assemblys durch den Webservice geprüft und danach gelöscht wird. Somit wird sichergestellt, dass nur gültige und bezahlte Keys auch ein Assembly bekommen.

Ab wann gilt ein Assembly als übertragen? Verbindungen können abbrechen.

Zitat:

Zitat von Phoenix
Das Assembly mit den entsprechenden Funktionalitäten liegt also nur für den entsprechenden Rechner verschlüsselt auf der Platte. Die Applikation liest das Assembly ein, entschlüsselt es mit dem Private Key und läd es. Diese Prozedur ist zwingend, ein unverschlüsseltes Assembly kann nicht geladen werden.

Nochmal, wo sind Public und Private Key gelagert?

Zitat:

Zitat von Phoenix
Die Applikation selber ist ein signiertes Assembly, so dass Modifikationen an der Executable dazu führen, dass die Anwendung nicht mehr gestartet werden kann.

Das verlagert nur das Problem.

Zitat:

Zitat von Phoenix
Offtopic:

Zitat:

Zitat von Phoenix
Warum eigentlich nicht? Wer meine Software illegal vervielfältigt 'raubt' mir meine Einnahmen. Das entzieht mir letzlich die Lebensgrundlage. Wenn das zu viele machen und ich nichts mehr verdiene muss ich mir überlegen, ob es sich noch lohnt das weiterzumachen. Meine Pläne gegen später vielleicht sogar mal Mitarbeiter einzustellen wären dann für die Katz' (nein, nicht Du, Sakura). Das vernichtet letzlich sogar Arbeitsplätze. Von daher sehe ich nicht ein, das hier auf die leichte Schulter zu nehmen und als Kavaliersdelikt abzustempeln. Das ist m.E. eine massive Straftat und sollte auch so behandelt werden. Schliesslich steht da meine Existenz auf dem Spiel.

Lassen wir mal die Kirche im Dorf. Es mag ja sein, daß es eine unangenehme Sache ist, wenn deine Software raubkopiert wird - insbesondere bei einem kleinen Unternehmen. Das Problem ist wohl immer wieder (finde ich zumindest) das Preis-Leistungs-Verhältnis. Oft genug werden popelige Programme für vergleichsweise hohe Summen vertickt, wohingegen gute andere Software zum Teil komplett frei erhältlich ist (OpenOffice.org, GIMP, VMWare Server, Virtual PC ...). Klar muß da eine Abwägung geschehen, aber es ist eben manchmal besser 1000 Stück für 10 Euro zu verkaufen als 10 Stück für 100 Euro. Auch wird zu oft der Privatanwender vernachlässigt und ihm werden keine kostengünstigeren Alternativen angeboten.

Zuguterletzt ist auch die Frage welche Zielgruppe du bedienst. Wird dein Programm sowieso nur von Autohäusern eingesetzt, wird selten ein Cracker auch nur dein Programm als mögliches Ziel ansehen. Cracker machen es aus Spaß und um sich einen Namen in der Szene zu machen ... mit Programmen die keine weite Verbreitung haben, ist das nicht möglich. Nehmen wir aber mal an, dein Programm wäre ein Massenprodukt und auch für diesen Einsatz bestimmt. Ist es wirklich so cool und so dramatisch neu, daß es ein lohnendes Ziel für einen Cracker sein könnte?

Das ist eben das Problem bei etwas was immateriell ist und deshalb beliebig oft ohne Qualitätsverlust kopiert werden kann. "Massive Straftat" halte ich doch für starken Tobak ...

Zitat:

Zitat von Phoenix
Ende Offtopic ;-)



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz