Was man über Kryptografie wissen sollte

the next big thing Golo Roden  –  106 Kommentare

Kryptografie ist eine Wissenschaft, die sich mit dem Verschlüsseln und dem Schützen von Informationen beschäftigt. Als Teilbereich der Informatik ist sie aus der modernen IT-Welt nicht mehr wegzudenken. Daher ist es hilfreich, die Grundbegriffe zu kennen.

Das Wort "Kryptografie" setzt sich aus den beiden altgriechischen Wörtern "kryptos" und "graphein" zusammen, die "geheim" und "schreiben" bedeuten. Es geht in der Kryptografie also um das Verbergen von Informationen mit Hilfe von Geheimschrift. Das unterscheidet die Kryptografie von der Steganographie, die sich zwar ebenfalls mit dem Verbergen von Informationen befasst, diese aber in einem übergeordneten Trägermedium versteckt.

Ebenfalls abzugrenzen ist die Kryptografie von der Kryptoanalyse, die sich mit dem Entschlüsseln und Knacken von kryptografischen Verfahren beschäftigt. Man könnte daher sagen, dass die Kryptografie und die Kryptoanalyse in einem stetigen Wettstreit zueinander stehen.

Die Ausgangsbasis in der Kryptografie ist der sogenannte "Klartext", der die zu schützende Nachricht darstellt. Vor der Übertragung wird der Klartext in einen "Geheimtext" transformiert. Diesen Vorgang bezeichnet man als "Verschlüsseln", die Umkehrung (also das Wiederherstellen des Klartexts aus dem Geheimtext) als "Entschlüsseln". Beide Vorgänge folgen einem Algorithmus, der üblicherweise mit Hilfe eines Schlüssels parametrisiert wird.

Eine Nachrichtenübermittlung läuft in der Kryptografie-Literatur üblicherweise von "Alice" zu "Bob", während "Eve" (von englisch "Eavesdroppper") versucht, die Nachricht abzufangen und mitzulesen. Dazu müssen sich Alice und Bob zunächst auf einen gemeinsamen Algorithmus und einen Schlüssel einigen, wobei es im Hinblick auf beides deutliche Qualitätsunterschiede gibt.

Ein einfacher Algorithmus ist die sogenannte "Cäsar-Chiffre", die Buchstaben im Alphabet um eine bestimmte Anzahl weiterschiebt. Aus einem "A" wird auf dem Weg ein "B", aus einem "B" ein "C", aus einem "C" ein "D", und so weiter, bis schließlich aus dem "Y" ein "Z" wird. Das "Z" selbst wird wiederum auf das "A" abgebildet. Das Beispiel zeigt die Verschiebung um eine Stelle, natürlich lassen sich die Buchstaben auch um mehr Stellen verschieben.

Aus dem Klartext "HALLO" wird durch den Einsatz der Cäsar-Chiffre und dem Schlüssel "1" der Geheimtext "IBMMP". Da es nur 26 mögliche Schlüssel gibt, lässt sich diese Verschlüsselung mit sehr überschaubarem Aufwand knacken: Es genügt, sämtliche Schlüssel durchzuprobieren, bis einer passt. Ein solches Vorgehen, bei dem mit reiner Rechenleistung alle möglichen Schlüssel getestet werden, bezeichnet man als "Brute Force".

Es liegt auf der Hand, dass sich für die Praxis ein sichereres System empfiehlt. Das legt die Vermutung nahe, einen möglichst komplexen Algorithmus auszuwählen und ihn geheimzuhalten. Genau das gilt jedoch als schlechter Stil: Der französische Mathematiker Auguste Kerckhoff formulierte bereits Ende des 19. Jahrhunderts das nach ihm benannte Prinzip, dass die Sicherheit eines Kryptosystems nur von der Geheimhaltung des Schlüssels, nicht jedoch von der des Algorithmus abhängen dürfe. Anders formuliert besagt es, dass das Offenlegen eines Verschlüsselungsalgorithmus dessen Sicherheit nicht einschränken dürfe.

Was ist Kryptografie?

Symmetrische Verschlüsselung: AES & Co.

Die Suche nach einem besseren Algorithmus wirft die Frage auf, ob es eine mathematisch nachweisbar perfekte Verschlüsselung gibt. Überraschenderweise gibt es eine solche tatsächlich, nämlich das sogenannte One-Time Pad (OTP). Es basiert auf der Erkenntnis, dass die Cäsar-Verschlüsselung unknackbar ist, wenn lediglich ein einzelnes Zeichen verschlüsselt wird. Zwar gibt es dann nach wie vor nur 26 Möglichkeiten für die Entschlüsselung, der korrekte Wert lässt sich aber mangels Kontext nicht mehr ablesen.

Verschlüsselt man eine Botschaft nun Zeichen für Zeichen mit der Cäsar-Chiffre und verwendet dabei für jedes einzelne Zeichen einen eigenen, zufällig gewählten Schlüssel, so dass jegliche Muster aus dem Klartext eliminiert werden, die eine Analyse ermöglichen könnten, ist der Geheimtext nicht mehr zu entschlüsseln, ohne den Schlüssel zu kennen.

Der Einfachheit und Eleganz dieses Verfahrens steht das Problem im Weg, den Schlüssel auf sicherem Weg zur Empfängerin oder zum Empfänger zu transportieren. Dieses Vorhaben wird außerdem noch dadurch erschwert, dass ein einmal verwendeter Schlüssel als "verbraucht" gelten muss und nicht erneut genutzt werden darf – andererseits wäre der Schlüssel nicht mehr zufällig und damit wiederum angreifbar. Das One-Time Pad funktioniert also nur mit echt zufälligen Schlüsseln, deren Länge so groß ist wie die des Klartexts.

In den vergangenen 2000 Jahren wurden daher zahlreiche andere Verfahren entwickelt, die versuchen, eine pragmatische Brücke zwischen einer hohen Sicherheit und einer guten Anwendbarkeit zu schlagen. In der Moderne sind hier insbesondere der Data Encryption Standard (DES) von 1976 und dessen Verbesserung 3DES zu erwähnen, die beide von IBM in Zusammenarbeit mit der NSA entworfen wurden. Sie gelten inzwischen allerdings nicht mehr als sicher.

Stattdessen ist der moderne De-facto-Standard der AES-Algorithmus, der im Jahr 2001 vom NIST, dem US-amerikanischen National Institute of Standards and Technology, im Rahmen eines Wettbewerbs als Sieger ausgewählt wurde. Anders als Cäsar und OTP verschlüsselt AES nicht jedes Zeichen einzeln, sondern ganze Blöcke von Zeichen. Man spricht daher auch von einer Block-Chiffre. Abhängig von der Schlüssellänge gibt es AES in verschiedenen Varianten, beispielsweise AES-128, AES-192 und AES-256.

Außerdem bietet AES unterschiedliche Betriebsmodi: Während in ECB (Electronic Code Book) jeder Block unabhängig für sich verschlüsselt wird, was wiederum zu Mustern und Wiederholungen führen kann, verknüpft CBC (Cipher Block Chaining) jeden Block mit der Verschlüsselung des vorigen Blocks, was das zuvor genannte Problem vermeidet. Relativ jung ist GCM (Galois/Counter-Mode), der nochmals für eine bessere Sicherheit sorgt.

Aus praktischer Sicht sind heute primär AES-256-CBC und AES-128-GCM im Einsatz, wobei die GCM-Variante noch nicht so verbreitet ist wie CBC. Allerdings besteht, unabhängig von der gewählten Variante, weiterhin das Problem des Schlüsselaustauschs zwischen den beteiligten Parteien.

Symmetrische Verschlüsselung: AES & Co.

Asymmetrische Verschlüsselung: RSA & Co.

Der symmetrischen steht die sogenannte asymmetrische Verschlüsselung gegenüber. Der wesentliche Unterschied ist, dass die symmetrischen Verfahren einen einzigen Schlüssel zum Ver- und Entschlüsseln verwenden, wohingegen asymmetrische Verfahren mit jeweils einem eigenen Schlüssel arbeiten. Es gibt also zwei Schlüssel, die einander ergänzen: Was mit dem einen Schlüssel verschlüsselt wurde, kann nur mit dem zweiten wieder entschlüsselt werden.

Von diesen beiden Schlüsseln bleibt einer geheim, der andere darf hingegen veröffentlicht werden. Man spricht daher auch von einem "Private Key" und einem "Public Key" und insgesamt von "Public-Key-Kryptografie". Wenn Alice nun eine Nachricht an Bob senden will, benötigt sie lediglich den öffentlichen Schlüssel von Bob und verschlüsselt die Nachricht damit. Anschließend kann die Nachricht nur noch mit dem privaten Schlüssel von Bob wieder entschlüsselt werden. Da ausschließlich Bob diesen Schlüssel kennt, ist die Nachricht sicher.

Aus mathematischer Sicht basiert das Verfahren auf sogenannten Falltürfunktionen, die einfach zu berechnen sind, deren Umkehrung aber sehr schwierig ist, sofern man nicht über Spezialwissen verfügt. Ein einfaches Beispiel dafür ist die Primfaktorzerlegung. Während es sehr einfach ist, aus den beiden Zahlen 431 und 557 das Produkt (nämlich 240.067) zu berechnen, ist die Zerlegung von beispielsweise 566.609 in die beiden Primfaktoren weitaus schwieriger und zeitaufwändiger. Der bekannteste asymmetrische Algorithmus RSA basiert auf einem ebensolchen Falltürproblem, nämlich dem diskreten Logarithmus in Verbindung mit Restklassen.

Besonders praktisch an asymmetrischen Verfahren ist, dass sie das Schlüsselaustauschproblem lösen, denn jeder Kommunikationspartner benötigt nur noch zwei Schlüssel, einen privaten und einen öffentlichen. Allerdings haben auch asymmetrische Verfahren ihre Nachteile. Zum einen ist dabei der enorm hohe Rechenaufwand zu nennen, zum anderen ist die maximale Länge der verschlüsselbaren Nachrichten stark begrenzt.

Als Ausweg bietet sich der hybride Einsatz von symmetrischer und asymmetrischer Verschlüsselung an: Zunächst wird ein zufälliger Schlüssel erzeugt, mit dem sich die eigentliche Nachricht schnell und effizient mit einem symmetrischen Verfahren verschlüsseln lässt. Anschließend wird der zufällig erzeugte Schlüssel mit einem asymmetrischen Verfahren verschlüsselt, und beides (die verschlüsselte Nachricht und der verschlüsselte Schlüssel) an die Empfängerin oder den Empfänger übertragen. Auf dem Weg lässt sich Public-Key-Kryptografie mit hoher Effizienz verbinden.

In der Praxis kommt RSA dafür inzwischen nicht mehr allzu häufig zum Einsatz, stattdessen stehen heutzutage primär Verfahren auf Basis elliptischer Kurven im Vordergrund. Man spricht hier auch von Elliptic Curve Cryptography (ECC). Auch wenn diese mathematisch gesehen anders funktionieren als Restklassen und der diskrete Logarithmus, basieren sie doch ebenso auf einer Falltürfunktion.

Asymmetrische Verschlüsselung: RSA & Co.

Hash-Funktionen: SHA & Co.

Ein weiteres Problem, das aber auch asymmetrische Verfahren nicht lösen, ist der Schutz der Integrität der Nachricht. Weder AES noch RSA verhindern, dass die verschlüsselte Nachricht manipuliert wird. Um Manipulationen zu erkennen, benötigt man eine sogenannte "Hash-Funktion". Dabei handelt es sich um eine mathematische Funktion, die als Einwegfunktion agiert – die also im Gegensatz zu einer Falltürfunktion gar nicht mehr umkehrbar ist.

Eine Hash-Funktion berechnet auf einer gegebenen Eingabe einen sogenannten Hash-Wert, der allerdings immer gleich groß ist, unabhängig von der Größe der Eingabe. Dieser Hash-Wert stellt eine Art digitalen Fingerabdruck dar. Bereits eine kleine Änderung an der Eingabe bewirkt üblicherweise eine gravierende Änderung des Hash-Wertes: Damit ist das Vorhersagen des Hash-Wertes nahezu unmöglich. Wichtig ist, dass Hash-Funktionen außerdem "kollisionsresistent" sind. Das bedeutet, dass es unmöglich sein soll, zwei Eingaben zu konstruieren, die den selben Hash-Wert erhalten.

Da Hash-Werte stets die gleiche Größe haben, liegt es in der Natur der Sache, dass es mehr potenzielle Eingaben als Hash-Werte gibt, so dass es theoretisch unendlich viele Eingaben gibt, die zum gleichen Hash-Wert führen. Die Kollisionsresistenz bezieht sich daher nur auf den Umstand, dass es nicht möglich sein darf, eine solche Kollision gezielt herbeizuführen.

Auch wenn in den vergangenen Jahren und Jahrzehnten viele Hash-Funktionen im Einsatz waren, haben sich im Wesentlichen zwei Familien dieser Funktionen durchgesetzt: Die Message-Digest- (MD) und die Secure-Hash-Algorithmen (SHA). Von beiden gibt es wiederum verschiedene Varianten, wobei sämtliche MD-Varianten inzwischen als unsicher gelten. Auch bei SHA sind nicht mehr alle Varianten vertrauenswürdig, insbesondere von SHA1 sollte man die Finger lassen. Vorzugsweise kommen SHA256, SHA512 oder inzwischen auch SHA3 zum Einsatz.

Wird zusätzlich zu einer Nachricht auch ein Hash-Wert übertragen, lässt sich dieser beim Empfang der Nachricht neu berechnen und vergleichen. Auf dem Weg lässt sich erkennen, ob eine Nachricht unverändert übertragen wurde. Allerdings wäre es für eine Angreiferin oder einen Angreifer ein leichtes, nicht nur die Nachricht zu manipulieren, sondern auch den Hash-Wert einfach neu zu berechnen. Daher muss der Hash nochmals speziell geschützt werden.

Das passiert mit Hilfe eines sogenannten Message Authentication Code (MAC). Ein MAC ist in der Regel letztlich nichts anderes als ein Hash-Wert, in dessen Berechnung außer den zu hashenden Daten auch noch ein geheimer Schlüssel eingeflossen ist, der nur den beiden Kommunikationspartnern bekannt ist. Man spricht daher auch von einem "Shared Key". Da eine Angreiferin oder ein Angreifer diesen Shared Key nicht kennt, kann von Außen kein gültiger neuer MAC berechnet werden, und eine Manipulation würde auffallen.

Hash-Funktionen: SHA & Co.

Zertifikate, Signaturen & Co.

Bleibt zu guter letzt noch die Frage, wie die Kommunikation zwischen einem Client und einem Server im Internet abgesichert wird. Hier sind besonders zwei Aspekte interessant: Zum einen soll die Verbindung verschlüsselt werden, zum anderen muss der Client überprüfen können, dass er mit dem eigentlichen Server kommuniziert, und nicht mit einem, der vorgibt, der eigentliche Server zu sein.

Die Verschlüsselung lässt sich einfach bewerkstelligen. Dazu wird HTTP über ein verschlüsselndes Protokoll wie TLS/SSL getunnelt. In diesem Fall spricht man dann von HTTPS, und es findet unter der Haube eine symmetrische Verschlüsselung statt. Für den initialen Schlüsselaustausch wird ein Ad-hoc-Schlüssel generiert, wobei ein Verfahren wie beispielsweise "Diffie-Hellman Key Exchange" zum Einsatz kommt, das auf ähnlichen Prinzipien basiert wie die asymmetrische Verschlüsselung.

Der zweite Aspekt, die Authentifizierung des Servers, ist hingegen etwas aufwändiger. Die Grundidee ist hier, dass ein Server mit Hilfe von asymmetrischer Verschlüsselung nachweisen kann, dass er tatsächlich zur gewünschten Domain gehört. Dazu verfügt er über den privaten Schlüssel, der zu einer Domain gehört – den öffentlichen Schlüssel kann der Client abrufen. Allerdings wirft das die Frage auf, woher der Client weiß, dass ein öffentlicher Schlüssel sich tatsächlich auf eine Domain bezieht.

Hierfür wird der öffentliche Schlüssel um Metadaten wie den zugehörigen Domainnamen ergänzt und von einem vertrauenswürdigen Dritten digital signiert. Die Kombination aus öffentlichem Schlüssel, Metadaten und digitaler Signatur nennt man Zertifikat.

Eine digitale Signatur wiederum lässt sich mit den bereits bekannten Mitteln leicht anfertigen, sie ist nämlich nichts anderes, als der invertierte Einsatz eines asymmetrischen Verfahrens: Bislang war es so, dass Alice eine Nachricht mit dem öffentlichen Schlüssel von Bob verschlüsselt hat, damit nur Bob diese mit seinem privaten Schlüssel wieder entschlüsseln konnte. Verschlüsselt Alice eine Nachricht hingegen mit ihrem eigenen privaten Schlüssel, kann die Nachricht nur noch mit ihrem öffentlichen Schlüssel entschlüsselt werden.

Das wirkt auf den ersten Blick widersinnig, schließlich ist das für jeden möglich. Doch bei genauerem Hinsehen ergibt sich ein interessanter Effekt: Denn wenn sich eine Nachricht nur mit dem öffentlichen Schlüssel von Alice wieder entschlüsseln lässt, muss sie mit dem privaten Schlüssel von Alice verschlüsselt worden sein, was wiederum nur Alice möglich ist – womit die Urheberschaft bestätigt wäre. Genau das ist eine digitale Signatur.

Die einzig verbleibende Frage ist nun noch, warum man der digitalen Signatur eines Dritten vertrauen sollte. Wie lässt sich überprüfen, wer dieser Dritte ist? Im Grunde ist das ganz einfach, denn auch für ihn gibt es wiederum ein Zertifikat, das zu dem zum Signieren verwendeten privaten Schlüssel passt, das allerdings wiederum signiert sein muss, von einem vertrauenswürdigen Vierten, und so weiter.

Bei den vertrauenswürdigen Instanzen spricht man von Certificate Authorities (CA). Doch damit die Kette nicht endlos weitergeht, muss es irgendwo eine finale Instanz geben, eine sogenannte Root CA. Die Frage ist, wie diese wiederum validiert werden kann. Die verhältnismäßig einfache Antwort darauf lautet, dass das technisch gesehen gar nicht möglich ist, sondern die Vertrauensstellung schlichtweg darauf beruht, dass die Hersteller von Betriebssystemen und Webbrowsern die Root-CA-Zertifikate bereits von Haus aus mit ausliefern.

Das ist zugegebenermaßen eine dürftige Antwort, darauf basiert aber tatsächlich die gesamte Sicherheit des modernen Webs. Man sollte sich also stets der Tatsache bewusst sein, dass Sicherheit enorm viel mit Vertrauen zu tun hat, und dass man letztlich demjenigen vertraut, der den Root-CAs vertraut. Aus genau diesem Grund sollte man auch höchst skeptisch und vorsichtig sein, wenn man aufgefordert wird, ein zusätzliches (Root-)CA-Zertifikat auf der eigenen Maschine zu installieren – potenziell wird die Sicherheit des eigenen Rechners dadurch kompromittiert.

Zertifikate, Signaturen & Co.

Fazit

Auch wenn Kryptografie in den Details sehr komplex und anspruchsvoll ist, lassen sich die grundlegenden Konzepte einfach und anschaulich erklären und nachvollziehen. Es ist für Entwicklerinnen und Entwickler viel wichtiger, den Unterschied zwischen Verschlüsselung und Hashing oder zwischen symmetrischer und asymmetrischer Verschlüsselung verstanden zu haben, als im Detail wiedergeben zu können, wie und warum die S-Boxen von AES funktionieren.

Tatsächlich braucht man für ein anschauliches Verständnis von Kryptografie nicht mehr als in diesem Artikel beschrieben: Alle weiteren Ansätze basieren letztlich auf den hier vorgestellten Bausteinen und deren Kombination. Das ist beruhigend, denn wer verstanden hat, wie die Algorithmen konzeptionell funktionieren und weiß, welches Verfahren wofür geeignet ist, hat eine gute Ausgangsbasis, um Kryptografie zielgerichtet und passend einzusetzen.