Netzwerksicherheit
Christoph Wölfle
Inhaltsverzeichnis
1 Einführung
2 Kryptographie
2.1 Secret-Key-Algorithmen
2.1.1 DES (Data Encryption Standard)
2.2 Public-Key-Algorithmen
2.2.1 RSA (Rivest, Shamir, Adleman)
3 Authentifizierung (Identitätsprüfung)
3.1 Grundlagen der Authentifizierung
3.1.1 Authentifizierung mit Hilfe eines geheimen Schlüssels
3.2 Verschiedene Authentifizierungsprotokolle
3.2.1 Authentifizierung mit Hilfe von Public-Key Kryptographie
4 Digitale Signaturen
4.1 Public-Key Signaturen
4.2 Message Digests (Nachrichtenauszüge)
5 Zusammenfassung
Literatur
Netzwerksicherheit ist ein weites Gebiet. Viele denken hier in erster
Linie an Themen wie Verschlüsselung, doch es beinhaltet weitaus
mehr. Es kann grob in 4 Gebiete unterteilt werden:
- Die Geheimhaltung von Daten mit Hilfe von Kryptographie
(z.B. E-mail).
- Die Authentizität von Benutzern (Identitätsprüfung).
Beispielsweise die Frage: Woher bin ich sicher, dass es wirklich mein
Geschäftspartner ist, mit dem ich kommuniziere und nicht jemand
anderes?
- Die Echtheit einer Nachricht, Datei, Befehl etc. mit Hilfe von
Digitalen Signaturen, z.B. Beweis von Bestellungen, Digitale
Unterschriften
- und zuletzt die Integritätskontrolle über das System
Die Kryptographie, der wir uns als nächstes zuwenden, wird am
ausführlichsten behandelt, da diese in fast allen Gebieten der
Netzwerksicherheit benötigt wird.
Die Kryptographie (Verschlüsselungstheorie) hat eine lange
Geschichte. Schon seit Menschengedenken wird versucht, Geheimsprachen
zu entwerfen und Nachrichten zu verschlüsseln. Den größten Beitrag
haben hierbei die Militärs geleistet.
Heute verwendet man folgendes grundlegendes Verschlüsselungsmodell:
Bild 1: Verschlüsselungsmodell
Die zu verschlüsselnde Nachricht wird als Klartext K bezeichnet. Sie
wird verschlüsselt durch eine Verschlüsselungsfunktion Va,
die durch einen Schlüssel a parametrisiert ist. Der Schlüssel b
bestimmt eine Entschlüsselungsfunktion Eb. Ist C die
verschlüsselte Nachricht, sprich der Schlüsseltext, so gilt C =
Va(K), K = Eb(C) daraus folgt nun K =
Eb(Va(K)). Die letzte Gleichung besagt, dass
durch eine Verschlüsselung, gefolgt von einer Entschlüsselung, die
Nachricht erhalten bleibt.
Eine der wichtigsten Grundlagen der Kryptographie ist die Annahme,
dass der Eindringling den kompletten Schlüsseltextes, wie auch die
Ver- und Entschlüsselungsfunktion kennen kann.
Hier kommen nun die Schlüssel ins Spiel. Der Schlüssel besteht aus
einer relativ kurzen Zeichenkette, die eine von vielen potentiellen
Verschlüsselungen auswählt. Dadurch kann der Eindringling den
Schlüsseltext C, wenn überhaupt, nur sehr schwer entschlüsseln. Um so
länger dabei der Schlüssel ist, um so mehr Möglichkeiten bestehen zur
Ver- wie Entschlüsselung. Bei einer Schlüssellänge von 2 Ziffern
ergeben sich bereits 100 mögliche Entschlüsselungen bei 3 Ziffern
schon 1000 Kombinationen!
Geheimhaltung kommt durch einen starken (öffentlichen) Algorithmus und
einen langen Schlüssel zustande. Um seinen Bruder zu hindern, die
eigenen E-mails zu lesen, reicht ein 64-bit Schlüssel. Um eine
Regierung zu hindern, wird ein 256-bit Schlüssel benötigt. Moderne
Kryptographie nutzt dieselben Ideen wie die traditionelle
Kryptographie: Substitution (Ersetzung) und Transposition
(Vertauschung) - allerdings mit anderen Schwerpunkten. Früher dienten
einfache Algorithmen und sehr lange Schlüssel der Sicherheit
(->One-Time Pads). Heute wird versucht, die Algorithmen immer
komplexer zu gestalten.
Ein guter Verschlüsselungsalgorithmus muss heute folgende Bedingungen
erfüllen:
- Für jeden Schlüssel s und für jeden Klartext K ist
Vs(K) = C und Es(C) = K auf einfache Weise zu
berechnen.
- Für jeden Klartext K hat der Schlüsseltext C keine wesentlich
grössere Länge
(Ziel: kurze Übertragungszeit)
- Aus einem Schlüsseltext C kann ohne Kenntnis des
Entschlüsselungschlüssels nicht, oder nur sehr schwer, der
dazugehörige Klartext K gewonnen werden.
Die nun im folgenden behandelten Algorithmen werden diesen
Anforderungen gerecht. Es wird dabei hauptsächlich zwischen 2 Arten
unterschieden: den Secret-Key-Algorithmen und den
Public-Key-Algorithmen
Bei Secret-Key-Algorithmen gibt es, wie der Name schon sagt, einen
geheimen Schlüssel s, der sowohl für die Verschlüsselung, wie auch für
die Entschlüsselung verwendet wird (Schlüssel a = Schlüssel b
vgl. Bild 1). Daraus folgt, dass K = Es(Vs(K))
ist. Dieser geheime Schlüssel führt immer wieder zu dem Problem des
Schlüsselaustausches. Einer der weitverbreitetesten und benutzten
Secret-Key-Algorithmen ist DES, den wir uns nun etwas genauer
anschauen wollen.
Dieser Algorithmus wurde in den 70er Jahren von IBM
entwickelt. Allerdings wurde damals ein 128-bit Schlüssel verwendet,
anstelle eines 56-bit Schlüssels heute. Nun stellt sich die Frage, aus
welchem Grund IBM den Schlüssel reduzierte. Als die US-Regierung den
Algorithmus standardisieren wollte, lud diese IBM ein über die Sache
zu "diskutieren". Nach dieser Diskussion reduzierte IBM den Schlüssel
von 128 bit auf 56 bit und entschied den genauen Entwicklungsprozess
von DES geheim zuhalten. 1977 wurde DES von der US-Regierung zum
Standard erhoben.
DES ist in seiner ursprünglichen Form nicht mehr sicher. Modifizierte
Varianten wie Triple DES werden jedoch noch als sicher angesehen.
Ein Überblick über die Grundfunktion von DES ist in Bild 2
skizziert. Der Klartext wird in 64-bit Blöcken verschlüsselt, welche
64-bit Schlüsseltexte ergeben. Der Algorithmus, welcher von einem
56-bit Schlüssel parametrisiert wird, hat 19 verschiedene Stufen,
wobei Stufe19 das Inverse zu Stufe 1 bildet. In der vorletzten Stufe
werden die linken 32 bit mit den rechten 32 bit vertauscht. Die
restlichen 16 Stufen sind funktional identisch aber durch verschiedene
Funktionen des Schlüssels parametrisiert. Die Operation einer
dazwischenliegenden Schicht ist in Bild 2 dargestellt. Der rechte
32-bit Ausgang Ri ergibt sich aus dem bitweisen
Exklusiv-Oder des linken Eingang Li-1 und einer Funktion
f(Ri-1,Si) dieser Stufe. In jedem dieser 16
Iterationen (Wiederholungen) wird dabei ein anderer Schlüssel
verwendet (durch Teilung des 56-bit Schlüssel und Rotation)
Bild 2: DES / Detailbetrachtung einer Iteration
Andere wichtige Secret-Key-Algorithmen sind z.B. IDEA, BLOWFISH, FEAL
oder seit kurzem AES.
Die NIST (National Institute of Standards and Technology) rief 1997
eine Art Entwicklungswettbewerb ins Leben, zur Entwicklung eines
Advanced Encryption Standard (AES), welcher als Ablösung für DES
gedacht war. Im Oktober 2000 entschied sich die NIST schliesslich für
den Algorithmus Rijndael, der von den Belgiern Rijmen und Daemen
entwickelt wurde und, im Unterschied zu DES, bis zu 256-bit lange
Schlüssel unterstützt.
Wie bereits erwähnt, ziehen die Secret-Key-Algorithmen ein grosses
Problem nach sich: Die Schlüsselverteilung. Was ist z.B., wenn bei
der ersten Geheimschlüssel Vereinbarung dieser Schlüssel von einem
Eindringling gestohlen wird?
1976 veröffentlichten zwei Entwickler an der Stanford University,
Diffie und Hellman, ein radikal neues Kryptosystem. Das besondere
dabei ist, dass die Verschlüsselungs- und Entschlüsselungsschlüssel
völlig unterschiedlich und nur schwer voneinander ableitbar sind. Der
Algorithmus funktioniert wie folgt. Eine Person, nennen wir sie Alice,
will sichere Nachrichten empfangen. Man benötigt hierzu eine
Verschlüsselungsmethode Va und eine Entschlüsselungsmethode
Eb die folgende Gleichung erfüllt
Eb(Va(K)) = K. Ausserdem darf b von a nur
besonders schwer ableitbar sein. Die Verschlüsselungsfunktion V
inklusive Schlüssel a wird nun veröffentlicht, deshalb der Name
Public-Key-Algorithmen. Ebenfalls bekannt ist die
Entschlüsselungsfunktion E, allerdings behält Alice ihren privaten
Schlüssel b geheim. Somit ist Va öffentlich aber
Eb geheim. Nun will Alice (öffentlicher Schlüssel a und
geheimer Schlüssel b) mit Tom (öffentlicher Schlüssel t und geheimer
Schlüssel u), mit dem sie niemals zuvor Kontakt hatte, auf einem
sicheren Wege kommunizieren. Alice sendet nun ihre erste Nachricht K
indem sie Vt(K) errechnet und diese Nachricht an Tom
schickt, der diese wiederum mit Hilfe seiner geheimen
Entschlüsselungsfunktion Eu entschlüsselt. Niemand anderes
als Tom kann diese Nachricht lesen.
Das einzige Problem ist, Algorithmen zu finden, die diesen Ansprüchen
genügen. Eine gute Methode ist der RSA Algorithmus, benannt nach
seinen 3 Erfindern.
Der RSA Algorithmus basiert auf dem Problem der
Primfaktorzerlegung. Wir wollen uns Details ersparen und beschränken
uns auf die Anwendung des RSA Algorithmus:
- Wähle 2 grosse Primzahlen p und q (normalerweise grösser als
10100)
- Errechne n = p * q und z = (p-1) * (q-1)
- Wähle Nummer e so das ggT(e,z) = 1
- Finde ein v für das gilt v * e = 1 mod z (vgl. Bild 1: a=(v,n),
b=(e,n))
Mit diesen Parametern, die wir im voraus errechnet haben, sind wir
bereit zur Verschlüsselung. Teile den Klartext in Blöcke von k bits,
für die gilt: 0≤2k<n. Um eine Nachricht nun zu verschlüsseln
rechne C = Kv mod (n). Um die Nachricht zu entschlüsseln
rechne K = Ce mod (n). Es kann nachgeprüft werden, dass für
jedes K die Verschlüsselung und Entschlüsselung Inverse sind. (siehe
Bild 3)
Die Sicherheit bei RSA entsteht durch das Problem der
Primfaktorzerlegung. Wenn der Eindringling aus n, die Primfaktoren p
und q berechnen könnte, würde es kein Problem mehr sein e zu
finden. Aber selbst mit den neuesten Computern ist die
Primzahlzerlegung, für sehr große n, in absehbarer Zeit nicht zu
berechnen.
Bild 3: Beispiel eines RSA-Algorithmus
Anzumerken sei noch, dass die meisten RSA-basierenden Systeme einen
Public-Key verwenden, um einen geheimen Sitzungsschlüssel zu
vereinbaren. Anschliessend setzen sie mit DES oder IDEA fort, da RSA
und die anderen Public-Key-Algorithmen zu langsam sind.
Mit Authentifizierung wird die Technik des Überprüfungsprozesses
bezeichnet, die die Identität des Kommunikationspartners
feststellt. Hierfür werden komplexe Protokolle benötigt, die auf
Kryptographie basieren. Es wird darauf hingewiesen, dass
Authentifizierung nicht mit Autorisierung verwechselt werden darf!
Authentifizierung handelt von der Identitätsprüfung mit deren Hilfe
wiederum die Autorisierungsrechte erfragt werden können.
Das allgemeine Modell, das alle Authentifizierungsprotokolle
verwenden, ist folgendes. Ein einleitender Benutzer (in Wirklichkeit
meist ein Prozess), sagen wir wieder Alice, will eine sichere
Verbindung mit einem zweiten Benutzer (Tom) eingehen. Alice startet
den Prozess, indem sie eine Nachricht an Tom schickt. Es folgt ein
Nachrichtenaustausch, meistens mit dem Ziel nach der Identitätsprüfung
einen geheimen Sitzungsschlüssel zu vereinbaren. Hier muss wieder
davon ausgegangen werden, dass ein Eindringling dabei die Nachrichten
in vollem Umfang abfangen kann.
In der Realität wird meist ein Public-Key-Algorithmus zur
Authentifizierung als auch zum Austausch des Sitzungsschlüssels
verwendet. Dieser bildet dann die Grundlage für eine Secret-Key
Kommunikation (z.B. bei SSH), da Public-Key Kryptographie um die 100
bis 1000mal langsamer ist als Secret-Key Kryptographie.
Für unser erstes Authentifizierungsprotokoll wollen wir annehmen das
Alice (A) und Tom (T) bereits einen geheimen Schlüssel (s) vereinbart
haben. Dieses Protokoll basiert auf einer grundsätzlichen Überlegung,
die in vielen Authentifizierungsprotokollen zu finden ist:
Eine Partei sendet eine Zufallszahl (Z) zu der anderen, welche diese
in einer speziellen Form transformiert und das Ergebnis
zurückschickt. Solche Protokolle werden auch challenge-response
Protokolle genannt. Dieses Protokoll wollen wir uns auf Grundlage des
Bildes 4 etwas genauer anschauen.
- Nachricht 1: Alice sendet ihre Identität
- Nachricht 2: Tom weiss nicht, ob es wirklich Alice ist, mit der er
kommuniziert, so wählt er eine lange Zufallszahl aus.
- Nachricht 3: Alice verschlüsselt nun die Nachricht mit dem mit Tom
vereinbarten Schlüssel und sendet diese zurück. Tom weiss nun das er
mit Alice kommuniziert.
- Nachricht 4: Nun will Alice sichergehen das sie mit Tom redet und
schickt Nachricht 4
- Nachricht 5: Beide können nun sicher sein, dass sie wirklich
miteinander kommunizieren und kein Betrüger am Werk ist.
Bild 4: challenge-response Protokoll
Es gibt viele verschiedene Arten von
Authentifizierungsprotokollen. Eine Möglichkeit ist die Einführung
eines KDC (Key Distribution Center), mit dem jeder Benutzer im
Netzwerk einen Schlüssel teilt. Jeder Benutzer geht dann über das KDC,
als Vermittlungsstelle, eine Kommunikation mit einem anderen Benutzer
(Prozess) ein. Vorteil: Nur ein Schlüssel anstelle von
vielen. Nachteil: Man muss dem KDC vertrauen. In vielen Systemen wird
auch das sogenannte Kerberosprotokoll verwendet. Dieses beinhaltet 2
Server. Einen Authentifizierungsserver (AS), der den Benutzer nach
seinem Login überprüft (ähnlich dem KDC) und einen
Ticketgewährungs-Server (TGS), der Identitätstickets ausstellt. Da die
Kerberos Erfinder nicht annahmen, das die ganze Welt einem
Authentizitätsserver vertraut, wird sie in einzelne Gebiete unterteilt
die alle ihre eigenen Server besitzen, die dann mit den jeweiligen
anderen Servern kommunizieren. Bisher haben wir angenommen, dass
Alice und Tom einen geheimen Schlüssel vereinbart haben. Was aber,
wenn nicht?
Hier eignet sich nun ein häufig verwendeter
Authentifizierungsalgorithmus: die Authentifizierung durch Public-Key
Kryptographie.
Der Aufbau eines solchen Authentifizierungsalgorithmus kann auf
verschiedene Art und Weise erfolgen. Eine typische Art wird in Bild 5
dargestellt. Alice startet dabei den Prozess, indem sie mit Toms
öffentlichen Schlüssel ihre Identität A und eine Zufallszahl
ZA verschlüsselt. Tom antwortet darauf indem er mit Hilfe
von Alices öffentlichem Schlüssel die von Alice gewählte Zufallszahl
ZA , eine selbstgewählte Zufallszahl ZT und
einen vorgeschlagenen Sitzungsschlüssel s verschlüsselt und Alice
schickt. Wenn Alice nun Nachricht 2 erhält, weiss sie, dass diese von
Tom ist, da ZA in dieser Nachricht enthalten ist und
niemand anderes ihr diese Zufallszahl hätte zurückschicken
können. Alice schickt nun Nachricht 3 indem sie mit Hilfe des
vereinbarten Sizungsschlüssels s die Zufallszahl ZT
verschlüsselt. Nun kann sich auch Tom sicher sein, dass er mit Alice
kommuniziert und mit niemandem sonst.
Bild 5: Gegenseitige Authentifizierung mit Hilfe
von Public-Key Kryptographie
Die Echtheit vieler rechtsgültiger Dokumente ist bestimmt durch eine
bevollmächtigte handgeschriebene Unterschrift. Fotokopien o.ä. sind
nicht erlaubt. Für computerversendete Nachrichten wie z.B. E-mail muss
also eine Lösung für dieses Problem gefunden werden. Das Problem,
handgeschriebene Unterschriften ersetzten zu müssen, ist kein
triviales. Grundsätzlich wird ein System benötigt, in welchem eine
Seite der anderen Seite eine signierte Nachricht zusenden kann, so
dass...
- der Empfänger die geforderte Identität des Senders überprüfen kann
- der Sender später nicht den Inhalt der Nachricht verleugnen kann
- der Empfänger die Nachricht nicht selbstgeschrieben haben könnte
Kommen wir nun zu den verschieden Realisierungen von digitalen
Signaturen:
Eine Methode, die jedoch heute so gut wie keine Rolle mehr spielt, ist
die Secret-Key Signatur. In dieser Signatur ist eine zentrale Behörde
vonnöten, die alles weiss und der jeder vertraut, die sich aus der
Verwendung von geheimen Schlüsseln ergibt. Zudem bekommt diese Behörde
alle Nachrichten zu lesen. Deshalb wäre es wünschenswert, wenn
signierte Dokumente diese Einrichtung nicht bräuchten.
Glücklicherweise kann Public-Key Kryptographie hierzu einen grossen
Beitrag leisten. Betrachten wir diese Public-Key Signaturen nun etwas
näher.
Nehmen wir an, Public-Key Verschlüsselungs- und
Entschlüsselungsalgorithmen hätten zusätzlich zur üblichen Eigenschaft
E(V(K))=K die Eigenschaft V(E(K))=K. Was z.B. bei RSA der Fall ist.
Alice kann dann eine signierte Nachricht schicken indem sie Tom
Vt(Ea(K)) sendet. Wenn Tom die Nachricht
empfängt, entschlüsselt er zunächst mit seiner
Entschlüsselungsfunktion Et die Nachricht, dadurch erhält
er Ea(K). Um den Klartext zu bekommen wendet er auf diese
Funktion noch die Verschlüsselungsmethode Va an, die ja
bekanntlich öffentlich ist. Dadurch ist sich Tom gleichzeitig sicher
das diese Nachricht nur von Alice stammen kann, da nur diese die
Entschlüsselungsfunktion Ea besitzt! (siehe Bild 6)
Bild 6: Public-Key Signatur
Obwohl Public-Key Signaturen elegante Schemata sind, gibt es doch
Probleme, welche sich aber eher auf die Umgebung, in welcher der
Algorithmus läuft, als auf den Algorithmus selbst beziehen.
Was ist aber, wenn Alice ihren geheimen Schlüssel aufdeckt oder ihn
wechselt? Dann hat Tom keine Beweise mehr, dass Alice ihm diese
Nachricht geschickt hat und nicht ein Betrüger. Darum scheint es nötig
eine Behörde zu haben, die diese Schlüsselwechsel und Änderungen
notiert bzw. überwacht.
Eine Kritik an Signaturfunktionen ist, dass sie an zwei verschiedene
Funktionen erfüllen: Authentifizierung und Geheimhaltung. Oft wird
Authentifizierung benötigt, Geheimhaltung jedoch nicht. Da
Kryptographiealgorithmen immer noch recht langsam arbeiten, möchte man
bei nicht benötigter Geheimhaltung gerne einen Algorithmus haben, der
den Klartext nicht unnötigerweise verschlüsselt.
Der Message Digest löst dieses Problem. Dieses Schema basiert auf
einer Einweg-Hashfunktion welche willkürlich ein langes Stück Klartext
nimmt und aus diesem einen String mit fester Länge bestimmt. Diese
Hashfunktion hat drei wichtige Eigenschaften:
- Mit gegebenem K ist MD(K) leicht zu berechnen.
- Mit gegebenem MD(K) ist es nahezu unmöglich K zu finden.
- Es ist nahezu unmöglich, 2 Nachrichten zu erstellen, die denselben
Message Digest haben.
Um Kriterium 3 zu erreichen sollte die Hash mindestens 128 bit lang
sein, besser mehr.
Aus einem Stück Klartext einen Message Digest zu errechnen ist
wesentlich schneller als den Klartext mit einem Public-Key-Algorithmus
zu verschlüsseln.
Betrachten wir zum Schluss solch einen Message Digest in einem
Public-Key Kryptosytemen. Alice berechnet hierbei zuerst MD(K) und
sendet diesen dann, verschlüsselt mit Ea, zusammen mit dem
Klartext zu Tom (siehe Bild 7) Wird der Message Digest auf diese Art
verwendet, kann sowohl die Verschlüsselungszeit verkürzt, als auch der
Nachrichtentransport beschleunigt werden.
Bild 7: Message Digest in Public-Key Signatur
Abschliessend bleibt noch anzumerken, dass sich diese Ausarbeitung nur
mit einem Teilgebiet der Netzwerksicherheit, der Krytographie,
befasst. Themen, wie die Anfangs erwähnte Integritätskontrolle über
das System wurden hier vernachlässigt, da sie den Umfang dieser
Ausarbeitung sprengen würden.
Wir haben gesehen, dass wir das Gebiet der Kryptographie grob in 2
Teile trennen können: In die Secret-Key Kryptographie, die einen
geheimen Schlüssel, zur Ver- wie Entschlüsselung, verwendet und in die
Public-Key Kryptographie. In der es jeweils einen öffentlichen
Schlüssel zur Ver- und einen privaten (geheimen) Schlüssel zur
Entschlüsselung gibt. Auf diesen beiden grundlegenden
Verschlüsselungstechniken basieren, wie beschrieben, viele weitere
Techniken der Netzwerksicherheit, die über die reine Verschlüsselung
hinausgehen.
|
Letzte Änderung: 2001-02-27 10:06:36
|