Hi
Ich habe mich mal ein wenig über Kryptographie schlau gemacht und bin dabei unter anderem auf folgendes gestoßen:
1) OneTimePads sind 100% sicher, wenn man das Problem der Schlüsselverteilung außer Acht lässt
2) Die Sicherheit von RSA steht und fällt mit einer Methode zur schnellen Primfaktorzerlegung (also nicht 100% sicher)
Ich habe mich mit diesem Problem etwas theoretisch beschäftigt, um testweise ein Programm zu schreiben, mit welchem man bei 100%-iger Verschlüsselung übers Netz kommunizieren kann.
Eine Idee, die ich hatte, war folgende:
Ich tausche zu Beginn (wenn sich zwei PCs bzw. User über's Internet "kennen lernen") einen Schlüssel für die erste Datenübertragung aus. Um die Sicherheit hier noch zu steigern, kann dies ja per RSA geschehen, ist aber eigentlich unnötig.
Nehmen wir an, dieser Schlüssel ist 50 Bytes lang. Dann schicke ich eine 50 Bytes lange Nachricht und schicke direkt anschließend 50 Bytes, die den Schlüssel für die nächste Nachricht beinhalten - natürlich mit dem alten Schlüssel kodiert. Obwohl ich dadurch den selben Schlüssel 2x verwende, ist dies kein Sicherheitsverlust, da bei dem 2. Teil der Nachricht (dem neuen Schlüssel) der Schlüssel völlig zufällig ist und man somit keine Häufigkeitsanalyse ansetzen kann.
Falls eine Nachricht verloren geht (der Absender keine Bestätigung vom Empfänger erhält), vergisst er den neuen Schlüssel einfach und geht weiterhin vom alten aus.
Hier könnte man natürlich als Kryptoanalytiker ansetzen, sich als "Man in the Middle" in die Leitung schalten und einige Nachrichten mit gleichem Schlüssel abfangen - aber es würde dem Absender auffallen, wenn er eine Zeitlang keine Bestätigung erhält.
Das Programm muss sich natürlich für jeden Kommunikationspartner den aktuellen Schlüssel merken, was aber machbar sein dürfte - und wenn jemand soweit vordringt, dass er diese gespeicherten Daten lesen kann, kann er auch direkt das Programm auf dem PC des Users starten und "in dessen Namen" kommunizieren - also brächte eine Verschlüsselung so oder so nichts.
Ein weiterer Nachteil wäre, dass die Nachricht eine vorgegebene Größe hat. Aber wenn die Nachricht kleiner als 50 Bytes ist, könnte man dieses Problem lösen, indem man zu Beginn der Nachricht eine (natürlich verschlüsselte) Größenangabe für die Nachricht sendet und dann die restlichen Bytes mit zufälligen(!) Zahlen ausfüllt. Bei Nachrichten größer 50 Bytes schickt man einfach mehrere Blöcke.
Gibt es dabei irgendwelche Nachteile, die ich übersehen habe? Oder ließe sich das so realisieren?
cu,
Sebastian Meßmer
Ich habe mich mal ein wenig über Kryptographie schlau gemacht und bin dabei unter anderem auf folgendes gestoßen:
1) OneTimePads sind 100% sicher, wenn man das Problem der Schlüsselverteilung außer Acht lässt
2) Die Sicherheit von RSA steht und fällt mit einer Methode zur schnellen Primfaktorzerlegung (also nicht 100% sicher)
Ich habe mich mit diesem Problem etwas theoretisch beschäftigt, um testweise ein Programm zu schreiben, mit welchem man bei 100%-iger Verschlüsselung übers Netz kommunizieren kann.
Eine Idee, die ich hatte, war folgende:
Ich tausche zu Beginn (wenn sich zwei PCs bzw. User über's Internet "kennen lernen") einen Schlüssel für die erste Datenübertragung aus. Um die Sicherheit hier noch zu steigern, kann dies ja per RSA geschehen, ist aber eigentlich unnötig.
Nehmen wir an, dieser Schlüssel ist 50 Bytes lang. Dann schicke ich eine 50 Bytes lange Nachricht und schicke direkt anschließend 50 Bytes, die den Schlüssel für die nächste Nachricht beinhalten - natürlich mit dem alten Schlüssel kodiert. Obwohl ich dadurch den selben Schlüssel 2x verwende, ist dies kein Sicherheitsverlust, da bei dem 2. Teil der Nachricht (dem neuen Schlüssel) der Schlüssel völlig zufällig ist und man somit keine Häufigkeitsanalyse ansetzen kann.
Falls eine Nachricht verloren geht (der Absender keine Bestätigung vom Empfänger erhält), vergisst er den neuen Schlüssel einfach und geht weiterhin vom alten aus.
Hier könnte man natürlich als Kryptoanalytiker ansetzen, sich als "Man in the Middle" in die Leitung schalten und einige Nachrichten mit gleichem Schlüssel abfangen - aber es würde dem Absender auffallen, wenn er eine Zeitlang keine Bestätigung erhält.
Das Programm muss sich natürlich für jeden Kommunikationspartner den aktuellen Schlüssel merken, was aber machbar sein dürfte - und wenn jemand soweit vordringt, dass er diese gespeicherten Daten lesen kann, kann er auch direkt das Programm auf dem PC des Users starten und "in dessen Namen" kommunizieren - also brächte eine Verschlüsselung so oder so nichts.
Ein weiterer Nachteil wäre, dass die Nachricht eine vorgegebene Größe hat. Aber wenn die Nachricht kleiner als 50 Bytes ist, könnte man dieses Problem lösen, indem man zu Beginn der Nachricht eine (natürlich verschlüsselte) Größenangabe für die Nachricht sendet und dann die restlichen Bytes mit zufälligen(!) Zahlen ausfüllt. Bei Nachrichten größer 50 Bytes schickt man einfach mehrere Blöcke.
Gibt es dabei irgendwelche Nachteile, die ich übersehen habe? Oder ließe sich das so realisieren?
cu,
Sebastian Meßmer