Das
Polymorphe Verschlüsselungsverfahren (PMC)
CyProtect
AG bietet das polymorphe Verschlüsselungsverfahren
PMC (Basistechnologie) zur Lizenzierung bzw.
zur Implementierung in Ihre eigenen Applikationen
(Datenbankserver, Dokument-Management-Systeme, ect.)
an. Selbst die Einbindung in Software für
Datenverbindungen (z.B. Videokonferenzen,
Satellitenübertragungen, u.a.) ist mittels der
PMC Stream-Cipher-Variante möglich.
Eine
weitere Anwendungsmöglichkeit des Ciphers ist
die Verwendung als "Lizenzierungsmaschine",
was einen Kopierschutz für Software incl.
Lizenzierung darstellt.
Desweiteren können Sie sich für Projektarbeit
an uns wenden, wenn Sie das PMC Verschlüsselungsverfahren
in Ihre Applikation einbauen lassen möchten.
Bei Interesse wenden Sie sich an uns, wir beraten
Sie gerne.
Einführung in das Polymorphe Verschlüsselungsverfahren
(PMC)
Der
weitverbreitete DES Algorithmus galt lange Zeit als
"sicher". Ein im Januar 1999 von RSA Data
Security, Inc. (San Mateo, Calif., USA) durchgeführter
Versuch bewies, dass es weniger als 22.25 Stunden
dauert, um den 56 Bit Algorithmus mit der Brute-Force-Attacke
(Ausprobieren aller "2 hoch 56" Schlüsselkombinationen)
zu bezwingen.
Ein
Jahr zuvor benötigte ein ähnlicher Test
noch 41 Tage! RSA behauptet einen viel besseren Algorithmus
zu haben, was mit Sicherheit zutrifft. Heute wird
eine Schlüssellänge von 128 Bit (entspricht
etwa 1650 bit für RSA) von Experten als sicher
angesehen. Es sind allerdings nur 25 Jahre vergangen,
seitdem Experten die halbe Schlüssellänge
von 64 Bit als absolut sicher bis zum Ende der Zeit
bezeichneten. Die Steigerung der Schlüssellänge
entspricht dabei lediglich dem "unbedeutenden"
Faktor 10.000.000.000.000.000.000 an zusätzlicher
Sicherheit! Ein neuer Ansatz, der selbstkompilierenden
Maschinencode impliziert, löst dieses Problem:
Polymorphe Verschlüsselung (PMC) von C.B. Roellgen.
|
PMC kann Daten mit 50MBit/s Geschwindigkeit
bei 4096 Bit Schlüssellänge auf einem
Intel Pentium III Prozessor mit 200MHz Taktfrequenz
verschlüsseln! Damit ist PMC erheblich leistungsfähiger
als der AES-Standard des NIST (50MBit/s bei 256
Bit Schlüssellänge)! |
Nach
seiner Erfindung wurde das Verfahren für kurze
Zeit zum Staatsgeheimnis in Deutschland. Die Kryptogesetzgebung
vollführte zu dieser Zeit eine Kehrtwendung in
Richtung Liberalisierung.
PMC
kann mit langen Schlüsseln arbeiten, ohne dass
nennenswerte Kompromisse bei der Verschlüsselungsgeschwindigkeit
eingegangen werden müssen. Bei diesem Verfahren
steigt die Ausführungszeit lediglich linear mit
der Schlüssellänge. Die Idee dahinter ist,
den Verschlüsselungsalgorithmus zufällig
zu gestalten.
Die
Polymorphe Methode ist heute eines der stärksten
Verschlüsselungsverfahren und sie ist wahrscheinlich
sogar das stärkste. Die Methode nutzt quasizufällig
zusammengestellten Maschinencode, um eine außergewöhnliche
Sicherheit gegen jede Art von Attacke bereitzustellen.
Sie ist sogar intrinsisch sicher gegen das Disassemblieren
und Analysieren der Instruktionssequenz - die Abfolge
der Befehle ist selbst eine Variable und ist nur für
die kurze Zeit der Ausführung klar definiert!
Es ist entscheidend, daß bereits die grundlegende
Voraussetzung für die erfolgreiche Kryptoanalyse,
die Kenntnis des Verschlüsselungsverfahrens,
nur rudimentär erfüllbar ist. Der Kryptocompiler
ist analysierbar, nicht jedoch das tatsächliche
Verfahren, mit dem Nachrichten verschlüsselt
werden. Der eigentliche Verschlüsselungsalgorithmus
der Polymorphen Methode ist inhärent variabel.
Arbeitsweise
der polymorphen Verschlüsselungsmethode
Zwei
unterschiedliche Passwörter (oder zwei Teile
eines einzigen Passworts) werden als Saat zwei Zufallszahlengeneratoren
zugeführt. Der Zufallszahlengenerator auf der
linken Seite erzeugt einen Datenstrom, der zu einer
Folge von kryptographisch sicheren Maschinencodeblöcken
kompiliert wird. Der für diesen Zweck bereitstehende
Compiler assembliert im wesentlichen standardisierte
Befehlsblöcke, richtet Zieladressen ein und erzeugt
Einsprung- und Ausstiegscode für den Maschinensprachteil,
der bei Programmausführung den Inhalt des Datenspeichers
(S-Box) während der Laufzeit intensiv manipuliert.
Der Datenspeicher wird mittels des Zufallszahlengenerators
auf der rechten Seite initialisiert. Das Passwort
auf der rechten Seite dient dabei als Saat für
den Zufallszahlengenerator auf der rechten Seite.
Nach
Beendigung der Ausführung des Maschinencodes
wird der Inhalt des Datenspeichers zur Verschlüsselung
der Rohdaten unter Zuhilfenahme der XOR-Funktion verwendet.
Der Inhalt des Datenspeichers sollte jedoch vorzugsweise
als Saat für einen weiteren schnellen kryptographischen
Algorithmus dienen. Dadurch erhöht sich die Komplexität
des Verschlüsselungsverfahrens und es wird Angreifern
die Analyse des internen Zustands erschwert. Es sei
angemerkt, dass der Inhalt des Datenspeichers zu keiner
Zeit Rückschlüsse auf einen der beiden oder
beide Schlüssel zuläßt! Angreifern
wird ihr Vorhaben zusätzlich erschwert, wenn
der Maschinencode von Zeit zu Zeit neu kompiliert
wird.
Angriffsicherheit
des Polymorphen Verschlüsselungsverfahrens
Jeder
Codeblock beeinflußt mindestens 32 Datenbits
und recht häufig ändert sich dabei überdies
der Schlüssel. Angenommen der Kryptocompiler
verfüge lediglich über 4 Codeblöcke
und 16 dieser Blöcke könnten quasizufällig
aneinandergereiht werden, so wären 416 = 4294967296
verschiedene Möglichkeiten für den resultierenden
Kryptoalgorithmus gleichermaßen wahrscheinlich.
Bei 128 aneinandergereihten Codeblöcken stünden
4128 = 1,158*1077 Möglichkeiten zur Verfügung
(Anmerkung: Ein konventioneller 128 Bit Verschlüsselungsalgorithmus
verfügt nur über 3,403*1038 mögliche
Schlüsselvarianten!). Es sei im Besonderen darauf
hingewiesen, daß OHNE die Ausführungszeit
des Verschlüsselungsalgorithmus zu verlängern,
die Angriffsicherheit eines polymorphen Verschlüsselungsverfahrens
um Größenordnungen über der herkömmlicher
Verfahren liegt!
Um
konventionelle kryptographische Methoden mit der polymorphen
Methode vergleichen zu können, muss der gesamte
Schlüsselbereich verglichen werden. Aufgrund
der Annahme, dass alle verglichenen Methoden mit 128
BitDatenschlüssel (S-Box) arbeiten, ist die Vorgehensweise
des Vergleichs zulässig. Das polymorphe Verschlüsselungsverfahren
schlägt jeden konventionellen Verschlüsselungsalgorithmus
um den Faktor 3,913*10115 / 3,403*1038 = 1,150*1077
(!). Dieser Faktor ist so groß, dass er die
Anzahl Atome auf unserem Planeten übersteigt!
Angriffe
und ihre Wahrscheinlichkeit auf Erfolg beim Polymorphen
Verschlüsselungsverfahren
Angriffe
sind keine Algorithmen, sondern allgemeine Ansätze,
die bei jedem neuen Verschlüsselungsverfahren
neu erfunden werden müssen. Es wird generell
vorausgesetzt, dass der Gegner die Einzelheiten des
Verschlüsselungsverfahrens genau kennt und daß
ihm nahezu unbegrenzt Klartext und dessen verschlüsselte
Form bekannt sind ("known plaintext"). Es
wird des weiteren vorausgesetzt, daß der Gegner
über Echtzeitfähigkeit verfügt, um
definierten Klartext durch dessen Verschlüsselung
nach Belieben zu sammeln, sowie die Ergebnisse zu
speichern.
Ausprobieren
aller Schlüssel (Brute Force on the keys)
Versuche
jede mögliche Schlüsselkombination bis die
Nachricht entschlüsselt ist. Probiere die wahrscheinlichen
Schlüssel zuerst. 128 Bit Schlüssellänge
sollte ausreichend sein, um den Erfolg mit Brute Force
auf absehbare Zeit zu verhindern. Das Zufallszahlensystem
der polymorphen Methode läßt sich jedoch
erst ab einer Länge von 256 Bit sinnvoll realisieren
- 2048 Bit sind eher gewöhnlich, ohne den Algorithmenschlüssel
zuzuzählen, der zu knapp 100% der Sicherheit
beiträgt.
Ausgesuchte Schlüssel
Probiere unterschiedliche Schlüssel anhand bekanntem
Klartext und vergleiche die resultierenden verschlüsselten
Daten mit den tatsächlichen verschlüsselten
Daten - versuche den korrekten Schlüssel zu berechnen.
Aufgrund der Tatsache, daß der Schlüssel
mehr oder weniger der Algorithmus selbst ist, gerät
die Aufgabe des Gegners zu einem hoffnungslosen Unterfangen.
Die polymorphe Einwegfunktion verändert sich
permanent mit jedem neuen Schlüssel, der so groß
ist, daß es unmöglich ist, eine Tabelle
zu isolieren und damit separat zu arbeiten. Ein Computer
kann schließlich nur so groß sein wie
es Atome auf diesem Planeten gibt!
Codebuch
mit verschlüsseltem Text
Sammle
so viele verschlüsselte Daten wie möglich,
um ihre Inhalte durch Beziehungen untereinander zu
extrahieren; wenn ein verschlüsselter Text auftaucht,
lies ihn einfach im Codebuch nach. Diese Methode behandelt
einen Blockverschlüsseler wie einen Code und
ist der klassische Ansatz, um Codes zu knacken. Genau
wie häufiger auftretende Buchstaben, treten Worte
und Phrasen mit bestimmter Frequenz auf. Dies gilt
auch für Blöcke eines Verschlüsselungsalgorithmus.
Wenn die Blocklänge klein ist (unter 64 Bytes)
und wenn der Schlüssel nicht häufig gewechselt
wird, so könnte es möglich sein, ein Codebuch
mit Blockinhalten aufzubauen, das ebenso die gewünschten
Bedeutungen enthält (den Klartext). Jede Art
von Codebuchattacken wird idealerweise durch Verwendung
einer grossen Anzahl Blockwerte und folglich einer
großen Blocklänge verhindert. Wenn die
Blocklänge 64 Bytes oder mehr beträgt, so
kann man erwarten, dass die Einzigartigkeit, die jeder
Block beinhaltet, groß genug ist, um die Fähigkeiten
eines noch so starken Gegners, ein Codebuch zu erstellen,
übersteigt. Aufgrund der Tatsache, dass die Komplexität
jeder Art Codebuchattacke ausschließlich von
der Blocklänge abhängt, ist "dreimal"
soviel kein geeignetes Mittel um den Schwierigkeitsgrad
zu steigern. Im besonderen sei Triple DES genannt,
das dieser Attacke keinesfalls mehr als DES selbst
widersteht. Die Komplexität der Transformation
spielt hier keine Rolle. Die polymorphe Verschlüsselungsmethode
wird am besten mit einer 1024 Byte Blocklänge
und sich blockweise änderndem Maschinencode implementiert.
Die Methode ist ferner ideal geeignet, um eine Saat
für einen Zufallszahlengenerator zu erzeugen,
um den eigentlichen Algorithmus von der letztendlichen
Zufallszahlenfolge zu trennen. Weil die polymorphe
Methode bei jedem Schlüssel und nach einer bestimmten
Anzahl Blöcken eine andere Form hat, wird jede
Art Codebuchattacke vor allem Rauschen aufzeichnen
und zu sonst nichts zu verwenden sein.
Bekannter
Klartext (Known Plaintext)
Erzeuge
auf irgendeine Weise eine große Menge verschlüsselten
Text aus Klartext mit immer dem gleichen Schlüssel.
Mit dieser Attacke erhält man mit einem Klartext
- verschlüsselter Text - Paar ausreichend Informationen,
um den vollen Inhalt des Datenspeichers zu rekonstruieren.
Um jedoch einen der beiden oder beide Schlüssel
zu identifizieren, müssen beide Schlüssel
mit einer anderen Methode extrahiert werden. Da sowohl
die Compilereingangsdaten als auch die Schlüssel
unbekannt sind, ist es schwierig den kompletten internen
Zustand des Kryptosystems zu erhalten. Die polymorphe
Methode versteckt ungefähr drei Viertel des internen
Zustands in den Compilereingangsdaten und damit in
einem veränderlichen Algorithmus, wodurch alleine
ausreichende Komplexität entsteht und sich die
Verschlüsselungsmethode dieser Art Attacke völlig
entzieht. Es sei angemerkt, dass ein einziges Klartext
- verschlüsselter Text - Paar einen DES-Schlüssel
identifizieren könnte!
Codebuch
mit bekanntem Klartext (Known-Plaintext Codebook)
Sammle
so viele Klartextblöcke mit entsprechendem verschlüsseltem
Text wie möglich, damit ein auftretender verschlüsselter
Text einfach durch das Auffinden im Codebuch entschlüsselt
werden kann. Einfache Blockchiffrierer verhindern
Codebuchattacken dadurch, dass sie den Klartext verwürfeln
(oft mittels Verknüpfung mit den Daten des letzten
Blocks "Cipher Block Chaining"). Auf diese
Weise erreicht man, dass die Blockwerte im Klartext
gleichverteilt sind. Codebuchattacken werden idealerweise
durch eine große Anzahl Blockwerte vereitelt,
wodurch eine große Blockgröße unvermeidlich
ist. Um dies auch in Zukunft zu verhindern, wird eine
Blockgröße von 64 Byte als sicher angesehen,
sodaß die Größe des Codebuchs nicht
von einem Angreifer zu verarbeiten ist. Die 1024 Byte
Blocklänge der polymorphen Methode machen es
unmöglich, Erfolg mit dieser Art Attacke zu haben.
Aufgrund der Eigenschaft des Algorithmus sich selbst
zu verändern, wird eine Tabelle mit aufgezeichneten
Blockwerten überdies nur Rauschen enthalten.
Klartextauswahl
(Chosen Plaintext)
Ohne
den Schlüssel zu kennen, soll beliebiger Klartext
verschlüsselt und die verschlüsselten Daten
aufgezeichnet werden. Verändere die Daten andauernd,
um gezielt bestimmt verschlüsselte Daten zu erhalten.
Hier wird nicht der Code selbst geknackt, sondern
der originäre Klartext produziert. Wenn der Gegner
ausgewählten Klartext produzieren kann, so kann
er eventuell beliebige verschlüsselte Daten zur
Dechiffrierung eingeben. Die Schwäche, die bei
diesem Verfahren ausgenutzt wird, liegt manchmal nicht
beim Verschlüsselungssystem selbst, sondern an
einem Ort mit wenigen internen Zuständen. Die
polymorphe Verschlüsselungsmethode verfügt
nicht über einen festen Algorithmus und damit
auch nicht über konstante Schwächen, sondern
eher über viele diskrete Schwächen - so
viele es Kombinationen für den Maschinencode
gibt. Die Klartextauswahlmethode ist vor allem wegen
des dynamisch veränderlichen Maschinencodes nicht
erfolgversprechend.
Codebuch
mit ausgewähltem Klartext (Chosen-Plaintext Codebook)
Erzeuge
so viel verschlüsselten Text aus Klartext wie
möglich. Wenn ein bekannter Code auftritt, suche
den passenden Klartext im Codebuch. Diese Attacke
ist mit den vorigen Codebuchattacken vergleichbar,
diesmal jedoch mit der Fähigkeit, das Codebuch
beliebig und mit hoher Geschwindigkeit zu füllen.
Wieder hängt der Erfolg von der Blocklänge
und der Starrheit des Verschlüsselungssystems
ab. Diese Attacke ist ebenso wenig erfolgversprechend
wie alle anderen Codebuchattacken und es ist leichter,
viele Schlüsselkombinationen durchzuprobieren.
In
der Mitte aufeinandertreffen (Meet-in-the-Middle)
Suche
bei mehrlagigem Aufbau des zu brechenden Verschlüsselungsverfahrens
mit gegebenen oder bekanntem Klartext unter allen
Schlüsseln den passenden in der oberen Lage.
Verfahre ebenso für die untere Lage. Bei einem
zweilagigen Konstrukt und kurzer Blocklänge können
Übereinstimmungen durch wenige Eingangs-/Ausgangsblockpaare
überprüft werden. Sind weitere Lagen vorhanden,
können diese immer in zwei Teile partitioniert
werden, wodurch diese Methode immer anwendbar ist.
Die Komplexität dieses Unterfangens kann natürlich
beliebig ausfallen. Jede Schicht in einem guten Kryptosystem
verwendet einen großen Codeumfang für den
Schlüssel. Die polymorphe Methode fügt überdies
einen sehr langen Schlüssel für den für
Angreifer unbekannten Algorithmus hinzu. Die Anzahl
Kombinationen für beide Schlüssel ist gleich
dem Produkt der Kombinationen für jeden einzelnen
Schlüssel und damit eine ungeheuer große
Zahl.
Schlüsselbitbeeinflussung
(Key Bit Bias)
Durch
extensives Ausprobieren vieler möglicher Schlüssel
und extensives Verschlüsseln eines festen Klartexts
kann es manchmal möglich sein, bestimmte Schlüsselbits
über statistische Häufigkeit einiger Bits
in den verschlüsselten Daten in Verbindung zu
bringen. Konventionelle Algorithmen mit derartigen
Schwächen wären schnell geknackt.Unterschiedliche
Schlüssel erzeugen bei der polymorphen Methode
unweigerlich verschiedene Kryptoalgorithmen, wodurch
es unmöglich wird, eine statistische Verknüpfung
zwischen Eingangs- und Ausgangswerten herzustellen.
Jeder Schlüssel hat seine eigene Schwäche,
die jedoch nicht konstant über alle möglichen
Schlüsselwerte ist.
Differentielle
Kryptoanalyse (Differential Cryptanalysis)
Nutze
bekannte Eigenschaften bestimmter bekannter Substitutionstabellen
aus, um die Anzahl Durchläufe in einem iterierenden
Blockverschlüsseler zu reduzieren. Die ursprüngliche
Idee der differentiellen Kryptoanalyse bezieht sich
hauptsächlich auf iterierende Blockverschlüsseler
mit bekannten Tabellen. Nichts davon ist auf die polymorphe
Methode anwendbar. In einem iterativen Verschlüsselungsalgorithmus
wie DES können statistische Unausgewogenheiten
gefunden werden. Dies kann dazu ausgenutzt werden,
um auf vorangehendeIterationsschritte zurückzuschließen.Bei
der polymorphen Methode wird jeder neue Schlüssel
einen bestimmten Algorithmus auswählen, wodurch
selten ähnliche Transformationen gewählt
werden. Es ist substantiell schwierig und sehr ineffizient,
eine Transformation anzugreifen, die während
der Analyse ihre Struktur vollkommen verändert.