G05 AES Padding Oracle Webserver

Damit unser Programm G05 AES Padding Oracle möglichst realitätsnah arbeitet habe ich einen Mini-Webserver erstellt, welcher auf eine Mindestfunktionalität geschrumpft ist. Hier wird ein Login-Vorgang für einen Internetservice simuliert, bei dem der Benutzer das Passwort in eine Feld eingibt und dieses dann an den Webserver weiterreicht. Der Webserver muss natürlich den Schlüssel zur Verschlüsselung kennen und über eine Datenbank (in der z.B. die Hashes der Passwörter hinterlegt sind) eine Freigabe des Services ermöglichen.

Dieser Webserver gibt nur 2 Statusmeldungen zurück – entweder ein „HTTP/1.1 200 OK“ bei einem korrekten Padding oder ein „HTTP/1.1 500 Invalid Padding“ bei einem falschen Padding. Obwohl wir nun umständliche Aufrufe über das HTTP-Protokoll vornehmen, wird das verschlüsselte Passwort innerhalb weniger Sekunden ermittelt.

Selbstverständlich schmücke ich mich hier nicht mit fremden Federn, die Basis des Webservers entstammt dem Internet-Artikel „Ein Webserver in 150 Zeilen“ von Anders Moeller und der Artikel ist unter diesem Link zu finden: http://cs.au.dk/~amoeller/WWW/javaweb/server.html.

Beim Start des Servers werdet Ihr vermutlich von Eurer (Windows-) Firewall einen Warnhinweis erhalten – bitte bejaht die Frage nach einer erlaubten Kommunikation, sonst klappt es nicht mit der Entschlüsselung :-).

Hier ist nun der Sourcecode:

Die Ausgabe auf der Konsole ist „servertypisch“ kurz und knapp – solltet Ihr mehr Informationen in der Konsole wünschen ändert einfach in Zeile 56 den Schalter von „true“ in „false“:

Alle Quellcodes zu den Unsicherheiten findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/G-Unsicherheit. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 09.10.2019