Im digitalen Zeitalter sind Privatpersonen und Unternehmen einem zunehmenden Risiko von Datenverlusten ausgesetzt. Im Kontext der Informationstheorie bezieht sich Informationsfluss auf den Prozess der Übertragung von Daten von einer Variablen x
zu einer anderen Variablen y
. Kein System möchte vertrauliche Informationen preisgeben, da dies nicht nur die Privatsphäre gefährdet, sondern auch zu erheblichen Schäden für das Unternehmen führen kann.
Es gibt viele Möglichkeiten, die Offenlegung von Informationen einzuschränken, z. B. Zugriffskontrolllisten, Firewalls und Verschlüsselungstechnologie. Auch wenn diese Methoden die Veröffentlichung von Informationen bis zu einem gewissen Grad einschränken, können sie dennoch nicht garantieren, dass die Informationen nicht durchsickern.
Mit dem technologischen Fortschritt haben sich auch die Methoden zur Gewährleistung der Datensicherheit stark verändert. Zugriffskontrolllisten können beispielsweise den unbefugten Zugriff auf Dateien verhindern, sie können jedoch nicht kontrollieren, was mit den Daten geschieht, sobald sie verwendet werden. Auch wenn mithilfe der Verschlüsselungstechnologie Informationen privat über einen unsicheren Kanal übertragen werden können, ist die Vertraulichkeit der Daten nach der Entschlüsselung gefährdet. Daher ist es besonders wichtig, die Kontrolle des Informationsflusses zu verstehen.
Informationsflüsse können grob in zwei Kategorien unterteilt werden: explizite Flüsse und Bypass-Flüsse. Von explizitem Datenfluss spricht man, wenn ein Geheimnis explizit in eine öffentlich sichtbare Variable weitergegeben wird, zum Beispiel:
var l, h; l := h;
Andererseits nutzen Side-Streams bestimmte Eigenschaften wie Ausführungszeit oder Stromverbrauch aus, um Informationen preiszugeben. Wenn beispielsweise in einer Bedingung h
wahr ist, wird eine zeitaufwändige Arbeit ausgeführt, die es einem Angreifer ermöglicht, auf h
basierend auf der vom Programm benötigten Zeit zu schließen Der Wert von .
Der implizite Informationsfluss ist ebenfalls Teil des Bypass-Flusses. Während der Kontrollfluss eines Programms auf privaten Daten basiert, können öffentliche Variablen geheime Informationen enthalten.
Nichteinmischung ist eine Richtlinie, die betont, dass ein Angreifer nicht in der Lage sein sollte, zwischen zwei Berechnungen anhand ihrer Ausgabe zu unterscheiden, wenn sich diese nur in ihren geheimen Eingaben unterscheiden. Allerdings ist diese Vorgehensweise zu restriktiv, um in tatsächlichen Verfahren angewendet zu werden.
Beispielsweise könnte es sein, dass ein Programm zur Kennwortprüfung bei Bedarf bestimmte geheime Informationen preisgeben muss: nämlich, ob das eingegebene Kennwort korrekt ist. Auf diese Weise kann ein Angreifer auch dann nützliche Informationen erhalten, wenn das Programm das Kennwort ablehnt, z. B. weil das eingegebene Kennwort ungültig war.
Mechanismen zur Informationsflusskontrolle dienen der Durchsetzung von Informationsflussrichtlinien. Um dieses Ziel zu erreichen, wurden verschiedene Methoden zur Implementierung von Informationsflussstrategien vorgeschlagen. Laufzeitmechanismen können Daten auf Betriebssystem- und Programmiersprachenebene kennzeichnen, während die statische Programmanalyse sicherstellt, dass der Informationsfluss im Programm den entsprechenden Richtlinien folgt.
Allerdings können dynamische Analysetechniken nicht alle Ausführungspfade beobachten und daher weder Robustheit noch Genauigkeit garantieren. Um sicherzustellen, dass sie die Richtliniendurchsetzung nicht beeinträchtigen, erfordern diese Techniken häufig die Beendigung von Ausführungen, bei denen möglicherweise vertrauliche Informationen verloren gehen könnten, oder das Ignorieren von Updates, bei denen Informationen verloren gehen könnten.
Ein sicheres Typsystem fügt Programmiersprachen ein wichtiges Element hinzu, indem es jedem Ausdruck ermöglicht, zusätzlich zu einem Typ (wie Boolean oder Integer) auch ein Sicherheitslabel zu tragen. Der Vorteil hierbei besteht darin, dass durch die Typprüfung sichergestellt werden kann, dass die Flussrichtlinie eingehalten wird, wenn das Programm die Prüfung besteht, und dadurch ein unsachgemäßer Informationsfluss vermieden wird.
Wenn beispielsweise eine Variable als Hochsicherheitstyp gekennzeichnet ist, sollte die Variable eine Variable mit niedrigem Sicherheitstyp nicht ändern, um so zu verhindern, dass vertrauliche Informationen verloren gehen.
In realen Anwendungen ist die Nichteinmischungspolitik aufgrund ihrer Strenge unpraktisch. Um das Ziel einer kontrollierten Veröffentlichung zu erreichen, wurden daher zahlreiche Pläne zur Ermöglichung der Veröffentlichung von Informationen vorgeschlagen. Diese Schemata werden auch als Freigabe von Informationen bezeichnet. Eine robuste Freigabe muss gewährleisten, dass ein aktiver Angreifer das System nicht manipulieren kann, um Zugriff auf Geheimnisse zu erhalten, die über das hinausgehen, was ein passiver Angreifer weiß.
ZusammenfassungDie Kontrolle des Informationsflusses wird in der modernen Programmierung und im Datenschutz immer wichtiger. Allerdings bleibt die Frage, wie die Datensicherheit in praktischen Anwendungen effektiv gewährleistet werden kann, eine Herausforderung, die es zu bewältigen gilt. Sind Sie darauf vorbereitet, mit diesen potenziellen Bedrohungen umzugehen?