Thema: Delphi Wie Verschlüsselt ihr ?

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#20

Re: Wie Verschlüsselt ihr ?

  Alt 7. Mai 2009, 00:06
Um die Grundprinzipien, quasi das Geheimnis der Kryptographie zu verstehen muß man sich schon einige Zeit mit der Materie befassen. Nicht mit Mutmaßungen, Annahmen, Glauben sondern mit Fakten, Wissen und der Mathematik. Ich erzähle dies weil einige der vorher gemachten Aussagen eher Mystik sind

Fangen wir mal an Grenzen zu definieren. Grenzen die uns einschätzen lassen was eine sichere Verschlüsselung ist und warum.

Der OTP, One Time Pad im rein mathematischen Sinne ist folgend definiert:

1.) wähle einen Schlüssel der absolut zufällig gewählt ist
2.) wähle die Schlüssellänge so groß das sie exakt der Länge an Daten entspricht die man schützen möchte
3.) wähle und benutze diesen Schlüssel nur ein einziges Mal
4.) wähle eine mathematische Verknüpfungsoperation zwischen Schlüssel und Nachricht die mathematisch beweisbar in der gewählten Domain (zb. Zahlendarstellung der Schlüssel und Daten) eine Gleichverteilung von 50% erzeugt.

Wir wählen als Computerfreaks die XOR Operation eben auch weil unsere Schlüssel und Daten in binärer Zahlendarstellung gespeichert sind.

Die XOR Operation auf 1 Ausgangs- und 2 Eingangsbit ist so definiert

0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0

Es gibt bei einem Bit also zwei Zustände, 0 und 1 = 50%. Bei zwei Bits die man per XOR verknüpft wird also mit 50% Wahrscheinlichkeit zwei Bits die zu 50% Wahrscheinlichkeit ein Ausgangsbit erzeugen das selber zu 50% Wahrscheinlichkeit eine 0 oder 1 sein kann. Wir können nicht sagen, an Hand des Ausgangsbits und ohne Kenntnis eines der beiden Eingangsbits welchen Zustand das andere Eingangsbit vorher hatte. Logisch soweit, oder ?

Wenn wir nun die Regeln des OTPs oben betrachten so dürfte es logisch sein das ein OTP in dieser Form nicht knackbar ist. Aber warum ?

Einfach weil bei einem unbekannten Schlüssel der unbekannte verschlüsselte Inhalt jede mögliche Nachricht sein könnte die exakt gleich groß der korrekten Nachricht ist. Ein Angreifer kann also ohne den exakt korrekten Schlüssel und ohne zusätzliche dritte Informationen über den möglichen Inhalt der verschlüsselten Nachricht beim OTP nur eine Feststellung treffen: Jede der gleichgroßen Nachrichten könnte die richtige sein.

Nun wird als erstes mal folgende Aussage ersichtlich: eine Brute Force Attacke ist dämlich, im korrekten deutsch also absolut unlogisch und beweisbar sinnlos. Mit der Annahme man hat keinerlei zusätzliche dritte Informationen über den möglichen Inhalt der Nachricht.

Die Nachricht veschlüsselt mit einem OTP ist also per Definiton zu 100% sicher.
Was würde passieren wenn wir nun zwei OTP Schlüssel nach obiger Regel erzeugen und eine Nachricht mit beiden Schlüsseln verschlüsseln ?
Wir wissen laut Regel 3.) das beide Schlüssel sich unterscheiden müssen. Somit erzeugen und benutzen wir niemals den exakt gleichen Schlüssel in diesem Falle zweimal.
Aber können wir mit dieser Methode die Nachricht mit mehr als 100% sicherer verschlüsseln ? Nein.
1.) wäre wiederum jede der gleichlangen Nachrichten gleich hoch wahrscheinlich die richtige Nachricht
2.) können wir leicht erkennen das die XOR Kombination beider Schlüssel wiederum einen zufälligen Schlüssel erzeugt und das ist defakto der real benutze Schlüssel. Wir streichen aus der Formel quasi zwei Variablen und substituieren sie durch eine einzige andere.

Wir sehen: mit einem OTP kann man nur 100% sicher verschlüsseln, der OTP stellt damit die für uns die hypothetische, theoretische und maximal machbare obere Grenze für die Bewertung der kryptographischen Sicherheit anderer Verschlüsselungen dar.
Wir sehen das ein OTP damit auch unknackbar ist, es gibt also defakto die theoretisch unknackbare Verschlüsselung tatsächlich. Da hilft kein noch so starker Glaube noch so viel Hightech oder sogar Quantencomputer die in unendlich kurzer Zeitspanne unendlich komplexe Probleme berechnen können. Kennt man nicht den Schlüssel, keine zusätzlichen Informationen über den verschlüsselten Inhalt dann ist jede gleichlange andere Nachricht eine genauso korrekte Nachricht wie die Originale.

Aber warum benutzen wir dann nicht den OTP ?
Weil er eben nur Theorie ist. Möchte man daraus irgendwas Praktisches, also technisch Machbares machen, dann wird man in jedem Falle die Sicherheit des Verfahrens unter 100% reduzieren. Zb. stellt sich die Frage wie produzieren wir wirklich mathematisch beweisbaren echten Zufall ohne das wir diesen Zufall technisch exakt und ständig erneut reproduzieren können ? Denn eines der stärksten wissenschaftlichen Indizien für die Richtigkeit einer Annahme ist die Reproduzierbarkeit der Ergebnisse durch Experimente. Nun, es existiert also keine Möglichkeit zu beweisen das eine Maschine die angeblich echten Zufall erzeugt auch wirklich echten Zufall erzeugt hat. Nun möge der Einwand kommen: Quantenmechanik und Heisenberg, ja korrekt. Aber beides besagt nur das es eine Grenze für unsere Erkenntnis gibt aus der wir dann technisch unseren echten Zufall erzeugen. Das ist aber keine mathematisch fundierter Beweis das dieser Zufall wirklich echter Zufall ist, das es hinter dieser Erkenntnisgrenze keinen kausalen Zusammenhänge innerhalb des so produzierten Zufalls gibt. Philosophie halt, für uns ist nur eines dabei wichtig: echter Zufall ist wahrlich nicht leicht real zu erzeugen wir müssen glauben das er echt zufällig wäre. Wir wissen es also mathematisch betrachtet nicht mehr und somit können wir in der Praxis also nicht Regel 1.) wirklich mathematisch beweisbar umsetzen.
Aber weiter gehts: wer möchte sich schon einen echten Zufallschlüssel im Kopf speichern, besonders wenn unsere Nachricht Megabits groß ist, unser Schlüssel müsste ja ebenso groß sein und dann nur einmal verwendet. Also speichern wir ihn auf CD ROM. Und da haben wir das nächste Problem, wie möchten wir diesen Schlüssel auf CD-ROM schützen ? Um die Sicherheit nicht zu reduzieren müssen wir einen OTP benutzen. Jedes andere Verfahren bedeutet immer Sicherheitsverlust da es kein real stärkeres gibt als den OTP. Also erzeugen wir wieder einen OTP Schlüssel der so groß ist wie unser auf CD-ROM zu speichender OTP Schlüssel. Super nun können wir unseren OTP Schlüssel ja sicher auf CD-ROM speichern, wir müssen nur aufpassen das wir auch alle Spuren in unserer Elektronik zu unseren Schlüssel auch wirklich vernichten und bis dato kein Spion schon längst unseren Schlüssel besitzt. Naja das dürfte ja noch im Bereich des praktisch Machbaren sein, aber sicher können wir uns auch nicht sein. Halt, also doch Sicherheitsverlust bei der Umsetzung der Theorie in die Praxis.
Da war doch noch was eben ? Hm, der Vorschlag der Umsetzung des OTP Verfahrens in die Realität von eben hat doch einen Hacken, oder ? Stimmt wir mussten ja einen weiteren OTP Schlüssel erzeugen um den ersten Schlüssel sicher auf CD-ROM speichern zu können, was machen wir denn nun mit diesem ? Bitte, einen Dritten um den Zweiten um den Ersten zu schützen ist offensichltich keine Lösung.
Auch hier keine Möglichkeit ohne Sicherheitsverlust das theoretische OTP Verfahren in die Praxis zu bekommen. Und noch ein Gedanke: auch unser Hirn ist nur eine Maschine, auch es hat nur eine Festplatte, theoretisch ist es wahrscheinlicher das wir es in Zukunft mit Maschinen auslesen oder klonen können als das wir die, mit dem theoretischen OTP, die theoretisch verschlüsselte Nachricht mit dem theoretisch unendlich schnellen Quantenrechner praktisch knacken könnten.
Und drittens sollte man sich mal die Frage stellen ob eine Zahl, mit einem echten Zufallsgenerator erzeugt, egal in welcher praktisch real existenten Bauweise, mit ihrer Erzeugung, und damit mit unserer Kenntnissnahme dieser Zahl, wirklich noch sicher also zulällig ist oder ob sie zu einem Teil unserer Erkenntnis, in dem Moment als wir sie erzeugten, wurde. Kurz gesagt: sobald wir diese Zufallszahl erzeugt haben ist sie wertlos da es keine Möglichkeit gibt all ihre Spuren zu beseitigen damit sie auch wirklich 100% geheim bleibt, sie muß defakto irgendwo gespeichert werden und das ist in jedem Fall unsicherer als 100% Sicherheit wie in der Theorie verlangt.

Ergo: OTP schön und gut er hilft uns in der Theorie eine Grenze zu ziehen und zur Erkenntnis zu kommen das es real keine Verschlüsselung geben kann die wirklich 100% sicher ist. Was nicht impliziert das nun eine Brute Force Attacke auf einen OTP oder ein anderes fast so sicheres Verfahren wirklich irgendwas bringen muß.

Es heist aber auch das wir im gleichen Atemzug noch eine andere Möglichkeit erwähnt haben die Sicherheit eines Verfahrens einzustufen: nämlich die Brute Force Attacke als Bestcase den eine jede gute Verschlüsselung beweisbar standhalten muß in einem von uns vorgegeben Rahmen. Dieser Rahmen definiert sich aus unserer Erkenntnis. Also aus aktuellem Wissenstand, vorhandener Technologie, der statistischen Abschätzung welche Resourcen (Materie, Energie und Zeit) wir benötigen würden um per Brute Force Angriff einen Schlüssel zu knacken.

Den Worstcase kann man beeinflussen. Der Worstcase wird beeinflusst durch unsere Mathematik, dh. gibt es beweisbar kein anderes mathematisches Verfahren das ein kryptographisches Verfahren schneller knacken kann als eine Brute Force Attacke.

Man kann nun erstaunt darüber sein das eine simple XOR Verschlüsselung bei der man direkt den sich wiederholenden und nicht echt zufälligen Schlüssel durch eine Known Plain Text Attacke (also bekanntem oder teilweise bekannter Nachricht) so leicht brechen kann. Im Grunde aber ist es einfach nur so das man eben Grundregeln der Kryptographie und letzendlich der Mathematik nicht beachtet hat bei der Konstruktion des Verfahrens. Daraus gewisse andere Behauptungen oder Schlußfolgerungen abzuleiten und zu verallgemeinern auf andere Verfahren ist fahrlässig.

Eines der wichtigsten "Geheimnisse" der Kryptographie ist: Wissen. Wissen bedeutet man kontrolliert einen Prozess. In der Kryptographie muß man zu und für jeden Zeitpunkt ihrer Anwendung wissen was passiert. Das kann man nur über einen Beweis. Sogesehen sind Kryptographen die Menschen die mit Hilfe der Mathematik ein beweisbar sicheres Verfahren konstruieren das in jedem Falle immer möglichst absolut unfair gegenüber all Denjenigen sein wird die nicht den Schlüssel kennen. Hier habe ich schon wieder eine Regel impliziert ohne sie zu nennen. Nur das Passwort, also ein Geheimnis in Form eines zb. Datenbereiches, eines Satzes oder sonstwas, sollte nötig sein und ein dann mit aktuellem Wissen beweisbar sicheren krypto. Algorithmus um Nachrichten schützen zu können. Also nicht die XOR Operation in unserem OTP muß bzw. sollte geheim sein sondern nur die zwei Daten: Passwort und Nachricht. Ein kryptographischer Algorithmus ist also ein Verfahren das zwei geheime Daten so miteinander kombiniert das aus dem Dritten daraus resultierenden Output nicht ohne Eines der Beiden zu kennen das Andere wiederherstellbar ist.
Aber warum sollte nicht auch der Algorithmus geheim sein ? Pragmatismus: wenn man ein Verfahren konstruieren kann das nicht geheim sein muß und denoch beweisbar Nachrichten sicher schützt nur auf Grund eines zweiten Geheimnisses warum sollte man den Algorithmus dann auch geheim halten wollen ? Hier zählt also die Annahme das je weniger man geheim halten muß um eine gewisse Geheimhaltung erlangen zu können desto besser ist der Schutz ansich. Denn nun würde man auch viel schneller eine Schwäche in der Geheimhaltung erkennen können. Wenn es nur zwei Geheimnisträger in einem absolut sicheren System gibt und das System denoch gebrochen wurde dann kann es nur so sein das einer der beiden Geheimnisträger als unsicher einzustufen ist. Je weniger man also geheim halten muß desto besser und um so größer werden die Chancen das man frühzeitig erkennen kann das das Geheimnis nicht mehr sicher aufbewahrt ist.

Oben schrieb ich:
Zitat:
2.) wähle die Schlüssellänge so groß das sie exakt der Länge an Daten entspricht die man schützen möchte
Davon ableiten lässt sich (es führt zu dieser Aussage) das ein längerer Schlüssel als die Nachricht keinen weiteren Sicherheitsgewinn einbringt. Auch lässt sich ableiten das ein kürzerer Schlüssel immer einen Sicherheitsverlust bedeutet. Denn wir müssten ja für den Rest irgendwie reproduzierbare Schlüsselbits aus dem zu kurz gewählten Schlüssel erzeugen. Das heist auch das es sinnlos ist eine kürzere Nachricht als der Schlüssel lang ist, eben mit keinem Verfahren irgendwas verbessert oder sicherer macht. Die maximal machbare Komplexität ist immer nur so groß wie die Anzahl der möglichen Nachrichten die gleichwahrscheinlich zur korrekten Nachricht sind.

Zitat:
3.) wähle und benutze diesen Schlüssel nur ein einziges Mal
Das bedeutet das wenn wir uns nicht daran halten die Wahrscheinlichkeit besteht das wir den Schlüssel zweimal benutzen und das auf die gleiche Nachricht. Davon ableiten lässt sich das es im Grunde dumm ist eine Nachricht mit zb. zwei Schlüsseln aber mit gleichem Verfahren doppelt oder mehrfach zu verschlüsseln. Dies kann nicht die Sicherheit erhöhen sondern wird mit höherer Wahrscheinlichkeit nur die Sicherheit des Verfahrens reduzieren in seiner Gesamtheit. Es beantwortet also die Frage ob man eine Nachricht zb. erst mit AES verschlüsselt und dann nochmals mit einem anderen Verfahren verschlüsseln sollte. Die maximale Sicherheit kann nur so hoch wie das schwächste Glied der Kette sein, also eines der beiden Verfahren. Welches wissen wir aber zum Zeitpunkt der Anwendung nicht und oben sagte ich "Wissen". Alles was wir nicht wissen ist ungünstig.
Im Falle der mehrfachen Anwendung der XOR-Operation und nicht Einhaltung der Regel 3.) erhöhen wir in jedem Falle die Wahrscheinlichkeit das wir einen Teil wieder entschlüsseln. Nungut im Falle des OTPs ist das irrelevant aber im Falle vieler anderer Verfahren eben nicht.

Zitat:
Ein kryptographischer Algorithmus ist also ein Verfahren das zwei geheime Daten so miteinander kombiniert das aus dem Dritten daraus resultierenden Output nicht ohne Eines der Beiden zu kennen das Andere wiederherstellbar ist.
Heutzutage gilt auch hier eine noch stärkere Restriktion. Man versucht die Algorithmen so zu konstruieren das man selbst bei geknackter Nachricht nicht in der Lage ist das real benutze Passwort zu knacken. Eine anerkannte Methode ist die Anwendung eines Zufallssalts in Kombination mit einer sicheren Einwegfunktion (Hash). Man nennt sowas KDF=Key Derivation Function, Schlüsselableitungsfunktion.

Zitat:
Kennt man nicht den Schlüssel, keine zusätzlichen Informationen über den verschlüsselten Inhalt dann ist jede gleichlange andere Nachricht eine genauso korrekte Nachricht wie die Originale.
Die Aussage, keine zusätzlichen Information, impliziert sowohl bestimmte Angriffsmöglichkeiten wie eben die Known Plain Text Attacke, oder der Choosen Plain Text Angriff, wie auch bestimmte Schutzmechanismen in heutigen kryptographischen Algorithmen. Zb. verknüpft man die Nachrichtenbits blockweise mit den vorher verschlüsselten Nachrichtenbits. Dies erfolgt über ein sogenanntes Feedback Register innerhalb des Verfahrens und die Art und Weise der Verknüpfung dieses Feedbackregisters mit den Daten nennt man den Ciphermode. Je nach Art kann man unterschiedliche Verhalten des Gesamtverfahrens erreichen, zb. eine Alles oder Nichts Entschlüsselung, oder sogenannte CMACs Cipher Message Authentication Codes zur Überprüfung der Integrität und Authentizität einer entschlüsselten Nachricht oder die Eigenschaft der Selbstsynchronisation fehlerhafter Entschlüsselungen also das Gegenteil einer Alles oder Nichts Entschlüsslung. Aber der wichtigste Grund für solche Feedback Ciphermodis ist die Eigenschaft das wenn man innerhalb des Feedback Register mit einem Zufallswert startet solche Angriffe wie Known/Choosen Plain Text Angriffe unterbinden kann. Dh. Angriffe bei denen man die originale Nachricht ganz oder teilweise kennt oder beeinflussen kann werden wesentlich schwieriger bis unmöglich. Auch Angriffe bei denen man Ciphertextblöcke, also Teile der verschlüsselten Nachricht austauschen, ersetzen oder gezielt manipulieren kann, können mit den Feedbackmodis unterbunden werden. Diese Feedback Modis sind aber im Allgmeinen nicht Bestandteil des kryptographsichen Algorithmus, also im Kernbereich. Denoch wird der nackige krypto. Algorithmus erst durch diese "äußeren" Feedbackmodis wirklich sicher gegen eine ganze Reihe von Angriffen.

Ansich wäre die im Eingangsposting gezeigte Methode sicher, wenn man sie eben richtig abändert. Denoch könnte man sie in gleicher Weise wie beschrieben auch knacken ! Nun der Denkfehler liegt in der Annahme das der gewählte Angriff irgendwas über die Sicherheit des angewendeten Verfahrens aussagen würde. Denn wenn ein Geheimnis teilweise bekannt ist, also nicht mehr geheim dann kann man im Grunde jede Verschlüsselung knacken, auch einen OTP. Im Fall des OTPs hat man exakt den Teil der Nachricht schon geknackt der bekannt ist, logisch. Für den Rest gilt weiterhin das er mathematisch sicher ist wenn es keinen inhaltlichen Zusammenhang der einzelnen Nachrichtenbits zueinander gibt.
Für andere praktische Verfahren gilt dies aber nicht zwangsläufig da dort auch ein algorithmischer Zusammenhang zwischen dem Schlüssel, der Nachricht, dem Ausgangsprodukt und dem Algorithmus gibt. Dh. bestimmte Ausgangsbits können durch den Algorithmus nur dann entstehen wenn die teilweise bekannte Nachricht mit einem bestimmten Schlüssel kodiert wurde.

Zum Schluß noch eine Feststellung: Viele Regeln die man heutzutage in der Kryptographie findet lassen sich in irgendeiner Form vom theoretischen OTP ableiten. Den einzigen beweisbar zu 100% und damit immer sicheren und niemals knackbaren kryptographischen Algorithmus, leider nur auf dem Papier. Aber eine gute Basis für weitere Überlegungen und eine Anleitung für praktische Verfahren

Gruß Hagen
  Mit Zitat antworten Zitat