Copyright © Michel Messerschmidt 2001
Zunächst sollten kurz einige Grundbegriffe definiert werden.
Natürlich kann man alle möglichen Daten verschlüsseln. Im folgenden beschränke ich mich jedoch auf die Verschlüsselung von Nachrichten bzw. sichere Kommunikation. Für andere Anwendungen (etwa das Verschlüsseln von Festplattenpartitionen) sind eventuell einige Aspekte (wie z.B. Schlüsselaustausch) nicht von Bedeutung.
Dazu muß man sich zuerst überlegen, was "sicher" bedeuten soll. Meist
gehört dazu, daß nur der rechtmäßige Empfänger eine Nachricht lesen kann
(Vertraulichkeit bzw. Sicherheit vor Abhören; diese Bedeutung werde ich hier
zugrunde legen).
Oft wird zusätzlich gefordert, das die Integrität einer Nachricht erhalten
bleibt (Sicherheit vor Manipulation). Oder auch, dass nirgendwo eine Kopie
der Nachricht zurückbleiben kann (dies ist für Email unerfüllbar und
allgemein für digitale Daten schwierig).
Ein weiterer wichtiger (Sicherheits-)Aspekt ist Verlässlichkeit (versendete
Nachrichten kommen auch an). Dies lässt sich durch Kryptographie kaum
beeinflussen (und wird hier daher nicht behandelt).
Die Anforderungen an "sichere" Kommunikation hängen aber ebenfalls stark
von den Inhalten und den möglichen Angreifern ab. Soll z.B. nur die
Tagebucheinträge vor dem neugierigen Bruder versteckt werden oder handelt
es sich um Firmengeheimnisse, die der Konkurrenz auf keinen
Fall in die Hände fallen dürfen (und wer weiß schon, ob die NSA solche
Daten nicht doch weitergibt) ?
Die erste Feststellung ist somit, daß die Anforderungen an Kryptographie
sehr unterschiedlich ausfallen können und daher erst gründlich analysiert
werden müssen. Dies führt dann eher in das Gebiet der "security policies"
und wird hier nicht weiter behandelt.
Im folgenden wird versucht, einige elementare Bedingungen für jegliche
Anwendungen von Kryptographie zu verdeutlichen.
Eine naheliegende Vermutung ist, das Kryptographie Kommunikation nicht
absolut "sicher" macht, denn es lässt sich nicht ganz ausschließen, das
jemand eine Nachricht unbefugt entschlüsselt bzw. abhört.
Das lässt sich auch einfach begründen:
Egal wie gut wir den Inhalt einer Nachricht durch Verschlüsselung verbergen,
es muß immer eine Möglichkeit geben, den Klartext wiederherzustellen.
Wie könnte sie der rechtmäßige Empfänger sonst lesen ?
Dies beinhaltet aber die Möglichkeit, daß jemand anderes die Nachricht
ebenfalls lesen kann, solange keine eindeutige Identifikation des
rechtmäßigen Empfängers gegenüber dem Entschlüsselungsalgorithmus möglich
ist. Dies ist für digitale Systeme aber ganz allgemein recht schwierig
(und wird später genauer betrachtet).
Es sieht also so aus, wie in der "realen Welt": Man kann vielleicht ein
akzeptables Sicherheitsniveau erreichen, aber Risiken lassen sich nicht
ganz beseitigen.
Tatsächlich gibt es nämlich ein solches Verfahren:
Ein One-Time-Pad besteht aus einem ganz einfachen Algorithmus (nur eine
XOR-Verknüpfung) und einem echt zufälligen Schlüssel
(Die Verschlüsselung von Zeichenfolgen anstatt Bitfolgen erfolgt mittels
Addition/Subtraktion der einzelnen Zeichen statt der XOR-Verknüpfung,
besitzt ansonsten aber die gleichen Eigenschaften).
Die XOR-Verknüpfung hat zwei Eigenschaften, die hierbei genutzt werden.
Zum einen ergibt ein Klartext, der zweimal hintereinander mit demselben
Schlüssel verknüpft wird, wieder den Klartext (P + K + K = P), oder anders
ausgedrückt, Ver- und Entschlüsselung sind identisch.
Zum anderen ergibt die XOR-Verknüpfung eines beliebigen Klartext mit einer
echt zufälligen Bitfolge wieder eine echt zufällige Bitfolge, d.h. der
Chiffretext ist echt zufällig.
Das bedeutet jedoch umgekehrt, daß für einen Chiffretext jeder Klartext
gleich wahrscheinlich ist, somit versagen hier (beweisbar) alle
kryptanalytischen Verfahren.
Kommen wir zu den Voraussetzungen.
Es ist leicht einsehbar, daß der Schlüssel wirklich echt zufällig sein muß,
sonst ist die gleiche Wahrscheinlichkeit für alle möglichen Entschlüsselungen
nicht mehr gegeben. Digitale Systeme können jedoch gar keinen echten Zufall
erzeugen, sondern nur pseudozufällige Folgen.
Es ist zwar nicht unmöglich auch am Computer echten Zufall zu erzeugen
(zum Glück besteht jeder Computer auch aus einigen nicht-digitalen
Bausteinen), aber das ist keine einfache Aufgabe .
Zusätzlich darf ein Schlüssel nur einmal verwendet werden (daher der Name
One-Time-Pad), da die entsprechenden Chiffretexte sonst ja nicht mehr
zufällig wären, sondern deutliche Zusammenhänge aufweisen.
Außerdem muß der Schlüssel genauso lang wie der Klartext sein, sonst gibt es
Zusammenhänge zwischen Teilen eines Chiffretexts (Einige Bits des
Schlüssels müssten dann mehrfach verwendet werden, somit würden
verschiedene Teile des Klartexts mit dem gleichen Teil des Schlüssels
chiffriert werden).
Das ist bei 10 Zeilen Text vielleicht noch machbar, für eine 10 MByte große
Datei ist es aber fast unmöglich.
Jetzt haben wir also doch eine "sichere" Verschlüsselungsmethode gefunden,
aber hilft das irgendwie eine absolut sichere Kommunikation aufzubauen ?
Was passiert, wenn man zwar unter großem Aufwand immer neue zufällige
Schlüssel erzeugt, dies aber alle zuhause aufbewahrt ?
Jeder Einbrecher wäre in der Lage die gesamte Kommunikation zu entschlüsseln.
Aber auch mit der zusätzlichen Forderung, daß jeder Schlüssel sofort nach
Gebrauch vernichtet wird, erreichen wir nicht viel. Schließlich braucht der
rechtmäßige Empfänger ebenfalls den Schlüssel.
Also muß für jede Nachricht der passende Schlüssel irgendwie zwischen Sender
und Empfänger ausgetauscht werden. Da der Schlüssel aber genauso groß und
ungefähr genauso wertvoll wie der Klartext der Nachricht ist, wird für den
Schlüsselaustausch ein "vergleichbar" sicherer Kommunikationskanal benötigt
wie für die Nachricht selber.
Somit bringen uns auch One-Time-Pads keine Schritt voran (nebenbei bemerkt
ist ein weiterer Nachteil von One-Time-Pads, daß sich keinerlei
Integritätsanforderungen erfüllen lassen, da ein einzelner
Bitfehler bei der Übertragung die gesamte enthaltene Information zerstört).
Um zu einer genaueren Abschätzung zu gelangen muß geklärt werden, woraus
denn überhaupt eine sichere Kommunikation besteht.
Oder anders ausgedrückt: Was ist nun alles zu beachten, um ein
akzeptables Sicherheitsniveau zu gewährleisten ?
Nur die ersten beiden Forderungen können durch das entsprechende Kryptosystem allein erfüllt werden, bei den anderen beiden ist auch ein entsprechendes Verhalten des Benutzers erforderlich.
Ein guter Verschlüsselungsalgorithmus besitzt die folgenden Eigenschaften.
Konfusion:
Der Zusammenhang von Klartext und Chiffretext soll verborgen werden.
Z.B. besteht bei einem Algorithmus, wie z.B. der Cäsar-Chiffre, bei der
jeder Buchstabe durch den dritten folgenden Buchstaben ersetzt wird
(A durch D, B durch E, usw.) nicht viel Konfusion, denn dieser Zusammenhang
ist für jeden ersichtlich, der den Algorithmus kennt.
Konfusion wird durch Substitutionen erreicht (das sind einfach Ersetzungen
eines Zeichens durch ein anderes).
Diffusion:
Die im Klartext enthaltene Information soll gleichmäßig über den gesamten
Chiffretext verteilt werden.
Denn wenn man z.B. weiß, daß zwar jedes Zeichen des Klartextes in ein anderes
Zeichen umgewandelt wird, aber im Chiffretext noch an derselben Stelle
steht, dann hat man es schon viel leichter beim Brechen der Verschlüsselung.
Hängt dagegen das Zeichen an einer Stelle des Chiffretexts von allen Zeichen
des Klartexts ab, ist die Verschlüsselung wesentlich schwieriger zu brechen.
Diffusion wird durch Transpositionen bzw. Permutationen erreicht (dabei
werden die Zeichen einer Zeichenfolge untereinander vertauscht; ihre
Reihenfolge ändert sich also).
Das in den Anfängen der Kryptographie praktizierte Vorgehen, den Schlüssel
nicht vom Algorithmus zu trennen ist nur noch von historischem Interesse,
da es gravierende Nachteile hat.
Z.B. ist es nahezu unmöglich, einen gesamten Algorithmus geheimzuhalten, der
auch genutzt werden soll und daher auch eine gewisse Verbreitung erlangt.
Diese Geheimhaltung ist aber notwendig, wenn der Schlüssel fest im Algorithmus
eingebaut ist. Wird so eine Algorithmus dann doch bekannt, sind alle damit
verschlüsselten Informationen nicht mehr geheim.
Ein anderer Nachteil folgt aus der zunehmenden Komplexität der Algorithmen.
Da sich deren Sicherheit nicht beweisen läßt ist es erforderlich, jeden
Algorithmus gründlich zu analysieren und zu testen, um möglichst viele
Entwurfs- und Implementierungsfehler auszuschließen.
Dazu muß der Algorithmus aber möglichst vielen Experten zugänglich und
somit öffentlich verfügbar sein.
Ein geheimgehaltener Algorithmus macht Kryptographie nicht sicherer, da
die Sicherheit der Verschlüsselung nur vom Schlüssel und nicht vom
Algorithmus abhängig sein soll. Im Gegenteil erhöht sich dadurch noch die
Gefahr nicht erkannter Schwächen.
Eine Bedingung für sichere Kryptographie ist also ein öffentlich bekannter
und sorgfältig getesteter Algorithmus, der auch nach langer Analyse keine
Schwächen zeigt (zur Zeit z.B. AES,Twofish,3DES,RSA).
Eine weitere (meist vernachlässigte) Bedingung ist, das auch die
Implementation des Algorithmus keine Schwächen aufweist.
Während Algorithmen heutzutage intensiv analysiert werden, werden die
Implementationen meist kaum getestet. Vielmehr gibt es eine Reihe von
Negativbeispielen, bei denen Fehler in der Implementation das System
unsicher machen (z.B. die Verschlüsselungsfunktion des Netscape
Navigators 1.1, die 1995 geknackt wurde).
Es ist einfach mit einem guten Algorithmus zu werben - eine korrekte
Implementation ist wesentlich schwieriger.
Während die 2^56 möglichen Schlüssel des DES-Algorithmus heutzutage mit
einigem Aufwand bereits in kurzer Zeit durchprobiert sind (die NSA soll
dafür nur wenige Sekunden benötigen), ist dies für Algorithmen mit 128 Bit
Schlüssellänge (also 2^128 möglichen Schlüsseln heutzutage unmöglich und
wird allen (derzeitigen) Abschätzungen zufolge auch noch recht lange so
bleiben (man benötigt mit heutiger Rechenleistung mehr Zeit als das
Universum noch übrig hat).
Da sich aber Fortschritte in der Rechenleistung nicht vorhersehen lassen und
oft sprunghaft erfolgen, sind einige Algorithmen auch für größeren
Schlüssellängen ausgelegt.
Schließlich gibt es Dinge, die sehr lange geheim bleiben sollen.
Problematisch ist jedoch, wenn der nutzbare Schlüsselraum nicht ausgenutzt
wird.
Ein Beispiel dafür sind bzw. waren Produkte die aus den USA exportiert wurden.
Da Kryptographie nur exportiert werden durfte wenn die Schlüssellänge
40 Bit nicht überschritt, haben viele Hersteller in der Exportversion nicht
den Algorithmus verändert sondern nur noch 40 Bit lange Schlüssel erzeugt
und die fehlenden Bits durch eine konstante Bitfolge ergänzt.
Somit wird der Schlüsselraum von z.B. 128 Bit auf 40 Bit verkleinert.
Der oben erwähnte Implementationfehler bei Netscape hatte übrigens ebenfalls
zur Folge, das der Schlüsselraum verkleinert wurde (von 128 Bit auf 20 Bit)
und ein Brute-Force Angriff möglich wurde.
Ein anderes Beispiel sind frei wählbare Passwörter.
Erstellt man Statistiken darüber, welche Zeichenfolgen als Passwort gewählt
werden, sieht man das die meisten möglichen Zeichenfolgen nicht vorkommen
(weil sie schlecht zu merken sind).
Dafür kommen Namen sehr häufig vor, machen aber nur einen kleinen Teil der
Menge aller möglichen Zeichenfolgen aus.
Dies entspricht effektiv einer Verkleinerung des gesamten Schlüsselraums auf
einen Teilraum. Somit wird ist ein Angriff, der erst Namen ausprobiert meist
wesentlich schneller Erfolg haben.
Hier lautet die Feststellung also, daß ein ausreichend großer Schlüsselraum
unbedingt notwendig ist.
Dabei ist der von den Algorithmen maximal nutzbare Schlüsselraum in der
Regel ausreichend, aber die Qualität der Schlüsselerzeugung entscheidet, ob
dieser auch ausgenutzt wird.
Deshalb sollten Schlüssel durch einen guten Zufallsgenerator erzeugt werden
und keinesfalls durch den Benutzer wählbar sein.
Für die Schlüsselerzeugung gelten also ähnlich Bedingungen wie bei 1).
Das Problem das sich beim One-Time-Pad ergeben hat, tritt natürlich bei jedem
symmetrischen Algorithmus auf (bei einem symmetrischen Algorithmus wird
derselbe Schlüssel zum Ver- und Entschlüsseln verwendet).
Vielleicht es es mit einigen Personen noch praktikabel, die Schlüssel
persönlich auszutauschen (wenn die Entfernung nicht zu groß ist).
Aber da man für jede Person mit der man kommunizieren will einen anderen
Schlüssel braucht, ist dies letztendlich nicht machbar.
Und den Schlüssel auf einem anderen Weg zu versenden (ob elektronisch oder
nicht), erfüllt die Anforderungen nicht, da der Empfänger dann nicht
eindeutig identifiziert werden kann.
Zum Glück gibt es asymmetrische Verfahren (auch public key Verfahren genannt),
die dieses Problem lösen.
Dabei gibt es pro Person zwei Schlüssel: den öffentlichen Schlüssel (public
key) zum Verschlüsseln und den geheimen Schlüssel zum Entschlüsseln.
Die öffentlichen Schlüssel werden (wie der Name besagt) öffentlich
bekanntgegeben, während der geheime Schlüssel geheim bleibt, so daß
nur der jeweilige Besitzer ihn kennt.
Jede mit dem öffentlichen Schlüssel verschlüsselte Nachricht kann nur mit dem
geheimen Schlüssel entschlüsselt werden.
Man braucht also nur die öffentlichen Schlüssel der Personen, denen man
Nachrichten senden will und den eigenen geheimen Schlüssel (zum Lesen aller
eingehenden Nachrichten).
Abgesehen von der Bereitstellung der öffentlichen Schlüssel brauchen also
keine Schlüssel ausgetauscht werden, und bei diesen ist es egal, ob sie
von jemandem abgehört werden oder nicht, da sie nicht die zum Entschlüsseln
notwendige Information enthalten (hierbei ist also nur der geheime Schlüssel
so wertvoll wie der Klartext).
Ein Nachteil von public key Algorithmen ist die wesentlich langsamere
Geschwindigkeit.
Deshalb werde in der Praxis meist hybride Verfahren eingesetzt, bei denen
mit dem öffentlichen Schlüssel nur ein zufällig generierter Sitzungschlüssel
(eines symmetrischen Algorithmus) verschlüsselt wird, mit dem dann wiederum
die eigentlich Nachricht verschlüsselt ist.
Natürlich sind hybride Verfahren komplexer und somit steigt die
Wahrscheinlichkeit von Implementierungsfehlern (und wie bereits erwähnt ist
die Erzeugung wirklich zufälliger Schlüssel auf einem Computer alles andere
als trivial).
Ein generelles Problem von public key Verfahren ist jedoch die Zuordnung
einer Person zu einem Schlüssel.
Niemand kann garantieren das ein auf den Namen "Bill Gates" ausgestellter
Schlüssel wirklich von "Bill Gates" benutzt wird. Im Gegenteil könnte sich
jede beliebige Person so einen Schlüssel erzeugen.
Eine Lösung dieses Zuordnungsproblems wäre, die Schlüssel wieder persönlich
auszutauschen, aber dann haben wir wieder dieselben Probleme wie mit
symmetrischen Algorithmen.
Eine andere Lösung ist die Verwendung digitaler Signaturen.
Dabei werden ebenfalls ein geheimer und ein öffentlicher Schlüssel pro Person
verwendet (dies dürfen in der Regel nicht die gleichen Schlüssel sein,
die zur Verschlüsselung von Nachrichten verwendet werden, sondern stellen ein
zweites zusätzliches Schlüsselpaar dar).
Im Unterschied zum public key Verfahren wird eine Nachricht jetzt aber mit
dem geheimen Schlüssel verschlüsselt.
Da nur der Besitzer den geheimen Schlüssel kennt ist somit sichergestellt,
daß nur er diese Nachricht signiert bzw. verschlüsselt haben kann.
Jede andere Person kann dies überprüfen, indem sie die Nachricht mit dem
öffentlichen Schlüssel entschlüsselt.
Um zu überprüfen, ob es sich um die richtige Nachricht handelt muss diese
natürlich vorher allen bekannt sein (etwas ein festgelegter Satz).
Einfacher (und auch wesentlich schneller) ist es einen Hashwert der Nachricht
zu bilden und nur diesen Hashwert zu signieren (also mit dem geheimen
Schlüssel zu verschlüsseln).
Jeder Empfänger kann nun ebenfalls einen Hashwert der Nachricht bilden und
mit dem mitgesendeten, signierten Hashwert vergleichen.
Stimmen beide überein, ist sichergestellt das die Nachricht wirklich vom
richtigen Sender stammt (denn nur er kann den Hashwert derart signieren).
Zusätzlich wird so gewährleistet, daß die Nachricht nicht verändert wurde,
sonst würden die beiden Hashwerte nicht übereinstimmen.
Dies funktioniert natürlich nur solange, wie der geheime Schlüssel auch
wirklich geheim bleibt (siehe unten).
Soll eine Nachricht nicht nur signiert sondern auch geheimgehalten werden,
müssen digitale Signatur und public key Verschlüsselung kombiniert werden.
Deshalb braucht man auch verschiedene Schlüsselpaare.
Wäre die Nachricht mit demselben Schlüsselpaar verschlüsselt und
signiert, ließe sich mittels Kryptanalyse aus der mit dem geheimen
und öffentlichen Schlüssel "behandelten" Nachricht der geheime
Schlüssel gewinnen.
Um sicherzustellen, daß ein öffentlicher Schlüssel wirklich dem angegebenen
Benutzer gehört, sollte der öffentlichen Schlüssel also signiert werden.
Signiert ihn der Benutzer selber verhindert das nur, daß nachträgliche
Veränderungen des Schlüssels unbemerkt erfolgen können.
Erst fremde Signaturen können die Bindung des öffentlichen Schlüssels an den
Benutzer stärken.
Dies geschieht entweder durch eine zentrale Instanz (Certification Authority)
der alle vertrauen müssen (!) oder durch viele unabhängige Signaturen Dritter.
Ein interessanter Ansatz ist das Vertrauensmodell von OpenPGP-Anwendungen.
Dabei werden öffentliche Schlüssel von Personen aus dem näheren Umfeld nach
persönlicher Identifikation direkt signiert.
Zusätzlich bewertet man die Vertrauenswürdigkeit dieser Personen, andere
Schlüssel zu signieren. Schlüssel die von einer dieser Personen signiert
worden sind erhalten also ebenfalls eine gewisse Glaubwürdigkeit.
Es bildet sich ein sogenanntes "Web of trust", in dem die Glaubwürdigkeit von
Schlüsseln durch persönliche Identifikation hergestellt und mittels
Signaturen weitergegeben wird.
Aus Sicht eines digitalen Systems ist eine eindeutige Identifikation eines
Menschen aber schwierig, da es nur Daten auf (Nicht-)Übereinstimmung testen
kann, während Menschen zur gegenseitigen Identifikation eine Kombination
vieler Merkmale nutzen, die heutzutage höchstens ansatzweise digital
erfasst werden können.
Zusätzlich sind Menschen im Gegensatz zu digitalen Systemen in
der Lage, sich dynamisch an schnell wechselnde Merkmale anzupassen
(z.B. erkennen wir andere Personen oft schon am Aussehen, egal welche
Kleidung derjenige gerade trägt, oder ob er gerade beim Friseur war).
Generell können von digitalen Systemen überprüfbare Daten
(vom zu identifizierenden Menschen) gewonnen werden durch:
In jedem dieser Fälle ist die Übereinstimmung von eingegebenen und
gespeicherten Daten für eine erfolgreiche Identifizierung notwendig.
Ist das Passwort aber leicht zu erraten oder die Chipkarte gestohlen,
versagen zwangsläufig alle Identifikationssysteme.
Auch biometrische Daten lassen sich stehlen, dies ist gerade der
entscheidende Unterschied von Daten (die in das digitale System
eingegeben werden) und den tatsächlichen Merkmalen.
Die Merkmale (Finger, Iris,..) lassen sich vermutlich nicht fälschen,
aber nach der Eingabe in das System liegen sie nur noch in Form digitaler
Daten vor und verlieren somit die entscheidende Eigenschaft der
Einzigartigkeit.
Jedes digitale Datum kann kopiert und replizert werden, dies ist
eine elementare Eigenschaft digitaler Datenverarbeitung.
Für eine eindeutige Identifizierung ist es also erforderlich, den gesamten
Vorgang der (Identifikations-)Datenerfassung und -verarbeitung so
abzusichern, daß keine Kopien von dieser Daten erstellt werden können
bzw. nach Abschluß des Vorgangs erhalten bleiben.
Sinnvoll ist außerdem eine Kombination aller möglichen Nachweise, um die
Wahrscheinlichkeit eines Mißbrauchs zu verringern, eventuell mit weiteren
Einschränkungen bezüglich Ort und Zeit (z.B. könnte eine erfolgreiche
Identifizierung nur während der Arbeitszeit möglich sein).
Jetzt aber zurück zur Kryptographie.
Die Identifikation ist einerseits beim Schlüsselaustausch notwendig.
Wird der Schlüssel persönlich ausgetauscht können wir uns also auch auf
unsere üblichen Identifikationsmethoden verlassen und die eben angestellten
Überlegungen sind überflüssig gewesen.
Ansonsten müssen wir uns wohl auf digitale Signaturen verlassen, die
vielleicht für einige Anwendungen ausreichen werden, aber nicht dieselbe
Sicherheit bieten können wie eine persönliche Identifikation, da sie nur
mit der Geheimhaltung digitaler Daten (des geheimen Schlüssels) funktionieren.
Denn Schlüssel sind auch nur Daten, die kopiert werden können.
Da es in heutigen Systemen nicht möglich ist, Daten für alle anderen Personen
unlesbar abzulegen, muß vor jeder Nutzung eines Schlüssels eine
Identifikation stattfinden, um eine mißbräuchliche Nutzung zu verhindern.
Zum Beispiel könnte der geheime Schlüssel auf einer Chipkarte gespeichert
sein und erst nach Eingabe des richtigen Passworts und Fingerabdrucks gelesen
werden können.
Das dadurch erreichte Sicherheitsniveau ist allerdings sehr vom Benutzer
abhängig (zumindest bei wissens- und besitz-basierter Identifikation).
Somit ist eine weitere Bedingung, daß Benutzer entsprechend geschult werden,
um ein entsprechendes Sicherheitsbewußtsein zu erreichen.
In diesem Bereich gibt es leider noch große Defizite, insbesondere, da es oft
den Marketing-Anforderungen ("ganz einfach, schnell und sicher") widerspricht.