Seite 1 von 1

Eigenes Dateiformat für eine XOR-Verschlüsselung

Verfasst: Sonntag 26. Oktober 2008, 10:35
von cruel0r
Hi python-Forum
Ein paar Kollegen und ich haben einen Webspace gemietet, und möchten darauf nun Dateien hosten, welche aber verschlüsselt sein sollen. Wir haben uns als Spiel ausgedacht, dass jeder von uns eine simple XOR-Verschlüsselung programmiert (mit vorgegebenem Keyfile), und wer zuerst ein funktionnierendes Programm hat, gewinnt.
Ich habe nun gewonnen, und möchte mein Programm nun etwas weiter verfeinern, indem ich noch die Dateinamen verschlüssle und eine Checksumme für das Keyfile und das Originalfile einbaue.
Dabei haben sich mir folgende Fragen gestellt:

1. Könnte man eine mit XOR verschlüsselte Datei (Key hat man nicht) und ihrer md5/sha Summe entschlüsseln, wenn ich jetzt in meine verschlüsselte Datei alles hineinschreibe? (den Key natürlich nicht)

2. Da jedes Keyfile (pseudo)zufällig ist, würde es Sinn machen die md5/sha summe mitzuschicken vom keyfile, damit man weiss, ob die Datei mit dem richtigen Keyfile entpackt wird?

3. Welches ist die sicherste/beste Methode Text zu verschlüsseln? XOR darf ich nicht auf einen Dateinamen anwenden, weil es ja auch nicht zulässige Zeichen (z.B. "/") oder nicht ASCII-Zeichen geben kann.
Die Caesar-Methode dünkt mich ein wenig unsicher.

4. Gibt es etwas zu beachten, wenn ich mit Markern (Markerbytes, bei JPEG z.B. xFFD8) in einer Datei umgehe?

Vielen Dank für eure Antworten
Gruss cruel0r

Verfasst: Sonntag 26. Oktober 2008, 11:14
von sma
Meinst du sowas?

Code: Alles auswählen

import itertools

def transcode(m, k):
    return "".join(chr(ord(a) ^ ord(b)) for a, b in itertools.izip(m, itertools.cycle(k)))

k = "geheim"
m = "the truth is out there"
c = transcode(m, k)

print `c`
print `transcode(c, k)`
Das wäre jedenfalls, was ich unter einer XOR-Verschlüsselung verstehen würde. "k" ist der Schlüssel, "m" die Nachricht und "c" das verschlüsselte Ergebnis. Das das ganze ein symmetrisches Verfahren ist, dient "transcode" zum Ver- und Entschlüsseln.

Das ist keine Cäsar-Methode.

Beides ist kryptographisch gesehen total unsicher. Wenn du eine sichere Verschlüsselung haben willst, benutze ein etabliertes Verfahren wie AES. Das benötigt einen Schlüssel aus 128-Bits.

Ich verstehe nicht, was du wohin schreiben willst und was das mit MD5 oder SHA1 zu tun hat, aber wenn du Schlüssel und verschlüsselten Text zusammen transportierst (oder ablegt) kannst du auch gleich den unverschlüsselten Text transportieren.

Zu 2 würde ich sagen: Wozu den Test. Wenn glibberisch herauskommt, merkt man schon, das da was falsch war. Wieso willst du es dem Angreifer noch einfacher machen? Statt jetzt mögliche Schlüssel am Text durchzuprobieren und da diesem zu erkennen, ob der Schlüssel gepasst hat, muss ich dann nur noch Schlüssel erzeugen, die Prüfsumme berechnen und diese vergleichen. Das geht doch viel schneller, wenn die Schlüssel nicht sehr lang im Vergleich zum Text sind.

Zu 4: Du etwas verschlüsseln und trotzdem noch als JPEG-Bild erkennen? Wozu? Das wird im allgemeinen nicht gemacht. Falls du das doch machen willst, wird es deutlich komplizierter, denn du musst ja den Aufbau dieser Dateien (der nicht-trivial ist) erhalten und nur die Nutzdaten verschlüsseln.

Stefan

Re: Eigenes Dateiformat für eine XOR-Verschlüsselung

Verfasst: Sonntag 26. Oktober 2008, 11:53
von lunar
cruel0r hat geschrieben:1. Könnte man eine mit XOR verschlüsselte Datei (Key hat man nicht) und ihrer md5/sha Summe entschlüsseln, wenn ich jetzt in meine verschlüsselte Datei alles hineinschreibe? (den Key natürlich nicht)
Es vereinfacht das Brechen zumindest, da die Prüfsumme den Klartext eindeutig definiert. Um zu überprüfen, ob ein (wie auch immer) berechneter Klartext "richtig" ist, muss man nur die Prüfsumme berechnen und vergleichen.

Eine Verschlüsselungsverfahren sollte außer dem Chiffretext keinerlei weitere Informationen über den Klartext verraten. Genau das tust du aber, indem du die Prüfsumme im Klartext beilegst.
2. Da jedes Keyfile (pseudo)zufällig ist, würde es Sinn machen die md5/sha summe mitzuschicken vom keyfile, damit man weiss, ob die Datei mit dem richtigen Keyfile entpackt wird?
Es ist unsicher. Richtig wäre es, die Prüfsumme des Klartexts dem Klartext voranzustellen, und das Ergebnis dieser Konkatenation anschließend zu chiffrieren. Dann kann man nach der Dechiffrierung die Prüfsumme mit dem Klartext vergleichen und so die Integrität überprüfen.
3. Welches ist die sicherste/beste Methode Text zu verschlüsseln? XOR darf ich nicht auf einen Dateinamen anwenden, weil es ja auch nicht zulässige Zeichen (z.B. "/") oder nicht ASCII-Zeichen geben kann.
Wo hast du denn das her? Wieso sollte man Dateinamen oder Nicht-ASCII-Zeichen nicht auch mit einer XOR-Verknüpfung verschlüsseln können?
4. Gibt es etwas zu beachten, wenn ich mit Markern (Markerbytes, bei JPEG z.B. xFFD8) in einer Datei umgehe?
Grundsätzlich ist die Existenz allgemein bekannter Bytes im Klartext immer ein Ansatz für Known-Plaintext-Angriffe. Ob diese nun eine Gefahr darstellen, hängt von der Art der Chiffre ab.

Bei einem One-Time-Pad ist die Gefahr eher gering, da der Schlüssel endlos und zufällig ist, und das Wissen um ein Schlüsselbyte somit keinerlei Rückschlüsse auf andere Bytes in Klartext oder Schlüssel ermöglicht. Bei Stromchiffren mit endlichem Schlüssel oder Blockchiffren sieht das wieder anders aus.
Sind die so etwas wie "fälschungssicher"?
Was immer du damit jetzt auch meinst ...

Verfasst: Sonntag 26. Oktober 2008, 13:16
von BlackJack
Zu 3.: Damit der verschlüselte Dateiname wieder einen gültigen Dateinamen ergibt, kannst Du ihn ja einfach Base64 kodieren. Er ist dann zwar etwas länger, aber enthält keine "verbotenen" Bytewerte mehr.

Ansonsten würde ich auch eher einen etablierten Algorithmus vorschlagen. XOR ist nur als "one time pad" sicher. Also wenn ihr persönlich eine DVD mit einer riesigen Zufallsdatei austauscht und bei den Dateien dann noch angebt, ab welchem Offset die Daten zur Verschlüsselung genommen wurden und die in dem Bereich nur einmal verwendet, dann ist das ein sicheres Vefahren. Sonst eher nicht…

Verfasst: Sonntag 26. Oktober 2008, 15:33
von cruel0r
Vielen Dank für eure Antworten, ich werde eure Vorschläge einmal versuchen auszuführen.
Gruss cruel0r