Obfuskation (kryptografisch)
# Obfuskation (kryptografisch)

Bei der kryptografischen Obfuskation geht es um die Verschleierung dessen, was ein Programm tut, und darum, es gegen automatische Analyse zu schützen. Dadurch können zwar Ein- und Ausgaben beobachtet werden, aber die Art der Berechnung bleibt auch einer tieferen Analyse verborgen. Im Vergleich zur Software-Obfuskation stellt die kryptografische Obfuskation eine stärkere Methode dar.

## Hintergrund und Motivation

Bei der Obfuskation mittels Software geht es darum, den Programmablauf so zu verschleiern, dass Reverse Engineering und damit Produktpiraterie erschwert wird, um Know-how zu schützen. In der Vergangenheit wurden allerdings zahlreiche Werkzeuge zum Reverse Engineering entwickelt, wie beispielsweise das kostenfreie Ghidra der NSA.

Die Hoffnung auf bessere Methoden, als die Software-Obfuskation bietet, begründet sich in dem von Alan Turing (1912–1954) vorgelegten Beweis des Halteproblems. Danach kann ein Programm durch Analyse des Quellcodes eines anderen Programms nicht immer entscheiden, ob das andere Programm anhält oder unbegrenzt weiterläuft. Nachdem lange an dieser Möglichkeit der Obfuskation gezweifelt wurde, gelang es den Forschern Gentry, Halevi, Raykova, Sahai und Waters im Jahr 2013, einen Obfuskator vorzustellen, der für beliebige Funktionen erlaubt, deren Arbeitsweise zu verschleiern.

## Anwendung

Mit der kryptografischen Obfuskation ist es möglich, Algorithmen so zu verschleiern, dass Eingabe und Ausgabe analysiert werden können, der Code dazwischen aber undurchsichtig bleibt, auch wenn der Nutzer Zugriff auf den Programmcode hat.

### Beispiel

Ein Programm soll ein Passwort im Code speichern („hartcodiertes Passwort“) und eine Eingabe mit dem Passwort vergleichen, um einen Zugriff zu erlauben. Dazu wird eine Eingabe mit dem programmierten Passwort verglichen. Wird das Passwort im Klartext gespeichert, so ist es bei der Analyse des Codes leicht zu finden.

Der kryptografischen Obfuskation entspricht dagegen folgendes Vorgehen: Aus dem richtigen Passwort wird ein kryptografischer Hash-Wert gebildet und hartcodiert. Die Eingabe wird vor dem Vergleich mit dem gleichen Hash-Verfahren in einen Hash-Wert verwandelt und mit dem hartcodierten Hash des Passwortes verglichen. So ist das hartcodierte Passwort nicht erkennbar und lässt sich durch die Falltürfunktion des Hash-Wertes auch nicht rekonstruieren.

Abgrenzung: Unabhängig von der kryptografischen Obfuskation bietet auch eine homomorphe Verschlüsselung die Möglichkeit, Daten im Programmablauf zu schützen. In diesem Fall werden Berechnungen (z. B. Grundrechenarten) auf verschlüsselten Daten ausgeführt, und nach der Entschlüsselung erscheint das gleiche Ergebnis, als wenn die Berechnungen normal mit unverschlüsselten Daten ausgeführt worden wären.

