Dieser Gastartikel ist ein Beitrag zum ScienceBlogs Blog-Schreibwettbewerb. Alle eingereichten Beiträge werden im Lauf des Septembers hier im Blog vorgestellt. Danach werden sie von einer Jury bewertet. Aber auch alle Leserinnen und Leser können mitmachen. Wie ihr eure Wertung abgeben könnt, erfahrt ihr hier.
Dieser Beitrag wurde von Dominic Wäsch eingereicht.
———————————————————————————————————————–
Die Nachrichten um die NSA und Edward Snowden reißen nicht ab, und oft hört man, dass Verschlüsselung das wahre Mittel zur Gegenwehr gegen die allmächtigen Geheimdienste wäre. Zeit, einmal einen Blick auf die Verfahren zu werfen und zu schauen, wie es um die Sicherheit steht.
Grundsätzlich gibt es zwei verschiedene Arten, Nachrichten zu verschlüsseln: Symmetrische und asymmetrische Verfahren. Die symmetrischen Verfahren sind schon seit über zweitausend Jahren in Gebrauch; am bekanntesten dürfte die Cäsar-Chiffre[1] sein. Das Hauptproblem bei solchen symmetrischen Verfahren ist meist die Übermittlung des Schlüssels. Dies ist nötig, da für das Ver- und Entschlüsseln derselbe Schlüssel verwendet wird (deswegen „symmetrisch“). Da der Kanal, über den die Nachricht verschickt wird, als unsicher angesehen wird (sonst bräuchte die Nachricht nicht verschlüsselt werden), ist dieser Kanal für die Weitergabe des Schlüssels ungeeignet.
Asymmetrische Verfahren sind erst seit den 1970er Jahren bekannt. Bei diesen wird für das Chiffrieren ein öffentlicher Schlüssel benutzt, für das Dechiffrieren ein geheimer Schlüssel, den nur der Empfänger kennt und niemandem verrät. Das Schöne hieran ist, dass jeder, der meinen öffentlichen Schlüssel kennt, mir eine verschlüsselte Nachricht schicken kann. Es ist aber nicht möglich, mit dem öffentlichen Schlüssel eine chiffrierte Nachricht zu entziffern. Ich muss also nur dafür sorgen, dass jeder andere Mensch meinen öffentlichen Schlüssel kennt und benutzen kann; der geheime Schlüssel darf hingegen nicht an die Öffentlichkeit gelangen.
Jetzt könnte man meinen, symmetrische Verfahren spielen heute keine Rolle mehr, denn wir haben die asymmetrischen. Einfach die Nachricht verschlüsseln und verschicken. Nun kann man aber beispielsweise mit GnuPG[2] mehreren Empfängern gleichzeitig eine verschlüsselte Nachricht schreiben. Es wäre naheliegend, die gesamte Nachricht einfach für jeden Empfänger erneut zu verschlüsseln. Doch das ist leider unpraktikabel, da dann die Datenmege mit der Anzahl der Empfänger proportional ansteigt.
Hier ist die Idee, dass man nicht die Nachricht selber, sondern nur einen zufällig erzeugten Schlüssel für ein symmetrisches Verfahren verschlüsselt (der im Vergleich mit der Nachricht im Allgemeinen kurz ist). Für verschiedene Empfänger muss dann nur noch dieser Schlüssel mit den unterschiedlichen öffentlichen Schlüsseln chiffriert werden. Als weiterer Vorteil ergibt sich, dass asymmetrische Verfahren meist mit erheblich höherem Rechenaufwand verbunden sind als die symmetrischen. Das Ganze hat allerdings den Nachteil, dass die Sicherheit an zwei Verschlüsselungen hängt: einer symmetrischen Chiffrierung der Nachricht und einer asymmetrischen Chiffrierung des Schlüssels.
Noch mal der Reihe nach: Alice möchte eine verschlüsselte Nachricht an Bob schicken.
* Vorbereitung. Beide einigen sich zunächst auf ein symmetrisches und ein asymmetrisches Verschlüsselungsverfahren. Bob erzeugt für das asymmetrische Verfahren einen geheimen und einen öffentlichen Schlüssel. Den öffentlichen Schlüssel stellt Bob der Welt zur Verfügung (z.B. auf einem Key-Server, seiner Webseite und in seiner E-Mail-Signatur).
* Verschlüsselung. Alice erzeugt dann zufällig einen Schlüssel für das symmetrische Verfahren und chiffriert damit die Nachricht. Damit Bob diese Nachricht entschlüsseln kann, braucht er sowohl die verschlüsselte Nachricht, als auch den Schlüssel. Den Schlüssel chiffriert Alice jetzt mit dem öffentlichen Schlüssel von Bob und schickt beides – den asymmetrisch verschlüsselten Schlüssel und die symmetrisch verschlüsselte Nachricht – an Bob.
* Entschlüsselung. Bob bekommt das Paket der beiden unterschiedlich verschlüsselten Nachrichten. Er dechiffriert den Schlüssel für das symmetrische Verfahren mit seinem geheimen Schlüssel und benutzt dann diesen, um die Nachricht zu entschlüsseln.
Das gesamte Verfahren – Einigung auf Verfahren, Schlüssel generieren usw. – ist mittlerweile komplett in Software verborgen. Als Anwender kann ich zwischen zwei Verfahren wählen: einerseits gibt es das bereits erwähnte GnuPG[2] und andererseits S/MIME[3]. Sie unterscheiden sich von der Art, wie die Daten verpackt werden, welche Algorithmen verwendet werden und wie die öffentlichen Schlüssel in der Welt bekannt gemacht werden und sind daher leider nicht kompatibel. Ein genauerer Vergleich ist nicht leicht, die Vor- und Nachteile sind von der konkreten Situation abhängig[4].
Wie steht es mit der Sicherheit? Hier wird die Kryptologie auf einmal zur Naturwissenschaft. Eine begründete Hypothese wird aufgestellt („Dieser Algorithmus ist sicher!“) und die Gemeinde der Kryptographen stürzt sich darauf, um diese Hypothese zu entkräften. Gelingt das nicht, gilt ein Verfahren so lange als sicher, bis es Hinweise auf seine Unsicherheit gibt.
Die Sicherheit der asymmetrischen Verfahren basieren fast alle auf der Vermutung, dass P≠NP[5] ist. Diese vier Zeichen beschreiben eine der größten offenen Fragen unserer Zeit: Sind bestimmte Probleme, die uns schwierig vorkommen, auf eine schnelle Art und Weise zu lösen (z.B. das Rucksackproblem[6] oder die Primfaktorzerlegung[7])? Die meisten Informatiker und Mathematiker gehen davon aus, dass diese Probleme tatsächlich schwierig sind. (In Wahrheit ist P≠NP nur ein Teil des Problems. Die Vermutung, auf die hier gesetzt wird, ist noch stärker, da auch zufallsgesteuerte Algorithmen erlaubt sind.) Darüber hinaus kann es noch weitere Unsicherheiten geben, wie z.B. beim Merkle-Hellman-Kryptosystem[8], bei dem es in kurzer Zeit möglich ist, mit Hilfe des öffentlichen Schlüssels einen Ersatz-Geheim-Schlüssel zu berechnen.
Die momentan viel eingesetzten Algorithmen sind RSA[9], ElGamal[10] und Elliptic Curve[11]. Sie gelten im Allgemeinen als sicher. Trotzdem können natürlich durch ungünstige Wahl von Parametern oder durch Programmierfehler Sicherheitslücken oder Hintertüren entstehen. Außerdem gibt es Gerüchte, dass die NSA im Bereich der Primfaktorzerlegung große Fortschritte gemacht hat, was die Sicherheit von RSA gefährden kann.
Bei den symmetrischen Verfahren gibt es ein bewiesenermaßen sicheres, das Vernam-Chiffre oder One-Time-Pad genannt wird: Ein echt zufälliger Strom von Einsen und Nullen wird mit der Binärdarstellung der Nachricht via XOR verknüpft (1 XOR 0=0 XOR 1=1, sonst 0). Der zufällige Strom ist dann gleichzeitig der Schlüssel und ist immer genau so lang, wie die zu verschlüsselnde Nachricht ist. Die Entschlüsselung funktioniert genau mit demselben Algorithmus wie die Verschlüsselung. Dieses Verfahren hat zwei Nachteile. Erstens ist der Schlüssel sehr lang und zweitens ist es extrem schwierig, schnell an echte Zufallszahlen zu kommen. Daher ist es naheliegend, statt echter Zufallszahlen Pseudozufallszahlen zu benutzen, die ausgehend von einem Schlüssel generiert werden. Dazu benötigt man dann einen möglichst guten Pseudozufallszahlengenerator.
Klarerweise ist die Sicherheit solcher Strom-Chiffres durch die Qualität des Zufallszahlengenerators begrenzt, wie zuletzt am Beispiel von RC4[12] zu sehen war. Der sehr kompakte Algorithmus, den viele Kryptographen auswendig gelernt haben um nach einer Zombiekalypse eine gute Chiffre zur Verfügung zu haben, kann vermutlich in Echtzeit von der NSA gebrochen werden[13]. Es gibt einige bewiesenermaßen perfekte Pseudozufallszahlengeneratoren, die aber alle von der Zeit-Performance nicht für praktische Anwendungen geeignet sind. Gute, praxisrelevante Algorithmen wurden beispielsweise im eSTREAM-Projekt[14] in den Jahren 2004 bis 2008 ausgewählt.
Davon unabhängig besteht bei den Strom-Chiffres immer die Gefahr, dass derselbe Zufallsstrom mehrfach verwendet wird. Auf dieser Basis wurde die WLAN-Verschlüsselung WEP gebrochen.
Die andere große Gruppe von symmetrischen Verschlüsselungen sind die Block-Chiffren, welche immer eine bestimmte Anzahl an Bits gleichzeitig verschlüsseln (häufig 128 oder 64). Die Schwierigkeit ist, dass die Verschlüsselung immer umkehrbar sein muss. Dies wird bei vielen modernen Verfahren (z.B. Twofish[15])] dadurch gelöst, dass ein Feistelnetzwerk[16] implementiert wird. Dabei werden in einem mehrstufigen Verfahren („Runden“) aus dem Schlüssel und dem zu chiffrierenden Inhalt pseudozufällige Zahlen generiert, die immer wieder mit dem Block via XOR verknüpft werden. Durch geschickte Zerlegung der Daten können diese Verknüpfungen zur Entschlüsselung rückwärts angewendet werden. Außerdem erhöhen viele Runden die Sicherheit und man kann den Algorithmus aus sicheren Einzelteilen zusammensetzen. Aber auch Feistelnetzwerke garantieren keine Sicherheit; als Beispiel für einen Algorithmus mit Schwächen sei hier TEA[17] genannt. DES[18] gilt zwar als unsicher, dies resultiert jedoch im Wesentlichen aus der zu kurzen Schlüssellänge von 56 Bit (wobei auch die einzelnen Schritte von DES anscheinend nicht ideal sind, wie Analysen aus den 1990ern und Anfang der 2000er zeigen[19]).
Die Sicherheit von Feistelnetzwerken kann gut eingeschätzt werden. Es existiert offenbar sogar ein Beweis von Luby und Rackoff aus dem Jahre 1988, der zeigt, dass es möglich ist, nach bereits vier Runden eine perfekt sichere Verschlüsselung zu haben. Die praktischen Anforderungen sind dabei allerdings so hoch, dass sie in der Realität nicht erfüllbar sind. Zudem ist die Sicherheit des Algorithmus von der Breite der Blöcke abhängig; je sicherer der Algorithmus sein soll, umso breiter müssen die Blöcke sein.
Vermutlich ist der momentan wichtigste Algorithmus für Verschlüsselung – AES[20] (oder auch Rijndael) – gerade aus diesem Grund kein Feistelnetzwerk. Bisher hat sich der Gewinner der AES-Wettbewerbs gegen alle Arten von Angriffen als ziemlich robust erwiesen. Auch die Gerüchte aus dem Herbst 2013, dass die NSA starke Verschlüsselung brechen kann, haben wohl nichts mit AES oder anderen starken Kryptoalgorithmen zu tun sondern eher mit der Zertifikats-Infrastruktur oder der Implementierung von kommerziellen Umsetzungen von AES. Es gibt jedoch die Kritik, dass der Sicherheitspuffer zu klein gewählt ist für ein Verfahren, welches die nächsten Jahrzehnte halten muss. Zudem ist AES eine der wenigen Chiffren (vielleicht sogar die einzige?), die durch geschlossene algebraische Formulierungen darstellbar ist[21]. Damit ist der Angriff auf den Algorithmus auf einmal von einer Seite der Mathematik möglich, die bisher wenig mit Kryptographie zu tun hat.
Ähnlich wie die Wiederverwendung von One-Time-Pads gibt es bei den Block-Chiffren Anwendungsfehler, die die Sicherheit unabhängig vom Algorithmus schmälern. Ein Block-Chiffre erlaubt es normalerweise nur Nachrichten zu verschlüsseln, die höchstens einen Block lang sind. Es gibt unterschiedliche Ideen („Betriebsarten“), wie man längere Nachrichten chiffriert. Alleine vom NIST, dem amerikanischen National Institute of Standards and Technology, werden ein Dutzend akzeptierte Betriebsarten beschrieben[21]. Sie reichen vom einfachen ECB („Ich verschlüssele jeden Block unabhängig voneinander“) bis hin zu Arten, die Sicherheit und Integrität ermöglichen, wie dem CCM („Ich verwende für jeden Block einen neuen Schlüssel und bilde zusätzlich eine kryptographisch sichere Prüfsumme mit Hilfe des Chiffres“). Die Frage nach der besten Betriebsart ist davon abhängig, wie genau die Anforderungen aussehen und kann nicht pauschal beantwortet werden.
Verschlüsselungsverfahren sind und bleiben ein spannendes Thema, bei dem der Forschungsbedarf hoch ist. Es gibt viele offene Fragen und durch die Tatsache, dass heute die kryptographische Sicherheit auf Vermutungen beruht, rückt die Kryptographie deutlich in die Nähe der Naturwissenschaften. Zudem wird das Spektrum der mathematischen Werkzeuge erweitert und lässt auf neue Analysemethoden und Ideen für Chiffren hoffen. Dagegen hält die Umsetzung und Benutzung der Algorithmen viele Tücken bereit und die jüngsten Skandale um Sicherheitslücken in populärer Software („goto fail“[23] und „heartbleed”[24]) zeigen, dass sogar Open-Source-Software nicht sicher vor Programmierfehlern oder Hintertüren ist. Wir können gespannt sein, wohin uns die Zukunft bringt.
Links:
[1] https://de.wikipedia.org/wiki/Cäsar-Chiffre
[2] https://www.gnupg.org/index.de.html
[3] https://tools.ietf.org/html/rfc5751
[4] https://www.kes.info/archiv/online/01-01-60-SMIMEvsOpenPGP.htm
[5] https://de.wikipedia.org/wiki/P-NP-Problem
[6] https://de.wikipedia.org/wiki/Rucksackproblem
[7] https://de.wikipedia.org/wiki/Primfaktorzerlegung
[8] https://cacr.uwaterloo.ca/hac/about/chap8.pdf (S. 300ff)
[9] https://de.wikipedia.org/wiki/RSA-Kryptosystem
[10] https://de.wikipedia.org/wiki/Elgamal-Verschlüsselungsverfahren
[11] https://de.wikipedia.org/wiki/Elliptic_Curve_Cryptography
[12] https://de.wikipedia.org/wiki/RC4
[13] https://twitter.com/ioerror/status/398059565947699200
[14] https://www.ecrypt.eu.org/stream/
[15] https://de.wikipedia.org/wiki/Twofish
[16] https://www.am.hs-mannheim.de/KryptoLern/feistel.php
[17] https://www.csshl.net/sites/default/files/downloadable/crypto/TEA_Cryptanalysis_-_VRAndem.pdf
[18] https://page.math.tu-berlin.de/~kant/teaching/hess/krypto-ws2006/des.htm
[19] https://crypto.junod.info/sac01.pdf
[20] https://de.wikipedia.org/wiki/Advanced_Encryption_Standard
[21] https://www.dpunkt.de/leseproben/3112/Kapitel%208.pdf (S. 136)
[22] https://csrc.nist.gov/groups/ST/toolkit/BCM/index.html
[23] https://gotofail.com
[24] https://heartbleed.com
Kommentare (37)