Das Prinzip von solchen Verschlüsselungs-Algorithmen ist die Nutzung von Schlüssel-Paaren durch den Einsatz von nicht umkehrbaren mathematischen Funktionen.
Das heisst, daß die Daten mit einer mathematischen Funktion verschlüsselt werden (für die es keine Umkehrfunktion geben darf!!!) aber diese mit Hilfe einer ganz anderen Funktion wieder in den Originalzustand konvertiert werden. Auf diesem Prinzip funktionieren sämtliche Kryptoverfahren.
Der Haken an der Sache ist, daß es sich hier bei um sehr hohe Mathematik handelt, die kaum jemand beherrscht, wenn er nicht gerade Mathematik studiert hat. Eine nicht umkehrbare Funktion zu entdecken ist schon eine schwierige Sache, aber dann noch eine andere, die aus Y wieder X werden lässt...
Eine weitere Problematik ist, daß ja das Programm der CPU Instruktionen gibt, die letzendlich nichts anderes sind, als maschinenfreundliche Befehle, die das bewirken, was die Befehle einer Hochsprache aussagen sollen. Man programmiert letzendlich immer in Assembler. Die ganzen Befehle, die man in Sprachen wie C oder Basic verwendet stammen letzendlich aus Bibliotheken und Headern, die den Assembler-Code für die ganzen Funktionen bereit halten. Da sich sehr viele Lowlevel-Funktionen dafür im Kernel, der Standard-Bibliothek und den Gerätetreibern befinden, wird man im Assembler-Code eines Programmes auch nur die entsprechenden Funktionsaufrufe finden statt Lowlevel-Code, der das lesen eines disassemblierten Codes erschwert. Fast alle Programme lassen sich mit dem otool-Befehl disassemblieren und der daraus erzeugte Text häufig fast so einfach nachvollziehen, wie der Quellcode des Programmes. Sämtliche Verschlüsselungstools erschweren nur das Disassemblieren des Programmes, sind aber grundsätzlich knackbar und müssen dies auch sein. Die CPU kann mit verspulten Bytefolgen nichts anfangen, worum es eine Funktion geben muß, die das Programm interpretierbar macht. Dadurch verrät jedes Programm selbst, wie es zu hacken ist. Für fast alle kommerziellen Kopierschutz-Systeme gibt es Tools, die aus dem verschlüsselten Binary eine unverschlüsselte Variante erzeugen können - früher oder später - die Hacker sind meist nur wenige Wochen hinterher.
Beim Netzwerkverkehr lassen sich die Datenströme deshalb sicher verschlüsseln, weil die Information, wie der Code codiert oder decodiert werden muß nicht durchs Netz wandern muß. Die Daten, die erklären wie verschlüsselt wird befinden sich auf Server und Klient und müssen nicht übertragen werden. Die Kommunikation basiert darauf, daß jedes Gerät dem anderen einen Schlüssel überträgt, mit dem die Daten verschlüsselt werden soll und keines von den Geräten mitbekommt, wie das andere diese wieder entschlüsseln möchte.
Was Software betrifft gibt es nur eine sichere Methode: Hardware-Dongles. Das Prinzip ist, daß durch den Einsatz des Dongles das Programm nicht mehr sich selbst erklären muß, wie sein Code in brauchbare Instruktionen zu konvertieren ist, sondern sich der Schlüssel in einem USB-Stick befindet und für den Rechner nicht abrufbar ist. Die Binärdaten des Programmes werden dabei durch den Stick geschleusst, der einfach andere Daten ausspuckt, die dann die CPU interpretieren kann. Solche Sticks sind ab ca. 50 Euro zu haben, sodaß eine Lizenz eines Programmes dann auch den entsprechenden Preis haben müsste, damit sich dies lohnt. In der Regel wird ein solcher Kopierschutz bei Programmen eingesetzt, die 1000 Euro oder mehr kosten.
Jeder Programmierer sollt sich darüber bewusst sein, daß im Software-Bereich nicht alles zu Geld zu machen ist. Die Bereitschaft eines Anwenders, für Software zu zahlen ist gering. Open Source ist eine gute und legale Alternative zu Raubkopien und die freie Software gewinnt immer mehr an Qualität. Die freie Software lässt qualitativ heutzutage schon so einige kommerzielle Alternativen im Wald stehen. Es wird eine Frage der Zeit sein, bis es nur noch für spezielle Einsatzgebiete einen Bedarf an kommerziellen Applikationen gibt. Maßnahmen zum Schutz von geistigem Eigentum, Verschärfungen des Urheberrechts und ausgeklügelterer Kopierschutz werden diesen Prozess beschleunigen.