19. Oktober 2020

Sicherheitsmodelle für Verschlüsselungsverfahren

Nachdem es im letzten Eintrag der Krypto-Kolumne darum ging, wie Verschlüsselungsverfahren funktionieren, wollen wir uns diesmal der Frage annähern, warum Verschlüsselungsverfahren eigentlich sicher sind. Aber bevor wir diese Frage beantworten können, müssen wir besprechen, was eigentlich mit „Sicherheit“ gemeint ist. Die folgenden Fragen sind dabei zentral:

  • Was ist ein „plausibler“ Angriff?
  • Welche Angriffsmöglichkeiten gibt es?
  • Was ist eigentlich das Ziel eines Angriffs auf ein Verschlüsselungsverfahren?

Die Antworten auf alle diese Fragen sind komplexer, als sie zuerst erscheinen mögen. Fangen wir mit der ersten Frage an:

Was ist ein plausibler Angriff?

Diese Frage hat nichts mit der Rechenpower oder Intelligenz von Angreifern zu tun. Auch die genaue Vorgehensweise oder das Fachwissen spielt keine Rolle. In der Kryptographie geht man immer vom schlimmsten möglichen Fall aus. Wir denken also gar nicht erst darüber nach, welche konkrete Hardware Angreifern zur Verfügung steht oder über wieviel Rechenpower sie verfügen. Wir gehen einfach davon aus, dass potentielle Angreifer beliebig viel Rechenpower haben und zusätzlich auch noch über das nötige Fachwissen verfügen.

Was wir aber einschränken müssen: Der Angriff muss in „plausibler“ Zeit zu einem sinnvollen Ziel kommen. Gegen „unplausibel lange“ Angriffe wollen wir keine Sicherheit bieten.

Warum diese Einschränkung? Nun, „unplausible“ Angriffe dauern so lang, dass es praktisch unmöglich ist sie auszuführen, egal über welche Hardware man verfügt (mehr dazu gleich). Man kann zwar auch Verfahren konstruieren, die gegen diese Angriffe Schutz bieten, das geht aber immer zur Lasten der Benutzbarkeit und der Effizienz der Verschlüsselung. „Perfekte Sicherheit“ ist zwar tatsächlich möglich, aber extrem kostspielig (was das Thema eines anderen Beitrags sein wird) und bietet für die meisten praktischen Anwendungsfälle keinen wirklichen Vorteil.

Um die Laufzeit bemessen zu können, verwendet man einen sogenannten „Sicherheitsparameter“. Man betrachtet die Zeit (also die Anzahl der Berechnungsschritte) von Angriffen in Abhängigkeit dieses Parameters. Ich erlaube mir hier eine Vereinfachung und setze den Sicherheitsparameter mit der Bitlänge des geheimen Schlüssels gleich. Streng genommen ist das nicht korrekt, aber da der Sicherheitsparameter immer die Schlüssellänge beeinflusst, eignet sich diese Vereinfachung gut, um das allgemeine Prinzip zu veranschaulichen.

Wächst die Laufzeit eines Angriffs exponentiell in Abhängigkeit von der Schlüssellänge, dann wird er als „unplausibel“ kategorisiert (das Thema „Exponentielles Wachstum“ ist ja momentan „dank“ Corona auch in aller Munde und Ihnen daher vielleicht schon ein Begriff). Alle anderen Angriffe interpretieren wir als „plausibel“.

Ein Beispiel: Nehmen wir mal an, der Schlüssel ist b Bit lang. Einen Angriff, der b²+3*b  Rechenschritte benötigt, würde man als plausibel ansehen. Bei einem 128 Bit Schlüssel bräuchte dieser hypothetische Angriff 16.768 Rechenschritte, bei 256 Bit 66.304 Schritte usw. – durchaus im Bereich des Möglichen, selbst wenn wir jeden Rechenschritt mit einer Sekunde gleichsetzen (was natürlich übertrieben ist).

Ein Angriff der 2ᵇ Schritte benötigt, wird dagegen als unrealistisch kategorisiert. Warum das? Ein solches exponentielles Wachstum steigt einfach viel zu schnell an. Ein Angriff der 2⁶⁴ Schritte benötigt ist heute zwar durchaus durchführbar, eine typische Schlüssellänge, z.B. beim AES Verschlüsselungsverfahren (welches wir alle tagtäglich verwenden), ist aber 256 Bit. Die Zahl 2²⁶⁵ ist aber so astronomisch groß, dass man selbst mit hypothetischen Megacomputern vor dem Tod des Universums nicht mal annährend zum Ende einer Berechnung kommen würde, die so viele Rechenschritte benötigt.

Ein Brute-Force Angriff (also das einfache Durchprobieren aller möglichen Schlüssel) ist ein solcher Angriff mit exponentieller Laufzeit. Interpretieren wir den geheimen Schlüssel als Bitstring der Länge b, dann braucht ein Brute-Force Angriff 2ᵇ Rechenschritte. Der beste Schutz gegen diese Angriffe ist es also, lange Schlüssel zu wählen. Ein solcher Angriff ist dann zwar theoretisch immer noch möglich, praktisch aber nicht durchführbar.

Hinweise zu empfehlenswerten Schlüssellängen gibt übrigens die technische Richtlinie 02102 des Bundesamts für Sicherheit in der Informationstechnik. Gerade bei Public-Key Verfahren ist hier Vorsicht geboten und man sollte sich bei der Wahl der Schlüssellänge auf den Rat von Experten verlassen. Aufgrund der hier verwendeten mathematischen Strukturen und deren Eigenschaften kann es z.B. sein, dass bei der Verwendung eines 4096-Bit Schlüssels dieser mithilfe von bekannten Angriffstechniken in „nur“ 2²⁶⁵ Rechenschritte berechnet werden kann. 4096 Bit bietet in diesem Beispiel also nur „256 Bit Sicherheit“ im obigen Sinne.

Welche Angriffsmöglichkeiten gibt es?

Nachdem wir über die Laufzeit und die Rechenpower gesprochen haben, müssen wir uns Gedanken darüber machen, welche Angriffsmöglichkeiten Angreifer haben. Wieder gehen wir ganz pauschal vom schlimmsten Fall aus: Angreifer kennen die modernsten Angriffstechniken, verfügen über jegliches Fachwissen und beherrschen alle Angriffstechniken perfekt. Prinzipiell räumen wir dem Angreifer jede mögliche Angriffstechnik ein (mit der oben beschriebenen Einschränkung bzgl. der Plausibilität der Laufzeit).

Wie schon im vorherigen Beitrag hervorgehoben, gehen wir davon aus, dass die Algorithmen zum Ver- und Entschlüsseln öffentlich bekannt sind. Das passt auch zur Annahme, dass Angreifer über Fachwissen verfügen. Was aber nicht öffentlich bekannt ist, ist der geheime Schlüssel, denn der wird ja von jedem Benutzer des Verschlüsselungsverfahrens individuell berechnet und geheim gehalten.

Wir müssen uns daher Gedanken darüber machen, inwiefern Angreifer dennoch mit dem geheimen Schlüssel „interagieren“ können. Wir erinnern uns: der geheime Schlüssel wird immer zum Entschlüsseln verwendet. Mit „Interagieren“ meine ich somit hauptsächlich: Ist es einem Angreifer möglich, irgendwie an Chiffrate zu gelangen (z.B. durch betrügerisches Verhalten), zu denen er den passenden Klartext kennt? Solche Klartext-Chiffrat-Paare können wichtige Hinweise auf den verwendeten Schlüssel geben und bestimmte Angriffstechniken erst ermöglichen.

Man unterscheidet hier verschiedene Angriffsklassen:

Known-Plaintext Angriffe: Hier kennt der Angreifer eine eingeschränkte Zahl von Chiffraten, zu denen er auch die zugehörigen Klartexte (engl. Plaintext) kennt. Er hat aber keinerlei Kontrolle darüber, was das für Klartexte sind. Das deckt z.B. die Fälle ab, in denen Angreifer durch Datenlecks an solche Klartext-Chiffrat-Paare gekommen sind.

Chosen-Plaintext Angriffe: Der Angreifer kann selbst beliebige Nachrichten verschlüsseln. Beispielsweise, indem er die Anwender trickreich dazu manipuliert, gewisse Nachrichten zu verschlüsseln (Stichwort „Social Engineering“). Bei asymmetrische Verfahren ist diese Angriffsart besonders naheliegend. Der Schlüssel, um Chiffrate zu erstellen, ist ja öffentlich bekannt. Somit kann der Angreifer selbst beliebige Chiffrate aus ihm bekannten Klartexten erstellen.

Chosen-Chipertext Angriffe: Der Angreifer kann nicht nur selbst beliebige Nachrichten verschlüsseln, sondern sogar (begrenzt) Chiffrate entschlüsseln lassen, deren Inhalt er nicht kennt. Das ist die stärkste Angriffsart und sie erscheint auf den ersten Blick vielleicht eher unplausibel. Tatsächlich ist aber auch diese Angriffsart realistisch, wie u.a. der Angriff von Bleichenbacher bewiesen hatte. Durch diesen Angriff war es möglich SSL 3.0-Servern als „Entschlüsselungsorakel“ zu missbrauchen und durch geschickte Serveranfragen beliebige Chiffrate zu entschlüsseln.

Zwar werden solche Angriffe auf lange Sicht (hoffentlich) aufgrund der Datenmengen nicht unbemerkt bleiben und der Angreifer (hoffentlich) irgendwann von einer Intrusion Detection System o.ä. ausgesperrt werden, sodass er den Zugriff auf dieses „Entschlüsselungsorakel“ verliert. Aber bis das passiert, hat der Angreifer möglicherweise schon genug Chiffrate entschlüsseln lassen können, um sein wahres Angriffsziel zu erreichen. Das führt uns zur dritten Frage:

Was ist das Ziel eines Angriffs auf ein Verschlüsselungsverfahren?

Eine naheliegende (und gerade in Filmen und Büchern beliebte) Antwort darauf ist: Der Angreifer will den geheimen Schlüssel berechnen. Auf den ersten Blick wirkt das auch ganz plausibel, denn wer den geheimen Schlüssel kennt, kann ja alle Chiffrate entschlüsseln.

Aber das ist zu kurz gedacht. Vielleicht ist das Verfahren zwar so sicher, dass der geheime Schlüssel nicht einfach so berechnet werden kann, aber es ist möglich, Chiffrate durch trickreiche Berechnungen auch ohne Schlüssel zu entschlüsseln.

Zweiter Versuch: das Angriffsziel ist es, aus Chiffraten die Klartexte herauszuholen. Dann fordern wir von Verschlüsselungsverfahren also, dass es ohne den geheimen Schlüssel schwierig sein soll, aus einem Chiffrat die darin enthaltene Nachricht zu bestimmen. Reicht das …? Die Antwort ist weiterhin „Nein“.

Was ist denn, wenn man zwar nicht die kompletten Klartext, aber zumindest Teile davon, korrekt bestimmen kann? Auch dann hat das Verfahren sein Ziel verfehlt, denn wir wollen ja den kompletten Klartext schützen und nicht nur Teile davon.

Wenn man diese Argumentationskette jetzt zu Ende denkt, kommt man irgendwann bei diesem Gedanken an: Das Ziel eines Angreifers ist es, aus Chiffraten sinnvolle Informationen über den enthaltenen Klartext herauszufinden.

Als Sicherheitsforderung formuliert also: Es soll nicht möglich sein, aus einem Chiffrat irgendwelche sinnvollen Informationen über dessen Inhalt abzuleiten. Das ist auch die Art von Sicherheit, die man haben möchte. Verschlüsselungsverfahren sollen also so sicher sein, dass Chiffrate für Angreifer wie beliebiger Datenmüll aussehen und Angreifer aus ihnen keine sinnvolle Informationen über die Klartexte ableiten können.

Diese Art, die Sicherheit von Verschlüsselungsverfahren zu definieren, ist als „semantische Sicherheit“ bekannt. Tatsächlich kann man „sinnvolle Information“ auch ganz konkret und mathematisch genau definieren. So tief möchte ich hier nicht einsteigen, aber eine sinnvolle Information könnte z.B. sein, dass es dem Angreifer möglich ist, zu entscheiden, ob das Wort „Nein“ im Klartext vorkommt, ob der Klartext in englischer Sprache ist, ob der Klartext eine Zahl größer 1.000 enthält und so weiter. All das soll Angreifern nicht möglich sein.

Es ist recht leicht einzusehen, dass dieses Ziel „stärker“ ist, als das eingangs erwähnte Ziel der Berechnung des geheimen Schlüssels: Könnte ein Angreifer den geheimen Schlüssel leicht berechnen, dann könnte er auch sinnvolle Informationen aus Chiffraten ableiten. Er kann sie dann ja einfach entschlüsseln. Kann ein Angreifer aber sinnvolle Informationen aus Chiffraten ableiten, muss das noch lange nicht bedeuten, dass er auch den Schlüssel berechnen kann (aus dem Wissen, dass der enthaltene Klartext in Englisch ist, erfahre ich nichts über den Schlüssel).

Sicherheitsmodelle

Zu guter Letzt möchte ich noch das Thema „Sicherheitsmodell“ ansprechen. Ein Sicherheitsmodell ist im Prinzip nichts anderes, als die Kombination einer Angriffsklasse (Known-Plaintext-, Chosen-Plaintext- oder Chosen-Ciphertext Angriffe) und eines Angriffsziels. Bei allen Kombinationen gehen wir davon aus, dass die Angriffe in plausibler Zeit ausführbar sind.

Ein mögliches Sicherheitsmodell könnte also beispielsweise „semantische Sicherheit unter Chosen-Plaintext-Angriffen“ sein, d.h. es soll Angreifern nicht möglich sein, aus Chiffraten sinnvolle Informationen abzuleiten, selbst wenn sie erfolgreiche Chosen-Plaintext-Angriffe durchführen können.

Es gibt einen wahren Zoo von Sicherheitsmodellen, da es vielfältige Kombinationsmöglichkeiten gibt. Von sehr schwachen bis sehr starken Sicherheitsmodellne ist alles vertreten. Unter anderem auch, da es noch andere Definitionen des Angriffsziels gibt als die semantische Sicherheit. Zwar ist die semantische Sicherheit wie gesagt genau das, was man haben möchte, aber es ist schwierig, mit ihr zu arbeiten. Schlaue KryptographInnen konnten aber leichter handhabbare Begriffe finden die im Endeffekt aber die gleiche Sicherheit bieten, wie die semantische Sicherheit (aber dafür leider weniger anschaulich sind 😉 ).

Dabei kommt es dann zu so Wortschöpfungen wie „IND-CCA“, was für „Indistinguishability under Chosen Ciphertext Attacks“ steht. Das bedeutet im Prinzip, dass man Sicherheit gegen Angreifer möchte, die Chosen-Ciphertext-Angriffe durchführen und damit die semantische Sicherheit brechen wollen („Indistinguishability“ ist einer der oben erwähnten anderen Sicherheitsbegriffe – der aber äquivalent zur semantischen Sicherheit ist). Dieses Modell ist der de-facto Standard für Verschlüsselungsverfahren in der kryptographischen Forschung, denn man möchte eigentlich immer Schutz gegen Chosen-Ciphertext Angriffe haben. In manchen Fällen „reicht“ aber auch der Schutz gegen schwächere Angriffsarten und man kann sich etwa mit „IND-CPA“ („Indistinguishability under Chosen-Plaintext Attacks“) zufriedengeben. Aber man sollte bei dieser Auswahl sehr vorsichtig sein und im Zweifelsfall besser vom schlimmsten Angriff ausgehen.

Sobald man dann sein Sicherheitsmodell definiert hat, ist es an der Zeit nachzuweisen, dass das untersuchte Verschlüsselungsverfahren auch tatsächlich diese Anforderungen erfüllt. Hierfür verwendet man dann so genannte „Sicherheitsbeweise“: Man beweist mathematisch formal, dass das Verfahren gegenüber allen Angriffen Sicherheit bietet, die vom Sicherheitsmodell erfasst werden. Damit meine ich wirklich gegen alle Angriffe in der Kategorie – egal ob sie auf bekannten Techniken beruhen oder nicht. Wie solche Sicherheitsbeweise aussehen und wie sie funktionieren wird das Thema des nächsten Beitrags in dieser Kolumne sein.

/Dr. Björn Kaidel