Schuer: Einfache PHP-Verschlüsselung? Die 100-Euro-Wette. (Selfforumssieb)

Beitrag lesen

»Wenn man es unbedingt unsicher haben will, kann man auch folgende einfache XOR-Funktion nehmen [..]« - »Beweise mir, dass es unsicher ist und ernte 100 EUR.«

Auslöser der Diskussion war die Frage nach einer einfachen Verschlüsselung in PHP. Kalle_B bezieht sich dabei auf eine XOR-Funktion aus einem alten Forumsposting von 2003:

function verschluesseln($klartext, $schluessel) { $geheimtext = ""; for($i=0; $i<strlen($klartext);$i++) $geheimtext .= chr(ord($klartext{$i})^ord($schluessel{$i%strlen($schluessel)})); return base64_encode($geheimtext); }

Die Wette

Kalle_B wettet:

Hier ist eine verschlüsselte Datei nach meinem Muster:
aWRZYWpoZiBrMDsqJydvaVVPIE9IY…

Wer daraus bis zum 24. April 2008 24:00 Uhr als Erster wieder eine Datei machen kann und HIER IM FORUM seinen Weg beschreibt und sich den Zeitstempel holt, bekommt von mir 100 EUR in bar (Briefumschlag).

Orlando:

Es handelt sich um die ersten 64 kB der Forumshauptdatei. Meine Adresse findest du im Impressum.

Die Entschlüsselung

Henryk beschreibt seinen Lösungsweg sehr ausführlich und in bunt. Wer sich an dieser Stelle nicht zutraut, die Materie zu verarbeiten, mag vielleicht mit dem nachfolgenden »Best-of« schon glücklich sein:

Wir wissen: Es ist eine einfache Polyalphabetische Substitution. Die übliche erste Vorgehensweise ist Autokorrelation.

Das war die Stelle an der mir klar war dass dieses Verfahren sehr einfach gebrochen werden können müsste.

In C programmiert und mit -O3 übersetzt dauert das übrigens nur 40 Sekunden.

Von rund 5 Mio varianten hat file 500.000 nicht als "data" abgetan, aber die restlichen manuell zu durchsuchen war mir dann doch zu umständlich. Eins fiel aber auf: Da waren verdammt viele große "U"s (0x55) drin.

Irgendwann wird uns das manuell zu albern und wir automatisieren: decrypter-findoffsets.py

Dieses Restklassengewurschtel verursacht bei mir jedesmal Kopfschmerzen.

Zusammenfassend: Algorithmus komplett vernichtet.

Selbst lesen: Die gesamte Diskussion im SELFHTML-Forum und Henryks ausführliche Lösungsbeschreibung.
Vielen Dank an Kalle_B, Henryk Plötz und alle Beteiligten!

Ausgang der Wette

Henryk Plötz:

Grade kam ein Einschreiben mit Rückschein von Kalle. Inhalt: zwei Fünfzig-Euro-Scheine, fein säuberlich an ein Stück von einem Milchtütenkarton getackert.

Kalle_B:

Beim Lesen [Anm: des Textes mit der Lösungsbeschreibung] bin ich nicht viel schlauer geworden, nur einer Illusion beraubt, was mir 100 EUR wert war.

Fazit

Henryk Plötz:

AES nehmen, oder, wenn man konservativ sein will, 3DES, und alles wird gut. Selbstgebaute Verschlüsselsungsverfahren von Laien gehen *immer* schief. [..] Nur Verschlüsselungsalgorithmen die öffentlich bekannt sind und wenigstens ein paar Jahre lang von Kryptologen ergebnislos untersucht wurden sind vertrauenswürdig.

Weiterführende Links:

(bitte in den Kommentaren anbringen)