joschilein
Multitalent
- 5 Mai 2006
- 1.393
- 151
Ich habe mich die letzten Tage mal etwas in RSA eingelesen, da ich eine asymmetrische Verschlüsselung auf dem Server brauche. Es würden dann Daten gespeichert, die auch nicht (so leicht) zu knacken sind, wenn dem Angreifer die Datenbank und die PHP-Skripte zur Verfügung stünden. Erst im meinem Offline-System sollen sie mit dem dort vorliegenden (privaten) Schlüssel wieder gelesen werden können.
Nun hatte ich mir mal verschiedene Klassen angeschaut, die das Thema auf ziemlich unterschiedliche Weise angehen. Die Punkte 1 und 3 sind dabei vom Algorithmus her natürlich relativ nahe.
Aber gerade der Punkt 2 scheint einen großen Unterschied zu bringen. In einer angeschauten Klasse werden z.B. fünf Zeichen aus dem Nachrichtentext entnommen, jeweils als zweistelliger Ascii-Code verbunden und damit ein 10stelliger Integer an Schritt 3 übergeben, wo dann bis zu 12stellige Integer entstehen.
Nun ist das Problem, dass der Zeichensatz dadurch begrenzt ist. Ist z.B. ein "ü" im Nachrichtentext, dann wird dieser Block hinterher falsch entschlüsselt.
Ich möchte den möglichen Zeichensatz erhöhen. Eine dreistellige Ascii-Representation führt aber auch zu Problemen, da selbst bei nur 4 Zeichen pro Block (3*4=12stellig bzw. 11stellig wegen meist führender 0) manche Blöcke falsch entschlüsselt werden. Das hat sicher mit der maximalen Größe von Integern zu tun.
Nun überlege ich den Schritt 2 so zu optimieren, dass in maximal 10 Stellen möglichst viele Zeichen bei einem möglichst großem Zeichensatz reingehen.
Wenn ich 250 Zeichen als Zeichensatz hätte (mal grob durchgezählt brauche ich mindestens 107, zweistellig reicht also keinesfalls), könnte ich z.B. jeweils 4 Zeichen zu einer dreistelligen Zahl verrechnen (4*250=1000; 000-999), also 9 Stellen für 12 Zeichen (bisher 10 Stellen für 5 Zeichen). Bei 10stelligem Ergebnis könnten es sogar zwei fünfer Blöcke à 400 Zeichen sein, also 10 Stellen für 800 Zeichen oder 200 bei 1000er Zeichensatz. Und man kann natürlich noch weiter denken und gleich alle 10 Stellen für 40 Mio (bei 250er Satz) bzw. 10 Mio (bei 1000er Satz) Zeichen nutzen.
Ich kann jetzt nur leider nicht beurteilen, ob sich dadurch die Sicherheit im letztlichen RSA Ergebnis ändert. Dieser wird dann selten über einen verschlüsselten Block hinauskommen. In Sachen Komprimierung wäre das natürlich Spitze. Aber vor allem: Hier geht es zwar nur um eine Verschlüsselung für mich selbst, aber wie wäre es wenn sowas auch zur gegenseitigen Kommunikation genutzt werden sollte? Der Empfänger müsste doch neben der eigentlichen Umkehrung der Verschlüsselung von Schritt 3 auch wissen wie das Blockergebnis in die einzelnen Zeichen des Nachrichtentextes umgesetzt werden soll, damit auch Schritt 2 "entschlüsseln" können. Diese Verschlüsselung geht zwar letztlich nicht über die Kraft von Cäsar&Co. hinaus, aber auf irgendein Verfahren müssen sich Sender und Empfänger ja einigen.
Zwar interessiert mich in erster Linie natürlich erstmal mein konkreter Ansatz, aber an der Theorie dahinter bin ich auch nicht ganz uninteressiert. Meine Recherchen dazu kommen aber irgendwie nicht weiter. Habe nur gelesen, dass Nachrichten i.d.R. symmetrisch verschlüsselt werden (z.B. AES) und nur der AES-Schlüssel dann per RSA verschlüsselt wird, was wohl insgesamt Geschwindigkeitsvorteile bringen soll.
Nun hatte ich mir mal verschiedene Klassen angeschaut, die das Thema auf ziemlich unterschiedliche Weise angehen. Die Punkte 1 und 3 sind dabei vom Algorithmus her natürlich relativ nahe.
- ggf. Erzeugung der beiden/drei Schlüssel
- Unwandlung des Nachrichtentextes in Zahlenkolonnen
- Die Verrechnung der Zahlenkolonnen mit dem öffentlichen Schlüssel
Aber gerade der Punkt 2 scheint einen großen Unterschied zu bringen. In einer angeschauten Klasse werden z.B. fünf Zeichen aus dem Nachrichtentext entnommen, jeweils als zweistelliger Ascii-Code verbunden und damit ein 10stelliger Integer an Schritt 3 übergeben, wo dann bis zu 12stellige Integer entstehen.
Nun ist das Problem, dass der Zeichensatz dadurch begrenzt ist. Ist z.B. ein "ü" im Nachrichtentext, dann wird dieser Block hinterher falsch entschlüsselt.
Ich möchte den möglichen Zeichensatz erhöhen. Eine dreistellige Ascii-Representation führt aber auch zu Problemen, da selbst bei nur 4 Zeichen pro Block (3*4=12stellig bzw. 11stellig wegen meist führender 0) manche Blöcke falsch entschlüsselt werden. Das hat sicher mit der maximalen Größe von Integern zu tun.
Nun überlege ich den Schritt 2 so zu optimieren, dass in maximal 10 Stellen möglichst viele Zeichen bei einem möglichst großem Zeichensatz reingehen.
Wenn ich 250 Zeichen als Zeichensatz hätte (mal grob durchgezählt brauche ich mindestens 107, zweistellig reicht also keinesfalls), könnte ich z.B. jeweils 4 Zeichen zu einer dreistelligen Zahl verrechnen (4*250=1000; 000-999), also 9 Stellen für 12 Zeichen (bisher 10 Stellen für 5 Zeichen). Bei 10stelligem Ergebnis könnten es sogar zwei fünfer Blöcke à 400 Zeichen sein, also 10 Stellen für 800 Zeichen oder 200 bei 1000er Zeichensatz. Und man kann natürlich noch weiter denken und gleich alle 10 Stellen für 40 Mio (bei 250er Satz) bzw. 10 Mio (bei 1000er Satz) Zeichen nutzen.
Ich kann jetzt nur leider nicht beurteilen, ob sich dadurch die Sicherheit im letztlichen RSA Ergebnis ändert. Dieser wird dann selten über einen verschlüsselten Block hinauskommen. In Sachen Komprimierung wäre das natürlich Spitze. Aber vor allem: Hier geht es zwar nur um eine Verschlüsselung für mich selbst, aber wie wäre es wenn sowas auch zur gegenseitigen Kommunikation genutzt werden sollte? Der Empfänger müsste doch neben der eigentlichen Umkehrung der Verschlüsselung von Schritt 3 auch wissen wie das Blockergebnis in die einzelnen Zeichen des Nachrichtentextes umgesetzt werden soll, damit auch Schritt 2 "entschlüsseln" können. Diese Verschlüsselung geht zwar letztlich nicht über die Kraft von Cäsar&Co. hinaus, aber auf irgendein Verfahren müssen sich Sender und Empfänger ja einigen.
Zwar interessiert mich in erster Linie natürlich erstmal mein konkreter Ansatz, aber an der Theorie dahinter bin ich auch nicht ganz uninteressiert. Meine Recherchen dazu kommen aber irgendwie nicht weiter. Habe nur gelesen, dass Nachrichten i.d.R. symmetrisch verschlüsselt werden (z.B. AES) und nur der AES-Schlüssel dann per RSA verschlüsselt wird, was wohl insgesamt Geschwindigkeitsvorteile bringen soll.