-
10. 12. 2011, 12:33 #1Mitglied
- Registriert seit
- Dec 2011
- Beiträge
- 5
Verschlüsselungsalgorithmus rausfinden
Guten Tag,
ich nutze aktuell ein Programm welches eine symmetrische Verschlüsselung nutzt. Ich möchte die Daten aber in einem weiteren Programm automatisch verwalten und muss dazu den Verschlüsselungsalgorithmus rausfinden:
Bekannt sind:
1) Verschlüsselungspasswort (5 Zeichen)
2) Ver- und Entschlüsselte Textdatei
3) Ver- und Entschlüsselte Textdatei haben die gleiche Zeichenlänge (char-Länge)
4) Das Programm (in das die verschlüsselten Daten eingelesen werden) ist vermutlich mit C++ und einer VCL Bibliothek geschrieben (aber diese Vermutung ist SEHR waage)
5) Die verschlüsselten Daten werden als Email-Anhang in einer Textdatei versendet. Der Anhang wird in einem Ordner gespeichert und dann mittels dem Programm entschlüsselt.
Die verschlüsselte Datei sieht beim öffnen mittels Texteditor sehr wirr aus (chinesische Zeichen??).
Habe leider noch nicht wirklich viel mit Algorithmen gearbeitet.
Gibt es eine möglichkeit den Algorithmus rauszufinden?
-
10. 12. 2011, 12:49 #2
Re: Verschlüsselungsalgorithmus rausfinden
Im Allgemeinen (bei einem guten Cipher) nein, mindestens nicht mir einer in der Praxis sinnvollen Anzahl von Ein- und Ausgabepaaren.
Du kannst natürlich anhand der Ein- und Ausgaben bestimmte Annahmen treffen - wenn z.B. die Länge der Ein- und Ausgabe (bzw. des Plain- und Cipher-Textes) immer identisch sind, liegt die Vermutung nahe, es handle sich um einen Stream-Cipher oder um einen Block-Cipher mit maximal 8 Bit (1 Byte) Blockgrösse handelt. Im Endeffekt wirst du jedoch das Programm selbst rückentwickeln müssen, um an die Algorithmen zur Schlüsselableitung aus dem Passwort (und ggf. weiteren Geheimnissen) und zur Verschlüsselung zu gelangen - die getroffenen Annahmen sowie eventuelle Informationen aus der Dokumentation des Programms können helfen, die relevanten Stellen zu isolieren.
Um welches Programm (Name? Entwickler?) handelt es sich? Ist dieses öffentlich verfügbar, so dass man es sich ggf. einmal ansehen könnte?
-
10. 12. 2011, 12:55 #3Mitglied
(Threadstarter)
- Registriert seit
- Dec 2011
- Beiträge
- 5
Re: Verschlüsselungsalgorithmus rausfinden
Nein das Programm ist leider nicht öffentlich verfügbar. Handelt sich hier um ein speziell entwickeltes Programm.
Schonmal vielen Dank für die Tips, eventuell helfen die beim ausprobieren etwas weiter
-
10. 12. 2011, 13:40 #4Mitglied
(Threadstarter)
- Registriert seit
- Dec 2011
- Beiträge
- 5
Re: Verschlüsselungsalgorithmus rausfinden
P.S.:
Habe grade nochmal rumgespielt. Der Anfang der Datei (die ersten 30 Zeichen) sind in der entschlüsselten Version immer gleich (Hat was mit der Struktur der Auftragsdatei zu tun).
In der verschlüsselten Version sieht es ähnlich aus. Diese weißt bis zu den abweichenden Zeichen auch immer die gleiche Form auf.
Das lässt doch vermuten, dass zwar ein Block vom vorherigen abhängt, es aber keinen zufälligen Start des Algorithmus gibt?!
-
10. 12. 2011, 14:04 #5
Re: Verschlüsselungsalgorithmus rausfinden
Ja, das lässt den Schluss zu, dass der Cipher nicht mit einem zufälligen IV initialisiert wird und bei gleichem Passwort dasselbe Schlüsselmaterial erzeugt. Dadurch ergibt sich bei gleichem Passwort und gleicher Eingabe auch derselbe Ciphertext. Ob ein `Block` (maximal ein Byte gemäss der Schlussfolgerung aus der Tatsache, dass die Ein- und Ausgabe gleich lang ist) bzw. ein Byte des Schlüsselstroms von der vorherigen Ein- oder Ausgabe abhängt, geht daraus nicht hervor.
Ob es sich um einen Stream-Cipher handelt, welcher einen von der Ein- und Ausgabe unabhängigen Schlüsselstrom mit der Eingabe XOR-verknüpft, könntest du leicht feststellen, indem du versuchst, aus einem bekannten Eingabe-Ausgabe-Paar den Schlüsselstrom zu extrahieren. Bedenke, dass wenn
gilt, insbesondere auchCode:ciphertext[i] = plaintext[i] XOR key[i]
gilt. Ist der Schlüsselstrom nun ausschliesslich vom eingegebenen Passwort abhängig, müsste sich damit eine andere, mit demselben Passwort verschlüsselte Datei gemässCode:key[i] = ciphertext[i] XOR plaintext[i]
entschlüsseln lassen.Code:plaintext2[i] = ciphertext2[i] XOR key[i] = ciphertext2[i] XOR (ciphertext[i] XOR plaintext[i])
-
11. 12. 2011, 14:09 #6Mitglied
(Threadstarter)
- Registriert seit
- Dec 2011
- Beiträge
- 5
Re: Verschlüsselungsalgorithmus rausfinden
Vielen Dank schonmal. Hab das obige mal wie folgt mit php realisiert.
- Datei ausgelesen und jeden Char als Integerzahl in einen array geschrieben
- jeden Integerwert Bitweise ( ^-Operator) wie o.g. (key[i] = ciphertext[i] XOR plaintext[i]) bearbeitet.
Hat leider keinen erfolg gebracht um ciphertext2 vollständig zu entcoden. Hab ich vllt einen Denkfehler drin? Ist es falsch Integer für Integer bitweise zu verknüpfen?
Was aufällig war: Ich konnte Chipertext2 so weit entschlüssen, bis es zu Abweichungen im Text kam: So hieß es iwann "Status=60 storniert" anstelle "Status=65 storniert XY".
Hier konnte er den Ciphertext2 aufgrund der Abweichung nur bis VOR "Status=" encoden. Anscheinend wirkt sich eine Abweichung schon auf 6 Stellen vorher aus????
-
11. 12. 2011, 15:22 #7
Re: Verschlüsselungsalgorithmus rausfinden
Damit kannst du ausschliessen, dass es sich um einen Stream-Cipher handelt, welcher einen ausschliesslich vom Passwort abhängigen Schlüsselstrom erzeugt und mit dem zu ver- bzw. entschlüsselnden Material XOR-verknüpft - denn dann wäre dein Ansatz erfolgreich gewesen. Offenbar hängt die Verschlüsselung eines bestimmten Bytes von dessen Kontext (d.h. von den umgebenden Bytes, nicht ausschliesslich von der Position im Eingabestom) ab. Denkbar wäre etwa ein Block-Cipher in Verbindung mit Ciphertext stealing (um die exakt identischen Dateigrössen zu erklären) - das ist jedoch bloss eine Spekulation, ebenso die zuvor getroffenen Vermutungen und Annahmen.
Wie erwähnt: Du wirst das Programm, welches die verschlüsselten Dateien erstellt, rückentwickeln müssen. Dazu eignet sich (sofern es sich um nativen Code handelt) ein Code-analysierender Debugger wie z.B. WinDbg oder OllyDbg. Grundlegende und fortgeschrittene Tutorials findest du etwa unter http://tuts4you.com/download.php.
Dabei kannst du natürlich hoffen, dass die Entwickler bekannte Schnittstellen (z.B. Windows' CryptoAPI, eine bekannte kryptografische Bibliothek, ...) nutzen - dann lassen sich die zugehörigen Aufrufe und deren Parameter sehr leicht isolieren. Unglücklicher wäre, wenn die Entwickler den verwendeten Cipher selbst implementiert haben oder gar einen eigenen Cipher nutzen - dann wirst du diesen komplett analysieren und (sofern es sich um einen eigenen Cipher handelt) sogar selbst neu implementieren müssen. Ohne Reverse-Engineering-Vorwissen erachte ich das als sehr schwer - und unabhängig davon ist es sehr aufwändig.
-
06. 02. 2012, 23:42 #8Mitglied
(Threadstarter)
- Registriert seit
- Dec 2011
- Beiträge
- 5
Re: Verschlüsselungsalgorithmus rausfinden
Das ist wohl meine letzte Chance den Algorithmus rauszufinden. Vllt. hilft es ja:
Die verschlüsselten Daten werden in einer *waf.tns Datei gespeichert. Die entschlüsselten Daten in einer .*waf Datei in folgender Struktur:
[Abschnittsbeschreibung z.b. "Kundendaten"]
Kundenname=Mustermann
Anschrift=Musterstr. xy
usw..
vllt. gibt es ja doch noch einen heißen Tipp...
-


Zitieren

mehr lesen...







Mechwarrior Online: Closed Beta...
Heute, 12:36 in gulli:news