From e7f54fa9fa1ccaf43234566c28f1939a14dd674c Mon Sep 17 00:00:00 2001 From: wieerwill Date: Fri, 4 Feb 2022 11:18:04 +0100 Subject: [PATCH] md to tex --- Network Security - Cheatsheet.pdf | Bin 23779 -> 611090 bytes Network Security - Cheatsheet.tex | 17160 +++++++++++++++++++++++++++- 2 files changed, 17159 insertions(+), 1 deletion(-) diff --git a/Network Security - Cheatsheet.pdf b/Network Security - Cheatsheet.pdf index 3fe1e308b4b934b20714bac36faa336dab746481..401dae85bcd33a3f514f2c770a9771c9b603b1eb 100644 GIT binary patch literal 611090 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

VoHPp0&q-Cjz4&=%M1F*wG3Y6c`ig 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

_6duf$#uU`eE{%ac{xzNW# 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

8okLO)-Xe`^}*$TGL}70=GsAZo5*D_Il1#k=-i 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

Nx1%-=^QKX9CGjpkZB( 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

#~!(+%)d#T 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

^F_1p_s^Y|Tn*Jq-p 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

3$OBP$}!kTN(LBLQ3gODiiciI(Int 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 diff --git a/Network Security - Cheatsheet.tex b/Network Security - Cheatsheet.tex index e5b7e73..01534de 100644 --- a/Network Security - Cheatsheet.tex +++ b/Network Security - Cheatsheet.tex @@ -125,6 +125,17164 @@ \setlength{\postmulticols}{1pt} \setlength{\multicolsep}{1pt} \setlength{\columnsep}{2pt} -start + + \section{Einleitung} + \subsection{Was ist eine Bedrohung in einem Kommunikationsnetz?} + + \begin{itemize} + \item Abstrakte Definition + \begin{itemize} + \item + Eine Bedrohung in einem Kommunikationsnetz ist ein mögliches + Ereignis oder eine Folge von Aktionen, die zu einer Verletzung eines + oder mehrerer Sicherheitsziele führen können. + \item + Die tatsächliche Realisierung einer Bedrohung wird als Angriff + bezeichnet. + \end{itemize} + \item + Beispiele + + \begin{itemize} + \item + Ein Hacker bricht in einen Firmencomputer ein + \item + Offenlegung von E-Mails während der Übertragung + \item + Jemand ändert Finanzbuchhaltungsdaten + \item + Ein Hacker, der eine Website vorübergehend außer Betrieb setzt + \item + Jemand, der Dienstleistungen in Anspruch nimmt oder Waren im Namen + anderer bestellt + \end{itemize} + \item + Was sind Sicherheitsziele? + + \begin{itemize} + \item + Sicherheitsziele können definiert werden + \item + in Abhängigkeit von der Anwendungsumgebung oder + \item + auf eine allgemeinere, technische Weise + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitsziele in Abhängigkeit von der + Anwendungsumgebung} + + \begin{itemize} + \item + Bankwesen + + \begin{itemize} + \item + Schutz vor betrügerischen oder versehentlichen Änderungen von + Transaktionen + \item + Identifizierung von Kunden bei Privatkundentransaktionen + \item + Schutz von PINs vor Offenlegung + \item + Sicherstellung der Privatsphäre der Kunden + \end{itemize} + \item + Elektronischer Handel + + \begin{itemize} + \item + Sicherstellung der Herkunft und Integrität von Transaktionen + \item + Schutz der Privatsphäre von Unternehmen + \item + Rechtsverbindliche elektronische Signaturen für Transaktionen + bereitstellen + \end{itemize} + \item + Regierung + + \begin{itemize} + \item + Schutz vor Offenlegung sensibler Informationen + \item + Bereitstellung elektronischer Signaturen für Regierungsdokumente + \end{itemize} + \item + Öffentliche Telekommunikationsanbieter + + \begin{itemize} + \item + Beschränken Sie den Zugang zu Verwaltungsfunktionen auf + autorisiertes Personal + \item + Schutz vor Dienstunterbrechungen + \item + Schutz der Privatsphäre der Teilnehmer + \end{itemize} + \item + Firmen-/Privatnetzwerke + + \begin{itemize} + \item + Schutz der Privatsphäre von Unternehmen/Personen + \item + Sicherstellung der Authentizität von Nachrichten + \end{itemize} + \item + Alle Netzwerke + + \begin{itemize} + \item + Verhinderung des Eindringens von außen (wer will schon Hacker?) + \end{itemize} + \item + Manchmal werden Sicherheitsziele auch als Sicherheitsvorgaben + bezeichnet + \end{itemize} + + + \subsection{Sicherheitsziele technisch + definiert} + + \begin{itemize} + \item + \textbf{Vertraulichkeit (Confidentiality)} + + \begin{itemize} + \item + Übertragene oder gespeicherte Daten sollten nur einem bestimmten + Personenkreis zugänglich gemacht werden. + \item + Die Vertraulichkeit von Entitäten wird auch als Anonymität + bezeichnet. + \end{itemize} + \item + \textbf{Integrität der Daten (Data Integrity)} + + \begin{itemize} + \item + Es sollte möglich sein, jede Veränderung von Daten zu erkennen. + \item + Dies setzt voraus, dass der Ersteller bestimmter Daten identifiziert + werden kann. + \end{itemize} + \item + \textbf{Rechenschaftspflicht (Accountability)} + + \begin{itemize} + \item + Es sollte möglich sein, die für ein Kommunikationsereignis + verantwortliche Stelle zu identifizieren. + \end{itemize} + \item + \textbf{Verfügbarkeit (Availability)} + + \begin{itemize} + \item + Die Dienste sollten verfügbar sein und korrekt funktionieren. + \end{itemize} + \item + \textbf{Kontrollierter Zugang (Controlled Access)} + + \begin{itemize} + \item + Nur autorisierte Stellen sollten auf bestimmte Dienste oder + Informationen zugreifen können. + \end{itemize} + \end{itemize} + + + \subsection{Technisch definierte + Bedrohungen} + + \begin{itemize} + \item + \textbf{Maskerade (oder Man-in-the-Middle-Angriff, Masquerade)} + + \begin{itemize} + \item + Eine Entität gibt sich als eine andere Entität aus + \end{itemize} + \item + \textbf{Lauschangriff (Eavesdropping)} + + \begin{itemize} + \item + Eine Entität liest Informationen, die sie nicht lesen soll + \end{itemize} + \item + \textbf{Verletzung der Berechtigung (Authorization Violation)} + + \begin{itemize} + \item + Eine Entität nutzt einen Dienst oder Ressourcen, für die sie nicht + vorgesehen ist + \end{itemize} + \item + \textbf{Verlust oder Veränderung} von (übertragenen) Informationen + (Loss or Modification of (transmitted) Information) + + \begin{itemize} + \item + Daten werden verändert oder zerstört + \end{itemize} + \item + \textbf{Verweigerung von Kommunikationsakten (Denial of Communication + Acts, Repudiation)} + + \begin{itemize} + \item + Ein Unternehmen leugnet fälschlicherweise seine Teilnahme an einer + Kommunikationshandlung + \end{itemize} + \item + \textbf{Fälschung von Informationen (Forgery of Information)} + + \begin{itemize} + \item + Ein Unternehmen erstellt neue Informationen im Namen eines anderen + Unternehmens + \end{itemize} + \item + \textbf{Sabotage (oder Denial-of-Service-Angriffe)} + + \begin{itemize} + \item + Jede Aktion, die darauf abzielt, die Verfügbarkeit und/oder das + ordnungsgemäße Funktionieren von Diensten oder Systemen zu + beeinträchtigen. + \end{itemize} + \end{itemize} + + + \subsection{Bedrohungen und technische + Sicherheitsziele} + + Diese Bedrohungen werden oft kombiniert, um einen Angriff durchzuführen! + + %\begin{longtable}[]{@{}llllllll@{}} + % \toprule + % Technische Sicherheitsziele & Maskerade & Abhören & + % Autorisierungsverletzung & Verlust oder Modifikation von (übertragenen) + % Informationen & Denial of Communication-Aktionen & Fälschung von + % Informationen & Sabotage (z.B. durch Überlastung)\tabularnewline + % \midrule + % \endhead + % Vertraulichkeit & x & x & x & & & & \tabularnewline + % Datenintegrität & x & & x & x & x & x & \tabularnewline + % Rechenschaftspflicht & x & & x & & x & x & \tabularnewline + % Verfügbarkeit & x & & x & x & & & x\tabularnewline + % Kontrollierter Zugriff & x & & x & & & x & \tabularnewline + % \bottomrule + %\end{longtable} + + + \subsection{Analyse der + Netzwerksicherheit} + + \begin{itemize} + \item + Um geeignete Gegenmaßnahmen gegen Bedrohungen ergreifen zu können, + müssen diese für eine gegebene Netzkonfiguration angemessen bewertet + werden. + \item + Daher ist eine detaillierte Netzsicherheitsanalyse erforderlich, die + + \begin{itemize} + \item + das Risikopotenzial der allgemeinen Bedrohungen für die ein Netz + nutzenden Einheiten bewertet und + \item + den Aufwand (Ressourcen, Zeit usw.) abschätzt, der zur Durchführung + bekannter Angriffe erforderlich ist. + \item + Achtung! Es ist im Allgemeinen unmöglich, unbekannte Angriffe zu + bewerten! + \end{itemize} + \item + Eine detaillierte Sicherheitsanalyse einer bestimmten + Netzkonfiguration / spezifischen Protokollarchitektur + + \begin{itemize} + \item + kann auch erforderlich sein, um die Finanzkontrolleure eines + Unternehmens davon zu überzeugen, Mittel für + Sicherheitsverbesserungen bereitzustellen, und + \item + kann besser nach den feinkörnigeren Angriffen auf der + Nachrichtenebene strukturiert werden. + \end{itemize} + \end{itemize} + + + \subsection{Angriffe auf die Kommunikation auf der + Nachrichtenebene} + + \begin{itemize} + \item + Passive Angriffe + + \begin{itemize} + \item + Lauschangriff + \end{itemize} + \item + Aktive Angriffe + + \begin{itemize} + \item + Verzögerung von PDUs (Protocol Data Units) + \item + Wiederholung von PDUs + \item + Löschung von PDUs + \item + Modifikation von PDUs + \item + Einfügung von PDUs + \end{itemize} + \item + Die erfolgreiche Durchführung eines der oben genannten Angriffe + erfordert + + \begin{itemize} + \item + Es gibt keine erkennbaren Nebeneffekte auf andere Kommunikationen + (Verbindungen/verbindungslose Übertragungen) + \item + Es gibt keine Nebenwirkungen auf andere PDUs der gleichen + Verbindung/verbindungslosen Datenübertragung zwischen den gleichen + Entitäten + \end{itemize} + \item + Eine Sicherheitsanalyse einer Protokollarchitektur muss diese Angriffe + entsprechend den Schichten der Architektur analysieren + \end{itemize} + + + \subsection{Schutzmaßnahmen gegen Bedrohungen der + Informationssicherheit} + + \begin{itemize} + \item + Physische Sicherheit + + \begin{itemize} + \item + Schlösser oder andere physische Zugangskontrollen + \item + Manipulationssicherung empfindlicher Geräte + \item + Umweltkontrollen + \end{itemize} + \item + Personelle Sicherheit + + \begin{itemize} + \item + Identifizierung von sensiblen Positionen + \item + Verfahren zur Überprüfung der Mitarbeiter + \item + Sicherheitsschulung und -bewusstsein + \end{itemize} + \item + Administrative Sicherheit + + \begin{itemize} + \item + Kontrolle des Imports von Fremdsoftware + \item + Verfahren zur Untersuchung von Sicherheitsverstößen + \item + Überprüfung von Prüfpfaden + \item + Überprüfung von Kontrollen der Rechenschaftspflicht + \end{itemize} + \item + Strahlungssicherheit + + \begin{itemize} + \item + Kontrolle von Funkfrequenzen und anderen elektromagnetischen + Abstrahlungen + \item + Bezeichnet als TEMPEST-Schutz + \end{itemize} + \item + Mediensicherheit + + \begin{itemize} + \item + Absicherung der Speicherung von Informationen + \item + Kontrolle der Kennzeichnung, Vervielfältigung und Vernichtung von + sensiblen Informationen + \item + Sicherstellen, dass Medien mit sensiblen Informationen sicher + vernichtet werden + \item + Scannen von Medien auf Viren + \end{itemize} + \item + Lebenszyklus-Kontrollen + + \begin{itemize} + \item + Vertrauenswürdiger Systementwurf, -implementierung, -bewertung und + -übernahme + \item + Programmierstandards und -kontrollen + \item + Kontrollen der Dokumentation + \end{itemize} + \item + Computer-Sicherheit + + \begin{itemize} + \item + Schutz von Informationen während der Speicherung/Verarbeitung in + einem Computersystem + \item + Schutz der Datenverarbeitungsgeräte selbst + \end{itemize} + \item + Sicherheit der Kommunikation + + \begin{itemize} + \item + Schutz von Informationen während des Transports von einem System zu + einem anderen + \item + Schutz der Kommunikationsinfrastruktur selbst + \end{itemize} + \end{itemize} + + + \subsection{Kommunikationssicherheit: Einige + Terminologie} + + \begin{itemize} + \item + Sicherheitsdienst + + \begin{itemize} + \item + Ein abstrakter Dienst, der eine bestimmte Sicherheitseigenschaft + gewährleisten soll. + \item + Ein Sicherheitsdienst kann sowohl mit Hilfe von kryptografischen + Algorithmen und Protokollen als auch mit herkömmlichen Mitteln + realisiert werden + + \begin{itemize} + \item + Man kann ein elektronisches Dokument auf einem USB-Stick + vertraulich halten, indem man es in einem verschlüsselten Format + auf dem Datenträger speichert und den Datenträger in einem Tresor + wegschließt. + \item + In der Regel ist eine Kombination aus kryptografischen und anderen + Mitteln am effektivsten + \end{itemize} + \end{itemize} + \item + Kryptographischer Algorithmus + + \begin{itemize} + \item + Eine mathematische Umwandlung von Eingabedaten (z. B. Daten, + Schlüssel) in Ausgabedaten + \item + Kryptografische Algorithmen werden in kryptografischen Protokollen + verwendet. + \end{itemize} + \item + Kryptografisches Protokoll + + \begin{itemize} + \item + Eine Reihe von Schritten und der Austausch von Nachrichten zwischen + mehreren Einheiten, um ein bestimmtes Sicherheitsziel zu erreichen + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitsdienste - + Überblick} + + \begin{itemize} + \item + \textbf{Authentifizierung (Authentication)} + + \begin{itemize} + \item + Der grundlegendste Sicherheitsdienst, der sicherstellt, dass eine + Entität tatsächlich die Identität besitzt, die sie vorgibt zu haben + \end{itemize} + \item + \textbf{Integrität (Integrity)} + + \begin{itemize} + \item + In gewisser Weise der "kleine Bruder" des + Authentifizierungsdienstes, da er sicherstellt, dass Daten, die von + bestimmten Entitäten erstellt wurden, nicht unentdeckt verändert + werden können + \end{itemize} + \item + \textbf{Vertraulichkeit (Confidentiality)} + + \begin{itemize} + \item + Der beliebteste Sicherheitsdienst, der die Geheimhaltung der + geschützten Daten gewährleistet + \end{itemize} + \item + \textbf{Zugriffskontrolle (Access Control)} + + \begin{itemize} + \item + Kontrolliert, dass jede Identität nur auf die Dienste und + Informationen zugreift, zu denen sie berechtigt ist + \end{itemize} + \item + \textbf{Nicht-Abstreitbarkeit (Non Repudiation)} + + \begin{itemize} + \item + Schützt davor, dass an einem Kommunikationsaustausch beteiligte + Entitäten später fälschlicherweise abstreiten können, dass der + Austausch stattgefunden hat + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitsunterstützende + Mechanismen} + + \begin{itemize} + \item + Allgemeine Mechanismen + + \begin{itemize} + \item + Schlüsselverwaltung: Alle Aspekte des Lebenszyklus von + kryptografischen Schlüsseln + \item + Zufallszahlengenerierung: Generierung von kryptographisch sicheren + Zufallszahlen + \item + Ereigniserkennung / Sicherheitsprüfpfad: Erkennung und Aufzeichnung + von Ereignissen, die zur Erkennung von Angriffen oder Bedingungen, + die von Angriffen ausgenutzt werden könnten, verwendet werden können + \item + Erkennung von Eindringlingen: Analyse der aufgezeichneten + Sicherheitsdaten, um erfolgreiche Einbrüche oder Angriffe zu + erkennen + \item + Beglaubigung: Registrierung von Daten durch eine vertrauenswürdige + dritte Partei, die später bestimmte Eigenschaften (Inhalt, + Ersteller, Erstellungszeitpunkt) der Daten bestätigen kann + \end{itemize} + \item + Kommunikationsspezifische Mechanismen + + \begin{itemize} + \item + Traffic Padding \& Cover Traffic: Erzeugung von gefälschtem Verkehr, + um die Analyse des Verkehrsflusses zu verhindern + \item + Routing-Kontrolle: Beeinflussung des Routings von PDUs in einem + Netzwerk + \end{itemize} + \end{itemize} + + + \subsection{Kryptologie - Definition und + Terminologie} + + \begin{itemize} + \item + Kryptologie + + \begin{itemize} + \item + Wissenschaft, die sich mit sicherer und meist geheimer Kommunikation + beschäftigt + \item + Der Begriff leitet sich von den griechischen Wörtern kryptós + (verborgen) und lógos (Wort) ab. + \item + Kryptologie umfasst + + \begin{itemize} + \item + Kryptographie ( gráphein = schreiben): die Lehre von den + Prinzipien und Techniken, mit denen Informationen in + verschlüsseltem Text verborgen und später von legitimen Nutzern + mit Hilfe eines geheimen Schlüssels offengelegt werden können + \item + Kryptoanalyse ( analýein = lýsen, losbinden): die Wissenschaft + (und Kunst) der Wiedergewinnung von Informationen aus Chiffren + ohne Kenntnis des Schlýssels + \end{itemize} + \end{itemize} + \item + Chiffre (Quelle Encyclopaedia Britannica) + + \begin{itemize} + \item + Methode zur Umwandlung einer Nachricht (Klartext), um ihre Bedeutung + zu verschleiern + \item + Wird auch als Synonym für den verborgenen Chiffretext verwendet. + \item + Chiffren sind eine Klasse von kryptografischen Algorithmen + \item + Die Umwandlung erfolgt in der Regel mit der Nachricht und einem + (geheimen) Schlüssel als Eingabe + \end{itemize} + \end{itemize} + + + \subsection{Kryptologie - einige historische + Anmerkungen} + + \begin{itemize} + \item + 400 v. Chr.: Die Spartaner verwenden ein Chiffriergerät namens Scytale + für die Kommunikation zwischen militärischen Befehlshabern. + + \begin{itemize} + \item + Die Scytale bestand aus einem spitz zulaufenden Stab, um den + spiralförmig ein Streifen Pergament oder Leder gewickelt war, auf + den die Nachricht geschrieben wurde + \item + Beim Aufwickeln wurden die Buchstaben der Reihe nach durcheinander + gewürfelt und bildeten die Chiffre. + \item + Wurde der Streifen um einen anderen Stab mit den gleichen + Proportionen wie das Original gewickelt, kam der Klartext wieder zum + Vorschein + \end{itemize} + \item + Im 4. Jahrhundert v. Chr: + + \begin{itemize} + \item + Aeneas Tacticus (Grieche) schreibt "Über die Verteidigung von + Festungen", wobei ein Kapitel der Kryptographie gewidmet ist + \item + Polybius (Grieche) erfindet eine Methode zur Kodierung von + Buchstaben in Symbolpaaren mit Hilfe eines Geräts namens + Polybius-Schachbrett, das eine bi-literale Substitution ermöglicht + und viele Elemente späterer Kryptosysteme vorwegnimmt + \end{itemize} + \item + Die Römer verwendeten eine monoalphabetische Substitution mit + einfacher zyklischer Verschiebung des Alphabets: + + \begin{itemize} + \item + Julius Caesar verwendete eine Verschiebung von drei Buchstaben (A + ergibt D, ..., Z ergibt C) + \item + Augustus Caesar verwendete eine einzige Verschiebung (A ergibt B, + ...) + \end{itemize} + \item + Die Araber waren die ersten, die die Prinzipien der Kryptographie + verstanden und die Anfänge der Kryptoanalyse entdeckten: + + \begin{itemize} + \item + Entwurf und Verwendung von Substitutions- und + Transpositions-Chiffren + \item + Entdeckung der Verwendung von Buchstabenhäufigkeitsverteilungen und + wahrscheinlichen Klartexten in der Kryptoanalyse + \item + Bis 1412 n. Chr. enthält Al-Kalka-Shandi in seiner Enzyklopädie Subh + al-a'sha eine elementare und respektable Behandlung mehrerer + kryptographischer Systeme und ihrer Kryptoanalyse + \end{itemize} + \item + Europäische Kryptographie: + + \begin{itemize} + \item + Die Entwicklung begann im Kirchenstaat und in den italienischen + Stadtstaaten im Mittelalter + \item + Die ersten Chiffren verwendeten nur Vokalsubstitutionen + \item + 1397: Gabriele de Lavinde von Parma verfasst das erste europäische + Handbuch zur Kryptographie, das eine Zusammenstellung von Chiffren + sowie eine Reihe von Schlüsseln für 24 Korrespondenten enthält und + Symbole für Buchstaben, Zahlen und mehrere zweistellige + Codeäquivalente für Wörter und Namen umfasst + \item + Code-Vokabulare, Nomenklatoren genannt, wurden für mehrere + Jahrhunderte zur Hauptstütze der diplomatischen Kommunikation der + meisten europäischen Regierungen + \item + 1470: Leon Battista Alberti veröffentlicht Trattati In Cifra, in + denen er die erste Chiffrierscheibe beschreibt und bereits + vorschreibt, die Scheibe regelmäßig neu einzustellen, wobei er den + Begriff der Polyalphabetizität entwickelt + \item + 1563: Giambattista della Porta liefert eine abgewandelte Form einer + quadratischen Tabelle und das früheste Beispiel einer digraphischen + Chiffre (2-Buchstaben-Substitution) + \item + 1586: Blaise de Vigenère veröffentlicht Traicté des chiffres, das + die ihm zugeschriebene quadratische Tabelle enthält + \item + Bis 1860 wurden große Codes für die diplomatische Kommunikation + verwendet, und Chiffren wurden nur in der militärischen + Kommunikation eingesetzt (außer auf hoher Kommandoebene), da es + schwierig war, Codebücher im Feld zu schützen. + \end{itemize} + \item + Entwicklungen während der Weltkriege 1 und 2: + + \begin{itemize} + \item + Während des 1. Weltkriegs: Chiffriersysteme wurden hauptsächlich für + die taktische Kommunikation verwendet und die Kommunikation auf + hoher Ebene wurde durch Codes geschützt. + \item + 1920: Die Kommunikationsbedürfnisse der Telekommunikation und die + Weiterentwicklung der elektromechanischen Technik führen zu einer + wahren Revolution bei den Verschlüsselungsgeräten - der Entwicklung + von Rotor-Chiffriermaschinen: + + \begin{itemize} + \item + Das Rotorprinzip wird unabhängig voneinander von E. E. Hebern + (USA), H. A. Koch (Niederlande) und A. Scherbius (Deutschland) + entdeckt + \item + Rotor-Chiffriermaschinen kaskadieren eine Sammlung von + Chiffrierscheiben, um eine polyalphabetische Substitution von + hoher Komplexität zu realisieren + \item + Die Kryptoanalyse der taktischen Kommunikation spielt während des + Zweiten Weltkriegs eine sehr wichtige Rolle. Die größten Erfolge + sind die britische und polnische Lösung der deutschen Enigma- und + der beiden Fernschreiber-Chiffren sowie die amerikanische + Kryptoanalyse der japanischen Chiffren. + \end{itemize} + \end{itemize} + \item + Entwicklungen nach dem 2. Weltkrieg: + + \begin{itemize} + \item + Die moderne Elektronik ermöglicht noch komplexere Chiffren, die + zunächst den Rotorprinzipien folgen (und deren Schwächen + einbeziehen) + \item + Die meisten Informationen über elektronische Chiffriermaschinen, die + von verschiedenen nationalen Kryptodiensten verwendet wurden, sind + nicht öffentlich zugänglich. + \item + Ende der 1960er Jahre war die kommerziell verfügbare Kryptographie + kaum bekannt, und starke Kryptographie war den nationalen Behörden + vorbehalten + \item + 1973-1977: Entwicklung des Data Encryption Standard (DES) + \item + 1976-1978: Entdeckung der Public-Key-Kryptografie + \item + 1976: W. Diffie und M. Hellman veröffentlichen "New Directions in + Cryptography" (Neue Wege in der Kryptographie), in dem sie die + Konzepte der Public-Key-Kryptographie einführen und ein Verfahren + zum Austausch von Schlüsseln über unsichere Kanäle beschreiben. + \item + R. Merkle entdeckt unabhängig das Prinzip des öffentlichen + Schlüssels, seine ersten Veröffentlichungen erscheinen jedoch erst + 1978, da der Veröffentlichungsprozess langsam ist + \item + 1978: R. L. Rivest, A. Shamir und A. M. Adleman veröffentlichen "A + Method for Obtaining Digital Signatures and Public Key + Cryptosystems", das den ersten funktionierenden und sicheren + Public-Key-Algorithmus RSA enthält + \end{itemize} + \end{itemize} + + + \section{Grundlagen der + Kryptographie} + + \begin{itemize} + \item + Überblick über kryptografische Algorithmen + \item + Angriffe auf die Kryptographie + \item + Eigenschaften von Verschlüsselungsalgorithmen + \item + Klassifizierung von Verschlüsselungsalgorithmen + \end{itemize} + + + \subsection{Kryptographische Algorithmen: + Überblick} + + \begin{itemize} + \item + In diesem Kurs stehen zwei Hauptanwendungen kryptographischer + Algorithmen im Mittelpunkt des Interesses + + \begin{itemize} + \item + Verschlüsselung von Daten: Umwandlung von Klartextdaten in + Chiffretext, um deren Bedeutung zu verbergen + \item + Signierung von Daten: Berechnung eines Prüfwerts oder einer + digitalen Signatur für einen gegebenen Klartext oder Geheimtext, der + von einigen oder allen Stellen, die auf die signierten Daten + zugreifen können, überprüft werden kann + \end{itemize} + \item + Einige kryptografische Algorithmen können für beide Zwecke verwendet + werden, andere sind nur für einen der beiden Zwecke sicher und/oder + effizient. + \item + Hauptkategorien von kryptografischen Algorithmen + + \begin{itemize} + \item + Symmetrische Kryptografie, die 1 Schlüssel für die + Ver-/Entschlüsselung oder die Signierung/Prüfung verwendet + \item + Asymmetrische Kryptografie mit 2 verschiedenen Schlüsseln für die + Ver-/Entschlüsselung oder die Unterzeichnung/Prüfung + \item + Kryptografische Hash-Funktionen mit 0 Schlüsseln (der "Schlüssel" + ist keine separate Eingabe, sondern wird an die Daten "angehängt" + oder mit ihnen "vermischt"). + \end{itemize} + \end{itemize} + + + \subsection{Angriff auf die + Kryptographie} + + + \subsection{Kryptoanalyse} + + \begin{itemize} + \item + Kryptoanalyse ist der Versuch, den Klartext und/oder den Schlüssel + herauszufinden. + \item + Arten der Kryptoanalyse + + \begin{itemize} + \item + Nur Chiffretext: bestimmte Muster des Klartextes können im + Chiffretext erhalten bleiben (Häufigkeit von Buchstaben, Digraphen + usw.) + \item + Bekannte Chiffretext-Klartext-Paare + \item + Gewählter Klartext oder gewählter Chiffretext + \item + Differentielle Kryptoanalyse und lineare Kryptoanalyse + \item + Neuere Entwicklung: verwandte Schlüsselanalyse + \end{itemize} + \item + Kryptoanalyse der Public-Key-Kryptographie + + \begin{itemize} + \item + Die Tatsache, dass ein Schlüssel öffentlich zugänglich ist, kann + ausgenutzt werden + \item + Die Kryptoanalyse öffentlicher Schlüssel zielt eher darauf ab, das + Kryptosystem selbst zu knacken und ist näher an der reinen + mathematischen Forschung als an der klassischen Kryptoanalyse. + \item + Wichtige Richtungen + + \begin{itemize} + \item + Berechnung von diskreten Logarithmen + \item + Faktorisierung von großen ganzen Zahlen + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{Brute-Force-Angriff} + + \begin{itemize} + \item + Der Brute-Force-Angriff probiert alle möglichen Schlüssel aus, bis er + einen verständlichen Klartext findet + + \begin{itemize} + \item + Jeder kryptographische Algorithmus kann theoretisch mit Brute Force + angegriffen werden + \item + Im Durchschnitt muss die Hälfte aller möglichen Schlüssel + ausprobiert werden + \end{itemize} + \end{itemize} + + Durchschnittlich benötigte Zeit für erschöpfende Schlüsselsuche + + %\begin{longtable}[]{@{}llll@{}} + % \toprule + % Schlüsselgröße {[}bit{]} & Anzahl der Schlüssel & Benötigte Zeit bei 1 + % \$Verschlüsselung/\textbackslash mu\$s & Zeitbedarf bei 10\^{}6 + % Verschlüsselung /\$\textbackslash mu\$s\tabularnewline + % \midrule + % \endhead + % 56 & \$2\^{}\{56\} = 7,2\textbackslash times 10\^{}\{16\}\$ & + % \$2\^{}\{55\}\textbackslash mu s = 1142\$ Jahre & \$10,01\$ + % Stunden\tabularnewline + % 128 & \$2\^{}\{128\} = 3,4 x 10\^{}\{38\}\$ & + % \$2\^{}\{127\}\textbackslash mu s = 5,4 x 10\^{}\{24\}\$ Jahre & \$5,4 x + % 10\^{}\{18\}\$ Jahre\tabularnewline + % 256 & \$2\^{}\{256\} = 1.2 x 10\^{}\{77\} & + % \$2\^{}\{255\}\textbackslash mu s = 3,7 x 10\^{}\{63\}\$ Jahre & \$3,7 x + % 10\^{}\{57\}\$ Jahre\tabularnewline + % \bottomrule + %\end{longtable} + + + \subsubsection{Wie groß ist groß?} + + Referenzzahlen zum Vergleich relativer Größenordnungen \textbar{} + Referenz \textbar{} Größe \textbar{} \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} \textbar{} Sekunden in einem Jahr \textbar{} ca. \$3 x + 10\^{}7\$ \textbar{} \textbar{} Sekunden seit der Entstehung des + Sonnensystems \textbar{} ca. \$2 x 10\^{}\{17\}\$ \textbar{} \textbar{} + Taktzyklen pro Jahr (50 MHz Computer) \textbar{} ca. \$1,6 x + 10\^{}\{15\}\$ \textbar{} \textbar{} Binäre Zeichenketten der Länge 64 + \textbar{} \$2\^{}\{64\}\$ ca. \$1,8 x 10\^{}\{19\}\$ \textbar{} + \textbar{} Binäre Zeichenfolgen der Länge 128 \textbar{} + \$2\^{}\{128\}\$ ca. \$3,4 x 10\^{}\{38\}\$ \textbar{} \textbar{} Binäre + Zeichenfolgen der Länge 256 \textbar{} \$2\^{}\{256\}\$ ca. \$1,2 x + 10\^{}\{77\}\$ \textbar{} \textbar{} Anzahl der 75-stelligen Primzahlen + \textbar{} \$5,2 x 10\^{}\{72\}\$ \textbar{} \textbar{} Elektronen im + Universum \textbar{} \$8,37 x 10\^{}\{77\}\$ \textbar{} + + + \subsubsection{Wichtige Eigenschaften von + Verschlüsselungsalgorithmen} + + Nehmen wir an, ein Absender verschlüsselt Klartextnachrichten \$P\_1, + P\_2, ...\$ zu Chiffretextnachrichten \$C\_1, C\_2, ...\$ + + Dann sind die folgenden Eigenschaften des Verschlüsselungsalgorithmus + von besonderem Interesse + + \begin{itemize} + \item + Die Fehlerfortpflanzung charakterisiert die Auswirkungen von + Bit-Fehlern bei der Übertragung von Chiffretext zu rekonstruiertem + Klartext \$P\_1', P\_2', ...\$ + + \begin{itemize} + \item + Je nach Verschlüsselungsalgorithmus können pro fehlerhaftem + Chiffretext-Bit ein oder mehrere fehlerhafte Bits im rekonstruierten + Klartext vorhanden sein + \end{itemize} + \item + Die Synchronisierung charakterisiert die Auswirkungen verlorener + Chiffretext-Dateneinheiten auf den rekonstruierten Klartext + + \begin{itemize} + \item + Einige Verschlüsselungsalgorithmen können sich nicht von verlorenem + Chiffretext erholen und benötigen daher eine explizite + Neusynchronisierung im Falle verlorener Nachrichten + \item + Andere Algorithmen führen eine automatische Neusynchronisierung nach + 0 bis n (n je nach Algorithmus) Chiffretextbits durch. + \end{itemize} + \end{itemize} + + + \subsection{Klassifizierung von Verschlüsselungsalgorithmen: Drei + Dimensionen} + + \begin{itemize} + \item + Die Art der Operationen, die zur Umwandlung von Klartext in + Chiffretext verwendet werden + + \begin{itemize} + \item + Substitution, die jedes Element des Klartextes (Bit, Buchstabe, + Gruppe von Bits oder Buchstaben) in ein anderes Element umwandelt + \item + Transposition, die die Elemente des Klartextes neu anordnet + \end{itemize} + \item + Die Anzahl der verwendeten Schlüssel + + \begin{itemize} + \item + Symmetrische Chiffren, die denselben Schlüssel für die Ver- und + Entschlüsselung verwenden + \item + Asymmetrische Chiffren, bei denen unterschiedliche Schlüssel für die + Ver- und Entschlüsselung verwendet werden + \end{itemize} + \item + Die Art und Weise, in der der Klartext verarbeitet wird + + \begin{itemize} + \item + Stromchiffren arbeiten mit Bitströmen und verschlüsseln ein Bit nach + dem anderen + + \begin{itemize} + \item + Viele Stromchiffren basieren auf der Idee der linearen + rückgekoppelten Schieberegister, und bei vielen Algorithmen dieser + Klasse wurden Schwachstellen entdeckt, da es eine tiefgreifende + mathematische Theorie zu diesem Thema gibt. + \item + Die meisten Stromchiffren verbreiten keine Fehler, sind aber + anfällig für den Verlust der Synchronisation. + \end{itemize} + \item + Blockchiffren arbeiten mit Blöcken der Breite b, wobei b vom + jeweiligen Algorithmus abhängt. + \end{itemize} + \end{itemize} + + + \subsection{Kryptographische Algorithmen - + Überblick} + + Kryptografische Algorithmen + + \begin{itemize} + \item + Überblick + + \begin{itemize} + \item + Eigenschaften + \item + Kryptoanalyse + \end{itemize} + \item + Symmetrische Ver-/Entschlüsselung + + \begin{itemize} + \item + Funktionsweisen + \item + DES + \item + AES + \item + RC4 + \item + KASUMI + \end{itemize} + \item + Asymmetrische Ver-/Entschlüsselung + + \begin{itemize} + \item + Hintergrund + \item + RSA + \item + Diffie-Hellman + \item + ElGamal + \item + ECC + \end{itemize} + \item + Kryptographische Hash-Funktionen + + \begin{itemize} + \item + MDCs/MACs + \item + MD + \item + SHA-1/2/ + \item + CBC-MAC + \item + GCM-MAC + \end{itemize} + \end{itemize} + + + \section{Symmetrische Kryptographie} + + \begin{itemize} + \item + Modi der Verschlüsselung + \item + Datenverschlüsselungsstandard (DES) + \item + Erweiterter Verschlüsselungsstandard (AES) + \item + Die Blockchiffre RC + \item + KASUMI + \end{itemize} + + + \subsection{Symmetrische + Verschlüsselung} + + \begin{itemize} + \item + Allgemeine Beschreibung + + \begin{itemize} + \item + Derselbe Schlüssel KA,B wird für die Verschlüsselung und + Entschlüsselung von Nachrichten verwendet + \end{itemize} + \item + Schreibweise + + \begin{itemize} + \item + Wenn P die Klartextnachricht bezeichnet, bezeichnet \$E(K\_\{A,B\}, + P)\$ den Chiffretext und es gilt \$D(K\_\{A,B\}, E(K\_\{A,B\}, P)) = + P\$ + \item + Alternativ schreibt man manchmal \$\{P\}\emph{\{K}\{A,B\}\}\$ oder + \$E\_\{K\_\{A,B\}\}(P)\$ für \$E(K\_\{A,B\}, P)\$ + \end{itemize} + \item + Beispiele: DES, 3DES, AES, ... + \end{itemize} + + + \subsection{Symmetrische Blockchiffren - + Verschlüsselungsarten} + + Allgemeine Bemerkungen \& Notation + + \begin{itemize} + \item + Ein Klartext P wird in Blöcke \$P\_1, P\_2, ...\$ der Länge b bzw. j + zerlegt, wobei b die Blockgröße des Verschlüsselungsalgorithmus + bezeichnet und j \textless{} b + \item + Der Chiffretext C ist die Kombination von \$C\_1, C\_2, ...\$, wobei + \$c\_i\$ das Ergebnis der Verschlüsselung des i-ten Blocks der + Klartextnachricht bezeichnet + \item + Die Stellen, die eine Nachricht verschlüsseln und entschlüsseln, haben + sich auf einen Schlüssel K geeinigt. + \end{itemize} + + Elektronischer Codebuch-Modus (Electronic Code Book Mode: ECB) + + \begin{itemize} + \item + Jeder Block Pi der Länge b wird unabhängig verschlüsselt: \$C\_i = + E(K, p\_i)\$ + \item + Ein Bitfehler in einem Chiffretextblock \$C\_i\$ führt zu einem völlig + falsch wiederhergestellten Klartextblock \$P\_i'\$ + \item + Der Verlust der Synchronisation hat keine Auswirkungen, wenn + ganzzahlige Vielfache der Blockgröße b verloren gehen. Geht eine + andere Anzahl von Bits verloren, ist eine explizite Neusynchronisation + erforderlich. + \item + Nachteil: identische Klartextblöcke werden zu identischem Chiffretext + verschlüsselt! + \item + % \includegraphics{Assets/NetworkSecurity-electronic-code-book-mode.png} + \end{itemize} + + Cipher Block Chaining Modus (Cipher Block Chaining Mode: CBC) + + \begin{itemize} + \item + Vor der Verschlüsselung eines Klartextblocks pi wird dieser mit dem + vorangegangenen Chiffretextblock \$C\_\{i-1\}\$ XOR-verknüpft () + + \begin{itemize} + \item + \$C\_i = E(K, C\_\{i-1\} \textbackslash oplus p\_i)\$ + \item + \$P\_\{i'\} = C\_\{i-1\} \textbackslash oplus D(K, C\_i)\$ + \item + Um \$C\_1\$ zu berechnen, einigen sich beide Parteien auf einen + Anfangswert (IV) für \$C\_0\$ + \end{itemize} + \item + Eigenschaften + + \begin{itemize} + \item + Fehlerfortpflanzung: Ein verfälschter Chiffretextblock führt zu zwei + verfälschten Klartextblöcken, da \$P\_i'\$ mit \$C\_\{i-1\}\$ und + \$C\_i\$ berechnet wird + \item + Synchronisation: Wenn die Anzahl der verlorenen Bits ein + ganzzahliges Vielfaches von b ist, wird ein zusätzlicher Block + \$P\_\{i+1\}\$ verzerrt, bevor die Synchronisation wiederhergestellt + wird. Wenn eine andere Anzahl von Bits verloren geht, ist eine + explizite Neusynchronisation erforderlich. + \item + Vorteil: identische Klartextblöcke werden zu nicht-identischem + Chiffretext verschlüsselt. + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-cipher-block-chaining-mode.png} + \end{itemize} + + Chiffretext-Feedback-Modus (Ciphertext Feedback Mode: CFB) + + \begin{itemize} + \item + Ein Blockverschlüsselungsalgorithmus, der mit Blöcken der Größe b + arbeitet, kann in einen Algorithmus umgewandelt werden, der mit + Blöcken der Größe \$j (j\textless b)\$ arbeitet. + + \begin{itemize} + \item + \$S(j, x)\$ bezeichnen die \$j\$ höherwertigen Bits von \$x\$ + \item + \$P\_i\$, \$C\_i\$ den \$i\$-ten Block von Klartext und Geheimtext + der Länge \$j\$ bezeichnen + \item + IV ist ein Anfangswert, auf den sich beide Parteien geeinigt haben + \item + \$R\_1 = IV\$ + \item + \$R\_n = (R\_\{n-1\}*2\^{}j\textbackslash{} mod\textbackslash{} + 2\^{}b)\textbackslash oplus C\_\{n-1\}\$ + \item + \$C\_n = S(j,E\_K(R\_n))\textbackslash oplus P\_n\$ + \item + \$S(j,E\_K(R\_n))\textbackslash oplus C\_n = + S(j,E\_K(R\_n))\textbackslash oplus + S(j,E\_K(R\_n))\textbackslash oplus P\_n\$ + \item + \$S(j,E\_K(R\_n))\textbackslash oplus C\_n = P\_n\$ + \end{itemize} + \item + Ein gängiger Wert für j ist 8 für die Verschlüsselung von einem + Zeichen pro Schritt + \item + Eigenschaften von CFB + + \begin{itemize} + \item + Fehlerfortpflanzung: Da die Chiffretextblöcke schrittweise durch das + Register geschoben werden, verfälscht ein fehlerhafter Block + \$C\_i\$ den wiederhergestellten Klartextblock \$P\_i'\$ sowie die + folgenden \$\textbackslash lceil b / j\textbackslash rceil\$-Blöcke + \item + Synchronisation: Wenn die Anzahl der verlorenen Bits ein + ganzzahliges Vielfaches von j ist, werden \$\textbackslash lceil b / + j\textbackslash rceil\$ zusätzliche Blöcke verfälscht, bevor die + Synchronisation wiederhergestellt ist. Wenn eine beliebige andere + Anzahl von Bits verloren geht, ist eine explizite + Neusynchronisierung erforderlich. + \item + Nachteil: Die Verschlüsselungsfunktion E muss häufiger berechnet + werden, da eine Verschlüsselung von b Bit durchgeführt werden muss, + um j Bit des Klartextes zu verbergen. Beispiel: Bei Verwendung von + DES mit Verschlüsselung von jeweils einem Zeichen + \$\textbackslash Rightarrow\$ muss die Verschlüsselung 8-mal + häufiger durchgeführt werden + \end{itemize} + \end{itemize} + + Output-Feedback-Modus (OFB) + + \begin{itemize} + \item + Der Blockverschlüsselungsalgorithmus wird zur Erzeugung einer + Pseudozufallsfolge \$R\_i\$ verwendet, die nur von \$K\$ und \$IV\$ + abhängt. + + \begin{itemize} + \item + \$S(j, x)\$ bezeichnen die \$j\$ höherwertigen Bits von \$x\$ + \item + \$P\_i\$, \$C\_i\$ bezeichnen den \$i\$-ten Block von Klartext und + Chiffretext der Länge \$j\$ + \item + \$IV\$ sei ein Anfangswert, auf den sich beide Parteien geeinigt + haben + \item + \$R\_1 = IV\$ + \item + \$R\_n = (R\_\{n-1\}* 2\^{}j\textbackslash{} mod\textbackslash{} + 2\^{}b )\textbackslash oplus S(j,E\_K(R\_\{n-1\}))\$ // j-bit + Linksverschiebung + verschlüsselter alter Wert + \item + \$C\_n = S(j,E\_K(R\_n))\textbackslash oplus P\_n\$ + \item + \$S(j,E\_K(R\_n))\textbackslash oplus C\_n = + S(j,E\_K(R\_n))\textbackslash oplus + S(j,E\_K(R\_n))\textbackslash oplus P\_n\$ + \item + \$S(j,E\_K(R\_n))\textbackslash oplus C\_n = P\_n\$ + \end{itemize} + \item + Der Klartext wird mit der Pseudo-Zufallssequenz XOR-verknüpft, um den + Chiffretext zu erhalten und umgekehrt + \item + Eigenschaften von OFB + + \begin{itemize} + \item + Fehlerfortpflanzung: Einzelbitfehler führen nur zu Einzelbitfehlern + \$\textbackslash rightarrow\$ keine Fehlermultiplikation + \item + Synchronisierung: Wenn einige Bits verloren gehen, ist eine + explizite Re-Synchronisation erforderlich. + \item + Vorteil: Die Pseudo-Zufallsfolge kann vorberechnet werden, um die + Auswirkungen der Verschlüsselung auf die Ende-zu-Ende-Verzögerung + gering zu halten + \item + Nachteile + + \begin{itemize} + \item + Wie bei CFB muss die Verschlüsselungsfunktion E häufiger berechnet + werden, da eine Verschlüsselung von b Bit durchgeführt werden + muss, um j Bit des Klartextes zu verbergen + \item + Es ist für einen Angreifer möglich, bestimmte Bits des Klartextes + zu manipulieren + \end{itemize} + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-output-feedback-mode.png} + \end{itemize} + + Algorithmus-Übersicht + + \begin{itemize} + \item + Datenverschlüsselungsstandard (DES) + + \begin{itemize} + \item + Alter amerikanischer Standard aus den 70er Jahren + \item + Unsicher wegen der Schlüssel- und Blocklänge + \item + Grundlegender Aufbau + \item + Dreifache Verschlüsselung mit einer Blockchiffre, z.B. Triple-DES + \end{itemize} + \item + Erweiterter Verschlüsselungsstandard (AES) + + \begin{itemize} + \item + Offener Standardisierungsprozess mit internationaler Beteiligung + \item + Im Oktober 2000 wurde ein Algorithmus namens Rijndael für AES + vorgeschlagen + \item + Ankündigung des AES-Standards im November 2001 + \item + Siehe auch \href{http://www.nist.gov/aes/}{http://www.nist.gov/aes/} + \end{itemize} + \item + Andere populäre Algorithmen + + \begin{itemize} + \item + RC + \item + KASUMI + \end{itemize} + \end{itemize} + + + \subsection{Der Datenverschlüsselungsstandard + (DES)} + + Geschichte + + \begin{itemize} + \item + 1973 veröffentlichte das National Bureau of Standards (NBS, heute + National Institute of Standards and Technology, NIST) eine + Aufforderung zur Einreichung von Vorschlägen für einen nationalen + Verschlüsselungsstandard und forderte von dem Algorithmus, dass er + + \begin{itemize} + \item + ein hohes Maß an Sicherheit bieten, + \item + vollständig spezifiziert und leicht zu verstehen sein, + \item + Sicherheit nur durch seinen Schlüssel und nicht durch seine eigene + Geheimhaltung bieten, + \item + für alle Benutzer verfügbar sein, + \item + für den Einsatz in verschiedenen Anwendungen anpassbar sein, + \item + wirtschaftlich in elektronischen Geräten implementierbar sein, + \item + effizient in der Anwendung sein, + \item + validiert werden können und + \item + exportierbar sein. + \end{itemize} + \item + Keine der Einreichungen auf diese erste Aufforderung erfüllte diese + Kriterien auch nur annähernd. + \item + Auf eine zweite Aufforderung hin reichte IBM seinen Algorithmus + LUCIFER ein, eine symmetrische Blockchiffre, die mit Blöcken der Länge + 128 Bit unter Verwendung von Schlüsseln der Länge 128 Bit arbeitet; + dies war der einzige vielversprechende Kandidat. + \item + Die NBS bat die National Security Agency (NSA) um Hilfe bei der + Bewertung der Sicherheit des Algorithmus + + \begin{itemize} + \item + Die NSA reduzierte die Blockgröße auf 64 Bit, die Größe des + Schlüssels auf 56 Bit und änderte Details in den + Substitutionsfeldern des Algorithmus. + \item + Viele der Gründe der NSA für diese Änderungen wurden erst in den + frühen 1990er Jahren deutlich, lösten aber in den späten 1970er + Jahren große Besorgnis aus. + \end{itemize} + \item + Trotz aller Kritik wurde der Algorithmus 1977 als ,,Data Encryption + Standard'' in die Reihe der Federal Information Processing Standards + (FIPS PUB 46) aufgenommen und für die Verwendung in der gesamten nicht + klassifizierten Regierungskommunikation zugelassen. + \item + DES hat sich in den folgenden Jahren weithin durchgesetzt + \end{itemize} + + % \includegraphics{Assets/NetworkSecurity-des-algorithm.png} + + % \includegraphics{Assets/NetworkSecurity-des-single-iteration.png} + + + \subsubsection{DES - Einzelne + Iteration} + + \begin{itemize} + \item + Die rechten 32 Bit der zu verschlüsselnden Daten werden mit Hilfe + einer Expansions-/Permutationstabelle auf 48 Bit erweitert. + \item + Sowohl die linken als auch die rechten 28 Bit des Schlüssels (auch + Subkeys genannt) werden zirkulär nach links verschoben und der + resultierende Wert wird mit Hilfe einer + Permutations-/Kontraktionstabelle auf 48 Bit verkürzt. + \item + Die beiden oben genannten Werte werden XOR-verknüpft und in eine + Auswahl- und Ersetzungsbox eingegeben + + \begin{itemize} + \item + Intern wird diese Operation durch 8 so genannte s-Boxen realisiert, + von denen jede einen Sechs-Bit-Wert auf einen Vier-Bit-Wert gemäß + einer boxspezifischen Tabelle abbildet, was insgesamt zu einem + 32-Bit-Ausgang führt + \item + Das Design dieser s-boxes wurde von der NSA verstärkt, was in den + 1970er Jahren zu intensiven Diskussionen führte und in den 1990er + Jahren nach der Entdeckung der differentiellen Kryptoanalyse + verstanden wurde + \end{itemize} + \item + Der Ausgang des obigen Schritts wird erneut permutiert und mit den + linken 32 Bit der Daten XOR-verknüpft, was zu den neuen rechten 32 Bit + der Daten führt + \item + Die neuen linken 32 Bit der Daten sind der rechte Wert der vorherigen + Iteration + \end{itemize} + + + \subsubsection{DES - Entschlüsselung} + + \begin{itemize} + \item + Unter Verwendung der Abkürzung f(R, K) kann der + Verschlüsselungsprozess wie folgt geschrieben werden + + \begin{itemize} + \item + \$L\_i = R\_\{i-1\}\$ + \item + \$R\_i = L\_\{i-1\}\textbackslash oplus f(R\_\{i-1\}, K\_i)\$ + \item + Dieses Konzept (Aufteilung der Daten in zwei Hälften und + Organisation der Verschlüsselung gemäß den obigen Gleichungen) wird + in vielen Blockchiffren verwendet und wird als Feistel-Netzwerk + bezeichnet (nach seinem Erfinder H. Feistel) + \end{itemize} + \item + Der DES-Entschlüsselungsprozess ist im Wesentlichen derselbe wie die + Verschlüsselung. Er verwendet den Chiffretext als Eingabe für den + Verschlüsselungsalgorithmus, wendet aber die Unterschlüssel in + umgekehrter Reihenfolge an + \item + Die Ausgangswerte sind also + + \begin{itemize} + \item + \$L\_0' \textbar\textbar{} R\_0' =\$ InitialPermutation + (Chiffretext) + \item + chiffretext = InverseInitialPermutation (\$R\_\{16\} + \textbar\textbar{} L\_\{16\}\$) + \item + \$L\_0' \textbar\textbar{} R\_0' =\$ InitialPermutation + (InverseInitialPermutation + (\$R\_\{16\}\textbar\textbar L\_\{16\}))=R\_\{16\}\textbar\textbar L\_\{16\}\$ + \end{itemize} + \item + Nach einem Schritt der Entschlüsselung + + \begin{itemize} + \item + \$L\_1' = R\_0' = L\_\{16\} = R\_\{15\}\$ + \item + \$R\_1' = L\_0' \textbackslash oplus f(R\_0', + K\_\{16\})=R\_\{16\}\textbackslash oplus + f(R\_\{15\},K\_\{16\})={[}L\_\{15\}\textbackslash oplus + f(R\_\{15\},K\_\{16\}){]}\textbackslash oplus f(R\_\{15\},K\_\{16\}) + =L\_\{15\}\$ + \end{itemize} + \item + Diese Beziehung gilt für den gesamten Prozess als + + \begin{itemize} + \item + \$R\_\{i-1\} = L\_i\$ + \item + \$L\_\{i-1\} = R\_i\textbackslash oplus f(R\_\{i-1\}, K\_i) = + R\_i\textbackslash oplus f(L\_i, K\_i)\$ + \end{itemize} + \item + Der Ausgang der letzten Runde ist schließlich + + \begin{itemize} + \item + \$L\_\{16\}' \textbar\textbar{} R\_\{16\}' = R\_0 \textbar\textbar{} + L\_0\$ + \end{itemize} + \item + Nach der letzten Runde führt DES einen 32-Bit-Tausch und die inverse + Anfangspermutation durch + + \begin{itemize} + \item + InverseInitialPermutation(\$L\_0\textbar\textbar R\_0\$) = + InverseInitialPermutation(InitialPermutation(Klartext)) = Klartext + \end{itemize} + \end{itemize} + + + \subsubsection{DES - Sicherheit} + + \begin{itemize} + \item + Schwächen der Schlüssel + + \begin{itemize} + \item + Schwache Schlüssel: Vier Schlüssel sind schwach, da sie + Unterschlüssel erzeugen, die entweder alle 0 oder alle 1 enthalten. + \item + Halbschwache Schlüssel: Es gibt sechs Schlüsselpaare, die Klartext + zu identischem Chiffriertext verschlüsseln, da sie nur zwei + verschiedene Unterschlüssel erzeugen + \item + Möglicherweise schwache Schlüssel: Es gibt 48 Schlüssel, die nur + vier verschiedene Unterschlüssel erzeugen + \item + Insgesamt werden 64 Schlüssel von \$72057594037927936\$ als schwach + angesehen + \end{itemize} + \item + Algebraische Struktur + + \begin{itemize} + \item + Wäre DES geschlossen, dann gäbe es für jedes \$K\_1,K\_2\$ ein + \$K\_3\$, so dass: \$E(K\_2,E(K\_1,M))=E(K\_3,M)\$, also wäre die + doppelte Verschlüsselung nutzlos + \item + Wäre DES rein, dann gäbe es für jedes \$K\_1,K\_2,K\_3\$ ein + \$K\_4\$, so dass \$E(K\_3,E(K\_2,E(K\_1,M)))=E(K\_4,M)\$, also wäre + die dreifache Verschlüsselung nutzlos + \item + DES ist weder geschlossen noch rein, daher kann ein + Mehrfachverschlüsselungsschema verwendet werden, um die + Schlüssellänge zu erhöhen + \end{itemize} + \item + Differentielle Kryptoanalyse + + \begin{itemize} + \item + Im Jahr 1990 veröffentlichten E. Biham und A. Shamir diese + Analysemethode + \item + Sie sucht gezielt nach Unterschieden in Chiffretexten, deren + Klartexte bestimmte Unterschiede aufweisen, und versucht, daraus den + richtigen Schlüssel zu erraten + \item + Der grundlegende Ansatz benötigt einen ausgewählten Klartext + zusammen mit seinem Chiffretext + \item + DES mit 16 Runden ist gegen diesen Angriff immun, da der Angriff + \$2\^{}\{47\}\$ gewählte Klartexte oder (bei "Umwandlung" in einen + Angriff mit bekannten Klartexten) \$2\^{}55\$ bekannte Klartexte + benötigt. + \item + Die Entwickler von DES erklärten in den 1990er Jahren, dass sie in + den 1970er Jahren über diese Art von Angriffen Bescheid wussten und + dass die s-Boxen entsprechend entworfen wurden + \end{itemize} + \item + Schlüssellänge + + \begin{itemize} + \item + Da ein 56-Bit-Schlüssel in \$10,01\$ Stunden durchsucht werden kann, + wenn man \$10\^{}6\$ Verschlüsselungen / \$\textbackslash mu s\$ + durchführen kann (was heute möglich ist), kann DES nicht mehr als + ausreichend sicher angesehen werden. + \end{itemize} + \end{itemize} + + + \subsubsection{Erweiterung der Schlüssellänge von DES durch + Mehrfachverschlüsselung} + + \begin{itemize} + \item + Doppelter DES: Da DES nicht geschlossen ist, führt die doppelte + Verschlüsselung zu einer Chiffre, die 112-Bit-Schlüssel verwendet + + \begin{itemize} + \item + Leider kann sie mit einem Aufwand von \$2\^{}\{56\}\$ angegriffen + werden. + \item + Da \$C=E(K\_2,E(K\_1,P))\$ haben wir \$X:=E(K\_1,P)=D(K\_2,C)\$ + \item + Wenn ein Angreifer ein bekanntes Klartext/Chiffretext-Paar erhalten + kann, kann er zwei Tabellen erstellen (meet-in-the-middle-attack) + + \begin{itemize} + \item + Tabelle 1 enthält die Werte von \$X\$, wenn \$P\$ mit allen + möglichen Werten von \$K\$ verschlüsselt ist + \item + Tabelle 2 enthält die Werte von \$X\$, wenn \$C\$ mit allen + möglichen Werten von \$K\$ entschlüsselt wird + \item + Sortiere die beiden Tabellen und konstruiere Schlüssel + \$K\_\{T1\}\textbar\textbar K\_\{T2\}\$ für alle Kombinationen von + Einträgen, die den gleichen Wert ergeben. + \end{itemize} + \end{itemize} + \item + Da es für jeden beliebigen Klartext \$2\^{}\{64\}\$ mögliche + Chiffretext-Werte gibt, die mit Double-DES erzeugt werden könnten, + gibt es beim ersten bekannten Klartext/Chiffretext-Paar + durchschnittlich \$2\^{}\{112\}/2\^{}\{64\}=2\^{}\{48\}\$ Fehlalarme. + \item + Jedes weitere Klartext/Chiffretext-Paar verringert die Chance, einen + falschen Schlüssel zu erhalten, um den Faktor \$1/2\^{}\{64\}\$, so + dass bei zwei bekannten Blöcken die Chance \$2\^{}\{-16\}\$ beträgt. + \item + Der Aufwand, der erforderlich ist, um Double DES zu knacken, liegt + also in der Größenordnung von \$2\^{}\{56\}\$, was nur geringfügig + besser ist als der Aufwand von \$2\^{}\{55\}\$, der erforderlich ist, + um Single DES mit einem Angriff mit bekanntem Klartext zu knacken, und + weit entfernt von den \$2\^{}\{111\}\$, die wir von einer Chiffre mit + einer Schlüssellänge von 112 Bit erwarten würden! + \item + Diese Art von Angriff kann durch die Verwendung eines dreifachen + Verschlüsselungsschemas umgangen werden, wie es 1979 von W. Tuchman + vorgeschlagen wurde + + \begin{itemize} + \item + \$C=E(K\_3,D(K\_2,E(K\_1,P)))\$ + \item + Die Verwendung der Entschlüsselungsfunktion D in der Mitte + ermöglicht die Verwendung von Dreifachverschlüsselungsgeräten mit + Gegenstellen, die nur Einfachverschlüsselungsgeräte besitzen, indem + \$K\_1=K\_2=K\_3\$ gesetzt wird. + \item + Dreifachverschlüsselung kann mit zwei (Einstellung \$K\_1=K\_3\$) + oder drei verschiedenen Schlüsseln verwendet werden + \item + Bislang sind keine praktischen Angriffe gegen dieses Verfahren + bekannt + \item + Nachteil: die Leistung beträgt nur \$1/3\$ der einfachen + Verschlüsselung, so dass es besser sein könnte, gleich eine andere + Chiffre zu verwenden, die eine größere Schlüssellänge bietet + \end{itemize} + \end{itemize} + + + \subsection{Der fortgeschrittene Verschlüsselungsstandard + AES} + + \begin{itemize} + \item + Jan. 1997: Das National Institute of Standards and Technology (NIST) + der USA kündigt die Entwicklung des AES an. + + \begin{itemize} + \item + Das übergeordnete Ziel ist die Entwicklung eines Federal Information + Processing Standard (FIPS), der einen Verschlüsselungsalgorithmus + spezifiziert, der in der Lage ist, sensible Regierungsinformationen + bis weit ins nächste Jahrhundert hinein zu schützen. + \end{itemize} + \item + Sep. 1997: Offizieller Aufruf zur Einreichung von Algorithmen, offen + für jeden auf der Welt + + \begin{itemize} + \item + AES würde einen nicht klassifizierten, öffentlich zugänglichen + Verschlüsselungsalgorithmus bzw. -algorithmen spezifizieren, der + weltweit lizenzgebührenfrei erhältlich ist. + \end{itemize} + \item + Aug. 1998: Erste AES-Kandidatenkonferenz + + \begin{itemize} + \item + NIST gibt die Auswahl von 15 Kandidatenalgorithmen bekannt + \item + Aufforderung zu öffentlichen Kommentaren + \end{itemize} + \item + April 1999: + + \begin{itemize} + \item + Anhand der eingegangenen Analysen und Kommentare wählt das NIST fünf + Algorithmen als Kandidaten für die Endauswahl aus: MARS, RC6, + Rijndael, Serpent und Twofish + \end{itemize} + \item + Oktober 2000: Rijndael wird als Vorschlag des NIST für AES bekannt + gegeben + + \begin{itemize} + \item + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \setcounter{enumi}{25} + \item + November 2001: offizielle Ankündigung des AES-Standards + \end{enumerate} + \end{itemize} + \item + Rundenbasierte symmetrische Chiffre + \item + Keine Feistel-Struktur (unterschiedliche Verschlüsselungs- und + Entschlüsselungsfunktionen) + \item + Schlüssel- und Blocklängen + + \begin{itemize} + \item + Schlüssellänge: 128, 192, oder 256 Bit + \item + Blocklänge: 128, 192 oder 256 Bit (nur 128-Bit-Version + standardisiert) + \item + Anzahl der Runden: 10, 12, 14 + \end{itemize} + \end{itemize} + + Standardisierte AES-Konfigurationen \textbar{} Schlüsselgröße {[}bit{]} + \textbar{} Blocklänge {[}bit{]} \textbar{} \# Runden \textbar{} + \textbar{} -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- \textbar{} + -\/-\/-\/-\/-\/-\/-\/- \textbar{} \textbar{} 128 \textbar{} 128 + \textbar{} 10 \textbar{} \textbar{} 192 \textbar{} 128 \textbar{} 12 + \textbar{} \textbar{} 256 \textbar{} 128 \textbar{} 14 \textbar{} + + \begin{itemize} + \item + Der Algorithmus arbeitet mit + + \begin{itemize} + \item + \$state{[}4, 4{]}\$: ein Byte-Array mit 4 Zeilen und 4 Spalten (für + 128-Bit-Blockgröße) + \item + \$key{[}4, 4{]}\$: ein Array mit 4 Zeilen und 4 Spalten (für + 128-Bit-Schlüsselgröße) + \end{itemize} + \item + Verschlüsselung: (für eine Block- und Schlüsselgröße von 128 Bit) in + den Runden \$1-9\$ werden vier verschiedene Operationen verwendet + + \begin{itemize} + \item + ByteSub: eine nicht-lineare Byte-Substitution durch eine feste + Tabelle (im Grunde eine s-Box) + \item + ShiftRow: die Zeilen des Zustands werden zyklisch um verschiedene + Offsets verschoben + \item + MixColumn: die Spalten von \$state{[}{]}\$ werden als Polynome über + \$GF(2\^{}8)\$ betrachtet und modulo \$x\^{}4+1\$ mit einer festen + Matrix multipliziert: \$\textbackslash begin\{pmatrix\} + 02\&03\&01\&01\textbackslash01\&02\&03\&01\textbackslash\textbackslash{} + 01\&01\&02\&03\textbackslash\textbackslash{} + 03\&01\&01\&02\textbackslash end\{pmatrix\}\$ + \item + RoundKey: ein Round-Key wird mit dem Status XORiert + \end{itemize} + \item + Round 10 macht keinen Gebrauch von der Operation MixColumn + \end{itemize} + + % \includegraphics{Assets/NetworkSecurity-rijndael-one-round.png} + + \begin{itemize} + \item + Entschlüsselung + + \begin{itemize} + \item + Rundenschlüssel und Operationen werden in umgekehrter Reihenfolge + angewendet + \item + Der MixColumn-Schritt kann nur durch Multiplikation mit der inversen + Matrix (auch über \$GF(2\^{}8)\$) invertiert werden + \item + \$\textbackslash begin\{pmatrix\} 0e\&0b\&0d\&09\textbackslash{} + 09\&0e\&0b\&0d\textbackslash{} 0d\&09\&0e\&0b\textbackslash{} + 0b\&0d\&09\&0e \textbackslash end\{pmatrix\}\$ + \item + Oft werden tabellarische vorberechnete Lösungen verwendet, die aber + mehr Platz benötigen + \end{itemize} + \end{itemize} + + + \subsubsection{AES - Sicherheit} + + \begin{itemize} + \item + Die einfache mathematische Struktur von AES ist der Hauptgrund für + seine Geschwindigkeit, führte aber auch zu Kritik + \item + Nur die ByteSub-Funktion ist wirklich nichtlinear und verhindert eine + effektive Analyse + \item + AES kann als eine große Matrix-Operation beschrieben werden + \item + Bereits während der Standardisierung wurden Angriffe für reduzierte + Versionen entwickelt + + \begin{itemize} + \item + Ein Angriff mit \$2\^{}\{32\}\$ gewähltem Klartext gegen eine + 7-Runden-Version von AES {[}GM00{]} + \item + Signifikante Reduktion der Komplexität auch für eine + 9-Runden-Version von AES mit 256-Schlüsselgröße mit einem + zugehörigen Schlüsselangriff + \end{itemize} + \item + 2011 wurde der erste Angriff gegen einen vollständigen AES bekannt + {[}BKR11{]} + + \begin{itemize} + \item + Schlüsselwiederherstellung in \$2\^{}\{126.1\}\$ für AES mit 128 + Bit, \$2\^{}\{189.7\}\$ für AES mit 192 Bit, \$2\^{}\{254.4\}\$ für + AES mit 256 Bit + \item + "Praktischer" Angriff (geht nicht von verwandten Schlüsseln aus), + aber + \item + nur ein kleiner Kratzer in Anbetracht von 10 Jahren + kryptographischer Forschung + \end{itemize} + \end{itemize} + + + \subsection{Der Stromchiffre-Algorithmus + RC4} + + \begin{itemize} + \item + RC4 ist eine Stromchiffre, die 1987 von Ron Rivest erfunden wurde. + \item + Sie war bis 1994 urheberrechtlich geschützt, als jemand sie anonym in + eine Mailingliste einstellte. + \item + RC4 wird im Output-Feedback-Modus (OFB) betrieben + + \begin{itemize} + \item + Der Verschlüsselungsalgorithmus erzeugt eine Pseudozufallsfolge + \$RC4(IV,K)\$, die nur vom Schlüssel K und einem + Initialisierungsvektor IV abhängt + \item + Der Klartext \$P\_i\$ wird dann mit der Pseudozufallssequenz + XOR-verknüpft, um den Chiffretext zu erhalten und umgekehrt + + \begin{itemize} + \item + \$C\_1 = P\_1\textbackslash oplus RC4 (IV\_1,K)\$ + \item + \$P\_1 = C\_1\textbackslash oplus RC4 (IV\_1,K)\$ + \end{itemize} + \item + Die Pseudo-Zufallsfolge wird oft auch als Keystream bezeichnet + \item + Entscheidend für die Sicherheit ist, dass der Keystream niemals + wiederverwendet wird!!! + + \begin{itemize} + \item + Wenn der Keystream wiederverwendet wird (d.h. \$IV\_1=IV\_2\$ mit + demselben \$K\$), dann kann das XOR zweier Klartexte erhalten + werden: \$C\_1\textbackslash oplus C\_2= P\_1\textbackslash oplus + RC4(IV, K)\textbackslash oplus P\_2\textbackslash oplus RC4(IV,K) + = P\_1\textbackslash oplus P\_2\$ + \end{itemize} + \end{itemize} + \item + RC4 verwendet einen Schlüssel variabler Länge bis zu 2048 Bit + + \begin{itemize} + \item + Eigentlich dient der Schlüssel als Seed für einen + Pseudo-Zufallsgenerator + \end{itemize} + \item + RC4 arbeitet mit zwei 256-Byte-Arrays: \$S{[}0,255{]}, K{[}0,255{]}\$ + + \begin{itemize} + \item + Schritt 1: Initialisierung der Arrays + + %\begin{Shaded} + % \begin{Highlighting}[] + % \ControlFlowTok{for}\NormalTok{ (i = }\DecValTok{0}\NormalTok{; i \textless{} }\DecValTok{256}\NormalTok{; i++)\{} + % \NormalTok{ S[i] = i; }\CommentTok{// Array S[] mit 0 bis 255 füllen} + % \NormalTok{\}} + % \CommentTok{// Füllen des Arrays K[] mit dem Schlüssel und IV durch Wiederholung, bis K[] gefüllt ist} + % \NormalTok{n = }\DecValTok{0}\NormalTok{;} + % \ControlFlowTok{for}\NormalTok{ (i =}\DecValTok{0}\NormalTok{; i \textless{} }\DecValTok{256}\NormalTok{; i++) \{} + % \NormalTok{ n = (n + S[i] + K[i]) MOD }\DecValTok{256}\NormalTok{; swap(S[i], S[n]); } + % \NormalTok{\}} + % \end{Highlighting} + %\end{Shaded} + \item + Schritt 2: Erzeugen des Schlüsselstroms (nach Initialisierung \$i = + 0; n = 0;\$) + + %\begin{Shaded} + % \begin{Highlighting}[] + % \NormalTok{i = (i + }\DecValTok{1}\NormalTok{) MOD }\DecValTok{256}\NormalTok{; n = (n + S[i]) MOD }\DecValTok{256}\NormalTok{;} + % \NormalTok{swap(S[i], S[n]);} + % \NormalTok{t = (S[i] + S[n]) MOD }\DecValTok{256}\NormalTok{;} + % \NormalTok{Z = S[t]; }\CommentTok{// Z enthält 8 Bit des durch eine Iteration erzeugten Schlüsselstroms} + % \end{Highlighting} + %\end{Shaded} + \item + Schritt 3: XOR-Verknüpfung des Schlüsselstroms mit dem Klartext oder + Chiffretext + \end{itemize} + \item + Sicherheit von RC4 + + \begin{itemize} + \item + Sicherheit gegen Brute-Force-Angriffe (Ausprobieren aller möglichen + Schlüssel) + + \begin{itemize} + \item + Die variable Schlüssellänge von bis zu 2048 Bit erlaubt es, sie + unpraktisch zu machen (zumindest mit den in unserem Universum + verfügbaren Ressourcen) + \item + Allerdings kann RC4 durch Verringerung der Schlüssellänge auch + beliebig unsicher gemacht werden! + \end{itemize} + \item + RSA Data Security, Inc. behauptet, RC4 sei immun gegen + differentielle und lineare Kryptoanalyse, und es seien keine kleinen + Zyklen bekannt + \end{itemize} + \item + RC4 mit 40-Bit-Schlüsseln hatte einen besonderen Exportstatus, selbst + als andere Chiffren nicht aus den USA exportiert werden durften + + \begin{itemize} + \item + Secure Socket Layer (SSL) verwendet RC4 mit 40-Bit-Schlüsseln als + Standardalgorithmus + \item + Die Schlüssellänge von 40 Bit ist nicht immun gegen + Brute-Force-Angriffe. + \end{itemize} + \item + Je nach Schlüsselplanungsmethode kann RC4 jedoch stark verwundbar + sein! {[}FMS01a, Riv01a, SIR01a{]} + \item + Es wird empfohlen, mindestens die ersten 3072 Bytes des + Schlüsselstroms zu verwerfen {[}Mir02, Kle08{]} + \item + Sollte eigentlich nicht mehr verwendet werden, auch nicht bei längeren + Schlüsseln + \end{itemize} + + + \subsection{KASUMI} + + \begin{itemize} + \item + Verwendet zur Verschlüsselung von Anrufen in GSM und UMTS, + implementiert f(8) und f(9) (auch A5/3, UEA1, UIA1 genannt) + \item + Ursprünglich standardisiert durch 3GPP im Jahr 2000 {[}ETS12{]} und + basierend auf MISTY1 von Mitsubishi + \item + Entwickelt für Hardware-Implementierung + + \begin{itemize} + \item + Schnelle Implementierung möglich + \item + \$\textless10k\$ Gatter + \end{itemize} + \item + 64-Bit-Blockgröße + \item + 128-Bit-Schlüssellänge + \item + 8 Runden Feistel-Netzwerk + \item + Sicherheitsspanne nicht sehr groß + \end{itemize} + + % \includegraphics{Assets/NetworkSecurity-kasumi-singe-iteration.png} + + \begin{itemize} + \item + Die linken 32 Bit der zu verschlüsselnden Daten werden durch zwei + nichtlineare Funktionen FO und FL verändert, die beide + Schlüsselmaterial verwenden + \item + Die Reihenfolge, in der FO und FL angewendet werden, hängt von der + Rundenzahl ab + \item + FL teilt die Daten in 16-Bit-Wörter auf, die mit Schlüsselmaterial + kombiniert, permutiert und mit den Originalwerten XOR-verknüpft werden + \item + FO ist ein 3-Runden-Feistel-Netzwerk mit einer Modifizierungsfunktion + FI, die selbst ein Feistel-ähnliches Netzwerk ist, das zwei s-Boxen + verwendet. + \item + Der Ausgang des obigen Schritts wird mit den rechten 32 Bit der Daten + XOR-verknüpft, was zu den neuen rechten 32 Bit der Daten führt + \item + Das neue linke 32-Bit der Daten ist der rechte Wert der vorherigen + Iteration + \end{itemize} + + + \subsubsection{KASUMI - + Sicherheitsdiskussion} + + \begin{itemize} + \item + Eine reduzierte Version von KASUMI (6 Runden) kann durch sogenannte + unmögliche differentielle Kryptoanalyse angegriffen werden, bei der + unmögliche Zustände der Chiffre aus Chiffretext/Klartext-Paaren + abgeleitet werden + + \begin{itemize} + \item + Erste Veröffentlichung bereits ein Jahr nach der Standardisierung + \item + Zeitkomplexität von \$2\^{}\{100\}\$ {[}Kue01{]} + \end{itemize} + \item + Für eine Vollversion von KASUMI sind verwandte Schlüsselangriffe + möglich + + \begin{itemize} + \item + Ausgewählter Klartextangriff, bei dem der Angreifer dieselben Daten + mit mehreren "verwandten" Schlüsseln verschlüsseln kann + \item + Zeitkomplexität von \$2\^{}\{76.1\}\$ {[}BDN05{]} und + \$2\^{}\{32\}\$ im besten Fall {[}DKS10{]} + \item + Allerdings sind die Bedingungen, unter denen Angreifer Zugang zu + verwandten Schlüsseln in 3G-Netzen haben, sehr selten + \item + Interessanterweise ist MISTY von diesen Angriffen nicht betroffen! + \end{itemize} + \item + ETSI hat jedoch SNOW 3G (UEA2 und UIA2) {[}ETS06{]} eingeführt, um auf + eine vollständige Verletzung von KASUMI vorbereitet zu sein + + \begin{itemize} + \item + Stromchiffre basierend auf LFSR, kann in 7.500 ASIC-Gattern + implementiert werden + \item + Aber auch anfällig für verwandte Schlüsselangriffe {[}KY11{]}. + \end{itemize} + \end{itemize} + + + \section{Asymmetrische + Kryptographie} + + Eine vorherige Beschäftigung mit der diskreten Mathematik wird dem Leser + jedoch helfen, die hier vorgestellten Konzepte zu verstehen.'' E. + Amoroso in einem anderen Zusammenhang {[}Amo94{]} + + \begin{itemize} + \item + Allgemeine Idee: + + \begin{itemize} + \item + Verwenden Sie zwei verschiedene Schlüssel \$-K\$ und \$+K\$ für die + Ver- und Entschlüsselung + \item + Bei einem zufälligen Chiffretext \$c=E(+K, m)\$ und \$+K\$ sollte es + nicht möglich sein, \$m = D(-K, c) = D(-K, E(+K, m))\$ zu berechnen. + + \begin{itemize} + \item + Dies impliziert, dass die Berechnung von \$-K\$ bei \$+K\$ nicht + möglich sein sollte. + \end{itemize} + \item + Der Schlüssel \$-K\$ ist nur einer Entität A bekannt und wird A's + privater Schlüssel \$-K\_A\$ genannt + \item + Der Schlüssel \$+K\$ kann öffentlich bekannt gegeben werden und wird + A's öffentlicher Schlüssel \$+K\_A\$ genannt + \end{itemize} + \item + Anwendungen: + + \begin{itemize} + \item + Verschlüsselung: + + \begin{itemize} + \item + Wenn B eine Nachricht mit dem öffentlichen Schlüssel \$+K\_A\$ von + A verschlüsselt, kann er sicher sein, dass nur A sie mit \$-K\_A\$ + entschlüsseln kann. + \end{itemize} + \item + Signieren: + + \begin{itemize} + \item + Wenn A eine Nachricht mit seinem eigenen privaten Schlüssel + \$-K\_A\$ verschlüsselt, kann jeder diese Signatur verifizieren, + indem er sie mit A's öffentlichem Schlüssel \$+K\_A\$ + entschlüsselt + \end{itemize} + \item + Achtung! Entscheidend ist, dass jeder nachprüfen kann, dass er + wirklich den öffentlichen Schlüssel von A kennt und nicht den + Schlüssel eines Gegners! + \end{itemize} + \item + Entwurf von asymmetrischen Kryptosystemen: + + \begin{itemize} + \item + Schwierigkeit: Finde einen Algorithmus und eine Methode, zwei + Schlüssel \$-K\$, \$+K\$ so zu konstruieren, dass es nicht möglich + ist, \$E(+K, m)\$ mit der Kenntnis von \$+K\$ zu entschlüsseln + \item + Beschränkungen: + + \begin{itemize} + \item + Die Schlüssellänge sollte ,,überschaubar'' sein + \item + Verschlüsselte Nachrichten sollten nicht beliebig länger sein als + unverschlüsselte Nachrichten (wir würden einen kleinen konstanten + Faktor tolerieren) + \item + Ver- und Entschlüsselung sollten nicht zu viele Ressourcen + verbrauchen (Zeit, Speicher) + \end{itemize} + \item + Grundlegende Idee: Man nehme ein Problem aus dem Bereich der + Mathematik/Informatik, das schwer zu lösen ist, wenn man nur \$+K\$ + kennt, aber leicht zu lösen, wenn man \$-K\$ kennt + + \begin{itemize} + \item + Knapsack-Probleme: Grundlage der ersten funktionierenden + Algorithmen, die sich leider fast alle als unsicher erwiesen haben + \item + Faktorisierungsproblem: Grundlage des RSA-Algorithmus + \item + Diskreter-Logarithmus-Problem: Grundlage von Diffie-Hellman und + ElGamal + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Einige mathematische + Hintergründe} + + \begin{itemize} + \item + Sei \$\textbackslash mathbb\{Z\}\$ die Menge der ganzen Zahlen, und + \$a,b,n\textbackslash in\textbackslash mathbb\{Z\}\$ + \item + Wir sagen, \$a\$ teilt \$b(a\textbar b)\$, wenn es eine ganze Zahl + \$k\textbackslash in\textbackslash mathbb\{Z\}\$ gibt, so dass + \$a\textbackslash times k=b\$ + \item + \$a\$ ist prim, wenn es positiv ist und die einzigen Teiler von a + \$1\$ und \$a\$ sind. + \item + \$r\$ ist der Rest von a geteilt durch \$n\$, wenn + \$r=a-\textbackslash lfloor a / n + \textbackslash rfloor\textbackslash times n\$, wobei + \$\textbackslash lfloor x\textbackslash rfloor\$ die größte ganze Zahl + kleiner oder gleich \$x\$ ist. + + \begin{itemize} + \item + Beispiel: 4 ist der Rest von 11 geteilt durch 7 als + \$4=11-\textbackslash lfloor + 11/7\textbackslash rfloor\textbackslash times 7\$ + \item + Wir können dies auch anders schreiben: \$a=q\textbackslash times n + + r\$ mit \$q=\textbackslash lfloor a/n\textbackslash rfloor\$ + \end{itemize} + \item + Für den Rest \$r\$ der Division von a durch n schreiben wir + \$a\textbackslash{} MOD\textbackslash{} n\$ + \item + Wir sagen, b ist kongruent \$a\textbackslash{} mod\textbackslash{} + n\$, wenn es bei der Division durch n den gleichen Rest wie a hat. + Also teilt n \$(a-b)\$, und wir schreiben \$b\textbackslash equiv + a\textbackslash{} mod\textbackslash{} n\$ + + \begin{itemize} + \item + Beispiele: \$4\textbackslash equiv 11\textbackslash{} + mod\textbackslash{} 7\$, \$25\textbackslash equiv 11\textbackslash{} + mod\textbackslash{} 7\$, \$11\textbackslash equiv 25\textbackslash{} + mod\textbackslash{} 7\$, \$11\textbackslash equiv 4\textbackslash{} + mod\textbackslash{} 7\$, \$-10\textbackslash equiv 4\textbackslash{} + mod\textbackslash{} 7\$ + \end{itemize} + \item + Da der Rest r der Division durch n immer kleiner als n ist, stellt man + manchmal die Menge \$\{x\textbackslash{} MOD\textbackslash{} n + \textbar{} x\textbackslash in\textbackslash mathbb\{Z\}\}\$ durch + Elemente der Menge \$\textbackslash mathbb\{Z\}\_n=\{0, 1, ..., + n-1\}\$ dar + \end{itemize} + + %\begin{longtable}[]{@{}ll@{}} + % \toprule + % Eigenschaft & Ausdruck\tabularnewline + % \midrule + % \endhead + % Kommutativgesetze & \$(a + b)\textbackslash{} MOD\textbackslash{} n = (b + % + a)\textbackslash{} MOD\textbackslash{} n\$\tabularnewline + % & \$(a \textbackslash times b)\textbackslash{} MOD\textbackslash{} n = + % (b \textbackslash times a)\textbackslash{} MOD\textbackslash{} + % n\$\tabularnewline + % Assoziativgesetze & \${[}(a + b) + c{]}\textbackslash{} + % MOD\textbackslash{} n = {[}a + (b + c){]}\textbackslash{} + % MOD\textbackslash{} n\$\tabularnewline + % & \${[}(a \textbackslash times b) \textbackslash times + % c{]}\textbackslash{} MOD\textbackslash{} n = {[}a \textbackslash times + % (b \textbackslash times c){]}\textbackslash{} MOD\textbackslash{} + % n\$\tabularnewline + % Distributivgesetz & \${[}a \textbackslash times (b + + % c){]}\textbackslash{} MOD\textbackslash{} n = {[}(a \textbackslash times + % b) + (a \textbackslash times c){]}\textbackslash{} MOD\textbackslash{} + % n\$\tabularnewline + % Identitäten & \$(0 + a)\textbackslash{} MOD\textbackslash{} n = + % a\textbackslash{} MOD\textbackslash{} n\$\tabularnewline + % & \$(1 \textbackslash times a)\textbackslash{} MOD\textbackslash{} n = + % a\textbackslash{} MOD\textbackslash{} n\$\tabularnewline + % Inverse & \$\textbackslash forall a \textbackslash in + % \textbackslash mathbb\{Z\}n: \textbackslash exists (-a) + % \textbackslash in \textbackslash mathbb\{Z\}n : a + (-a) + % \textbackslash equiv 0\textbackslash{} mod\textbackslash{} + % n\$\tabularnewline + % & p is prime \$\textbackslash Rightarrow \textbackslash forall a + % \textbackslash in \textbackslash mathbb\{Z\}p: \textbackslash exists + % (a-1) \textbackslash in \textbackslash mathbb\{Z\}p: a + % \textbackslash times (a-1) \textbackslash equiv 1\textbackslash{} + % mod\textbackslash{} p\$\tabularnewline + % \bottomrule + %\end{longtable} + + Größter gemeinsamer Teiler + + \begin{itemize} + \item + \$c = gcd(a, b) :\textbackslash Leftrightarrow ( c \textbar{} a) + \textbackslash wedge ( c \textbar{} b) \textbackslash wedge + {[}\textbackslash forall d: ( d \textbar{} a ) \textbackslash wedge ( + d \textbar{} b) \textbackslash Rightarrow ( d \textbar{} c ){]}\$ und + \$gcd(a, 0 ) : = \textbar{} a \textbar\$ + \item + Der gcd-Rekursionssatz : + + \begin{itemize} + \item + \$\textbackslash forall a, b \textbackslash in + \textbackslash mathbb\{Z\}\^{}+: gcd(a, b) = gcd(b, + a\textbackslash{} MOD\textbackslash{} b)\$ + \item + Beweis: + + \begin{itemize} + \item + Da \$gcd(a, b)\$ sowohl a als auch b teilt, teilt es auch jede + Linearkombination von ihnen, insbesondere \$(a- + \textbackslash lfloor a / b \textbackslash rfloor + \textbackslash times b) = a\textbackslash{} MOD\textbackslash{} + b\$, also \$gcd(a, b) \textbar{} gcd(b, a\textbackslash{} + MOD\textbackslash{} b)\$ + \item + Da \$gcd(b, a\textbackslash{} MOD\textbackslash{} b)\$ sowohl b + als auch \$a\textbackslash{} MOD\textbackslash{} b\$ teilt, teilt + es auch jede Linearkombination von beiden, insbesondere + \$\textbackslash lfloor a / b \textbackslash rfloor + \textbackslash times b + (a\textbackslash{} MOD\textbackslash{} b) + = a\$, also \$gcd(b, a\textbackslash{} MOD\textbackslash{} b) + \textbar{} gcd(a, b)\$ + \end{itemize} + \end{itemize} + \item + Euklidischer Algorithmus: + + \begin{itemize} + \item + Der euklidische Algorithmus berechnet aus a, b \$gcd(a, b)\$ + \end{itemize} + + %\begin{Shaded} + % \begin{Highlighting}[] + % \DataTypeTok{int}\NormalTok{ Euclid(}\DataTypeTok{int}\NormalTok{ a, b)\{} + % \ControlFlowTok{if}\NormalTok{ (b = }\DecValTok{0}\NormalTok{) \{ }\ControlFlowTok{return}\NormalTok{(a); \}} + % \NormalTok{ \{}\ControlFlowTok{return}\NormalTok{(Euclid(b, a\textbackslash{} MOD\textbackslash{} b);\} } + % \NormalTok{\}} + % \end{Highlighting} + %\end{Shaded} + \item + Erweiterter euklidischer Algorithmus: + + \begin{itemize} + \item + Der Algorithmus ExtendedEuclid berechnet für a, b d, m, n so, dass: + \$d = gcd(a, b) = m \textbackslash times a + n \textbackslash times + b\$ + \end{itemize} + + %\begin{Shaded} + % \begin{Highlighting}[] + % \KeywordTok{struct}\NormalTok{\{}\DataTypeTok{int}\NormalTok{ d, m, n\} ExtendedEuclid(}\DataTypeTok{int}\NormalTok{ a, b)} + %% \NormalTok{\{ }\DataTypeTok{int}\NormalTok{ d, d}\CharTok{\textquotesingle{},}\ErrorTok{ m, m}\CharTok{\textquotesingle{}}\NormalTok{, n, n}\CharTok{\textquotesingle{};} + % \ControlFlowTok{if}\NormalTok{ (b = }\DecValTok{0}\NormalTok{) \{}\ControlFlowTok{return}\NormalTok{(a, }\DecValTok{1}\NormalTok{, }\DecValTok{0}\NormalTok{); \}} + % \NormalTok{ (d}\CharTok{\textquotesingle{},}\ErrorTok{ m}\CharTok{\textquotesingle{}}\NormalTok{, n}\CharTok{\textquotesingle{})}\ErrorTok{ = ExtendedEuclid(b, a MOD b);} + % \NormalTok{ (d, m, n) = (d}\CharTok{\textquotesingle{},}\ErrorTok{ n}\CharTok{\textquotesingle{}}\NormalTok{, m}\CharTok{\textquotesingle{} }\ErrorTok{{-} \textbackslash{}lfloor a / b \textbackslash{}rfloor \textbackslash{}times n}\CharTok{\textquotesingle{}}\NormalTok{);} + % \ControlFlowTok{return}\NormalTok{(d, m, n); \}} + % \end{Highlighting} + %\end{Shaded} + + \begin{itemize} + \item + Beweis: (durch Induktion) + + \begin{itemize} + \item + Grundfall \$(a,0): gcd(a, 0) = a = 1 \textbackslash times a + 0 + \textbackslash times 0\$ + \item + Induktion von \$(b, a\textbackslash{} MOD\textbackslash{} b)\$ auf + \$(a, b)\$: + + \begin{itemize} + \item + ExtendedEuclid berechnet \$d', m', n'\$ korrekt + (Induktionshypothese) + \item + \$d=d'=m'\textbackslash times b+n'\textbackslash times + (a\textbackslash{} MOD\textbackslash{} b)=m'\textbackslash times + b+n'\textbackslash times (a-\textbackslash lfloor + a/b\textbackslash rfloor\textbackslash times + b)=n'\textbackslash times a+(m'-\textbackslash lfloor + a/b\textbackslash rfloor\textbackslash times + n')\textbackslash times b\$ + \end{itemize} + \end{itemize} + \item + Die Laufzeit von \$Euclid(a, b)\$ und \$ExtendedEuclid(a, b)\$ ist + von \$O(log\textbackslash{} b)\$ + + \begin{itemize} + \item + Beweis: siehe {[}Cor90a{]}, Abschnitt 33. + \end{itemize} + \item + Lemma 1: Sei \$a,b\textbackslash in\textbackslash mathbb\{N\}\$ und + \$d=gcd(a,b)\$. Dann gibt es + \$m,n\textbackslash in\textbackslash mathbb\{N\}\$ so, dass: + \$d=m\textbackslash times a+n \textbackslash times b\$ + \end{itemize} + \item + Theorem 1 (Euklid): Wenn eine Primzahl das Produkt zweier ganzer + Zahlen teilt, dann teilt sie mindestens eine der ganzen Zahlen: + \$p\textbar(a\textbackslash times b)\textbackslash Rightarrow + (p\textbar a)\textbackslash times(p\textbar b)\$ + + \begin{itemize} + \item + Der Beweis: Es sei \$p\textbar(a\textbackslash times b)\$ + + \begin{itemize} + \item + Wenn \$p\textbar a\$ dann sind wir fertig. + \item + Wenn nicht, dann \$gcd(p,a) = 1 + \textbackslash Rightarrow\textbackslash exists m, + n\textbackslash in\textbackslash mathbb\{N\}:1=m\textbackslash times + p+n\textbackslash times a \textbackslash Leftrightarrow + b=m\textbackslash times p \textbackslash times b + n + \textbackslash times a \textbackslash times b\$ + \item + Da \$p\textbar(a\textbackslash times b)\$, teilt p beide Summanden + der Gleichung und somit auch die Summe, die b ist + \end{itemize} + \end{itemize} + \item + Theorem 2 (Fundamentalsatz der Arithmetik): Die Faktorisierung in + Primzahlen ist bis zur Ordnung eindeutig. + + \begin{itemize} + \item + Der Beweis: + + \begin{itemize} + \item + Wir werden zeigen, dass jede ganze Zahl mit einer nicht + eindeutigen Faktorisierung einen eigenen Teiler mit einer nicht + eindeutigen Faktorisierung hat, was zu einem klaren Widerspruch + führt, wenn wir schließlich auf eine Primzahl reduziert haben. + \item + Nehmen wir an, dass n eine ganze Zahl mit einer nicht eindeutigen + Faktorisierung ist: \$n=p\_1\textbackslash times + p\_2\textbackslash times ...\textbackslash times p\_r=q\_1 + \textbackslash times q\_2\textbackslash times ... + \textbackslash times q\_s\$. Die Primzahlen sind nicht + notwendigerweise verschieden, aber die zweite Faktorisierung ist + nicht einfach eine Umordnung der ersten. Da \$p\_1\$ n dividiert, + dividiert es auch das Produkt \$q\_1\textbackslash times + q\_2\textbackslash times ... \textbackslash times q\_s\$. Durch + wiederholte Anwendung von Satz 1 zeigen wir, dass es mindestens + ein \$q\_i\$ gibt, das durch \$p\_1\$ teilbar ist. Gegebenenfalls + ordnen wir die \$q\_i\$'s so, dass es \$q\_1\$ ist. Da sowohl + \$p\_1\$ als auch \$q\_1\$ Primzahlen sind, müssen sie gleich + sein. Wir können also durch \$p\_1\$ dividieren und haben, dass + \$n/p\_1\$ eine nicht-eindeutige Faktorisierung hat. + \end{itemize} + \item + Wir verwenden Theorem 2, um die folgende Korollarie 1 zu beweisen + + \begin{itemize} + \item + Wenn \$gcd(c,m)=1\$ und \$(a\textbackslash times + c)\textbackslash equiv(b\textbackslash times c)mod\textbackslash{} + m\$, dann \$a\textbackslash equiv b\textbackslash{} + mod\textbackslash{} m\$ + \item + Der Beweis: Da \$(a\textbackslash times + c)\textbackslash equiv(b\textbackslash times c)mod\textbackslash{} + m\textbackslash Rightarrow\textbackslash exists + n\textbackslash in\textbackslash mathbb\{N\}:(a\textbackslash times + c)-(b\textbackslash times c)=n\textbackslash times m\$ + \item + \$\textbackslash Leftrightarrow ( a - b ) \textbackslash times c = + n \textbackslash times m\$ + \item + \$\textbackslash Leftrightarrow p\_1\textbackslash times + ...\textbackslash times p\_i\textbackslash times + q\_1\textbackslash times ...\textbackslash times + q\_j=r\_1\textbackslash times ...\textbackslash times + r\_k\textbackslash times s\_1\textbackslash times + ...\textbackslash times s\_l\$ + \item + Man beachte, dass die \$p\$'s, \$q\$'s, \$r\$'s und \$s\$'s + Primzahlen sind und nicht verschieden sein müssen, aber da + \$gcd(c,m)=1\$, gibt es keine Indizes g, h, so dass \$q\_g = + s\_h\$. + \item + Wir können also die Gleichung fortlaufend durch alle q's teilen, + ohne jemals ein \$s\$ zu ,,eliminieren'' und erhalten schließlich + etwas wie \$\textbackslash Leftrightarrow p\_1\textbackslash times + ...\textbackslash times p\_i=r\_1\textbackslash times + ...\textbackslash times r\_o\textbackslash times + s\_1\textbackslash times ...\textbackslash times s\_l\$ (beachten + Sie, dass es weniger r's geben wird) + \item + \$\textbackslash Leftrightarrow(a-b)=r\_1\textbackslash times + ...\textbackslash times r\_o\textbackslash times + m\textbackslash Rightarrow a \textbackslash equiv + b\textbackslash{} mod\textbackslash{} m\$ + \end{itemize} + \item + Bezeichne \$\textbackslash phi(n)\$ die Anzahl der positiven ganzen + Zahlen, die kleiner als n und relativ zu n prim sind + + \begin{itemize} + \item + Beispiele: \$\textbackslash phi(4) = 2\$, + \textbackslash phi(6)=2\$, \$\textbackslash phi(7)=6\$, + \$\textbackslash phi(15)=8\$ + \item + Wenn p eine Primzahl ist + \$\textbackslash Rightarrow\textbackslash phi(p)=p-1\$ + \end{itemize} + \end{itemize} + \item + Theorem 3 (Euler): Seien n und b positive und relativ primäre ganze + Zahlen, d.h. \$gcd(n, b) = 1 \textbackslash Rightarrow b + \textbackslash phi(n) \textbackslash equiv 1\textbackslash{} + mod\textbackslash{} n\$ + + \begin{itemize} + \item + Beweis: + + \begin{itemize} + \item + Sei \$t=\textbackslash phi(n)\$ und \$a\_1,...a\_t\$ seien die + positiven ganzen Zahlen kleiner als \$n\$, die relativ zu \$n\$ + prim sind. Definieren Sie \$r\_1,...,r\_t\$ als die Residuen von + \$b\textbackslash times a\_1\textbackslash{} mod\textbackslash{} n + , ..., b\textbackslash times a\_t\textbackslash{} + mod\textbackslash{} n\$, d.h.: \$b\textbackslash times a\_i + \textbackslash equiv r\_i\textbackslash{} mod\textbackslash{} n\$. + \item + Beachten Sie, dass \$i\textbackslash not= j + \textbackslash Rightarrow r\_i\textbackslash not= r\_j\$. Wäre + dies nicht der Fall, hätten wir \$b\textbackslash times + a\_i\textbackslash equiv b\textbackslash times + a\_j\textbackslash{} mod\textbackslash{} n\$ und da + \$gcd(b,n)=1\$, würde Korollar 1 \$a\_i\textbackslash equiv + a\_j\textbackslash{} mod\textbackslash{} n\$ implizieren, was + nicht sein kann, da \$a\_i\$ und \$a\_j\$ per Definition + verschiedene ganze Zahlen zwischen 0 und n sind + \item + Wir wissen auch, dass jedes \$r\_i\$ relativ prim zu n ist, denn + jeder gemeinsame Teiler k von \$r\_i\$ und \$n\$ , d.h. + \$n=k\textbackslash times m\$ und \$r\_i=p\_i\textbackslash times + k\$, müsste auch \$a\_i\$ teilen, + \item + da \$b\textbackslash times a\_i\$gleich (p\_i\textbackslash times + k)\textbackslash{} mod\textbackslash{} (k\textbackslash times + m)\textbackslash Rightarrow\textbackslash exists + s\textbackslash in\textbackslash mathbb\{N\}:(b\textbackslash times + a\_i)-(p\_i\textbackslash times k)=s\textbackslash times + k\textbackslash times m \textbackslash Leftrightarrow + (b\textbackslash times a\_i)=s\textbackslash times + k\textbackslash times m+(p\_i\textbackslash times k)\$ + \item + Da k jeden der Summanden auf der rechten Seite dividiert und k + nicht durch b dividiert (n und b sind relativ prim), müsste es + auch \$a\_i\$ dividieren, das relativ prim zu n sein soll + \item + Somit ist \$r\_1, ...,r\_t\$ eine Menge von + \$\textbackslash phi(n)\$ verschiedenen ganzen Zahlen, die relativ + prim zu \$n\$ sind. Das bedeutet, dass sie genau dasselbe sind wie + \$a\_1,...a\_t\$, nur dass sie in einer anderen Reihenfolge + stehen. Insbesondere wissen wir, dass \$r\_1\textbackslash times + ...\textbackslash times r\_t=a\_1\textbackslash times + ...\textbackslash times a\_t\$ + \item + Wir verwenden nun die Kongruenz \$r\_1\textbackslash times + ...\textbackslash times r\_t\textbackslash equiv + b\textbackslash times a\_1\textbackslash times + ...\textbackslash times b\textbackslash times a\_t\textbackslash{} + mod\textbackslash{} n\$ \$\textbackslash Leftrightarrow + r\_1\textbackslash times ...\textbackslash times + r\_t\textbackslash equiv b\_t\textbackslash times + a\_1\textbackslash times ...\textbackslash times + a\_t\textbackslash{} mod\textbackslash{} n\$ + \$\textbackslash Leftrightarrow r\_1\textbackslash times + ...\textbackslash times r\_t\textbackslash equiv + b\_\textbackslash times r\_1\textbackslash times + ...\textbackslash times r\_t\textbackslash{} mod\textbackslash{} + n\$ + \item + Da alle \$r\_i\$ relativ prim zu \$n\$ sind, können wir Korollar 1 + anwenden und durch ihr Produkt dividieren: \$1\textbackslash equiv + b\_t\textbackslash{} mod\textbackslash{} n + \textbackslash Leftrightarrow 1\textbackslash equiv + b\textbackslash phi(n)\textbackslash{} mod n\$ + \end{itemize} + \end{itemize} + \item + Satz 4 (Chinese Remainder Theorem): + + \begin{itemize} + \item + Seien \$m\_1,...,m\_r\$ positive ganze Zahlen, die paarweise relativ + prim sind, + \item + d.h. \$ganz i\textbackslash not= j:gcd(m\_i, m\_j) = 1\$. Seien + \$a\_1,...,a\_r\$ beliebige ganze Zahlen. + \item + Dann gibt es eine ganze Zahl a derart, dass: + + \begin{itemize} + \item + \$a\textbackslash equiv a\_1\textbackslash{} mod\textbackslash{} + m\_1\$ + \item + \$a\textbackslash equiv a\_2\textbackslash{} mod\textbackslash{} + m\_2\$ + \item + ... + \item + \$a\textbackslash equiv a\_r\textbackslash{} mod\textbackslash{} + m\_r\$ + \end{itemize} + \item + Außerdem ist a eindeutig modulo \$M := m\_1\textbackslash times + ...\textbackslash times m\_r\$ + \item + Beweis: + + \begin{itemize} + \item + Für alle \$i\textbackslash in\{1,...,r\}\$ definieren wir + \$M\_i:=(M/m\_i)\textbackslash phi(m\_i)\$ + \item + Da \$M\_i\$ per Definition relativ prim zu \$m\_i\$ ist, können + wir Theorem 3 anwenden und wissen, dass \$M\_i\textbackslash equiv + 1\textbackslash{} mod\textbackslash{} m\_i\$ + \item + Da \$M\_i\$ durch \$m\_j\$ für jedes \$j\textbackslash not= i\$ + teilbar ist, haben wir \$\textbackslash forall + j\textbackslash not= i:M\_i\textbackslash equiv 0\textbackslash{} + mod\textbackslash{} m\_j\$ + \item + Wir können nun die Lösung konstruieren, indem wir definieren: + \$a:= a\_1\textbackslash times M\_1+a\_2\textbackslash times + M\_2+...+a\_r\textbackslash times M\_r\$ + \item + Die beiden oben angeführten Argumente bezüglich der Kongruenzen + der \$M\_i\$ implizieren, dass a tatsächlich alle Kongruenzen + erfüllt. + \item + Um zu sehen, dass a eindeutig modulo \$M\$ ist, sei b eine + beliebige andere ganze Zahl, die die r Kongruenzen erfüllt. Da + \$a\textbackslash equiv c\textbackslash{} mod\textbackslash{} n\$ + und \$b\textbackslash equiv c\textbackslash{} mod\textbackslash{} + n \textbackslash Rightarrow a \textbackslash equiv + b\textbackslash{} mod\textbackslash{} n\$ haben wir + \$\textbackslash forall + i\textbackslash in\{1,...,r\}:a\textbackslash equiv + b\textbackslash{} mod\textbackslash{} + m\_i\textbackslash Rightarrow\textbackslash forall + i\textbackslash in\{1,. ...,r\}:m\_i\textbar(a-b) + \textbackslash Rightarrow M\textbar(a-b)\$, da die \$m\_i\$ + paarweise relativ prim sind \$\textbackslash Leftrightarrow + a\textbackslash equiv b\textbackslash{} mod\textbackslash{} M\$ + \end{itemize} + \end{itemize} + \item + Lemma 2: + + \begin{itemize} + \item + Wenn \$gcd(m,n)=1\$, dann ist + \$\textbackslash phi(m\textbackslash times + n)=\textbackslash phi(m)\textbackslash times \textbackslash phi(n)\$ + \item + Der Beweis: + + \begin{itemize} + \item + Sei a eine positive ganze Zahl, die kleiner als und relativ prim + zu \$m\textbackslash times n\$ ist. Mit anderen Worten: a ist eine + der ganzen Zahlen, die von + \$\textbackslash phi(m\textbackslash times n)\$ gezählt werden. + \item + Betrachten Sie die Entsprechung + \$a\textbackslash rightarrow(a\textbackslash{} MOD\textbackslash{} + m, a\textbackslash{} MOD\textbackslash{} n)\$. Die ganze Zahl a + ist relativ prim zu m und relativ prim zu n (andernfalls würde sie + \$m \textbackslash times n\$ teilen). Also ist + \$(a\textbackslash{} MOD\textbackslash{} m)\$ relativ prim zu m + und \$(a\textbackslash{} MOD\textbackslash{} n)\$ ist relativ prim + zu n, da: \$a=\textbackslash lfloor + a/m\textbackslash rfloor\textbackslash times m + + (a\textbackslash{} MOD\textbackslash{} m)\$, wenn es also einen + gemeinsamen Teiler von \$m\$ und \$(a\textbackslash{} + MOD\textbackslash{} m)\$ gäbe, würde dieser Teiler auch a teilen. + Somit entspricht jede Zahl a, die durch + \$\textbackslash phi(m\textbackslash times n )\$ gezählt wird, + einem Paar von zwei ganzen Zahlen \$(a\textbackslash{} + MOD\textbackslash{} m,a\textbackslash{} MOD\textbackslash{} n)\$, + wobei die erste durch \$\textbackslash phi(m)\$ und die zweite + durch \$\textbackslash phi(n)\$ gezählt wird. + \item + Aufgrund des zweiten Teils von Satz 4 ist die Einzigartigkeit der + Lösung \$a\textbackslash{} mod\textbackslash{} + (m\textbackslash times n)\$ der simultanen Kongruenzen: \$a + \textbackslash equiv(a\textbackslash{} mod\textbackslash{} + m)\textbackslash{} mod\textbackslash{} m\$ \$a + \textbackslash equiv(a\textbackslash{} MOD\textbackslash{} + n)\textbackslash{} mod\textbackslash{} n\$ können wir ableiten, + dass verschiedene ganze Zahlen, die durch + \$\textbackslash phi(m\textbackslash times n)\$ gezählt werden, + verschiedenen Paaren entsprechen: + + \begin{itemize} + \item + Um dies zu sehen, nehmen wir an, dass \$a\textbackslash not=b\$, + gezählt durch \$\textbackslash phi(m\textbackslash times n)\$, + demselben Paar \$(a\textbackslash{} MOD\textbackslash{} m, + a\textbackslash{} MOD\textbackslash{} n)\$ entspricht. Dies + führt zu einem Widerspruch, da b auch die Kongruenzen erfüllen + würde: \$b\textbackslash equiv (a\textbackslash{} + MOD\textbackslash{} m)\textbackslash{} mod\textbackslash{} m\$ + \$b\textbackslash equiv (a\textbackslash{} MOD\textbackslash{} + n)\textbackslash{} mod\textbackslash{} n\$ aber die Lösung + dieser Kongruenzen ist eindeutig modulo \$(m + \textbackslash times n)\$ + \item + Daher ist \$\textbackslash phi(m \textbackslash times n)\$ + höchstens die Anzahl solcher Paare: \$\textbackslash phi(m + \textbackslash times n)\textbackslash leq + \textbackslash phi(m)\textbackslash times + \textbackslash phi(n)\$ + \end{itemize} + \item + Betrachten wir nun ein Paar von ganzen Zahlen \$(b,c)\$, von denen + eine mit \$\textbackslash phi(m)\$ und die andere mit + \$\textbackslash phi(n)\$ gezählt wird: Mit Hilfe des ersten Teils + von Satz 4 können wir eine einzige positive ganze Zahl a + konstruieren, die kleiner als und relativ prim zu + \$m\textbackslash times n\$ ist: \$a\textbackslash equiv + b\textbackslash{} mod\textbackslash{} m\$ und + \$a\textbackslash equiv c\textbackslash{} mod\textbackslash{} n\$. + Die Anzahl solcher Paare ist also höchstens \$\textbackslash phi(m + \textbackslash times n):\textbackslash phi(m \textbackslash times + n)\textbackslash leq\textbackslash phi(m)\textbackslash times\textbackslash phi(n)\$ + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Der RSA Public Key + Algorithmus} + + \begin{itemize} + \item + Der RSA-Algorithmus wurde 1977 von R. Rivest, A. Shamir und L. Adleman + {[}RSA78{]} erfunden und basiert auf Theorem 3. + \item + Seien \$p, q\$ verschiedene große Primzahlen und + \$n=p\textbackslash times q\$. Nehmen wir an, wir haben auch zwei + ganze Zahlen e und d, so dass: \$d\textbackslash times e + \textbackslash equiv 1\textbackslash{} mod\textbackslash{} + \textbackslash phi(n)\$ + \item + M sei eine ganze Zahl, die die zu verschlüsselnde Nachricht darstellt, + wobei M positiv, kleiner als und relativ prim zu n ist. + + \begin{itemize} + \item + Beispiel: Verschlüsseln mit = 99, A = 10, B = 11, ..., Z = 35. Somit + würde ,,HELLO'' als 1714212124 kodiert werden. Falls erforderlich, + ist M in Blöcke kleinerer Nachrichten aufzuteilen: 17142 12124 + \end{itemize} + \item + Zum Verschlüsseln berechnen Sie: \$E = M\^{}e\textbackslash{} + MOD\textbackslash{} n\$ + + \begin{itemize} + \item + Dies kann mit dem Quadrat- und Multiplikationsalgorithmus effizient + durchgeführt werden + \end{itemize} + \item + Zum Entschlüsseln berechnet man: \$M'=E\^{}d\textbackslash{} + MOD\textbackslash{} n\$ + + \begin{itemize} + \item + Da \$d\textbackslash times e\textbackslash equiv 1\textbackslash{} + mod\textbackslash{} + \textbackslash phi(n)\textbackslash Rightarrow\textbackslash exists + k\textbackslash in\textbackslash mathbb\{Z\}:(d\textbackslash times + e)-1=k\textbackslash times\textbackslash phi(n)\textbackslash Leftrightarrow(d\textbackslash times + e)=k\textbackslash times\textbackslash phi(n)+1\$ + \item + haben wir: \$M'\textbackslash equiv E\^{}d\textbackslash equiv + M\^{}\{e\textbackslash times d\}\textbackslash equiv + M\^{}\{k\textbackslash times\textbackslash phi(n)+1\}\textbackslash equiv + 1\^{}k\textbackslash times M\textbackslash equiv M\textbackslash{} + mod\textbackslash{} n\$ + \end{itemize} + \item + Da \$(d\textbackslash times e)=(e\textbackslash times d)\$ + funktioniert die Operation auch in umgekehrter Richtung, d.h. man kann + mit d verschlüsseln und mit e entschlüsseln + + \begin{itemize} + \item + Diese Eigenschaft erlaubt es, die gleichen Schlüssel d und e zu + verwenden: + \item + den Empfang von Nachrichten, die mit dem eigenen öffentlichen + Schlüssel verschlüsselt wurden + \item + Senden von Nachrichten, die mit dem eigenen privaten Schlüssel + signiert wurden + \end{itemize} + \item + So richten Sie ein Schlüsselpaar für RSA ein: + + \begin{itemize} + \item + Wählen Sie zufällig zwei Primzahlen \$p\$ und \$q\$ (mit jeweils 100 + bis 200 Ziffern) + \item + Berechne \$n=p\textbackslash times + q,\textbackslash phi(n)=(p-1)\textbackslash times (q-1)\$ (Lemma 2) + \item + Wähle zufällig \$e\$, so dass \$gcd(e,\textbackslash phi(n))=1\$ + \item + Berechne mit dem erweiterten euklidischen Algorithmus d und c, so + dass: \$e\textbackslash times + d+\textbackslash phi(n)\textbackslash times c = 1\$, wobei zu + beachten ist, dass dies impliziert, dass \$e\textbackslash times + d\textbackslash equiv 1\textbackslash{} mod\textbackslash{} + \textbackslash phi(n)\$ + \item + Der öffentliche Schlüssel ist das Paar \$(e, n)\$ + \item + Der private Schlüssel ist das Paar \$(d, n)\$ + \end{itemize} + \item + Die Sicherheit des Verfahrens liegt in der Schwierigkeit der + Faktorisierung von \$n=p\textbackslash times q\$, da es einfach ist, + \$\textbackslash phi(n)\$ und dann \$d\$ zu berechnen, wenn \$p\$ und + \$q\$ bekannt sind. + \item + In diesem Kurs wird nicht gelehrt, warum es schwierig ist, große n zu + faktorisieren, da dies einen tiefen Einblick in die Mathematik + erfordern würde. + + \begin{itemize} + \item + Wenn p und q bestimmte Eigenschaften erfüllen, sind die besten + bekannten Algorithmen exponentiell zur Anzahl der Ziffern von n + \item + Bitte beachten Sie, dass es bei einer unglücklichen Wahl von p und q + Algorithmen geben könnte, die effizienter faktorisieren können, und + dass Ihre RSA-Verschlüsselung dann nicht mehr sicher ist: + + \begin{itemize} + \item + Daher sollten p und q ungefähr die gleiche Bitlänge haben und + ausreichend groß sein + \item + \$(p-q)\$ sollte nicht zu klein sein + \item + Wenn man einen kleinen Verschlüsselungsexponenten, z.B. 3, wählen + will, kann es zusätzliche Einschränkungen geben, z.B. \$gcd(p-1, + 3) = 1\$ und \$gcd(q-1,3)=1\$ + \end{itemize} + \item + Die Sicherheit von RSA hängt auch davon ab, dass die erzeugten + Primzahlen wirklich zufällig sind (wie jede Methode zur + Schlüsselerzeugung bei jedem Algorithmus). + \item + Moral: Wenn Sie RSA selbst implementieren wollen, bitten Sie einen + Mathematiker oder besser einen Kryptographen, Ihren Entwurf zu + überprüfen. + \end{itemize} + \end{itemize} + + + \subsection{Einige weitere mathematische + Hintergründe} + + \begin{itemize} + \item + Definition: endliche Gruppen + + \begin{itemize} + \item + Eine Gruppe ( S , \textbackslash oplus) ist eine Menge S zusammen + mit einer binären Operation \textbackslash oplus, für die die + folgende Eigenschaften gelten: + + \begin{itemize} + \item + Geschlossenheit: Für alle a, b \textbackslash in S , haben wir a + \textbackslash oplus b \textbackslash in S + \item + Identität: Es gibt ein Element e \textbackslash in S , so dass e + \textbackslash oplus a = a \textbackslash oplus e = a für alle a + \textbackslash in S + \item + Assoziativität: Für alle a, b, c \textbackslash in S , gilt ( a + \textbackslash oplus b ) \textbackslash oplus c = a + \textbackslash oplus ( b \textbackslash oplus c ) + \item + Inversen: Für jedes a \textbackslash in S , gibt es ein einziges + Element b \textbackslash in S , so dass dass a + \textbackslash oplus b = b \textbackslash oplus a = e + \end{itemize} + \item + Erfüllt eine Gruppe ( S , \textbackslash oplus) das Kommutativgesetz + \textbackslash forall a, b \textbackslash in S : a + \textbackslash oplus b = b \textbackslash oplus a dann nennt man sie + eine abelsche Gruppe + \item + Wenn eine Gruppe ( S , \textbackslash oplus) nur eine endliche Menge + von Elementen hat, d.h. \textbar S\textbar{} \textless{} + \textbackslash infty, dann wird sie eine endliche Gruppe genannt + \end{itemize} + \item + Beispiele: + + \begin{itemize} + \item + \$(\textbackslash mathbb\{Z\}\_n , +\_n)\$ + + \begin{itemize} + \item + mit + \$\textbackslash mathbb\{Z\}\_n:=\{{[}0{]}\_n,{[}1{]}\_n,...,{[}n-1{]}\_n\}\$ + \item + wobei \${[}a{]}\_n:=\{b \textbackslash in + \textbackslash mathbb\{Z\} \textbar{} b \textbackslash equiv a mod + n\}\$ und + \item + \$+\_n\$ ist so definiert, dass + \${[}a{]}\_n+\_n{[}b{]}\_n={[}a+b{]}\_n\$ + \item + eine endliche abelsche Gruppe ist. Für den Beweis siehe die + Tabelle mit den Eigenschaften der modularen Arithmetik + \end{itemize} + \item + \$(\textbackslash mathbb\{Z\}\^{}*\_n , \textbackslash times\_n)\$ + + \begin{itemize} + \item + mit \$\textbackslash mathbb\{Z\}\^{}*\_n + :=\{{[}a{]}\_n\textbackslash in \textbackslash mathbb\{Z\}\_n + \textbar{} gcd(a,n)=1\}\$, und + \item + \$\textbackslash times\_n\$ ist so definiert, dass + \${[}a{]}\_n\textbackslash times\_n + {[}b{]}\_n={[}a\textbackslash times b{]}\_n\$ + \item + eine endliche abelsche Gruppe ist. Man beachte, dass + \$\textbackslash mathbb\{Z\}\^{}*\_n\$ nur die Elemente von + \$\textbackslash mathbb\{Z\}\_n\$ enthält, die eine multiplikative + Inverse modulo n haben. Zum Beweis siehe Eigenschaften der + modularen Arithmetik + \item + Beispiel: + \$\textbackslash mathbb\{Z\}\^{}*\emph{\{15\}=\{{[}1{]}}\{15\},{[}2{]}\emph{\{15\},{[}4{]}}\{15\},{[}7{]}\emph{\{15\},{[}8{]}}\{15\},{[}11{]}\emph{\{15\},{[}13{]}}\{15\},{[}14{]}\_\{15\}\}\$, + als \$1\textbackslash times 1\textbackslash equiv 1 mod 15\$, \$2 + \textbackslash times 8 \textbackslash equiv 1 mod 15\$, \$4 + \textbackslash times 4 \textbackslash equiv 1 mod 15\$, \$7 + \textbackslash times 13 \textbackslash equiv 1 mod 15\$, \$11 + \textbackslash times 11 \textbackslash equiv 1 mod 15\$, \$14 + \textbackslash times 14 \textbackslash equiv 1 mod 15\$ + \end{itemize} + \end{itemize} + \item + Wenn klar ist, dass es sich um \$(\textbackslash mathbb\{Z\}\_n, + +\_n)\$ oder \$(\textbackslash mathbb\{Z\}\^{}*\_n, + \textbackslash times\_n)\$ handelt, werden Äquivalenzklassen + \${[}a{]}\_n\$ oft durch ihre repräsentativen Elemente a dargestellt + und \$+\_n\$ und \$\textbackslash times\_n\$ durch \$+\$ bzw. + \$\textbackslash times\$ bezeichnet. + + \begin{itemize} + \item + Definition: endliche Felder + + \begin{itemize} + \item + Ein Feld \$(S,\textbackslash oplus, \textbackslash otimes)\$ ist + eine Menge S zusammen mit zwei Operationen + \$\textbackslash oplus\$, \$\textbackslash otimes\$, so dass + + \begin{itemize} + \item + \$(S,\textbackslash oplus)\$ und + \$(S\textbackslash backslash\{e\_\{\textbackslash oplus\}\},\textbackslash otimes)\$ + sind kommutative Gruppen, d.h. nur das Identitätselement + bezüglich der Operation \$\textbackslash oplus\$ muss kein + Inverses bezüglich der Operation \$\textbackslash otimes\$ haben + \item + Für alle \$a,b,c\textbackslash in S\$ haben wir ein + \$\textbackslash otimes(b\textbackslash oplus + c)=(a\textbackslash otimes + b)\textbackslash oplus(a\textbackslash otimes c)\$ + \end{itemize} + \end{itemize} + \item + Wenn \$\textbar S\textbar\textless\textbackslash infty\$ dann heißt + \$(S,\textbackslash oplus,\textbackslash otimes)\$ ein endliches + Feld + \end{itemize} + \item + Beispiel: \$(\textbackslash mathbb\{Z\}\_p, +\_p, + \textbackslash times\_p)\$ ist ein endliches Feld für jede Primzahl p + \item + Definition: Primitive Wurzel, Generator + + \begin{itemize} + \item + Sei \$(S,\textbackslash circ)\$ eine Gruppe, \$g\textbackslash in + S\$ und \$g\^{}a:=g\textbackslash circ + g\textbackslash circ...\textbackslash circ g\$ (a mal mit + \$a\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$) + \item + Dann heißt g eine primitive Wurzel oder ein Generator von + \$(S,\textbackslash circ):\textbackslash Leftrightarrow\{g\^{}a\textbar1\textbackslash leq + a\textbackslash leq \textbar S\textbar\}=S\$ + \item + Beispiele: + + \begin{itemize} + \item + 1 ist eine primitive Wurzel von \$(\textbackslash mathbb\{Z\}\_n, + +\_n)\$ + \item + 3 ist eine Primitivwurzel von + \$(\textbackslash mathbb\{Z\}\^{}*\_7, \textbackslash times\_7)\$ + \end{itemize} + \item + Nicht alle Gruppen haben Primitivwurzeln, und diejenigen, die sie + haben, nennt man zyklische Gruppen + \end{itemize} + \item + Theorem 5: + + \begin{itemize} + \item + \$(\textbackslash mathbb\{Z\}\^{}*\_n, \textbackslash times\_n)\$ + hat eine primitive Wurzel \$\textbackslash Leftrightarrow + n\textbackslash in\{2,4,p,2\textbackslash times p\^{}e\}\$, wobei p + eine ungerade Primzahl ist und + \$e\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$ + \end{itemize} + \item + Theorem 6: + + \begin{itemize} + \item + Wenn \$(S,\textbackslash circ)\$ eine Gruppe ist und + \$b\textbackslash in S\$, dann ist \$(S',\textbackslash circ)\$ mit + \$S'=\{b\^{}a\textbar a\textbackslash in\textbackslash mathbb\{Z\}\^{}+\}\$ + ebenfalls eine Gruppe. + \item + Da \$S'\textbackslash subseteq S, heißt (S',\textbackslash circ)\$ + eine Untergruppe von \$(S,\textbackslash circ)\$ + \item + Wenn b eine Urwurzel von \$(S,\textbackslash circ)\$ ist, dann ist + \$S'=S\$ + \end{itemize} + \item + Definition: Ordnung einer Gruppe und eines Elements + + \begin{itemize} + \item + Sei \$(S,\textbackslash circ)\$ eine Gruppe, \$e\textbackslash in + S\$ ihr Identitätselement und \$b\textbackslash in S\$ irgendein + Element von \$S\$: + + \begin{itemize} + \item + Dann heiße \$\textbar S\textbar\$ die Ordnung von + \$(S,\textbackslash circ)\$ + \item + Sei \$c\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$ das + kleinste Element, so dass \$b\^{}c=e\$ ist (falls ein solches c + existiert, falls nicht, setze \$c=\textbackslash infty\$). Dann + wird c die Ordnung von b genannt. + \end{itemize} + \end{itemize} + \item + Theorem 7 (Lagrange): + + \begin{itemize} + \item + Ist G eine endliche Gruppe und H eine Untergruppe von G , so ist + \$\textbar H\textbar\$ Teiler von \$\textbar G\textbar\$. + \item + Wenn also \$b in G\$ ist, dann ist die Ordnung von b Teiler von + \$\textbar G\textbar\$. + \end{itemize} + \item + Theorem 8: + + \begin{itemize} + \item + Ist G eine zyklische endliche Gruppe der Ordnung n und d ist Teiler + von n, dann hat G genau \$\textbackslash phi(d)\$ Elemente der + Ordnung \$d\$. Insbesondere hat G \$\textbackslash phi(n)\$-Elemente + der Ordnung n. + \end{itemize} + \item + Die Theoreme 5, 7 und 8 sind die Grundlage des folgenden Algorithmus, + der eine zyklische Gruppe \$\textbackslash mathbb\{Z\}\^{}*\_p\$ und + eine Urwurzel g davon findet: + + \begin{itemize} + \item + Man wählt eine große Primzahl q, so dass \$p=2q+1\$ eine Primzahl + ist. + + \begin{itemize} + \item + Da \$p\$ prim ist, besagt Satz 5, dass + \$\textbackslash mathbb\{Z\}\^{}*\_p\$ zyklisch ist. + \item + Die Ordnung von \$\textbackslash mathbb\{Z\}\^{}*\_p\$ ist + \$2\textbackslash times q\$ und + \$\textbackslash phi(2\textbackslash times + q)=\textbackslash phi(2)\textbackslash times + \textbackslash phi(q)=q-1\$, da \$q\$ prim ist. + \item + Die Wahrscheinlichkeit, dass eine Primitivwurzel zufällig + ausgewählt wird, beträgt also \$(q-1)/2q \textbackslash approx + 1/2\$. + \item + Um effizient zu prüfen, ob ein zufällig gewähltes g eine Urwurzel + ist, müssen wir nur prüfen, ob \$g\^{}2\textbackslash equiv 1 mod + p\$ oder \$g\^{}q\textbackslash equiv 1 mod p\$ ist. Wenn nicht, + dann muss seine Ordnung + \$\textbar\textbackslash mathbb\{Z\}\^{}\emph{\_p\textbar\$ sein, + da Satz 7 besagt, dass die Ordnung von g + \$\textbar\textbackslash mathbb\{Z\}\^{}}\_p\textbar\$ teilen muss + \end{itemize} + \end{itemize} + \item + Definition: diskreter Logarithmus + + \begin{itemize} + \item + Sei p eine Primzahl, g eine Urwurzel von + \$(\textbackslash mathbb\{Z\}\^{}\emph{\_p,\textbackslash times\_p)\$ + und c ein beliebiges Element von + \$\textbackslash mathbb\{Z\}\^{}}\_p\$. Dann gibt es z so, dass: + \$g\^{}z\textbackslash equiv c mod p\$ + \item + z wird der diskrete Logarithmus von c modulo p zur Basis g genannt + \item + Beispiel 6 ist der diskrete Logarithmus von 1 modulo 7 zur Basis 3 + als \$3\^{}6\textbackslash equiv 1 mod 7\$ + \item + Die Berechnung des diskreten Logarithmus z bei gegebenem g, c und p + ist ein rechnerisch schwieriges Problem, und die asymptotische + Laufzeit der besten bekannten Algorithmen für dieses Problem ist + exponentiell zur Bitlänge von p + \end{itemize} + \end{itemize} + + + \subsection{Diffie-Hellman-Schlüsselaustausch} + + \begin{itemize} + \item + Der Diffie-Hellman-Schlüsselaustausch wurde erstmals in der + bahnbrechenden Arbeit {[}DH76{]} veröffentlicht, in der auch die + Grundidee der asymmetrischen Kryptographie vorgestellt wurde + \item + Der DH-Austausch in seiner Grundform ermöglicht es zwei Parteien A und + B, sich über einen öffentlichen Kanal auf ein gemeinsames Geheimnis zu + einigen: + + \begin{itemize} + \item + Öffentlicher Kanal bedeutet, dass ein potentieller Angreifer E (E + steht für Eavesdropper) alle zwischen A und B ausgetauschten + Nachrichten lesen kann + \item + Es ist wichtig, dass A und B sicher sein können, dass der Angreifer + nicht in der Lage ist, Nachrichten zu verändern, da er in diesem + Fall einen Man-in-the-Middle-Angriff starten könnte + \item + Die mathematische Grundlage für den DH-Austausch ist das Problem, + diskrete Logarithmen in endlichen Feldern zu finden. + \item + Der DH-Austausch ist kein asymmetrischer + Verschlüsselungsalgorithmus, wird aber dennoch hier vorgestellt, da + er gut zum mathematischen Charakter dieser Vorlesung passt... + \end{itemize} + \item + Wenn Alice (A) und Bob (B) sich auf ein gemeinsames Geheimnis s + einigen wollen und ihr einziges Kommunikationsmittel ein öffentlicher + Kanal ist, können sie wie folgt vorgehen: + + \begin{itemize} + \item + A wählt eine Primzahl p, eine primitive Wurzel g von + \$\textbackslash mathbb\{Z\}\^{}*\_p\$ und eine Zufallszahl q: + + \begin{itemize} + \item + A und B können sich vor der Kommunikation auf die Werte p und g + einigen, oder A wählt p und g und sendet sie mit seiner ersten + Nachricht + \item + A berechnet \$v=g\^{}q\textbackslash{} MOD\textbackslash{} p\$ und + sendet an \$B:\{p,g,v\}\$ + \end{itemize} + \item + B wählt eine Zufallszahl r: + + \begin{itemize} + \item + B berechnet \$w=g\^{}r\textbackslash{} MOD\textbackslash{} p\$ und + sendet an \$A:\{p,g,w\}\$ (oder einfach \$\{w\}\$) + \end{itemize} + \item + Beide Seiten errechnen das gemeinsame Geheimnis: + + \begin{itemize} + \item + A errechnet \$s=w\^{}q\textbackslash{} MOD\textbackslash{} p\$ + \item + B errechnet \$s'=v\^{}r\textbackslash{} MOD\textbackslash{} p\$ + \item + Da \$g\^{}\{q\textbackslash times r\}\textbackslash{} + MOD\textbackslash{} p = g\^{}\{r \textbackslash times + q\}\textbackslash{} MOD\textbackslash{} p\$ ist, gilt: \$s=s'\$ + \end{itemize} + \item + Ein Angreifer Eve, der den öffentlichen Kanal abhört, kann das + Geheimnis s nur berechnen, wenn er entweder q oder r berechnen kann, + die die diskreten Logarithmen von v, w modulo p zur Basis g sind. + \end{itemize} + \item + Wenn der Angreifer Eve in der Lage ist, Nachrichten auf dem + öffentlichen Kanal zu verändern, kann er einen + Man-in-the-Middle-Angriff starten: + + \begin{itemize} + \item + Eve generiert zwei Zufallszahlen \$q'\$ und \$r'\$: Eve berechnet + \$v'=g\^{}\{q'\}\textbackslash{} MOD\textbackslash{} p\$ und + \$w'=g\^{}\{r'\}\textbackslash{} MOD\textbackslash{} p\$ + \item + Wenn A \$\{p,g,v\}\$ sendet, fängt sie die Nachricht ab und sendet + an \$B:\{p,g,v'\}\$ + \item + Wenn B \$\{p,g,w\}\$ sendet, fängt sie die Nachricht ab und sendet + an \$A:\{p,g,w'\}\$ + \item + Wenn das angebliche ,,gemeinsame Geheimnis'' berechnet wird, + erhalten wir: + + \begin{itemize} + \item + A berechnet \$s\_1=w'\^{}q\textbackslash{} MOD\textbackslash{} p = + v\^{}\{r'\}\textbackslash{} MOD\textbackslash{} p\$, letzteres + berechnet von E + \item + B berechnet \$s\_2=v'\^{}r\textbackslash{} MOD\textbackslash{} p = + w\^{}\{q'\}\textbackslash{} MOD\textbackslash{} p\$, letzteres + berechnet von E + \item + A und E haben sich also auf ein gemeinsames Geheimnis \$s\_1\$ + geeinigt, und E und B haben sich auf ein gemeinsames Geheimnis + \$s\_2\$ geeinigt. + \end{itemize} + \item + Wenn das ,,gemeinsame Geheimnis'' nun von A und B verwendet wird, um + Nachrichten zu verschlüsseln, die über den öffentlichen Kanal + ausgetauscht werden sollen, kann E alle Nachrichten abfangen und + ent- bzw. wiederverschlüsseln, bevor er sie zwischen A und B + weiterleitet. + \end{itemize} + \item + Zwei Gegenmaßnahmen gegen den Man-in-the-Middle-Angriff: + + \begin{itemize} + \item + Das gemeinsame Geheimnis wird ,,authentifiziert'', nachdem es + vereinbart worden ist. + + \begin{itemize} + \item + Wir werden dies im Abschnitt über die Schlüsselverwaltung + behandeln + \end{itemize} + \item + A und B verwenden ein sogenanntes Interlock-Protokoll, nachdem sie + sich auf ein gemeinsames Geheimnis geeinigt haben: + + \begin{itemize} + \item + Dazu müssen sie Nachrichten austauschen, die E weiterleiten muss, + bevor sie sie entschlüsseln bzw. wieder verschlüsseln kann. + \item + Der Inhalt dieser Nachrichten muss von A und B überprüfbar sein. + \item + Dies zwingt E dazu, Nachrichten zu erfinden, und sie kann entdeckt + werden. + \item + Eine Technik, um zu verhindern, dass E die Nachrichten + entschlüsselt, besteht darin, sie in zwei Teile aufzuteilen und + den zweiten Teil vor dem ersten zu senden. + + \begin{itemize} + \item + Wenn der verwendete Verschlüsselungsalgorithmus bestimmte + Eigenschaften verhindert, kann E den zweiten Teil nicht + verschlüsseln, bevor sie den ersten erhält. + \item + Da A den ersten Teil erst senden wird, nachdem er eine Antwort + (den zweiten Teil) von B erhalten hat, ist E gezwungen, zwei + Nachrichten zu erfinden, bevor sie die ersten Teile erhalten + kann. + \end{itemize} + \end{itemize} + \end{itemize} + \item + Bemerkung: In der Praxis muss die Zahl g nicht unbedingt eine Urwurzel + von p sein, es genügt, wenn sie eine große Untergruppe von + \$\textbackslash mathbb\{Z\}\^{}*\_p\$ erzeugt + \end{itemize} + + + \subsection{ElGamal Algorithmus} + + \begin{itemize} + \item + Der ElGamal-Algorithmus kann sowohl für die Verschlüsselung als auch + für digitale Signaturen verwendet werden (siehe auch {[}ElG85a{]}). + \item + Wie der DH-Austausch basiert er auf der Schwierigkeit, diskrete + Logarithmen in endlichen Feldern zu berechnen + \item + Um ein Schlüsselpaar zu erstellen: + + \begin{itemize} + \item + Wähle eine große Primzahl p, einen Generator g der multiplikativen + Gruppe \$\textbackslash mathbb\{Z\}\^{}*\_p\$ und eine Zufallszahl + v, so dass \$1\textbackslash leq v\textbackslash leq p - 2\$. + Berechnen Sie: \$y=g\^{}v mod p\$ + \item + Der öffentliche Schlüssel ist \$( y, g, p )\$ + \item + Der private Schlüssel ist v + \end{itemize} + \item + So signieren Sie eine Nachricht m : + + \begin{itemize} + \item + Wähle eine Zufallszahl k so, dass k relativ prim zu \$p-1\$ ist. + \item + Berechne \$r=g\^{}k mod p\$ + \item + Berechne mit dem erweiterten euklidischen Algorithmus + \$k\^{}\{-1\}\$, den Kehrwert von \$k mod (p - 1)\$ + \item + Berechne \$s=k\^{}\{-1\} \textbackslash times ( m - v + \textbackslash times r) mod ( p - 1)\$ + \item + Die Signatur über die Nachricht ist \$( r, s )\$ + \end{itemize} + \item + Überprüfen einer Signatur \$( r , s )\$ über eine Nachricht m: + + \begin{itemize} + \item + Bestätige, dass \$y\^{}r \textbackslash times r\^{}s\textbackslash{} + MOD\textbackslash{} p = g\^{}m\textbackslash{} MOD\textbackslash{} + p\$ + \item + Der Beweis: Wir benötigen Folgendes + + \begin{itemize} + \item + Lemma 3: Sei p eine Primzahl und g ein Generator von + \$\textbackslash mathbb\{Z\}\^{}*\_p\$. Dann sei \$i + \textbackslash equiv j mod ( p -1) \textbackslash Rightarrow g i + \textbackslash equiv g j mod p\$ + \item + Beweis: \$i \textbackslash equiv j mod (p-1) + \textbackslash Rightarrow\$ es gibt \$k\textbackslash in + \textbackslash mathbb\{Z\}\^{}+\$ so, dass + \$(i-j)=(p-1)\textbackslash times k\$ + \item + Also \$g\^{}\{(i-j)\}=g\^{}\{(p-1)\textbackslash times k\} + \textbackslash equiv 1\^{}k\textbackslash equiv 1 mod p\$, wegen + Theorem 3 (Euler) \$\textbackslash Rightarrow g\^{}i + \textbackslash equiv g\^{}j mod p\$ + \end{itemize} + \item + Als \$s\textbackslash equiv + k\^{}\{-1\}\textbackslash times(m-v\textbackslash times r) mod + (p-1)\$ + + \begin{itemize} + \item + \$\textbackslash Leftrightarrow k \textbackslash times + s\textbackslash equiv m-v\textbackslash times r mod (p-1)\$ + \item + \$\textbackslash Leftrightarrow m \textbackslash equiv + v\textbackslash times r+k\textbackslash times s mod (p-1)\$ + \item + \$\textbackslash Rightarrow g\^{}m \textbackslash equiv + g\^{}\{(v\textbackslash times r+ k\textbackslash times s)\} mod + p\$ mit Lemma 3 + \item + \$\textbackslash Leftrightarrow g\^{}m \textbackslash equiv + g\^{}\{(v\textbackslash times r)\}\textbackslash times + g\^{}\{(k\textbackslash times s)\} mod p\$ + \item + \$\textbackslash Leftrightarrow g\^{}m \textbackslash equiv + y\^{}r\textbackslash times r\^{}s mod p\$ + \end{itemize} + \end{itemize} + \item + Sicherheit von ElGamal-Signaturen: + + \begin{itemize} + \item + Da der private Schlüssel v benötigt wird, um s berechnen zu können, + müsste ein Angreifer den diskreten Logarithmus von y modulo p zur + Basis g berechnen, um Signaturen zu fälschen + \item + Entscheidend für die Sicherheit ist, dass für jede Nachricht eine + neue Zufallszahl k gewählt wird, denn ein Angreifer kann das + Geheimnis v berechnen, wenn er zwei Nachrichten zusammen mit ihren + Signaturen auf der Basis des gleichen k erhält (siehe {[}Men97a{]}, + Anmerkung 11.66.ii) + \item + Um zu verhindern, dass ein Angreifer eine Nachricht M mit einer + passenden Signatur erstellen kann, ist es notwendig, die Nachricht M + nicht direkt zu signieren, sondern einen kryptographischen Hashwert + \$m=h(M)\$ davon zu signieren (diese werden bald behandelt, siehe + auch {[}Men97a{]}, Anmerkung 11.66.iii) + \end{itemize} + \item + Um eine Nachricht m mit dem öffentlichen Schlüssel \$(y,g,p)\$ zu + verschlüsseln: + + \begin{itemize} + \item + Wähle einen zufälligen + \$k\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$ mit + \$k\textless p-1\$ + \item + Berechne \$r=g\^{}k\textbackslash{} MOD\textbackslash{} p\$ + \item + Berechne \$s=m\textbackslash times y\^{}k\textbackslash{} + MOD\textbackslash{} p\$ + \item + Der verschlüsselte Text ist \$(r,s)\$, der doppelt so lang ist wie m + \end{itemize} + \item + Entschlüsseln der Nachricht \$(r,s)\$ mit v: + + \begin{itemize} + \item + Verwenden Sie den privaten Schlüssel v zur Berechnung von + \$r\^{}\{(p-1-v)\}\textbackslash{} MOD\textbackslash{} + p=r\^{}\{(-v)\}\textbackslash{} MOD\textbackslash{} p\$ + \item + Wiederherstellung von m durch Berechnung von + \$m=r\^{}\{(-v)\}\textbackslash times s\textbackslash{} + MOD\textbackslash{} p\$ + \item + Beweis: \$r\^{}\{(-v)\}\textbackslash times s\textbackslash equiv + r\^{}\{(-v)\} \textbackslash times m \textbackslash times + y\^{}k\textbackslash equiv g\^{}\{(-vk)\}\textbackslash times m + \textbackslash times y\^{}k\textbackslash equiv g\^{}\{(-v + \textbackslash times k)\} \textbackslash times m\textbackslash times + g\^{}\{(v \textbackslash times k)\} \textbackslash equiv m mod p\$ + \end{itemize} + \item + Sicherheit: + + \begin{itemize} + \item + Die einzige bekannte Möglichkeit für einen Angreifer, m + wiederherzustellen, ist die Berechnung des diskreten Logarithmus v + von y modulo p zur Basis g + \item + Für jede Nachricht wird ein neues zufälliges k benötigt + ({[}Men97a{]}, Anmerkung 8.23.ii) + \end{itemize} + \end{itemize} + + + \subsection{Elliptische Kurven + Kryptographie} + + \begin{itemize} + \item + Die bisher vorgestellten Algorithmen wurden für die multiplikative + Gruppe \$(\textbackslash mathbb\{Z\}\^{}*\_p,\textbackslash times p)\$ + bzw. das Feld \$(\textbackslash mathbb\{Z\}\_p, +\_p, + \textbackslash times\_p)\$ entwickelt. + \item + In den 1980er Jahren wurde festgestellt, dass sie verallgemeinert und + auch für andere Gruppen und Felder verwendet werden können + \item + Die Hauptmotivation für diese Verallgemeinerung ist: + + \begin{itemize} + \item + Zahlreiche mathematische Forschungen auf dem Gebiet der + Primzahlprüfung, der Faktorisierung und der Berechnung diskreter + Logarithmen haben zu Techniken geführt, mit denen diese Probleme + effizienter gelöst werden können, wenn bestimmte Eigenschaften + erfüllt sind: + + \begin{itemize} + \item + Als 1977 die RSA-129-Aufgabe gestellt wurde, ging man davon aus, + dass es etwa 40 Billiarden Jahre dauern würde, die 129-stellige + Zahl (\$\textbackslash approx 428\$ Bit) zu faktorisieren. + \item + Im Jahr 1994 benötigte eine Gruppe von Computern, die über das + Internet vernetzt waren, 8 Monate, um die Zahl zu faktorisieren, + was etwa 5000 MIPS-Jahre entsprach. + \item + Fortschritte bei den Faktorisierungsalgorithmen ermöglichten 2009 + die Faktorisierung einer 232-stelligen Zahl (768 Bit) in etwa 1500 + AMD64-Jahren {[}KAFL10{]}. + \item + \$\textbackslash Rightarrow\$ die Schlüssellänge muss erhöht + werden (derzeit etwa 2048 Bit) + \end{itemize} + \item + Einige der effizienteren Verfahren beruhen auf bestimmten + Eigenschaften der algebraischen Strukturen + \$(\textbackslash mathbb\{Z\}\^{}*\_p,\textbackslash times p)\$ und + \$(\textbackslash mathbb\{Z\}\_p, +\_p, \textbackslash times\_p)\$ + \item + Verschiedene algebraische Strukturen können daher die gleiche + Sicherheit mit kürzeren Schlüssellängen bieten + \end{itemize} + \item + Eine sehr vielversprechende Struktur für die Kryptographie lässt sich + aus der Gruppe der Punkte auf einer elliptischen Kurve über einem + endlichen Feld gewinnen + + \begin{itemize} + \item + Die mathematischen Operationen in diesen Gruppen können sowohl in + Hardware als auch in Software effizient implementiert werden. + \item + Das Problem des diskreten Logarithmus gilt in der allgemeinen + Klasse, die sich aus der Gruppe der Punkte auf einer elliptischen + Kurve über einem endlichen Feld ergibt, als schwierig + \end{itemize} + \end{itemize} + + + \subsubsection{Gruppenelemente} + + \begin{itemize} + \item + Algebraische Gruppe bestehend aus + + \begin{itemize} + \item + Punkte auf der Weierstraß'schen Gleichung: \$y\^{}2 = x\^{}3 + ax + + b\$ + \item + Zusätzlicher Punkt O im ,,Unendlichen'' + \end{itemize} + \item + Kann über \$\textbackslash mathbb\{R\}\$ berechnet werden, aber in der + Kryptographie werden \$\textbackslash mathbb\{Z\}\_p\$ und + \$GF(2\^{}n)\$ verwendet + + \begin{itemize} + \item + Schon in \$\textbackslash mathbb\{R\}\$ beeinflussen Argumente die + Form erheblich: + + \begin{itemize} + \item + \$y\^{}2 = x\^{}3-3x+5\$ + % \includegraphics{Assets/NetworkSecurity-ecc-1.png} + \item + \$y\^{}2 = x\^{}3-40x+5\$ + % \includegraphics{Assets/NetworkSecurity-ecc-2.png} + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{Punktaddition} + + \begin{itemize} + \item + Addition von Elementen = Addition von Punkten auf der Kurve + \item + Geometrische Interpretation: + + \begin{itemize} + \item + Jeder Punkt \$P:(x,y)\$ hat einen Kehrwert \$-P:(x,-y)\$ + \item + Eine Linie durch zwei Punkte P und Q schneidet sich normalerweise + mit einem dritten Punkt R + \item + Im Allgemeinen ist die Summe von zwei Punkten P und Q gleich \$-R\$ + \item + % \includegraphics{Assets/NetworkSecurity-ecc-3.png} + \end{itemize} + \item + Addition (Sonderfälle) + + \begin{itemize} + \item + Der zusätzliche Punkt O ist das neutrale Element, d.h. \$P+O=P\$ + \item + \$P + (-P)\$: + + \begin{itemize} + \item + Wird der inverse Punkt zu P addiert, schneiden sich Linie und + Kurve im ,,Unendlichen'' + \item + Per Definition: \$P+(-P) = O\$ + \end{itemize} + \item + \$P+P\$: Die Summe zweier identischer Punkte P ist der Kehrwert des + Schnittpunkts mit der Tangente durch P: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ecc-4.png} + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{Grundlagen des ECC - Algebraische + Addition} + + \begin{itemize} + \item + Wenn einer der Summanden O ist, ist die Summe der andere Summand + \item + Wenn die Summanden zueinander invers sind, ist die Summe O + \item + Für die allgemeineren Fälle ist die Steigung der Geraden: + \$\textbackslash alpha=\textbackslash begin\{cases\} + \textbackslash frac\{y\_Q-y\_P\}\{x\_Q-x\_P\} + \textbackslash quad\textbackslash text\{ for \} P\textbackslash not=-Q + \textbackslash keil P\textbackslash not=Q \textbackslash{} + \textbackslash frac\{3x\^{}2\_P +a\}\{2y\_P\} + \textbackslash quad\textbackslash text\{ for \} P=Q + \textbackslash end\{cases\}\$ + \item + Ergebnis der Punktaddition, wobei \$(x\_r,y\_r)\$ bereits der + Spiegelpunkt \$(-R)\$ ist + \end{itemize} + + + \subsubsection{Multiplikation} + + \begin{itemize} + \item + Multiplikation von natürlicher Zahl n und Punkt P durch mehrfache + wiederholte Additionen + \item + Zahlen werden in 2er-Potenzen gruppiert, um eine logarithmische + Laufzeit zu erreichen, z.B. \$25P = P + 8P + 16P\$ + \item + Dies ist nur möglich, wenn das n bekannt ist! + \item + Wenn n für \$nP = Q\$ unbekannt ist, muss ein Logarithmus gelöst + werden, was möglich ist, wenn die Koordinatenwerte aus + \$\textbackslash mathbb\{R\}\$ gewählt werden + \item + Für \$\textbackslash mathbb\{Z\}\_p\$ und \$GF(2\^{}n)\$ muss das + diskrete Logarithmusproblem für elliptische Kurven gelöst werden, was + nicht effizient durchgeführt werden kann! + \item + Hinweis: Es ist nicht definiert, wie zwei Punkte multipliziert werden, + sondern nur eine natürliche Zahl n und der Punkt P + \end{itemize} + + + \subsubsection{Kurven über + \$\textbackslash mathbb\{Z\}\_p\$} + + \begin{itemize} + \item + Über \$\textbackslash mathbb\{Z\}\_p\$ zerfällt die Kurve in eine + Menge von Punkten + \item + Für: \$y\^{}2=x\^{}3-3x+5\textbackslash{} mod\textbackslash{} 19\$ + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ecc-5.png} + \item + Hinweis: Für einige x-Werte gibt es keinen y-Wert! + \end{itemize} + \end{itemize} + + + \subsubsection{Berechnen Sie die y-Werte in + \$\textbackslash mathbb\{Z\}\_p\$} + + \begin{itemize} + \item + Im Allgemeinen etwas problematischer: Bestimmen Sie die y-Werte für + ein gegebenes x (da sein quadratischer Wert berechnet wird) durch + \$y\^{}2\textbackslash equiv f(x)\textbackslash{} mod\textbackslash{} + p\$ + \item + Daher wird p oft s.t. gewählt \$p\textbackslash equiv + 3\textbackslash{} mod\textbackslash{} 4\$ + \item + Dann wird y durch \$y\_1\textbackslash equiv + f(x)\^{}\{\textbackslash frac\{p+1\}\{4\}\}\$ und + \$y\_2\textbackslash equiv + -f(x)\^{}\{\textbackslash frac\{p+1\}\{4\}\}\$ berechnet, wenn und nur + wenn überhaupt eine Lösung existiert + \item + Kurzer Beweis: + + \begin{itemize} + \item + Aus dem Euler-Theorem 3 wissen wir, dass + \$f(x)\^{}\{p-1\}\textbackslash equiv 1\textbackslash{} + mod\textbackslash{} p\$ + \item + Die Quadratwurzel muss also 1 oder -1 sein + \$f(x)\^{}\{\textbackslash frac\{p-1\}\{2\}\}\textbackslash equiv\textbackslash pm + 1\textbackslash{} mod\textbackslash{} p\$ + \end{itemize} + \item + Fall 1: + \$f(x)\^{}\{\textbackslash frac\{p-1\}\{2\}\}\textbackslash equiv1\textbackslash{} + mod\textbackslash{} p\$ + + \begin{itemize} + \item + Multiplizieren Sie beide Seiten mit f(x): + \$f(x)\^{}\{\textbackslash frac\{p-1\}\{2\}\}\textbackslash equiv + f(x)\textbackslash equiv y\^{}2\textbackslash{} mod\textbackslash{} + p\$ + \item + Da \$p + 1\$ durch 4 teilbar ist, können wir die Quadratwurzel + ziehen, so dass + \$f(x)\^{}\{\textbackslash frac\{p-1\}\{2\}\}\textbackslash equiv + y\textbackslash{} mod\textbackslash{} p\$ + \end{itemize} + \item + Fall 2: In diesem Fall existiert keine Lösung für den gegebenen x-Wert + (wie von Euler gezeigt) + \end{itemize} + + + \subsubsection{Addition und Multiplikation in + \$\textbackslash mathbb\{Z\}\_p\$} + + \begin{itemize} + \item + Aufgrund des diskreten Strukturpunktes haben mathematische Operationen + keine geometrische Interpretation mehr, sondern + \item + Algebraische Addition ähnlich der Addition über + \$\textbackslash mathbb\{R\}\$ + \item + Wird der inverse Punkt zu P addiert, schneiden sich Linie und + ,,Kurve'' immer noch im ,,Unendlichen'' + \item + Alle x- und y-Werte werden mod p berechnet + \item + Division wird durch Multiplikation mit dem inversen Element des + Nenners ersetzt + + \begin{itemize} + \item + Verwendung des erweiterten euklidischen Algorithmus mit w und p zur + Ableitung der Inversen \$-w\$ + \end{itemize} + \item + Die algebraische Multiplikation einer natürlichen Zahl n und eines + Punktes P erfolgt ebenfalls durch wiederholte Addition von Summanden + der Potenz von 2 + \item + Das Problem des diskreten Logarithmus ist die Bestimmung einer + natürlichen Zahl n in \$nP=Q\$ für zwei bekannte Punkte P und Q + \end{itemize} + + + \subsubsection{Foundations of ECC - Größe der erzeugten + Gruppen} + + \begin{itemize} + \item + Bitte beachten Sie, dass die Ordnung einer durch einen Punkt auf einer + Kurve über \$\textbackslash mathbb\{Z\}\_p\$ erzeugten Gruppe nicht + \$p-1\$ ist! + \item + Die Bestimmung der exakten Ordnung ist nicht einfach, kann aber mit + Schoofs Algorithmus {[}Sch85{]} in logarithmischer Zeit durchgeführt + werden (erfordert viel mehr mathematischen Hintergrund als hier + gewünscht) + \item + Der Satz von Hasse über elliptische Kurven besagt jedoch, dass die + Gruppengröße n zwischen: \$p+1 - + 2\textbackslash sqrt\{p\}\textbackslash leq n\textbackslash leq + p+1+2\textbackslash sqrt\{p\}\$ liegen muss + \item + Wie bereits erwähnt: Es genügt, relativ große Gruppen zu erzeugen + \end{itemize} + + + \subsubsection{ECDH} + + \begin{itemize} + \item + Der Diffie-Hellman-Algorithmus kann leicht an elliptische Kurven + angepasst werden + \item + Wenn Alice (A) und Bob (B) sich auf ein gemeinsames Geheimnis s + einigen wollen: + + \begin{itemize} + \item + A und B einigen sich auf eine kryptographisch sichere elliptische + Kurve und einen Punkt P auf dieser Kurve + \item + A wählt eine Zufallszahl q: + + \begin{itemize} + \item + A berechnet \$Q=qP\$ und überträgt Q an Bob + \end{itemize} + \item + B wählt eine Zufallszahl r: + + \begin{itemize} + \item + B berechnet \$R=rP\$ und überträgt P an Alice + \end{itemize} + \item + Beide Seiten errechnen das gemeinsame Geheimnis: + + \begin{itemize} + \item + A errechnet \$S=qR\$ + \item + B errechnet \$S'=rQ\$ + \item + Da \$qrP=rqP\$ der geheime Punkt \$S=S'\$ + \end{itemize} + \end{itemize} + \item + Angreifer, die den öffentlichen Kanal abhören, können S nur berechnen, + wenn sie entweder q oder r berechnen können, die die diskreten + Logarithmen von Q und R für den Punkt P sind + \end{itemize} + + + \subsubsection{EC-Version des + ElGamal-Algorithmus} + + \begin{itemize} + \item + Die Anpassung von ElGamal für elliptische Kurven ist für die + Verschlüsselungsroutine recht einfach + \item + Ein Schlüsselpaar einrichten: + + \begin{itemize} + \item + Wählen Sie eine elliptische Kurve über einem endlichen Feld, einen + Punkt G, der eine große Gruppe erzeugt, und eine Zufallszahl v, so + dass \$1 \textless{} v \textless{} n\$, wobei n die Größe der + induzierten Gruppe bezeichnet, Berechnen Sie: \$Y = vG\$ + \item + Der öffentliche Schlüssel ist \$(Y,G,Kurve)\$ + \item + Der private Schlüssel ist v + \end{itemize} + \item + Um eine Nachricht zu verschlüsseln: + + \begin{itemize} + \item + Wähle eine zufällige + \$k\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$ mit + \$k\textless n-1\$, berechne \$R=kG\$ + \item + Berechne \$S=M+kY\$, wobei M ein von der Nachricht abgeleiteter + Punkt ist + + \begin{itemize} + \item + Problem: Die Interpretation der Nachricht m als x-Koordinate von M + ist nicht ausreichend, da der y-Wert nicht existieren muss + \item + Lösung aus {[}Ko87{]}: Wähle eine Konstante c (z.B. 100) und + prüfe, ob \$cm\$ die x-Koordinate eines gültigen Punktes ist, wenn + nicht, versuche \$cm+1\$, dann \$cm+2\$ usw. + \item + Um m zu entschlüsseln: nimm den x-Wert von M und führe eine + ganzzahlige Division durch c durch (der Empfänger muss c ebenfalls + kennen) + \end{itemize} + \item + Der Chiffretext sind die Punkte \$(R,S)\$ + \item + Doppelt so lang wie m, wenn sie in so genannter komprimierter Form + gespeichert werden, d.h. nur die x-Koordinaten werden gespeichert + und ein einziges Bit, das angibt, ob die größere oder kleinere + entsprechende y-Koordinate verwendet werden soll + \end{itemize} + \item + Um eine Nachricht zu entschlüsseln: + + \begin{itemize} + \item + Ableitung von M durch Berechnung von \$S-vR\$ + \item + Beweis: \$S-vR=M+kY-vR =M+kvG-vkG= M+O= M\$ + \end{itemize} + \item + Eine Nachricht signieren: + + \begin{itemize} + \item + Wähle ein zufälliges + \$k\textbackslash in\textbackslash mathbb\{Z\}\^{}+\$ mit + \$k\textless n-1\$, berechne \$R = kG\$ + \item + Berechne \$s=k\^{}\{-1\}(m+rv) mod\textbackslash{} n\$, wobei \$r\$ + der x-Wert von R ist + \item + Die Signatur ist \$(r,s)\$, wiederum etwa doppelt so lang wie n + \end{itemize} + \item + Überprüfen einer signierten Nachricht: + + \begin{itemize} + \item + Prüfen, ob der Punkt \$P=ms\^{}\{-1\}G+rs\^{}\{-1\}Y\$ die + x-Koordinate r hat + \item + Anmerkung: \$s\^{}\{-1\}\$ wird durch den Erweiterten Euklidischen + Algorithmus mit den Eingaben s und n (der Ordnung der Gruppe) + berechnet. + \item + Beweis: \$ms\^{}\{-1\}G+rs\^{}\{-1\}Y = ms\^{}\{-1\}G+rs\^{}\{-1\}vG + = (m+rv)(s\^{}\{-1\})G = (ks)(s\^{}\{-1\})G = kG = R\$ + \end{itemize} + \item + Diskussion zur Sicherheit: + + \begin{itemize} + \item + Wie in der ursprünglichen Version von ElGamal ist es entscheidend, k + nicht zweimal zu verwenden + \item + Nachrichten sollten nicht direkt signiert werden + \item + Weitere Prüfungen können erforderlich sein, d.h. G darf nicht O + sein, ein gültiger Punkt auf der Kurve usw. (siehe {[}NIST09{]} für + weitere Details) + \end{itemize} + \end{itemize} + + + \subsubsection{Sicherheit} + + \begin{itemize} + \item + Die Sicherheit hängt stark von der gewählten Kurve und dem Punkt ab: + \item + Die Diskriminante der Kurve darf nicht Null sein, d.h. + \$4a\^{}3+27b\^{}2\textbackslash not\textbackslash equiv + 0\textbackslash{} mod\textbackslash{} p\$ sonst ist die Kurve + degradiert (eine sogenannte ,,singuläre Kurve'' ) + \item + Menezes et. al. haben einen subexponentiellen Algorithmus für + sogenannte ,,supersinguläre elliptische Kurven'' gefunden, der aber im + allgemeinen Fall nicht funktioniert {[}Men93a{]} + \item + Die konstruierten algebraischen Gruppen sollten so viele Elemente wie + möglich haben. + \item + In diesem Kurs wird nicht näher auf die Kryptographie elliptischer + Kurven eingegangen, da dies viel mehr Mathematik erfordert, als für + diesen Kurs erwünscht ist... + \item + Für Nicht-Kryptographen ist es am besten, sich auf vordefinierte + Kurven zu verlassen, z.B. {[}LM10{]} oder {[}NIST99{]} und Standards + wie ECDSA + \item + Viele Veröffentlichungen wählen die Parameter a und b so, dass sie + nachweislich durch einen Zufallsprozess gewählt werden (z.B. + veröffentlichen Sie x für \$h(x)=a\$ und \$y\$ für \$h(y) = b\$); so + soll sichergestellt werden, dass die Kurven keine kryptographische + Schwäche enthalten, die nur den Autoren bekannt ist + \item + Die Sicherheit ist abhängig von der Länge von p + + \begin{itemize} + \item + Schlüssellängen mit vergleichbaren Stärken nach {[}NIST12{]}: + \textbar{} Symmetrische Algorithmen \textbar{} RSA \textbar{} ECC + \textbar{} \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} -\/-\/-\/-\/- \textbar{} -\/-\/-\/-\/-\/-\/- \textbar{} + \textbar{} 112 \textbar{} 2048 \textbar{} 224-255 \textbar{} + \textbar{} 128 \textbar{} 3072 \textbar{} 256-383 \textbar{} + \textbar{} 192 \textbar{} 7680 \textbar{} 384-511 \textbar{} + \textbar{} 256 \textbar{} 15360 \textbar{} \textgreater{} 512 + \textbar{} + \end{itemize} + \item + Die Sicherheit hängt auch stark von der Implementierung ab! + + \begin{itemize} + \item + Die verschiedenen Fälle (z.B. mit O) in der ECC-Berechnung können + beobachtbar sein, d.h. Stromverbrauch und Zeitunterschiede + \item + Angreifer können Seitenkanalangriffe ableiten, wie in OpenSSL 0.9.8o + {[}BT11{]} + + \begin{itemize} + \item + Ein Angreifer kann die Bitlänge eines Wertes k in \$kP\$ ableiten, + indem er die für den Quadrat- und Multiplikationsalgorithmus + benötigte Zeit misst + \item + Der Algorithmus wurde in OpenSSL frühzeitig abgebrochen, wenn + keine weiteren Bits auf ,,1'' gesetzt wurden + \end{itemize} + \item + Angreifer könnten versuchen, ungültige Punkte zu generieren, um + Fakten über den verwendeten Schlüssel abzuleiten, wie in OpenSSL + 0.9.8g, was zu einer Wiederherstellung eines vollen 256-Bit + ECC-Schlüssels nach nur 633 Abfragen führte {[}BBP12{]} + \end{itemize} + \item + Lektion gelernt: Machen Sie es nicht selbst, es sei denn, Sie müssen + es tun und wissen, was Sie tun! + \end{itemize} + + + \subsubsection{Weitere Anmerkungen} + + \begin{itemize} + \item + Wie bereits erwähnt, ist es möglich, kryptographische elliptische + Kurven über \$G(2\^{}n)\$ zu konstruieren, was in + Hardware-Implementierungen schneller sein kann. + + \begin{itemize} + \item + Wir haben auf Details verzichtet, da dies nicht viele neue + Erkenntnisse gebracht hätte! + \end{itemize} + \item + Elliptische Kurven und ähnliche algebraische Gruppen sind ein aktives + Forschungsgebiet und ermöglichen weitere fortgeschrittene Anwendungen, + z.B: + + \begin{itemize} + \item + Sogenannte Edwards-Kurven werden derzeit diskutiert, da sie robuster + gegen Seitenkanalangriffe zu sein scheinen (z.B. {[}BLR08{]}) + \item + Bilineare Paarungen ermöglichen + + \begin{itemize} + \item + Programme zu verifizieren, dass sie zur selben Gruppe gehören, + ohne ihre Identität preiszugeben (Secret Handshakes, z.B. + {[}SM09{]}) + \item + Öffentliche Schlüssel können strukturiert werden, z.B. ,,Alice'' + als öffentlicher Schlüssel für Alice verwenden (Identitätsbasierte + Verschlüsselung, Grundlagen in {[}BF03{]}) + \end{itemize} + \end{itemize} + \item + Bevor Sie elliptische Kurvenkryptographie in einem Produkt einsetzen, + stellen Sie sicher, dass Sie keine Patente verletzen, da es noch viele + gültige Patente in diesem Bereich gibt! + \end{itemize} + + + \subsection{Schlussfolgerung} + + \begin{itemize} + \item + Asymmetrische Kryptographie erlaubt es, zwei verschiedene Schlüssel zu + verwenden: + + \begin{itemize} + \item + Verschlüsselung / Entschlüsselung + \item + Signieren / Überprüfen + \end{itemize} + \item + Die praktischsten Algorithmen, die immer noch als sicher gelten, sind: + + \begin{itemize} + \item + RSA, basierend auf der Schwierigkeit, diskrete Logarithmen zu + faktorisieren und zu lösen + \item + Diffie-Hellman (kein asymmetrischer Algorithmus, sondern ein + Schlüsselvereinbarungsprotokoll) + \item + ElGamal, wie DH basierend auf der Schwierigkeit, diskrete + Logarithmen zu berechnen + \end{itemize} + \item + Da ihre Sicherheit vollständig auf der Schwierigkeit bestimmter + mathematischer Probleme beruht, stellt der algorithmische Fortschritt + ihre größte Bedrohung dar. + \item + Praktische Überlegungen: + + \begin{itemize} + \item + Asymmetrische kryptografische Operationen sind um Größenordnungen + langsamer als symmetrische Operationen. + \item + Daher werden sie oft nicht für die Verschlüsselung/Signierung von + Massendaten verwendet. + \item + Symmetrische Verfahren werden zur Verschlüsselung / Berechnung eines + kryptografischen Hashwerts verwendet, während die asymmetrische + Kryptografie nur zur Verschlüsselung eines Schlüssels / Hashwerts + eingesetzt wird. + \end{itemize} + \end{itemize} + + + \section{Modifikationsprüfwerte} + + + \subsection{Motivation} + + \begin{itemize} + \item + In der Datenkommunikation ist es üblich, eine Art Fehlererkennungscode + für Nachrichten zu berechnen, mit dem der Empfänger überprüfen kann, + ob eine Nachricht während der Übertragung verändert wurde. + + \begin{itemize} + \item + Beispiele: Parität, Bit-Interleaved Parity, Cyclic Redundancy Check + (CRC) + \end{itemize} + \item + Dies führt zu dem Wunsch, einen ähnlichen Wert zu haben, der es + ermöglicht zu überprüfen, ob eine Nachricht während der Übertragung + verändert wurde. + \item + Es ist jedoch ein großer Unterschied, ob man davon ausgeht, dass die + Nachricht durch mehr oder weniger zufällige Fehler oder absichtlich + verändert wird: + + \begin{itemize} + \item + Wenn jemand eine Nachricht, die mit einem CRC-Wert geschützt ist, + absichtlich verändern will, kann er den CRC-Wert nach der + Veränderung neu berechnen oder die Nachricht so verändern, dass sie + den gleichen CRC-Wert ergibt. + \end{itemize} + \item + Ein Änderungsprüfwert muss also einige zusätzliche Eigenschaften + erfüllen, die es Angreifern unmöglich machen, ihn zu fälschen + + \begin{itemize} + \item + Zwei Hauptkategorien von Modifikationsprüfwerten: + + \begin{itemize} + \item + Modifikationserkennungscode (MDC) + \item + Nachrichten-Authentifizierungs-Code (MAC) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Kryptographische + Hash-Funktionen} + + \begin{itemize} + \item + Definition: Hash-Funktion + + \begin{itemize} + \item + Eine Hash-Funktion ist eine Funktion h, die die folgenden zwei + Eigenschaften hat: + + \begin{itemize} + \item + Komprimierung: h bildet eine Eingabe x mit beliebiger endlicher + Bitlänge auf eine Ausgabe \$h(x)\$ mit fester Bitlänge n ab. + \item + Einfachheit der Berechnung: Bei h und x ist es einfach, \$h(x)\$ + zu berechnen. + \end{itemize} + \end{itemize} + \item + Definition: kryptografische Hash-Funktion + + \begin{itemize} + \item + Eine kryptografische Hash-Funktion h ist eine Hash-Funktion, die + zusätzlich unter anderem die folgenden Eigenschaften erfüllt: + + \begin{itemize} + \item + Pre-Image-Resistenz: für im Wesentlichen alle vorgegebenen + Ausgaben y ist es rechnerisch nicht möglich, ein x zu finden, so + dass \$h(x)=y\$ + \item + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \setcounter{enumi}{1} + \item + Vorabbild-Resistenz: Bei x ist es rechnerisch nicht möglich, + eine zweite Eingabe \$x'\$ mit \$x\textbackslash not= x'\$ zu + finden, so dass \$h(x)=h(x')\$ + \end{enumerate} + \item + Kollisionssicherheit: Es ist rechnerisch nicht möglich, ein + beliebiges Paar \$(x,x')\$ mit \$x\textbackslash not= x'\$ zu + finden, so dass \$h(x)=h(x')\$ + \end{itemize} + \item + Kryptographische Hash-Funktionen werden zur Berechnung von + Modification Detection Codes (MDC) verwendet + \end{itemize} + \end{itemize} + + + \subsection{Nachrichten-Authentifizierungs-Codes + (MAC)} + + \begin{itemize} + \item + Definition: Nachrichten-Authentifizierungs-Code + + \begin{itemize} + \item + Ein Message-Authentication-Code-Algorithmus ist eine Familie von + Funktionen \$h\_k\$, die durch einen geheimen Schlüssel k + parametrisiert sind und die folgenden Eigenschaften aufweisen: + + \begin{itemize} + \item + Komprimierung: hk bildet eine Eingabe x beliebiger endlicher + Bitlänge auf eine Ausgabe \$h\_k(x)\$ fester Bitlänge ab, genannt + MAC + \item + Einfache Berechnung: Bei k, x und einer bekannten Funktionsfamilie + \$h\_k\$ ist der Wert \$h\_k(x)\$ einfach zu berechnen + \item + Berechnungsresistenz: für jeden festen, erlaubten, aber + unbekannten Wert von k ist es bei null oder mehr Text-MAC-Paaren + \$(x\_i, h\_k(x\_i))\$ rechnerisch nicht möglich, ein + Text-MAC-Paar \$(x, h\_k(x))\$ für jede neue Eingabe + \$x\textbackslash not= x\_i\$ zu berechnen + \end{itemize} + \item + Bitte beachten Sie, dass Rechenresistenz die Eigenschaft der + Nicht-Wiederherstellung des Schlüssels impliziert, d.h. k kann nicht + aus Paaren \$(x\_i,h\_k(x\_i))\$ wiederhergestellt werden, aber + Rechenresistenz kann nicht aus der Nicht-Wiederherstellung des + Schlüssels abgeleitet werden, da der Schlüssel k nicht immer + wiederhergestellt werden muss, um neue MACs zu fälschen + \end{itemize} + \end{itemize} + + + \subsection{Ein einfacher Angriff gegen einen unsicheren + MAC} + + \begin{itemize} + \item + Betrachten wir zur Veranschaulichung die folgende MAC-Definition: + + \begin{itemize} + \item + Eingabe: Nachricht \$m=(x\_1,x\_2,...,x\_n)\$, wobei \$x\_i\$ + 64-Bit-Werte sind, und Schlüssel k + \item + Berechne \$\textbackslash delta(m):= x\_1\textbackslash oplus + x\_2\textbackslash oplus...\textbackslash oplus x\_n\$, wobei + \$\textbackslash oplus\$ die bitweise Exklusiv-Oder-Verknüpfung + bezeichnet + \item + Ausgabe: MAC \$C\_k(m):= E\_k(\textbackslash delta(m))\$ mit + \$E\_k(x)\$ für die DES-Verschlüsselung + \end{itemize} + \item + Die Schlüssellänge beträgt 56 Bit und die MAC-Länge 64 Bit, so dass + wir einen Aufwand von etwa \$2\^{}\{55\}\$ Operationen erwarten + würden, um den Schlüssel k zu erhalten und den MAC zu knacken (= + Nachrichten fälschen zu können). + \item + Leider ist die MAC-Definition unsicher: + + \begin{itemize} + \item + Angenommen, ein Angreifer Eve, der die zwischen Alice und Bob + ausgetauschten Nachrichten fälschen will, erhält eine Nachricht + \$(m,C\_k(m))\$, die von Alice mit dem mit Bob geteilten geheimen + Schlüssel k ,,geschützt'' wurde + \item + Eve kann eine Nachricht \$m'\$ konstruieren, die denselben MAC + ergibt: + + \begin{itemize} + \item + Sei \$y\_1,y\_2,...,y\_\{n-1\}\$ ein beliebiger 64-Bit-Wert + \item + Definiere \$y\_n:= y\_1\textbackslash oplus + y\_2\textbackslash oplus...\textbackslash oplus + y\_\{n-1\}\textbackslash oplus \textbackslash delta(m)\$, und + \$m':=(y\_1,y\_2,...,y\_n)\$ + \item + Wenn Bob \$(m',C\_k(m))\$ von Eve erhält, die vorgibt, Alice zu + sein, wird er es als von Alice stammend akzeptieren, da + \$C\_k(m)\$ ein gültiger MAC für \$m'\$ ist + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Anwendungen für kryptographische Hash-Funktionen und + MACs} + + \begin{itemize} + \item + Wichtigste Anwendung, die zum ursprünglichen Entwurf führte: + Integrität von Nachrichten + + \begin{itemize} + \item + Ein MDC stellt einen digitalen Fingerabdruck dar, der mit einem + privaten Schlüssel signiert werden kann, z. B. mit dem RSA- oder + ElGamal-Algorithmus, und es ist nicht möglich, zwei Nachrichten mit + demselben Fingerabdruck zu erstellen, so dass ein bestimmter + signierter Fingerabdruck von einem Angreifer nicht wiederverwendet + werden kann + \item + Ein MAC über eine Nachricht m bescheinigt direkt, dass der Absender + der Nachricht im Besitz des geheimen Schlüssels k ist und die + Nachricht ohne Kenntnis dieses Schlüssels nicht verändert worden + sein kann. + \end{itemize} + \item + Andere Anwendungen, die eine gewisse Vorsicht erfordern: + + \begin{itemize} + \item + Bestätigung von Wissen + \item + Schlüsselableitung + \item + Pseudo-Zufallszahlengenerierung + \end{itemize} + \item + Je nach Anwendung müssen weitere Anforderungen erfüllt werden: + + \begin{itemize} + \item + Partielle Vorabbild-Resistenz: auch wenn nur ein Teil der Eingabe, + z.B. t Bit, unbekannt ist, sollte es im Durchschnitt + \$2\^{}\{t-1\}\$ Operationen benötigen, um diese Bits zu finden + \end{itemize} + \end{itemize} + + + \subsection{Angriffe basierend auf dem + Geburtstagsphänomen} + + \begin{itemize} + \item + Das Geburtstagsphänomen: + + \begin{itemize} + \item + Wie viele Personen müssen sich in einem Raum befinden, damit die + Wahrscheinlichkeit, dass es mindestens zwei Personen mit demselben + Geburtstag gibt, größer als 0,5 ist? + \item + Der Einfachheit halber lassen wir den 29. Februar beiseite und + nehmen an, dass jeder Geburtstag gleich wahrscheinlich ist + \end{itemize} + \item + Definieren Sie \$P(n,k):= Pr\${[}mindestens ein Duplikat in k + Elementen, wobei jedes Element einen von n gleich wahrscheinlichen + Werten zwischen 1 und n annehmen kann {]} + \item + Definieren Sie \$Q(n,k):= Pr\${[}kein Duplikat in k Artikeln, jeder + Artikel zwischen 1 und n {]} + + \begin{itemize} + \item + Wir können das erste Element aus n möglichen Werten wählen, das + zweite Element aus \$n-1\$ möglichen Werten, usw. + \item + Die Anzahl der verschiedenen Möglichkeiten, k Elemente aus n Werten + ohne Duplikate auszuwählen, ist also: \$N=n \textbackslash times + (n-1)\textbackslash times ...\textbackslash times (n-k+1)= + n!\textbackslash backslash(n-k)!\$ + \item + Die Anzahl der verschiedenen Möglichkeiten, k Elemente aus n Werten + auszuwählen, mit oder ohne Duplikate, ist: \$n\^{}k\$ + \item + Also, \$Q(n,k)=N\textbackslash backslash + n\^{}k=n!\textbackslash backslash((n-k)! \textbackslash times + n\^{}k)\$ + \end{itemize} + \item + Wir haben: + \$P(n,k)=1-Q(n,k)=1-\textbackslash frac\{n!\}\{(n-k)!\textbackslash times + n\^{}k\}=1-\textbackslash frac\{n\textbackslash times(n-1)\textbackslash times...\textbackslash times(n-k+1)\}\{n\^{}k\}=1-{[}(1-\textbackslash frac\{1\}\{n\})\textbackslash times(1-\textbackslash frac\{2\}\{n\})\textbackslash times...\textbackslash times(1-\textbackslash frac\{k-1\}\{n\}){]}\$ + \item + Wir werden die folgende Ungleichung verwenden: \$(1-x) + \textbackslash leq e\^{}\{-x\}\$ für alle \$x \textbackslash geq 0\$ + \item + So: + \$P(n,k)\textgreater1-{[}(e\^{}\{-1/n\})\textbackslash times(e\^{}\{-2/n\})\textbackslash times...\textbackslash times(e\^{}\{-(k-1)/n\}){]}=1-e\^{}\{\textbackslash frac\{-k\textbackslash times(k-1)\}\{2n\}\}\$ + \item + Im letzten Schritt haben wir die Gleichheit: \$1+2+...+(k-1)=(k\^{}2 - + k)\textbackslash backslash 2\$ + + \begin{itemize} + \item + Übung: Beweisen Sie die obige Gleichheit durch Induktion + \end{itemize} + \item + Kehren wir zu unserer ursprünglichen Frage zurück: Wie viele Personen + k müssen sich in einem Raum befinden, damit mindestens zwei Personen + mit demselben Geburtstag (von \$n=365\$ möglichen) mit der + Wahrscheinlichkeit \$\textbackslash geq 0,5\$ vorhanden sind? + + \begin{itemize} + \item + Wir wollen also lösen: + \$\textbackslash frac\{1\}\{2\}=1-e\^{}\{\textbackslash frac\{-k\textbackslash times(k-1)\}\{2n\}\}\textbackslash Leftrightarrow + 2=e\^{}\{\textbackslash frac\{k\textbackslash times(k-1)\}\{2n\}\}\textbackslash Leftrightarrow + ln(2)=\textbackslash frac\{k\textbackslash times(k-1)\}\{2n\}\$ + \item + Für große k können wir \$k\textbackslash times(k-1)\$ durch + \$k\^{}2\$ approximieren, und wir erhalten: + \$k=\textbackslash sqrt\{2 ln(2)n\}\textbackslash approx + 1,18\textbackslash sqrt\{n\}\$ + \item + Für \$n=365\$ erhalten wir \$k=22,54\$, was der richtigen Antwort + recht nahe kommt 23 + \end{itemize} + \item + Was hat das mit MDCs zu tun? + \item + Wir haben gezeigt, dass bei n möglichen unterschiedlichen Werten die + Anzahl k der Werte, die man zufällig wählen muss, um mindestens ein + Paar identischer Werte zu erhalten, in der Größenordnung von + \$\textbackslash sqrt\{n\}\$ liegt. + \item + Betrachten wir nun den folgenden Angriff {[}Yuv79a{]}: + + \begin{itemize} + \item + Eve möchte, dass Alice eine Nachricht m1 signiert, die Alice + normalerweise nie signieren würde. Eve weiß, dass Alice die Funktion + MDC1(m) verwendet, um eine MDC von m zu berechnen, die eine Länge + von r Bit hat, bevor sie diese MDC mit ihrem privaten Schlüssel + signiert, was ihre digitale Signatur ergibt. + \item + Zunächst erzeugt Eve ihre Nachricht m1. Würde sie nun MDC1(m1) + berechnen und dann versuchen, eine zweite harmlose Nachricht m2 zu + finden, die zu demselben MDC führt, wäre ihr Suchaufwand im + durchschnittlichen Fall in der Größenordnung von \$2\^{}\{(r-1)\}\$. + \item + Stattdessen nimmt sie eine beliebige harmlose Nachricht m2 und + beginnt, Variationen m1' und m2' der beiden Nachrichten zu + produzieren, z.B. durch Hinzufügen von -Kombinationen oder + Variationen mit semantisch identischen Wörtern. + \end{itemize} + \item + Wie wir aus dem Geburtstagsphänomen gelernt haben, muss sie nur etwa + \$\textbackslash sqrt\{2\^{}r\}=2\^{}\{r/2\}\$ Variationen von jeder + der beiden Nachrichten produzieren, so dass die Wahrscheinlichkeit, + dass sie zwei Nachrichten m1' und m2' mit demselben MDC erhält, + mindestens 0,5 beträgt + \item + Da sie die Nachrichten zusammen mit ihren MDCs speichern muss, um eine + Übereinstimmung zu finden, liegt der Speicherbedarf ihres Angriffs in + der Größenordnung von \$2\^{}\{\textbackslash frac\{r\}\{2\}\}\$ und + der Rechenzeitbedarf in der gleichen Größenordnung + \item + Nachdem sie m1' und m2' mit \$MDC1(m1')=MDC1(m2')\$ gefunden hat, + fordert sie Alice auf, \$m2'\$ zu signieren. Eve kann dann diese + Unterschrift nehmen und behaupten, dass Alice \$m1'\$ unterschrieben + hat. + \item + Angriffe nach dieser Methode werden Geburtstagsangriffe genannt. + \item + Nehmen wir nun an, dass Alice RSA mit Schlüsseln der Länge 2048 Bit + und eine kryptographische Hashfunktion verwendet, die MDCs der Länge + 96 Bit erzeugt. + + \begin{itemize} + \item + Eves durchschnittlicher Aufwand, zwei Nachrichten m1' und m2' wie + oben beschrieben zu erzeugen, liegt in der Größenordnung von + \$2\^{}\{48\}\$, was heute machbar ist. Das Knacken von + RSA-Schlüsseln der Länge 2048 Bit ist mit den heutigen Algorithmen + und Technologien bei weitem nicht möglich. + \end{itemize} + \end{itemize} + + + \subsection{Übersicht über die gebräuchlichen + MDCs} + + \begin{itemize} + \item + Kryptografische Hash-Funktionen zur Erstellung von MDCs: + + \begin{itemize} + \item + Message Digest 5 (MD5): + + \begin{itemize} + \item + Erfunden von R. Rivest + \item + Nachfolger von MD + \end{itemize} + \item + Sicherer Hash-Algorithmus 1 (SHA-1): + + \begin{itemize} + \item + Erfunden von der National Security Agency (NSA) + \item + Der Entwurf wurde von MD inspiriert. + \end{itemize} + \item + Sicherer Hash-Algorithmus 2 (SHA-2, auch SHA-256 und SHA-512) + + \begin{itemize} + \item + Ebenfalls von der National Security Agency (NSA) entwickelt + \item + Auch Merkle-Dåmgard-Verfahren + \item + Größere Blockgröße \& komplexere Rundenfunktion + \end{itemize} + \item + Sicherer Hash-Algorithmus 3 (SHA-3, Keccak) + + \begin{itemize} + \item + Gewinner eines offenen Wettbewerbs + \item + Sogenannte Sponge-Konstruktion + \item + Vielseitiger als frühere Hash-Funktionen + \end{itemize} + \end{itemize} + \item + Nachrichten-Authentifizierungs-Codes (MACs): + + \begin{itemize} + \item + DES-CBC-MAC: + + \begin{itemize} + \item + Verwendet den Data Encryption Standard im Cipher Block Chaining + Modus + \item + Im Allgemeinen kann die CBC-MAC-Konstruktion mit jeder + Blockchiffre verwendet werden. + \end{itemize} + \item + MACs, die aus MDCs aufgebaut sind: + + \begin{itemize} + \item + Dieser sehr verbreitete Ansatz wirft einige kryptografische + Bedenken auf, da er einige implizite, aber nicht verifizierte + Annahmen über die Eigenschaften der MDCs trifft. + \end{itemize} + \end{itemize} + \item + Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD) + + \begin{itemize} + \item + Galois-Counter-Verfahren (GCM) + + \begin{itemize} + \item + Verwendet eine Blockchiffre zur Verschlüsselung und + Authentifizierung von Daten + \item + Schnell in Netzwerkanwendungen + \end{itemize} + \item + Sponge Wrap + + \begin{itemize} + \item + Verwendet eine SHA-3 ähnliche Hash-Funktion zur Verschlüsselung + und Authentifizierung von Daten + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Gemeinsame Struktur von kryptografischen + Hash-Funktionen} + + \begin{itemize} + \item + So wie viele der heutigen Blockchiffren der allgemeinen Struktur eines + Feistel-Netzwerks folgen, folgen auch viele der heute verwendeten + kryptografischen Hash-Funktionen einer gemeinsamen Struktur, der + sogenannten Merkle-Dåmgard-Struktur: + + \begin{itemize} + \item + Sei y eine beliebige Nachricht. Normalerweise wird die Länge der + Nachricht an die Nachricht angehängt und auf ein Vielfaches einer + Blockgröße b aufgefüllt. Bezeichnen wir + \$(y\_0,y\_1,...,y\_\{L-1\})\$ die resultierende Nachricht, die aus + L Blöcken der Größe b + \item + Die allgemeine Struktur ist wie folgt abgebildet: + % \includegraphics{Assets/NetworkSecurity-feistel.png} + \item + CV ist ein Verkettungswert, mit \$CV\_0:= IV\$ und \$MDC(y) := + CV\_L\$ + \item + f ist eine spezifische Kompressionsfunktion, die \$(n+b)\$ Bit auf n + Bit komprimiert + \end{itemize} + \item + Die Hash-Funktion H lässt sich wie folgt zusammenfassen: + + \begin{itemize} + \item + \$CV\_0 = IV =\$ anfänglicher n-Bit-Wert + \item + \$CV\_i = f(CV\_\{i -1\}, y\_\{i-1\}) + \textbackslash quad\textbackslash quad 1\textbackslash leq i + \textbackslash leq L\$ + \item + \$H(y) = CV\_L\$ + \end{itemize} + \item + Es wurde gezeigt {[}Mer89a{]}, dass, wenn die Kompressionsfunktion f + kollisionssicher ist, die resultierende iterierte Hash-Funktion H + ebenfalls kollisionssicher ist. + \item + Die Kryptoanalyse kryptographischer Hash-Funktionen konzentriert sich + daher auf die interne Struktur der Funktion f und die Suche nach + effizienten Techniken zur Erzeugung von Kollisionen bei einer einzigen + Ausführung von f + \item + In erster Linie durch Geburtstagsangriffe motiviert, ist ein gängiger + Mindestvorschlag für n , die Bitlänge des Hashwerts, 160 Bit, da dies + einen Aufwand der Größenordnung \$2\^{}\{80\}\$ für einen Angriff + impliziert, der heute als undurchführbar gilt + \end{itemize} + + + \subsection{Der Message Digest 5} + + \begin{itemize} + \item + MD5 folgt der zuvor skizzierten allgemeinen Struktur (z. B. + {[}Riv92a{]}): + + \begin{itemize} + \item + Die Nachricht y wird mit einer ,,1'' aufgefüllt, gefolgt von 0 bis + 511 ,,0'' Bits, so dass die Länge der resultierenden Nachricht + kongruent 448 modulo 512 ist + \item + Die Länge der ursprünglichen Nachricht wird als 64-Bit-Wert + hinzugefügt, so dass eine Nachricht entsteht, deren Länge ein + ganzzahliges Vielfaches von 512 Bit ist. + \item + Diese neue Nachricht wird in Blöcke der Länge \$b=512\$ Bit + unterteilt. + \item + Die Länge des Verkettungswertes ist \$n=128\$ Bit + + \begin{itemize} + \item + Der Verkettungswert ist ,,strukturiert'' als vier 32-Bit-Register + A, B, C, D + \item + Initialisierung: + + \begin{itemize} + \item + A := 0x 01 23 45 67 + \item + B := 0x 89 AB CD EF + \item + C := 0x FE DC BA 98 + \item + D := 0x 76 54 32 10 + \end{itemize} + \end{itemize} + \item + Jeder Block der Nachricht \$y\_i\$ wird mit dem Verkettungswert + \$CV\_i\$ mit der Funktion f verarbeitet, die intern durch 4 Runden + zu je 16 Schritten realisiert ist + + \begin{itemize} + \item + Jede Runde ist ähnlich aufgebaut und verwendet eine Tabelle T, die + 64 konstante Werte von je 32 Bit enthält, + \item + Jede der vier Runden verwendet eine bestimmte logische Funktion g + \end{itemize} + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-md5.png} + + \begin{itemize} + \item + Die Funktion g ist eine von vier verschiedenen logischen Funktionen + \item + \$y\_i{[}k{]}\$ bezeichnet das k-te\$ 32-Bit-Wort des + Nachrichtenblocks i + \item + \$T{[}j{]}\$ ist der j-te Eintrag der Tabelle t, wobei j bei jedem + Schritt modulo 64 inkrementiert wird + \item + CLS s bezeichnet die zyklische Linksverschiebung um s Bits, wobei s + einem bestimmten Schema folgt. + \end{itemize} + \item + Der MD5-MDC über eine Nachricht ist der Inhalt des Verkettungswertes + CV nach Verarbeitung des letzten Nachrichtenblocks. + \item + Sicherheit von MD5: + + \begin{itemize} + \item + Jedes Bit des 128-Bit-Hash-Codes ist eine Funktion eines jeden + Eingabebits + \item + 1996 veröffentlichte H. Dobbertin einen Angriff, der es erlaubt, + eine Kollision für die Funktion f zu erzeugen (realisiert durch die + oben beschriebenen 64 Schritte). + \item + Es dauerte bis 2004, bis eine erste Kollision gefunden wurde + {[}WLYF04{]}. + \item + Inzwischen ist es möglich, Kollisionen innerhalb von Sekunden auf + allgemeiner Hardware zu erzeugen {[}Kl06{]}. + \item + MD5 darf nicht in Betracht gezogen werden, wenn Kollisionssicherheit + erforderlich ist! + + \begin{itemize} + \item + Dies ist oft der Fall! + \item + Beispiele: Zwei Postskripte mit unterschiedlichen Texten, aber + gleichen Hashes {[}LD05{]}, Zertifikate, eines für eine gesicherte + Domain und eines für eine eigene Zertifizierungsstelle + {[}LWW05{]}, Jede Nachricht, die erweiterbar ist {[}KK06{]} + \end{itemize} + \item + Die Resistenz gegen Preimage-Angriffe ist mit 2123.4 Berechnungen + noch o.k{[}SA09{]} + \end{itemize} + \end{itemize} + + + \subsection{Der sichere Hash-Algorithmus + SHA-1} + + \begin{itemize} + \item + Auch SHA-1 folgt der gleichen Struktur wie oben beschrieben: + + \begin{itemize} + \item + SHA-1 arbeitet mit 512-Bit-Blöcken und erzeugt einen + 160-Bit-Hash-Wert. + \item + Da sein Design auch vom MD4-Algorithmus inspiriert wurde, ist seine + Initialisierung im Grunde dieselbe wie die von MD5: + + \begin{itemize} + \item + Die Daten werden aufgefüllt, ein Längenfeld wird hinzugefügt und + die resultierende Nachricht wird als Blöcke der Länge 512 Bit + verarbeitet. + \item + Der Verkettungswert ist als fünf 32-Bit-Register A, B, C, D, E + strukturiert + \item + Initialisierung: + + \begin{itemize} + \item + A = 0x 67 45 23 01 + \item + B = 0x EF CD AB 89 + \item + C = 0x 98 BA DC FE + \item + D = 0x 10 32 54 76 + \item + E = 0x C3 D2 E1 F + \end{itemize} + \item + Die Werte werden im Big-Endian-Format gespeichert. + \end{itemize} + \item + Jeder Block yi der Nachricht wird zusammen mit CVi in einem Modul + verarbeitet, das die Kompressionsfunktion f in vier Runden zu je 20 + Schritten realisiert. + + \begin{itemize} + \item + Die Runden haben eine ähnliche Struktur, aber jede Runde verwendet + eine andere primitive logische Funktion \$f\_1, f\_2, f\_3, + f\_4\$. + \item + Bei jedem Schritt wird eine feste additive Konstante \$K\_t\$ + verwendet, die während einer Runde unverändert bleibt + \end{itemize} + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-sha1.png} + + \begin{itemize} + \item + \$t\textbackslash in\{0,...,15\}\textbackslash Rightarrow W\_t:= + y\_i{[}t{]}\$ + \item + \$t\textbackslash in\{16,...,79\}\textbackslash Rightarrow + W\_t:=CLS\_1(W\_\{t-16\}\textbackslash oplus + W\_\{t-14\}\textbackslash oplus W\_\{t-8\} \textbackslash oplus + W\_\{t-3\})\$ + \item + Nach Schritt 79 wird jedes Register A, B, C, D, E modulo + \$2\^{}\{32\}\$ mit dem Wert des entsprechenden Registers vor + Schritt 0 addiert, um \$CV\_\{i+1\}\$ zu berechnen + \end{itemize} + \item + Der SHA-1-MDC über eine Nachricht ist der Inhalt des Verkettungswertes + CV nach Verarbeitung des letzten Nachrichtenblocks. + \item + Vergleich zwischen SHA-1 und MD5: + + \begin{itemize} + \item + Geschwindigkeit: SHA-1 ist etwa 25\% langsamer als MD5 (CV ist etwa + 25\% größer) + \item + Einfachheit und Kompaktheit: beide Algorithmen sind einfach zu + beschreiben und zu implementieren und erfordern keine großen + Programme oder Ersetzungstabellen + \end{itemize} + \item + Sicherheit von SHA-1: + + \begin{itemize} + \item + Da SHA-1 MDCs der Länge 160 Bit erzeugt, wird erwartet, dass es eine + bessere Sicherheit gegen Brute-Force- und Geburtstagsangriffe bietet + als MD5. + \item + Einige inhärente Schwächen von Merkle-Dåmgard-Konstruktionen, z. B. + {[}KK06{]}, sind vorhanden + \item + Im Februar 2005 veröffentlichten X. Wang et. al. einen Angriff, der + es erlaubt, eine Kollision mit einem Aufwand von \$2\^{}\{69\}\$ zu + finden, der in den folgenden Monaten auf \$2\^{}\{63\}\$ verbessert + und in {[}WYY05a{]} veröffentlicht wurde + \item + Die Forschung ging weiter (z.B. {[}Man11{]}), und im Februar 2017 + wurde die erste tatsächliche Kollision gefunden (demonstriert mit + einem veränderten PDF-Dokument) + \end{itemize} + \item + SHA-2-Familie + + \begin{itemize} + \item + Im Jahr 2001 veröffentlichte das NIST einen neuen Standard FIPS PUB + 180-2, der neue Varianten mit den Bezeichnungen SHA-256, SHA-384 und + SHA-512 {[}NIST02{]} mit 256, 384 und 512 Bits enthält. + + \begin{itemize} + \item + SHA-224 wurde im Jahr 2004 hinzugefügt. + \end{itemize} + \item + SHA-224 und SHA-384 sind verkürzte Versionen von SHA-256 und SHA-512 + mit unterschiedlichen Initialisierungswerten + \item + SHA-2 verwendet ebenfalls die Merkle-Dåmgard-Konstruktion mit einer + Blockgröße von 512 Bit (SHA-256) und 1024 Bit (SHA-512) + \item + Der interne Zustand ist in 8 Registern von 32 Bit (SHA-256) und 64 + Bit (SHA-512) organisiert + \item + 64 Runden (SHA-256) oder 80 Runden (SHA-512) + \end{itemize} + \item + Ein Schritt + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-sha-2.png} + \item + \$t\textbackslash in\{0, ..., 15\}\textbackslash Rightarrow + W\_t:=y\_i{[}t{]}\$ + \item + \$t\textbackslash in\{16, ..., r\}\textbackslash Rightarrow + W\_t:=W\_\{t-16\}\textbackslash oplus + \textbackslash delta\_0(W\_\{t-15\})\textbackslash oplus + W\_\{t-7\}\textbackslash oplus\textbackslash delta\_1(W\_\{t-2\})\$ + \item + \$K\_t\$ ist der gebrochene Teil der Kubikwurzel aus der t-ten + Primzahl + \item + Die ROTR- und Funktionen XOR-verknüpfen verschiedene Verschiebungen + des Eingangswertes + \item + Ch und Maj sind logische Kombinationen der Eingabewerte + \end{itemize} + \item + SHA-2-Familie + + \begin{itemize} + \item + Alles in allem sehr ähnlich zu SHA-1 + \item + Aufgrund der Größe und der komplizierteren Rundungsfunktionen etwa + 30-50 Prozent langsamer als SHA-1 (variiert für 64-Bit- und + 32-Bit-Systeme!) + \item + Sicherheitsdiskussion: + + \begin{itemize} + \item + Bereits 2004 wurde entdeckt, dass eine vereinfachte Version des + Algorithmus (mit XOR statt Addition und symmetrischen Konstanten) + hochkorrelierte Ausgaben erzeugt {[}GH04{]} + \item + Für rundenreduzierte Versionen von SHA-2 gibt es + Pre-Image-Angriffe, die schneller sind als Brute-Force, aber sehr + unpraktisch (z.B. {[}AGM09{]}) + \item + Auch wenn Größe und Komplexität derzeit keine Angriffe zulassen, + ist die Situation unangenehm + \item + Dies führte zur Notwendigkeit eines neuen SHA-3-Standards + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Der sichere Hash-Algorithmus + SHA-3} + + \begin{itemize} + \item + Sicherheitsbedenken bezüglich SHA-1 und SHA-2 führten zu einem offenen + Wettbewerb des NIST, der 2007 begann + + \begin{itemize} + \item + 5 Finalisten ohne nennenswerte Schwächen + \item + Oktober 2012: NIST gibt bekannt, dass Keccak zu SHA-3 wird + \item + 4 europäische Erfinder + \item + Einer davon ist Joan Daemen, der AES mitentwickelt hat + \item + SHA-3 ist sehr schnell, besonders in der Hardware + \item + Sehr gut dokumentiert und analysierbar + \end{itemize} + \item + Keccak basiert auf einer so genannten Schwammkonstruktion anstelle der + früheren Merkle-Dåmgard-Konstruktionen + + \begin{itemize} + \item + Vielseitiges Design, um fast alle symmetrischen kryptographischen + Funktionen zu implementieren (allerdings ist nur das Hashing + standardisiert) + \end{itemize} + \item + Arbeitet normalerweise in 2 Phasen + + \begin{itemize} + \item + ,,Absorbieren'' von Informationen beliebiger Länge in 1600 Bit des + internen Zustands + \item + ,,Auspressen'' (d.h. Ausgeben) von Hash-Daten beliebiger Länge (nur + 224, 256, 384 und 512 Bit standardisiert) + \end{itemize} + \item + Der interne Zustand ist in 2 Registern organisiert + + \begin{itemize} + \item + Ein Register der Größe r ist ,,public'': Eingabedaten werden in der + Absorptionsphase mit XOR verknüpft, Ausgabedaten werden in der + Quetschungsphase daraus abgeleitet + \item + Das Register der Größe c ist ,,privat''; Ein- und Ausgabe wirken + sich nicht direkt auf es aus. + \item + In Keccak ist die Größe der Register 1600 Bits (d.h. \$c+r=1600\$ + Bits) + \item + Die Größe von c ist doppelt so groß wie die Länge des Ausgangsblocks + \item + Beide Register werden mit ,,0'' initialisiert + \end{itemize} + \item + Das Hashing erfolgt durch eine Funktion f, die die Register liest und + einen neuen Zustand ausgibt + \item + Sponge-Konstruktion + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-sha-3.png} + \item + Absorptionsphase: \$k + 1\$ Eingabeblöcke der Größe r werden in den + Zustand gemischt + \item + Quetschphase: \$l + 1\$ Ausgangsblöcke der Größe r werden erzeugt + (oft nur einer) + \item + Der letzte Eingabe- und Ausgabeblock kann aufgefüllt oder + abgeschnitten werden. + \end{itemize} + \item + Die Funktion f + + \begin{itemize} + \item + Offensichtlich hängt die Sicherheit einer Sponge-Konstruktion von + der Sicherheit von f + \item + Keccak verwendet 24 Runden von 5 verschiedenen Unterfunktionen + \$(\textbackslash Sigma, \textbackslash ro,\textbackslash pi,$\chi$,$\iota$)\$, + um f zu implementieren. + \item + Die Unterfunktionen operieren auf einem ,,dreidimensionalen'' + Bit-Array a \${[}5{]}{[}5{]}{[}w{]}\$, wobei w entsprechend der + Größe r und c gewählt wird + \item + Alle Operationen werden über \$GF(2\^{}n)\$ durchgeführt. + \item + Jede der Unterfunktionen gewährleistet bestimmte Eigenschaften, z.B, + + \begin{itemize} + \item + Schnelle Diffusion der geänderten Bits im gesamten Zustand + (\$\textbackslash Sigma\$) + \item + Langfristige Diffusion (\$\textbackslash pi\$) + \item + Sicherstellung, dass f nichtlinear wird ($\chi$) + \item + Rundenspezifische Substitution ($\iota$) + \end{itemize} + \end{itemize} + \item + \$\textbackslash Sigma\$ wird zuerst ausgeführt, um sicherzustellen, + dass sich der geheime und der öffentliche Zustand schnell vermischen, + bevor andere Unterfunktionen angewendet werden. + \item + Sicherheit + + \begin{itemize} + \item + Derzeit gibt es keine nennenswerten Schwachstellen in SHA-3 + + \begin{itemize} + \item + Die bekanntesten Pre-Image-Angriffe funktionieren nur mit einer + Funktion f mit bis zu 8 Runden + \item + Zum Schutz vor internen Kollisionen sollten 11 Runden ausreichen. + \end{itemize} + \item + Im Vergleich zu SHA-1 und SHA-2 werden zusätzliche + Sicherheitseigenschaften garantiert, da der interne Zustand nie + öffentlich gemacht wird + + \begin{itemize} + \item + Verhindert Angriffe, bei denen beliebige Informationen zu einer + gültigen geheimen Nachricht hinzugefügt werden + \item + Bietet Chosen Target Forced Prefix (CTFP) Preimage-Resistenz + {[}KK06{]}, d.h. es ist nicht möglich, eine Nachricht + \$m=P\textbar\textbar S\$ zu konstruieren, wobei P fest und S + beliebig gewählt ist, s.t., \$H(m)=y\$ + \item + Für Merkle-Dåmgard-Konstruktionen ist dies nur so schwer wie die + Kollisionssicherheit + \item + Keine schnelle Möglichkeit, Multikollisionen schnell zu erzeugen + {[}Jou04{]} + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Cipher Block Chaining Message Authentication + Codes} + + \begin{itemize} + \item + Ein CBC-MAC wird berechnet, indem eine Nachricht im CBC-Modus + verschlüsselt wird und der letzte Chiffretextblock oder ein Teil davon + als MAC verwendet wird: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-CBC-mac.png} + \end{itemize} + \item + Dieser MAC muss nicht mehr signiert werden, da er bereits mit einem + gemeinsamen Geheimnis K erzeugt wurde. + + \begin{itemize} + \item + Es ist jedoch nicht möglich zu sagen, wer genau einen MAC erstellt + hat, da jeder (Sender, Empfänger), der den geheimen Schlüssel K + kennt, dies tun kann + \end{itemize} + \item + Dieses Verfahren funktioniert mit jeder Blockchiffre (DES, IDEA, ...) + \item + Sicherheit von CBC-MAC: + + \begin{itemize} + \item + Da ein Angreifer K nicht kennt, ist ein Geburtstagsangriff sehr viel + schwieriger (wenn nicht gar unmöglich) zu starten + \item + Ein Angriff auf einen CBC-MAC erfordert bekannte Paare (Nachricht, + MAC) + \item + Dies ermöglicht kürzere MACs + \item + Ein CBC-MAC kann optional verstärkt werden, indem man sich auf einen + zweiten Schlüssel \$K'\textbackslash not= K\$ einigt und eine + dreifache Verschlüsselung des letzten Blocks durchführt: + \$MAC:=E(K,D(K',E(K,C\_\{n-1\})))\$ + \item + Dadurch verdoppelt sich der Schlüsselraum bei nur geringem + Rechenaufwand + \item + Die Konstruktion ist nicht sicher, wenn die Nachrichtenlängen + variieren! + \end{itemize} + \item + Es gibt auch einige Vorschläge, MDCs aus symmetrischen Blockchiffren + zu erzeugen, indem der Schlüssel auf einen festen (bekannten) Wert + gesetzt wird: + + \begin{itemize} + \item + Wegen der relativ kleinen Blockgröße von 64 Bit der meisten gängigen + Blockchiffren bieten diese Verfahren keine ausreichende Sicherheit + gegen Geburtstagsangriffe. + \item + Da symmetrische Blockchiffren mehr Rechenaufwand erfordern als + spezielle kryptografische Hash-Funktionen, sind diese Verfahren + relativ langsam. + \end{itemize} + \end{itemize} + + + \subsection{Konstruktion eines MAC aus einem + MDC} + + \begin{itemize} + \item + Grund für die Konstruktion von MACs aus MDCs Kryptografische + Hash-Funktionen laufen im Allgemeinen schneller ab als symmetrische + Blockchiffren + \item + Grundidee: ,,mix'' einen geheimen Schlüssel K mit der Eingabe und + berechne einen MDC + \item + Die Annahme, dass ein Angreifer K kennen muss, um einen gültigen MAC + zu erzeugen, wirft dennoch einige kryptografische Probleme auf + (zumindest für Merkle-Dåmgard-Hash-Funktionen): + + \begin{itemize} + \item + Die Konstruktion \$H(K\textbar\textbar m)\$ ist nicht sicher (siehe + Anmerkung 9.64 in {[}Men97a{]}) + \item + Die Konstruktion \$H(m\textbar\textbar K)\$ ist nicht sicher (siehe + Bemerkung 9.65 in {[}Men97a{]}) + \item + Die Konstruktion + \$H(K\textbar\textbar p\textbar\textbar m\textbar\textbar K)\$, bei + der p ein zusätzliches Auffüllfeld bezeichnet, bietet keine + ausreichende Sicherheit (siehe Anmerkung 9.66 in {[}Men97a{]}) + \end{itemize} + \item + Die am häufigsten verwendete Konstruktion ist: + \$H(K\textbackslash oplus p\_1\textbar\textbar{} + H(K\textbackslash oplus p\_2\textbar\textbar{} m))\$ + + \begin{itemize} + \item + Der Schlüssel wird mit 0's aufgefüllt, um den Schlüssel zu einem + Eingabeblock der kryptographischen Hashfunktion aufzufüllen + \item + Zwei verschiedene konstante Muster \$p\_1\$ und \$p\_2\$ werden mit + dem aufgefüllten Schlüssel XOR-verknüpft + \item + Dieses Schema scheint sicher zu sein (siehe Anmerkung 9.67 in + {[}Men97a{]}) + \item + Es wurde in RFC 2104 {[}Kra97a{]} standardisiert und wird HMAC + genannt. + \end{itemize} + \end{itemize} + + + \subsection{Authentifizierte Verschlüsselung mit zugehörigen Daten + (AEAD) + Modi} + + \begin{itemize} + \item + Normalerweise sind die Daten nicht authentifiziert oder verschlüsselt, + sondern verschlüsselt UND authentifiziert (Blöcke \$P\_0...P\_n\$) + \item + Manchmal müssen zusätzliche Daten authentifiziert werden (z.B. + Paketköpfe), im Folgenden mit \$A\_0...A\_m\$ bezeichnet + \item + führte zur Entwicklung von AEAD-Betriebsarten + \item + Beispiele hierfür sind + + \begin{itemize} + \item + Galois/Zähler-Modus (GCM) + \item + Zähler mit CBC-MAC (CCM) + \item + Offset-Codebuch-Modus (OCM) + \item + SpongeWrap - eine Methode zur Verwendung von Keccak für den + AEAD-Betrieb + \end{itemize} + \end{itemize} + + + \subsubsection{Galois/Zähler-Modus (GCM) + {[}MV04{]}} + + \begin{itemize} + \item + Beliebter AEAD-Modus + \item + NIST-Standard, Teil von IEEE 802.1AE, IPsec, TLS, SSH usw. + \item + Frei von Patenten + \item + Wird wegen seiner hohen Geschwindigkeit hauptsächlich in + Netzwerkanwendungen eingesetzt + + \begin{itemize} + \item + Äußerst effizient in der Hardware + \item + Prozessorunterstützung auf neueren x86-CPUs + \item + Zeitintensive Aufgaben können vorberechnet und parallelisiert werden + \item + Keine Notwendigkeit für Auffüllungen + \end{itemize} + \item + Verwendet konventionelle Blockchiffre mit 128-Bit-Blockgröße (z. B. + AES) + \item + Berechnet MAC durch Multiplikationen und Additionen in + \$GF(2\^{}\{128\})\$ über das irreduzible Polynom + \$x\^{}\{128\}+x\^{}\{7\}+x\^{}\{2\}+x+1\$ + \item + Erfordert nur \$n+1\$ Blockchiffre-Aufrufe pro Paket (n = Länge der + verschlüsselten und authentifizierten Daten) + \item + % \includegraphics{Assets/NetworkSecurity-gcm.png} + + \begin{itemize} + \item + \$I\_0\$ wird mit dem IV und einem Padding oder einem Hash des IV + initialisiert (wenn er nicht 96 Bit beträgt) + \item + \$\textbackslash circ H\$ ist \$GF(2\^{}\{128\})\$ Multiplikation + mit \$H=E(K,0\^{}\{128\})\$ + \item + Die Eingabeblöcke \$A\_m\$ und \$P\_n\$ werden auf 128 Bit + aufgefüllt + \item + \$A\_m\$ und \$C\_n\$ werden vor der Ausgabe auf die Originalgröße + gekürzt + \item + Die letzte Authentifizierung verwendet 64 Bit kodierte Bitlängen von + A und C + \end{itemize} + \item + Sicherheit + + \begin{itemize} + \item + Schneller Modus, erfordert aber einige Sorgfalt: + + \begin{itemize} + \item + Erwiesenermaßen sicher (unter bestimmten Voraussetzungen, z. B. + wenn die verwendete Blockchiffre nicht von Zufallszahlen + unterscheidbar ist), aber die Konstruktion ist anfällig: + \end{itemize} + \item + IVs MÜSSEN NICHT wiederverwendet werden, da sonst Datenströme + XOR-verknüpft werden können und das XOR der Datenströme + wiederhergestellt werden kann, was zu einer sofortigen + Wiederherstellung des geheimen Werts ,,H'' führen kann + \item + H hat einen möglichen schwachen Wert \$0\^{}\{128\}\$, in diesem + Fall wird die Authentifizierung nicht funktionieren, und wenn IVs + mit einer anderen Länge als 96 Bits verwendet werden, wird \$C\_0\$ + immer gleich sein! + \item + Einige andere Schlüssel erzeugen Hash-Schlüssel mit einer niedrigen + Ordnung, was vermieden werden muss... {[}Saa11{]} + \item + Erfolgreiche Fälschungsversuche können Informationen über H + durchsickern lassen, daher MÜSSEN kurze MAC-Längen vermieden oder + risikominimiert werden {[}Dwo07{]} + \item + Die erreichte Sicherheit ist nur \$2\^{}\{t-k\}\$ und nicht + \$2\^{}t\$ (für MAC-Länge t und Anzahl der Blöcke \$2\^{}k\$), da + Blöcke modifiziert werden können, um nur Teile des MAC zu ändern + {[}Fer05{]} + \end{itemize} + \end{itemize} + + + \subsubsection{Kleiner Exkurs: Rechenoperationen in + \$GF(2\^{}n)\$} + + \begin{itemize} + \item + Galoisfeld-Arithmetik definiert über Termen (z.B. + \$a\_3x\^{}3+a\_2x\^{}2+a\_1x+a\_0\$) + \item + Koeffizienten sind Elemente des Feldes + \$\textbackslash matbb\{Z\}\_2\$, d.h. entweder 0 oder 1 + \item + Oft werden nur die Koeffizienten gespeichert, so wird aus x\^{}4 + +x\^{}2 +x\^{}1 0x16 + \item + Die Addition in \$GF(2\^{}n)\$ ist einfach die Addition von Termen + + \begin{itemize} + \item + Da gleiche Koeffizienten auf 0 abbilden, einfach XOR der Werte! + \item + Extrem schnell in Hard- und Software! + \end{itemize} + \item + Multiplikation in \$GF(2\^{}n)\$ ist Polynommultiplikation und + anschließende Modulodivision durch ein irreduzibles Polynom vom Grad n + + \begin{itemize} + \item + Irreduzible Polynome sind nicht ohne Rest durch irgendein anderes + Polynom teilbar, außer durch ,,1'', ähnlich wie Primzahlen in GF + \item + Kann durch eine Reihe von Verschiebe- und XOR-Operationen + implementiert werden + \item + Sehr schnell in Hardware oder auf neueren Intel-CPUs (mit + CLMUL-Operationen) + \item + Modulo-Operation kann wie bei einer regulären CRC-Berechnung + durchgeführt werden + \end{itemize} + \item + Addition Beispiel: + + \begin{itemize} + \item + \$x\^{}3 +x+1 x\textbackslash oplus x\^{}2+x = x\^{}3 +x\^{}2 +1 + \textbackslash leftrightarrow\$ 0x0B XOR 0x06 = 0x0D + \end{itemize} + \item + Multiplikationsbeispiel (über \$x\^{}4 +x+1\$): + + \begin{itemize} + \item + \$x\^{}3 +x+1\textbackslash circ x\^{}2+x = + x\^{}5+x\^{}3+x\^{}2\textbackslash oplus + x\^{}4+x\^{}2+x\textbackslash{} MOD\textbackslash{} + x\^{}4+x+1=x\^{}5+x\^{}4+x\^{}3+x\textbackslash{} + MOD\textbackslash{} x\^{}4+x+1 = x\^{}3 +x\^{}2 +x+1\$ + \end{itemize} + \item + Elemente von \$GF(2\^{}n)\$ (mit Ausnahme von 1 und dem irreduziblen + Polynom) können ein Generator für die Gruppe sein + \item + Beispiel für x und das Polynom + \$x\^{}4+x+1:x,x\^{}2,x\^{}3,x+1,x\^{}2+x,x\^{}3+x\^{}2,x\^{}3+x+1,x\^{}2 + +1,x\^{}3+x,x\^{}2+x+1,x\^{}3+x\^{}2+x,x\^{}3+x\^{}2+x+1,x\^{}3+x\^{}2+1,x\^{}3+1,1,x,...\$ + \item + Andere Konzepte endlicher Gruppen gelten ebenfalls, z. B. hat jedes + Element ein multiplikatives inverses Element + + \begin{itemize} + \item + Kann durch eine angepasste Version des Erweiterten Euklidischen + Algorithmus gefunden werden + \end{itemize} + \end{itemize} + + + \subsection{SpongeWrap} + + \begin{itemize} + \item + Durch Verwendung von SHA-3 ist es auch möglich, ein AEAD-Konstrukt zu + implementieren {[}BDP11a{]} + \item + Die Konstruktion ist sehr einfach und vergleichsweise leicht zu + verstehen + \item + Verwendet den sogenannten Duplex-Modus für Sponge-Funktionen, bei dem + Schreib- und Leseoperationen verschachtelt werden + \item + Erfordert kein Auffüllen der Daten auf eine bestimmte Blockgröße + \item + Kann nicht parallelisiert werden + \item + Sicherheit: + + \begin{itemize} + \item + Noch nicht weit verbreitet, aber mehrere Aspekte haben sich als + genauso sicher wie SHA-3 im standardisierten Modus erwiesen + \item + Wenn die authentifizierten Daten A keine eindeutige IV enthalten, + wird derselbe Schlüsselstrom erzeugt (ermöglicht die + Wiederherstellung eines Blocks XOR-verschlüsselter Daten) + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-sponge-wrap.png} + + \begin{itemize} + \item + Vereinfachte Version, bei der die Länge von Schlüssel und MAC + kleiner sein muss als die Blockgröße + \item + Auffüllungen mit einem einzelnen ,,0''- oder ,,1''-Bit stellen + sicher, dass verschiedene Datenblocktypen gut voneinander getrennt + sind + \end{itemize} + \end{itemize} + + + \section{Zufallszahlengenerierung} + + + \subsection{Aufgaben der + Schlüsselverwaltung} + + \begin{itemize} + \item + Erzeugung: + + \begin{itemize} + \item + Für die Sicherheit ist es von entscheidender Bedeutung, dass die + Schlüssel mit einem wirklich zufälligen oder zumindest + pseudozufälligen Generierungsverfahren erzeugt werden (siehe unten). + \item + Andernfalls könnte ein Angreifer den Schlüsselgenerierungsprozess + reproduzieren und den zur Sicherung einer bestimmten Kommunikation + verwendeten Schlüssel leicht finden. + \end{itemize} + \item + Verteilung: + + \begin{itemize} + \item + Die Verteilung einiger anfänglicher Schlüssel muss in der Regel + manuell / "out of band" erfolgen. + \item + Die Verteilung von Sitzungsschlüsseln wird in der Regel während + eines Authentifizierungsaustauschs durchgeführt. + \item + Beispiele: Diffie-Hellman, Otway-Rees, Kerberos, X. + \end{itemize} + \item + Speicherung: + + \begin{itemize} + \item + Schlüssel, insbesondere Authentifizierungsschlüssel, sollten sicher + gespeichert werden: + + \begin{itemize} + \item + entweder verschlüsselt mit einer schwer zu erratenden Passphrase, + oder besser + \item + in einem sicheren Gerät wie einer Smart-Card + \end{itemize} + \end{itemize} + \item + Entzug: + + \begin{itemize} + \item + Wenn ein Schlüssel kompromittiert wurde, sollte es möglich sein, + diesen Schlüssel zu widerrufen, damit er nicht mehr missbraucht + werden kann (vgl. X.509). + \end{itemize} + \item + Vernichtung: + + \begin{itemize} + \item + Schlüssel, die nicht mehr verwendet werden (z. B. alte + Sitzungsschlüssel), sollten sicher vernichtet werden. + \end{itemize} + \item + Wiederherstellung: + + \begin{itemize} + \item + Wenn ein Schlüssel verloren gegangen ist (z. B. defekte Chipkarte, + Diskette, versehentliches Löschen), sollte er wiederhergestellt + werden können, um Datenverluste zu vermeiden. + \item + Die Wiederherstellung von Schlüsseln ist nicht zu verwechseln mit + der Schlüsselhinterlegung + \end{itemize} + \item + Hinterlegung: + + \begin{itemize} + \item + Mechanismen und Architekturen, die es staatlichen Stellen (und nur + diesen) ermöglichen sollen, Sitzungsschlüssel zu erhalten, um zu + Strafverfolgungszwecken die Kommunikation abzuhören / gespeicherte + Daten zu lesen + + \begin{itemize} + \item + Wenn ich meinen Schlüssel zurückbekomme, ist es + Schlüsselwiederherstellung, wenn du meinen Schlüssel + zurückbekommst, ist es Schlüsselhinterlegung...'') + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Zufalls- und + Pseudo-Zufallszahlengenerierung} + + \begin{itemize} + \item + Definition: ,,Ein Zufallsbitgenerator ist ein Gerät oder ein + Algorithmus, der eine Folge statistisch unabhängiger und + unverfälschter Binärziffern ausgibt.'' + \item + Bemerkung: Ein Zufallsbitgenerator kann zur Erzeugung gleichmäßig + verteilter Zufallszahlen verwendet werden, z. B. kann eine zufällige + ganze Zahl im Intervall \${[}0,n{]}\$ erhalten werden, indem eine + zufällige Bitfolge der Länge \$\textbackslash lfloor lg + n\textbackslash rfloor+1\$ erzeugt und in eine Zahl umgewandelt wird. + Ist die resultierende ganze Zahl größer als n, so kann sie verworfen + werden, und der Vorgang wird so lange wiederholt, bis eine ganze Zahl + im gewünschten Bereich erzeugt worden ist. + \item + Definition: Ein Pseudo-Zufallsbitgenerator (PRBG) ist ein + deterministischer Algorithmus, der bei einer wirklich zufälligen + Binärfolge der Länge k eine Binärfolge der Länge + \$m\textgreater\textgreater k\$ ausgibt, die ,,zufällig'' erscheint. + Die Eingabe in den PRBG wird als Seed bezeichnet, die Ausgabe als + pseudozufällige Bitfolge. + \item + Bemerkungen: + + \begin{itemize} + \item + Die Ausgabe eines PRBG ist nicht zufällig, tatsächlich ist die + Anzahl der möglichen Ausgabesequenzen der Länge m höchstens ein + kleiner Bruchteil \$2\^{}k/2\^{}m\$, da der PRBG immer dieselbe + Ausgabesequenz für einen (festen) Seed erzeugt + \item + Die Motivation für die Verwendung einer PRBG ist, dass es zu teuer + sein könnte, echte Zufallszahlen der Länge m zu erzeugen, z. B. + durch Münzwurf, so dass nur eine kleinere Menge von Zufallsbits + erzeugt wird und dann aus den k echten Zufallsbits eine + pseudozufällige Bitfolge erzeugt wird + \item + Um Vertrauen in die ,,Zufälligkeit'' einer Pseudo-Zufallsfolge zu + gewinnen, werden statistische Tests mit den erzeugten Folgen + durchgeführt + \end{itemize} + \item + Beispiel: + + \begin{itemize} + \item + Ein linearer Kongruenzgenerator erzeugt eine Pseudo-Zufallsfolge von + Zahlen \$y\_1,y\_2, ...\$ gemäß der linearen Rekursion \$y\_i= + a\textbackslash times y\_\{i-1\} + b\textbackslash{} + mod\textbackslash{} q\$, wobei \$a, b, q\$ Parameter sind, die den + PRBG charakterisieren + \item + Leider ist dieser Generator auch dann vorhersehbar, wenn \$a, b\$ + und \$q\$ unbekannt sind, und sollte daher nicht für + kryptographische Zwecke verwendet werden + \end{itemize} + \item + Sicherheitsanforderungen an PRBGs für die Verwendung in der + Kryptographie: + + \begin{itemize} + \item + Als Mindestsicherheitsanforderung sollte die Länge k des Seeds einer + PRBG so groß sein, dass eine Brute-Force-Suche über alle Seeds für + einen Angreifer nicht durchführbar ist + \item + Die Ausgabe einer PRBG sollte statistisch nicht von echten + Zufallssequenzen unterscheidbar sein. + \item + Die Ausgabebits sollten für einen Angreifer mit begrenzten + Ressourcen unvorhersehbar sein, wenn er den Seed nicht kennt. + \end{itemize} + \item + Definition: Ein PRBG besteht alle statistischen Polynomialzeit-Tests, + wenn kein deterministischer Polynomialzeit-Algorithmus zwischen einer + Ausgangssequenz des Generators und einer echten Zufallssequenz + derselben Länge mit einer Wahrscheinlichkeit deutlich größer als 0 + unterscheiden kann. + + \begin{itemize} + \item + Polynomialzeit-Algorithmus bedeutet, dass die Laufzeit des + Algorithmus durch ein Polynom in der Länge m der Sequenz begrenzt + ist + \end{itemize} + \item + Definition: Ein PRBG besteht den Next-Bit-Test, wenn es keinen + deterministischen Polynomialzeit-Algorithmus gibt, der bei Eingabe der + ersten m Bits einer Ausgangssequenz \$s\$ das \$(m+1)\$-te Bit + \$s\_\{m+1\}\$ der Ausgangssequenz mit einer Wahrscheinlichkeit + deutlich größer als 0 vorhersagen kann. + \item + Theorem (Universalität des Next-Bit-Tests): Wenn eine PRBG den + Next-Bit-Test \$\textbackslash Leftrightarrow\$ besteht, dann besteht + sie alle statistischen Polynomialzeittests + \item + Definition: Ein PRBG, der den Next-Bit-Test besteht - möglicherweise + unter einer plausiblen, aber unbewiesenen mathematischen Annahme wie + der Unlösbarkeit des Faktorisierungsproblems für große ganze Zahlen - + wird als kryptographisch sicherer Pseudo-Zufallsgenerator (CSPRBG) + bezeichnet + \end{itemize} + + + \subsection{Zufallszahlengenerierung} + + \begin{itemize} + \item + Hardware-basierte Zufallsbit-Generatoren basieren auf physikalischen + Phänomenen, wie: + + \begin{itemize} + \item + die verstrichene Zeit zwischen der Emission von Teilchen beim + radioaktiven Zerfall, + \item + thermisches Rauschen einer Halbleiterdiode oder eines Widerstandes, + \item + Frequenzinstabilität eines frei laufenden Oszillators, + \item + der Betrag, um den ein Metall-Isolator-Halbleiter-Kondensator + während eines bestimmten Zeitraums aufgeladen wird, + \item + Luftturbulenzen in einem versiegelten Festplattenlaufwerk, die + zufällige Schwankungen in den Sektor-Lese-Latenzen des + Festplattenlaufwerks verursachen, und + \item + Ton von einem Mikrofon oder Videoeingang von einer Kamera + \item + der Zustand einer ungeraden Anzahl von kreisförmig verbundenen + NOT-Gattern + \end{itemize} + \item + Ein hardwarebasierter Zufallsbitgenerator sollte idealerweise in einer + manipulationssicheren Vorrichtung untergebracht und so vor möglichen + Angreifern geschützt sein. + \item + Softwarebasierte Zufallsbit-Generatoren können auf Prozessen basieren + wie + + \begin{itemize} + \item + der Systemuhr, + \item + der verstrichenen Zeit zwischen Tastenanschlägen oder + Mausbewegungen, + \item + Inhalt von Eingabe-/Ausgabepuffern + \item + Benutzereingaben und + \item + Werte des Betriebssystems wie Systemauslastung und + Netzwerkstatistiken + \end{itemize} + \item + Idealerweise sollten mehrere Zufallsquellen ,,gemischt'' werden, z. B. + durch Verkettung ihrer Werte und Berechnung eines kryptografischen + Hashwerts für den kombinierten Wert, um zu verhindern, dass ein + Angreifer den Zufallswert erraten kann + + \begin{itemize} + \item + Wird z. B. nur die Systemuhr als Zufallsquelle verwendet, könnte ein + Angreifer die aus dieser Zufallsquelle gewonnenen Zufallszahlen + erraten, wenn er weiß, wann sie erzeugt wurden. + \end{itemize} + \item + Verzerrung: + + \begin{itemize} + \item + Betrachten wir einen Zufallsgenerator, der verzerrte, aber + unkorrelierte Bits erzeugt, z. B. 1en mit der Wahrscheinlichkeit + \$p\textbackslash not= 0,5\$ und 0en mit der Wahrscheinlichkeit + \$1-p\$, wobei p unbekannt, aber fest ist + \end{itemize} + \item + Die folgende Technik kann verwendet werden, um eine Zufallsfolge zu + erhalten, die unkorreliert und unverzerrt ist: + + \begin{itemize} + \item + Die Ausgangssequenz des Generators wird in Bitpaare gruppiert + \item + Alle Paare 00 und 11 werden verworfen. + \item + Für jedes Paar 10 erzeugt der unvoreingenommene Generator eine 1 und + für jedes Paar 01 eine 0. + \end{itemize} + \item + Ein weiteres praktisches (wenn auch nicht beweisbares) Verfahren zur + Entzerrung ist die Weiterleitung von Sequenzen, deren Bits korreliert + oder verzerrt sind, durch eine kryptografische Hash-Funktion wie MD5 + oder SHA-1 + \end{itemize} + + + \subsection{Statistische Tests für + Zufallszahlen} + + \begin{itemize} + \item + Mit den folgenden Tests lässt sich überprüfen, ob eine generierte + Zufalls- oder Pseudozufallsfolge bestimmte statistische Eigenschaften + nicht erfüllt: + + \begin{itemize} + \item + Monobit-Test: Gibt es gleich viele 1en wie 0en? + \item + Serieller Test (Zwei-Bit-Test): Gibt es gleich viele 00-, 01-, 10-, + 11-Paare? + \item + Poker-Test: Gibt es gleich viele Sequenzen ni der Länge q, die mit + \$q\$ den gleichen Wert haben, so dass \$\textbackslash lfloor + m/q\textbackslash rfloor\textbackslash geq 5\textbackslash times + (2\^{}q)\$ + \item + Test auf Durchläufe: Entspricht die Anzahl der Läufe (Sequenzen, die + nur entweder 0 oder 1 enthalten) unterschiedlicher Länge den + Erwartungen für Zufallszahlen? + \item + Autokorrelationstest: Gibt es Korrelationen zwischen der Sequenz und + (nicht-zyklischen) verschobenen Versionen davon? + \item + Maurer's Universal Test: Kann die Sequenz komprimiert werden? + \item + NIST SP 800-22: Standardisierte Testsuite, umfasst die oben + genannten und weitere fortgeschrittene Tests + \end{itemize} + \end{itemize} + + + \subsection{Sichere + Pseudo-Zufallszahlengenerierung} + + \begin{itemize} + \item + Es gibt eine Reihe von Algorithmen, die kryptografische + Hash-Funktionen oder Verschlüsselungsalgorithmen zur Erzeugung von + kryptografisch sicheren Pseudozufallszahlen verwenden. + + \begin{itemize} + \item + Obwohl diese Verfahren nicht als sicher bewiesen werden können, + scheinen sie für die meisten praktischen Situationen ausreichend + \end{itemize} + \item + Ein solcher Ansatz ist der Generator ANSI X9.17: + + \begin{itemize} + \item + Eingabe: ein zufälliger und geheimer 64-Bit-Seed s, eine ganze Zahl + m und ein 3-DES-Schlüssel K + \item + Ausgabe: m pseudo-zufällige 64-Bit-Strings \$y\_1,y\_2,...Y\_m\$ + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$q = E(K, Date\_Time)\$ + \item + For i von 1 bis m do + + \begin{enumerate} + \def\labelenumii{\arabic{enumii}.} + \item + \$x\_i = E(K, (q\textbackslash oplus s)\$ + \item + \$s = E(K, (x\_i\textbackslash oplus q)\$ + \end{enumerate} + \item + \$Return(x\_1,x\_2,...x\_m)\$ + \end{enumerate} + \item + Diese Methode ist eine vom U.S. Federal Information Processing + Standard (FIPS) zugelassene Methode zur pseudozufälligen Erzeugung + von Schlüsseln und Initialisierungsvektoren zur Verwendung mit DES + \end{itemize} + \item + Das RSA-PRBG ist ein CSPRBG unter der Annahme, dass das RSA-Problem + unlösbar ist: + + \begin{itemize} + \item + Ausgabe: eine pseudo-zufällige Bitfolge \$z\_1,z\_2,...,z\_k\$ der + Länge k + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + Setup-Prozedur: Erzeuge zwei geheime Primzahlen \$p, q\$, die für + die Verwendung mit RSA geeignet sind. Berechne + \$n=p\textbackslash times q\$ und + \$\textbackslash phi=(p-1)\textbackslash times(q-1)\$. Wähle eine + zufällige ganze Zahl e so, dass + \$1\textless e\textless\textbackslash phi\$ und + \$gcd(e,\textbackslash phi)=1\$ + \item + Wähle eine zufällige ganze Zahl \$y\_0\$ (den Keim) so, dass + \$y\_0\textbackslash in {[}1,n{]}\$ + \item + Für i von 1 bis k tun + + \begin{enumerate} + \def\labelenumii{\arabic{enumii}.} + \item + \$y\_i=(y\_\{i-1\})\^{}e\textbackslash{} mod\textbackslash{} n\$ + \item + \$z\_i =\$ das niedrigstwertige Bit von \$y\_i\$ + \end{enumerate} + \end{enumerate} + + \begin{itemize} + \item + Die Effizienz des Generators kann leicht verbessert werden, indem + man die letzten j Bits von jedem \$y\_i\$ nimmt, wobei + \$j=c\textbackslash times lg(lg(n))\$ und c eine Konstante ist + \item + Für eine gegebene Bitlänge m von n wurde jedoch noch kein + Wertebereich für die Konstante c ermittelt, in dem der Algorithmus + noch einen CSPRBG ergibt + \end{itemize} + \item + Der Blum-Blum-Shub-PRBG ist ein CSPRBG unter der Annahme, dass das + Problem der ganzzahligen Faktorisierung unlösbar ist: + + \begin{itemize} + \item + Ausgabe: eine pseudo-zufällige Bitfolge \$z\_1,z\_2,...,z\_k\$ der + Länge k + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + Setup-Prozedur: Erzeuge zwei große geheime und unterschiedliche + Primzahlen \$p,q\$, so dass \$p,q\$ jeweils kongruent 3 modulo 4 + sind, und lass \$n=p\textbackslash times q\$ + \item + Wähle eine zufällige ganze Zahl s (den Keim) so, dass + \$s\textbackslash in {[}1, n-1{]}\$ liegt, so dass \$gcd(s,n)=1\$ + und \$y\_0=s\^{}2\textbackslash{} mod\textbackslash{} n\$ + \item + Für i von 1 bis k tun + + \begin{enumerate} + \def\labelenumii{\arabic{enumii}.} + \item + \$y\_i = (y\_\{i-1\})\^{}2\textbackslash{} mod\textbackslash{} n\$ + \item + \$z\_i =\$ das niedrigstwertige Bit von \$y\_i\$ + \end{enumerate} + \end{enumerate} + + \begin{itemize} + \item + Die Effizienz des Generators kann mit der gleichen Methode wie beim + RSA-Generator verbessert werden, wobei ähnliche Einschränkungen für + die Konstante c gelten + \end{itemize} + \item + Dualer deterministischer Zufallsbitgenerator mit elliptischer Kurve: + + \begin{itemize} + \item + Basierend auf der Unlösbarkeit des Problems des diskreten + Logarithmus elliptischer Kurven + \item + Vereinfachte Version: + % \includegraphics{Assets/NetworkSecurity-dual-elliptic-curve-deterministic-random-bit-generator.png} + \item + Der Zustand t wird mit einem Generator P multipliziert, der x-Wert + des neuen Punktes wird zu t' + \item + Multiplikation mit einem anderen Punkt Q r Bits der Ausgabe können + erzeugt werden, die Anzahl der Bits hängt von der Kurve ab (zwischen + 240 und 504 Bits) + \item + Teil der Norm NIST 800-90A + \item + Sicherheit: + + \begin{itemize} + \item + Es wurde gezeigt, dass Angreifer den Zustand t ableiten können, + wenn P für eine Konstante e gleich eQ gewählt wird. + \item + Wir wissen nicht, wie die vordefinierten Punkte P und Q in NIST + 800-90A abgeleitet werden, also Vorsicht + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{CSPRNG-Sicherheit ist eine große + Sache!} + + \begin{itemize} + \item + Im September 2006 wurde Debian versehentlich so verändert, dass nur + die Prozess-ID verwendet wurde, um den OpenSSL CSPRNG zu füttern + + \begin{itemize} + \item + Nur 32.768 mögliche Werte! + \item + Wurde bis Mai 2008 nicht entdeckt + \end{itemize} + \item + Ein Scan von etwa 23 Millionen TLS- und SSH-Hosts zeigte, dass + + \begin{itemize} + \item + Mindestens 0,34\% der Hosts teilten Schlüssel aufgrund fehlerhafter + RNGs + \item + 0,50\% der gescannten TLS-Schlüssel aufgrund einer geringen + Zufälligkeit kompromittiert werden konnten + \item + und 1,06\% der SSH-Hosts... + \end{itemize} + \item + Überwachen Sie Ihren CSPRNG! + + \begin{itemize} + \item + Generieren Sie keine Zufallszahlen direkt nach dem Booten Ihres + Systems + \item + Verwenden Sie blockierende RNGs, d.h. solche, die nicht fortfahren, + bis sie genügend Entropie haben + \end{itemize} + \end{itemize} + + + \section{Kryptographische + Protokolle} + + \begin{itemize} + \item + Definition: Ein kryptographisches Protokoll ist definiert als eine + Reihe von Schritten und der Austausch von Nachrichten zwischen + mehreren Einheiten, um ein bestimmtes Sicherheitsziel zu erreichen. + \item + Eigenschaften eines Protokolls (im Allgemeinen): + + \begin{itemize} + \item + Jeder, der an dem Protokoll beteiligt ist, muss das Protokoll und + alle zu befolgenden Schritte im Voraus kennen + \item + Jeder, der an dem Protokoll beteiligt ist, muss zustimmen, es zu + befolgen. + \item + Das Protokoll muss eindeutig sein, d.h. jeder Schritt ist genau + definiert, und es gibt keine Möglichkeit für Missverständnisse + \item + Das Protokoll muss vollständig sein, d. h. es gibt für jede mögliche + Situation eine bestimmte Aktion. + \end{itemize} + \item + Zusätzliche Eigenschaft eines kryptographischen Protokolls: + + \begin{itemize} + \item + Es sollte nicht möglich sein, mehr zu tun oder zu erfahren als das, + was im Protokoll angegeben ist. + \end{itemize} + \end{itemize} + + + \subsection{Anwendungen von kryptographischen + Protokollen} + + \begin{itemize} + \item + Schlüsselaustausch + \item + Authentifizierung + + \begin{itemize} + \item + Authentifizierung der Datenherkunft + \item + Authentifizierung von Entitäten + \end{itemize} + \item + Kombinierte Authentifizierung und Schlüsselaustausch + \item + Aufteilung des Geheimnisses (alle Teile werden für die Rekonstruktion + benötigt) + \item + Gemeinsame Nutzung des Geheimnisses (m von n Teilen werden für die + Rekonstruktion benötigt) + \item + Zeitstempelung + \item + Schlüsselhinterlegung (Sicherstellung, dass nur eine befugte Stelle + Schlüssel wiederherstellen kann) + \item + Zero-Knowledge-Beweise (Nachweis der Kenntnis einer Information ohne + Offenlegung der Information) + \item + Blindsignaturen (nützlich für die Wahrung der Privatsphäre bei + Zeitstempeldiensten) + \item + Sichere Wahlen + \item + Elektronisches Geld + \end{itemize} + + + \subsection{Schlüsselaustausch} + + \begin{itemize} + \item + Das vorgestellte Diffie-Hellman-Protokoll ist unser erstes Beispiel + für ein kryptographisches Protokoll zum Schlüsselaustausch + \item + Bitte beachten Sie, dass es keine Authentifizierung realisiert: + + \begin{itemize} + \item + Weder Alice noch Bob wissen nach einem Protokolldurchlauf, mit wem + sie einen Schlüssel ausgetauscht haben + \item + Da dieser reine Schlüsselaustausch ohne Authentifizierung nicht + einmal die Vertraulichkeit der Kommunikation nach dem Austausch + garantieren kann, muss er mit Authentifizierung kombiniert werden + \end{itemize} + \item + Diese Trennung von Schlüsselaustausch und Authentifizierung des + Austauschs hat jedoch einen großen Vorteil, da sie es ermöglicht, die + Eigenschaft des perfekten Vorwärtsgeheimnisses (Perfect Forward + Secrecy, PFS) zu gewährleisten: + + \begin{itemize} + \item + Wenn ein Schlüsselaustausch PFS gewährleistet, kann die + Kompromittierung eines Schlüssels in der Zukunft keine Daten + kompromittieren, die mit anderen Schlüsseln geschützt wurden, die + vor dieser Kompromittierung ausgetauscht wurden. + \item + Beispiel: Stellen Sie sich vor, Alice und Bob signieren beide die + zur Berechnung von sk ausgetauschten Daten mit ihren privaten + Schlüsseln. Selbst die Kompromittierung eines privaten Schlüssels in + der Zukunft wird es nicht ermöglichen, aufgezeichnete Daten zu + entschlüsseln, die mit sk geschützt wurden. + \end{itemize} + \end{itemize} + + + \subsection{Authentifizierung der + Datenherkunft} + + Definition: Die Datenursprungsauthentifizierung ist der + Sicherheitsdienst, der es Entitäten ermöglicht, zu überprüfen, ob eine + Nachricht von einer bestimmten Entität stammt und nicht nachträglich + verändert wurde. Ein Synonym für diesen Dienst ist Datenintegrität. + + \begin{itemize} + \item + Die Beziehung zwischen Datenintegrität und kryptografischen + Protokollen ist zweifach: + + \begin{itemize} + \item + Es gibt kryptografische Protokolle zur Sicherstellung der + Datenintegrität. Sie umfassen in der Regel nur einen + Protokollschritt und sind daher nicht sehr ,,spannend'': + + \begin{itemize} + \item + Beispiel 1: Angenommen, jeder kennt den öffentlichen RSA-Schlüssel + von Alice und kann sicher sein, dass er den Schlüssel von Alice + wirklich kennt, dann kann Alice die Datenintegrität ihrer + Nachrichten sicherstellen, indem sie sie mit ihrem privaten + Schlüssel verschlüsselt. + \item + Beispiel 2: Alice kann auch einen MDC über ihre Nachricht + berechnen und den mit ihrem privaten Schlüssel verschlüsselten MDC + an die Nachricht anhängen + \end{itemize} + \item + Die Datenintegrität der ausgetauschten Nachrichten ist oft eine + wichtige Eigenschaft in kryptografischen Protokollen, daher ist die + Datenintegrität ein Baustein für kryptografische Protokolle + \end{itemize} + \end{itemize} + + + \subsection{Authentifizierung von + Entitäten} + + Definition: Entitätsauthentifizierung ist der Sicherheitsdienst, der es + Kommunikationspartnern ermöglicht, die Identität ihrer Peer-Entitäten zu + überprüfen. + + \begin{itemize} + \item + Die Entitätsauthentifizierung ist der grundlegendste + Sicherheitsdienst, da alle anderen Sicherheitsdienste auf ihr + aufbauen. + \item + Im Allgemeinen kann sie durch verschiedene Mittel erreicht werden: + + \begin{itemize} + \item + Wissen: z. B. Passwörter + \item + Besitz: z. B. physische Schlüssel oder Karten + \item + Unveränderliches Merkmal: z. B. biometrische Eigenschaften wie + Fingerabdruck usw. + \item + Ort: Es wird der Nachweis erbracht, dass sich eine Entität an einem + bestimmten Ort befindet (Beispiel: Menschen überprüfen selten die + Authentizität von Agenten in einer Bank) + \item + Delegation der Authentizität: Die überprüfende Stelle akzeptiert, + dass eine vertrauenswürdige Person die Authentifizierung bereits + vorgenommen hat. + \end{itemize} + \item + In Kommunikationsnetzen ist die direkte Überprüfung der oben genannten + Mittel schwierig oder unsicher, weshalb kryptographische Protokolle + erforderlich sind. + \item + Der Hauptgrund, warum die Authentifizierung von Entitäten mehr ist als + ein Austausch von (datenherkunfts-) authentischen Nachrichten, ist die + Aktualität: + + \begin{itemize} + \item + Selbst wenn Bob während einer Kommunikation authentische Nachrichten + von Alice erhält, kann er nicht sicher sein, ob: + + \begin{itemize} + \item + Alice zu diesem Zeitpunkt tatsächlich an der Kommunikation + teilnimmt, oder ob + \item + Eve alte Nachrichten von Alice abspielt + \end{itemize} + \item + Dies ist von besonderer Bedeutung, wenn die Authentifizierung nur + zum Zeitpunkt des Verbindungsaufbaus erfolgt: + + \begin{itemize} + \item + Beispiel: Übermittlung einer (möglicherweise verschlüsselten) PIN + beim Einloggen + \end{itemize} + \item + Zwei grundsätzliche Mittel zur Sicherstellung der Aktualität in + kryptographischen Protokollen: + + \begin{itemize} + \item + Zeitstempel (erfordern mehr oder weniger synchronisierte Uhren) + \item + Zufallszahlen (Challenge-Response-Austausch) + \end{itemize} + \end{itemize} + \item + Die meisten Authentifizierungsprotokolle erstellen auch einen geheimen + Sitzungsschlüssel zur Sicherung der Sitzung nach dem + Authentifizierungsaustausch + \item + Zwei Hauptkategorien von Protokollen für die Authentifizierung von + Entitäten: + + \begin{itemize} + \item + Arbitrierte Authentifizierung: ein Arbiter, auch vertrauenswürdige + dritte Partei (TTP) genannt, ist direkt an jedem + Authentifizierungsaustausch beteiligt + + \begin{itemize} + \item + Vorteile: + + \begin{itemize} + \item + Dies ermöglicht es zwei Parteien A und B, sich gegenseitig zu + authentifizieren, ohne ein vorher festgelegtes Geheimnis zu + kennen. + \item + Selbst wenn sich A und B nicht kennen, kann die symmetrische + Kryptographie verwendet werden. + \end{itemize} + \item + Nachteilig: + + \begin{itemize} + \item + Das TTP kann zu einem Engpass werden, die Verfügbarkeit des TTP + ist entscheidend + \item + Der TTP kann alle Authentifizierungsaktivitäten überwachen. + \end{itemize} + \end{itemize} + \item + Direkte Authentifizierung: A und B authentifizieren sich direkt + gegenseitig + + \begin{itemize} + \item + Vorteile: keine Online-Teilnahme einer dritten Partei erforderlich + und kein möglicher Leistungsengpass wird eingeführt + \item + Nachteile: erfordert asymmetrische Kryptographie oder im Voraus + festgelegte geheime Schlüssel + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Notation kryptographischer + Protokolle} + + %\begin{longtable}[]{@{}ll@{}} + % \toprule + % Notation & Bedeutung\tabularnewline + % \midrule + % \endhead + % \$A\$ & Name von A , analog für B, E, TTP, CA\tabularnewline + % \$CA\_A\$ & Zertifizierungsstelle von A\tabularnewline + % \$r\_A\$ & Zufallswert, gewählt von A\tabularnewline + % \$t\_A\$ & Zeitstempel erzeugt von A\tabularnewline + % \$(m\_1,...,m\_m)\$ & Verkettung von Nachrichten \$m\_1, + % ...,m\_n\$\tabularnewline + % \$A\textbackslash rightarrow B:m\$ & A sendet Nachricht m an + % B\tabularnewline + % \$K\_\{A,B\}\$ & Geheimer Schlüssel, nur A und B bekannt\tabularnewline + % \$+K\_A\$ & Öffentlicher Schlüssel von A\tabularnewline + % \$-K\_A\$ & Privater Schlüssel von A\tabularnewline + % \$\{m\}\_K\$ & Nachricht m verschlüsselt mit Schlüssel K , Synonym für + % \$E(K, m)\$\tabularnewline + % \$H(m)\$ & MDC über Nachricht m, berechnet mit Funktion H\tabularnewline + % \$A{[}m{]}\$ & Kurzschreibweise für + % \$(m,\{H(m)\}\_\{-K\_A\})\$\tabularnewline + % \$Cert\_\{-CK\_\{CA\}\}(+K\_A)\$ & Zertifikat der CA für den + % öffentlichen Schlüssel \$+K\_A\$ von A, signiert mit dem privaten + % Zertifizierungsschlüssel \$-CK\_\{CA\}\$\tabularnewline + % \$CA\textless{}\textgreater\$ & Kurzschreibweise für + % \$Cert\_\{-CK\_\{CA\}\}(+K\_A)\$\tabularnewline + % \bottomrule + %\end{longtable} + + + \subsection{Das + Needham-Schroeder-Protokoll} + + \begin{itemize} + \item + Erfunden im Jahr 1978 von Roger Needham und Michael Schroeder + {[}Nee78a{]} + \item + Das Protokoll basiert auf symmetrischer Verschlüsselung und nutzt eine + vertrauenswürdige dritte Partei (TTP) + \item + Angenommen, TTP teilt die geheimen Schlüssel KA,TTP und KB,TTP mit + Alice bzw. Bob: + + \begin{itemize} + \item + A erzeugt eine Zufallszahl rA und sendet die folgende Nachricht: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow TTP: (A, B, r\_A)\$ + \end{enumerate} + \item + TTP erzeugt einen Sitzungsschlüssel KA,B für die sichere + Kommunikation zwischen A und B und antwortet A: 2. + \$TTP\textbackslash rightarrow A:\{r\_A, B, K\_\{A,B\}, + \{K\_\{A,B\}, A\}\emph{\{K}\{B,TTP\}\}\}\emph{\{K}\{A,TTP\}\}\$ + \item + A entschlüsselt die Nachricht und extrahiert \$K\_\{A,B\}\$. Sie + bestätigt, dass \$r\_A\$ mit der von ihr im ersten Schritt + generierten Zahl identisch ist, so dass sie weiß, dass die Antwort + eine neue Antwort von TTP ist. Dann sendet sie an B: 3.) + \$A\textbackslash rightarrow B:\{K\_\{A,B\}, + A\}\emph{\{K}\{B,TTP\}\}\$ + \item + Bob entschlüsselt die Nachricht und erhält \$K\_\{A,B\}\$. Er + erzeugt dann eine Zufallszahl \$r\_B\$ und antwortet Alice: 4.) + \$B\textbackslash rightarrow A:\{r\_B\}\emph{\{K}\{A,B\}\}\$ + \item + Alice entschlüsselt die Nachricht, errechnet \$r\_\{B\}-1\$ und + antwortet mit: 5.) \$A\textbackslash rightarrow + B:\{r\_B-1\}\emph{\{K}\{A,B\}\}\$ + \item + Bob entschlüsselt die Nachricht und prüft, ob sie \$r\_B-1\$ + enthält. + \end{itemize} + \item + Diskussion: + + \begin{itemize} + \item + Der Austausch von \$r\_B\$ und \$r\_\{B-1\}\$ soll sicherstellen, + dass ein Angreifer, der versucht, sich als Alice auszugeben, keinen + vollständigen Protokolldurchlauf mit nachgespielten Nachrichten + durchführen kann + \item + Da jedoch alte Sitzungsschlüssel \$K\_\{A,B\}\$ gültig bleiben, kann + ein Angreifer, Eve, der es schafft, einen Sitzungsschlüssel + \$K\_\{A,B\}\$ in Erfahrung zu bringen, diesen später dazu + verwenden, sich als Alice auszugeben: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$E\textbackslash rightarrow B:\{K\_\{A,B\}, + A\}\emph{\{K}\{B,TTP\}\}\$ + \item + \$B\textbackslash rightarrow A:\{r\_B\}\emph{\{K}\{A,B\}\}\$ Eve + muss diese Nachricht abfangen + \item + \$E\textbackslash rightarrow B:\{r\_B -1\}\emph{\{K}\{A,B\}\}\$ + \end{enumerate} + + \begin{itemize} + \item + Eve gibt sich also als Alice aus, obwohl sie weder + \$K\_\{A,TTP\}\$ noch \$K\_\{B,TTP\}\$ kennt! + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Das Otway-Rees-Protokoll} + + \begin{itemize} + \item + Das oben beschriebene Sicherheitsproblem sowie einige andere wurden + von Needham und Schroeder behandelt. Ihre Lösung {[}Nee87a{]} ist im + Wesentlichen die gleiche wie die von Otway und Rees in der gleichen + Zeitschrift {[}Otw87a{]} vorgeschlagene: + + \begin{itemize} + \item + Alice generiert eine Nachricht, die eine Indexzahl \$i\_A\$, ihren + Namen A, Bobs Namen B und die gleichen Informationen plus eine + zusätzliche Zufallszahl \$r\_A\$ enthält, die mit dem Schlüssel + \$K\_\{A,TTP\}\$ verschlüsselt ist, den sie mit TTP teilt, und + sendet diese Nachricht an Bob: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow B:(i\_A, A, B,\{r\_A, i\_A, A, + B\}\emph{\{K}\{A,TTP\}\})\$ + \end{enumerate} + \item + Bob erzeugt eine Zufallszahl \$r\_B\$, verschlüsselt sie zusammen + mit \$i\_A\$, A und B mit dem Schlüssel \$K\_\{B,TTP\}\$, den er mit + TTP teilt, und sendet die Nachricht an TTP: 2. + \$B\textbackslash rightarrow TTP:(i\_A, A, + B,\{r\_A,i\_A,A,B\}\emph{\{K}\{A,TTP\}\},\{r\_B,i\_A,A,B\}\emph{\{K}\{B,TTP\}\})\$ + \item + TTP erzeugt einen neuen Sitzungsschlüssel KA,B und erstellt zwei + verschlüsselte Nachrichten, eine für Alice und eine für Bob, und + sendet sie an Bob: 3. \$TTP\textbackslash rightarrow + B:(i\_A,\{r\_A,K\_\{A,B\}\}\emph{\{K}\{A,TTP\}\},\{r\_B, + K\_\{A,B\}\}\emph{\{K}\{B,TTP\}\})\$ + \item + Bob entschlüsselt seinen Teil der Nachricht, verifiziert rB und + sendet Alices Teil der Nachricht an sie: 4. + \$B\textbackslash rightarrow + A:(i\_A,\{r\_A,K\_\{A,B\}\}\emph{\{K}\{A,TTP\}\})\$ + \item + Alice entschlüsselt die Nachricht und überprüft, ob sich \$i\_A\$ + und \$r\_A\$ während des Austauschs nicht geändert haben. Wenn + nicht, kann sie sicher sein, dass TTP ihr einen neuen + Sitzungsschlüssel \$K\_\{A,B\}\$ für die Kommunikation mit Bob + geschickt hat. Wenn sie nun diesen Schlüssel in einer + verschlüsselten Kommunikation mit Bob verwendet, kann sie sich + seiner Authentizität sicher sein. + \end{itemize} + \item + Diskussion: + + \begin{itemize} + \item + Die Indexzahl \$i\_A\$ schützt vor Replay-Attacken. Dies erfordert + jedoch, dass TTP überprüft, ob \$i\_A\$ größer ist als das letzte + \$i\_A\$, das er von Alice erhalten hat. + \item + Da TTP nur dann zwei Nachrichten generiert, wenn beide Teile der + Nachricht, die er erhält, die gleiche Indexnummer \$i\_A\$ und die + Namen \$A, B,\$ enthalten, können Alice und Bob sicher sein, dass + sie sich beide während des Protokolllaufs gegenüber TTP + authentifiziert haben. + \end{itemize} + \end{itemize} + + + \subsection{Kerberos} + + \begin{itemize} + \item + Kerberos ist ein Authentifizierungs- und Zugangskontrolldienst für + Workstation-Cluster, der in den späten 1980er Jahren am MIT entwickelt + wurde. + \item + Entwurfsziele: + + \begin{itemize} + \item + Sicherheit: Abhörer oder aktive Angreifer sollten nicht in der Lage + sein, die notwendigen Informationen zu erhalten, um sich beim + Zugriff auf einen Dienst als ein Benutzer auszugeben + \item + Zuverlässigkeit: Da jede Nutzung eines Dienstes eine vorherige + Authentifizierung erfordert, sollte Kerberos höchst zuverlässig und + verfügbar sein. + \item + Transparenz: Der Authentifizierungsprozess sollte für den Benutzer + transparent sein und nicht nur die Eingabe eines Passworts + erfordern. + \item + Skalierbarkeit: Das System sollte in der Lage sein, eine große + Anzahl von Clients und Servern zu unterstützen. + \end{itemize} + \item + Das Kerberos zugrunde liegende kryptografische Verfahren ist die + symmetrische Verschlüsselung (Kerberos V. 4 verwendet DES, V. 5 + erlaubt andere Algorithmen). + \item + Eine gute Anleitung zu den Überlegungen hinter dem Kerberos-Design + findet sich in {[}Bry88a{]}, wo das Protokoll in einer Reihe von + fiktiven Dialogen entwickelt wird + \item + Das grundlegende Anwendungsszenario von Kerberos ist ein Benutzer, + Alice, der auf einen oder mehrere verschiedene Dienste zugreifen + möchte, die von verschiedenen Servern \$S\_1, S\_2, ...\$ + bereitgestellt werden, die über ein unsicheres Netzwerk verbunden sind + \item + Kerberos befasst sich mit den folgenden Sicherheitsaspekten in diesem + Szenario: + + \begin{itemize} + \item + Authentifizierung: Alice authentifiziert sich bei einem + Authentifizierungsserver (AS), der eine zeitlich begrenzte + Genehmigung für den Zugang zu Diensten erteilt. Diese Erlaubnis wird + Ticket-granting ticket (TicketTGS) genannt und ist vergleichbar mit + einem zeitlich begrenzten Reisepass. + \item + Zugangskontrolle: Durch Vorlage ihres TicketTGS kann Alice einen + Ticket-gewährenden Server (TGS) anfordern, um Zugang zu einem Dienst + zu erhalten, der von einem bestimmten Server S1 bereitgestellt wird. + Der TGS entscheidet, ob der Zugang erlaubt wird und antwortet mit + einem TicketS1 für den Server S. + \item + Schlüsselaustausch: Der Authentifizierungsserver stellt einen + Sitzungsschlüssel für die Kommunikation zwischen Alice und TGS + bereit, und der TGS stellt einen Sitzungsschlüssel für die + Kommunikation zwischen Alice und S1 bereit. Die Verwendung dieser + Sitzungsschlüssel dient auch der Authentifizierung. + \end{itemize} + \end{itemize} + + Zugriff auf einen Dienst mit Kerberos - Protokollübersicht + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Kerberos.png} + \item + Der Benutzer meldet sich an seiner Arbeitsstation an und fordert den + Zugriff auf einen Dienst an: + + \begin{itemize} + \item + Die Workstation repräsentiert ihn im Kerberos-Protokoll und sendet + die erste Nachricht an den Authentifizierungsserver AS, die seinen + Namen, den Namen eines geeigneten Ticket-Granting-Servers TGS und + einen Zeitstempel \$t\_A\$ enthält: + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow AS:(A, TGS, t\_A)\$ + \end{enumerate} + \item + Der AS prüft, ob A sich für den Zugang zu den Diensten + authentifizieren darf, generiert aus A's Passwort (das ihm bekannt + ist) den Schlüssel KA, extrahiert die Arbeitsplatzadresse \$Addr\_A\$ + der Anfrage, erstellt ein Ticket \$Ticket\_\{TGS\}\$ und einen + Sitzungsschlüssel \$K\_\{A,TGS\}\$ und sendet die folgende Nachricht + an A: 2. \$AS\textbackslash rightarrow A:\{K\_\{A,TGS\}, TGS, + t\_\{AS\}, LifetimeTicket\_\{TGS\}, Ticket\_\{TGS\}\}\emph{\{K\_A\}\$ + mit \$Ticket}\{TGS\}=\{K\_\{A,TGS\},A, Addr\_A, TGS, t\_\{AS\}, + LifetimeTicket\_\{TGS\}\}\emph{\{K}\{AS,TGS\}\}\$ + \item + Nach Erhalt dieser Nachricht fordert die Workstation Alice auf, ihr + Passwort einzugeben, berechnet daraus den Schlüssel \$K\_A\$ und + entschlüsselt die Nachricht mit diesem Schlüssel. Wenn Alice nicht ihr + ,,authentisches'' Passwort angibt, sind die extrahierten Werte + ,,Müll'' und der Rest des Protokolls schlägt fehl. + \item + Alice erstellt einen sogenannten Authenticator und sendet ihn zusammen + mit dem Ticket und dem Namen des Servers \$S1\$ an TGS: 3. + \$A\textbackslash rightarrow TGS:(S1, Ticket\_\{TGS\}, + Authenticator\_\{A,TGS\})\$ mit Authenticator + \$A,TGS=\{A,Addr\_A,t'\emph{A\}}\{K\_\{A,TGS\}\}\$ + \item + Nach Erhalt entschlüsselt TGS \$Ticket\_\{TGS\}\$, extrahiert daraus + den Schlüssel \$K\_\{A,TGS\}\$ und verwendet diesen Schlüssel zur + Entschlüsselung von \$Authenticator\_\{A,TGS\}\$. Wenn Name und + Adresse des Authentifikators und des Tickets übereinstimmen und der + Zeitstempel \$t'\emph{A\$ noch frisch ist, wird geprüft, ob A auf den + Dienst S1 zugreifen darf, und die folgende Nachricht erstellt: 4. + \$TGS\textbackslash rightarrow A:\{K}\{A,S1\}, S1, t\_\{TGS\}, + Ticket\_\{S1\}\}\emph{\{K}\{A,TGS\}\}\$ mit + \$Ticket\_\{S1\}=\{K\_\{A,S1\}, A, Addr\_A, S1, t\_\{TGS\}, + LifetimeTicket\_\{S1\}\}\emph{\{K}\{TGS,S\}\}\$ + \item + Alice entschlüsselt die Nachricht und verfügt nun über einen + Sitzungsschlüssel für die sichere Kommunikation mit S1. Sie sendet nun + eine Nachricht an S1, um ihm ihr Ticket und einen neuen + Authentifikator zu zeigen: 5. \$A\textbackslash rightarrow + S1:(Ticket\_\{S1\}, Authenticator\_\{A,S1\})\$ mit + \$Authenticator\_\{A,S1\}=\{A,Addr\_A, t''\emph{A\}}\{K\_\{A,S1\}\}\$ + \item + Nach Erhalt entschlüsselt S1 das Ticket mit dem Schlüssel + \$K\_\{TGS,S1\}\$, den er mit TGS teilt, und erhält den + Sitzungsschlüssel \$K\_\{A,S1\}\$ für die sichere Kommunikation mit A. + Mit diesem Schlüssel überprüft er den Authentifikator und antwortet A: + 6. \$S1\textbackslash rightarrow A:\{t'\,'\emph{A+1\}}\{K\_\{A,S\}\}\$ + \item + Durch Entschlüsselung dieser Nachricht und Überprüfung des enthaltenen + Wertes kann Alice nachweisen, dass sie wirklich mit S1 kommuniziert, + da nur er (neben TGS) den Schlüssel \$K\_\{TGS,S1\}\$ zur + Entschlüsselung von \$Ticket\_\{S1\}\$ kennt, der den + Sitzungsschlüssel \$K\_\{A,S1\}\$ enthält, und somit nur er in der + Lage ist, \$Authenticator\_\{A,S1\}\$ zu entschlüsseln und mit + \$t''\emph{\{A+1\}\$ verschlüsselt mit \$K}\{A,S\}\$ zu antworten + \item + Das oben beschriebene Protokoll ist der Kerberos-Dialog der Version 4. + + \begin{itemize} + \item + In diesem Protokoll wurden eine Reihe von Mängeln festgestellt, so + dass eine neue Version 5 des Protokolls definiert wurde, auf die wir + später eingehen werden... + \item + Wo liegt eigentlich das Problem? + \end{itemize} + \end{itemize} + + + \subsubsection{Kerberos für mehrere + Domänen} + + \begin{itemize} + \item + Stellen Sie sich eine Organisation mit Workstation-Clustern an zwei + verschiedenen Standorten vor, und stellen Sie sich vor, dass Benutzer + A von Standort 1 einen Server von Standort 2 benutzen möchte: + + \begin{itemize} + \item + Wenn beide Standorte ihre eigenen Kerberos-Server und + Benutzerdatenbanken (mit Passwörtern) verwenden, gibt es in der Tat + zwei verschiedene Domänen, in der Kerberos-Terminologie auch Realms + genannt. + \item + Um zu vermeiden, dass der Benutzer A in beiden Realms registriert + sein muss, ermöglicht Kerberos eine Inter-Realm-Authentifizierung. + \end{itemize} + \item + Die Inter-Realm-Authentifizierung erfordert, dass die + Ticket-erteilenden Server beider Domänen einen geheimen Schlüssel + \$K\_\{TGS1,TGS2\}\$ teilen. + + \begin{itemize} + \item + Die Grundidee ist, dass der TGS eines anderen Realms als normaler + Server angesehen wird, für den der TGS des lokalen Realms ein Ticket + ausstellen kann. + \item + Nachdem Alice das Ticket für den entfernten Realm erhalten hat, + fordert sie ein Ticket für den Dienst beim entfernten TGS an. + \item + Dies bedeutet jedoch, dass der entfernte Realm dem + Kerberos-Authentifizierungsdienst der Heimatdomäne eines + ,,besuchenden'' Benutzers vertrauen muss! + \item + Skalierbarkeitsproblem: n Realms benötigen + \$n\textbackslash times(n-1)/2\$ geheime Schlüssel! + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-multi-domain-kerberos.png} + \item + Nachrichten, die während eines Protokolllaufs mit mehreren Domänen + ausgetauscht werden: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow AS1:(A,TGS1, t\_A)\$ + \item + \$AS1\textbackslash rightarrow A:\{K\_\{A,TGS1\}, TGS1, t\_\{AS\}, + LifetimeTicket\_\{TGS1\}, Ticket\_\{TGS1\}\}\emph{\{K\_A\}\$ mit + \$Ticket}\{TGS1\}=\{K\_\{A,TGS1\}, A, Addr\_A, TGS1, t\_\{AS\}, + LifetimeTicket\_\{TGS1\}\}\emph{\{K}\{AS,TGS1\}\}\$ + \item + \$A\textbackslash rightarrow + TGS1:(TGS2,Ticket\_\{TGS1\},Authenticator\_\{A,TGS1\})\$ mit + \$Authenticator\_\{A,TGS1\}=\{A,Addr\_A,t'\emph{A\}}\{K\_\{A,TGS1\}\}\$ + \item + \$TGS1:\{K\_\{A,TGS2\}, TGS2, t\_\{TGS1\}, + Ticket\_\{TGS2\}\}\emph{\{K}\{A,TGS1\}\}\$ mit + \$Ticket\_\{TGS2\}=\{K\_\{A,TGS2\}, A, Addr\_A, TGS2, t\_\{TGS1\}, + LifetimeTicket\_\{TGS2\}\}\emph{\{K}\{TGS1,TGS2\}\}\$ + \item + \$A\textbackslash rightarrow + TGS2:(S2,Ticket\_\{TGS2\},Authenticator\_\{A,TGS2\})\$ mit + \$Authenticator\_\{A,TGS2\}=\{A,Addr\_A,t''\emph{A\}}\{K\_\{A,TGS2\}\}\$ + \item + \$TGS2\textbackslash rightarrow + A:\{K\_\{A,S2\},S2,t\_\{TGS2\},Ticket\_\{S2\}\}\emph{\{K}\{A,TGS2\}\}\$ + with \$Ticket\_\{S2\}=\{K\_\{A,S2\},A,Addr\_A,S2,t\_\{TGS2\}, + LifetimeTicket\_\{S2\}\}\emph{\{K}\{TGS2,S2\}\}\$ + \item + S2:(Ticket\_\{S2\}, Authentifikator\_\{A,S2\})\$ mit + \$Authentifikator\_\{A,S2\}=\{A,Addr\_A,t'''\emph{A\}}\{K\_\{A,S2\}\}\$ + \item + \$S2\textbackslash rightarrow + A:\{t'\,'\,'\emph{A+1\}}\{K\_\{A,S2\}\}\$ + \end{enumerate} + \end{itemize} + + + \subsubsection{Kerberos Version 5} + + \begin{itemize} + \item + Letzter Standard von 2005 (RFC 4120) + \item + Entwickelt als Reaktion auf Schwachstellen, die bei Kerberos v4 + bekannt wurden + + \begin{itemize} + \item + Enthält explizite Prüfsummen, um zu verifizieren, dass die + Nachrichten nicht verändert wurden + \item + Unterstützt mehrere Chiffren (andere als das unsichere DES) + \end{itemize} + \item + Einheitliches Nachrichtenformat - Nachrichten an den + Authentifizierungsserver und den Ticketvergabeserver sind sehr ähnlich + \item + Flexible ASN.1-Kodierung der Nachrichten, ermöglicht spätere + Erweiterungen + \item + Im Folgenden wird nur eine vereinfachte Version gezeigt, weit mehr + Funktionen sind standardisiert, z.B: + + \begin{itemize} + \item + Client-zu-Client gegenseitige Authentifizierung + \item + Vorauthentifizierte Tickets + \item + Erneuerung von Tickets + \item + Multidomain Kerberos + \end{itemize} + \item + Der Authentifizierungsdialog in Kerberos Version 5 ist ähnlich wie in + Version 4 + \item + Der Austausch des Authentifizierungsdienstes: Bei der ersten + Kontaktaufnahme sendet der Client A nicht nur Namen und Zeitstempel, + sondern auch eine Nonce n , die hilft, Wiederholungen zu vermeiden, + wenn sich die Zeit geändert hat; es ist auch möglich, mehrere Adressen + anzugeben + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow + AS:(A,TGS,t\_\{start\},t\_\{end\},n,Addr\_A, ...)\$ + \end{enumerate} + \item + Die Antwort enthält ein Klartext-Ticket und verschlüsselte + Informationen: 2. \$AS\textbackslash rightarrow A: + (A,Ticket\_\{TGS\},\{K\_\{A,TGS\}, + LastRequest,n,t\_\{expire\},t\_\{AS\},t\_\{start\},t\_\{end\},t\_\{renew\},TGS, + Addr\_A\}\emph{\{K\_A\})\$ mit \$Ticket}\{TGS\}=(TGS, + \{K\_\{A,TGS\},A,transited, t\_\{AS\}, + t\_\{start\},t\_\{end\},t\_\{renew\},Addr\_A,restrictions\}\emph{\{K}\{AS,TGS\}\})\$ + + \begin{itemize} + \item + LastRequest gibt den letzten Login des Benutzers an transited + enthält die Vertrauenskette Multidomain Kerberos Restriktionen für + den Benutzer können dem TGS und den Servern übergeben werden + \$t\_\{expire\}\$ und \$t\_\{end\}\$ enthalten verschiedene Zeiten, + um die Erneuerung von Tickets zu ermöglichen (wobei die Start- und + Endzeit einfach aktualisiert werden können) + \end{itemize} + \item + Der Dialog zum TGS ist mit dem Ausgangsdialog harmonisiert: Er enthält + zusätzlich Tickets und einen Authentifikator, der beweist, dass A + \$K\_\{A,TGS\}\$ kennt 3. \$Aufrechtes + TGS:(A,S1,t\_\{start\},t\_\{end\},n',Addr\_A,Authenticator\_\{A,TGS\}, + Tickets,...)\$ mit \$Authenticator\_\{A,TGS\}=\{A, CheckSum, + t\_\{A'\}, K\_\{A,TGS'\}, Seq\#,...\}\emph{\{K}\{A,TGS\}\}\$ Hinweis: + Der Authentifikator enthält jetzt eine kryptographische Prüfsumme! + \item + Die Antwort an A ist völlig analog zu Nachricht 2: 4. + \$TGS\textbackslash rightarrow + A:(A,Ticket\_\{S1\},\{K\_\{A,S1\},LastRequest, + n',t\_\{expire\},t\_\{TGS\},t\_\{start\},t\_\{end\},t\_\{renew\},S1,Addr\_A\}\emph{\{K}\{A,TGS\}\})\$ + \item + Der Austausch mit dem Server ist ebenfalls ähnlich wie bei Version 4, + aber mit dem Authentifikator ist eine explizite Prüfsumme möglich: 5. + \$A\textbackslash rightarrow S1:(Ticket\_\{S1\}, + Authenticator\_\{A,S1\})\$ mit + \$Authenticator\_\{A,S1\}=\{A,CheckSum,t\_\{A''\},K\_\{A,S1\}', Seq\#, + ...\}\emph{\{K}\{A,S1\}\}\$ + \item + Nach Erhalt entschlüsselt S1 das Ticket mit dem Schlüssel + \$K\_\{TGS,S1\}\$, den er mit TGS teilt, und erhält den + Sitzungsschlüssel \$K\_\{A,S1\}\$ für die sichere Kommunikation mit A. + Mit diesem Schlüssel überprüft er den Authentifikator und antwortet A: + 6. \$S1\textbackslash rightarrow + A:\{t\_\{S1\},K\_\{A,S1\}',Seq\#,...\}\emph{\{K}\{A,S1\}\}\$ + \item + Alles in allem behebt der Dialog mehrere potenzielle Schwachstellen, + während andere bestehen bleiben: + + \begin{itemize} + \item + Sequenznummern und Nonces ermöglichen eine zusätzliche + Replay-Prüfung, wenn sich die Zeitbasis ändert + \item + Explizite Prüfsummen verhindern die Änderung von Daten innerhalb von + Tickets + \item + Zentrale Server sind immer noch potentielle Single-Points-of-Failure + \item + Für den ersten Austausch ist immer noch eine gewisse + Zeitsynchronisierung erforderlich. + \end{itemize} + \end{itemize} + + + \subsection{Fortgeschrittene Methoden zur + Passwortauthentifizierung} + + \begin{itemize} + \item + Alle gezeigten Protokolle haben eine gemeinsame Schwäche: + + \begin{itemize} + \item + Passwörter müssen leicht zu merken und leicht einzugeben sein + \$\textbackslash rightarrow\$ Geringe Entropie + \item + Angreifer können schnell alle möglichen Kombinationen ausprobieren + \item + Offline, über Grafikkarten, Cloud-Computer, spezielle Hardware... + \item + Asymmetrische Situation + \end{itemize} + \item + Mögliche Lösungen: + + \begin{itemize} + \item + Schlüsselableitungsfunktionen + + \begin{itemize} + \item + Erschweren Brute-Force-Angriffe durch extrem häufiges Hashing + \item + Erfordert auch Aufwand durch legitime Geräte + \item + Nur linearer Sicherheitsgewinn + \item + Bessere Funktionen verbrauchen viel Speicher, um Angriffe mit + Grafikkarten und spezieller Hardware undurchführbar zu machen + \end{itemize} + \item + Passwort-authentifizierter Schlüsselaustausch (PAKE) + \end{itemize} + \item + Passwortauthentifizierter Schlüsselaustausch (PAKE) - Grundlegende + Idee + + \begin{itemize} + \item + Durchführen eines Schlüsselaustauschs mit asymmetrischer + Kryptographie + \item + Authentifizierung von Peers mit einem Passwort unter Verwendung + eines Zero Knowledge Proofs + \item + Die Peers können nur feststellen, ob die Passwörter übereinstimmen + oder nicht + \item + Keine weiteren Informationen, um effiziente Bruteforce-Suchen + durchzuführen + + \begin{itemize} + \item + Würde das Lösen schwieriger Probleme erfordern, z. B. eine Art + DH-Problem + \item + Macht Offline-Angriffe undurchführbar + \end{itemize} + \item + Online-Angriffe möglich, können aber entdeckt werden + \end{itemize} + \end{itemize} + + + \subsection{PAKE-Schemata: EKE} + + \begin{itemize} + \item + Ein einfaches erstes Protokoll ist Encrypted Key Exchange (EKE) + {[}BM92{]} + \item + Der Dialog beginnt damit, dass A ein privates/öffentliches + Schlüsselpaar zur einmaligen Verwendung erzeugt und den öffentlichen + Schlüssel \$+K\_\{ar\}\$ verschlüsselt mit dem Passwort \$K\_\{A,B\}\$ + an B sendet + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow B:A,\{+K\_\{ar\}\}\emph{\{K}\{A,B\}\}\$ + \end{enumerate} + \item + B wählt einen symmetrischen Sitzungsschlüssel \$K\_r\$ und sendet ihn + verschlüsselt mit dem öffentlichen Schlüssel und dem Passwort zurück + an A + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$B\textbackslash rightarrow + A:\{\{K\_r\}\emph{\{+K}\{ar\}\}\}\emph{\{K}\{A,B\}\}\$ + \end{enumerate} + \item + A und B teilen sich nun einen gemeinsamen Sitzungsschlüssel und + beweisen ihr Wissen darüber durch den Austausch von Nonces + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow B:\{r\_A\}\_\{K\_r\}\$ + \item + \$B\textbackslash rightarrow A:\{r\_A,r\_B\}\_\{K\_r\}\$ + \item + \$A\textbackslash rightarrow B:\{r\_B\}\_\{K\_r\}\$ + \end{enumerate} + \item + Nach diesem Schritt ist sichergestellt, dass beide \$K\_\{A,B\}\$ + gekannt haben müssen und es keinen Man-in-the-Middle-Angriff gegeben + hat + \end{itemize} + + + \subsubsection{Sicherheitsdiskussion} + + \begin{itemize} + \item + Resistenz gegen Offline-Angriffe hängt davon ab, dass \$+K\_\{ar\}\$ + nicht von Zufallszahlen zu unterscheiden ist + + \begin{itemize} + \item + Was bedeutet das für ECC? + \item + Für RSA schlagen die Autoren vor, e zu verschlüsseln und n im + Klartext zu senden + + \begin{itemize} + \item + n hat keine kleinen Primfaktoren und ist daher von Zufallszahlen + unterscheidbar + \item + Immer noch unsicher gegen Man-in-the-Middle-Angriffe, da Angreifer + n mit besonderen Eigenschaften wählen können (z.B. \$p-1\$ und + \$q-1\$ teilbar durch 3) + \item + Antwort von B ist von Zufallszahlen unterscheidbar + \item + Details sind in {[}Par97{]} oder {[}SR14{]} zu finden. + \end{itemize} + \end{itemize} + \item + Bietet keine perfekte Vorwärtsverschwiegenheit... + \item + Aber es gibt ein anderes Protokoll von den Autoren namens DH-EKE + \end{itemize} + + + \subsubsection{DH-EKE} + + \begin{itemize} + \item + DH-EKE ist im Grunde ein DH-Austausch mit cleverer Authentifizierung + \item + A sendet DH-Austausch verschlüsselt mit dem Passwort \$K\_\{A,B\}\$ + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow B:\{g\^{}\{ra\}\textbackslash{} + mod\textbackslash{} p\}\emph{\{K}\{A,B\}\}\$ + \end{enumerate} + \item + B antwortet mit seinem Teil des DH-Austauschs (verschlüsselt mit dem + Passwort \$K\_\{A,B\}\$) und verwendet den Sitzungsschlüssel + \$K\_S=g\^{}\{ra*rb\}\textbackslash{} mod\textbackslash{} p\$, um eine + verschlüsselte Nonce \$c\_b\$ zu senden 2. + \$B\textbackslash rightarrow A:\{g\^{}\{rb\}\textbackslash{} + mod\textbackslash{} p\}\emph{\{K}\{A,B\}\}\{c\_b\}\_\{K\_s\}\$ + \item + Beide Parteien beweisen ihre Kenntnis von \$K\_S\$ 3. + \$A\textbackslash rightarrow + B:\{c\_a\textbar\textbar c\_b\}\emph{\{K\_s\} 4. + \$B\textbackslash rightarrow A:\{c\_a\}}\{K\_s\}\$ + \end{itemize} + + + \subsubsection{Sicherheitsdiskussion 2} + + \begin{itemize} + \item + Wiederum müssen verschlüsselte Daten von Zufallsdaten ununterscheidbar + sein + + \begin{itemize} + \item + Der Wert p muss klug gewählt werden, d.h. \$p-1\$ muss nahe bei + \$2\^{}\{8*n\}\$ für ausreichend große natürliche Zahlen n liegen + \item + Um Angriffe auf kleine Gruppen leicht zu verhindern, sollte + \$(p-1)/2\$ ebenfalls eine Primzahl sein. + \item + ECC ist immer noch schwierig zu realisieren + \end{itemize} + \item + Bietet perfektes Vorwärtsgeheimnis + \item + Alles in allem ein nettes Verfahren, das jedoch patentiert werden + musste + + \begin{itemize} + \item + Keine breite Anpassung + \item + Führte zur Entwicklung zahlreicher anderer Verfahren + \end{itemize} + \end{itemize} + + + \subsubsection{SRP} + + \begin{itemize} + \item + Das heute am weitesten verbreitete Protokoll: Sicheres Fernkennwort + (SRP) + \item + Mehrere Versionen: Hier SRP-6a {[}Wu02{]} + \item + Initialisierung: + + \begin{itemize} + \item + Server B wählt eine Zufallszahl \$s\_\{A,B\}\$ + \item + berechnet \$x=H(s\_\{A,B\} \textbar\textbar{} Benutzername + \textbar\textbar{} Passwort)\$ und \$v=g\^{}x\textbackslash{} + mod\textbackslash{} p\$ + \item + Benutzer werden durch \$(Benutzername, s\_\{A,B\}, v)\$ + authentifiziert + \item + Der Server braucht das Passwort nicht zu speichern + \$\textbackslash rightarrow\$ kann nicht leicht erlangt werden, wenn + der Server kompromittiert wird! + \item + Server kann diese Werte auch nicht verwenden, um sich als Benutzer + auf anderen Servern auszugeben + \item + Die Eigenschaft wird als erweitertes PAKE-Schema bezeichnet + \end{itemize} + \end{itemize} + + + \subsubsection{SRP - Dialog} + + \begin{itemize} + \item + A initiiert die Verbindung durch Senden seines Benutzernamens + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A\textbackslash rightarrow B: A\$ + \end{enumerate} + \item + B antwortet mit ausgewählten kryptographischen Parametern und einem + Verifizierer v, der durch einen DH-Austausch ,,geblendet'' ist 2. + \$B\textbackslash rightarrow A: p, g, s\_\{A,B\}, (H(g + \textbar\textbar{} p)*v + g\^{}\{rb\})\textbackslash{} + mod\textbackslash{} p\$ + \item + A berechnet den gemeinsamen Sitzungsschlüssel durch \$K\_S=(Y\_B-H(g + \textbar\textbar{} p)\emph{g\^{}x)\^{}\{ra+u}x\}\textbackslash{} + mod\textbackslash{} p\$, mit \$u=H(Y\_A\textbar\textbar Y\_B)\$, und + sendet seinen Teil des DH-Austauschs und eine Bestätigung zurück, dass + er \$K\_S\$ kennt 3. \$A\textbackslash rightarrow + B:g\^{}\{ra\}\textbackslash{} mod\textbackslash{} p, + H(Y\_A,Y\_B,K\_S)\$ + \item + B berechnet \$K\_S'=(Y\_A v\^{}u)\^{}\{rb\}\textbackslash{} + mod\textbackslash{} p\$ und beweist seine Kenntnis 4. + \$B\textbackslash rightarrow A:H(Y\_A, H(Y\_A,Y\_B,K\_S),K\_S')\$ + \item + \$K\_S'\$ und \$K\_S\$ stimmen überein, wenn es keinen + Man-in-the-Middle-Angriff gegeben hat + \end{itemize} + + + \subsubsection{SRP - Diskussion} + + \begin{itemize} + \item + Sicheres Schema + + \begin{itemize} + \item + Gegenseitige Authentifizierung zwischen Server und Client + \item + Erweiterung erhöht die Sicherheit in Client/Server-Szenarien + \item + Keine Unterstützung für ECC, da es Feldarithmetik erfordert + \end{itemize} + \item + Patentiert, aber frei zu verwenden + \item + Unterstützung für TLS, IPsec, ... + \end{itemize} + + + \subsection{X.509 - Einführung} + + \begin{itemize} + \item + X.509 ist eine internationale Empfehlung der ITU-T und gehört zur + X.500-Reihe, die Verzeichnisdienste definiert: + + \begin{itemize} + \item + Die erste Version von X.509 wurde 1988 standardisiert. + \item + Eine zweite Version, die 1993 standardisiert wurde, löste einige + Sicherheitsbedenken + \item + Eine dritte Version von X.509 wird derzeit von der IETF in RFC 4211 + gepflegt. + \end{itemize} + \item + X.509 definiert einen Rahmen für die Bereitstellung von + Authentifizierungsdiensten, der Folgendes umfasst: + + \begin{itemize} + \item + Zertifizierung von öffentlichen Schlüsseln und Handhabung von + Zertifikaten: + + \begin{itemize} + \item + Zertifikatsformat + \item + Zertifikats-Hierarchie + \item + Zertifikatswiderrufslisten + \end{itemize} + \item + Drei verschiedene Dialoge für die direkte Authentifizierung: + + \begin{itemize} + \item + Einseitige Authentifizierung, erfordert synchronisierte Uhren + \item + Gegenseitige Zwei-Wege-Authentifizierung, erfordert immer noch + synchronisierte Uhren + \item + Gegenseitige Drei-Wege-Authentifizierung, die vollständig auf + Zufallszahlen basiert + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{X.509 - Zertifikate mit öffentlichem + Schlüssel} + + % \includegraphics{Assets/NetworkSecurity-x509-certificates.png} + + \begin{itemize} + \item + Ein Public-Key-Zertifikat ist eine Art Reisepass, der bescheinigt, + dass ein öffentlicher Schlüssel zu einem bestimmten Namen gehört + \item + Zertifikate werden von Zertifizierungsstellen (CA) ausgestellt. + \item + Wenn alle Nutzer den öffentlichen Schlüssel der CA kennen, kann jeder + Nutzer jedes von dieser CA ausgestellte Zertifikat überprüfen. + \item + Zertifikate können die Online-Teilnahme eines TTP verhindern + \item + Die Sicherheit des privaten Schlüssels der CA ist entscheidend für die + Sicherheit aller Nutzer! + \item + Notation eines Zertifikats, das einen öffentlichen Schlüssel \$+K\_A\$ + an Benutzer A bindet, ausgestellt von der Zertifizierungsstelle CA + unter Verwendung ihres privaten Schlüssels \$-CK\_\{CA\}\$: + + \begin{itemize} + \item + \$Cert\_\{-CK\_\{CA\}\}(+K\_A) = CA{[}V, SN, AI, CA, T\_\{CA\}, A, + +K\_A{]}\$ mit: + + \begin{itemize} + \item + V = Versionsnummer + \item + SN = Seriennummer + \item + AI = Algorithmus-Bezeichner des verwendeten Signatur-Algorithmus + \item + CA = Name der Zertifizierungsstelle + \item + \$T\_\{CA\}\$ = Gültigkeitsdauer dieses Zertifikats + \item + A = Name, an den der öffentliche Schlüssel in diesem Zertifikat + gebunden ist + \item + \$+K\_A\$ = öffentlicher Schlüssel, der an einen Namen gebunden + wird + \end{itemize} + \item + Die Kurzschreibweise \$CA{[}m{]}\$ steht für + \$(m,\{H(m)\}\emph{\{-CK}\{CA\}\})\$ + \item + Eine andere Kurzschreibweise für \$Cert\_\{-CK\_\{CA\}\}(+K\_A)\$ + ist \$CA\textless{}\textgreater\$ + \end{itemize} + \end{itemize} + + + \subsubsection{X.509 - Zertifikatsketten \& + Zertifikatshierarchie} + + \begin{itemize} + \item + Betrachten wir nun zwei Benutzer Alice und Bob, die in verschiedenen + Ländern leben und sicher kommunizieren wollen: + + \begin{itemize} + \item + Die Wahrscheinlichkeit ist recht hoch, dass ihre öffentlichen + Schlüssel von verschiedenen CAs zertifiziert sind + \item + Nennen wir die Zertifizierungsstelle von Alice CA und die von Bob CB + \item + Wenn Alice CB nicht vertraut oder gar kennt, dann ist Bobs + Zertifikat \$CB\textless{}\textgreater\$ für sie nutzlos, dasselbe + gilt in der anderen Richtung + \end{itemize} + \item + Eine Lösung für dieses Problem ist die Konstruktion von + Zertifikatsketten: + + \begin{itemize} + \item + Stellen Sie sich einmal vor, dass CA und CB einander kennen und + einander vertrauen. + + \begin{itemize} + \item + Ein Beispiel aus der realen Welt für dieses Konzept ist das + gegenseitige Vertrauen zwischen Ländern hinsichtlich ihrer + Passausgabestellen + \end{itemize} + \item + Wenn CA den öffentlichen Schlüssel von CB mit einem Zertifikat + \$CA\textless{}\textgreater\$ und CB den öffentlichen Schlüssel von + CA mit einem Zertifikat \$CB\textless{}\textgreater\$ beglaubigt, + können A und B ihre Zertifikate anhand einer Zertifikatskette + überprüfen: + + \begin{itemize} + \item + Nachdem ihr \$CB\textless{}\textgreater\$ vorgelegt wurde, + versucht Alice herauszufinden, ob es ein Zertifikat + \$CA\textless{}\textgreater\$ gibt. + \item + Sie überprüft dann die Kette: \$CA\textless{}\textgreater, + CB\textless{}\textgreater\$ + \end{itemize} + \end{itemize} + \item + Zertifikatsketten müssen nicht auf eine Länge von zwei Zertifikaten + beschränkt sein: + + \begin{itemize} + \item + \$CA\textless{}\textgreater, CC\textless{}\textgreater, + CD\textless{}\textgreater, CE\textless{}\textgreater, + CG\textless{}\$ würde es Alice erlauben, das von CG ausgestellte + Zertifikat des Benutzers G zu überprüfen, auch wenn sie nur ihre + eigene Zertifizierungsstelle CA kennt und ihr vertraut. + \item + Tatsächlich wird das Vertrauen von A in den Schlüssel +KG durch eine + Vertrauenskette zwischen Zertifizierungsstellen hergestellt. + \item + Wenn Alice jedoch \$CG\textless{}\textgreater\$ vorgelegt wird, ist + es nicht offensichtlich, welche Zertifikate sie zur Überprüfung + benötigt + \end{itemize} + \item + X.509 schlägt daher vor, dass die Zertifizierungsstellen in einer + Zertifizierungshierarchie angeordnet werden, so dass die Navigation + einfach ist: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-x509-hierarchy.png} + \end{itemize} + \item + Verbleibendes Problem: + + \begin{itemize} + \item + Zertifizierungspfade können ziemlich lang werden + \item + Die Kompromittierung eines einzigen Zwischenzertifikats reicht aus, + um die Sicherheit zu brechen + \end{itemize} + \item + Führt zu zwei Entwicklungen + + \begin{itemize} + \item + Kreuzzertifizierung: + + \begin{itemize} + \item + Ermöglicht das Signieren von Stammzertifikaten untereinander + \item + Erlaubt aber auch ,,Abkürzungen'' im Zertifikatswald + \item + Macht die Navigation komplexer, aber potenziell mehrwegfähig + \end{itemize} + \item + Anheften von Zertifikaten: + + \begin{itemize} + \item + Ermöglicht Anwendungen, z. B. Webbrowsern, zu lernen, dass Peers + nur Zertifikate von einer bestimmten CA verwenden + \item + Wird z. B. von Google Chrome verwendet, nachdem + Man-in-the-Middle-Angriffe auf google.com bekannt wurden + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{X.509 - + Zertifikatssperrung} + + \begin{itemize} + \item + Nehmen wir nun an, dass der private Schlüssel von Alice kompromittiert + wurde, z.B. weil Eve in ihren Computer eingebrochen ist, ihren + privaten Schlüssel aus einer Datei gelesen und das Passwort geknackt + hat, das sie zum Schutz des privaten Schlüssels verwendet hat: + + \begin{itemize} + \item + Wenn Alice feststellt, dass ihr privater Schlüssel kompromittiert + wurde, möchte sie unbedingt den Widerruf des entsprechenden + Zertifikats für den öffentlichen Schlüssel beantragen. + \item + Wenn das Zertifikat nicht widerrufen wird, könnte sich Eve bis zum + Ende der Gültigkeitsdauer des Zertifikats weiterhin als Alice + ausgeben. + \end{itemize} + \item + Eine noch schlimmere Situation tritt ein, wenn der private Schlüssel + einer Zertifizierungsstelle kompromittiert wird: + + \begin{itemize} + \item + Dies bedeutet, dass alle mit diesem Schlüssel signierten Zertifikate + widerrufen werden müssen! + \end{itemize} + \item + Der Widerruf von Zertifikaten wird durch das Führen von + Zertifikatswiderrufslisten (CRL) realisiert: + + \begin{itemize} + \item + CRLs werden im X.500-Verzeichnis gespeichert, oder Erweiterungen + können auf eine URL verweisen + \item + Bei der Überprüfung eines Zertifikats muss auch geprüft werden, ob + das Zertifikat noch nicht widerrufen wurde (Suche nach dem + Zertifikat in der CRL) + \item + Der Widerruf von Zertifikaten ist ein relativ langsamer und teurer + Vorgang + \end{itemize} + \end{itemize} + + + \subsubsection{X.509 - + Authentifizierungsprotokolle} + + \begin{itemize} + \item + Einweg-Authentifizierung: + + \begin{itemize} + \item + Wenn nur Alice sich gegenüber Bob authentifizieren will, sendet sie + folgende Nachricht an Bob: + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$(A{[}t\_A, r\_A, B, sgnData\_A, \{K\_\{A,B\}\}\emph{\{+KB\}{]}, + CA\textless{}\textgreater)\$, wobei \$sgnData\_A\$ optionale Daten + darstellt, die von \$A signiert werden sollen, + \{K}\{A,B\}\}\_\{+K\_B\}\$ ein optionaler Sitzungsschlüssel ist, der + mit Bobs öffentlichem Schlüssel verschlüsselt wird, und + \$CA\textless{}\textgreater\$ ebenfalls optional ist + \end{enumerate} + + \begin{itemize} + \item + Beim Empfang dieser Nachricht verifiziert Bob mit \$+K\_\{CA\}\$ das + enthaltene Zertifikat, extrahiert Alices öffentlichen Schlüssel, + überprüft Alices Signatur der Nachricht und die Aktualität der + Nachricht \$(t\_A)\$ und entschlüsselt optional den enthaltenen + Sitzungsschlüssel \$K\_\{A,B\}\$, den Alice vorgeschlagen hat + \end{itemize} + \item + Zwei-Wege-Authentifizierung: + + \begin{itemize} + \item + Wenn eine gegenseitige Authentifizierung erwünscht ist, dann + erstellt Bob eine ähnliche Nachricht: + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \setcounter{enumi}{1} + \item + \$(B{[}t\_B, r\_B, A, r\_A, sgnData\_B,\{K\_\{B,A\}\}\_\{+K\_A\}{]}, + CA\textless{}\textgreater)\$ der enthaltene Zeitstempel \$t\_B\$ ist + nicht wirklich erforderlich, da Alice überprüfen kann, ob die + signierte Nachricht die Zufallszahl \$r\_A\$ enthält + \end{enumerate} + \item + Drei-Wege-Authentifizierung: + + \begin{itemize} + \item + Wenn Alice und Bob nicht sicher sind, ob sie synchrone Uhren haben, + sendet Alice die folgende Nachricht an Bob: + \end{itemize} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \setcounter{enumi}{2} + \item + \$A{[}r\_B{]}\$ + \end{enumerate} + + \begin{itemize} + \item + Die Rechtzeitigkeit der Teilnahme von Alice am + Authentifizierungsdialog wird also durch die Unterzeichnung der + ,,frischen'' Zufallszahl \$r\_B\$ nachgewiesen. + \end{itemize} + \item + Anmerkung zum Signaturalgorithmus: + + \begin{itemize} + \item + Wie aus der Verwendung von Zertifikaten ersichtlich, schlägt X.509 + vor, die Authentifizierungsnachrichten mit asymmetrischer + Kryptographie zu signieren. + \item + Das Authentifizierungsprotokoll selbst kann jedoch auch mit + symmetrischer Kryptographie eingesetzt werden: + + \begin{itemize} + \item + In diesem Fall müssen sich A und B vor jedem Protokolldurchlauf + auf einen geheimen Authentifizierungsschlüssel \$AK\_\{A,B\}\$ + geeinigt haben, und + \item + die Nachrichten werden durch Anhängen eines mit diesem Schlüssel + berechneten MAC signiert. + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Formale Validierung von kryptographischen + Protokollen} + + \begin{itemize} + \item + Wie wir am Beispiel des Needham-Schroeder-Protokolls gesehen haben, + ist die Sicherheit eines kryptografischen Protokolls nicht einfach zu + beurteilen: + + \begin{itemize} + \item + Es gibt viele weitere Beispiele für Protokollfehler in + kryptografischen Protokollen, die manchmal erst Jahre nach der + Veröffentlichung des Protokolls entdeckt wurden + + \begin{itemize} + \item + Eine frühe Version des X.509-Standards enthielt einen Fehler, der + dem Fehler im Needham-Schroeder-Protokoll ähnlich war. + \end{itemize} + \item + Daraus ergibt sich der Bedarf an formalen Methoden zur Analyse der + Eigenschaften von kryptographischen Protokollen + \end{itemize} + \item + Kategorien von formalen Validierungsmethoden für kryptografische + Protokolle: + + \begin{itemize} + \item + Allgemeine Ansätze zur Analyse spezifischer Protokolleigenschaften: + + \begin{itemize} + \item + Beispiele: Finite-State-Machine-basierte Ansätze, Prädikatenkalkül + erster Ordnung, Allzweck-Spezifikationssprachen + \item + Hauptnachteil: Sicherheit unterscheidet sich wesentlich von + Korrektheit, da für letztere keine böswillige Manipulation + angenommen werden muss + \end{itemize} + \end{itemize} + \item + Kategorien von formalen Validierungsmethoden für kryptographische + Protokolle: + + \begin{itemize} + \item + Expertensystembasierte Ansätze: + + \begin{itemize} + \item + Das Wissen menschlicher Experten wird in deduktive Regeln + formalisiert, die von einem Protokolldesigner zur Untersuchung + verschiedener Szenarien verwendet werden können. + \item + Hauptnachteil: nicht gut geeignet, um Schwachstellen in + kryptografischen Protokollen zu finden, die auf unbekannten + Angriffstechniken beruhen + \end{itemize} + \item + Algebraische Ansätze: + + \begin{itemize} + \item + Kryptografische Protokolle werden als algebraische Systeme + spezifiziert + \item + Die Analyse wird durchgeführt, indem algebraische + Termumschreibungseigenschaften des Modells untersucht werden und + geprüft wird, ob das Modell bestimmte erwünschte oder unerwünschte + Zustände erreichen kann + \end{itemize} + \item + Spezifische logikbasierte Ansätze: + + \begin{itemize} + \item + Ansätze dieser Klasse definieren einen Satz von Prädikaten und + eine Abbildung der während eines Protokolllaufs ausgetauschten + Nachrichten auf einen Satz von Formeln + \item + Ein generischer Satz von Regeln erlaubt es dann, das Wissen und + den Glauben zu analysieren, der von den Peer-Entitäten eines + kryptographischen Protokolls während eines Protokolllaufs erlangt + wird (recht erfolgreicher Ansatz: GNY-Logik {[}GNY90a{]}) + \end{itemize} + \end{itemize} + \end{itemize} + + + \section{Sichere + Gruppenkommunikation} + + + \section{Zugriffskontrolle} + + + \subsection{Was ist Zugangskontrolle?} + + \begin{itemize} + \item + Definition: Die Zugriffskontrolle umfasst die Mechanismen, die die + Vermittlung von Subjektanfragen für den Zugriff auf Objekte, wie sie + in einer bestimmten Sicherheitspolitik definiert sind, erzwingen. + \item + Ein wichtiges konzeptuelles Modell in diesem Zusammenhang ist der + Referenzmonitor: + \item + % \includegraphics{Assets/NetworkSecurity-reference-monitor.png} + \end{itemize} + + + \subsection{Sicherheitspolitik} + + \begin{itemize} + \item + Um Entscheidungen über die Zugriffskontrolle treffen zu können, muss + der Referenzmonitor die Sicherheitspolitik des Systems kennen + \item + Definition: Die Sicherheitspolitik eines Systems definiert die + Bedingungen, unter denen Subjektzugriffe auf Objekte durch die + Funktionalität des Systemreferenzmonitors vermittelt werden + \item + Bemerkungen: + + \begin{itemize} + \item + Die obige Definition wird gewöhnlich im Zusammenhang mit der + Sicherheit von Computern und Betriebssystemen gegeben. + \item + Der Referenzmonitor ist nur eine konzeptionelle Einheit, er muss + nicht unbedingt ein physisches oder logisches Gegenstück in einem + bestimmten System haben. + \item + Der Begriff Sicherheitspolitik wird oft auch in einem weiteren Sinne + verwendet, um eine Spezifikation aller Sicherheitsaspekte eines + Systems einschließlich Bedrohungen, Risiken, Sicherheitsziele, + Gegenmaßnahmen usw. zu beschreiben. + \end{itemize} + \end{itemize} + + + \subsection{Klassische Computersubjekte, Objekte und + Zugriffsarten} + + \begin{itemize} + \item + Definition: Ein Subjekt ist eine aktive Entität, die eine Anfrage nach + Ressourcen initiieren und diese Ressourcen nutzen kann, um eine + Aufgabe zu erfüllen. + \item + Definition: Ein Objekt ist ein passives Repository, das zur + Speicherung von Informationen dient + \item + Die beiden obigen Definitionen stammen aus der klassischen + Computerwissenschaft: + + \begin{itemize} + \item + Subjekte sind Prozesse, und Dateien, Verzeichnisse usw. sind + Objekte. + \end{itemize} + \item + Es ist jedoch nicht immer offensichtlich, Subjekte und Objekte im + Zusammenhang mit der Kommunikation zu identifizieren: + + \begin{itemize} + \item + Stellen Sie sich vor, eine Einheit sendet eine Nachricht an eine + andere Einheit: Ist die empfangende Einheit als Objekt zu + betrachten? + \end{itemize} + \item + Außerdem müssen wir wissen, was ein Zugriff ist und welche Arten von + Zugriffen es gibt: + + \begin{itemize} + \item + Beispiele aus der klassischen Informatik für Zugriffsarten: Lesen, + Schreiben, Ausführen + \item + Objektorientierte Sichtweise: Jede Methode eines Objekts definiert + eine Art des Zugriffs + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitskennzeichen} + + \begin{itemize} + \item + Definition: Eine Sicherheitsstufe wird als hierarchisches Attribut zu + Entitäten eines Systems definiert, um deren Sensibilitätsgrad zu + kennzeichnen + + \begin{itemize} + \item + Beispiele: + + \begin{itemize} + \item + Militär: unklassifiziert \textless{} vertraulich \textless{} + geheim \textless{} streng geheim + \item + Kommerziell: öffentlich \textless{} sensibel \textless{} + proprietär \textless{} eingeschränkt + \end{itemize} + \end{itemize} + \item + Definition: Eine Sicherheitskategorie ist definiert als eine + nicht-hierarchische Gruppierung von Entitäten, um den Grad ihrer + Sensibilität zu kennzeichnen. + + \begin{itemize} + \item + Beispiel (Wirtschaft): Abteilung A, Abteilung B, Verwaltung usw. + \end{itemize} + \item + Definition: Eine Sicherheitskennzeichnung ist definiert als ein + Attribut, das mit Systemeinheiten verbunden ist, um deren + hierarchische Sensibilitätsstufe und Sicherheitskategorien zu + kennzeichnen. + + \begin{itemize} + \item + In Form von mathematischen Mengen: \$Labels = Levels + \textbackslash times Powerset(Categories)\$ + \end{itemize} + \item + Sicherheitslabels, die die Sicherheitsempfindlichkeit von: + + \begin{itemize} + \item + Subjekte werden Freigaben genannt + \item + Objekte werden Klassifizierungen genannt + \end{itemize} + \item + Ein wichtiges Konzept für die Spezifikation von Sicherheitspolitiken + sind binäre Relationen auf der Menge der Kennzeichnungen: + + \begin{itemize} + \item + Eine binäre Relation auf einer Menge S ist eine Teilmenge des + Kreuzprodukts \$S\textbackslash times S\$ + \item + Beispiel: + + \begin{itemize} + \item + Dominiert: \$Labels \textbackslash times Labels\$ + \item + Dominiert \$=\{(b1,b2) \textbar{} b1, b2 \textbackslash in Labels + \textbackslash wedge level(b1) \textbackslash geq level(b2) + \textbackslash wedge categories(b2) \textbackslash subseteq + categories(b1)\}\$ + \item + Wenn \$(b1, b2) \textbackslash in Dominates\$, schreiben wir auch + b1 dominates b + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Spezifikation der + Sicherheitspolitik} + + \begin{itemize} + \item + Formale Ausdrücke für Regeln der Sicherheitspolitik: + \item + Betrachten Sie die folgenden Zuordnungen: + + \begin{itemize} + \item + \$allow: Subjects \textbackslash times Accesses \textbackslash times + Objects \textbackslash rightarrow boolean\$ + \item + \$own: Subjects \textbackslash times Objects + \textbackslash rightarrow boolean\$ + \item + \$admin: Subjects \textbackslash rightarrow boolean\$ + \item + \$dominates: Labels \textbackslash times Labels + \textbackslash rightarrow boolean\$ + \end{itemize} + \item + Die oben genannten Zuordnungen können verwendet werden, um bekannte + Sicherheitsrichtlinien zu spezifizieren: + + \begin{itemize} + \item + \$ownership: \textbackslash forall s \textbackslash in Subjects, o + \textbackslash in Objects, a \textbackslash in Accesses: allow(s, o, + a) \textbackslash Leftrightarrow own(s, o)\$ + \item + \$own\_admin: \textbackslash forall s \textbackslash in Subjects, o + \textbackslash in Objects, a \textbackslash in Accesses: allow(s, o, + a) \textbackslash Leftrightarrow own(s, o) \textbackslash wedge + admin(s)\$ + \item + \$dom: \textbackslash forall s \textbackslash in Subjects, o + \textbackslash in Objects, a \textbackslash in Accesses: allow(s, o, + a) \textbackslash Leftrightarrow dominates(label(s), label(o))\$ + \end{itemize} + \item + Die dom-Policy erfordert ein System zur Speicherung und Verarbeitung + von Sicherheitskennzeichnungen für jede Entität, erlaubt aber + komplexere Zugriffskontrollschemata als die ownership- und + own\_admin-Policy + \end{itemize} + + + \subsection{Arten von + Zugriffskontrollmechanismen} + + \begin{itemize} + \item + Ein Zugriffskontrollmechanismus ist eine konkrete Umsetzung des + Referenzmonitor-Konzepts + \item + Es gibt zwei Haupttypen von Zugriffskontrollmechanismen: + + \begin{itemize} + \item + Diskretionäre Zugriffskontrolle umfasst diejenigen Verfahren und + Mechanismen, die die spezifizierte Vermittlung nach dem Ermessen der + einzelnen Benutzer durchsetzen + + \begin{itemize} + \item + Beispiel: Das Unix-Betriebssystem ermöglicht es den Benutzern, die + Zugriffsrechte für Dateien, die ihnen gehören, zu erteilen oder zu + entziehen (Lesen, Schreiben, Ausführen). + \end{itemize} + \item + Die obligatorische Zugriffskontrolle umfasst die Verfahren und + Mechanismen, die die angegebene Vermittlung nach dem Ermessen einer + zentralen Systemverwaltung durchsetzen. + \end{itemize} + \item + Beide Arten können kombiniert werden, wobei die obligatorischen + Zugriffskontrollentscheidungen in den meisten Fällen Vorrang vor den + diskretionären Entscheidungen haben + + \begin{itemize} + \item + Beispiel: + + \begin{itemize} + \item + Verwendung einer diskretionären Zugangskontrolle auf + Personalcomputern kombiniert mit einer obligatorischen + Zugangskontrolle für die Kommunikation + (\$\textbackslash rightarrow\$ Firewalls) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Zugriffsmatrizen} + + \begin{itemize} + \item + Ein nützliches Konzept für die Beschreibung von + Zugangskontrollmechanismen ist die Zugangsmatrix: + + \begin{itemize} + \item + In einer Zugriffsmatrix für zwei Mengen von Subjekten und Objekten + entspricht jede Zeile einem Subjekt und jede Spalte einem Objekt + \item + Jede Zelle der Matrix definiert die Zugriffsrechte des + entsprechenden Subjekts auf das entsprechende Objekt + \end{itemize} + \end{itemize} + + %\begin{longtable}[]{@{}lllll@{}} + % \toprule + % & Object 1 & Object 2 & ... & Object M\tabularnewline + % \midrule + % \endhead + % Subject 1 & & & ... & \tabularnewline + % Subject 2 & & & ... & \tabularnewline + % ... & ... & ... & (Access Rights) & \tabularnewline + % Subject N & & & & \tabularnewline + % \bottomrule + %\end{longtable} + + + \subsection{Gemeinsame + Zugriffskontrollschemata} + + \begin{itemize} + \item + Zugriffskontroll-Listen (ACL): + + \begin{itemize} + \item + ACLs sind die Grundlage für ein Zugriffskontrollschema, bei dem für + jedes Objekt eine Liste gültiger Subjekte gespeichert wird, die + Zugriff auf dieses Objekt haben könnten (möglicherweise zusammen mit + der Art des erlaubten Zugriffs). + \item + ACLs werden in der Regel bei der diskretionären Zugriffskontrolle + verwendet, da es zu viele ACLs gibt, als dass sie von einer + zentralen Verwaltungseinrichtung verwaltet werden könnten. + \end{itemize} + \item + Fähigkeiten: + + \begin{itemize} + \item + Capabilities sind gewissermaßen das Gegenkonzept zu ACLs, da bei + Capabilities jedes Subjekt eine Liste von Zugriffsrechten auf + Objekte besitzt + \item + Der Vorteil (und die Gefahr) von Capabilities ist, dass ein Subjekt + einige seiner Capabilities an andere Subjekte weitergeben kann + \end{itemize} + \item + Label-basierte Zugriffskontrolle: + + \begin{itemize} + \item + Wenn Sicherheitslabels mit den Entitäten eines Systems gespeichert + und verarbeitet werden, können sie zur Durchführung einer + label-basierten Zugriffskontrolle verwendet werden + \item + Dieses Verfahren wird in der Regel als obligatorischer + Zugriffskontrollmechanismus verwendet. + \end{itemize} + \item + \$\textbackslash rightarrow\$ Die Datenintegrität von + Zugriffskontrolldatenstrukturen ist entscheidend! + \end{itemize} + + + \section{Integration von Sicherheitsdiensten in + Kommunikationsarchitekturen} + + + \subsection{Motivation: Was ist wo zu + tun?} + + \begin{itemize} + \item + Analog zur Methodik der Sicherheitsanalyse gibt es zwei Dimensionen, + die bei der Integration von Sicherheitsdiensten in + Kommunikationsarchitekturen zu beachten sind: + \item + Dimension 1: Welcher Sicherheitsdienst soll in welchem Knoten + realisiert werden? + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Security-service-dim-1.png} + \end{itemize} + \item + Dimension 2: Welcher Sicherheitsdienst sollte in welcher Schicht + realisiert werden? + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Security-service-dim-2.png} + \end{itemize} + \end{itemize} + + + \subsection{Ein pragmatisches Modell für sicheres und vernetztes + Rechnen} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Sicheres-Netz-Modell.png} + \item + Anwendung: + + \begin{itemize} + \item + Ein Stück Software, das eine bestimmte Aufgabe erfüllt, z. B. + elektronische E-Mail, Webdienst, Textverarbeitung, Datenspeicherung + usw. + \end{itemize} + \item + Endsystem: + + \begin{itemize} + \item + Ein Gerät, das vom Personal Computer über den Server bis zum + Großrechner reicht. + \item + Für Sicherheitszwecke hat ein Endsystem in der Regel eine einzige + Richtlinienautorität. + \end{itemize} + \item + Teilnetz: + + \begin{itemize} + \item + Eine Sammlung von Kommunikationseinrichtungen, die unter der + Kontrolle einer Verwaltungsorganisation stehen, z. B. ein LAN, ein + Campusnetz, ein WAN usw. + \item + Für Sicherheitszwecke hat ein Teilnetz in der Regel eine + Richtlinienkompetenz. + \end{itemize} + \item + Internet: + + \begin{itemize} + \item + Eine Sammlung von miteinander verbundenen Teilnetzen + \item + Im Allgemeinen haben die Teilnetze, die in einem Inter-Netzwerk + verbunden sind, unterschiedliche Richtlinienautoritäten + \end{itemize} + \item + Es gibt vier Ebenen, auf denen unterschiedliche Anforderungen an + Sicherheitsprotokollelemente gestellt werden: + + \begin{itemize} + \item + Anwendungsebene: + + \begin{itemize} + \item + Sicherheitsprotokollelemente, die anwendungsabhängig sind + \end{itemize} + \item + Endsystem-Ebene: + + \begin{itemize} + \item + Bereitstellung von Schutz auf einer Endsystem-zu-Endsystem-Basis + \end{itemize} + \item + Teilnetzebene: + + \begin{itemize} + \item + Bereitstellung von Schutz über ein Teilnetz oder ein Zwischennetz, + das als weniger sicher gilt als andere Teile der Netzumgebung + \end{itemize} + \item + Verbindungsebene: + + \begin{itemize} + \item + Bereitstellung von Schutz innerhalb eines Teilnetzes, z. B. über + eine Verbindung, die als weniger vertrauenswürdig gilt als andere + Teile der Teilnetzumgebung + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Beziehungen zwischen Schichten und + Anforderungsniveaus} + + \begin{itemize} + \item + Die Beziehungen zwischen den Protokollschichten und den Stufen der + Sicherheitsanforderungen für die Protokollelemente sind nicht + eins-zu-eins: + + \begin{itemize} + \item + Sicherheitsmechanismen, die sowohl die Anforderungen der Endsystem- + als auch der Teilnetzebene erfüllen, können entweder in der + Transport- und/oder in der Netzwerkschicht realisiert werden. + \item + Die Anforderungen der Verbindungsebene können durch die Integration + von Sicherheitsmechanismen oder durch die Verwendung von + ,,speziellen Funktionen'' der Verbindungsschicht und/oder der + physikalischen Schicht erfüllt werden. + \item + % \includegraphics{Assets/NetworkSecurity-Layer-relationship.png} + \end{itemize} + \end{itemize} + + + \subsection{Allgemeine Überlegungen zur architektonischen + Platzierung} + + \begin{itemize} + \item + Verkehrsvermischung: + + \begin{itemize} + \item + Infolge des Multiplexing besteht auf niedrigeren Ebenen eine größere + Tendenz, Datenelemente von verschiedenen Quell-/Ziel-Benutzern + und/oder Anwendungen in einem Datenstrom zu vermischen + \item + Ein Sicherheitsdienst, der auf einer Schicht/Ebene realisiert wird, + behandelt den Verkehr dieser Schicht/Ebene gleich, was zu einer + unzureichenden Kontrolle der Sicherheitsmechanismen für Benutzer und + Anwendungen führt. + \item + Wenn eine Sicherheitspolitik eine differenziertere Behandlung + erfordert, sollte sie besser auf einer höheren Ebene realisiert + werden + \end{itemize} + \item + Wissen über die Route: + + \begin{itemize} + \item + Auf niedrigeren Ebenen ist in der Regel mehr Wissen über die + Sicherheitseigenschaften der verschiedenen Routen und Verbindungen + vorhanden. + \item + In Umgebungen, in denen diese Merkmale stark variieren, kann die + Platzierung von Sicherheit auf niedrigeren Ebenen Vorteile in Bezug + auf Effektivität und Effizienz haben + \item + Geeignete Sicherheitsdienste können auf der Basis von Teilnetzen + oder Verbindungen ausgewählt werden, so dass keine Kosten für + Sicherheit anfallen, wenn der Schutz unnötig ist. + \end{itemize} + \item + Anzahl der Schutzpunkte: + + \begin{itemize} + \item + Wenn die Sicherheit auf der Anwendungsebene angesiedelt wird, muss + die Sicherheit in jeder sensiblen Anwendung und jedem Endsystem + implementiert werden. + \item + Sicherheit auf der Verbindungsebene bedeutet, dass am Ende jeder + Netzverbindung, die als weniger vertrauenswürdig gilt, Sicherheit + implementiert werden muss. + \item + Wenn die Sicherheit in der Mitte der Architektur angesiedelt wird, + müssen die Sicherheitsmerkmale an weniger Stellen installiert + werden. + \end{itemize} + \item + Schutz der Protokoll-Header: + + \begin{itemize} + \item + Der Sicherheitsschutz auf höheren Ebenen kann die Protokollköpfe der + unteren Protokollschichten nicht schützen. + \item + Die Netzwerkinfrastruktur muss möglicherweise ebenfalls geschützt + werden. + \end{itemize} + \item + Quelle/Senke-Bindung: + + \begin{itemize} + \item + Sicherheitsdienste wie die Authentifizierung der Datenherkunft und + die Unleugbarkeit hängen von der Zuordnung der Daten zu ihrer Quelle + oder Senke ab. + \item + Dies wird am effizientesten auf höheren Ebenen erreicht, + insbesondere auf der Anwendungsebene. + \end{itemize} + \end{itemize} + + + \subsection{Überlegungen zu bestimmten + Ebenen} + + \begin{itemize} + \item + Anwendungsebene: + + \begin{itemize} + \item + Diese Stufe kann die einzige geeignete Stufe sein, zum Beispiel + weil: + + \begin{itemize} + \item + Ein Sicherheitsdienst ist anwendungsspezifisch, z.B. die + Zugriffskontrolle für einen vernetzten Dateispeicher + \item + Ein Sicherheitsdienst muss Anwendungs-Gateways durchqueren, z.B. + Integrität und/oder Vertraulichkeit von elektronischer Post + \item + Die Semantik der Daten ist wichtig, z.B. für + Nichtabstreitbarkeitsdienste - Es liegt außerhalb der Reichweite + eines Benutzers/Anwendungsprogrammierers, Sicherheit auf einer + niedrigeren Ebene zu integrieren + \end{itemize} + \end{itemize} + \item + Endsystem-Ebene: + + \begin{itemize} + \item + Diese Ebene ist geeignet, wenn davon ausgegangen wird, dass die + Endsysteme vertrauenswürdig sind und das Kommunikationsnetz als + nicht vertrauenswürdig angesehen wird. + \item + Weitere Vorteile der Sicherheit auf Endsystemebene: + + \begin{itemize} + \item + Die Sicherheitsdienste sind für die Anwendungen transparent. + \item + Die Verwaltung von Sicherheitsdiensten kann leichter in die Hände + eines Systemadministrators gelegt werden. + \end{itemize} + \end{itemize} + \item + Teilnetzebene: + + \begin{itemize} + \item + Auch wenn die auf dieser Ebene implementierte Sicherheit in der + gleichen Protokollschicht wie auf der Endsystemebene implementiert + werden kann, sollten diese nicht verwechselt werden: + + \begin{itemize} + \item + Mit der auf der Subnetzebene implementierten Sicherheit wird in + der Regel der gleiche Schutz für alle Endsysteme dieses Subnetzes + realisiert + \end{itemize} + \item + Es ist sehr üblich, dass ein Teilnetz in der Nähe eines Endsystems + als ebenso vertrauenswürdig angesehen wird, da es sich in denselben + Räumlichkeiten befindet und von denselben Behörden verwaltet wird. + \item + In den meisten Fällen gibt es weit weniger zu sichernde + Teilnetz-Gateways als Endsysteme. + \end{itemize} + \item + Verbindungsebene: + + \begin{itemize} + \item + Wenn es relativ wenige nicht vertrauenswürdige Verbindungen gibt, + kann es ausreichend und zudem einfacher und kostengünstiger sein, + das Netz auf der Verbindungsebene zu schützen. + \item + Darüber hinaus können auf der Verbindungsebene spezielle + Schutztechniken eingesetzt werden, z. B. Spreizspektrum oder + Frequenzsprungverfahren. + \item + Die Vertraulichkeit des Verkehrsflusses erfordert in der Regel einen + Schutz auf Verbindungsebene. + \end{itemize} + \end{itemize} + + + \subsection{Interaktionen zwischen menschlichen + Nutzern} + + \begin{itemize} + \item + Einige Netzsicherheitsdienste beinhalten eine direkte Interaktion mit + einem menschlichen Benutzer, der wichtigste davon ist die + Authentifizierung. + \item + Solche Interaktionen passen in keine der bisher vorgestellten + Architekturoptionen, da der Benutzer außerhalb der + Kommunikationseinrichtungen steht. + \item + Die Kommunikation zur Unterstützung der Authentifizierung kann auf + eine der folgenden Weisen erfolgen: + + \begin{itemize} + \item + Örtlich: + + \begin{itemize} + \item + Der menschliche Benutzer authentifiziert sich gegenüber dem + lokalen Endsystem + \item + Das Endsystem authentifiziert sich gegenüber dem entfernten + Endsystem und teilt die Identität des Benutzers mit + \item + Das entfernte System muss dem lokalen Endsystem vertrauen + \end{itemize} + \item + Unter Einbeziehung von Protokollelementen auf der Anwendungsschicht: + + \begin{itemize} + \item + Der Benutzer gibt einige Authentifizierungsinformationen an das + lokale System weiter, die sicher an das entfernte System + weitergeleitet werden + \end{itemize} + \item + Kombination der oben genannten Mittel: + + \begin{itemize} + \item + Beispiel: Kerberos + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Integration in untere Protokollschichten vs. + Anwendungen} + + \begin{itemize} + \item + Vorteile der Integration von Sicherheitsdiensten in niedrigere + Netzwerkschichten: + + \begin{itemize} + \item + Sicherheit: + + \begin{itemize} + \item + Auch das Netz selbst muss geschützt werden + \item + Sicherheitsmechanismen, die in den Netzelementen (insbesondere in + der Hardware) realisiert sind, sind für die Netznutzer oft + schwerer angreifbar + \end{itemize} + \item + Anwendungsunabhängigkeit: + + \begin{itemize} + \item + Grundlegende Netzsicherheitsdienste müssen nicht in jede einzelne + Anwendung integriert werden + \end{itemize} + \item + Dienstgüte (QoS): + + \begin{itemize} + \item + Die QoS-erhaltende Planung des Kommunikationssubsystems kann auch + die Verschlüsselung nebeneinander bestehender Datenströme planen. + \item + Beispiel: gleichzeitiger Sprachanruf und FTP-Übertragung + \end{itemize} + \item + Effizienz: + + \begin{itemize} + \item + Hardware-Unterstützung für rechenintensive Ver-/Entschlüsselung + kann leichter in die Protokollverarbeitung integriert werden + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Integration in Endsysteme vs. + Zwischensysteme} + + \begin{itemize} + \item + Integration in Endsysteme: + + \begin{itemize} + \item + Kann im Allgemeinen entweder auf der Anwendungs- oder der + Endsystemebene erfolgen + \item + In einigen speziellen Fällen kann auch ein Schutz auf + Verbindungsebene angebracht sein, z. B. bei der Verwendung eines + Modems zur Verbindung mit einem bestimmten Gerät + \end{itemize} + \item + Integration in Zwischensysteme + + \begin{itemize} + \item + Kann auf allen vier Ebenen erfolgen: + + \begin{itemize} + \item + Anwendungs-/,,Endsystem"-Ebene: zur Sicherung der + Verwaltungsschnittstellen von Zwischenknoten, nicht zur Sicherung + des Nutzdatenverkehrs + \item + Teilnetz-/Link-Ebene: zur Sicherung des Nutzdatenverkehrs + \end{itemize} + \end{itemize} + \item + Je nach den Sicherheitszielen kann eine Integration sowohl in + Endsystemen als auch in Zwischensystemen sinnvoll sein + \end{itemize} + + + \subsection{Beispiel: Authentifizierungsbeziehungen in + Inter-Netzwerken} + + % \includegraphics{Assets/NetworkSecurity-Authentication-relation-in-inter-networks.png} + + %\begin{longtable}[]{@{}ll@{}} + % \toprule + % Authentication Relation & Application for securing\tabularnewline + % \midrule + % \endhead + % Endsystem \$\textbackslash leftrightarrow\$ Endsystem & User + % Channels\tabularnewline + % Endsystem \$\textbackslash leftrightarrow\$ Intermediate System & + % Management Interfaces, Accounting\tabularnewline + % Intermediate \$\textbackslash leftrightarrow\$ Intermediate System & + % Network Operation: Signaling, Routing, Accounting, ...\tabularnewline + % \bottomrule + %\end{longtable} + + + \subsection{Schlussfolgerung} + + \begin{itemize} + \item + Die Integration von Sicherheitsdiensten in Kommunikationsarchitekturen + wird von zwei Hauptfragen geleitet: + + \begin{itemize} + \item + Welcher Sicherheitsdienst in welchem Knoten? + \item + Welcher Sicherheitsdienst in welcher Schicht? + \end{itemize} + \item + Diese Design-Entscheidungen können auch durch einen Blick auf ein + pragmatisches Modell der vernetzten Datenverarbeitung geleitet werden, + das vier verschiedene Ebenen unterscheidet, auf denen + Sicherheitsdienste realisiert werden können: + + \begin{itemize} + \item + Anwendungs-/Endsystem-/Subnetz-/Link-Ebene + \end{itemize} + \item + Da es verschiedene Gründe für und gegen jede Option gibt, gibt es + keine einheitliche Lösung für dieses Designproblem. + \item + In diesem Kurs werden wir daher einige Beispiele für die Integration + von Sicherheitsdiensten in Netzarchitekturen untersuchen, um die + Auswirkungen der getroffenen Designentscheidungen besser zu verstehen + \end{itemize} + + + \section{Sicherheitsprotokolle der + Datenübertragungsschicht} + + \begin{itemize} + \item + IEEE 802.1Q, IEEE 802.1X \& IEEE 802.1AE + \item + Point-to-Point Protocol (PPP) + \item + Point-to-Point Tunneling Protocol (PPTP) + \item + Layer 2 Tunneling Protocol (L2TP) + \item + Virtual Private Networks (VPN) + \end{itemize} + + + \subsection{Anwendungsbereich von Sicherheitsprotokollen der + Verbindungsschicht} + + \begin{itemize} + \item + Nach dem klassischen Verständnis des OSI-Modells stellt die + Verbindungsschicht einen gesicherten Datenübertragungsdienst zwischen + zwei gleichrangigen Einheiten bereit, die direkt über ein + Kommunikationsmedium miteinander verbunden sind. + \item + Ihre Hauptaufgaben sind: + + \begin{itemize} + \item + Fehlererkennung und -korrektur + \item + Medium Access Control (MAC, nicht zu verwechseln mit Message + Authentication Code) für gemeinsam genutzte Medien, z. B. Ethernet + usw. + \end{itemize} + \item + Nicht alle heutigen Netzwerktechnologien passen in dieses Modell: + + \begin{itemize} + \item + Einwahlverbindungen zu einem Internetdienstanbieter + \item + Lösungen für virtuelle private Netzwerke (VPN) + \end{itemize} + \item + In diesem Kurs geben wir uns mit der folgenden Definition zufrieden: + + \begin{itemize} + \item + Der Zweck eines Link-Layer-Sicherheitsprotokolls besteht darin, + bestimmte Sicherheitseigenschaften der Link-Layer-PDUs zu + gewährleisten, d. h. der PDUs der Protokollschicht, die die PDUs der + Netzwerkschicht (z. B. IP) tragen. + \end{itemize} + \end{itemize} + + + \subsection{IEEE 802.1} + + + \subsubsection{Die IEEE 802.1 Standardfamilie: Hintergrund und + Ziele} + + \begin{itemize} + \item + Das Institute of Electrical and Electronics Engineers (IEEE) 802 + LAN/MAN Standards Committee entwickelt Standards für lokale Netzwerke + und Metropolitan Area Networks. + \item + Die am weitesten verbreiteten Standards sind: + + \begin{itemize} + \item + Ethernet-Familie (802.3, allgemein als CSMA/CD bezeichnet), + \item + Drahtloses LAN (802.11) + \item + WIMAX (802.16) + \end{itemize} + \item + Die IEEE 802.1-Standards: + + \begin{itemize} + \item + Können mit verschiedenen IEEE 802.x Technologien verwendet werden + \item + Definieren unter anderem verschiedene explizite Sicherheitsdienste + oder Dienste, die zur Erreichung von Sicherheitszielen verwendet + werden können + \end{itemize} + \end{itemize} + + + \subsubsection{IEEE 802.1Q} + + Ziele und Dienste + + \begin{itemize} + \item + Der Standard IEEE 802.1Q: + + \begin{itemize} + \item + Ermöglicht die Schaffung von ,,miteinander verbundenen + IEEE-802-Standard-LANs mit unterschiedlichen oder identischen + Methoden der Medienzugriffskontrolle'', d. h. die Schaffung + separater virtueller lokaler Netzwerke (VLANs) über eine physische + Infrastruktur + \item + Obwohl es sich nicht um einen echten Sicherheitsstandard handelt, + wird er häufig verwendet, um verschiedene Benutzer und Dienste + voneinander zu trennen, z. B. nicht vertrauenswürdige Gastcomputer + von Unternehmensservern, ohne eine neue Infrastruktur einzurichten + \item + Wird verwendet, um Zugangskontrolle auf Verbindungsebene zu + realisieren + \end{itemize} + \end{itemize} + + Grundlegende Funktionsweise + + \begin{itemize} + \item + Jedes Netzwerkpaket wird mit einem VLAN-Tag versehen, der eine + 12-Bit-VLAN-ID enthält, die ein virtuelles Netzwerk identifiziert + \item + Switches stellen sicher, dass Pakete mit bestimmten VLAN-IDs nur an + bestimmte Netzwerk-Ports zugestellt werden, z.B. wird ein VLAN mit + internen Firmeninformationen nicht an einen öffentlich zugänglichen + Port zugestellt + \item + Die VLAN-ID ist nicht kryptografisch geschützt! + + \begin{itemize} + \item + VLAN IDs müssen auf andere Weise, d.h. physikalisch, gesichert + werden! + \item + Normalerweise werden VLAN-IDs am ersten vertrauenswürdigen Switch + eingefügt und am letzten vertrauenswürdigen Switch auf dem Weg durch + das Netzwerk entfernt + \end{itemize} + \end{itemize} + + Typisches Einführungsszenario + + \begin{itemize} + \item + Normalerweise wird das vertrauenswürdige innere Netzwerk durch + physische Mittel geschützt + \item + Verschiedene Ports zum vertrauenswürdigen Kern werden VLANs zugeordnet + \item + VLANs sind virtuell verbunden, dürfen aber nicht auf andere VLANs + zugreifen + \item + VLANs werden normalerweise gekoppelt durch + + \begin{itemize} + \item + Router, die mehrere Schnittstellen in den verschiedenen VLANs haben + \item + Router, die selbst zum vertrauenswürdigen Netzwerk gehören und + selbst getaggte Frames empfangen und senden können (kann gefährlich + sein, Wechselwirkung zwischen Routing und VLANs, siehe unten) + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ieee802.1q-scenario.png} + \end{itemize} + + Weitere Diskussion + + \begin{itemize} + \item + 802.1Q ermöglicht eine einfache Trennung verschiedener + Sicherheitsdomänen innerhalb eines vertrauenswürdigen Netzwerks + + \begin{itemize} + \item + Ermöglicht auch die Priorisierung bestimmter VLANs (z. B. um die + Verwaltung von Geräten zu ermöglichen, wenn der Rest des Netzes von + einem Angreifer überflutet wird) + \item + VLAN-Tags können gestapelt werden, z. B. um verschiedene Kunden zu + trennen, die eigene VLANs einrichten + \end{itemize} + \item + Diskussion über die Sicherheit: + + \begin{itemize} + \item + Die Sicherheit hängt davon ab, dass kein einziges Gerät in der + vertrauenswürdigen Domäne kompromittiert wird! + \item + Alle Switches müssen korrekt konfiguriert sein, d.h. kein einziger + Switch darf eingehenden Verkehr aus einem nicht vertrauenswürdigen + Netz zulassen, der bereits getaggt ist + \item + Paketfluten in einem VLAN können sich auch auf andere VLANs + auswirken + \item + Router, die an mehreren VLANs teilnehmen, können auf einer + Schnittstelle Pakete aus verschiedenen VLANs empfangen, aber + \item + Anstatt ein striktes Routing zu einer anderen Schnittstelle (z. B. + dem Internet) durchzuführen, könnte ein Angreifer diesen Router + nutzen, um über dieselbe Schnittstelle zurück in ein anderes VLAN zu + routen (sogenannter Layer-2-Proxy-Angriff) + \item + Kann sogar funktionieren, wenn VLAN 1 und VLAN 2 das gleiche + IP-Subnetz nutzen! + \end{itemize} + \end{itemize} + + + \subsubsection{IEEE 802.1X} + + Ziele + + \begin{itemize} + \item + Der Standard IEEE 802.1X: + + \begin{itemize} + \item + Ziel ist es, ,,den Zugang zu den von einem LAN angebotenen Diensten + auf diejenigen Benutzer und Geräte zu beschränken, die diese Dienste + nutzen dürfen'' + \end{itemize} + \item + Definiert eine portbasierte Netzwerkzugriffskontrolle, um ein Mittel + zur ,,Authentifizierung und Autorisierung von Geräten bereitzustellen, + die an einen LAN-Port mit Punkt-zu-Punkt-Verbindungseigenschaften + angeschlossen sind''. + \end{itemize} + + Kontrollierte und unkontrollierte Ports + + \begin{itemize} + \item + IEEE 802.1X führt den Begriff der zwei logischen Ports ein: + + \begin{itemize} + \item + Der unkontrollierte Port ermöglicht die Authentifizierung eines + Geräts + \item + Der kontrollierte Port ermöglicht es einem authentifizierten Gerät, + auf LAN-Dienste zuzugreifen + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ieee802.1X-ports.png} + \end{itemize} + + Rollen + + \begin{itemize} + \item + Es werden drei Hauptrollen unterschieden: + + \begin{itemize} + \item + Ein Gerät, das den von einem IEEE 802.1X LAN angebotenen Dienst + nutzen möchte, agiert als Supplicant, der den Zugriff auf den + kontrollierten Port anfordert + \item + Der Anschlusspunkt an die LAN-Infrastruktur (z. B. eine MAC-Brücke) + fungiert als Authentifikator, der den Supplicant auffordert, sich zu + authentifizieren. + \item + Der Authentifikator prüft die vom Antragsteller vorgelegten + Anmeldeinformationen nicht selbst, sondern leitet sie zur + Überprüfung an seinen Authentifizierungsserver weiter. + \end{itemize} + \item + Zugriff auf ein LAN mit IEEE 802.1X Sicherheitsmaßnahmen: + + \begin{itemize} + \item + Vor einer erfolgreichen Authentifizierung kann der Antragsteller auf + den unkontrollierten Port zugreifen: + + \begin{itemize} + \item + Der Port ist unkontrolliert in dem Sinne, dass er den Zugriff vor + der Authentifizierung erlaubt. + \item + Dieser Port erlaubt jedoch nur einen eingeschränkten Zugriff + \end{itemize} + \item + Die Authentifizierung kann durch den Supplicant oder den + Authenticator initiiert werden. + \item + Nach erfolgreicher Authentifizierung wird der kontrollierte Port + geöffnet. + \end{itemize} + \end{itemize} + + Sicherheitsprotokolle und Nachrichtenaustausch + + \begin{itemize} + \item + IEEE 802.1X definiert keine eigenen Sicherheitsprotokolle, sondern + befürwortet die Verwendung bestehender Protokolle: + + \begin{itemize} + \item + Das Extensible Authentication Protocol (EAP) kann eine grundlegende + Geräteauthentifizierung realisieren {[}RFC 3748{]}. + \item + Wenn die Aushandlung eines Sitzungsschlüssels während der + Authentifizierung erforderlich ist, wird die Verwendung des EAP TLS + Authentication Protocol empfohlen {[}RFC 5216{]}. + \item + Außerdem wird empfohlen, den Authentifizierungsserver mit dem Remote + Authentication Dial In User Service (RADIUS) {[}RFC 2865{]} zu + realisieren. + \end{itemize} + \item + Der Austausch von EAP Nachrichten zwischen Supplicant und + Authenticator wird mit dem EAP over LANs (EAPOL) Protokoll realisiert: + + \begin{itemize} + \item + EAPOL definiert die Verkapselungstechniken, die verwendet werden + sollen, um EAP-Pakete zwischen Supplicant Port Access Entities (PAE) + und Authenticator PAEs in einer LAN-Umgebung zu übertragen. + \item + EAPOL-Rahmenformate wurden für verschiedene Mitglieder der + 802.x-Protokollfamilie definiert, z. B. EAPOL für Ethernet, ... + \item + Zwischen Supplicant und Authenticator können RADIUS-Nachrichten + verwendet werden + \end{itemize} + \end{itemize} + + Beispiel für eine + 802.1X-Authentifizierung{]}(Assets/NetworkSecurity-ieee802.1X-example.png) + + + \subsubsection{IEEE 802.1AE} + + Ziele + + \begin{itemize} + \item + Der Standard IEEE 802.1AE wird auch als MAC-Sicherheit (MACsec) + bezeichnet: + + \begin{itemize} + \item + Ermöglicht autorisierten Systemen, die sich an LANs in einem + Netzwerk anschließen und diese miteinander verbinden, die + Vertraulichkeit der übertragenen Daten zu wahren und Maßnahmen gegen + Frames zu ergreifen, die von nicht autorisierten Geräten übertragen + oder verändert werden. '' + \item + Schützt Pakete durch kryptografische Mittel zwischen Geräten, z. B. + zwischen Switches oder einem Computer und einem Switch + \item + Setzt eine gültige Authentifizierung voraus und ist somit eine + Erweiterung von 802.1X + \item + Kryptografische Schlüssel werden auch während der + 802.1X-Authentifizierungsphase abgeleitet + \item + Kann Datenursprungsauthentifizierung und optional Vertraulichkeit + durchführen + \item + Unterstützt AES-128 und AES-256 in GCM, wobei die Unterstützung von + AES-128-GCM obligatorisch ist! + \end{itemize} + \end{itemize} + + Frame-Format + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ieee802.1AE-frame.png} + \item + Quell- und Zieladressen werden im Klartext gesendet + \item + VLAN-Tag, Typfeld und Nutzdaten werden ebenfalls verschlüsselt + \item + Ein neuer 8-16 Byte langer SecTAG wird eingefügt + + \begin{itemize} + \item + Beginnt mit 0x88e5, um ein Protokoll für ältere Geräte zu emulieren + \item + Enthält einen 4-Byte-Paketzähler (wird als IV verwendet, auch um + Replay-Angriffe abzuwehren) + \end{itemize} + \item + FCS wird durch einen kryptografischen MAC von 8-16 Byte ersetzt und + von MACsec berechnet, optional kann ein zusätzlicher CRC-FCS für + ältere Geräte hinzugefügt werden + \end{itemize} + + Diskussion über Sicherheit + + \begin{itemize} + \item + MACsec erlaubt es, Verbindungen zu sichern, z.B. zwischen Gebäuden auf + einem Campus + \item + Es bietet keinen Schutz gegen kompromittierte Geräte! + + \begin{itemize} + \item + Wenn es in Kombination mit 802.1Q verwendet wird, kann die + vertrauenswürdige Computerbasis immer noch ziemlich groß sein... + \item + Die Verwendung des GCM unterliegt den in Kapitel 5 beschriebenen + potenziellen Problemen + \item + Derzeit unterstützen nur hochwertige Switches MACsec! + \end{itemize} + \end{itemize} + + + \subsection{Punkt-zu-Punkt-Protokoll} + + Zweck und Aufgaben + + \begin{itemize} + \item + Große Teile des Internets beruhen auf Punkt-zu-Punkt-Verbindungen: + + \begin{itemize} + \item + Wide Area Network (WAN)-Verbindungen zwischen Routern + \item + Einwahlverbindungen von Hosts über Modems und Telefonleitungen + \end{itemize} + \item + Protokolle für diesen Zweck: + + \begin{itemize} + \item + Serial Line IP (SLIP): keine Fehlererkennung, unterstützt nur IP, + keine dynamische Adressvergabe, keine Authentifizierung {[}RFC + 1055{]} + \item + Point-to-Point Protocol (PPP): Nachfolger von SLIP, unterstützt IP, + IPX, ... + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point.png} + \end{itemize} + \item + PPP {[}RFC 1661/1662{]} + + \begin{itemize} + \item + Schicht-2-Rahmenformat mit Rahmenbegrenzung und Fehlererkennung + \item + Kontrollprotokoll (Link Control Protocol, LCP) für + Verbindungsaufbau, -test, -aushandlung und -abbau + \item + Separate Netzwerkkontrollprotokolle (NCP) für unterstützte + Schicht-3-Protokolle + \end{itemize} + \end{itemize} + + Packet Format + + \begin{itemize} + \item + Zeichenorientierte (statt bitorientierte) + \$\textbackslash Rightarrow\$ byteausgerichtete Rahmen + \item + Code-Transparenz wird durch Zeichenstuffing erreicht + \item + Normalerweise werden nur unnummerierte Frames übertragen, in Szenarien + mit hoher Fehlerwahrscheinlichkeit (drahtlose Kommunikation) kann + jedoch ein zuverlässigerer Modus mit Sequenznummern und erneuten + Übertragungen ausgehandelt werden + \item + Unterstützte Protokolle für das Nutzdatenfeld sind u.a.: IP, IPX, + Appletalk + \item + Wenn nicht anders ausgehandelt, beträgt die maximale Nutzdatengröße + 1500 Byte. + \item + Zusätzliche Aushandlung unterstützt kleinere Paketköpfe + \item + % \includegraphics{Assets/NetworkSecurity-Punkt-zu-Punkt-Format.png} + \end{itemize} + + Eine typische PPP-Verbindung + + \begin{itemize} + \item + Nutzungsszenario ,,Internetzugang eines PCs über Modem'': + + \begin{itemize} + \item + Der Benutzer ruft den Internet Service Provider (ISP) über ein Modem + an und stellt eine ,,physikalische'' Verbindung über den ,,Plain Old + Telephone Service'' (POTS) her. + \item + Anrufer sendet mehrere LCP-Pakete in PPP-Frames, um die gewünschten + PPP-Parameter auszuwählen + \item + Sicherheitsspezifische Aushandlung (siehe unten) + \item + Austausch von NCP-Paketen zur Konfiguration der Netzwerkschicht: + + \begin{itemize} + \item + z.B. Konfiguration von IP einschließlich dynamischer Zuweisung + einer IP-Adresse über Dynamic Host Configuration Protocol (DHCP) + \end{itemize} + \item + Der Anrufer kann wie jeder andere Host mit einer festen Verbindung + zum Internet beliebige Internetdienste nutzen + \item + Beim Verbindungsabbau werden die zugewiesene IP-Adresse und die + Netzschichtverbindung freigegeben + \item + Die Schicht-2-Verbindung wird über LCP freigegeben und das Modem + baut die ,,physikalische'' Verbindung ab + \end{itemize} + \end{itemize} + + Link Control Protocol + + \begin{itemize} + \item + Rahmenformat des Link Control Protocol (LCP): + + \begin{itemize} + \item + Code: configure-request, configure-ack, configure-nack, + configure-reject, terminate-request, terminate-ack, code-reject, + protocol-reject, echo-request, echo-reply, discard-request + \item + Länge: gibt die Länge des LCP-Pakets einschließlich des Codefelds + usw. an + \item + Daten: null oder mehr Oktette befehlsspezifischer Daten + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point-LCP.png} + \end{itemize} + \item + Die Konfigurationsprimitive von LCP ermöglichen die Konfiguration der + Verbindungsschicht: + + \begin{itemize} + \item + Es gibt verschiedene Optionen für dieses Primitiv zur Konfiguration + verschiedener Aspekte (max. Empfangseinheit, Protokollkompression, + Authentifizierung, ...) + \end{itemize} + \end{itemize} + + Sicherheitsdienste + + \begin{itemize} + \item + Die ursprüngliche Version von PPP {[}RFC 1661{]} schlägt die optionale + Ausführung eines Authentifizierungsprotokolls nach der + Verbindungsaufbauphase vor: + + \begin{itemize} + \item + Falls erforderlich, wird die Authentifizierung von einer + Peer-Entität über einen LCP Configuration-Request am Ende der + Verbindungsaufbauphase gefordert + \item + Ursprünglich sind zwei Authentifizierungsprotokolle definiert + worden: + + \begin{itemize} + \item + Passwort-Authentifizierungsprotokoll (PAP) + \item + Challenge-Handshake-Authentifizierungsprotokoll (CHAP) + \end{itemize} + \item + Inzwischen ist ein erweiterbares Protokoll definiert worden: + + \begin{itemize} + \item + Erweiterbares Authentifizierungsprotokoll (EAP) + \item + PPP EAP Transport Level Security Protocol (PPP-EAP-TLS) + \end{itemize} + \end{itemize} + \item + Außerdem kann nach der Authentifizierung eine Verschlüsselung + ausgehandelt werden: + + \begin{itemize} + \item + Protokolle: + + \begin{itemize} + \item + Encryption Control Protocol (ECP) zur Aushandlung + \item + PPP DES-Verschlüsselungsprotokoll (DESE) + \item + PPP-Dreifach-DES-Verschlüsselungsprotokoll (3DESE) + \end{itemize} + \end{itemize} + \end{itemize} + + Authentifizierungsprotokolle + + \begin{itemize} + \item + Passwort-Authentifizierungs-Protokoll (PAP): + + \begin{itemize} + \item + PAP wurde 1992 in RFC 1334 definiert. + \item + Das Protokoll ist sehr einfach: + + \begin{itemize} + \item + Voraussetzung: der Authentifikator kennt das Passwort der + Peer-Entität + \item + Am Ende der Verbindungsaufbauphase fordert eine Entität, + Authenticator genannt, die Peer-Entität auf, sich mit PAP zu + authentifizieren + \item + Die Peer-Entität sendet eine Authenticate-Request-Nachricht mit + ihrer Peer-ID und ihrem Passwort + \item + Der Authentifikator prüft, ob die bereitgestellten Informationen + korrekt sind und antwortet entweder mit einem Authenticate-ack + oder einem Authenticate-nack + \end{itemize} + \item + Da das Protokoll keinen kryptographischen Schutz bietet, ist es + unsicher. + \item + PAP wird in den aktualisierten RFCs für die PPP-Authentifizierung + nicht erwähnt {[}RFC1994{]}. + \end{itemize} + \item + Challenge Handshake Authentication Protocol (CHAP): + + \begin{itemize} + \item + CHAP ist ebenfalls in RFC 1334 und RFC 1994 definiert. + \item + Es verwirklicht ein einfaches Challenge-Response-Protokoll: + + \begin{itemize} + \item + Voraussetzung: Authentifikator und Peer-Entität teilen ein + Geheimnis + \item + Nach der Verbindungsaufbauphase sendet der Authentifikator (A) + eine Challenge-Nachricht, die einen Identifikator für diese + Challenge, eine Zufallszahl \$r\_A\$ und seinen Namen enthält, an + die Peer-Entität (B): \$A \textbackslash rightarrow B: (1, + Identifikator, r\_A, A)\$ + \item + Die Peer-Entität berechnet eine kryptografische Hash-Funktion über + ihren Namen, das gemeinsame Geheimnis \$K\_\{A,B\}\$ und die + Zufallszahl \$r\_A\$ und sendet die folgende Nachricht: \$B + \textbackslash rightarrow A: (2, Kennung, H(B, K\_\{A,B\}, r\_A), + B)\$ + \item + Beim Empfang dieser Nachricht berechnet der Authentifikator den + Hashwert neu und vergleicht ihn mit dem empfangenen Wert; wenn + beide Werte übereinstimmen, antwortet er mit einer Erfolgsmeldung + \item + RFC 1994 legt fest, dass MD5 als Hash-Funktion unterstützt werden + muss, aber die Verwendung anderer Hash-Funktionen kann + ausgehandelt werden + \end{itemize} + \end{itemize} + \item + CHAP-Nachrichtenformat: + + \begin{itemize} + \item + Code: 1 \textasciitilde{} Herausforderung / 2 \textasciitilde{} + Antwort / 3 \textasciitilde{} Erfolg / 4 \textasciitilde{} Fehler + \item + Identifier: ein Oktett, das bei jeder gesendeten Challenge geändert + werden muss + \item + Länge: die Gesamtlänge der CHAP-Nachricht in Oktetten + \item + Value Size: ein Oktett, das die Länge des Wertes angibt + \item + Wert: enthält die zufällige Herausforderung / die Antwort auf die + Herausforderung + \item + Name: ein oder mehrere Oktette, die das System identifizieren, das + das Paket erstellt hat; die Größe des Namens wird anhand des + Längenfeldes berechnet + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point-CHAP1.png} + \item + Nachricht: + + \begin{itemize} + \item + Null oder mehr Oktette mit implementierungsabhängigem Inhalt + \item + Der Inhalt soll für den Menschen lesbar sein und hat keinen + Einfluss auf die Funktionsweise des Protokolls + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point-CHAP2.png} + \end{itemize} + \item + Erweiterbares Authentifizierungsprotokoll (EAP): + + \begin{itemize} + \item + EAP ist ein allgemeines Protokoll für die PPP-Authentifizierung, das + mehrere Authentifizierungsmethoden unterstützt {[}RFC2284{]}. + \item + Die Hauptidee hinter EAP ist es, ein gemeinsames Protokoll + bereitzustellen, um komplexere Authentifizierungsmethoden als ,,1 + Frage + 1 Antwort'' durchzuführen. + \item + Das Protokoll bietet grundlegende Primitive: + + \begin{itemize} + \item + Anfrage, Antwort: weiter verfeinert durch Typfeld + typspezifische + Daten + \item + Success, Failure: zur Angabe des Ergebnisses eines + Authentifizierungsaustauschs + \end{itemize} + \item + Typ-Felder: + + \begin{itemize} + \item + Identität + \item + Benachrichtigung + \item + Nak (nur Antwort, zur Beantwortung inakzeptabler Anfragetypen) + \item + MD5 Challenge (dies entspricht CHAP) + \item + One-Time Password (OTP): definiert in {[}RFC2289{]} + \item + Generische Token-Karte + \item + EAP-TLS + \end{itemize} + \end{itemize} + \item + Einmaliges Kennwort (One-Time Password, OTP): + + \begin{itemize} + \item + Die Grundidee von OTP besteht darin, ein ,,Passwort'' zu + übermitteln, das nur für einen Durchlauf eines + Authentifizierungsdialogs verwendet werden kann + \item + Erstmalige Einrichtung: + + \begin{itemize} + \item + Der Authentifikator A sendet einen Seed-Wert rA und die + Peer-Entität B verkettet diesen mit seinem Passwort und berechnet + einen Hash-Wert: \$PW\_N = H\^{}N(r\_A, password\_B)\$ + \item + Das Paar \$(N, PW\_N)\$ wird ,,sicher'' an den Authentifikator + übertragen und beim Authentifikator gespeichert. + \end{itemize} + \item + Dialog zur Authentifizierung: + + \begin{itemize} + \item + \$A\textbackslash rightarrow B: N - 1\$ + \item + \$B\textbackslash rightarrow A: PW\_\{N-1\} := H\^{}\{N-1\}(r\_A, + Passwort\_B)\$ + \item + A prüft, ob \$H(PW\_\{N-1\}) = PW\_N\$, und speichert \$(N-1, + PW\_\{N-1\})\$ als neue Authentifizierungsinformation für B + \end{itemize} + \item + Sicherheit: Um dieses Verfahren zu brechen, müsste ein Angreifer ein + PWN abhören und \$H\^{}\{-1\}(PW\_N)\$ berechnen, was unpraktisch + ist. + \end{itemize} + \item + Generische Token-Karte: + + \begin{itemize} + \item + Im Grunde ein Challenge-Response-Dialog + \item + Eine Token-Karte wird verwendet, um eine Antwort auf eine + Herausforderung zu berechnen: + + \begin{itemize} + \item + Die Herausforderung wird dem Benutzer präsentiert, der sie in sein + Token-Card-Gerät eintippen muss. + \item + Die Token-Karte berechnet die Antwort und zeigt sie an. + \item + Der Benutzer gibt die Antwort in das System ein, das sie als + Antwort auf die Aufforderungsnachricht sendet. + \end{itemize} + \end{itemize} + \item + PPP-EAP-TLS: + + \begin{itemize} + \item + TLS steht für Transport Layer Security {[}RFC 2246{]}. + \item + Es wird also der Authentifizierungsdialog von TLS ausgeführt + \item + Dieser Dialog wird in Kapitel 12 über die Sicherheit der + Transportschicht im Detail erläutert. + \end{itemize} + \end{itemize} + + Verschlüsselungsprotokolle + + \begin{itemize} + \item + Nach dem Verbindungsaufbau und der Authentifizierungsphase kann die + Verschlüsselung für eine PPP-Verbindung ausgehandelt werden: + + \begin{itemize} + \item + Das Encryption Control Protocol (ECP) {[}RFC1968{]} ist für die + Konfiguration und Aktivierung von Datenverschlüsselungsalgorithmen + an beiden Enden der PPP-Verbindung zuständig: + + \begin{itemize} + \item + ECP verwendet das gleiche Rahmenformat wie LCP und führt zwei neue + Primitive ein: Reset-Request und Reset-Ack zur Anzeige von + Entschlüsselungsfehlern unabhängig für jede Richtung (nützlich für + die kryptographische Resynchronisation) + \item + Eine bestimmte Verschlüsselungsmethode wird mit dem + configure-Primitiv ausgehandelt, das eine Option zur Angabe von + DESE, 3DESE, Proprietär usw. enthält. + \item + Proprietäre Verschlüsselungsprotokolle werden durch einen + registrierten OUI (Organizational Unit Identifier) + einen + herstellerspezifischen Wert identifiziert. + \item + Genau ein ECP-Paket wird im PPP-Informationsfeld eines + Link-Layer-Pakets transportiert + \item + ECP-Pakete werden durch das PPP-Protokollfeld identifiziert: + + \begin{itemize} + \item + 0x8053 für ,,Standard'' Betrieb + \item + 0x8055 für die Verschlüsselung einzelner Verbindungsdaten auf + mehreren Verbindungen zum selben Ziel + \end{itemize} + \end{itemize} + \end{itemize} + \item + Das PPP DES Encryption Protocol (DESE): + + \begin{itemize} + \item + In diesem Kurs wird nur die aktualisierte Version DESEv2 + {[}RFC2419{]} behandelt + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point-DESE.png} + \item + DESEv2 wird mit einer ECP-Konfigurationsanforderungsnachricht + ausgehandelt: + + \begin{itemize} + \item + Code: 1 \textasciitilde{} configure request + \item + Identifier: ändert sich mit jeder neuen Anfrage + \item + Länge: Gesamtlänge der Configure-Request-Nachricht + \item + Type: 3 \textasciitilde{} DESEv2 + \item + Länge': 10 (die Länge dieser Konfigurationsoption) + \item + Initial Nonce: ein Initialisierungsvektor für DES im CBC-Modus (8 + Oktette) + \end{itemize} + \end{itemize} + \item + PPP DESE v2 Nachrichtenformat: + + \begin{itemize} + \item + Adresse: 0x11111111 (bei HDLC-ähnlichem Framing) + \item + Steuerung: 0x00000011 (bei HDLC-ähnlicher Rahmung) + \item + Protokoll-ID: 0x0053 \textasciitilde{} DESE (Standard) / 0x0055 + \textasciitilde{} DESE (individuelle Verbindung) + \item + Sequenznummer: anfänglich 0, diese Nummer wird von der + verschlüsselnden Stelle bei jedem gesendeten Paket erhöht + \item + Chiffriertext: die verschlüsselten Protokoll- und Informationsfelder + eines PPP-Pakets + + \begin{itemize} + \item + Nachrichten werden vor der Verschlüsselung auf ein Vielfaches von + 8 Oktetten aufgefüllt + \item + die Verschlüsselung erfolgt mit DES im CBC-Modus + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-Point-to-Point-DESE2.png} + \end{itemize} + \item + PPP 3DES Encryption Protocol (3DESE): + + \begin{itemize} + \item + PPP 3DESE {[}RFC2420{]} ist dem PPP DESE sehr ähnlich + \item + PPP 3DESE wird mit einer Configure-Request-Nachricht ausgehandelt, + wobei das Type-Feld der Option auf 2 gesetzt ist (\textasciitilde{} + 3DESE) + \item + Die Verschlüsselung der PPP-Nutzdaten erfolgt wie bei DESE, mit dem + Unterschied, dass 3DES mit 3 verschiedenen Schlüsseln verwendet wird + \end{itemize} + \item + Alle PPP-Verschlüsselungsprotokolle gehen davon aus, dass vor der + Verschlüsselungsphase ein Sitzungsschlüssel für die + Verschlüsselung/Entschlüsselung von PPP-Paketen vereinbart wurde: + + \begin{itemize} + \item + Diese Annahme ist sinnvoll, da die Festlegung des Sitzungsschlüssels + eine Aufgabe ist, die während der Authentifizierungsphase erfüllt + werden sollte. + \item + Allerdings unterstützt nur das + PPP-EAP-TLS-Authentifizierungsprotokoll den Aufbau von + Sitzungsschlüsseln. + \end{itemize} + \end{itemize} + + + \subsubsection{Punkt-zu-Punkt-Tunneling-Protokoll + (PPTP)} + + \begin{itemize} + \item + PPP wurde ursprünglich für den Betrieb zwischen ,,direkt'' verbundenen + Einheiten entwickelt, d.h. Einheiten, die eine gemeinsame + Schicht-2-Verbindung haben + + \begin{itemize} + \item + Beispiel: ein PC und ein Einwahlrouter eines Internetanbieters, die + über das Telefonnetz mittels Modem verbunden sind + \end{itemize} + \item + Die Grundidee von PPTP besteht darin, die Reichweite des Protokolls + auf das gesamte Internet auszudehnen, indem der Transport von PPP-PDUs + in IP-Paketen definiert wird + + \begin{itemize} + \item + Die Nutzlast von PPTP-PDUs sind also PPP-Pakete (ohne + schicht-2-spezifische Felder wie HDLC-Flags, Bit-Einfügungen, + Steuerzeichen, CRC-Fehlerprüfwerte usw.) + \item + PPP-Pakete werden in GRE-Pakete (generische Routing-Kapselung) + eingekapselt, die wiederum in IP-Pakete eingekapselt werden: + \end{itemize} + \end{itemize} + + %\begin{longtable}[]{@{}l@{}} + % \toprule + % \endhead + % Media Header (e.g. Ethernet MAC header)\tabularnewline + % IP Header\tabularnewline + % GRE V.2 Header\tabularnewline + % PPP Packet\tabularnewline + % \bottomrule + %\end{longtable} + + + \subsubsection{PPTP: Freiwilliges vs. obligatorisches + Tunneling} + + \begin{itemize} + \item + PPTP realisiert einen ,,Tunnel'' über das Internet, der PPP-Pakete + überträgt. + \item + Ein solcher Tunnel kann zwischen verschiedenen Einheiten realisiert + werden: + + \begin{itemize} + \item + Einem Client-PC und einem PPTP Remote Access Server (RAS): + + \begin{itemize} + \item + Dies wird auch als freiwilliges Tunneling bezeichnet, da der + Client-PC aktiv an der PPTP-Verarbeitung beteiligt ist. + \item + Diese Variante ermöglicht die sichere Kommunikation zwischen einem + Client-PC und einem bestimmten Subnetz unter Verwendung beliebiger + Zugangs- und Zwischennetze + \end{itemize} + \item + Ein Point of Presence (POP) eines ISP und ein + PPTP-Fernzugangsserver: + + \begin{itemize} + \item + Dies wird auch als obligatorisches Tunneling bezeichnet, da der + Client-PC nicht an der Entscheidung beteiligt ist, ob PPTP + verwendet wird oder nicht. + \item + Auf diese Weise lässt sich Sicherheit auf Subnetzebene + realisieren, aber keine echte End-to-End-Sicherheit zwischen dem + Client-PC und dem RAS + \item + Beim obligatorischen Tunneling fungiert der ISP POP als + Proxy-Client für den RAS + \end{itemize} + \end{itemize} + \end{itemize} + + Obligatorische Tunneling-Protokollschichten + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-PPTP-Tunneling-Protocol.png} + \item + % \includegraphics{Assets/NetworkSecurity-PPTP-Tunneling-Protocol2.png} + \item + % \includegraphics{Assets/NetworkSecurity-PPTP-Packet-Construction-at-Client.png} + \end{itemize} + + + \subsubsection{PPTP / PPP Proprietäre Erweiterungen und einige + ,,Geschichte''} + + \begin{itemize} + \item + PPTP hat sich vor allem aufgrund der Unterstützung durch Microsoft + durchgesetzt: + + \begin{itemize} + \item + Es wurde unter aktiver Beteiligung von Microsoft entwickelt und ist + in {[}RFC2637{]} dokumentiert. + \item + Microsoft implementierte es als Teil seines Remote Access Service + (RAS) + \end{itemize} + \item + Microsoft hat weitere ,,proprietäre'' Erweiterungen für PPP + spezifiziert: + + \begin{itemize} + \item + Microsoft PPP CHAP-Erweiterungen {[}RFC2433{]} + \item + Microsoft Point to Point Encryption Protocol {[}RFC3078{]} + \end{itemize} + \item + Allerdings wurde eine Reihe von Schwachstellen in PPTP Version 1 und + auch in einer verbesserten Version 2 entdeckt {[}SM98a, SMW99a{]}: + + \begin{itemize} + \item + Ein allgemeiner Konsens, PPTP als Standardprotokoll zu übernehmen, + konnte in den in den IETF-Arbeitsgruppen nicht erreicht werden. + \item + Außerdem wurde ein ähnliches Protokoll (Layer 2 Forwarding, L2F) von + Cisco als konkurrierender Ansatz vorgeschlagen + \item + Infolgedessen wurde ein Kompromiss gefunden, der die Vorteile beider + Vorschläge in einem einzigen Protokoll zusammenfasst: Layer 2 + Tunneling Protocol (L2TP) + \end{itemize} + \end{itemize} + + + \subsubsection{Vergleich von PPTP und + L2TP} + + \begin{itemize} + \item + Beide Protokolle: + + \begin{itemize} + \item + verwenden PPP, um eine anfängliche Umhüllung für Benutzerpakete + bereitzustellen + \item + erweitern das PPP-Modell, indem sie erlauben, dass die Layer-2- und + PPP-Endpunkte sich auf verschiedenen Geräten befinden + \item + unterstützen freiwilliges und obligatorisches Tunneling + \end{itemize} + \item + Zugrundeliegendes Netzwerk: + + \begin{itemize} + \item + PPTP benötigt ein IP-Netzwerk für den Transport seiner PDUs + \item + L2TP unterstützt verschiedene Technologien: IP (unter Verwendung von + UDP), permanente virtuelle Schaltungen (PVCs) von Frame Relay, + virtuelle Schaltungen (VCs) von X.25 oder ATM VCs + \end{itemize} + \item + PPTP kann nur einen einzigen Tunnel zwischen Endpunkten unterstützen, + L2TP ermöglicht die Verwendung mehrerer Tunnel zwischen Endpunkten + + \begin{itemize} + \item + L2TP ermöglicht z. B. die Erstellung verschiedener Tunnel für + unterschiedliche Dienstqualitäten + \end{itemize} + \item + Beide Protokolle bieten eine Header-Kompression: + + \begin{itemize} + \item + Mit Header-Kompression kommt L2TP mit 4 Byte Overhead aus, im + Vergleich zu 6 Byte bei PPTP. + \end{itemize} + \item + L2TP ermöglicht eine Tunnelauthentifizierung, während PPTP dies nicht + tut. + \end{itemize} + + + \subsection{Virtuelle private + Netzwerke} + + \begin{itemize} + \item + Verschiedene Definitionen des Begriffs virtuelles privates Netzwerk + (VPN): + + \begin{itemize} + \item + Ein privates Netz, das innerhalb einer öffentlichen + Netzinfrastruktur, wie dem globalen Internet, aufgebaut ist. + \item + Eine Kommunikationsumgebung, in der der Zugang kontrolliert wird, um + Peer-Verbindungen nur innerhalb einer definierten + Interessengemeinschaft zuzulassen, und die durch eine Form der + Partitionierung eines gemeinsamen zugrundeliegenden + Kommunikationsmediums aufgebaut ist, wobei dieses zugrundeliegende + Kommunikationsmedium dem Netz Dienste auf nicht-exklusiver Basis + bereitstellt + \item + Ein logisches Computernetzwerk mit eingeschränkter Nutzung, das aus + den Systemressourcen eines relativ öffentlichen, physischen + Netzwerks (z. B. dem Internet) aufgebaut ist, oft unter Verwendung + von Verschlüsselung und oft durch Tunneln von Verbindungen des + virtuellen Netzwerks über das reale Netzwerk {[}RFC2828{]}. + \item + Anmerkung: Die beiden letzteren Definitionen beinhalten explizit + Sicherheitseigenschaften (kontrollierter Zugriff, Verschlüsselung), + die erste hingegen nicht. + \end{itemize} + \end{itemize} + + \begin{quote} + ,,Sicher, es ist viel billiger als eigene Frame-Relay-Verbindungen, aber + es funktioniert ungefähr so gut, wie wenn man sich auf dem Times Square + Watte in die Ohren steckt und so tut, als wäre sonst niemand da.'' + (Wired Magazine Feb. 1998) + \end{quote} + + Techniken zum Aufbau virtueller privater Netze + + \begin{itemize} + \item + Nutzung dedizierter Verbindungen (Cut-Through-Mechanismen): + + \begin{itemize} + \item + Virtuelle Verbindungen über ATM oder Frame Relay + \item + Multi-Protokoll über ATM (MPOA) + \item + Multiprotokoll-Etiketten-Vermittlung (MPLS) + \item + Sicherheitsdienste für Link Layer VPNs können effizient im Link + Layer Protokoll realisiert werden; ein Beispiel ist die ATM Security + Specification {[}ATM99a{]} + \end{itemize} + \item + Kontrolliertes Routenleck / Routenfilterung: + + \begin{itemize} + \item + Grundidee: Kontrolle der Routenausbreitung dahingehend, dass nur + bestimmte Netze Routen für andere Netze erhalten + \item + Damit soll ,,security by obscurity'' realisiert werden (also kein + wirklicher Schutz!) + \end{itemize} + \item + Tunneln: + + \begin{itemize} + \item + Generische Routing-Kapselung (GRE) + \item + PPP / PPTP / L2TP + \item + IPSec-Sicherheitsarchitektur für das Internet-Protokoll + \end{itemize} + \end{itemize} + + + \section{Die IPsec-Architektur für das + Internet-Protokoll} + + + \subsection{Überblick} + + \begin{itemize} + \item + Kurze Einführung in das Internet-Protokoll (IP) + \item + Sicherheitsprobleme von IP und Ziele von IPsec + \item + Die IPsec-Architektur: + + \begin{itemize} + \item + Modi des IPsec-Sicherheitsprotokolls: + + \begin{itemize} + \item + Transportmodus + \item + Tunnel-Modus + \end{itemize} + \item + Alternativen zur Implementierung + \item + IP-Sicherheitsrichtlinien-Datenbank (SPD) + \item + Sicherheitsvereinigungen (SA) und die SA-Datenbank (SADB) + \end{itemize} + \item + IPsec Sicherheitsprotokolle: + + \begin{itemize} + \item + Authentifizierungs-Header (AH) + \item + Encapsulating Security Payload (ESP) + \end{itemize} + \item + Entitätsauthentifizierung und der Internet-Schlüsselaustausch (IKE) + \end{itemize} + + + \subsection{Die TCP/IP-Protokollsuite} + + \begin{itemize} + \item + IP (Internet Protocol): unzuverlässiges, verbindungsloses + Netzwerkprotokoll + \item + TCP (Transmission Control Protocol): zuverlässiges, + verbindungsorientiertes Transportprotokoll, realisiert über IP + \item + UDP (User Datagram Protocol): unzuverlässiges, verbindungsloses + Transportprotokoll, bietet eine Anwendungsschnittstelle zu IP + \item + Beispiele für Anwendungsprotokolle : + + \begin{itemize} + \item + HTTP: Hypertext-Übertragungsprotokoll + \item + SMTP: Einfaches Mail-Übertragungsprotokoll + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-tcp-ip-suite.png} + \end{itemize} + + + \subsection{Das IPv4-Paketformat} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipv4-packet-format.png} + \item + Version (Ver.): 4 bit + + \begin{itemize} + \item + Derzeit ist Version 4 weit verbreitet + \item + Version 6 ist bereits spezifiziert, aber es ist noch nicht klar, ob + sie jemals zum Einsatz kommen wird + \end{itemize} + \item + IP-Header-Länge (IHL): 4 Bit + + \begin{itemize} + \item + Länge des IP-Headers in 32-Bit-Wörtern + \end{itemize} + \item + Art des Dienstes (TOS): 8 Bit + + \begin{itemize} + \item + Dieses Feld könnte verwendet werden, um die Verkehrsanforderungen + eines Pakets anzugeben. + \item + Jetzt: DCSP und Explicit Congestion (EC) Indication + \end{itemize} + \item + Länge: 16 Bit + + \begin{itemize} + \item + Die Länge des Pakets einschließlich des Headers in Oktetten + \item + Dieses Feld ist, wie alle anderen Felder in der IP-Suite, in ,,big + endian'' Darstellung + \end{itemize} + \item + Kennung: 16 Bit + + \begin{itemize} + \item + Dient der ,,eindeutigen'' Identifizierung eines IP-Datagramms + \item + Wichtig für das Wiederzusammensetzen von fragmentierten + IP-Datagrammen + \end{itemize} + \item + Flaggen: 3 Bit + + \begin{itemize} + \item + Bit 1: nicht fragmentieren + \item + Bit 2: Datagramm fragmentiert + \item + Bit 3: reserviert für zukünftige Verwendung + \end{itemize} + \item + Fragmentierungs-Offset: 13 Bit + + \begin{itemize} + \item + Die Position dieses Pakets im entsprechenden IP-Datagramm + \end{itemize} + \item + Lebenszeit (TTL): 8 Bit + + \begin{itemize} + \item + An jedem verarbeitenden Netzknoten wird dieses Feld um eins + dekrementiert + \item + Wenn die TTL 0 erreicht, wird das Paket verworfen, um Paketschleifen + zu vermeiden. + \end{itemize} + \item + Protokoll: 8 Bit + + \begin{itemize} + \item + Gibt das (Transport-)Protokoll der Nutzlast an + \item + Wird vom empfangenden Endsystem verwendet, um Pakete zwischen + verschiedenen Transportprotokollen wie TCP, UDP, ... zu + entmultiplexen. + \end{itemize} + \item + Prüfsumme: 16 Bit + + \begin{itemize} + \item + Schutz vor Übertragungsfehlern + \item + Da es sich nicht um eine kryptografische Prüfsumme handelt, kann sie + leicht gefälscht werden. + \end{itemize} + \item + Quelladresse: 32 Bit + + \begin{itemize} + \item + Die IP-Adresse des Absenders dieses Pakets + \end{itemize} + \item + Zieladresse: 32 Bit + + \begin{itemize} + \item + Die IP-Adresse des vorgesehenen Empfängers dieses Pakets + \end{itemize} + \item + IP-Optionen: variable Länge + + \begin{itemize} + \item + Ein IP-Header kann optional zusätzliche Informationen enthalten. + \item + Da sie nicht Bestandteil von IPsec sind, werden sie in diesem Kurs + nicht behandelt. + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitsprobleme des + Internet-Protokolls} + + \begin{itemize} + \item + Wenn eine Einheit ein IP-Paket empfängt, hat sie keine Garantie für: + + \begin{itemize} + \item + Authentifizierung der Datenherkunft / Datenintegrität: + + \begin{itemize} + \item + Das Paket wurde tatsächlich von der Einrichtung gesendet, auf die + die Quelladresse des Pakets verweist. + \item + Das Paket enthält den ursprünglichen Inhalt des Absenders, so dass + es während des Transports nicht verändert worden ist. + \item + Die empfangende Einrichtung ist tatsächlich die Einrichtung, an + die der Absender das Paket senden wollte. + \end{itemize} + \item + Vertraulichkeit: + + \begin{itemize} + \item + Die ursprünglichen Daten wurden auf dem Weg vom Absender zum + Empfänger nicht von Dritten eingesehen. + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Sicherheitsziele von + IPsec} + + \begin{itemize} + \item + IPsec zielt darauf ab, die folgenden Sicherheitsziele zu + gewährleisten: + + \begin{itemize} + \item + Authentifizierung der Datenherkunft / Verbindungslose + Datenintegrität: + + \begin{itemize} + \item + Es ist nicht möglich, ein IP-Datagramm mit einer maskierten + IP-Quell- oder Zieladresse zu senden, ohne dass der Empfänger dies + erkennen kann. + \item + Es ist nicht möglich, ein IP-Datagramm während der Übertragung zu + verändern, ohne dass der Empfänger diese Veränderung feststellen + kann. + \item + Wiedergabeschutz: Es ist nicht möglich, ein aufgezeichnetes + IP-Paket zu einem späteren Zeitpunkt erneut abzuspielen, ohne dass + der Empfänger dies erkennen kann. + \end{itemize} + \item + Vertraulichkeit: + + \begin{itemize} + \item + Es ist nicht möglich, den Inhalt von IP-Datagrammen zu belauschen + \item + Begrenzte Vertraulichkeit des Verkehrsflusses + \end{itemize} + \end{itemize} + \item + Sicherheitspolitik: + + \begin{itemize} + \item + Sender, Empfänger und Zwischenknoten können den erforderlichen + Schutz für ein IP-Paket gemäß einer lokalen Sicherheitsrichtlinie + festlegen + \item + Zwischenknoten und der Empfänger verwerfen IP-Pakete, die diese + Anforderungen nicht erfüllen + \end{itemize} + \end{itemize} + + + \subsection{Überblick über die + IPsec-Standardisierung} + + % \includegraphics{Assets/NetworkSecurity-IPsec-standardization.png} + + + \subsection{Überblick über die + IPsec-Architektur} + + \begin{itemize} + \item + RFC 4301 definiert die grundlegende Architektur von IPsec: + + \begin{itemize} + \item + Konzepte: + + \begin{itemize} + \item + Sicherheitsvereinigung (SA), Sicherheitsvereinigungsdatenbank + (SADB) + \item + Sicherheitsrichtlinien, Sicherheitsrichtlinien-Datenbank (SPD) + \end{itemize} + \item + Grundlegende IPsec-Protokolle: + + \begin{itemize} + \item + Authentifizierungs-Header (AH) + \item + Encapsulating Security Payload (ESP) + \end{itemize} + \item + Protokoll-Modi: + + \begin{itemize} + \item + Transport-Modus + \item + Tunnel-Modus + \end{itemize} + \item + Schlüsselmanagement-Verfahren: + + \begin{itemize} + \item + IKE \& IKEv + \end{itemize} + \end{itemize} + \item + RFC 4301 definiert die grundlegende Architektur von IPsec: + + \begin{itemize} + \item + Verwendung von verschiedenen kryptographischen Primitiven mit AH und + ESP: + + \begin{itemize} + \item + Verschlüsselung: 3DES-CBC, AES und andere + CBC-Verschlüsselungsalgorithmen, AES-Zählermodus + \item + Integrität: HMAC-MD5, HMAC-SHA-1, HMAC-SHA-2, HMAC- RIPEMD-160, + AES-GMAC, AES-CMAC, AES-XCBC... + \item + Authentifizierte Verschlüsselung: GCM und "Zähler mit CBC-MAC" + (CCM), beide für AES definiert + \end{itemize} + \end{itemize} + \item + Eine Sicherheitsassoziation (SA) ist eine Simplex- ,,Verbindung'', die + Sicherheitsdienste für den von ihr beförderten Verkehr bereitstellt. + + \begin{itemize} + \item + Sicherheitsdienste werden für eine SA entweder mit AH oder ESP + bereitgestellt, jedoch nicht mit beiden. + \item + Für bidirektionale Kommunikation sind zwei Sicherheitsverbindungen + erforderlich. + \item + Eine SA wird eindeutig durch ein Tripel identifiziert, das aus einem + Sicherheitsparameterindex (SPI), einer IP-Zieladresse und einer + Sicherheitsprotokollkennung (AH / ESP) besteht. + \item + Eine SA kann zwischen den folgenden Gegenstellen eingerichtet + werden: + + \begin{itemize} + \item + Host \$\textbackslash leftrightarrow\$ Host + \item + Host \$\textbackslash leftrightarrow\$ Gateway (oder andersherum) + \item + Gateway \$\textbackslash leftrightarrow\$ Gateway + \end{itemize} + \item + Es gibt zwei konzeptionelle Datenbanken, die mit SAs verbunden sind: + + \begin{itemize} + \item + Die Sicherheitsrichtliniendatenbank (SPD) legt fest, welche + Sicherheitsdienste für welche IP-Pakete auf welche Weise + bereitgestellt werden sollen. + \item + Die Sicherheitsassoziationsdatenbank (SADB) + \end{itemize} + \end{itemize} + \item + Protokollmodi - Eine SA ist immer von einem der folgenden Typen: + + \begin{itemize} + \item + Der Transportmodus kann nur zwischen den Endpunkten einer + Kommunikation verwendet werden: + + \begin{itemize} + \item + host \$\textbackslash leftrightarrow\$ host, oder + \item + Host \$\textbackslash leftrightarrow\$-Gateway, wenn das Gateway + ein Kommunikationsendpunkt ist (z. B. für die Netzverwaltung) + \end{itemize} + \item + Der Tunnelmodus kann für beliebige Peers verwendet werden. + \end{itemize} + \item + Der Unterschied zwischen den beiden Modi ist, dass: + + \begin{itemize} + \item + Im Transportmodus wird lediglich ein sicherheitsspezifischer Header + (+ eventueller Trailer) hinzugefügt: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-transport-mode.png} + \end{itemize} + \item + Der Tunnelmodus kapselt IP-Pakete ein: Die Verkapselung von + IP-Paketen ermöglicht es einem Gateway, den Verkehr im Namen anderer + Entitäten zu schützen (z. B. Hosts eines Subnetzes usw.) + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-tunnel-mode.png} + \end{itemize} + \end{itemize} + \item + Der Authentifizierungs-Header (AH): + + \begin{itemize} + \item + Bietet Authentifizierung der Datenherkunft und Schutz vor + Wiederholung + \item + Wird als Header realisiert, der zwischen dem IP-Header und den zu + schützenden Daten eingefügt wird + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-AH.png} + \end{itemize} + \item + Die einkapselnde Sicherheitsnutzlast (ESP): + + \begin{itemize} + \item + Bietet Authentifizierung der Datenherkunft, Vertraulichkeit und + Schutz vor Wiederholung + \item + Wird mit einem Header und einem Trailer realisiert, der die zu + schützenden Daten einkapselt + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-ESP.png} + \end{itemize} + \item + Die Einrichtung von Sicherheitsvereinigungen wird mit: + + \begin{itemize} + \item + Internet Security Association Key Management Protocol (ISAKMP): + + \begin{itemize} + \item + Definiert einen generischen Rahmen für die + Schlüsselauthentifizierung, den Schlüsselaustausch und die + Aushandlung von Sicherheitsassoziationsparametern {[}RFC2408{]}. + \item + Definiert kein spezifisches Authentifizierungsprotokoll, aber + spezifiziert: + + \begin{itemize} + \item + Paketformate + \item + Zeitgeber für die Weiterleitung + \item + Anforderungen an den Nachrichtenaufbau + \end{itemize} + \item + Die Verwendung von ISAKMP für IPsec wird in {[}RFC2407{]} näher + beschrieben. + \end{itemize} + \item + Internet-Schlüsselaustausch (IKE): + + \begin{itemize} + \item + Definiert ein Authentifizierungs- und Schlüsselaustauschprotokoll + {[}RFC2409{]}. + \item + Ist konform zu ISAKMP und kann für verschiedene Anwendungen + verwendet werden + \item + Der Aufbau von IPsec SAs zwischen zwei Entitäten wird in zwei + Phasen realisiert: + + \begin{itemize} + \item + Einrichtung einer IKE SA (definiert, wie man IPsec SAs + einrichtet) + \item + Einrichtung von IPsec SAs + \end{itemize} + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{IPsec-Wiedergabeschutz (Replay + protection)} + + \begin{itemize} + \item + Sowohl AH- als auch ESP-geschützte IP-Pakete tragen eine + Sequenznummer, die einen Wiedergabeschutz realisiert: + + \begin{itemize} + \item + Beim Einrichten einer SA wird diese Sequenznummer auf Null + initialisiert. + \item + Die Sequenznummer wird mit jedem gesendeten IP-Paket erhöht + \item + Die Sequenznummer ist 32 Bit lang, es wird ein neuer + Sitzungsschlüssel benötigt, bevor ein Wrap-around erfolgt + \item + Der Empfänger eines IP-Pakets prüft, ob die Sequenznummer in einem + Fenster zulässiger Nummern enthalten ist + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-replay-protection.png} + + \begin{itemize} + \item + (Paket mit Sequenznummer N kann noch akzeptiert werden) + \end{itemize} + \end{itemize} + \item + Wenn ein empfangenes Paket eine Sequenznummer hat, die: + + \begin{itemize} + \item + links vom aktuellen Fenster \$\textbackslash Rightarrow\$ liegt, + lehnt der Empfänger das Paket ab + \item + innerhalb des aktuellen Fensters \$\textbackslash Rightarrow\$ + liegt, nimmt der Empfänger das Paket an + \item + liegt rechts vom aktuellen Fenster \$\textbackslash Rightarrow\$ der + Empfänger nimmt das Paket an und schiebt das Fenster weiter + \item + Natürlich werden IP-Pakete nur akzeptiert, wenn sie die + Authentifizierungsprüfung bestehen und das Fenster wird niemals vor + dieser Prüfung weitergeschaltet + \end{itemize} + \item + Die minimale Fenstergröße beträgt 32 Pakete (64 Pakete werden + empfohlen) + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-replay-protection2.png} + + \begin{itemize} + \item + Paket mit Sequenznummer N kann nicht mehr akzeptiert werden + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{IPsec-Implementierungsalternativen: + Host-Implementierung} + + \begin{itemize} + \item + Vorteile der IPsec-Implementierung in Endsystemen: + + \begin{itemize} + \item + Bereitstellung von End-to-End-Sicherheitsdiensten + \item + Bereitstellung von Sicherheitsdiensten auf einer Per-Flow-Basis + \item + Fähigkeit, alle IPsec-Modi zu implementieren + \end{itemize} + \item + Zwei Hauptalternativen zur Integration: \textbar{} Integriertes + Betriebssystem \textbar{} ,,Bump'' im Stack \textbar{} \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} \textbar{} Anwendung \textbar{} Anwendung \textbar{} + \textbar{} Transport \textbar{} Transport \textbar{} \textbar{} + Netzwerk + IPsec \textbar{} Netzwerk \textbar{} \textbar{} IPsec + \textbar{} \textbar{} Data Link \textbar{} Data Link \textbar{} + \textbar{} \textbar{} \textbar{} Echte Betriebssystemintegration ist + die Methode der Wahl, da sie die Duplizierung von Funktionalität + vermeidet \textbar{} Wenn das Betriebssystem nicht geändert werden + kann, wird IPsec über den Datenverbindungstreiber eingefügt \textbar{} + \end{itemize} + + + \subsection{IPsec-Implementierungsalternativen: + Router-Implementierung} + + \begin{itemize} + \item + Vorteile der IPsec-Implementierung in Routern: + + \begin{itemize} + \item + Möglichkeit, IP-Pakete zu sichern, die zwischen zwei Netzen über ein + öffentliches Netz wie das Internet fließen: + + \begin{itemize} + \item + Ermöglicht die Einrichtung virtueller privater Netzwerke (VPNs) + \item + Keine Notwendigkeit, IPsec in jedes Endsystem zu integrieren + \end{itemize} + \item + Fähigkeit zur Authentifizierung und Autorisierung des IP-Verkehrs, + der von entfernten Benutzern eingeht + \end{itemize} + \item + Zwei Hauptalternativen für die Implementierung: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-router-implementation.png} + \end{itemize} + \end{itemize} + + + \subsection{Wann sollte welcher IPsec-Modus verwendet + werden?} + + \begin{itemize} + \item + In den meisten Fällen handelt es sich bei den Kommunikationsendpunkten + um Hosts (Workstations, Server), aber das ist nicht unbedingt der + Fall: + + \begin{itemize} + \item + Beispiel: ein Gateway wird über SNMP von einer Workstation verwaltet + \end{itemize} + \item + Der Transportmodus wird verwendet, wenn die ,,kryptografischen + Endpunkte'' auch die ,,Kommunikationsendpunkte'' der gesicherten + IP-Pakete sind + + \begin{itemize} + \item + Kryptografische Endpunkte: die Entitäten, die einen IPsec-Header (AH + oder ESP) erzeugen/verarbeiten + \item + Kommunikationsendpunkte: Quelle und Ziel eines IP-Pakets + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-communication-endpoints.png} + \end{itemize} + \end{itemize} + \item + Der Tunnelmodus wird verwendet, wenn mindestens ein + ,,kryptographischer Endpunkt'' nicht ein ,,Kommunikationsendpunkt'' + der gesicherten IP-Pakete ist + + \begin{itemize} + \item + Dies ermöglicht Gateways, die den IP-Verkehr im Namen anderer + Stellen sichern + \item + % \includegraphics{Assets/NetworkSecurity-communication-tunneling.png} + \end{itemize} + \item + Die obige Beschreibung der Anwendungsszenarien für den Tunnelmodus + umfasst auch den Fall, dass nur ein kryptografischer Endpunkt kein + Kommunikationsendpunkt ist: + + \begin{itemize} + \item + Beispiel: ein Sicherheitsgateway, das die Authentifizierung und/oder + die Vertraulichkeit des IP-Verkehrs zwischen einem lokalen Teilnetz + und einem über das Internet verbundenen Host sicherstellt (,,Road + Warrior Szenario'') + \item + % \includegraphics{Assets/NetworkSecurity-communication-tunnelung-2.png} + \end{itemize} + \end{itemize} + + + \subsection{Verschachtelung von + Sicherheitsassoziationen} + + \begin{itemize} + \item + Sicherheitsassoziationen können verschachtelt werden: + + \begin{itemize} + \item + Beispiel: Host A und Gateway RB führen eine Authentifizierung der + Datenherkunft durch und die Gateways RA und RB führen eine + Vertraulichkeit von Subnetz zu Subnetz durch + \item + % \includegraphics{Assets/NetworkSecurity-communication-nesting.png} + \end{itemize} + \item + Bei der Verschachtelung von SAs muss jedoch darauf geachtet werden, + dass keine ,,falsche Klammerung'' von SAs erfolgt, wie z. B. + ,,{[}({]})'' + + \begin{itemize} + \item + Ein Beispiel für eine gültige SA-Schachtelung: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-communication-nesting-2.png} + \end{itemize} + \item + Ein Beispiel für ungültige SA-Schachtelungen: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-communication-nesting-3.png} + \item + Da das Paket von RB nach RD getunnelt wird, kann das Gateway RC + den inneren IPsec-Header nicht verarbeiten + \item + Ein mögliches Ergebnis dieser fehlerhaften Konfiguration könnte + sein, dass das Paket zurück nach RC geroutet wird + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Grundschema der IPsec-Verarbeitung: Ausgehende + Pakete} + + \begin{itemize} + \item + Nehmen wir an, die IP-Schicht eines Knotens (Host/Gateway) wird + angewiesen, ein IP-Paket an einen anderen Knoten (Host/Gateway) zu + senden + \item + Um IPsec zu unterstützen, muss sie die folgenden Schritte durchführen: + + \begin{itemize} + \item + Feststellen, ob und wie das ausgehende Paket gesichert werden muss: + + \begin{itemize} + \item + Dies wird durch einen Lookup im SPD realisiert + \item + Wenn die Richtlinie ,,verwerfen'' vorschreibt, wird das Paket + verworfen \$\textbackslash Rightarrow\$ done + \item + Wenn das Paket nicht gesichert werden muss, dann sende es + \$\textbackslash Rightarrow\$ done + \end{itemize} + \item + Ermitteln, welche SA auf das Paket angewendet werden soll: + + \begin{itemize} + \item + Wenn es noch keine passende SA mit dem entsprechenden Knoten gibt, + dann fordere den Key Management Demon auf, einen IKE durchzuführen + \end{itemize} + \item + Die ermittelte (und eventuell neu erstellte) SA in der SADB + nachschlagen + \item + Führen Sie die von der SA festgelegte Sicherheitstransformation + durch, indem Sie den Algorithmus, seine Parameter und den Schlüssel, + wie in der SA angegeben, verwenden. + + \begin{itemize} + \item + Dies resultiert in der Konstruktion eines AH- oder ESP-Headers + \item + Eventuell wird auch ein neuer (äußerer) IP-Header erstellt + (Tunnelmodus) + \end{itemize} + \item + Senden Sie das resultierende IP-Paket \$\textbackslash Rightarrow\$ + done + \end{itemize} + \end{itemize} + + + \subsection{Grundschema der IPsec-Verarbeitung: Eingehende + Pakete} + + \begin{itemize} + \item + Nehmen wir an, die IP-Schicht eines Knotens (Host/Gateway) empfängt + ein IP-Paket von einem anderen Knoten (Host/Gateway) + \item + Um IPsec zu unterstützen, muss sie die folgenden Schritte durchführen: + + \begin{itemize} + \item + Feststellen, ob das Paket einen IPsec-Header enthält, den diese + Einheit verarbeiten soll: + + \begin{itemize} + \item + Wenn es einen solchen IPsec-Header gibt, dann suchen Sie die SA in + der SADB, die durch den SPI des IPsec-Headers spezifiziert ist, + und führen Sie die entsprechende IPsec-Verarbeitung durch + \item + Wenn die SA, auf die der SPI verweist, (noch) nicht existiert, + verwerfen Sie das Paket + \end{itemize} + \item + Ermitteln, ob und wie das Paket hätte geschützt werden sollen: + + \begin{itemize} + \item + Dies wird wiederum durch einen Lookup im SPD realisiert, wobei der + Lookup im Falle von getunnelten Paketen durch Auswertung des + inneren IP-Headers durchgeführt wird + \item + Wenn die Richtlinie ,,Verwerfen'' vorschreibt, wird das Paket + verworfen. + \item + Wenn der Schutz des Pakets nicht mit der Richtlinie übereinstimmt, + wird das Paket verworfen. + \item + Wenn das Paket ordnungsgemäß gesichert wurde, dann übergebe es an + die entsprechende Protokollinstanz (Netzwerk-/Transportschicht) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Auswahl der + IPsec-Sicherheitspolitik} + + Die folgenden Selektoren, die aus den Headern der Netzwerk- und + Transportschicht extrahiert werden, ermöglichen die Auswahl einer + bestimmten Richtlinie im SPD: + + \begin{itemize} + \item + IP-Quelladresse: + + \begin{itemize} + \item + Bestimmter Host, Netzwerkpräfix, Adressbereich oder Platzhalter + \end{itemize} + \item + IP-Zieladresse: + + \begin{itemize} + \item + Bestimmter Host, Netzwerk-Präfix, Adressbereich oder Platzhalter + \item + Im Falle eingehender getunnelter Pakete wird der innere Header + ausgewertet + \end{itemize} + \item + Protokoll: + + \begin{itemize} + \item + Der Protokoll-Identifikator des Transportprotokolls für dieses Paket + \item + Dies ist möglicherweise nicht zugänglich, wenn ein Paket mit ESP + gesichert ist. + \end{itemize} + \item + Ports der oberen Schicht: + + \begin{itemize} + \item + Falls zugänglich, die Ports der oberen Schicht für die + sitzungsorientierte Policy-Auswahl + \end{itemize} + \end{itemize} + + + \subsection{IPsec Security Policy + Definition} + + \begin{itemize} + \item + Policy Selectors werden verwendet, um spezifische Policy-Definitionen + auszuwählen, spezifiziert: + + \begin{itemize} + \item + Wie die Einrichtung einer IKE SA zwischen zwei Knoten durchgeführt + werden soll: + + \begin{itemize} + \item + Identifizierung: DNS-Name oder andere Namenstypen, wie in der + IPsec-Domäne der Interpretation eines Protokolls zur Einrichtung + von SAs definiert + \item + Phase I-Modus: Hauptmodus oder aggressiver Modus (siehe unten) + \item + Schutzsuite(n): Angabe, wie die IKE-Authentifizierung durchgeführt + wird + \end{itemize} + \item + Welche und wie Sicherheitsdienste für IP-Pakete bereitgestellt + werden sollen: + + \begin{itemize} + \item + Selektoren, die bestimmte Flüsse identifizieren + \item + Sicherheitsattribute für jeden Fluss: + + \begin{itemize} + \item + Sicherheitsprotokoll: AH oder ESP + \item + Protokollmodus: Transport- oder Tunnelmodus + \item + Sicherheitstransformationen: kryptografische Algorithmen und + Parameter + \item + Andere Parameter: SA-Lebensdauer, Replay-Fenster + \end{itemize} + \item + Aktion: Verwerfen, Sichern, Umgehen + \end{itemize} + \end{itemize} + \item + Wenn bereits eine SA mit einem entsprechenden Sicherheitsendpunkt + eingerichtet ist, wird im SPD auf diese verwiesen. + \end{itemize} + + + \subsection{Die Encapsulating Security + Payload} + + \begin{itemize} + \item + ESP ist ein allgemeines Sicherheitsprotokoll, das IP-Paketen einen + Wiederholungsschutz und einen oder beide der folgenden + Sicherheitsdienste bietet: + + \begin{itemize} + \item + Vertraulichkeit durch Verschlüsselung der eingekapselten Pakete oder + nur ihrer Nutzlast + \item + Authentifizierung der Datenherkunft durch Erstellung und Hinzufügung + von MACs zu Paketen + \end{itemize} + \item + Die ESP-Definition gliedert sich in zwei Teile: + + \begin{itemize} + \item + Die Definition des Basisprotokolls {[}RFC4303{]}: + + \begin{itemize} + \item + Definition des Header- und Trailer-Formats + \item + Verarbeitung des Basisprotokolls + \item + Tunnel- und Transportmodusbetrieb + \end{itemize} + \item + Die Verwendung spezifischer kryptographischer Algorithmen mit ESP: + + \begin{itemize} + \item + Verschlüsselung: 3DES-CBC, AES-CBC, AES-Zählmodus, Verwendung + anderer Chiffren im CBC-Modus + \item + Authentifizierung: HMAC-MD5-96, HMAC-SHA-96,... + \end{itemize} + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ESP.png} + + \begin{itemize} + \item + Der ESP-Header folgt unmittelbar auf einen IP-Header oder einen + AH-Header + \item + Das Next-Header-Feld des vorangehenden Headers zeigt ,,50'' für ESP + an + \item + Das SPI-Feld gibt die SA an, die für dieses Paket verwendet werden + soll: + + \begin{itemize} + \item + Der SPI-Wert wird immer von der empfangenden Seite während der + SA-Aushandlung bestimmt, da der Empfänger das Paket verarbeiten + muss. + \end{itemize} + \item + Die Sequenznummer bietet, wie bereits erläutert, Schutz vor + Wiederholung. + \item + Wenn der verwendete kryptographische Algorithmus einen + Initialisierungsvektor benötigt, wird dieser in jedem Paket am + Anfang der Nutzlast im Klartext übertragen + \item + Das Pad-Feld dient der Sicherstellung: + + \begin{itemize} + \item + Auffüllen der Nutzlast bis zur erforderlichen Blocklänge der + verwendeten Chiffre + \item + Auffüllen der Nutzlast, um die Felder pad-length und next-header + rechtsbündig in die höherwertigen 16 Bit eines 32-Bit-Wortes + einzupassen + \end{itemize} + \item + Die Auffülllänge gibt die Anzahl der hinzugefügten Auffüllbytes an. + \item + Das next-header-Feld des ESP-Headers gibt die eingekapselte Nutzlast + an: + + \begin{itemize} + \item + Im Falle des Tunnelmodus: IP + \item + Im Falle des Transportmodus: ein beliebiges Protokoll der höheren + Schicht wie TCP, UDP, ... + \end{itemize} + \item + Das optionale Feld authentication-data enthält eine MAC, falls + vorhanden + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ESP-processing.png} + \item + % \includegraphics{Assets/NetworkSecurity-ESP-prepare-header.png} + \item + % \includegraphics{Assets/NetworkSecurity-ESP-inbound-processing.png} + \item + % \includegraphics{Assets/NetworkSecurity-ESP-inbound-processing-2.png} + \item + Beachten Sie, dass das entkapselte IP-Paket ein fragmentiertes Paket + sein kann: + + \begin{itemize} + \item + Dies kann vorkommen, wenn ESP von einem Router im Tunnelmodus + angewendet wurde. + \item + Um die Konformität mit der SA-Policy korrekt zu prüfen, müssen alle + zu diesem Paket gehörenden Fragmente vom Router empfangen werden, + bevor die Prüfung durchgeführt werden kann + \item + Beispiel: In einer SA sind nur Pakete an einen bestimmten Port + erlaubt + + \begin{itemize} + \item + Die erforderliche Port-Information ist nur im ersten Fragment des + IP-Pakets vorhanden + \end{itemize} + \end{itemize} + \item + Paketzustellung bedeutet Zustellung an die entsprechende + Verarbeitungseinheit: + + \begin{itemize} + \item + Wenn ein anderer IPsec-Header für diese Entität vorhanden ist + \$\textbackslash Rightarrow\$ IPsec-Verarbeitung + \item + Im Tunnelmodus \$\textbackslash Rightarrow\$ Übermittlung des Pakets + \item + Im Transportmodus \$\textbackslash Rightarrow\$ Aufruf des + entsprechenden Protokoll-Headers (TCP, UDP, etc.) + \end{itemize} + \item + Wenn ESP sowohl Vertraulichkeit als auch Authentifizierung bietet, + können für beide Dienste unterschiedliche Schlüssel verwendet werden. + + \begin{itemize} + \item + Dies muss während der Einrichtung der ESP-SA ausgehandelt werden. + \end{itemize} + \item + Beachten Sie, dass die Verwendung von ESP ohne Authentifizierung + unsicher ist... + + \begin{itemize} + \item + Kein zuverlässiger Schutz vor Wiederholungen + \item + Zumindest, wenn im CBC-Modus verwendet: + + \begin{itemize} + \item + Aktive Angriffe ermöglichen die Wiederherstellung von Nachrichten + \item + Beispiel: Bits umdrehen und prüfen, ob Fehlermeldungen erzeugt + werden + \item + Vollständige Wiederherstellung von Klartextblöcken + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Der + Authentifizierungs-Header} + + \begin{itemize} + \item + AH ist ein allgemeines Sicherheitsprotokoll, das IP-Paketen Schutz + bietet: + + \begin{itemize} + \item + Wiedergabeschutz + \item + Authentifizierung der Datenherkunft durch Erstellung und Hinzufügung + von MACs zu den Paketen + \end{itemize} + \item + Wie bei ESP ist die AH-Definition in zwei Teile aufgeteilt: + + \begin{itemize} + \item + Die Definition des Basisprotokolls {[}RFC4302{]}: + + \begin{itemize} + \item + Definition des Header-Formats + \item + Verarbeitung des Basisprotokolls + \item + Tunnel- und Transportmodusbetrieb + \end{itemize} + \item + Die Verwendung spezifischer kryptographischer Algorithmen bei AH: + + \begin{itemize} + \item + Authentifizierung: HMAC-MD5-96, HMAC-SHA1-96, HMAC-SHA2, ... + \item + Wenn sowohl ESP als auch AH von einer Stelle angewendet werden + sollen, wird immer zuerst ESP angewendet: + \end{itemize} + \item + Dies führt dazu, dass AH der äußere Header ist. + \item + ,,Vorteil'': der IP-Header kann auch durch AH geschützt werden + \item + Anmerkung: Für jede Richtung werden zwei SAs (je eine für AH, ESP) + benötigt. + \end{itemize} + \item + Im Tunnelmodus stellt die Nutzlast ein vollständiges IP-Paket dar + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-authentication-header.png} + \end{itemize} + \item + Obwohl AH auch den äußeren IP-Header schützt, dürfen einige seiner + Felder nicht geschützt werden, da sie sich während der Übertragung + ändern können: + + \begin{itemize} + \item + Dies gilt auch für veränderliche IPv4-Optionen oder + IPv6-Erweiterungen. + \item + Solche Felder werden bei der Berechnung des MAC als Null angenommen + \item + % \includegraphics{Assets/NetworkSecurity-authentication-header-2.png} + \end{itemize} + \item + Alle unveränderlichen Felder, Optionen und Erweiterungen (grau) sind + geschützt + \item + % \includegraphics{Assets/NetworkSecurity-AH-Ausgangsbearbeitung.png} + \item + % \includegraphics{Assets/NetworkSecurity-AH-prepare-header.png} + \item + % \includegraphics{Assets/NetworkSecurity-AH-inbound-processing-1.png} + \item + % \includegraphics{Assets/NetworkSecurity-AH-inbound-processing-2.png} + \end{itemize} + + + \subsection{IPsec's Verwendung von kryptographischen + Algorithmen} + + \begin{itemize} + \item + Vertraulichkeit (nur ESP): + + \begin{itemize} + \item + Die Verwendung von DES mit ESP {[}RFC4303{]} wird nicht mehr + empfohlen + \item + AES-CBC, definiert in RFC 3602, ist vielleicht "der" + Standardalgorithmus + \item + Der Initialisierungsvektor (IV) ist immer im Klartext enthalten, um + Synchronisationsprobleme zu vermeiden. + \item + Der gesamte IV soll zufällig sein + \item + Nehmen Sie KEINE weiteren IVs aus früheren Chiffretexten! + + \begin{itemize} + \item + Sicherheitsprobleme + \item + Synchronisationsprobleme + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ipsec-protect-payload.png} + \end{itemize} + \item + Authentifizierung der Datenherkunft (AH und ESP): + + \begin{itemize} + \item + Einige der Algorithmen zur Authentifizierung sind bereits definiert: + + \begin{itemize} + \item + HMAC-MD5-96 mit Schlüssellänge 128 Bit + \item + HMAC-SHA1-96 mit Schlüssellänge 160 Bit + \item + HMAC-RIPEMD160-96 mit einer Schlüssellänge von 160 Bit + \item + HMAC-SHA2 mit Schlüssellängen von 256, 384 und 512 Bit + \end{itemize} + \item + Alle diese Algorithmen verwenden die in {[}RFC2104{]} definierte + HMAC-Konstruktion: + + \begin{itemize} + \item + ipad = 0x36 wiederholt B mal (B = 64 für die oben genannten + Algorithmen) + \item + opad = 0x5C, B-mal wiederholt + \item + HMAC = H(Key XOR opad, H(Key XOR ipad, data)), wobei H die + verwendete kryptografische Hash-Funktion angibt + \end{itemize} + \item + Das ,,-96'' in den oben genannten Algorithmen bedeutet, dass die + Ausgabe der Hash-Funktion auf die 96 ganz linken Bits gekürzt wird + \item + SHA2 abgeschnitten auf die Hälfte der Schlüssellänge + \item + Dieser Wert erfüllt die meisten Sicherheitsanforderungen gut + \end{itemize} + \end{itemize} + + + \subsection{Aufbau von + Sicherheitsassoziationen} + + \begin{itemize} + \item + Bevor ein Paket durch IPsec geschützt werden kann, muss eine SA + zwischen den beiden ,,kryptographischen Endpunkten'', die den Schutz + bieten, eingerichtet werden + \item + Der Aufbau einer SA kann realisiert werden: + + \begin{itemize} + \item + Manuell, durch proprietäre Methoden der Systemverwaltung + \item + Dynamisch, durch ein standardisiertes Authentifizierungs- und + Schlüsselverwaltungsprotokoll + \item + Die manuelle Einrichtung sollte nur in sehr eingeschränkten + Konfigurationen (z.B. zwischen zwei verschlüsselnden Firewalls eines + VPN) und während einer Übergangsphase verwendet werden + \end{itemize} + \item + IPsec definiert eine standardisierte Methode für den SA-Aufbau: + + \begin{itemize} + \item + Internet Security Association and Key Management Protocol (ISAKMP) + + \begin{itemize} + \item + Definiert Protokollformate und Verfahren für die + Sicherheitsaushandlung + \end{itemize} + \item + Internet-Schlüsselaustausch (IKE) + + \begin{itemize} + \item + Definiert das Standard-Authentifizierungs- und + Schlüsselaustauschprotokoll von IPsec + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{ISAKMP - Einführung} + + \begin{itemize} + \item + Die IETF hat zwei RFCs zu ISAKMP für IPsec verabschiedet: + + \begin{itemize} + \item + RFC 2408, der das ISAKMP-Basisprotokoll definiert + \item + RFC 2407, der die ,,domain of interpretation'' (DOI) von IPsec für + ISAKMP definiert und die für IPsec spezifischen Nachrichtenformate + näher beschreibt + \end{itemize} + \item + Das ISAKMP-Basisprotokoll ist ein generisches Protokoll, das für + verschiedene Zwecke verwendet werden kann: + + \begin{itemize} + \item + Die für eine Anwendung von ISAKMP spezifischen Verfahren werden in + einem DOI-Dokument detailliert beschrieben. + \item + Es wurden weitere DOI-Dokumente erstellt: + + \begin{itemize} + \item + Group DOI für sichere Gruppenkommunikation {[}RFC6407{]} + \item + MAP DOI für die Verwendung von ISAKMP zum Aufbau von SAs zur + Sicherung des Mobile Application Protocol (MAP) von GSM (Internet + Draft, Nov. 2000) + \end{itemize} + \end{itemize} + \item + ISAKMP definiert zwei grundlegende Kategorien von Austauschvorgängen: + + \begin{itemize} + \item + Phase 1 Austausch, bei dem eine Art von ,,Master SA'' ausgehandelt + wird + \item + Phase 2 Austausch, der die ,,Master SA'' verwendet, um andere SAs zu + etablieren + \end{itemize} + \end{itemize} + + + \subsubsection{ISAKMP - Grundlegendes + Nachrichtenformat} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-format.png} + \item + Initiator \& Responder Cookie: + + \begin{itemize} + \item + Identifizieren einen ISAKMP-Austausch bzw. eine + Sicherheitsassoziation + \item + Dienen auch als begrenzter Schutz gegen Denial-of-Service-Angriffe + (siehe unten) + \end{itemize} + \item + Nächste Nutzlast: gibt an, welcher ISAKMP-Nutzlasttyp die erste + Nutzlast der Nachricht ist + \item + Major \& Minor Version: gibt die Version des ISAKMP-Protokolls an + \item + Austausch-Typ: + + \begin{itemize} + \item + Gibt die Art des verwendeten Austauschs an + \item + Es gibt fünf vordefinierte generische Austauschtypen, weitere Typen + können pro DOI definiert werden + \end{itemize} + \item + Flags: + + \begin{itemize} + \item + Encrypt: wenn auf eins gesetzt, wird die Nutzlast nach dem Header + verschlüsselt + \item + Commit: wird für die Schlüsselsynchronisation verwendet + \item + Authenticate only: wenn auf eins gesetzt, wird nur der Schutz der + Datenursprungsauthentifizierung auf die ISAKMP-Nutzdaten angewendet + und keine Verschlüsselung durchgeführt + \end{itemize} + \item + Nachrichten-ID: + + \begin{itemize} + \item + Dient zur Identifizierung von Nachrichten, die zu verschiedenen + Austauschen gehören + \end{itemize} + \item + Nachrichtenlänge: + + \begin{itemize} + \item + Gesamtlänge der Nachricht (Header + Payload) + \end{itemize} + \item + Nutzlast: + + \begin{itemize} + \item + Die Nutzlast einer ISAKMP-Nachricht kann tatsächlich mehrere + ,,verkettete'' Nutzlasten enthalten + \item + Der Nutzlasttyp der ersten Nutzlast in der Nachricht wird im + nächsten Nutzlastfeld des ISAKMP-Headers angegeben + \item + Alle ISAKMP-Nutzdaten haben einen gemeinsamen Nutzdaten-Header: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-payload.png} + \item + Next Header: der Payload-Typ des nächsten Payloads in der + Nachricht + \item + Payload Length: Gesamtlänge der aktuellen Payload (einschließlich + dieses Headers) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{ISAKMP - Begrenzter Schutz vor Denial of + Service} + + \begin{itemize} + \item + Die Initiator- und Responder-Cookies dienen auch als Schutz gegen + einfache Denial-of-Service-Angriffe: + + \begin{itemize} + \item + Authentifizierung und Schlüsselaustausch erfordern oft ,,teure'' + Berechnungen, z.B. Potenzierung (für Diffie-Hellman + Schlüsselaustausch) + \item + Um zu verhindern, dass ein Angreifer eine ISAKMP-Einheit mit + gefälschten Nachrichten von gefälschten Quelladressen überschwemmen + und diese teuren Operationen verursachen kann, wird das folgende + Schema verwendet: + + \begin{itemize} + \item + Die initiierende ISAKMP-Entität erzeugt einen Initiator-Cookie: + \$CKY-I = H(Secret\_\{Initiator\}, Address\_\{Responder\}, + t\_\{Initiator\})\$ + \item + Der Responder generiert sein eigenes Cookie: \$CKY-R = + H(Secret\_\{Responder\}, Address\_\{Initiator\}, + t\_\{Responder\})\$ + \item + Beide Entitäten schließen immer beide Cookies ein und überprüfen + immer ihr eigenes Cookie, bevor sie eine teure Operation + durchführen + \item + Der oben erwähnte Angriff wird daher nicht erfolgreich sein, da + der Angreifer eine Antwort von dem angegriffenen System erhalten + muss, um ein Cookie von ihm zu erhalten + \end{itemize} + \item + ISAKMP spezifiziert die genaue Cookie-Erzeugungsmethode nicht + \end{itemize} + \end{itemize} + + + \subsubsection{ISAKMP - Nutzdatenarten} + + \begin{itemize} + \item + RFC 2408 definiert verschiedene Nutzdaten von ISAKMP (Liste ist nicht + vollständig): + + \begin{itemize} + \item + Generische Payloads: Hash, Signatur, Nonce, Vendor ID, + Schlüsselaustausch + \item + Spezifische Payloads: SA, Zertifikat, Zertifikatsanforderung, + Identifikation + \item + Abhängige und gekapselte Nutzdaten: + + \begin{itemize} + \item + Proposal-Payload: beschreibt einen Vorschlag für die + SA-Verhandlung + \item + Transform-Payload: beschreibt eine Transformation eines Proposals + \end{itemize} + \item + Außerdem gibt es eine generische Attribut-Nutzlast: + + \begin{itemize} + \item + Dies ist eigentlich kein ISAKMP-Payload, sondern ein Payload, der + innerhalb der ISAKMP-Payloads erscheint. + \item + Alle Attribut-Payloads haben eine gemeinsame Struktur: + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-payload-types.png} + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{ISAKMP - Die + Sicherheits-Assoziations-Nutzdaten} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-security-payload.png} + \item + Domain of Interpretation definiert die Anwendungsdomäne für die + auszuhandelnde SA, z.B. IPsec + \item + Situation ist ein DOI-spezifisches Feld, das die Situation angibt, in + der die aktuelle Verhandlung stattfindet (z. B. Notruf vs. normaler + Anruf) + \item + Auf den SA-Payload folgen ein oder mehrere Proposal-Payloads + \end{itemize} + + + \subsubsection{ISAKMP - Die + Vorschlagsnutzdaten} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-proposal-payload.png} + \item + Proposal \# wird verwendet, um Richtlinien auszudrücken und Vorschläge + auszuhandeln: + + \begin{itemize} + \item + Wenn zwei oder mehr Vorschläge die gleiche Nummer tragen, wird ein + logisches UND realisiert. + \item + Unterschiedliche Werte für Proposal \# realisieren logisches OR mit + absteigender Priorität + \end{itemize} + \item + Protocol ID gibt den Protokoll-Identifikator der aktuellen Verhandlung + an, z. B. AH oder ESP (für IPsec) + \item + SPI Size gibt die Länge des enthaltenen SPI-Wertes an + \item + Number of Transforms (Anzahl der Transformationen) gibt an, wie viele + Transformationen zu diesem Vorschlag gehören (diese folgen unmittelbar + auf die Nutzlast des Vorschlags) + \end{itemize} + + + \subsubsection{ISAKMP - Die + Transformations-Nutzdaten} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-ISAKMP-transform-payload.png} + \item + Eine Transform-Payload spezifiziert einen bestimmten + Sicherheitsmechanismus, auch Transform genannt, der zur Sicherung des + Kommunikationskanals verwendet werden soll. + \item + Jede in einem Vorschlag aufgeführte Transformation hat eine eindeutige + Transform \# + \item + Jede Transformation wird durch eine Transform-ID eindeutig + identifiziert, z.B. 3DES, AES, MD5, SHA-1, etc. + + \begin{itemize} + \item + Die Transformations-IDs werden in einem DOI-Dokument angegeben. + \end{itemize} + \item + Die SA-Attribute geben die Attribute an, die für die im Feld Transform + ID angegebene Transformation definiert sind. + \end{itemize} + + + \subsubsection{ISAKMP - SA-Verhandlung} + + \begin{itemize} + \item + Inhalt des Next Payload-Feldes von SA-, Proposal- und + Transform-Payloads: + + \begin{itemize} + \item + Das Next-Payload-Feld einer SA-Payload gibt nicht die unmittelbar + folgende Proposal-Payload an, da diese implizit ist. + \item + Das Gleiche gilt für Proposal- und Transform-Payloads + \end{itemize} + \item + Die Proposal-Payload gibt der initiierenden Entität die Möglichkeit, + der antwortenden Entität die Sicherheitsprotokolle und zugehörigen + Sicherheitsmechanismen zur Verwendung mit der auszuhandelnden + Sicherheitsassoziation zu präsentieren. + \item + Wenn die SA-Etablierung für eine kombinierte Schutzsuite ausgehandelt + wird, die aus mehreren Protokollen besteht, muss es mehrere + Proposal-Payloads geben, die jeweils die gleiche Proposal-Nummer + haben. + \item + Diese Vorschläge müssen als eine Einheit betrachtet werden und dürfen + nicht durch einen Vorschlag mit einer anderen Vorschlagsnummer + getrennt werden. + \item + Dieses erste Beispiel zeigt eine ESP- UND AH-Schutzsuite: + + \begin{itemize} + \item + Das erste Protokoll wird mit zwei von der vorschlagenden Stelle + unterstützten Transformationen dargestellt, ESP mit: + + \begin{itemize} + \item + Transformation 1 als 3DES + \item + Umwandlung 2 als AES + \item + Der Responder muss zwischen den beiden für ESP vorgeschlagenen + Transformationen wählen. + \end{itemize} + \item + Das zweite Protokoll ist AH und wird mit einer einzigen + Transformation angeboten: + + \begin{itemize} + \item + Umwandlung 1 als SHA + \end{itemize} + \item + Die resultierende Schutzsuite ist entweder + + \begin{itemize} + \item + 3DES und SHA, oder + \item + AES und SHA, je nachdem, welche ESP-Transformation vom Responder + gewählt wurde + \end{itemize} + \item + In diesem Fall folgen auf die SA-Nutzdaten die folgenden Nutzdaten: + + \begin{itemize} + \item + {[}Vorschlag 1, ESP, (Transform 1, 3DES, ...), (Transform 2, + AES){]} {[}Vorschlag 1, AH, (Transform 1, SHA){]} + \end{itemize} + \item + Bitte beachten Sie, dass dies zu zwei SAs pro Richtung führt! + \end{itemize} + \item + Dieses zweite Beispiel zeigt einen Vorschlag für zwei verschiedene + Schutzsuiten: + + \begin{itemize} + \item + Die erste Schutzsuite wird vorgestellt mit: + + \begin{itemize} + \item + einer Transformation (MD5) für das erste Protokoll (AH), und + \item + eine Umwandlung (3DES) für das zweite Protokoll (ESP) + \end{itemize} + \item + Die zweite Schutzsuite wird mit zwei Transformationen für ein + einziges Protokoll (ESP) vorgestellt: + + \begin{itemize} + \item + 3DES, oder + \item + AES + \end{itemize} + \item + Bitte beachten Sie, dass es nicht möglich ist, festzulegen, dass + Transformation 1 und Transformation 2 für eine Instanz einer + Protokollspezifikation verwendet werden müssen. + \item + In diesem Fall folgen auf den SA-Payload die folgenden Payloads: + + \begin{itemize} + \item + {[}Vorschlag 1, AH, (Transform 1, MD5, ...){]} {[}Vorschlag 1, + ESP, (Transform 1, 3DES, ...){]} {[}Vorschlag 2, ESP, (Transform1, + 3DES, ...), (Transform 2, AES, ...){]} + \end{itemize} + \item + Bitte beachten Sie, dass Vorschlag 1 zu zwei SAs pro Richtung führt. + \end{itemize} + \item + Bei der Beantwortung einer Security-Association-Nutzlast muss der + Antwortende eine Security-Association-Nutzlast mit dem ausgewählten + Vorschlag senden, der aus mehreren Proposal-Nutzlasten und den + zugehörigen Transform-Nutzlasten bestehen kann + \item + Jede der Proposal-Payloads muss eine einzelne Transform-Payload + enthalten, die dem Protokoll zugeordnet ist. + \item + Der Antwortende sollte das Feld Proposal \# in der Proposal-Payload + und das Feld Transform \# in jeder Transform-Payload des ausgewählten + Vorschlags beibehalten. + + \begin{itemize} + \item + Die Beibehaltung der Vorschlags- und Transformationsnummern sollte + die Protokollverarbeitung des Initiators beschleunigen, da die + Auswahl des Antwortenden nicht mit jeder angebotenen Option + verglichen werden muss. + \item + Diese Werte ermöglichen es dem Initiator, den Vergleich direkt und + schnell durchzuführen. + \end{itemize} + \item + Der Initiator muss überprüfen, ob die vom Responder empfangene + SA-Nutzlast mit einem der ursprünglich gesendeten Vorschläge + übereinstimmt + \end{itemize} + + + \subsubsection{ISAKMP - Session Key + Establishment} + + \begin{itemize} + \item + ISAKMP baut 4 verschiedene Schlüssel mit einem + Authentifizierungsaustausch auf: + + \begin{itemize} + \item + SKEYID ist eine Zeichenkette, die aus geheimem Material abgeleitet + wird, das nur den aktiven Teilnehmern des Austauschs bekannt ist und + als ,,Hauptschlüssel'' dient. + + \begin{itemize} + \item + Die Berechnung von SKEYID ist abhängig von der + Authentifizierungsmethode + \end{itemize} + \item + SKEYID\_e ist das Schlüsselmaterial, das von der ISAKMP SA zum + Schutz der Vertraulichkeit ihrer Nachrichten verwendet wird + \item + SKEYID\_a ist das Schlüsselmaterial, das von der ISAKMP SA zur + Authentifizierung ihrer Nachrichten verwendet wird + \item + SKEYID\_d ist das Verschlüsselungsmaterial, das zur Ableitung von + Schlüsseln für Nicht-ISAKMP-Sicherheitsassoziationen verwendet wird. + \end{itemize} + \end{itemize} + + + \subsection{IKE - Einführung} + + \begin{itemize} + \item + Während ISAKMP die grundlegenden Datenformate und Verfahren zur + Aushandlung beliebiger SAs definiert, spezifiziert der Internet Key + Exchange das standardisierte Protokoll zur Aushandlung von IPsec SAs + \item + IKE definiert fünf Austauschvorgänge: + + \begin{itemize} + \item + Phase-1-Austausch für die Einrichtung einer IKE SA : + + \begin{itemize} + \item + Main-Mode-Austausch, der durch 6 ausgetauschte Nachrichten + realisiert wird + \item + Aggressive mode exchange, der nur 3 Nachrichten benötigt + \end{itemize} + \item + Phase 2 Austausch für die Einrichtung von IPsec SAs: + + \begin{itemize} + \item + Quick-Mode-Austausch, der mit 3 Nachrichten realisiert wird + \end{itemize} + \item + Andere Austausche: + + \begin{itemize} + \item + Informationsaustausch zur Übermittlung von Status- und + Fehlermeldungen + \item + Neuer Gruppenaustausch zur Vereinbarung von privaten + Diffie-Hellman-Gruppen + \end{itemize} + \end{itemize} + \item + Hinweis: Auf den folgenden Folien steht HMAC(K, x \textbar{} y + \textbar{} ...) für H(K, p 1 , H(K, p 2 , x, y, ...)), wobei p 1 und p + 2 Auffüllmuster bezeichnen + \end{itemize} + + + \subsubsection{IKE - Berechnung von + IKE-Sitzungsschlüsseln} + + \begin{itemize} + \item + IKE baut vier verschiedene Schlüssel mit einem + Authentifizierungsaustausch auf: + + \begin{itemize} + \item + SKEYID ist eine Zeichenkette, die aus geheimem Material abgeleitet + wird, das nur den aktiven Teilnehmern des Austauschs bekannt ist, + und die als ,,Hauptschlüssel'' dient. + + \begin{itemize} + \item + Die Berechnung von SKEYID ist abhängig von der + Authentifizierungsmethode + \end{itemize} + \item + SKEYID\_d ist das Keying-Material, das zur Ableitung von Schlüsseln + für Nicht-IKE-SAs verwendet wird + + \begin{itemize} + \item + SKEYID\_d = \$HMAC(SKEYID, g\^{}\{xy\} \textbar{} CKY-I \textbar{} + CKY-R \textbar{} 0)\$, wobei \$g\^{}\{xy\}\$ das gemeinsame + Diffie-Hellman-Geheimnis bezeichnet + \end{itemize} + \item + SKEYID\_a ist das Schlüsselmaterial, das von der IKE SA zur + Authentifizierung ihrer Nachrichten verwendet wird + + \begin{itemize} + \item + SKEYID\_a = \$HMAC(SKEYID, SKEYID\_d \textbar{} g\^{}\{xy\} + \textbar{} CKY-I \textbar{} CKY-R \textbar{} 1)\$ + \end{itemize} + \item + SKEYID\_e ist das Schlüsselmaterial, das von der IKE SA zum Schutz + der Vertraulichkeit ihrer Nachrichten verwendet wird + + \begin{itemize} + \item + SKEYID\_e = \$HMAC(SKEYID, SKEYID\_a \textbar{} g\^{}\{xy\} + \textbar{} CKY-I \textbar{} CKY-R \textbar{} 2)\$ + \end{itemize} + \end{itemize} + \item + Falls erforderlich, werden die Schlüssel nach der folgenden Methode + erweitert: + + \begin{itemize} + \item + \$K=(K\_1 \textbar{} K\_2 \textbar{} ...)\$ mit \$K\_i = + HMAC(SKEYID, K\_\{i-1\})\$ und \$K\_0 = 0\$ + \end{itemize} + \end{itemize} + + + \subsubsection{IKE - + Authentifizierungsmethoden} + + \begin{itemize} + \item + Phase 1 IKE-Austausche werden mit Hilfe von zwei Hash-Werten Hash-I + und Hash-R authentifiziert, die vom Initiator und vom Responder + erstellt werden: + + \begin{itemize} + \item + Hash-I = HMAC(SKEYID, gx \textbar{} gy \textbar{} CKY-I \textbar{} + CKY-R \textbar{} SA-Angebot \textbar{} ID-I) + \item + Hash-R = HMAC(SKEYID, gy \textbar{} gx \textbar{} CKY-R \textbar{} + CKY-I \textbar{} SA-offer \textbar{} ID-R) wobei gx, gy die + ausgetauschten öffentlichen Diffie-Hellman-Werte bezeichnen ID-I, + ID-R bezeichnen die Identität des Initiators und des Responders + SA-offer bezeichnet die Nutzdaten bezüglich der SA-Verhandlung + \end{itemize} + \item + IKE unterstützt vier verschiedene Methoden der Authentifizierung: + + \begin{itemize} + \item + Pre-shared Key: + + \begin{itemize} + \item + SKYEID = \$HMAC(K\_\{Initiator\}, Responder , r\_\{Initiator\} + \textbar{} r\_\{Responder\})\$ + \end{itemize} + \item + Zwei verschiedene Formen der Authentifizierung mit + Public-Key-Verschlüsselung: + + \begin{itemize} + \item + SKEYID = \$HMAC(H(r\_\{Initiator\}, r\_\{Responder\}), CKY-I + \textbar{} CKY-R) + \end{itemize} + \item + Digitale Unterschrift: + + \begin{itemize} + \item + SKEYID = \$HMAC((r\_\{Initiator\} \textbar{} r\_\{Responder\}), + g\^{}\{xy\})\$ + \item + Da in diesem Fall SKEYID selbst keine Authentifizierung bietet, + werden die Werte Hash-I und Hash-R vom Initiator/Responder + signiert + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{IKE - Main Mode Austausch mit Pre-Shared + Key} + + \begin{itemize} + \item + Die folgenden Beschreibungen listen die ausgetauschten ISAKMP- und + IKE-Payloads auf, wenn verschiedene ,,Flavors'' der + IKE-Authentifizierung durchgeführt werden: + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-exchange-payloads.png} + \item + \$N\_i, N\_r\$ bezeichnen \$r\_\{Initiiator\}, r\_\{Responder\}\$ + (IKE-Notation) + \item + \$ID\_i, ID\_r\$ bezeichnen die Identität des Initiators und des + Responders + \item + \$KE\$ bezeichnet die öffentlichen Werte eines DH-Austausches + \end{itemize} + \item + Bitte beachten Sie, dass Hash-I und Hash-R nicht signiert werden + müssen, da sie bereits ,,ein authentisches Geheimnis'' (Pre-Shared + Key) enthalten + \end{itemize} + + + \subsubsection{IKE - Hauptmodus Austausch mit + Signaturen} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-exchange-payload-signature.png} + + \begin{itemize} + \item + \$(m)\$ gibt an, dass m optional ist + \item + \$I{[}m{]}\$ bedeutet, dass I m signiert + \end{itemize} + \item + Bitte beachten Sie, dass Hash-I und Hash-R signiert werden müssen, da + sie nichts enthalten, von dem bekannt ist, dass es authentisch ist + \end{itemize} + + + \subsubsection{IKE - Main Mode Exchange mit Public Key + Encryption} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-exchange-public-key.png} + + \begin{itemize} + \item + wobei: \$\{m\}\_\{+KI\}\$ bedeutet, dass m mit dem öffentlichen + Schlüssel \$+K\_I\$ verschlüsselt ist + \item + Bitte beachten Sie, dass Hash-I und Hash-R nicht signiert werden + müssen, da sie die ausgetauschten Zufallszahlen Ni bzw. Nr + ,,enthalten''. + + \begin{itemize} + \item + Jede Entität beweist also ihre Authentizität, indem sie die + empfangene Zufallszahl ( Ni oder Nr ) mit ihrem privaten Schlüssel + entschlüsselt + \end{itemize} + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-exchange-public-key-2.png} + + \begin{itemize} + \item + wobei: \$\{m\}\_\{+KI\}\$ bedeutet, dass m mit dem öffentlichen + Schlüssel \$+K\_I\$ verschlüsselt ist + \item + \$\{m\}\_\{K\_i\}\$ bedeutet, dass m mit dem symmetrischen Schlüssel + \$K\_i\$ mit \$K\_i=H(N\_i, CKY-I)\$ und \$K\_r=H(N\_r,CKY-R)\$ + verschlüsselt ist + \item + Bitte beachten Sie, dass alle bisher beschriebenen Schemata einen + Schutz der Identität vor Abhörern im Internet bieten, da die IDs und + Zertifikate nicht im Klartext gesendet werden: + \item + Die IP-Adressen der ausgetauschten Pakete sind jedoch immer + lesbar... + \end{itemize} + \end{itemize} + + + \subsubsection{IKE - Aggressiver Modus Austausch mit Pre-Shared + Key} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-aggressive-mode.png} + \item + Da die Identität des Initiators und des Responders gesendet werden + muss, bevor ein Sitzungsschlüssel erstellt werden kann, kann der + Austausch im aggressiven Modus keinen Identitätsschutz vor Abhörern + bieten + \item + Ähnliche Varianten des aggressiven Modus gibt es auch für die + Authentifizierung mit: + + \begin{itemize} + \item + Digitale Signatur + \item + Verschlüsselung mit öffentlichem Schlüssel + \end{itemize} + \end{itemize} + + + \subsubsection{IKE - Quick Mode + Exchange} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKE-quick-mode.png} + \item + \$Hash1 = HMAC(SKEYID\_a, M-ID \textbar{} SA \textbar{} Ni \textbar{} + {[} \textbar{} KE {]} {[} \textbar{} ID\_\{ci\} \textbar{} + ID\_\{cr\}{]} )\$ + \item + \$Hash2 = HMAC(SKEYID\_a, M-ID \textbar{} N\_i \textbar{} SA + \textbar{} N\_r \textbar{} {[} \textbar{} KE {]} {[} \textbar{} + ID\_\{ci\} \textbar{} ID\_\{cr\}{]} ) + \item + \$Hash3 = HMAC(SKEYID\_a, 0 \textbar{} M-ID \textbar{} N\_i \textbar{} + N\_r)\$ + \item + Die optionale Einbeziehung der Identitäten \$ID\_\{ci\}\$ und + \$ID\_\{cr\}\$ ermöglicht es ISAKMP-Entitäten, eine SA im Namen + anderer Clients einzurichten (Gateway-Szenario) + \item + Die optionalen Schlüsselaustausch-Payloads KE ermöglichen die + Durchführung eines neuen DH-Austauschs, wenn perfekte Forward Secrecy + gewünscht ist + \item + Sitzungsschlüsselmaterial \$= HMAC(SKEYID\_d, {[} g\^{}\{xy\} + \textbar{} {]} protocol \textbar{} SPI \textbar{} N\_i \textbar{} + N\_r)\$ + \end{itemize} + + + \subsection{Weitere Probleme mit + IPsec} + + \begin{itemize} + \item + Komprimierung: + + \begin{itemize} + \item + Wenn Verschlüsselung verwendet wird, dann können die resultierenden + IP-Pakete nicht in der Verbindungsschicht komprimiert werden, z.B. + bei einer Verbindung zu einem ISP über Modem + \item + Daher wurde das IP Payload Compression Protocol (PCP) definiert + \item + PCP kann mit IPsec verwendet werden: + + \begin{itemize} + \item + In der IPsec-Policy-Definition kann PCP festgelegt werden. + \item + Die IKE SA-Verhandlung ermöglicht die Aufnahme von PCP in die + Vorschläge + \end{itemize} + \end{itemize} + \item + Interoperabilitätsprobleme bei End-to-End-Sicherheit mit + Header-Verarbeitung in Zwischenknoten: + + \begin{itemize} + \item + Interoperabilität mit Firewalls: + + \begin{itemize} + \item + Die Ende-zu-Ende-Verschlüsselung kollidiert mit der Notwendigkeit + von Firewalls, die Protokoll-Header der oberen Schichten in + IP-Paketen zu prüfen. + \end{itemize} + \item + Interoperabilität mit Network Address Translation (NAT): + + \begin{itemize} + \item + Verschlüsselte Pakete lassen weder eine Analyse noch eine Änderung + der Adressen zu. + \item + Authentifizierte Pakete werden verworfen, wenn die Quell- oder + Zieladresse geändert wird. + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Schlussfolgerung} + + \begin{itemize} + \item + IPsec ist die Sicherheitsarchitektur der IETF für das + Internet-Protokoll + \item + Sie bietet die folgenden Sicherheitsdienste für IP-Pakete: + + \begin{itemize} + \item + Authentifizierung der Datenherkunft + \item + Schutz vor Wiederholung + \item + Vertraulichkeit + \end{itemize} + \item + Es kann in Endsystemen oder Zwischensystemen realisiert werden: + + \begin{itemize} + \item + Implementierung im Endsystem: Integriertes Betriebssystem oder + ,,bump in the stack'' + \item + Gateway-Implementierung: Integrierter Router oder ,,bump in the + wire'' + \end{itemize} + \item + Es wurden zwei grundlegende Sicherheitsprotokolle definiert: + + \begin{itemize} + \item + Authentifizierungs-Header (AH) + \item + Encapsulating security payload (ESP) + \end{itemize} + \item + SA-Verhandlung und Schlüsselverwaltung werden mit folgenden + Protokollen realisiert: + + \begin{itemize} + \item + Internet security association key management protocol (ISAKMP) + \item + Internet-Schlüsselaustausch (IKE) + \end{itemize} + \end{itemize} + + + \subsection{Neue Wege in der + IPsec-Entwicklung} + + \begin{itemize} + \item + Internet-Schlüsselaustausch Version 2 + + \begin{itemize} + \item + Basierend auf den Erkenntnissen aus IKEv1 + \item + Wesentliche Vereinfachungen + \end{itemize} + \item + Netzwerkadressübersetzung (NAT) + + \begin{itemize} + \item + Beispiel für Probleme mit NAT und IPsec + \item + NAT-Überwindung + \item + Bound-End-to-End Tunnel Mode (BEET) + \end{itemize} + \item + Konfiguration von großen IPsec-Infrastrukturen + \end{itemize} + + + \subsection{Internet Key Exchange Protocol Version 2 + {[}RFC5996{]}} + + Zusätzliche Designziele zu IKEv1 + + \begin{itemize} + \item + Konsolidierung von mehreren IKEv1-RFCs (und mehreren Erweiterungen) + + \begin{itemize} + \item + Erleichterung für Entwickler und Prüfer + \item + Klärung mehrerer unspezifischer Punkte + \end{itemize} + \item + Vereinfachungen + + \begin{itemize} + \item + Anzahl der verschiedenen Schlüsselaustauschverfahren auf eines + reduziert + \item + Verschlüsselung wie in ESP + \item + Einfacher Anfrage/Antwort-Mechanismus + \end{itemize} + \item + Verringerung der Latenzzeit + \item + Aushandlung von Verkehrsselektoren + \item + Graceful Changes, damit bestehende IKEv1-Software aufgerüstet werden + kann + \end{itemize} + + + \subsubsection{IKEv2 - + Schlüsselaustauschverfahren} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-IKEv2-exchange-procedure.png} + + \begin{itemize} + \item + \$K\$ Schlüssel abgeleitet durch \$PRF(PRF(N\_i \textbar\textbar{} + N\_r, g\^{}\{ir\}), N\_i \textbar\textbar{} N\_r \textbar\textbar{} + SPI\_i \textbar\textbar{} SPI\_r)\$ + \item + \$PRF\$ ,,irgendeine'' Pseudozufallsfunktion - in der Regel eine + asymmetrische HMAC SIG-Signatur oder MAC über die ersten beiden + Nachrichten + \item + \$SAEx\$ ein Huckepack- ,,Quick-Mode-Austausch'' + \end{itemize} + \item + Nur ein einziger Austauschtyp + \item + Vier Nachrichten werden ausgetauscht \$(= 2 * RTT)\$ + \item + Initiator löst alle erneuten Übertragungen aus + \end{itemize} + + + \subsubsection{IKEv2 - Eigenschaften des + Schlüsselaustauschverfahrens} + + \begin{itemize} + \item + Der erste SA-Austausch erfolgt huckepack + + \begin{itemize} + \item + Geringere Latenz, da eine RTT eingespart wird + \end{itemize} + \item + Nachricht 4 sollte huckepack mit Nachricht 2 ausgetauscht werden, aber + + \begin{itemize} + \item + Nachricht 3 verifiziert, dass Initiator Nachricht 2 erhalten hat + (SPI \textasciitilde{} Cookie) + + \begin{itemize} + \item + Dient als DoS-Schutz, wenn anschließend rechenintensive Aufgaben + durchgeführt werden + \end{itemize} + \item + Identität des Responders wird erst nach Verifizierung des Initiators + offengelegt + + \begin{itemize} + \item + Schützt vor dem Scannen nach einer Partei mit einer bestimmten ID + \end{itemize} + \item + Initiator weiß nicht, wann es sicher ist, Daten zu senden + + \begin{itemize} + \item + (Pakete können in falscher Reihenfolge empfangen werden) + \end{itemize} + \item + Würde eine kompliziertere Strategie zur erneuten Übertragung + erfordern + \item + Responder kann nicht über eine Policy für die Child SA entscheiden + \end{itemize} + \end{itemize} + + + \subsubsection{IKEv2 - Zusätzliche + Funktionen} + + \begin{itemize} + \item + Zusätzlicher DoS-Schutz + + \begin{itemize} + \item + Im Falle eines DoS-Angriffs kann der Responder den Initiator + auffordern, ein zustandsloses Cookie zu senden + \item + Fügt dem Austausch 2 zusätzliche Nachrichten hinzu + \end{itemize} + \item + Dead Peer Detection + + \begin{itemize} + \item + Regelmäßige IKE-Anfragen, um festzustellen, ob die SA gelöscht + werden kann + \end{itemize} + \item + Flexiblere Verhandlungstechniken + + \begin{itemize} + \item + Möglichkeit der Angabe: ,,Verwenden Sie eine dieser Chiffren mit + einem dieser Authentifizierungsalgorithmen'' (es müssen nicht mehr + alle Kombinationen aufgezählt werden) + \item + Verkehrsselektoren können eingegrenzt werden + + \begin{itemize} + \item + Initiator: ,,Ich möchte 192.168.0.0/16 für meinen Tunnelmodus + verwenden'' + \item + Antwortgeber: ,,OK, aber Sie dürfen nur 192.168.78.0/24 + verwenden'' + \item + Kann verwendet werden, um den Responder dem Initiator einen + Adressbereich zuweisen zu lassen (in einfachen Situationen ohne / + mit Hilfe von DHCP; siehe auch unten) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Netzwerk-Adressübersetzung + (NAT)} + + \begin{itemize} + \item + Heutzutage ein häufiges Problem: ISP stellt nur eine einzige + IP-Adresse zur Verfügung, es sollen aber mehrere Geräte angeschlossen + werden + \item + Lösung: Ein Router wird verwendet, um mehrere interne (private) + Adressen auf eine einzige externe (öffentliche) Adresse abzubilden + \item + Häufigster Ansatz (vereinfacht): + + \begin{itemize} + \item + Für Pakete, die von der privaten Seite kommen: + + \begin{itemize} + \item + Der Router schreibt die TCP/UDP-Quellports auf einen eindeutigen + Wert pro IP-Flow um + \item + Speichert den neuen Quellport in einer Tabelle mit der + Quelladresse und dem alten Quellport + \item + Ersetzt die Quell-IP-Adresse durch die externe Adresse + \end{itemize} + \item + Für Pakete, die von der öffentlichen Seite kommen: + + \begin{itemize} + \item + Der Router sucht den IP-Fluss nach dem TCP/UDP-Zielport ab + \item + Ersetzt die Zieladresse und den Port durch die alten Werte + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{NAT - Ein Beispiel} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-NAT-example.png} + \item + NAT ändert die Quelladresse eines jeden Pakets in eine öffentliche + IP-Adresse mit anderen ("umgeschriebenen") Quellports + \end{itemize} + + + \subsubsection{Probleme mit NAT und IPsec - + NAT-Traversal} + + \begin{itemize} + \item + Probleme: + + \begin{itemize} + \item + AH kann per Definition nicht mit NAT verwendet werden + \item + ESP bietet kein ,,wiederbeschreibbares Feld'' (wie Portnummer) + \item + TCP/UDP-Portnummern werden verschlüsselt oder authentifiziert (oder + beides) + \end{itemize} + \item + Lösung für ESP: ESP-Pakete in normale UDP-Pakete einkapseln + {[}RFC3948{]} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-NAT-encap-ESP.png} + \end{itemize} + \item + UDP-Header enthält nur Portnummern und leere Prüfsumme + + \begin{itemize} + \item + Fügt 8 Byte Overhead hinzu + \item + Einziger Zweck: dem NAT-Gerät etwas zum ,,Umschreiben'' geben (um + die Empfänger der Pakete in der Antwort unterscheiden zu können) + \item + Port 4500 reserviert für NAT-T (NAT-Traversal) + \end{itemize} + \item + Im Transport-Modus: + + \begin{itemize} + \item + Innere UDP/TCP-Prüfsumme hängt von der ursprünglichen Quelladresse + ab (Layering-Verletzung in der ursprünglichen TCP/IP-Suite) + \item + Muss wiederhergestellt werden + \end{itemize} + \item + Wann ist NAT-T zu verwenden? + + \begin{itemize} + \item + NAT-Situation muss von IKE erkannt werden + \item + Erfolgt durch IKEv1-Erweiterung {[}RFC3947{]} und IKEv2 + \item + IKE verwendet NAT-T, wenn der IKE-Quellport nicht 500 ist + \item + Funktioniert nicht immer, dann ist eine manuelle Konfiguration + erforderlich + \end{itemize} + \item + Timeout-Probleme und Keep-Alives + + \begin{itemize} + \item + ESP-Pakete werden nicht periodisch ausgetauscht + \item + NAT-T-Ströme können im Router eine Zeitüberschreitung verursachen + \item + Eingehende Pakete können dann nicht zugestellt werden + \item + Regelmäßige Keep-Alive-Pakete stellen sicher, dass der Router seinen + Status beibehält + \item + Einfaches UDP-Paket an Port 4500 mit einem einzigen 0xFF-Oktett + \end{itemize} + \end{itemize} + + + \subsubsection{Probleme mit NAT und IPsec - + BEET-Modus} + + \begin{itemize} + \item + Welche Adressen soll Alice verwenden, um Pakete an Bob, Charlie und + Dave zu senden? + \item + Weder die externen noch die internen Adressen dürfen eindeutig sein! + + \begin{itemize} + \item + Bobs und Charlies Pakete haben beide die gleiche externe Adresse + \item + Bobs und Daves Pakete haben beide dieselbe interne Adresse + \item + % \includegraphics{Assets/NetworkSecurity-NAT-BEET-mode.png} + \item + Die Verwendung interner oder externer Adressen ist unsicher (Warum?) + \item + Die Unterscheidung erfordert virtuelle Adressen... + \end{itemize} + \item + Virtuelle IP-Adressen zuweisen oder aushandeln + + \begin{itemize} + \item + Alice muss jedem ihrer Peers eindeutige virtuelle Adressen zuweisen + \item + Dies kann manuell geschehen, oder + \item + durch DHCP über IKE, oder + \item + durch Aushandlung von Verkehrsselektoren (IKEv2) + \item + L2TP über IPsec ausführen + \end{itemize} + \item + IPsec-Tunnelmodus ist erforderlich + + \begin{itemize} + \item + Externer IP-Header trägt entweder eine öffentliche IP-Adresse oder + eine private NAT-Adresse + \item + Interner IP Header trägt virtuelle IP-Adresse + \item + Führt zu (mindestens!) 28 Bytes Overhead pro Paket in + NAT-Situationen + \item + \textbar{} IP Header \textbar{} UDP Header \textbar{} ESP Header + \textbar{} IP Header \textbar{} geschützte Daten \textbar{} + \end{itemize} + \item + Aber eigentlich sind nur Adressfelder im inneren IP-Header + erforderlich (alle anderen Felder können vom externen Header + abgeleitet werden) + \item + Beide virtuellen Adressfelder verwenden immer dieselben Adressen (kein + Multiplexing wie in üblichen Tunnelmodusszenarien) + \item + Die Beschränkung auf zwei Adressen im Tunnel ermöglicht eine statische + Bindung während der IKE-Aushandlung + \item + Der Bound-End-to-End-Tunnel (BEET)-Modus {[}NiMe08{]} verhält sich + semantisch wie eine Tunnelmodus-Assoziation mit einem Verkehrsselektor + für einen einzelnen Host (/32) + \item + Die übertragenen ESP-Pakete sind äquivalent zu Transport + (!)-Modus-Paketen (virtuelle Adressen werden nie in Paketen + übertragen) + \item + Der innere Header wird durch den ESP-Entkapselungsprozess + wiederhergestellt. + \item + Unterscheidet zwischen der Erreichbarkeit eines Hosts (externe + IP-Adresse) und seiner Identität (virtuelle IP-Adresse) + \item + Hosts können nun zwischen verschiedenen Standorten hin- und herwandern + und ihre virtuelle IP-Adresse beibehalten (dies ermöglicht zusätzlich + eine bessere Unterstützung der Mobilität) + \end{itemize} + + + \subsection{Konfiguration großer + IPsec-Infrastrukturen} + + \begin{itemize} + \item + Kommunikationsinfrastrukturen von Unternehmen und Behörden: + \item + Kann komplexe Overlay-Topologien bilden + + \begin{itemize} + \item + Verschachtelt + \item + Kreisläufe + \item + Mehrere Sicherheitsgateways pro privatem Netzwerk + \item + Mehrere private Netze pro Gateway + \item + Private Adressbereiche in privaten Netzen + \item + QoS und sicheres IP-Multicast können erforderlich sein + \end{itemize} + \item + Kann bis zu Tausende von Sicherheits-Gateways haben + \item + Kann sich dynamisch ändern + + \begin{itemize} + \item + Hinzufügen und Entfernen von Sicherheitsgateways + \item + Ausfälle von Verbindungen und Knoten + \item + Denial-of-Service-Angriffe + \item + Mobile Sicherheitsgateways (z. B. für die Kommunikation im + Katastrophenfall) + \end{itemize} + \item + Muss natürlich sicher sein ... + \end{itemize} + + + \subsection{Probleme bei der manuellen Konfiguration der + IPsec-Infrastruktur} + + \begin{itemize} + \item + Die IETF hat keine Methode zur automatischen Konfiguration und zum + Einsatz von IPsec in großen Szenarien definiert + \item + Daher werden Sicherheits-Gateways in der Regel manuell konfiguriert + + \begin{itemize} + \item + Die Anzahl der Sicherheitsrichtlinieneinträge wächst quadratisch mit + der Anzahl der Sicherheitsgateways + \item + Problem der Skalierbarkeit + + \begin{itemize} + \item + Der Administrationsaufwand wächst \$\textbackslash Rightarrow\$ + Die Kosten steigen + \item + Administratoren machen potenziell mehr Konfigurationsfehler, z.B. + vergessen, einen Eintrag aus einem SPD zu löschen oder einen zu + großen IP-Bereich zuzulassen, usw. \$\textbackslash Rightarrow\$ + Mögliche Sicherheitsprobleme + \end{itemize} + \end{itemize} + \item + Problem der Agilität + + \begin{itemize} + \item + Keine dynamische Anpassung der VPN-Topologie + \item + Begrenzte Unterstützung mobiler Sicherheits-Gateways + \end{itemize} + \end{itemize} + + + \subsection{Automatische IPsec-Konfiguration - einige + Anforderungen} + + \begin{itemize} + \item + Funktionelle Anforderungen + + \begin{itemize} + \item + Muss manuelle Eingriffe minimieren + \item + Muss auch komplexe Infrastrukturen unterstützen (verschachtelte + Topologien mit privaten Adressbereichen usw.) + \item + Muss nur Unicast verwenden (da Multicast usw. nicht weit verbreitet + ist) + \end{itemize} + \item + Nicht-funktionale Anforderungen + + \begin{itemize} + \item + Muss robust sein, d. h. stabil auf schwierige Netzbedingungen + reagieren + \item + Sie muss sicher sein, insbesondere darf sie nicht schwächer sein als + eine manuell konfigurierte IPsec-Infrastruktur + \item + Sie muss in Bezug auf die Anzahl der Sicherheits-Gateways skalierbar + sein + \item + Es muss sich schnell an neue Topologien anpassen können. + \end{itemize} + \end{itemize} + + + \subsection{Verschiedene Ansätze für die automatische + IPsec-Konfiguration} + + \begin{itemize} + \item + IPsec-Richtlinienverteilung über zentrale Server + \item + Gruppenverschlüsseltes Transport-VPN (GET) + \item + Tunnel-Endpunkt-Erkennung (TED) + \item + Dynamisches Mehrpunkt-VPN (DMVPN) + \item + Proaktives Multicast-basiertes IPsec-Erkennungsprotokoll + \item + Soziales VPN + \item + Sicheres OverLay für IPsec-Erkennung (SOLID) + \end{itemize} + + + \subsubsection{IPsec-Richtlinienverteilung durch zentrale + Server} + + \begin{itemize} + \item + Einfacher, gemeinsamer Ansatz zur Konfiguration einer großen Anzahl + von Sicherheits-Gateways + \item + Zentraler Policy Server statisch in jedem Gateway konfiguriert + \item + Jedes Gateway kontaktiert den Policy Server, um SPD zu aktualisieren + \item + Beispiel: Microsoft Active Directory, verschiedene Militärprodukte + \item + Einige offensichtliche Probleme: + + \begin{itemize} + \item + Administratoren müssen die zentrale Datenbank manuell bearbeiten + \item + Verschachtelte Topologien sind schwer zu realisieren + \item + Skalierbarkeitsprobleme aufgrund von Engpässen + \item + Verfügbarkeit ist schwer zu garantieren (Single Point of Failure) + \item + Dynamische Topologien erfordern, dass neue Richtlinien proaktiv an + die Sicherheitsgateways übermittelt werden (auch wenn sie derzeit + vielleicht nicht verwendet werden) + \item + Viele Richtlinieneinträge werden höchstwahrscheinlich nie verwendet + (kein Verkehr) + \end{itemize} + \end{itemize} + + + \subsubsection{Tunnel Endpoint Discovery + (TED)} + + \begin{itemize} + \item + Proprietärer Ansatz von Cisco {[}Fluh01{]} + \item + Sicherheitsassoziationen werden reaktiv erstellt + + \begin{itemize} + \item + Alice sendet Paket an Bob + \item + Gateway A erkennt, dass keine gültige SA vorhanden ist + \item + Verwerfen des Pakets und Senden des IKE-Pakets an Bob + \item + Gateway B fängt IKE-Paket ab + \item + Richtet SA zu Gateway A ein + \item + Nachfolgende Pakete zwischen Alice und Bob können übertragen werden + \end{itemize} + \item + Ziemlich leistungsfähiger, sicherer Ansatz, aber + + \begin{itemize} + \item + Routing muss im Transportnetz durchgeführt werden + \item + Keine privaten IP-Adressbereiche + \item + Keine verschachtelten Topologien + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-TED.png} + \end{itemize} + + + \subsubsection{Gruppenverschlüsseltes Transport-VPN + (GET)} + + \begin{itemize} + \item + Cisco Produktbranding mehrerer IPsec-Komponenten {[}Bhai08{]} + \item + Sicherheits-Gateways kontaktieren zentralen IKE-Server + \item + IKE-Server verteilt symmetrische Schlüssel (bevorzugt über Multicast) + \item + Alle Sicherheitsgateways einer Gruppe verwenden dieselbe SA + (einschließlich SPI, Schlüssel) + \item + Wiederholungsschutz durch Zeitfenster (1-100 Sekunden) + + \begin{itemize} + \item + Sliding-Window-Mechanismus funktioniert nicht, da mehrere Absender + denselben SPI verwenden + \end{itemize} + \item + Zusätzliche Probleme mit zentralen Policy-Servern: + + \begin{itemize} + \item + schwacher Wiedergabeschutz + \item + Die Kompromittierung eines einzelnen Gateways beeinträchtigt das + gesamte VPN + \item + Rekeying durch symmetrischen Austausch \$\textbackslash Rightarrow\$ + kann nicht von kompromittierten Schlüsseln wiederhergestellt werden + \item + Perfektes Vorwärtsgeheimnis nicht verfügbar + \end{itemize} + \item + Einziger Vorteil: Ermöglicht Multicast-Netzwerkprivatisierung + \item + % \includegraphics{Assets/NetworkSecurity-GET.png} + \end{itemize} + + + \subsubsection{Proaktives Multicast-basiertes + IPsec-Erkennungsprotokoll} + + \begin{itemize} + \item + Ansatz wurde für militärische Anwendungen entwickelt {[}Tran06{]} + \item + Sicherheits-Gateways kündigen periodisch private Netzwerke an + \item + Erfolgt durch Transportnetzwerk-Multicast + \item + Nachrichten werden durch einen vorab geteilten symmetrischen Schlüssel + geschützt + \item + Vorteile: Unterstützt private Adressbereiche, Multicast innerhalb des + VPN + \item + Probleme: + + \begin{itemize} + \item + Erfordert Transportnetz-Multicast + \item + Verschachtelte Topologien funktionieren nicht + \item + Anzahl der empfangenen Nachrichten kann ziemlich groß sein + \item + Ein kompromittiertes Gateway führt zu einer nicht + wiederherstellbaren Kompromittierung des VPN + \item + Replay-Schutz nicht berücksichtigt + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-proactive-multicast-discovery.png} + \end{itemize} + + + \subsubsection{Soziales VPN} + + \begin{itemize} + \item + Akademischer Ansatz {[}FBJW08{]} + \item + Verwendet Facebook als ,,policy'' Server zum Austausch von IKE + Zertifikaten + + \begin{itemize} + \item + Man kann mit Freunden kommunizieren + \end{itemize} + \item + Agilität durch Peer-to-Peer-Netzwerk + + \begin{itemize} + \item + Schaut in einer verteilten Hash-Tabelle nach der externen IP-Adresse + des Ziels + \end{itemize} + \item + Probleme + + \begin{itemize} + \item + Keine Gateway-Funktionalität (nur Ende-zu-Ende) + \item + Keine verschachtelten Topologien + \item + Ziemlich großer Paket-Overhead + \item + Schlechte Skalierbarkeit im Falle vieler potentieller + Kommunikationspartner + \item + Sicherheit + + \begin{itemize} + \item + Vertrauen Sie Facebook? + \item + Wissen Sie, ob die Person in Facebook wirklich die ist, die sie + behauptet? + \item + Überhaupt keine Verifizierung möglich + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{Dynamisches Mehrpunkt-VPN + (DMVPN)} + + \begin{itemize} + \item + Ein weiterer Ansatz von Cisco {[}Bhai08{]} + \item + VPN ist aufgeteilt in + + \begin{itemize} + \item + Statische Kern-Gateways (,,Hubs'') + \item + Dynamische periphere Gateways (,,Spokes'') + \end{itemize} + \item + Hubs können OSPF-Routing zwischen den anderen nutzen + \item + Spokes kontaktieren vorkonfigurierte Hubs für den Zugang zum VPN + \item + Dynamische ,,Spoke-to-Spoke''-Verbindungen optimieren den Datenfluss + \item + % \includegraphics{Assets/NetworkSecurity-DMVPN.png} + \end{itemize} + + + \paragraph{Dynamisches Mehrpunkt-VPN (DMVPN) - + Diskussion} + + \begin{itemize} + \item + Vorteile + + \begin{itemize} + \item + Ansatz ermöglicht dynamischere Topologien + \item + Kann private Adressen verwenden + \end{itemize} + \item + Nachteilig + + \begin{itemize} + \item + Erfordert immer noch erheblichen Konfigurationsaufwand + + \begin{itemize} + \item + Kernnetz muss manuell konfiguriert werden + \item + Spokes müssen mit den Adressen der Hubs konfiguriert werden + \item + Macht z.B. einen einfachen Wechsel zu einem neuen ISP unmöglich + \end{itemize} + \item + Spokes können nicht verschachtelt werden + \item + Spokes können sich nicht zwischen ,,Hubs'' bewegen + + \begin{itemize} + \item + Hub verhält sich wie MobileIP Home Agent für Spoke + \end{itemize} + \item + Ausfall von ,,Hubs'' kritisch für deren ,,Spokes'' + \end{itemize} + \end{itemize} + + + \subsubsection{Sicheres OverLay für IPsec-Erkennung + (SOLID)} + + \begin{itemize} + \item + Komplexer Ansatz, verspricht einfache Implementierung {[}RSS10{]} + \item + Sicherheitsgateways bilden ein strukturiertes Overlay-Netzwerk + + \begin{itemize} + \item + Verbindet Sicherheitsgateways so, dass das VPN effizient nach einer + Zieladresse durchsucht werden kann + \end{itemize} + \item + Erfordert nur sehr wenige proaktiv erstellte IPsec-Verbindungen + + \begin{itemize} + \item + Minimale Konnektivität ermöglicht eine reaktive Erkennung von + Sicherheitsgateways + \item + Sich bewegende Sicherheitsgateways müssen nicht alle anderen über + die aktuelle externe IP-Adresse informieren + \end{itemize} + \item + Drei Aufgaben zu erfüllen + + \begin{itemize} + \item + Topologie-Kontrolle + + \begin{itemize} + \item + Proaktiver Aufbau einer VPN-Struktur zur schnellen Erkennung + \end{itemize} + \item + Erkennung von Sicherheitsgateways + + \begin{itemize} + \item + Jedes Mal, wenn ein Client-Computer ein Paket sendet und keine + gültige SA gefunden wird + \item + Muss das entsprechende Sicherheits-Gateway finden, um reaktiv eine + SA zu erstellen + \end{itemize} + \item + Weiterleitung von Datenpaketen + + \begin{itemize} + \item + Suche nach einem effizienten Weg zur Weiterleitung von Paketen + durch das Overlay + \end{itemize} + \end{itemize} + \end{itemize} + + + \paragraph{SOLID - + Topologie-Kontrolle} + + \begin{itemize} + \item + Mechanismen zur Topologiekontrolle + + \begin{itemize} + \item + Kontinuierliche Aktualisierung der VPN-Struktur zur Anpassung an + Veränderungen + \end{itemize} + \item + In SOLID werden proaktiv SAs erstellt, um eine künstliche Ringstruktur + zu bilden + \item + Sicherheitsgateways sind nach inneren Adressen geordnet + \item + Gateways, die nicht direkt im Transportnetz kommunizieren können, + werden durch virtuelle Pfade verbunden \$\textbackslash Rightarrow\$ + Verschachtelte Strukturen werden abgeflacht, um eine einfache + Erkennung zu ermöglichen + \item + % \includegraphics{Assets/NetworkSecurity-SOLID-topology.png} + \end{itemize} + + + \paragraph{SOLID - Erkennung} + + \begin{itemize} + \item + Reaktive Erkennung, um ein Sicherheits-Gateway für eine bestimmte + Client-IP-Adresse zu finden + \item + Suchanfragen werden an das (bereits zugeordnete) Gateway + weitergeleitet, dessen innere IP-Adresse der gesuchten IP-Adresse ,,am + ähnlichsten'' ist + + \begin{itemize} + \item + Ein einfacher Mechanismus stellt sicher, dass das korrekte + entsprechende Sicherheits-Gateway gefunden wird + \item + Die Pakete werden entlang der Ringstruktur gesendet + \item + Benötigt \$O(n)\$ Overlay Hops, um das Ziel zu erreichen (wobei n + die Anzahl der Netzwerke in der VPN-Topologie ist) + \end{itemize} + \item + \$\textbackslash Rightarrow\$ Kürzere ,,Suchpfade'' erforderlich + \end{itemize} + + + \paragraph{SOLID - Mehr + Topologiekontrolle} + + \begin{itemize} + \item + Erweiterte Topologiekontrolle schafft zusätzliche SAs + \item + IP-Adressraum des VPN wird in Bereiche unterteilt + + \begin{itemize} + \item + Exponentiell wachsende Größe der Bereiche + \end{itemize} + \item + Zu jedem Bereich wird mindestens eine SA proaktiv von jedem Gateway + gehalten + \item + Anzahl der zusätzlichen SAs wächst in \$O(log\textbackslash{} n)\$ + \item + Aufgrund der Konstruktionstechnik Entdeckung in + \$O(log\textbackslash{} n)\$ Overlay Hops + \$\textbackslash Rightarrow\$ Ansatz skaliert gut mit Anzahl der + Netzwerke + \item + % \includegraphics{Assets/NetworkSecurity-SOLID-topology-control.png} + \end{itemize} + + + \paragraph{SOLID - Weiterleitung von + Datenpaketen} + + \begin{itemize} + \item + Nach der anfänglichen Erkennung müssen die Datenpakete weitergeleitet + werden + \item + Senden von Daten entlang des Entdeckungspfades möglich + + \begin{itemize} + \item + Länge wieder \$O(log\textbackslash{} n)\$ Overlay-Hops + \item + Zu ineffizient, wenn viele Pakete geroutet werden müssen + \item + Wird nur anfangs verwendet + \end{itemize} + \item + Nachfolgend wird der Pfad optimiert + + \begin{itemize} + \item + Optimierung erfolgt, wenn Gateway feststellt, dass es Pakete für + zwei Gateways weiterleitet, die sich im gleichen Netz befinden + \item + Führt in zyklusfreien VPNs zu optimalen Routen in Bezug auf die + Anzahl der Overlay-Sprünge + \item + Kleine Zyklen können lokal umgangen werden + \end{itemize} + \end{itemize} + + + \paragraph{SOLID - Eigenschaften und + Ergebnisse} + + \begin{itemize} + \item + Kann komplexe Infrastrukturen innerhalb von Sekunden oder Minuten + konfigurieren + \item + Erfordert keine manuelle Interaktion + \item + Erfordert keine besonderen Eigenschaften des Transportnetzes + \item + Robustheit + + \begin{itemize} + \item + Kein einzelner Ausfallpunkt + \item + Wenn das Netzwerk aufgeteilt wird, können die Teile unabhängig + voneinander arbeiten + \end{itemize} + \item + Keine Schwächung der von Standard-IPsec gebotenen Sicherheit + \item + Gute Skalierbarkeit mit der Anzahl der privaten Netze, keine Engpässe + \item + Wenn Sicherheitsgateways umziehen, müssen nur zwei SAs + wiederhergestellt werden, um die Erreichbarkeit zu gewährleisten + \end{itemize} + + + \paragraph{SOLID - Simulative + Bewertung} + + \begin{itemize} + \item + SOLID kann in OMNeT++ evaluiert werden + \item + Ermöglicht Tests von komplexen Szenarien + \end{itemize} + + + \paragraph{SOLID - Sonstige + Forschung} + + \begin{itemize} + \item + SOLID wird in der Gruppe Telematik/Computernetzwerke erforscht + \item + Entwicklung von Prototypen + \item + Verfügbarkeit + + \begin{itemize} + \item + Schutz des wichtigeren Kernnetzes vor DoS-Angriffen + \item + Schaffung eines mehrschichtigen VPN, das bestimmte Verkehrsflüsse + zwischen Sicherheits-Gateways verhindert + \end{itemize} + \item + Zugriffskontrolle + \item + Robustheit + + \begin{itemize} + \item + Proaktive Wiederherstellung bei Netzwerkausfällen + \end{itemize} + \item + Anwendungsschicht-Multicast + + \begin{itemize} + \item + Ermöglicht sicheres Multicast über reine Unicast-Netze + \end{itemize} + \end{itemize} + + + \section{Sicherheitsprotokolle der + Transportschicht} + + + \subsection{Anwendungsbereich von Sicherheitsprotokollen der + Transportschicht} + + \begin{itemize} + \item + Die Transportschicht sorgt für die Kommunikation zwischen + Anwendungsprozessen (anstelle der Kommunikation zwischen Endsystemen) + und ihre Hauptaufgaben sind: + + \begin{itemize} + \item + Isolierung höherer Protokollschichten von der Technologie, der + Struktur und den Unzulänglichkeiten der eingesetzten + Kommunikationstechnik + \item + Transparente Übertragung von Nutzdaten + \item + Globale Adressierung von Anwendungsprozessen, unabhängig von + Adressen der unteren Schichten (Ethernet-Adressen, Telefonnummern + usw.) + \item + Gesamtziel: Bereitstellung eines effizienten und zuverlässigen + Dienstes + \end{itemize} + \item + Sicherheitsprotokolle der Transportschicht zielen darauf ab, den + Dienst der Transportschicht zu verbessern, indem sie zusätzliche + Sicherheitseigenschaften gewährleisten + + \begin{itemize} + \item + Da sie in der Regel einen zuverlässigen Transportdienst voraussetzen + und darauf aufbauen, stellen sie nach der Terminologie des + OSI-Referenzmodells (Open Systems Interconnection) eigentlich + Sitzungsschichtprotokolle dar. + \item + Da OSI jedoch nicht mehr ,,en vogue'' ist, werden sie als + Sicherheitsprotokolle der Transportschicht bezeichnet + \end{itemize} + \end{itemize} + + + \subsection{Das Secure Socket Layer (SSL) + Protokoll} + + \begin{itemize} + \item + SSL wurde ursprünglich in erster Linie zum Schutz von HTTP-Sitzungen + entwickelt: + + \begin{itemize} + \item + In den frühen 1990er Jahren gab es ein ähnliches Protokoll namens + S-HTTP + \item + Da jedoch S-HTTP-fähige Browser nicht kostenlos waren und SSL + Version 2.0 in den Browsern von Netscape Communications enthalten + war, setzte es sich schnell durch. + \item + SSL v.2 enthielt einige Schwachstellen, weshalb die Microsoft + Corporation ein konkurrierendes Protokoll namens Private + Communication Technology (PCT) entwickelte. + \item + Netscape verbesserte das Protokoll und SSL v.3 wurde zum + De-facto-Standardprotokoll für die Sicherung des HTTP-Verkehrs. + \item + Dennoch kann SSL eingesetzt werden, um beliebige Anwendungen zu + sichern, die über TCP laufen. + \item + 1996 beschloss die IETF, ein allgemeines Transport Layer Security + (TLS) Protokoll zu spezifizieren, das auf SSL basiert + \end{itemize} + \end{itemize} + + + \subsection{SSL-Sicherheitsdienste} + + \begin{itemize} + \item + Peer-Entity-Authentifizierung: + + \begin{itemize} + \item + Vor jeder Kommunikation zwischen einem Client und einem Server wird + ein Authentifizierungsprotokoll ausgeführt, um die Peer-Entitäten zu + authentifizieren. + \item + Nach erfolgreichem Abschluss des Authentifizierungsdialogs wird eine + SSL-Sitzung zwischen den Peer-Entities aufgebaut. + \end{itemize} + \item + Vertraulichkeit der Benutzerdaten: + + \begin{itemize} + \item + Falls beim Aufbau der Sitzung vereinbart, werden die Benutzerdaten + verschlüsselt. + \item + Es können verschiedene Verschlüsselungsalgorithmen ausgehandelt + werden: RC4, DES, 3DES, IDEA + \end{itemize} + \item + Integrität der Benutzerdaten: + + \begin{itemize} + \item + Ein MAC, der auf einer kryptografischen Hash-Funktion basiert, wird + an die Benutzerdaten angehängt. + \item + Der MAC wird mit einem ausgehandelten Geheimnis im + Präfix-Suffix-Modus errechnet. + \item + Für die MAC-Berechnung kann entweder MD5 oder SHA ausgehandelt + werden. + \end{itemize} + \end{itemize} + + + \subsection{SSL-Sitzungs- und + Verbindungsstatus} + + \begin{itemize} + \item + Sitzungsstatus: + + \begin{itemize} + \item + Sitzungskennzeichen: eine vom Server gewählte Bytefolge + \item + Peer-Zertifikat: X.509 v.3 Zertifikat der Gegenstelle (optional) + \item + Komprimierungsmethode: Algorithmus zur Komprimierung der Daten vor + der Verschlüsselung + \item + Cipher spec: spezifiziert kryptographische Algorithmen und Parameter + \item + Hauptgeheimnis: ein ausgehandeltes gemeinsames Geheimnis mit einer + Länge von 48 Byte + \item + Ist wiederaufnehmbar: ein Kennzeichen, das angibt, ob die Sitzung + neue Verbindungen unterstützt + \end{itemize} + \item + Verbindungsstatus: + + \begin{itemize} + \item + Server und Client random: von Server und Client gewählte Bytefolgen + \item + Server write MAC secret: wird in MAC-Berechnungen des Servers + verwendet + \item + Client write MAC secret: wird bei MAC-Berechnungen durch den Client + verwendet + \item + Server-Schreibschlüssel: wird für die Verschlüsselung durch den + Server und die Entschlüsselung durch den Client verwendet + \item + Client write key: wird für die Verschlüsselung durch den Client und + die Entschlüsselung durch den Server verwendet + \end{itemize} + \end{itemize} + + + \subsection{Architektur des + SSL-Protokolls} + + % \includegraphics{Assets/NetworkSecurity-ssl-protocol-architecture.png} + + \begin{itemize} + \item + SSL ist als eine mehrschichtige und modulare Protokollarchitektur + aufgebaut: + + \begin{itemize} + \item + Handshake: Authentifizierung und Aushandlung von Parametern + \item + Change Cipherspec: Signalisierung von Übergängen in der + Verschlüsselungsstrategie + \item + Alert: Signalisierung von Fehlerzuständen + \item + Application Data: Schnittstelle für den transparenten Zugriff auf + das Record-Protokoll + \item + Aufzeichnung: + + \begin{itemize} + \item + Fragmentierung der Nutzdaten in Klartextsätze der Länge + \$\textless{} 2\^{}\{14\}\$ + \item + Komprimierung (optional) von Klartextsätzen + \item + Verschlüsselung und Integritätsschutz (beides optional) + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{SSL-Record-Protokoll} + + % \includegraphics{Assets/NetworkSecurity-SSL-record-protocol.png} + + \begin{itemize} + \item + Inhaltstyp: + + \begin{itemize} + \item + Ändern Cipherspec. (20) + \item + Warnung (21) + \item + Handshake (22) + \item + Anwendungsdaten (23) + \end{itemize} + \item + Version: die Protokollversion von SSL (major = 3, minor = 0) + \item + Länge: die Länge der Daten in Bytes, darf nicht größer sein als + \$2\^{}\{14\} + 2\^{}\{10\}\$ + \end{itemize} + + + \subsection{Verarbeitung des + SSL-Datensatzprotokolls} + + \begin{itemize} + \item + Absendende Seite: + + \begin{itemize} + \item + Die Datensatzschicht fragmentiert zunächst die Nutzdaten in + Datensätze mit einer maximalen Länge von \$2\^{}\{14\}\$ Oktetten, + wobei mehrere Nachrichten desselben Inhaltstyps zu einem Datensatz + zusammengefasst werden können + \item + Nach der Fragmentierung werden die Daten des Datensatzes + komprimiert, der Standardalgorithmus hierfür ist null + (\textasciitilde{} keine Komprimierung), und er darf die Länge des + Datensatzes nicht um mehr als \$2\^{}\{10\}\$ Oktette erhöhen + \item + Ein Nachrichtenauthentifizierungscode wird an die Datensatzdaten + angehängt: + + \begin{itemize} + \item + \$MAC = H(MAC\_write\_secret + pad\_2 + H(MAC\_write\_secret + + pad\_1 + seqnum + length + data))\$ + \item + Man beachte, dass seqnum nicht übertragen wird, da es implizit + bekannt ist und das zugrundeliegende TCP einen gesicherten Dienst + bietet + \end{itemize} + \item + Die Daten des Datensatzes und der MAC werden mit dem in der + aktuellen Chiffriervorschrift definierten + Verschlüsselungsalgorithmus verschlüsselt (dies kann ein vorheriges + Auffüllen erfordern) + \end{itemize} + \item + Empfängerseite: + + \begin{itemize} + \item + Der Datensatz wird entschlüsselt, auf Integrität geprüft, + dekomprimiert, de-fragmentiert und an die Anwendung oder das + SSL-Protokoll der höheren Schicht übergeben + \end{itemize} + \end{itemize} + + + \subsection{SSL Handshake Protokoll: + Einführung} + + \begin{itemize} + \item + Das SSL-Handshake-Protokoll wird verwendet, um die + Peer-Authentifizierung und die kryptographischen Parameter für eine + SSL-Sitzung festzulegen. + \item + Eine SSL-Sitzung kann so ausgehandelt werden, dass sie wieder + aufgenommen werden kann: + + \begin{itemize} + \item + Die Wiederaufnahme und Duplizierung von SSL-Sitzungen ermöglicht die + Wiederverwendung des etablierten Sicherheitskontextes. + \item + Dies ist für die Absicherung des HTTP-Verkehrs sehr wichtig, da in + der Regel für jedes Element einer Webseite eine eigene + TCP-Verbindung aufgebaut wird. + + \begin{itemize} + \item + Seit HTTP 1.1 werden persistente TCP-Verbindungen verwendet. + \item + Dennoch ist die Wiederaufnahme von SSL-Sitzungen sehr sinnvoll, da + persistente TCP-Verbindungen nach dem Herunterladen aller + Elemente, die zu einer Seite gehören, und einer gewissen Zeit der + Inaktivität des Benutzers geschlossen werden können. + \end{itemize} + \item + Bei der Wiederaufnahme / Duplizierung einer bestehenden Sitzung wird + ein abgekürzter Handshake durchgeführt + \end{itemize} + \end{itemize} + + + \subsection{SSL Handshake Protokoll: Vollständiger + Handshake} + + %\begin{longtable}[]{@{}lll@{}} + % \toprule + % Client & & Server\tabularnewline + % \midrule + % \endhead + % ClientHello & -\/-\/-\textgreater{} & \tabularnewline + % & & ServerHello\tabularnewline + % & & {[}ServerCertificate{]}\tabularnewline + % & & {[}CertificateRequest{]}\tabularnewline + % & & {[}ServerKeyExchange{]}\tabularnewline + % & \textless-\/-\/- & ServerHelloDone\tabularnewline + % {[}ClientCertificate{]} & & \tabularnewline + % ClientKeyExchange & & \tabularnewline + % {[}CertificateVerify{]} & & \tabularnewline + % ChangeCipherSpec & & \tabularnewline + % Finished & -\/-\/-\textgreater{} & \tabularnewline + % & & ChangeCipherSpec\tabularnewline + % & \textless-\/-\/- & Finished\tabularnewline + % \bottomrule + %\end{longtable} + + {[}...{]} kennzeichnet optionale Nachrichten + + + \subsection{SSL Handshake Protokoll: Abgekürzter + Handshake} + + %\begin{longtable}[]{@{}lll@{}} + % \toprule + % Client & & Server\tabularnewline + % \midrule + % \endhead + % ClientHello(SessionID) & -\/-\/-\textgreater{} & \tabularnewline + % & & ServerHello(SessionID)\tabularnewline + % & & ChangeCipherSpec\tabularnewline + % & \textless-\/-\/- & Finished\tabularnewline + % ChangeCipherSpec & & \tabularnewline + % Finished & -\/-\/-\textgreater{} & \tabularnewline + % \bottomrule + %\end{longtable} + + \begin{itemize} + \item + Die Nachricht "Finished" enthält eine MAC, die entweder auf MD5 oder + SHA basiert und das Master-Secret enthält, das zuvor zwischen Client + und Server festgelegt wurde. + \item + Wenn der Server die Sitzung nicht fortsetzen kann / beschließt, sie + nicht fortzusetzen, antwortet er mit den Nachrichten des vollständigen + Handshake + \end{itemize} + + + \subsection{SSL-Handshake-Protokoll: Kryptografische + Aspekte} + + \begin{itemize} + \item + SSL unterstützt drei Methoden zur Erstellung von Sitzungsschlüsseln: + + \begin{itemize} + \item + RSA: ein Pre-Master-Geheimnis wird vom Client zufällig generiert und + mit dem öffentlichen Schlüssel des Servers verschlüsselt an den + Server gesendet + \item + Diffie-Hellman: Es wird ein Standard-Diffie-Hellman-Austausch + durchgeführt, und das ermittelte gemeinsame Geheimnis wird als + Pre-Master-Secret verwendet. + \item + Fortezza: eine unveröffentlichte, von der NSA entwickelte + Sicherheitstechnologie, die eine Schlüsselhinterlegung unterstützt + und in diesem Kurs nicht behandelt wird + \end{itemize} + \item + Da SSL in erster Linie für die Sicherung des HTTP-Verkehrs entwickelt + wurde, ist das ,,Standardanwendungsszenario'' ein Client, der auf + einen authentischen Webserver zugreifen möchte: + + \begin{itemize} + \item + In diesem Fall sendet der Webserver sein Zertifikat mit dem + öffentlichen Schlüssel nach der ServerHello-Nachricht + \item + Das Server-Zertifikat kann die öffentlichen DH-Werte des Servers + enthalten oder der Server kann sie in der optionalen + ServerKeyExchange-Nachricht senden + \item + Der Client verwendet das Zertifikat des Servers / die empfangenen + DH-Werte / seine Fortezza-Karte, um einen RSA- / DH- / + Fortezza-basierten Schlüsselaustausch durchzuführen. + \end{itemize} + \item + Das Pre-Master-Secret und die Zufallszahlen, die der Client und der + Server in ihren Hallo-Nachrichten angeben, werden verwendet, um das + Master-Secret der Länge 48 Byte zu generieren. + \item + Berechnung des Master-Geheimnisses: + + \begin{itemize} + \item + Master-Geheimnis = MD5(vor-Master-Geheimnis + SHA('A' + + vor-Master-Geheimnis + ClientHello.random + ServerHello.random)) + + MD5(Vor-Hauptgeheimnis + SHA('BB' + Vor-Hauptgeheimnis + + ClientHello.random + ServerHello.random)) + MD5(pre-master-secret + + SHA('CCC' + pre-master-secret + ClientHello.random + + ServerHello.random)) + \end{itemize} + \item + Die Verwendung von MD5 und SHA zur Generierung des Master-Geheimnisses + wird als sicher angesehen, selbst wenn eine der kryptografischen + Hash-Funktionen ,,defekt'' ist. + \item + Um die Sitzungsschlüssel aus dem Master-Secret zu berechnen, wird in + einem ersten Schritt eine ausreichende Menge an Schlüsselmaterial aus + dem Master-Secret und den Zufallszahlen von Client und Server erzeugt: + + \begin{itemize} + \item + key\_block = MD5(master-secret + SHA('A' + master-secret + + ClientHello.random + ServerHello.random)) + MD5(master-secret + + SHA('BB' + master-secret + ClientHello.random + ServerHello.random)) + + {[}...{]} + \end{itemize} + \item + Anschließend wird das Material des Sitzungsschlüssels fortlaufend aus + dem key\_block entnommen: + + \begin{itemize} + \item + client\_write\_MAC\_secret = key\_block{[}1, + CipherSpec.hash\_size{]} + \item + server\_write\_MAC\_secret = key\_block{[}i 1 , i 1 + + CipherSpec.hash\_size - 1{]} + \item + client\_write\_key = key\_block{[}i 2 , i 2 + + CipherSpec.key\_material - 1{]} + \item + server\_write\_key = key\_block{[}i 3 , i 3 + + CipherSpec.key\_material - 1{]} + \item + client\_write\_IV = key\_block{[}i 4 , i 4 + CipherSpec.IV\_size - + 1{]} + \item + server\_write\_IV = key\_block{[}i 5 , i 5 + CipherSpec.IV\_size - + 1{]} + \end{itemize} + \item + Authentifizierung von und mit dem Pre-Master-Secret: + + \begin{itemize} + \item + SSL unterstützt Schlüsselerstellung ohne Authentifizierung (anonym), + in diesem Fall können Man-in-the-Middle-Angriffe nicht abgewehrt + werden + \item + Bei Verwendung des RSA-basierten Schlüsselaustauschs: + + \begin{itemize} + \item + Der Client verschlüsselt das Pre-Master-Secret mit dem + öffentlichen Schlüssel des Servers, der durch eine + Zertifikatskette überprüft werden kann. + \item + Der Client weiß, dass nur der Server das Pre-Master-Secret + entschlüsseln kann. Wenn der Server also die fertige Nachricht mit + dem Master-Secret sendet, kann der Client die Server-Authentizität + ableiten. + \item + Der Server kann aus dem empfangenen Pre-Master-Secret keine + Client-Authentizität ableiten. + \item + Wenn Client-Authentizität erforderlich ist, sendet der Client + zusätzlich sein Zertifikat und eine CertificateVerify-Nachricht, + die eine Signatur über einen Hash (MD5 oder SHA) des + Master-Geheimnisses und aller vor der CertificateVerify-Nachricht + ausgetauschten Handshake-Nachrichten enthält + \end{itemize} + \item + Beim DH-Key-Austausch wird die Authentizität aus den DH-Werten + abgeleitet, die im Zertifikat des Servers (und des Clients) + enthalten und signiert sind + \end{itemize} + \end{itemize} + + + \subsection{SSL Handshake Protokoll: Eine + Sicherheitslücke} + + \begin{itemize} + \item + 1998 entdeckte D. Bleichenbacher eine Schwachstelle im + Verschlüsselungsstandard PKCS \#1 (v.1.5), der im + SSL-Handshake-Verfahren verwendet wird + \item + Wenn der Client das Pre-Master-Secret mit dem öffentlichen Schlüssel + des Servers verschlüsselt, verwendet er PKCS \#1, um es vor der + Verschlüsselung zu formatieren: + + \begin{itemize} + \item + EM = 0x02 \textbar{} PS \textbar{} 0x00 \textbar{} M + + \begin{itemize} + \item + wobei PS eine Auffüllzeichenfolge von mindestens 8 pseudozufällig + erzeugten Nicht-Null-Oktetts und M die zu verschlüsselnde + Nachricht (= Pre-Master-Secret) bezeichnet + \item + (PS wird verwendet, um eine Zufallskomponente hinzuzufügen und M + auf die Modulusgröße des verwendeten Schlüssels aufzufüllen) + \end{itemize} + \item + Dann wird EM verschlüsselt: \$C = E(+K\_\{Server\}, EM)\$ + \item + Nachdem der Server C entschlüsselt hat, prüft er, ob das erste + Oktett gleich 0x ist und ob es ein 0x00-Oktett gibt; wenn diese + Prüfung fehlschlägt, antwortet er mit einer Fehlermeldung + \item + Diese Fehlermeldung kann von einem Angreifer genutzt werden, um + einen ,,Orakel-Angriff'' zu starten. + \end{itemize} + \item + Ein Orakel-Angriff gegen das SSL-Handshake-Protokoll {[}BKS98a{]}: + + \begin{itemize} + \item + Betrachten wir einen Angreifer (Eve), der einen SSL-Handshake-Dialog + belauscht hat und das Pre-Master-Secret (und damit alle anderen + abgeleiteten Geheimnisse), das zwischen Alice (Client) und Bob + (Server) ausgetauscht wurde, wiederherstellen möchte + \item + Eve hat die verschlüsselte Nachricht C, die das Pre-Master-Secret + enthält, erfolgreich abgehört und möchte nun den Klartext + wiederherstellen + \item + Eve generiert eine Reihe zusammenhängender Chiffretexte \$C\_1 , + C\_2 , ...\$: + + \begin{itemize} + \item + \$C\_i = C\textbackslash times R\_i\^{}e\textbackslash{} + mod\textbackslash{} n\$, wobei \$(e, n)\$ der öffentliche + Schlüssel von Bob ist + \item + Die \$R\_i\$ werden adaptiv ausgewählt, abhängig von älteren + ,,guten'' \$R\_i\$, die von Bob verarbeitet wurden, ohne + Fehlermeldungen zu erzeugen (was anzeigt, dass sie zu einer + gültigen PKCS-1-Nachricht entschlüsselt wurden) + \item + Die \$C\_i\$ werden an Bob übermittelt, und es werden entsprechend + neue \$C\_i\$ erzeugt + \item + Aus dem ,,guten'' \$R\_i\$ leitet Eve bestimmte Bits der + entsprechenden Nachricht \$M\_i= C\_i\^{}d = M\textbackslash times + R\_i\textbackslash{} mod\textbackslash{} n\$ ab, basierend auf der + PKCS \#1 Verschlüsselungsmethode + \end{itemize} + \item + Aus den abgeleiteten Bits von \$M\textbackslash times + R\_i\textbackslash{} mod\textbackslash{} n\$ für hinreichend viele + \$R\_i\$ kann Eve die Größe des Intervalls reduzieren, das die + unbekannte Nachricht M enthalten muss + \item + Im Wesentlichen halbiert jeder ,,gute'' Chiffretext das betreffende + Intervall, so dass Eve mit genügend ,,guten'' Chiffretexten in der + Lage ist, M + \item + Mit PKCS \#1 Version 1.5 (wie ursprünglich in SSL V.3.0 verwendet) + wird ungefähr einer von \$2\^{}\{16\}\$ bis \$2\^{}\{18\}\$ zufällig + ausgewählten Chiffretexten ,,gut'' sein. + \item + Typischerweise beträgt die Gesamtzahl der erforderlichen + Chiffretexte bei einem \$1024\$-Bit-Modul etwa \$2\^{}\{20\}\$, und + dies ist auch die Anzahl der Abfragen an Bob + \item + Nach der Durchführung von etwa 1 Million gefälschter + SSL-Handshake-Dialoge (die alle entweder von Bob oder Eve + unterbrochen werden) ist Eve also in der Lage, das Pre-Master-Secret + und alle abgeleiteten Schlüssel einer zuvor eingerichteten + SSL-Sitzung zwischen Alice und Bob wiederherzustellen. Subtile + Protokollinteraktionen (hier: SSL und PKCS \#1) können zum Versagen + eines Sicherheitsprotokolls führen, selbst wenn der grundlegende + kryptographische Algorithmus (hier: RSA) selbst nicht gebrochen ist! + \end{itemize} + \item + Gegenmassnahmen: + + \begin{itemize} + \item + Regelmäßiger Wechsel der öffentlichen Schlüsselpaare + (\$\textbackslash Rightarrow\$-Overhead) + \item + Verringerung der Wahrscheinlichkeit, ,,gute'' Chiffriertexte zu + erhalten, indem das Format der entschlüsselten Chiffriertexte + gründlich überprüft und dem Client ein identisches Verhalten + (Fehlermeldung, Zeitverhalten usw.) gezeigt wird + \item + Der Kunde muss den Klartext kennen, bevor er antwortet, ob die + Nachricht erfolgreich entschlüsselt werden konnte. + \item + Hinzufügen einer Struktur zum Klartext, z. B. durch Hinzufügen eines + Hashwerts zum Klartext: + + \begin{itemize} + \item + Achtung: Es ist eine gewisse Vorsicht geboten, um Anfälligkeiten + für eine andere Klasse von Angriffen zu vermeiden {[}Cop96a{]}. + \end{itemize} + \item + Änderung des Verschlüsselungsprotokolls für öffentliche Schlüssel, + d.h. Überarbeitung von PKCS \#1: + + \begin{itemize} + \item + PKCS \#1 Version 2.1 bereitet den Klartext vor der Verschlüsselung + mit einer Methode vor, die als optimales asymmetrisches + Verschlüsselungs-Padding (OAEP) bezeichnet wird, um die PKCS \#1 + Entschlüsselungsprozedur ,,plaintext aware'' zu machen, was + bedeutet, dass es nicht möglich ist, einen gültigen Chiffretext zu + konstruieren, ohne den entsprechenden Klartext zu kennen + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{SSL-Chiffre-Suiten} + + \begin{itemize} + \item + Kein Schutz (Standard-Suite): + + \begin{itemize} + \item + CipherSuite SSL\_NULL\_WITH\_NULL\_NULL = \{ 0x00,0x00 \} + \end{itemize} + \item + Der Server stellt einen für die Verschlüsselung geeigneten + RSA-Schlüssel bereit: + + \begin{itemize} + \item + SSL\_RSA\_WITH\_NULL\_MD5 = \{ 0x00,0x01 \} + \item + SSL\_RSA\_WITH\_NULL\_SHA = \{ 0x00,0x02 \} + \item + SSL\_RSA\_EXPORT\_WITH\_RC4\_40\_MD5 = \{ 0x00,0x03 \} + \item + SSL\_RSA\_WITH\_RC4\_128\_MD5 = \{ 0x00,0x04 \} + \item + SSL\_RSA\_WITH\_RC4\_128\_SHA = \{ 0x00,0x05 \} + \item + SSL\_RSA\_EXPORT\_WITH\_RC2\_CBC\_40\_MD5 = \{ 0x00,0x06 \} + \item + SSL\_RSA\_WITH\_IDEA\_CBC\_SHA = \{ 0x00,0x07 \} + \item + SSL\_RSA\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x08 \} + \item + SSL\_RSA\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x09 \} + \item + SSL\_RSA\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x0A \} + \end{itemize} + \item + Cipher-Suites mit authentifiziertem DH-Schlüssel-Austausch + + \begin{itemize} + \item + SSL\_DH\_DSS\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x0B \} + \item + SSL\_DH\_DSS\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x0C \} + \item + SSL\_DH\_DSS\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x0D \} + \item + SSL\_DH\_RSA\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x0E \} + \item + SSL\_DH\_RSA\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x0F \} + \item + SSL\_DH\_RSA\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x10 \} + \item + SSL\_DHE\_DSS\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x11 \} + \item + SSL\_DHE\_DSS\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x12 \} + \item + SSL\_DHE\_DSS\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x13 \} + \item + SSL\_DHE\_RSA\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x14 \} + \item + SSL\_DHE\_RSA\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x15 \} + \item + SSL\_DHE\_RSA\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x16 \} + \end{itemize} + \end{itemize} + + (DH steht für Suites, bei denen die öffentlichen DH-Werte in einem von + einer CA signierten Zertifikat enthalten sind, DHE für Suites, bei denen + sie mit einem öffentlichen Schlüssel signiert sind, der von einer CA + zertifiziert ist) + + \begin{itemize} + \item + Von der Verwendung der folgenden Chiffriersuiten ohne jegliche + Authentifizierung der Entität wird dringend abgeraten, da sie anfällig + für Man-in-the-Middle-Angriffe sind: + + \begin{itemize} + \item + SSL\_DH\_anon\_EXPORT\_WITH\_RC4\_40\_MD5 = \{ 0x00,0x17 \} + \item + SSL\_DH\_anon\_WITH\_RC4\_128\_MD5 = \{ 0x00,0x18 \} + \item + SSL\_DH\_anon\_EXPORT\_WITH\_DES40\_CBC\_SHA = \{ 0x00,0x19 \} + \item + SSL\_DH\_anon\_WITH\_DES\_CBC\_SHA = \{ 0x00,0x1A \} + \item + SSL\_DH\_anon\_WITH\_3DES\_EDE\_CBC\_SHA = \{ 0x00,0x1B \} + \end{itemize} + \item + Die letzte Cipher Suite ist für den Fortezza-Token: + + \begin{itemize} + \item + SSL\_FORTEZZA\_DMS\_WITH\_NULL\_SHA = \{ 0x00,0x1C \} + \item + SSL\_FORTEZZA\_DMS\_WITH\_FORTEZZA\_CBC\_SHA = \{ 0x00,0x1D \} + \end{itemize} + \end{itemize} + + (Diese Cipher-Suites müssen natürlich nicht auswendig gelernt werden und + werden hier nur aufgeführt, um die Flexibilität des SSL-Protokolls zu + verdeutlichen) + + + \subsection{Das Transport Layer + Security-Protokoll} + + \begin{itemize} + \item + 1996 gründete die IETF eine Arbeitsgruppe zur Definition eines + Transport Layer Security (TLS) Protokolls: + + \begin{itemize} + \item + Offiziell wurde angekündigt, die Protokolle SSL, SSH und PCT als + Input zu nehmen. + \item + Der im Dezember 1996 veröffentlichte Entwurf der TLS + V.1.0-Spezifikation war jedoch im Wesentlichen identisch mit der SSL + V.3.0-Spezifikation + \end{itemize} + \item + Eigentlich war es von Anfang an die Absicht der Arbeitsgruppe, TLS auf + SSL V.3.0 mit den folgenden Änderungen aufzubauen: + + \begin{itemize} + \item + Die HMAC-Konstruktion zur Berechnung kryptographischer Hash-Werte + sollte anstelle von Hashing im Präfix- und Suffix-Modus übernommen + werden. + \item + Die auf Fortezza basierenden Chiffrier-Suiten von SSL sollten + entfernt werden, da sie eine unveröffentlichte Technologie enthalten + \item + Ein auf dem DSS (Digital Signature Standard) basierender Dialog zur + Authentifizierung und zum Schlüsselaustausch sollte aufgenommen + werden. + \item + Das TLS-Record-Protokoll und das Handshake-Protokoll sollten + getrennt und in separaten Dokumenten klarer spezifiziert werden, was + bisher nicht geschehen ist. + \end{itemize} + \item + Um die Exportfähigkeit von TLS-konformen Produkten zu erreichen, wurde + in einigen Chiffriersuiten die Verwendung von Schlüsseln mit einer auf + 40 Bit reduzierten Entropie vorgeschrieben. + + \begin{itemize} + \item + Von der Verwendung dieser Cipher-Suites wird dringend abgeraten, da + sie praktisch keinen Schutz der Vertraulichkeit von Daten bieten. + \end{itemize} + \item + Ab TLS 1.2 (RFC 5246): + + \begin{itemize} + \item + Schlüsselaustausch-Algorithmen: + + \begin{itemize} + \item + DH oder ECDH Austausch ohne oder mit DSS / RSA / ECDSA Signaturen + \item + DH-Austausch mit zertifizierten öffentlichen DH-Parametern + \item + RSA-basierter Schlüsselaustausch + \item + keine + \end{itemize} + \item + Verschlüsselungsalgorithmen: AES / 3DES in CBC / CCM /GCM, RC4, null + \item + Hash-Algorithmen: MD5, SHA-1, SHA-256, SHA-384, SHA-512, null + \item + Premaster Secret: Keine MD5/SHA-1 Kombination, sondern nur SHA-256! + \end{itemize} + \item + Was die Protokollfunktionen betrifft, ist TLS im Wesentlichen dasselbe + wie SSL + \item + Sicherheit: + + \begin{itemize} + \item + In SSL 3.0 und TLS 1.0 ist der Initialisierungsvektor eines im + CBC-Modus verschlüsselten Datensatzes der letzte Block des + vorherigen Datensatzes + \item + Wenn ein Angreifer den Inhalt des vorherigen Datensatzes + kontrolliert, kann er einen adaptiven Klartextangriff durchführen, + um den Inhalt des nächsten Datensatzes herauszufinden. + \item + Durchführbar für Webverkehr, d. h. Erzeugen von Verkehr mit + JavaScript und Beobachten von außen, führt zum sogenannten + BEAST-Angriff (Browser Exploit Against SSL/TLS) {[}RD10{]}. + \item + Auch für VPN-Verkehr machbar + \item + Abgeschwächt durch TLS 1.1, wo explizite IVs verwendet werden + \item + 2009 wurde eine sogenannte TLS-Neuverhandlungsschwachstelle + identifiziert + + \begin{itemize} + \item + Angreifer können sie nutzen, um einer legitimen Sitzung durch + einen Man-in-the-Middle-Angriff Daten voranzustellen (Details in + {[}Zo11{]}) + \item + Die Auswirkungen hängen stark von dem verwendeten + Anwendungsprotokoll ab + \end{itemize} + \item + Bei HTTPS führt dies zu mehreren Ausnutzungsmöglichkeiten, z. B, + + \begin{itemize} + \item + Angreifer injeziert: + \texttt{GET\ /ebanking/transfer?what=LotsOfMoney\&to=eve\ HTTP/1.1\ \textless{}crlf\textgreater{}\ X-Ignore:\ \textless{}no\ crlf\textgreater{}} + \item + Alice sendet: \texttt{GET\ /ebanking/start.html\ HTTP/1.1} + \item + Die Anfrage wird in eine valide HTTP Anfrage umgewandelt: + \texttt{GET\ /ebanking/transfer?what=LotsOfMoney\&to=eve\ HTTP/1.1\ \textless{}crlf\textgreater{}\ X-Ignore:\ GET\ /ebanking/start.html\ HTTP/1.1} + \end{itemize} + \item + Abgeschwächt durch Identifizierung neu ausgehandelter Sitzungen mit + einer anderen ID {[}RRDO10{]} + \end{itemize} + \end{itemize} + + + \subsection{Das Datagram Transport Layer Security + Protokoll} + + \begin{itemize} + \item + TLS bietet sichere Kommunikation über ein zuverlässiges + Transportprotokoll + \item + DTLS ist so angepasst, dass es über unzuverlässige Transportprotokolle + wie z.B. UDP funktioniert + \item + Wird zum Schutz verwendet: + + \begin{itemize} + \item + Sprach- und Videodaten in Echtzeit, insbesondere Voice-over-IP + \item + Getunnelte TCP-Daten (da TCP über TCP eine schlechte Idee für die + Leistung ist) + \end{itemize} + \item + DTLS basiert derzeit auf TLS 1.2, enthält jedoch einige Änderungen: + + \begin{itemize} + \item + Bietet + + \begin{itemize} + \item + Nachrichtenwiederholungen, um verlorenen Handshake-Paketen + entgegenzuwirken + \item + Eigener Fragmentierungsmechanismus, um große Handshake-Pakete zu + ermöglichen + \end{itemize} + \item + Hinzufügen von Sequenznummern, um neu geordnete Datenpakete zu + ermöglichen (und Verbot von Stromchiffren, z. B. RC4) + \item + Fügt einen Mechanismus hinzu, um zu erkennen, dass ein Client die + ,,Verbindung'' mit denselben Ports neu gestartet hat (z. B. nach + einem Anwendungsabsturz) + \item + Fügt einen Wiedergabeschutz durch ein gleitendes Fenster hinzu (wie + bei IPsec) + \item + Fügt eine Cookie-basierte DoS-Abwehr hinzu (wie bei IKEv2) + \end{itemize} + \end{itemize} + + + \subsection{Das Secure + Shell-Protokoll} + + \begin{itemize} + \item + Secure Shell (SSH) Version 1 wurde ursprünglich von Tatu Ylönen an der + Universität Helsinki in Finnland entwickelt. + \item + Da der Autor auch eine kostenlose Implementierung mit Quellcode zur + Verfügung stellte, fand das Protokoll weite Verbreitung im Internet + \item + Später wurde die Entwicklung von SSH durch den Autor kommerzialisiert. + \item + Nichtsdestotrotz sind immer noch kostenlose Versionen verfügbar, wobei + die am weitesten verbreitete Version OpenSSH ist + \item + 1997 wurde eine Spezifikation der Version 2.0 von SSH bei der IETF + eingereicht und seitdem in einer Reihe von Internet-Entwürfen + verfeinert + \item + SSH wurde ursprünglich entwickelt, um einen sicheren Ersatz für die + Unix r-Tools (rlogin, rsh, rcp und rdist) zu bieten, und stellt somit + ein Protokoll der Anwendungs- oder Sitzungsschicht dar. + \item + Da SSH jedoch auch ein allgemeines Sicherheitsprotokoll der + Transportschicht enthält und Tunneling-Fähigkeiten bietet, wird es in + diesem Kapitel als Sicherheitsprotokoll der Transportschicht behandelt + \end{itemize} + + + \subsection{SSH Version 2} + + \begin{itemize} + \item + SSH Version 2 ist in mehreren separaten Dokumenten spezifiziert, z.B.: + + \begin{itemize} + \item + SSH Protocol Assigned Numbers {[}LL06{]} + \item + SSH-Protokollarchitektur {[}YL06a{]} + \item + SSH-Authentifizierungsprotokoll {[}YL06b{]} + \item + SSH-Transportschichtprotokoll {[}YL06c{]} + \item + SSH-Verbindungsprotokoll {[}YL06d{]} + \end{itemize} + \item + SSH-Architektur: + + \begin{itemize} + \item + SSH verfolgt einen Client-Server-Ansatz + \item + Jeder SSH-Server hat mindestens einen Host-Schlüssel + \item + SSH Version 2 bietet zwei verschiedene Vertrauensmodelle: + + \begin{itemize} + \item + Jeder Client hat eine lokale Datenbank, die jeden Hostnamen mit + dem entsprechenden öffentlichen Hostschlüssel verknüpft + \item + Die Zuordnung von Hostname zu öffentlichem Schlüssel wird von + einer Zertifizierungsstelle zertifiziert, und jeder Client kennt + den öffentlichen Schlüssel der Zertifizierungsstelle + \end{itemize} + \item + Das Protokoll ermöglicht die vollständige Aushandlung von + Algorithmen und Formaten für Verschlüsselung, Integrität, + Schlüsselaustausch, Komprimierung und öffentliche Schlüssel + \end{itemize} + \end{itemize} + + + \subsection{SSH-Transportprotokoll} + + \begin{itemize} + \item + SSH verwendet ein zuverlässiges Transportprotokoll (normalerweise + TCP). + \item + Es bietet die folgenden Dienste: + + \begin{itemize} + \item + Verschlüsselung von Benutzerdaten + \item + Authentifizierung der Datenherkunft (Integrität) + \item + Server-Authentifizierung (nur Host-Authentifizierung) + \item + Komprimierung der Benutzerdaten vor der Verschlüsselung + \end{itemize} + \item + Unterstützte Algorithmen: + + \begin{itemize} + \item + Verschlüsselung: + + \begin{itemize} + \item + AES, 3DES, Blowfish, Twofish, Serpent, IDEA und CAST in CBC + \item + AES in GCM {[}IS09{]} + \item + Arcfour (,,vermutlich'' kompatibel mit dem ,,unveröffentlichten'' + RC4) + \item + keine (nicht empfohlen) + \end{itemize} + \item + Integrität: + + \begin{itemize} + \item + HMAC mit MD5, SHA-1, SHA-256 oder SHA-512 + \item + keine (nicht empfohlen) + \end{itemize} + \item + Schlüsselaustausch: + + \begin{itemize} + \item + Diffie-Hellman mit SHA-1 und zwei vordefinierten Gruppen + \item + ECDH mit mehreren vordefinierten NIST-Gruppen {[}SG09{]} + (obligatorisch drei Kurven über $\mathbb{Z}_p$) + \item + Öffentlicher Schlüssel: RSA, DSS, ECC (in mehreren Varianten + {[}SG09{]}) + \end{itemize} + \item + Komprimierung: keine, zlib (siehe RFCs 1950, 1951) + \end{itemize} + \end{itemize} + + + \subsection{SSH-Transportprotokoll + Paketformat} + + % \includegraphics{Assets/NetworkSecurity-ssh-transport-protocol-packet.png} + + \begin{itemize} + \item + Das Paketformat ist nicht 32-Bit-wortorientiert + \item + Felder des Pakets: + + \begin{itemize} + \item + Paketlänge: die Länge des Pakets selbst, ohne dieses Längenfeld und + den MAC + \item + Padding length: Länge des Padding-Feldes, muss zwischen vier und 255 + liegen + \item + Payload: die eigentliche Nutzlast des Pakets, wenn Komprimierung + ausgehandelt wurde, wird dieses Feld komprimiert + \item + Padding: dieses Feld besteht aus zufällig ausgewählten Oktetten, um + die Nutzlast auf ein ganzzahliges Vielfaches von 8 oder der + Blockgröße des Verschlüsselungsalgorithmus aufzufüllen, je nachdem, + welcher Wert größer ist + \item + MAC: Wurde die Nachrichtenauthentifizierung ausgehandelt, enthält + dieses Feld den MAC des gesamten Pakets ohne das MAC-Feld selbst; + soll das Paket verschlüsselt werden, wird der MAC vor der + Verschlüsselung wie folgt berechnet + + \begin{itemize} + \item + MAC = HMAC(shared\_secret, seq\_number \textbar\textbar{} + unencrypted\_packet), wobei seq\_number eine 32-Bit-Sequenznummer + für jedes Paket bezeichnet + \end{itemize} + \end{itemize} + \item + Verschlüsselung: wenn Verschlüsselung ausgehandelt wird, wird das + gesamte Paket ohne MAC nach der MAC-Berechnung verschlüsselt + \end{itemize} + + + \subsection{SSH-Aushandlung, Schlüsselaustausch und + Server-Authentifizierung} + + \begin{itemize} + \item + Algorithmus-Aushandlung: + + \begin{itemize} + \item + Jede Entität sendet ein Paket (bezeichnet als kexinit ) mit einer + Spezifikation der von ihr unterstützten Methoden in der Reihenfolge + ihrer Präferenz + \item + Beide Entitäten iterieren über die Liste des Clients und wählen den + ersten Algorithmus, der auch vom Server unterstützt wird + \item + Diese Methode wird verwendet, um Folgendes auszuhandeln: + Server-Host-Schlüssel-Algorithmus (\textasciitilde{} + Server-Authentifizierung) sowie Verschlüsselungs-, MAC- und + Kompressionsalgorithmus + \item + Zusätzlich kann jede Entität ein Schlüsselaustauschpaket + entsprechend einer Vermutung über den bevorzugten + Schlüsselaustauschalgorithmus der anderen Entität anhängen + \item + Ist eine Vermutung richtig, wird das entsprechende + Schlüsselaustauschpaket als erstes Schlüsselaustauschpaket der + anderen Entität akzeptiert + \item + Falsche Vermutungen werden ignoriert und neue + Schlüsselaustauschpakete werden nach Aushandlung des Algorithmus + gesendet + \end{itemize} + \item + Für den Schlüsselaustausch definiert {[}YL06c{]} nur eine Methode: + + \begin{itemize} + \item + Diffie-Hellman mit SHA-1 und zwei vordefinierten Gruppen (1024 und + 2048 Bit) + \item + Z.B. \$p = 2\^{}\{1024\} -2\^{}\{960\} - 1 + + (2\^{}\{64\}\textbackslash times \textbackslash lfloor 2894 + \textbackslash times \textbackslash pi + + 129093\textbackslash rfloor); g = 2\$ + \end{itemize} + \item + Wenn der Schlüsselaustausch mit der vordefinierten DH-Gruppe + durchgeführt wird: + + \begin{itemize} + \item + Der Client wählt eine Zufallszahl \$x\$, berechnet + \$e=g\^{}x\textbackslash{} mod\textbackslash{} p\$ und sendet \$e\$ + an den Server + \item + Der Server wählt eine Zufallszahl \$y\$, errechnet + \$f=g\^{}y\textbackslash{} mod\textbackslash{} p\$ + \item + Nach dem Empfang von \$e\$ berechnet der Server ferner + \$K=e\^{}y\textbackslash{} mod\textbackslash{} p\$ und einen + Hash-Wert \$h = Hash(version\_C, version\_S, kexinit\_C, kexinit\_S, + +K\_S, e, f, K)\$, wobei version und kexinit die + Versionsinformationen des Clients und des Servers sowie die + anfänglichen Algorithmus-Aushandlungsmeldungen bezeichnen + \item + Der Server signiert h mit seinem privaten Host-Schlüssel - KS und + sendet dem Client eine Nachricht mit \$(+K\_S, f, s)\$. + \item + Beim Empfang prüft der Client den Host-Schlüssel \$+K\_S\$, + berechnet \$K=f\^{}x\textbackslash{} mod\textbackslash{} p\$ sowie + den Hash-Wert \$h\$ und prüft dann die Signatur \$s\$ über \$h\$ + \end{itemize} + \item + Nach diesen Prüfungen kann der Client sicher sein, dass er tatsächlich + ein geheimes K mit dem Host ausgehandelt hat, der \$-K\_S\$ kennt. + \item + Der Server-Host kann jedoch keine Rückschlüsse auf die Authentizität + des Clients ziehen; zu diesem Zweck wird das + SSH-Authentifizierungsprotokoll verwendet + \end{itemize} + + + \subsection{SSH-Sitzungsschlüssel-Ableitung} + + \begin{itemize} + \item + Die Methode des Schlüsselaustauschs ermöglicht es, ein gemeinsames + Geheimnis K und den Hash-Wert h zu ermitteln, die zur Ableitung der + SSH-Sitzungsschlüssel verwendet werden: + + \begin{itemize} + \item + Der Hashwert h des anfänglichen Schlüsselaustauschs wird auch als + session\_id verwendet + \item + \$IV\_\{Client2Server\}\$ = Hash(K, h, ,,A'', session\_id) // + Initialisierungsvektor + \item + \$IV\_\{Server2Client\}\$ = Hash(K, h, ,,B'', session\_id) // + Initialisierungsvektor + \item + \$EK\_\{Client2Server\}\$ = Hash(K, h, ,,C'', session\_id) // + Verschlüsselungsschlüssel + \item + \$EK\_\{Server2Client\}\$ = Hash(K, h, ,,D'', session\_id) // + Chiffrierschlüssel + \item + \$IK\_\{Client2Server\}\$ = Hash(K, h, ,,E'', session\_id) // + Integritätsschlüssel + \item + \$IK\_\{Server2Client\}\$ = Hash(K, h, ,,F'', session\_id) // + Integritätsschlüssel + \end{itemize} + \item + Die Schlüsseldaten werden am Anfang der Hash-Ausgabe entnommen + \item + Wenn mehr Schlüsselbits benötigt werden als von der Hash-Funktion + erzeugt werden: + + \begin{itemize} + \item + K1 = Hash(K, h, x, session\_id) // x = ,,A'', ,,B'', usw. + \item + K2 = Hash(K, h, K1) + \item + K2 = Hash(K, h, K1, K2) + \item + XK = K1 \textbar\textbar{} K2 \textbar\textbar{} ... + \end{itemize} + \end{itemize} + + + \subsection{SSH-Authentifizierungsprotokoll} + + \begin{itemize} + \item + Das SSH-Authentifizierungsprotokoll dient zur Überprüfung der + Identität des Clients und ist für die Ausführung über das + SSH-Transportprotokoll vorgesehen + \item + Das Protokoll unterstützt standardmäßig die folgenden + Authentifizierungsmethoden: + + \begin{itemize} + \item + Öffentlicher Schlüssel: Der Benutzer erzeugt und sendet eine + Signatur mit einem öffentlichen Schlüssel pro Benutzer an den Server + \item + \$Client\textbackslash rightarrow Server: E(-K\_\{Benutzer\}, + (session\_id, 50, Name\_\{Benutzer\}, Service, ,,publickey'', True, + PublicKeyAlgorithmName, +K\_\{Benutzer\}))\$ + \item + Kennwort: Übertragung eines Kennworts pro Benutzer in der + verschlüsselten SSH-Sitzung (das Kennwort wird dem Server im + Klartext präsentiert, aber mit Verschlüsselung des + SSH-Transportprotokolls übertragen) + \item + Host-basiert: analog zum öffentlichen Schlüssel, aber mit einem + öffentlichen Schlüssel pro Host + \item + Keine: wird verwendet, um den Server nach unterstützten Methoden zu + fragen und wenn keine Authentifizierung erforderlich ist (der Server + antwortet direkt mit einer Erfolgsmeldung) + \end{itemize} + \item + Wenn die Authentifizierungsnachricht des Clients erfolgreich geprüft + wurde, antwortet der Server mit einer + ssh\_msg\_userauth\_success-Nachricht + \end{itemize} + + + \subsection{SSH-Verbindungsprotokoll} + + \begin{itemize} + \item + Das SSH-Verbindungsprotokoll läuft auf dem SSH-Transportprotokoll und + bietet folgende Dienste: + + \begin{itemize} + \item + Interaktive Anmeldesitzungen + \item + Fernausführung von Befehlen + \item + Weitergeleitete TCP/IP-Verbindungen + \item + Weitergeleitete X11-Verbindungen + \end{itemize} + \item + Für jeden der oben genannten Dienste werden ein oder mehrere + ,,Kanäle'' eingerichtet, und alle Kanäle werden in eine einzige + verschlüsselte und integritätsgeschützte + SSH-Transportprotokollverbindung gemultiplext: + + \begin{itemize} + \item + Beide Seiten können die Eröffnung eines Kanals beantragen, und die + Kanäle werden durch Nummern beim Sender und beim Empfänger + gekennzeichnet. + \item + Kanäle sind typisiert, z. B. ,,session'', ,,x11'', + ,,forwarded-tcpip'', ,,direct-tcpip'' ... + \item + Kanäle werden durch einen Fenstermechanismus kontrolliert, und es + dürfen keine Daten über einen Kanal gesendet werden, bevor ,,window + space'' verfügbar ist + \end{itemize} + \item + Öffnen eines Kanals: + + \begin{itemize} + \item + Beide Seiten können die Nachricht ssh\_msg\_channel\_open senden, + die mit dem Nachrichtencode 90 und den folgenden Parametern + signalisiert wird: + + \begin{itemize} + \item + Kanaltyp: ist vom Datentyp String, z.B. ,,session'', ,,x11'', etc. + \item + Absenderkanal: ist ein lokaler Bezeichner vom Typ uint32 und wird + vom Anforderer dieses Kanals gewählt + \item + initial window size: ist vom Typ uint32 und gibt an, wie viele + Bytes an den Initiator gesendet werden dürfen, bevor das Fenster + vergrößert werden muss + \item + maximale Paketgröße: ist vom Typ uint32 und legt die maximale + Paketgröße fest, die der Initiator für diesen Kanal zu akzeptieren + bereit ist + \item + weitere Parameter, die vom Typ des Kanals abhängen, können folgen + \end{itemize} + \item + Wenn der Empfänger dieser Nachricht die Kanalanfrage nicht annehmen + will, antwortet er mit der Nachricht + ssh\_msg\_channel\_open\_failure (Code 92): + + \begin{itemize} + \item + Empfängerkanal: die vom Absender in der Öffnungsanfrage angegebene + ID + \item + reason code: ist vom Typ uint32 und gibt den Grund für die + Ablehnung an + \item + additional textual information: ist vom Typ string + \item + language tag: ist vom Typ string und entspricht dem RFC 1766 + \end{itemize} + \item + Wenn der Empfänger dieser Nachricht die Kanalanfrage annehmen will, + antwortet er mit der Nachricht ssh\_msg\_channel\_open\_confirmation + (Code 91) und den folgenden Parametern + + \begin{itemize} + \item + Empfänger-Kanal: die vom Absender in der Öffnungsanforderung + angegebene ID + \item + Absenderkanal: die dem Kanal vom Antwortenden gegebene Kennung + \item + initial window size: ist vom Typ uint32 und gibt an, wie viele + Bytes an den Responder gesendet werden können, bevor das Fenster + vergrößert werden muss + \item + maximum packet size: ist vom Typ uint32 und legt die maximale + Paketgröße fest, die der Responder für diesen Kanal zu akzeptieren + bereit ist + \item + weitere Parameter, die vom Kanaltyp abhängen, können folgen + \end{itemize} + \end{itemize} + \item + Sobald ein Kanal geöffnet ist, sind die folgenden Aktionen möglich: + + \begin{itemize} + \item + Datenübertragung (allerdings sollte die empfangende Seite wissen, + ,,was mit den Daten zu tun ist'', was eine weitere vorherige + Aushandlung erfordern kann) + \item + Kanaltypspezifische Anfragen + \item + Schließung des Kanals + \end{itemize} + \item + Für die Datenübertragung sind die folgenden Nachrichten definiert: + + \begin{itemize} + \item + ssh\_msg\_channel\_data: mit den beiden Parametern Empfängerkanal, + Daten + \item + ssh\_msg\_channel\_extended\_data: erlaubt die zusätzliche Angabe + eines Datentypcodes und ist nützlich, um Fehler zu signalisieren, + z.B. bei interaktiven Shells + \item + ssh\_msg\_channel\_window\_adjust: erlaubt es, das + Flusskontrollfenster des Empfängerkanals um die angegebene Anzahl + von Bytes zu erweitern + \end{itemize} + \item + Schließen von Kanälen: + + \begin{itemize} + \item + Wenn eine Peer-Entität keine Daten mehr an einen Kanal senden will, + sollte sie dies der anderen Seite mit der Nachricht + ssh\_msg\_channel\_eof signalisieren + \item + Wenn eine der beiden Seiten einen Kanal beenden möchte, sendet sie + die Nachricht ssh\_msg\_channel\_close mit dem Parameter recipient + channel + \item + Beim Empfang der Nachricht ssh\_msg\_channel\_close muss eine + Peer-Entität mit einer ähnlichen Nachricht antworten, es sei denn, + sie hat bereits die Schließung dieses Kanals beantragt. + \item + Sowohl nach dem Empfang als auch nach dem Senden der Nachricht + ssh\_msg\_channel\_close für einen bestimmten Kanal kann die ID + dieses Kanals wiederverwendet werden. + \end{itemize} + \item + Kanaltypspezifische Anfragen erlauben es, bestimmte Eigenschaften + eines Kanals anzufordern, z. B. dass die empfangende Seite weiß, wie + sie die über diesen Kanal gesendeten Daten verarbeiten soll, und + werden mit signalisiert: + + \begin{itemize} + \item + ssh\_msg\_channel\_request: mit den Parametern recipient channel, + request type (string), want reply (bool) und weiteren + anfragespezifischen Parametern + \item + ssh\_msg\_channel\_success: mit dem Parameter recipient channel + \item + ssh\_msg\_channel\_failure: mit dem Parameter recipient channel + \end{itemize} + \item + Beispiel 1 - Anfordern einer interaktiven Sitzung und Starten einer + Shell darin: + + \begin{itemize} + \item + Zunächst wird ein Kanal vom Typ ,,session'' geöffnet + \item + Ein Pseudo-Terminal wird angefordert, indem eine + ssh\_msg\_channel\_request-Nachricht gesendet wird, wobei der + Anforderungstyp auf ,,pty-req'' gesetzt wird + \item + Falls erforderlich, können Umgebungsvariablen gesetzt werden, indem + ssh\_msg\_channel\_request-Nachrichten mit dem Anforderungstyp + ,,env'' gesendet werden. + \item + Dann wird der Start eines Shell-Prozesses über eine + ssh\_msg\_channel\_request-Nachricht mit dem Request-Typ ,,shell'' + gefordert (dies führt normalerweise zum Start der Standard-Shell für + den Benutzer, wie sie in /etc/passwd definiert ist) + \item + Anfordern einer interaktiven Sitzung und Starten einer Shell darin: + \textbar{} SSH Client \textbar{} \textbar{} SSH Server \textbar{} + \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} -\/-\/-\/- \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} \textbar{} ssh\_msg\_channel\_open (,,session'', 20, + 2048, 512) \textbar{} -\/-\/-\textgreater{} \textbar{} \textbar{} + \textbar{} \textless-\/-\/- \textbar{} + ssh\_msg\_channel\_open\_confirmation(20, 31, 1024, 256) \textbar{} + \textbar{} ssh\_msg\_channel\_request (31, ,,pty-req'', false, ...) + \textbar{} -\/-\/-\textgreater{} \textbar{} \textbar{} + ssh\_msg\_channel\_request (31, ,,env'', false, ,,home'', + ,,/home/username'') \textbar{} -\/-\/-\textgreater{} \textbar{} + \textbar{} ssh\_msg\_channel\_request (31, ,,shell'', true, ...) + \textbar{} -\/-\/-\textgreater{} \textbar{} \textbar{} \textbar{} + \textless-\/-\/- \textbar{} ssh\_msg\_channel\_success(20) + \textbar{} + + {[}Nutzdatenaustausch findet ab jetzt statt...{]} + \end{itemize} + \end{itemize} + + + \subsection{SSH-Verbindungsprotokoll + II} + + \begin{itemize} + \item + Beispiel 2 - Anforderung der X11-Weiterleitung: + + \begin{itemize} + \item + Zuerst wird ein Kanal des Typs ,,session'' geöffnet + \item + Die X11-Weiterleitung wird durch Senden einer + ssh\_msg\_channel\_request-Nachricht mit dem Anforderungstyp + ,,x11-req'' angefordert + \item + Wenn später eine Anwendung auf dem Server gestartet wird, die auf + das Terminal des Client-Rechners zugreifen muss (der X11-Server, der + auf dem Client-Rechner läuft), wird ein neuer Kanal über + ssh\_msg\_channel\_open geöffnet, wobei der Kanaltyp auf ,,x11'' und + die IP-Adresse und Portnummer des Absenders als zusätzliche + Parameter gesetzt werden + \end{itemize} + \item + Beispiel 3 - Einrichtung einer TCP/IP-Portweiterleitung: + + \begin{itemize} + \item + Eine Partei muss die Portweiterleitung von ihrem eigenen Ende in die + andere Richtung nicht explizit anfordern. Wenn sie jedoch + Verbindungen zu einem Port auf der anderen Seite an ihre eigene + Seite weiterleiten lassen möchte, muss sie dies explizit über eine + ssh\_msg\_global\_request-Nachricht mit den Parametern + ,,tcpip-forward'', want-reply, zu bindende Adresse (,,0.0.0.0'' für + jede Quelladresse) und zu bindende Portnummer anfordern (diese + Anforderung wird normalerweise vom Client gesendet) + \item + Wenn eine Verbindung zu einem Port kommt, für den eine Weiterleitung + angefordert wurde, wird ein neuer Kanal über ssh\_msg\_channel\_open + mit dem Typ ,,forwarded-tcpip'' und den Adressen des Ports, der + verbunden wurde, sowie des ursprünglichen Quellports als Parameter + geöffnet (diese Nachricht wird normalerweise vom Server gesendet) + \item + Wenn eine Verbindung zu einem (Client-)Port kommt, der lokal als + weitergeleitet eingestellt ist, wird ein neuer Kanal angefordert, + wobei der Typ auf ,,direct-tcpip'' gesetzt wird und die folgenden + Adressinformationen in zusätzlichen Parametern angegeben werden: + + \begin{itemize} + \item + host to connect, port to connect: Adresse, mit der der Empfänger + diesen Kanal verbinden soll + \item + Absender-IP-Adresse, Absender-Port: Quelladresse der Verbindung + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Schlussfolgerung} + + \begin{itemize} + \item + Sowohl SSL, TLS als auch SSH eignen sich für die Sicherung der + Internet-Kommunikation in der (oberen) Transportschicht: + + \begin{itemize} + \item + Alle drei Sicherheitsprotokolle arbeiten mit einem zuverlässigen + Transportdienst, z. B. TCP, und benötigen diesen. + \item + Es gibt eine datagrammorientierte Variante von TLS, genannt DTLS + \item + Obwohl SSH in / oberhalb der Transportschicht arbeitet, ist die + Server-Authentifizierung hostbasiert und nicht anwendungsbasiert. + \item + Sicherheitsprotokolle der Transportschicht bieten echten + End-to-End-Schutz für Benutzerdaten, die zwischen + Anwendungsprozessen ausgetauscht werden. + \item + Außerdem können sie mit der Paketfilterung der heutigen Firewalls + zusammenarbeiten. + \item + Die Protokoll-Header-Felder von Protokollen der unteren Schicht + können jedoch nicht auf diese Weise geschützt werden, so dass sie + keine Gegenmaßnahmen für Bedrohungen der Netzinfrastruktur selbst + bieten. + \end{itemize} + \end{itemize} + + + \section{Sicherheitsaspekte der mobilen + Kommunikation} + + \begin{itemize} + \item + Die mobile Kommunikation ist mit den gleichen Bedrohungen konfrontiert + wie ihr stationäres Pendant: + + \begin{itemize} + \item + Maskerade, Abhören, Verletzung von Berechtigungen, Verlust oder + Veränderung von übertragenen Informationen, Ablehnung von + Kommunikationsakten, Fälschung von Informationen, Sabotage + \item + Es müssen also ähnliche Maßnahmen wie in Festnetzen ergriffen + werden. + \end{itemize} + \item + Es gibt jedoch einige spezifische Probleme, die sich aus der Mobilität + von Benutzern und/oder Geräten ergeben: + + \begin{itemize} + \item + Einige bereits bestehende Bedrohungen werden noch gefährlicher: + + \begin{itemize} + \item + Die drahtlose Kommunikation ist für Abhörmaßnahmen leichter + zugänglich. + \item + Das Fehlen einer physischen Verbindung macht den Zugang zu + Diensten einfacher + \end{itemize} + \item + Einige neue Schwierigkeiten bei der Realisierung von + Sicherheitsdiensten: + + \begin{itemize} + \item + Die Authentifizierung muss neu eingerichtet werden, wenn das + mobile Gerät umzieht. + \item + Die Schlüsselverwaltung wird schwieriger, da die Identitäten der + Peers nicht im Voraus festgelegt werden können. + \end{itemize} + \item + Eine völlig neue Bedrohung: + + \begin{itemize} + \item + Der Standort eines Geräts/Nutzers wird zu einer wichtigeren + Information, die abzuhören und damit zu schützen sich lohnt + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsection{Standortdatenschutz in + Mobilfunknetzen} + + \begin{itemize} + \item + In den heutigen Mobilfunknetzen gibt es keinen angemessenen Schutz des + Standortes: + + \begin{itemize} + \item + GSM / UMTS / LTE: + + \begin{itemize} + \item + Aktive Angreifer können IMSIs auf der Luftschnittstelle sammeln + \item + Die Betreiber des besuchten Netzes können den Standort der Nutzer + teilweise verfolgen. + \item + Die Betreiber des Heimatnetzes können den Standort des Nutzers + vollständig verfolgen. + \item + Zumindest kommunizierende Endsysteme können den Standort eines + mobilen Geräts jedoch nicht in Erfahrung bringen + \end{itemize} + \end{itemize} + \item + Drahtloses LAN: + + \begin{itemize} + \item + Kein Datenschutz für den Standort, da die (weltweit eindeutige) + MAC-Adresse in jedem MAC-Frame immer im Klartext enthalten ist + \end{itemize} + \item + Das grundlegende Problem des Datenschutzes: + + \begin{itemize} + \item + Ein mobiles Gerät sollte erreichbar sein + \item + Keine (einzelne) Entität im Netz sollte in der Lage sein, den + Standort eines mobilen Geräts zu verfolgen + \end{itemize} + \item + Einige grundlegende Ansätze zur Lösung dieses Problems + {[}Müller99a{]}: + + \begin{itemize} + \item + Broadcast von Nachrichten: + + \begin{itemize} + \item + Jede Nachricht wird an jeden möglichen Empfänger gesendet + \item + Wenn Vertraulichkeit erforderlich ist, wird die Nachricht + asymmetrisch verschlüsselt + \item + Dieser Ansatz ist nicht gut skalierbar für große Netzwerke / hohe + Last + \end{itemize} + \item + Temporäre Pseudonyme: + + \begin{itemize} + \item + Mobile Geräte verwenden Pseudonyme, die regelmäßig gewechselt + werden + \item + Um das mobile Gerät zu erreichen, ist jedoch eine + Abbildungsinstanz erforderlich, die die Geschichte der Pseudonyme + des Mobiltelefons verfolgen kann. + \end{itemize} + \item + Gemischte Netzwerke: + + \begin{itemize} + \item + Nachrichten werden über verschiedene Entitäten (Mixes) geleitet + und jede Entität kann nur einen Teil der Nachrichtenroute erfahren + (siehe unten) + \end{itemize} + \end{itemize} + \item + Adressierungsschemata für standortbezogenen Datenschutz mit Broadcast: + + \begin{itemize} + \item + Explizite Adressen: + + \begin{itemize} + \item + Jede Entität, die eine explizite Adresse "sieht", kann die + adressierte Entität bestimmen + \end{itemize} + \item + Implizite Adressen: + + \begin{itemize} + \item + Eine implizite Adresse identifiziert kein bestimmtes Gerät oder + einen bestimmten Ort, sondern benennt lediglich eine Einheit, ohne + dass dem Namen eine weitere Bedeutung beigemessen wird. + \item + Sichtbare implizite Adressen: + + \begin{itemize} + \item + Entitäten, die mehrere Vorkommen einer Adresse sehen, können auf + Gleichheit prüfen + \end{itemize} + \item + Unsichtbare implizite Adressen: + + \begin{itemize} + \item + Nur die adressierte Einheit kann die Gleichheit der Adresse + überprüfen. + \item + Dies erfordert Operationen mit öffentlichen Schlüsseln: + \$ImplAddr\_A =\{r\_B, r\_A\}\_\{+K\_A\}\$ wobei \$r\_A\$ von + der adressierten Entität gewählt wird und \$r\_B\$ ein + Zufallswert ist, der von einer Entität \$B\$ erzeugt wird, die + unsichtbar auf die Entität \$A\$ verweisen will + \end{itemize} + \end{itemize} + \end{itemize} + \item + Vorübergehende Pseudonyme: + + \begin{itemize} + \item + Der Standort eines Gerätes A wird nicht mehr mit seiner Kennung + \$ID\_A\$, sondern mit einem wechselnden Pseudonym \$P\_A(t)\$ + gespeichert. + + \begin{itemize} + \item + Beispiel: VLRs in GSM kennen und speichern möglicherweise nur die + TMSI (die eine Art temporäres Pseudonym ist) + \end{itemize} + \item + Die Zuordnung einer IDA zum aktuellen Pseudonym \$P\_A(t)\$ wird in + einem vertrauenswürdigen Gerät gespeichert + + \begin{itemize} + \item + Beispiel: GSM HLRs könnten als vertrauenswürdige Geräte realisiert + werden + \end{itemize} + \item + Wenn ein eingehender Anruf an den aktuellen Standort von Gerät A + weitergeleitet werden muss: + + \begin{itemize} + \item + Der Netzbetreiber von Gerät A fragt das vertrauenswürdige Gerät + nach dem aktuellen Pseudonym \$P\_A(t)\$ + \item + Das Netz leitet den Anruf dann an den aktuellen Standort von A + weiter, indem es das temporäre Pseudonym in einer + Standortdatenbank nachschlägt. + \item + Es ist wichtig, dass die Einrichtungen, die einen Anruf + weiterleiten, nichts über die ursprüngliche Adresse der + Rufaufbau-Nachricht erfahren können (\$\textbackslash rightarrow\$ + implizite Adressen) + \item + Die Verwendung von Mischungen (siehe unten) kann einen + zusätzlichen Schutz gegen Angriffe von kolludierenden + Netzeinheiten bieten + \end{itemize} + \end{itemize} + \item + Kommunikations-Mixe: + + \begin{itemize} + \item + Das Konzept wurde 1981 von D. Chaum für nicht zurückverfolgbare + E-Mail-Kommunikation erfunden + \item + Ein Mix verbirgt die Kommunikationsbeziehungen zwischen Absendern + und Empfängern: + + \begin{itemize} + \item + Er puffert eingehende Nachrichten, die asymmetrisch verschlüsselt + sind, so dass nur der Mix sie entschlüsseln kann. + \item + Er verändert das "Aussehen" von Nachrichten, indem er sie + entschlüsselt + \item + Er ändert die Reihenfolge der Nachrichten und leitet sie in + Stapeln weiter. + \item + Wenn jedoch der Mix kompromittiert wird, kann ein Angreifer + "alles" erfahren. + \end{itemize} + \item + Die Sicherheit kann durch kaskadierende Mixe erhöht werden. + \item + Beispiel: A sendet eine Nachricht m an B über zwei Mixe M1 und M2 + + \begin{itemize} + \item + \$A\textbackslash rightarrow M1: \{r\_1 ,\{r\_2 ,\{r\_3 , + m\}\emph{\{+K\_B\}\}}\{+K\_\{M2\}\}\}\emph{\{+K}\{M1\}\}\$ + \item + \$M1\textbackslash rightarrow M2:\{r\_2 ,\{r\_3 , + m\}\emph{\{+K\_B\}\}}\{+K\{M2\}\}\$ + \item + \$M2\textbackslash rightarrow B: \{r\_3 , m\}\_\{+K\_B\}\$ + \item + Es ist wichtig, dass die Mischungen "genug" Nachrichten + verarbeiten + \end{itemize} + \item + Dieses Konzept lässt sich auf die mobile Kommunikation übertragen + {[}Müller99a{]} + \end{itemize} + \end{itemize} + + + \section{Sicherheit von drahtlosen lokalen + Netzen} + + + \subsection{IEEE 802.11} + + \begin{itemize} + \item + IEEE 802.11 {[}IEEE12{]} standardisiert die Medienzugriffskontrolle + (MAC) und die physikalischen Eigenschaften eines drahtlosen lokalen + Netzwerks (LAN). + \item + Der Standard umfasst mehrere physikalische Schichteinheiten: + + \begin{itemize} + \item + Derzeit zwischen 1-300 Mbit/s + \item + 2,4-GHz-Band und 5-GHz-Band + \item + Viele verschiedene Modulationsverfahren + \end{itemize} + \item + Die Übertragung im lizenzfreien 2,4-GHz-Band impliziert: + + \begin{itemize} + \item + Medium-Sharing mit unfreiwilligen 802.11-Geräten + \item + Überlappung von logisch getrennten Wireless LANs + \item + Überlappung mit Nicht-802.11-Geräten + \end{itemize} + \item + Die Medienzugriffskontrolle (MAC) unterstützt sowohl den Betrieb unter + Kontrolle eines Access Points als auch zwischen unabhängigen + Stationen. + \item + In diesem Kurs werden wir uns hauptsächlich auf die + (Un-)Sicherheitsaspekte des Standards konzentrieren! + \end{itemize} + + 802.11 - Architektur eines Infrastrukturnetzes + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-802.11-network-architecture.png} + \item + Station (STA): Endgerät mit Zugriffsmechanismen auf das drahtlose + Medium und Funkkontakt zum Access Point + \item + Basic Service Set (BSS): Gruppe von Stationen, die dieselbe + Funkfrequenz verwenden + \item + Zugangspunkt: Station, die in das drahtlose LAN und das + Verteilungssystem integriert ist + \item + Portal: Brücke zu anderen (kabelgebundenen) Netzwerken + \item + Verteilungssystem: Verbindungsnetz zur Bildung eines logischen Netzes + (Extended Service Set, ESS), das auf mehreren BSS basiert + \end{itemize} + + 802.11 - Architektur eines Ad-Hoc-Netzes + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-802.11-ad-hoc-architecture.png} + \item + Station (STA): Endgerät mit Zugriffsmechanismen auf das drahtlose + Medium + \item + Basic Service Set (BSS): Gruppe von Stationen, die dieselbe + Funkfrequenz verwenden + \item + Ad-Hoc-Netze ermöglichen die direkte Kommunikation zwischen + Endsystemen innerhalb einer begrenzten Reichweite + \item + Da es keine Infrastruktur gibt, ist keine Kommunikation zwischen + verschiedenen BSSs möglich + \end{itemize} + + Sicherheitsdienste von IEEE 802.11 + + \begin{itemize} + \item + Die Sicherheitsdienste von IEEE 802.11 wurden ursprünglich wie folgt + realisiert: + + \begin{itemize} + \item + Authentifizierungsdienst für Entitäten + \item + Wired Equivalent Privacy (WEP) Mechanismus + \end{itemize} + \item + WEP soll die folgenden Sicherheitsdienste bieten + + \begin{itemize} + \item + Vertraulichkeit + \item + Authentifizierung der Datenherkunft / Datenintegrität + \item + Zugangskontrolle in Verbindung mit Schichtenmanagement + \end{itemize} + \item + WEP verwendet die folgenden Algorithmen: + + \begin{itemize} + \item + Die RC4-Stromchiffre (siehe Kapitel 3) + \item + Die CRC-Prüfsumme (Cyclic Redundancy Code) zur Fehlererkennung + \end{itemize} + \end{itemize} + + + \subsection{Der zyklische + Redundanzcode} + + \begin{itemize} + \item + Der zyklische Redundanzcode (CRC) ist ein Fehlererkennungscode + \item + Mathematische Grundlage: + + \begin{itemize} + \item + Bitstrings werden als Darstellungen von Polynomen mit den + Koeffizienten 0 und 1 behandelt \$\textbackslash Rightarrow\$ Ein + Bitstring, der eine Nachricht M darstellt, wird als M(x) + interpretiert + \item + Polynomarithmetik wird modulo 2 durchgeführt + \$\textbackslash Rightarrow\$ Addition und Subtraktion sind + identisch mit XOR + \end{itemize} + \item + CRC-Berechnung für eine Nachricht \$M(x)\$: + + \begin{itemize} + \item + A und B einigen sich auf ein Polynom \$G(x)\$; üblicherweise ist + \$G(x)\$ standardisiert + \item + Sei \$n\$ der Grad von \$G(x)\$, d.h. die Länge von \$G(x)\$ sei + \$n+1\$ + \item + Wenn dann \$\textbackslash frac\{M(x)\textbackslash times + 2\^{}n\}\{G(x)\}=Q(x)+\textbackslash frac\{R(x)\}\{G(x)\}\$ gilt + \$\textbackslash frac\{M(x)\textbackslash times 2\^{}n + +R(x)\}\{G(x)\}\$ wobei \$R(x)\$ der Rest von \$M(x)\$ geteilt durch + \$G(x)\$ ist + \item + Normalerweise wird \$R(x)\$ vor der Übertragung an \$M(x)\$ + angehängt, und \$Q(x)\$ ist nicht von Interesse, da es nur geprüft + wird, wenn \$\textbackslash frac\{M(x)\textbackslash times + 2\^{}n+R(x)\}\{G(x)\}\$ mit Rest \$0\$ dividiert + \end{itemize} + \item + Betrachten wir nun zwei Nachrichten \$M\_1\$ und \$M\_2\$ mit CRCs + \$R\_1\$ und \$R\_2\$: + + \begin{itemize} + \item + Da \$\textbackslash frac\{M\_1(x)\textbackslash times + 2\^{}n+R\_1(x)\}\{G(x)\}\$ und + \$\textbackslash frac\{M\_2(x)\textbackslash times + 2\^{}n+R\_2(x)\}\{G(x)\}\$ mit dem Rest \$0\$ teilen, teilt sich + auch \$\textbackslash frac\{M\_1(x)\textbackslash times 2\^{}n + +R\_1(x)+M\_2(x)\textbackslash times 2\^{}n +R\_2(x)\}\{G(x)\} + =\textbackslash frac\{(M\_1(x)+M\_2(x))\textbackslash times 2\^{}n + +(R\_1(x)+R\_2(x))\}\{G(x)\}\$ teilt mit Rest \$0\$ + \item + \$\textbackslash Rightarrow\$ CRC ist linear, d.h. \$CRC(M\_1 + + M\_2) = CRC(M\_1) + CRC(M\_2)\$ + \end{itemize} + \item + Diese Eigenschaft macht CRC schwach für kryptographische Zwecke! + \end{itemize} + + + \subsection{IEEE 802.11 + Entity-Authentifizierung} + + \begin{itemize} + \item + Ursprünglich gibt es die IEEE 802.11-Authentifizierung in zwei + ,,Geschmacksrichtungen'': + + \begin{itemize} + \item + Offene System-Authentifizierung: ,,Im Wesentlichen handelt es sich + um einen Null-Authentifizierungsalgorithmus.'' (IEEE 802.11) + \item + Shared-Key-Authentifizierung: + + \begin{itemize} + \item + Die ,,Shared-Key-Authentifizierung unterstützt die + Authentifizierung von STAs entweder als Mitglied derer, die einen + gemeinsamen geheimen Schlüssel kennen, oder als Mitglied derer, + die ihn nicht kennen.'' (IEEE 802.11, Abschnitt 8.1.2) + \item + Es wird davon ausgegangen, dass der erforderliche geheime, + gemeinsam genutzte Schlüssel den teilnehmenden STAs über einen + sicheren, von IEEE 802.11 unabhängigen Kanal übermittelt wurde. + \end{itemize} + \end{itemize} + \end{itemize} + + IEEE 802.11's Shared Key Authentication Dialog: + + \begin{itemize} + \item + Die Authentifizierung sollte zwischen Stationen und Zugangspunkten + erfolgen und könnte auch zwischen beliebigen Stationen durchgeführt + werden. + \item + Bei der Authentifizierung fungiert eine Station als Requestor (A) und + die andere als Responder (B) + \item + Der Authentifizierungsdialog: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$A \textbackslash rightarrow B: (Authentifizierung, 1, ID\_A)\$ + \item + \$B \textbackslash rightarrow A: (Authentifizierung, 2, r\_B)\$ + \item + \$A \textbackslash rightarrow B: \{Authentifizierung, 3, + r\_B\}\emph{\{K}\{A,B\}\}\$ + \item + \$B \textbackslash rightarrow A: (Authentifizierung, 4, + erfolgreich)\$ + \end{enumerate} + \item + Die gegenseitige Authentifizierung erfordert zwei unabhängige + Protokolldurchläufe, einen in jeder Richtung + \item + Aber: ein Angreifer kann sich nach dem Abhören eines + Protokolldurchlaufs ausgeben, da er einen gültigen Schlüsselstrom aus + den Nachrichten 2 und 3 erhalten kann! + \end{itemize} + + + \subsection{IEEE 802.11's Wired Equivalence + Privacy} + + \begin{itemize} + \item + IEEE 802.11's WEP verwendet RC4 als Pseudo-Zufallsbit-Generator + (PRNG): + + \begin{itemize} + \item + Für jede zu schützende Nachricht M wird ein + 24-Bit-Initialisierungsvektor (IV) mit dem gemeinsamen Schlüssel + \$K\_\{BSS\}\$ verkettet, um den Seed des PRNG zu bilden. + \item + Der Integritätsprüfwert (ICV) von M wird mit CRC berechnet und an + die Nachricht angehängt (,,\textbar\textbar'') + \item + Die resultierende Nachricht \$(M \textbar\textbar{} ICV)\$ wird mit + dem von \$RC4(IV \textbar\textbar{} K\_\{BSS\})\$ erzeugten + Schlüsselstrom XOR-verknüpft (,,\$\textbackslash oplus\$'') + \item + % \includegraphics{Assets/NetworkSecurity-802.11-wep-encryption.png} + \end{itemize} + \item + Da die IV mit jeder Nachricht im Klartext gesendet wird, kann jeder + Empfänger, der \$K\_\{BSS\}\$ kennt, den entsprechenden Schlüsselstrom + zur Entschlüsselung einer Nachricht erzeugen. + + \begin{itemize} + \item + Dadurch wird die wichtige Eigenschaft der Selbstsynchronisation von + WEP gewährleistet + \item + Der Entschlüsselungsprozess ist im Grunde die Umkehrung der + Verschlüsselung: + \item + % \includegraphics{Assets/NetworkSecurity-802.11-wep-decryption.png} + \end{itemize} + \end{itemize} + + + \subsection{Die Sicherheitsansprüche von IEEE + 802.11} + + \begin{itemize} + \item + WEP wurde entwickelt, um die folgenden Sicherheitseigenschaften zu + gewährleisten: + + \begin{itemize} + \item + Vertraulichkeit: + + \begin{itemize} + \item + Nur Stationen, die über \$K\_\{BSS\}\$ verfügen, können mit WEP + geschützte Nachrichten lesen + \end{itemize} + \item + Authentifizierung der Datenherkunft / Datenintegrität: + + \begin{itemize} + \item + Böswillige Veränderungen von WEP-geschützten Nachrichten können + erkannt werden + \end{itemize} + \item + Zugriffskontrolle in Verbindung mit Schichtenmanagement: + + \begin{itemize} + \item + Wenn in der Schichtenverwaltung so eingestellt, werden nur + WEP-geschützte Nachrichten von Empfängern akzeptiert + \item + Somit können Stationen, die \$K\_\{BSS\}\$ nicht kennen, nicht an + solche Empfänger senden + \end{itemize} + \end{itemize} + \item + Leider trifft keine der obigen Behauptungen zu... + \end{itemize} + + + \subsubsection{Schwachstelle \#1: Die + Schlüssel} + + \begin{itemize} + \item + IEEE 802.11 sieht keine Schlüsselverwaltung vor: + + \begin{itemize} + \item + Manuelle Verwaltung ist fehleranfällig und unsicher + \item + Die gemeinsame Verwendung eines Schlüssels für alle Stationen eines + BSS führt zu zusätzlichen Sicherheitsproblemen + \item + Als Folge der manuellen Schlüsselverwaltung werden die Schlüssel + selten geändert. + \item + Eine weitere Folge ist, dass die ,,Sicherheit'' oft sogar + ausgeschaltet ist! + \end{itemize} + \item + Schlüssellänge: + + \begin{itemize} + \item + Die im ursprünglichen Standard festgelegte Schlüssellänge von 40 Bit + bietet nur geringe Sicherheit + \item + Der Grund dafür war die Exportierbarkeit + \item + Wireless LAN-Karten erlauben oft auch Schlüssel der Länge 104 Bit, + aber das macht die Situation nicht besser, wie wir später sehen + werden + \end{itemize} + \end{itemize} + + + \subsubsection{Schwachstelle \#2: WEP-Vertraulichkeit ist + unsicher} + + \begin{itemize} + \item + Selbst mit gut verteilten und langen Schlüsseln ist WEP unsicher + \item + Der Grund dafür ist die Wiederverwendung des Schlüsselstroms: + + \begin{itemize} + \item + Erinnern Sie sich, dass die Verschlüsselung mit jeder Nachricht neu + synchronisiert wird, indem eine IV der Länge 24 Bit an + \$K\_\{BSS\}\$ angehängt und der PRNG neu initialisiert wird + \item + Betrachten wir zwei Klartexte M 1 und M 2, die mit demselben IV 1 + verschlüsselt wurden: + + \begin{itemize} + \item + \$C\_1 = P\_1 \textbackslash oplus RC4 (IV\_1 , K\_\{BSS\})\$ + \item + \$C\_2 = P\_2 \textbackslash oplus RC4 (IV\_1 , K\_\{BSS\})\$ + dann: + \item + \$C\_1 \textbackslash oplus C\_2 = (P\_1 \textbackslash oplus RC4 + (IV\_1, K\_\{BSS\})) \textbackslash oplus + (P\_2\textbackslash oplus RC4 (IV\_1 , K\_\{BSS\})) = P\_1 + \textbackslash oplus P\_2\$ + \end{itemize} + \item + Wenn also ein Angreifer z.B. \$P\_1\$ und \$C\_1\$ kennt, kann er + \$P\_2\$ aus \$C\_2\$ wiederherstellen, ohne den Schlüssel + \$K\_\{BSS\}\$ zu kennen. + + \begin{itemize} + \item + Kryptographen nennen dies einen Angriff mit bekanntem Klartext + \end{itemize} + \end{itemize} + \item + Wie oft kommt die Wiederverwendung des Schlüsselstroms vor? + + \begin{itemize} + \item + In der Praxis recht häufig, da viele Implementierungen die IV + schlecht wählen + \item + Selbst bei optimaler Wahl, da die IV-Länge 24 Bit beträgt, wird eine + stark ausgelastete Basisstation eines 11-Mbit/s-WLAN den verfügbaren + Speicherplatz in einem halben Tag erschöpfen + \end{itemize} + \end{itemize} + + + \subsubsection{Schwachstelle \#3: WEP-Datenintegrität ist + unsicher} + + \begin{itemize} + \item + Erinnern Sie sich, dass CRC eine lineare Funktion ist und RC4 + ebenfalls linear ist + \item + Nehmen wir an, A sendet eine verschlüsselte Nachricht an B, die von + einem Angreifer E abgefangen wird: + + \begin{itemize} + \item + \$A \textbackslash rightarrow B: (IV, C) mit C = RC4(IV, K\_\{BSS\}) + \textbackslash oplus (M, CRC(M))\$ + \end{itemize} + \item + Der Angreifer E kann einen neuen Chiffretext \$C'\$ konstruieren, der + zu einer Nachricht \$M'\$ mit einer gültigen Prüfsumme \$CRC(M')\$ + entschlüsselt wird: + + \begin{itemize} + \item + E wählt eine beliebige Nachricht \$\textbackslash delta\$ mit der + gleichen Länge + \item + \$C' = C \textbackslash oplus (\textbackslash delta, + CRC(\textbackslash delta)) = RC4(IV, K\_\{BSS\}) + \textbackslash oplus (M, CRC(M)) \textbackslash oplus + (\textbackslash delta, CRC(\textbackslash delta))\$ + \item + \$= RC4(IV, K\_\{BSS\}) \textbackslash oplus (M \textbackslash oplus + \textbackslash delta, CRC(M) \textbackslash oplus + CRC(\textbackslash delta))\$ + \item + \$= RC4(IV, K\_\{BSS\}) \textbackslash oplus (M \textbackslash oplus + \textbackslash delta, CRC(M \textbackslash oplus + \textbackslash delta))\$ + \item + \$= RC4(IV, K\_\{BSS\}) \textbackslash oplus (M', CRC(M'))\$ + \item + Man beachte, dass \$E\$ \$M'\$ nicht kennt, da es \$M\$ nicht kennt. + \item + Dennoch führt ein ,,1'' an Position \$n\$ in + \$\textbackslash delta\$ zu einem umgedrehten Bit an Position n in + \$M'\$, so dass E kontrollierte Änderungen an \$M\$ vornehmen kann + \item + \$\textbackslash Rightarrow\$ Datenherkunftsauthentifizierung / + Datenintegrität von WEP ist unsicher! + \end{itemize} + \end{itemize} + + + \subsubsection{Schwachstelle \#4: WEP-Zugangskontrolle ist + unsicher} + + \begin{itemize} + \item + Erinnern Sie sich, dass die Integritätsfunktion ohne einen Schlüssel + berechnet wird + \item + Betrachten wir einen Angreifer, der ein Klartext-Chiffretext-Paar in + Erfahrung bringt: + + \begin{itemize} + \item + Da der Angreifer \$M\$ und \$C=RC4(IV, + K\_\{BSS\})\textbackslash oplus (M, CRC(M))\$ kennt, kann er den zur + Erzeugung von \$C\$ verwendeten Schlüsselstrom berechnen + \item + Wenn \$E\$ später eine Nachricht \$M'\$ senden will, kann er \$C' = + RC4(IV, K\_\{BSS\})\textbackslash oplus (M', CRC(M'))\$ berechnen + und die Nachricht \$(IV, C')\$ senden. + \item + Da die Wiederverwendung alter IV-Werte möglich ist, ohne beim + Empfänger einen Alarm auszulösen, handelt es sich um eine gültige + Nachricht + \item + Eine ,,Anwendung'' für diesen Angriff ist die unbefugte Nutzung von + Netzwerkressourcen: + + \begin{itemize} + \item + Der Angreifer sendet IP-Pakete, die für das Internet bestimmt + sind, an den Zugangspunkt, der sie entsprechend weiterleitet und + dem Angreifer freien Zugang zum Internet gewährt + \end{itemize} + \end{itemize} + \item + \$\textbackslash Rightarrow\$ WEP Access Control kann mit bekanntem + Klartext umgangen werden + \end{itemize} + + + \subsubsection{Schwachstelle Nr. 5: Schwachstelle in der + RC4-Schlüsselberechnung} + + \begin{itemize} + \item + Anfang August 2001 wurde ein weiterer Angriff auf WEP entdeckt: + + \begin{itemize} + \item + Der gemeinsame Schlüssel kann in weniger als 15 Minuten + wiederhergestellt werden, vorausgesetzt, dass etwa 4 bis 6 Millionen + Pakete wiederhergestellt wurden. + \item + Bei dem Angriff handelt es sich um einen Angriff mit verwandten + Schlüsseln, bei dem die Verwendung von RC4 durch WEP ausgenutzt + wird: + + \begin{itemize} + \item + RC4 ist anfällig für die Ableitung von Bits eines Schlüssels, + wenn: + + \begin{itemize} + \item + viele Nachrichten mit einem Schlüsselstrom verschlüsselt werden, + der aus einem variablen Initialisierungsvektor und einem festen + Schlüssel erzeugt wird, und + \item + die Initialisierungsvektoren und der Klartext der ersten beiden + Oktette für die verschlüsselten Nachrichten bekannt sind + \end{itemize} + \item + Die IV für den Schlüsselstrom wird mit jedem Paket im Klartext + übertragen. + \item + Die ersten beiden Oktette eines verschlüsselten Datenpakets können + erraten werden + \end{itemize} + \item + Der Angriff ist in {[}SMF01a{]} und {[}SIR01a{]} beschrieben und + wurde später so verfeinert, dass er noch schneller funktioniert + {[}TWP07{]}. + \item + R. Rivest kommentiert dies {[}Riv01a{]}: ,,Diejenigen, die die + RC4-basierten WEP- oder WEP2-Protokolle verwenden, um die + Vertraulichkeit ihrer 802.11-Kommunikation zu gewährleisten, sollten + diese Protokolle als gebrochen betrachten {[}...{]}'' + \end{itemize} + \end{itemize} + + + \subsection{Schlussfolgerungen zu den Unzulänglichkeiten von IEEE + 802.11} + + \begin{itemize} + \item + Das ursprüngliche IEEE 802.11 bietet keine ausreichende Sicherheit: + + \begin{itemize} + \item + Fehlende Schlüsselverwaltung macht die Nutzung der + Sicherheitsmechanismen mühsam und führt dazu, dass die Schlüssel + selten gewechselt werden oder sogar die Sicherheit ausgeschaltet ist + \item + Sowohl die Entity-Authentifizierung als auch die Verschlüsselung + beruhen auf einem Schlüssel, der von allen Stationen eines + Basisdienstes gemeinsam genutzt wird + \item + Unsicheres Protokoll zur Entitätsauthentifizierung + \item + Wiederverwendung des Schlüsselstroms ermöglicht Angriffe mit + bekanntem Klartext + \item + Lineare Integritätsfunktion ermöglicht die Fälschung von ICVs + \item + Unverschlüsselte Integritätsfunktion ermöglicht die Umgehung der + Zugangskontrolle durch Erstellung gültiger Nachrichten aus einem + bekannten Klartext-Chiffretext-Paar + \item + Schwachstelle in der RC4-Schlüsselplanung ermöglicht die + Kryptoanalyse von Schlüsseln + \end{itemize} + \item + Selbst mit IEEE 802.1X und individuellen Schlüsseln bleibt das + Protokoll schwach + \item + Einige vorgeschlagene Gegenmaßnahmen: + + \begin{itemize} + \item + Platzieren Sie Ihr IEEE 802.11 Netzwerk außerhalb Ihrer Internet + Firewall + \item + Vertrauen Sie keinem Host, der über IEEE 802.11 verbunden ist. + \item + Verwenden Sie zusätzlich andere Sicherheitsprotokolle, z. B. PPTP, + L2TP, IPSec, SSH, ... + \end{itemize} + \end{itemize} + + + \subsection{Interlude: Sicherheit in öffentlichen + WLAN-Hotspots} + + Welche Sicherheit können Sie in einem öffentlichen WLAN-Hotspot + erwarten? + + \begin{itemize} + \item + Bei den meisten Hotspots: Leider fast keine! + \item + Wenn Sie außer der Eingabe eines Benutzernamens und eines Passworts + auf einer Webseite keine weiteren Sicherheitsparameter konfigurieren + müssen, können Sie Folgendes erwarten: + + \begin{itemize} + \item + Der Hotspot-Betreiber prüft Ihre Authentizität bei der Anmeldung + (oft mit SSL geschützt, um das Abhören Ihres Passworts zu + verhindern) + \item + Nur authentifizierte Clients erhalten den Dienst, da die + Paketfilterung den Zugriff auf die Anmeldeseite nur bei + erfolgreicher Authentifizierung zulässt. + \item + Nach Überprüfung der Anmeldeauthentifizierung: keine weiteren + Sicherheitsmaßnahmen + \item + Kein Schutz für Ihre Benutzerdaten: + + \begin{itemize} + \item + Alles kann abgefangen und manipuliert werden + \item + Sie können zwar eigene Maßnahmen ergreifen, z.B. VPN oder SSL, + aber die Konfiguration ist oft mühsam oder wird vom + Kommunikationspartner gar nicht unterstützt und die Leistung wird + durch zusätzlichen (pro-Paket-) Overhead beeinträchtigt + \end{itemize} + \item + Plus: Ihre Sitzung kann durch die Verwendung Ihrer MAC- und + IP-Adressen gestohlen werden! + \end{itemize} + \item + Konsequenz: bessere WLAN-Sicherheit ist dringend erforderlich + \end{itemize} + + + \subsection{Fixing WLAN Security: IEEE 802.11i, WPA und + WPA} + + \begin{itemize} + \item + Umfang: Definition der Interaktion zwischen 802.1X und 802.11 + Standards + \item + TGi definiert zwei Klassen von Sicherheitsalgorithmen für 802.11: + + \begin{itemize} + \item + Pre-RSN Sicherheitsnetzwerk (\textbackslash rightarrow WEP) + \item + Robustes Sicherheitsnetzwerk (RSN) + \end{itemize} + \item + Die RSN-Sicherheit besteht aus zwei grundlegenden Teilsystemen: + + \begin{itemize} + \item + Mechanismen zum Schutz der Daten: + + \begin{itemize} + \item + TKIP - schnelles Re-Keying, um WEP für ein Minimum an Datenschutz + zu verbessern (Marketingname WPA) + \item + AES-Verschlüsselung - robuster Datenschutz für lange Zeit + (Marketingname WPA2) + \end{itemize} + \end{itemize} + \item + Verwaltung von Sicherheitsvereinbarungen: + + \begin{itemize} + \item + Unternehmensmodus - basierend auf 802.1X + \item + Persönlicher Modus - basierend auf Pre-Shared Keys + \end{itemize} + \end{itemize} + + (das meiste Material über 802.11i ist aus {[}WM02a{]} entnommen) + + + \subsection{WPA-Schlüsselverwaltung} + + \begin{itemize} + \item + Im Gegensatz zum ursprünglichen 802.11: paarweise Schlüssel zwischen + STA und BS, zusätzliche Gruppenschlüssel für Multi- und + Broadcast-Pakete sowie Station-to-Station-Link (STSL)-Schlüssel + \item + Das erste Geheimnis: der 256 Bit Pairwise Master Key (PMK) + + \begin{itemize} + \item + Unternehmensmodus: Verwendet 802.1X-Authentifizierung und + installiert einen neuen Schlüssel, der BS und Client bekannt ist, z. + B. durch EAP-TTLS + \item + Persönlicher Modus: Verwendet einen Pre-Shared Key (PSK), der dem BS + und vielen STAs bekannt ist. + + \begin{itemize} + \item + Explizit durch 64 zufällige Hex-Zeichen oder implizit durch ein + Passwort gegeben + \item + Wenn Passwort: PMK = PBKDF2(Passwort, SSID, 4096, 256) + \item + Wobei PBKDF2 die passwortbasierte Schlüsselableitungsfunktion 2 + aus {[}RFC2898{]} mit einer Salz-SSID und einer Ausgangslänge von + 256 Bit ist + \item + impliziert 2 * 4096 Berechnungen von HMAC-SHA1, um Brute-Force zu + verlangsamen + \end{itemize} + \end{itemize} + \item + PMK ist ein Vertrauensanker für die Authentifizierung per EAPOL (EAP + over LAN) Handshake, wird aber nie direkt verwendet... + \item + Für aktuelle kryptographische Protokolle wird ein kurzzeitiger 512 Bit + Pairwise Transient Key (PTK) wie folgt generiert + + \begin{itemize} + \item + \$PTK = PRF(PMK, ,,Paarweise Schlüsselerweiterung'', + min(Addr\_\{BS\}, Addr\_\{STA\}) \textbar\textbar{} + max(Addr\_\{BS\}, Addr\_\{STA\}) \textbar\textbar{} min(r\_\{BS\}, + r\_\{STA\}) \textbar\textbar{} max(r\_\{BS\}, r\_\{STA\}))\$ + \item + Dabei ist \$PRF(K, A, B)\$ die verkettete Ausgabe von \$HMAC-SHA1(K, + A \textbar\textbar{} '0' \textbar\textbar{} B \textbar\textbar{} + i)\$ über einen laufenden Index i + \end{itemize} + \item + Der PTK wird aufgeteilt in: + + \begin{itemize} + \item + EAPOL-Schlüssel-Bestätigungsschlüssel (KCK, erste 128 Bits), + + \begin{itemize} + \item + Wird zum Schutz der Integrität von EAPOL-Nachrichten verwendet + \item + Durch HMAC-MD5 (veraltet), HMAC-SHA1-128, AES-128-CMAC + \end{itemize} + \item + EAPOL Key Encryption Key (KEK, zweite 128 Bits), + + \begin{itemize} + \item + Wird zur Verschlüsselung neuer Schlüssel in EAPOL-Nachrichten + verwendet + \item + Mit RC4 (veraltet), AES im Key Wrap Mode {[}RFC3394{]} + \end{itemize} + \item + Ein Temporal Key (TK) zum Schutz des Datenverkehrs (ab Bit 256)! + \end{itemize} + \item + Initialer Dialog mit BS: + + \begin{itemize} + \item + EAPOL (EAP over LAN) 4-Wege-Handshake wird verwendet, um + + \begin{itemize} + \item + Überprüfung der gegenseitigen Kenntnis des PMK + \item + Initiiert durch BS, um Schlüssel zu installieren (gruppenweise und + paarweise) + \end{itemize} + \item + Vereinfachter Handshake funktioniert wie folgt: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$BS\textbackslash rightarrow STA: (1, r\_\{BS\} , PMKID, + install\textbackslash{} new\textbackslash{} PTK)\$ + \item + \$STA BS: (2, r\_\{STA\}, MAC\_\{KCK\})\$ + \item + \$BS STA: (3, r\_\{BS\}, MAC\_\{KCK\}, \{TK\}\_\{KEK\})\$ + \item + \$STA BS: (4, r\_\{STA\}, MAC\_\{KCK\})\$ + \end{enumerate} + \item + Wobei PMKID den PMK identifiziert: obere 128 Bit von + \$HMAC-SHA-256(PMK, "PMK Name" \textbar\textbar{} Addr\_\{BS\} + \textbar\textbar{} Addr\_\{STA\} )\$ + \end{itemize} + \end{itemize} + + + \subsection{Eine Zwischenlösung: Temporal Key Integrity + Protokoll} + + \begin{itemize} + \item + Ziele des Entwurfs: + + \begin{itemize} + \item + Schnelle Lösung für das bestehende WEP-Problem, betreibt WEP als + Unterkomponente + \item + Kann in Software implementiert werden, nutzt vorhandene WEP-Hardware + wieder + \item + Anforderungen an vorhandene AP-Hardware: + + \begin{itemize} + \item + 33 oder 25 MHz ARM7 oder i486, die bereits vor TKIP mit 90\% + CPU-Auslastung laufen + \item + Nur als Software/Firmware-Upgrade gedacht + \item + Keine unangemessene Beeinträchtigung der Leistung + \end{itemize} + \end{itemize} + \item + Wichtigste Konzepte: + + \begin{itemize} + \item + Nachrichtenintegritätscode (MIC) + \item + Gegenmaßnahmen im Falle von MIC-Fehlern + \item + Sequenzzähler + \item + Dynamische Schlüsselverwaltung (Re-Keying) + \item + Schlüsselmischung + \end{itemize} + \item + TKIP erfüllt die Kriterien für einen guten Standard: alle sind damit + unzufrieden... + \item + % \includegraphics{Assets/NetworkSecurity-tkip-mpdu-data-format.png} + \end{itemize} + + Message Integrity Code Funktion Michael + + \begin{itemize} + \item + Schützt vor Fälschungen: + + \begin{itemize} + \item + Muss billig sein: CPU-Budget 5 Anweisungen / Byte + \item + Leider schwach: ein \$2\^{}\{29\}\$ Nachrichtenangriff existiert + \item + Wird über MSDUs berechnet, während WEP über MPDUs läuft + \item + Verwendet zwei 64-Bit-Schlüssel, einen in jeder Verbindungsrichtung + \item + Erfordert Gegenmaßnahmen: + + \begin{itemize} + \item + Rekey on active attack (nur wenige Fehlalarme, da CRC zuerst + geprüft wird) + \item + Ratenbegrenzung auf eine Neuverschlüsselung pro Minute + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-tkip-rekey.png} + \end{itemize} + \end{itemize} + + Wiederholungsschutz und RC4-Schlüsselplanung + + \begin{itemize} + \item + Replay-Schutz: + + \begin{itemize} + \item + Zurücksetzen der Paket-Sequenz \# auf 0 bei Wiederholung + \item + Erhöhen der Sequenz \# um 1 bei jedem Paket + \item + Verwerfen aller Pakete, die außerhalb der Sequenz empfangen werden + \end{itemize} + \item + Umgehen Sie die Schwächen der WEP-Verschlüsselung: + + \begin{itemize} + \item + Erstellen Sie einen besseren paketweisen Verschlüsselungsschlüssel, + indem Sie Angriffe mit schwachen Schlüsseln verhindern und WEP IV + und paketweisen Schlüssel dekorrelieren + \item + muss auf vorhandener Hardware effizient sein + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-tkip-replay-protection.png} + \end{itemize} + + TKIP-Verarbeitung beim Sender + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-tkip-processing.png} + \end{itemize} + + TKIP-Verarbeitung auf der Empfängerseite + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-tkip-receiver.png} + \end{itemize} + + + \subsection{Die langfristige Lösung: AES-basierter + WLAN-Schutz} + + \begin{itemize} + \item + Zählermodus mit CBC-MAC (CCMP): + + \begin{itemize} + \item + Obligatorisch zu implementieren: die langfristige Lösung + \item + Ein völlig neues Protokoll mit wenigen Zugeständnissen an WEP + \item + Bietet: Datenvertraulichkeit, Authentifizierung der Datenherkunft, + Schutz vor Wiederholungen + \item + Basiert auf AES in Counter Mode Encryption mit CBC-MAC (CCM) + + \begin{itemize} + \item + Verwendung von CBC-MAC zur Berechnung einer MIC für den + Klartext-Header, die Länge des Klartext-Headers und die Nutzdaten + \item + Verwenden Sie den CTR-Modus, um die Payload mit den Zählerwerten + 1, 2, 3, ... zu verschlüsseln. + \item + Verwenden Sie den CTR-Modus, um die MIC mit dem Zählerwert 0 zu + verschlüsseln. + \end{itemize} + \item + AES-Overhead erfordert neue AP-Hardware + \item + Der AES-Overhead erfordert möglicherweise neue STA-Hardware für + Handheld-Geräte, aber theoretisch nicht für PCs (dies erhöht jedoch + die CPU-Last und den Energieverbrauch), praktisch aufgrund fehlender + Treiber für beide + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-aes-ccmp-frame-format.png} + \end{itemize} + + + \subsection{Vergleich WEP, TKIP und + CCMP} + + %\begin{longtable}[]{@{}llll@{}} + % \toprule + % & WEP & TKIP & CCMP\tabularnewline + % \midrule + % \endhead + % Cipher & RC4 & RC4 & AES\tabularnewline + % Key Size & 40 or 104 bits & 104 bits & 128 bits encrypt, 64 bit + % auth.\tabularnewline + % Key Life & 24-bit IV, wrap & 48-bit IV & 48-bit IV\tabularnewline + % Packet Key & Concat. & Mixing Fnc. & Not Needed\tabularnewline + % Integrity & & & \tabularnewline + % Data & CRC-32 & Michael & CCM\tabularnewline + % Header & None & Michael & CCM\tabularnewline + % Replay & None & Use IV & Use IV\tabularnewline + % Key Mgmt. & None & EAP-based & EAP-based\tabularnewline + % \bottomrule + %\end{longtable} + + TKIP ist derzeit veraltet, AES wird empfohlen. + + + \section{Sicherheit von GSM- und + UMTS-Netzen} + + + \subsection{GSM-Übersicht} + + \begin{itemize} + \item + Die GSM-Normen: + + \begin{itemize} + \item + Akronym: + + \begin{itemize} + \item + früher: Groupe Spéciale Mobile (gegründet 1982) + \item + jetzt: Globales System für mobile Kommunikation + \end{itemize} + \item + Gesamteuropäische Norm (ETSI) + \item + Gleichzeitige Einführung wesentlicher Dienste in drei Phasen (1991, + 1994, 1996) durch die europäischen Telekommunikationsverwaltungen + (Deutschland: D1 und D2) \$\textbackslash rightarrow\$ nahtloses + Roaming innerhalb Europas möglich + \item + Heute nutzen viele Anbieter in der ganzen Welt GSM (mehr als 130 + Länder in Asien, Afrika, Europa, Australien, Amerika) + \end{itemize} + \item + Merkmale: + + \begin{itemize} + \item + Echte mobile, drahtlose Kommunikation mit Unterstützung für Sprache + und Daten + \item + Weltweite Konnektivität und internationale Mobilität mit eindeutigen + Adressen + \item + Sicherheitsfunktionen: + + \begin{itemize} + \item + Vertraulichkeit auf der Luftschnittstelle + \item + Zugangskontrolle und Benutzerauthentifizierung + \end{itemize} + \end{itemize} + \item + GSM bietet die folgenden Sicherheitsfunktionen {[}ETSI93a, ETSI94a{]}: + + \begin{itemize} + \item + Vertraulichkeit der Identität des Teilnehmers: + + \begin{itemize} + \item + Schutz vor einem Eindringling, der versucht zu identifizieren, + welcher Teilnehmer eine bestimmte Ressource auf dem Funkpfad + benutzt (z.B. Verkehrskanal oder Signalisierungsressourcen), indem + er den Signalisierungsaustausch auf dem Funkpfad abhört + \item + Vertraulichkeit für Signalisierungs- und Benutzerdaten + \item + Schutz gegen die Rückverfolgung des Standorts eines Teilnehmers + \end{itemize} + \item + Authentifizierung der Identität des Teilnehmers: Schutz des Netzes + vor unbefugter Nutzung + \item + Vertraulichkeit des Signalisierungsinformations-Elements: + Geheimhaltung von Signalisierungsdaten auf der Funkstrecke + \item + Vertraulichkeit der Benutzerdaten: Geheimhaltung von Nutzdaten auf + der Funkstrecke + \item + Es werden jedoch nur Lauschangriffe auf die Funkverbindung zwischen + dem Mobiltelefon und den Basisstationen berücksichtigt! + \end{itemize} + \end{itemize} + + Einige GSM-Abkürzungen \textbar{} \textbar{} \textbar{} \textbar{} + -\/-\/-\/-\/-\/- \textbar{} + -\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/- + \textbar{} \textbar{} AuC \textbar{} Authentication center \textbar{} + \textbar{} BSC \textbar{} Basisstations-Controller \textbar{} \textbar{} + BTS \textbar{} Basis-Transceiver-Station \textbar{} \textbar{} IMSI + \textbar{} Internationale mobile Teilnehmerkennung \textbar{} \textbar{} + HLR \textbar{} Heimatstandortregister \textbar{} \textbar{} LAI + \textbar{} Standortbereichskennung \textbar{} \textbar{} MS \textbar{} + Mobile Station (z. B. ein Mobiltelefon) \textbar{} \textbar{} MSC + \textbar{} Mobile Vermittlungsstelle \textbar{} \textbar{} MSISDN + \textbar{} Mobile subscriber international ISDN number \textbar{} + \textbar{} TMSI \textbar{} Temporäre mobile Teilnehmerkennung \textbar{} + \textbar{} VLR \textbar{} Register für Besucherstandorte \textbar{} + + % \includegraphics{Assets/NetworkSecurity-gsm-authentication.png} + + % \includegraphics{Assets/NetworkSecurity-gsm-authentication-2.png} + + \begin{itemize} + \item + \$K\_i\$: Authentifizierungsschlüssel des einzelnen Teilnehmers + \item + \$SRES\$: Signierte Antwort + \end{itemize} + + Der grundlegende (anfängliche) Authentifizierungsdialog: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$MS \textbackslash rightarrow VLR: (IMSI\_\{MS\})\$ + \item + \$VLR \textbackslash rightarrow AuC: (IMSI\_\{MS\})\$ + \item + \$AuC \textbackslash rightarrow VLR: (IMSI\_\{MS\}, K\_\{BSC,MS\}, + R\_\{AUC\}, SRES\_\{AUC\})\$ + \item + \$VLR \textbackslash rightarrow MS: (R\_\{AUC:1\})\$ + \item + \$MS \textbackslash rightarrow VLR: (SRES\_\{AUC:1\})\$ + \item + \$VLR \textbackslash rightarrow MS: (LAI\_1 , TMSI\_\{MS:1\})\$ + \end{enumerate} + + \begin{itemize} + \item + Bemerkungen: + + \begin{itemize} + \item + \$SRES\_\{AUC\} = A3(K\_\{AUC,MS\}, R\_\{AUC\});\$ A3 ist ein + Algorithmus + \item + \$K\_\{BSC,MS\} = A8(K\_\{AUC,MS\}, R\_\{AUC\});\$ A8 ist ein + Algorithmus + \item + \$R\_\{AUC\}, SRES\_\{AUC\}\$ sind Arrays mit mehreren Werten + \end{itemize} + \item + Dialog zur Wiederauthentifizierung mit demselben VLR: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$MS \textbackslash rightarrow VLR: (LAI\_1 , TMSI\_\{MS:n\})\$ + \item + \$VLR \textbackslash rightarrow MS: (R\_\{AUC:i\})\$ + \item + \$MS \textbackslash rightarrow VLR: (SRES\_\{AUC:i\})\$ + \item + \$VLR \textbackslash rightarrow MS: (LAI\_1, TMSI\_\{MS:n+1\})\$ + \end{enumerate} + \item + Bemerkungen: + + \begin{itemize} + \item + Die Standortbereichskennung \$LAI\_1\$ ermöglicht die Erkennung + eines MS ,,coming in'' aus einem anderen Bereich + \item + Nach erfolgreicher Authentifizierung wird eine neue temporäre mobile + Teilnehmeridentität \$TMSI\_\{MS:n+1\}\$ zugewiesen + \end{itemize} + \item + Re-Authentifizierungsdialog mit Übergabe an das neue \$VLR\_2\$: + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + \$MS \textbackslash rightarrow VLR\_2: (LAI\_1, TMSI\_\{MS:n\})\$ + \item + \$VLR\_2\$Rechtspfeil VLR\_1: (LAI\_1, TMSI\_\{MS:n\})\$ + \item + \$VLR\_1 \textbackslash rightarrow VLR\_2: (TMSI\_\{MS:n\}, + IMSI\_\{MS\}, K\_\{BSC,MS\}, R\_\{AUC\}, SRES\_\{AUC\})\$ + \item + \$VLR\_2 \textbackslash rightarrow MS: (R\_\{AUC:i\})\$ + \item + \$MS \textbackslash rightarrow VLR\_2: (SRES\_\{AUC:i\})\$ + \item + \$VLR\_2 \textbackslash rightarrow MS: (LAI\_2, TMSI\_\{MS:n+1\})\$ + \end{enumerate} + \item + Bemerkungen: + + \begin{itemize} + \item + Nur unbenutzte \$R\_\{AUC\}, ...\$ werden an \$VLR\_2\$ übertragen + \item + Dieses Schema kann nicht verwendet werden, und es ist ein + Anfangsdialog erforderlich: + + \begin{itemize} + \item + Wenn \$TMSI\_\{MS:n\}\$ bei \$VLR\_1\$ nicht verfügbar ist, oder + \item + wenn \$VLR\_2\$ nicht in der Lage ist, \$VLR\_1\$ zu kontaktieren + \end{itemize} + \item + Wenn \$VLR\_1\$ und \$VLR\_2\$ zu verschiedenen Netzbetreibern + gehören, kann der Handover nicht durchgeführt werden und die + Verbindung wird unterbrochen + \end{itemize} + \item + Nur das Mobiltelefon authentifiziert sich gegenüber dem Netz + \item + Die Authentifizierung basiert auf einem Challenge-Response-Verfahren: + + \begin{itemize} + \item + Das AuC im Heimatnetz erzeugt Challenge-Response-Paare + \item + Der MSC/VLR im besuchten Netz prüft diese + \item + Challenge-Response-Vektoren werden ungeschützt im + Signalisierungsnetz übertragen + \end{itemize} + \item + Die permanente Identifikation des Mobiltelefons (IMSI) wird nur dann + über die Funkverbindung gesendet, wenn dies unvermeidlich ist: + + \begin{itemize} + \item + Dies ermöglicht einen teilweisen Schutz des Standorts. + \item + Da die IMSI manchmal im Klartext gesendet wird, ist es dennoch + möglich, den Standort einiger Einheiten zu erfahren + \item + Ein Angreifer könnte sich als Basisstation ausgeben und die Handys + ausdrücklich auffordern, ihre IMSI zu senden! + \end{itemize} + \item + Grundsätzlich besteht Vertrauen zwischen allen Betreibern! + \end{itemize} + + + \subsection{General Packet Radio Service + (GPRS)} + + \begin{itemize} + \item + GPRS (General Packet Radio Service, allgemeiner Paketfunkdienst): + + \begin{itemize} + \item + Datenübertragung in GSM-Netzen auf der Basis von Paketvermittlung + \item + Nutzung freier Slots der Funkkanäle nur bei sendebereiten + Datenpaketen (z.B. 115 kbit/s bei temporärer Nutzung von 8 Slots) + \end{itemize} + \item + GPRS-Netzelemente: + + \begin{itemize} + \item + GGSN (Gateway GPRS Support Node): Interworking-Einheit zwischen GPRS + und PDN (Packet Data Network) + \item + SGSN (Serving GPRS Support Node): Unterstützt die MS (Standort, + Abrechnung, Sicherheit, entspricht im Grunde dem MSC) + \item + GR (GPRS Register): Verwaltet Benutzeradressen (entspricht HLR) + \end{itemize} + \end{itemize} + + (allgemeine GPRS-Beschreibung entnommen aus {[}Sch03a{]}) + + % \includegraphics{Assets/NetworkSecurity-gprs-logical-architecture.png} + + % \includegraphics{Assets/NetworkSecurity-gprs-protocol-architecture.png} + + \begin{itemize} + \item + SNDCP: Subnetwork Dependent Convergence Protocol + \item + GTP: GPRS Tunnelling Protocol + \end{itemize} + + GPRS-Sicherheit + + \begin{itemize} + \item + Sicherheitsziele: + + \begin{itemize} + \item + Schutz vor unbefugter Nutzung des GPRS-Dienstes (Authentifizierung) + \item + Gewährleistung der Vertraulichkeit der Benutzeridentität (temporäre + Identifizierung und Verschlüsselung) + \item + Gewährleistung der Vertraulichkeit von Benutzerdaten + (Verschlüsselung) + \end{itemize} + \item + Realisierung von Sicherheitsdiensten: + + \begin{itemize} + \item + Die Authentifizierung ist grundsätzlich identisch mit der + GSM-Authentifizierung: + + \begin{itemize} + \item + SGSN ist die Peer-Entität + \item + Zwei separate temporäre Identitäten werden für GSM/GPRS verwendet + \item + Nach erfolgreicher Authentifizierung wird die Verschlüsselung + eingeschaltet + \end{itemize} + \item + Die Vertraulichkeit der Benutzeridentität ist ähnlich wie bei GSM: + + \begin{itemize} + \item + Die meiste Zeit wird nur die Paket-TMSI (P-TMSI) über die Luft + gesendet. + \item + Optional können P-TMSI ,,Signaturen'' zwischen MS und SGSN + verwendet werden, um die Re-Authentifizierung zu beschleunigen + \end{itemize} + \item + Die Vertraulichkeit der Benutzerdaten wird zwischen MS und SGSN + realisiert: + + \begin{itemize} + \item + Unterschied zu GSM, wo nur zwischen MS und BTS verschlüsselt wird + \item + Die Verschlüsselung wird in der LLC-Protokollschicht realisiert + \end{itemize} + \end{itemize} + \end{itemize} + + % \includegraphics{Assets/NetworkSecurity-gprs-handover-execution.png} + + \begin{itemize} + \item + GPRS unterstützt ein ,,optimiertes Handover'' einschließlich + Re-Authentifizierung (dies könnte jedoch eine Schwäche der P-TMSI + ,,Signatur'' verhindern) + \end{itemize} + + + \subsection{UMTS Sicherheits + Architektur} + + % \includegraphics{Assets/NetworkSecurity-umts-security-architecture.png} + + \begin{enumerate} + \def\labelenumi{\arabic{enumi}.} + \item + Netzzugangssicherheit: Schutz vor Angriffen auf die Funkschnittstelle + \item + Sicherheit der Netzdomäne: Schutz vor Angriffen auf das drahtgebundene + Netz + \item + Sicherheit der Benutzerdomäne: sicherer Zugang zu den Mobilstationen + \item + Sicherheit der Anwendungsdomäne: sicherer Nachrichtenaustausch für + Anwendungen + \item + Sichtbarkeit und Konfigurierbarkeit der Sicherheit: Information des + Benutzers über den sicheren Betrieb + \end{enumerate} + + + \subsubsection{Aktueller Stand der + UMTS-Sicherheitsarchitektur} + + \begin{itemize} + \item + Sicherheit beim Netzzugang: Derzeit der am weitesten entwickelte Teil + der UMTS-Sicherheit (siehe unten) + \item + Netzbereichssicherheit: Dieser Teil ist größtenteils noch ausbaufähig + (in Spezifikationen bis Release 5) + \item + Sicherheit der Benutzerdomäne: + + \begin{itemize} + \item + Verlangt grundsätzlich, dass sich der Benutzer gegenüber seinem User + Services Identity Module (USIM) authentifiziert, z.B. durch Eingabe + einer PIN + \item + Optional kann ein Terminal die Authentifizierung des USIM verlangen. + \end{itemize} + \item + Anwendungsbereichssicherheit: + + \begin{itemize} + \item + Definiert ein Sicherheitsprotokoll, das zwischen den auf dem + Endgerät/USIM laufenden Anwendungen und einem System im Netz + verwendet wird (3GPP TS 23.048) + \item + Liegt etwas außerhalb des Bereichs der Mobilfunksicherheit + \end{itemize} + \item + Sichtbarkeit und Konfigurierbarkeit der Sicherheit: Definiert + Anforderungen, damit der Benutzer die Kontrolle über die + Sicherheitsmerkmale hat + \item + Im Folgenden konzentrieren wir uns auf die Netzzugangssicherheit + \end{itemize} + + + \subsubsection{UMTS-Netzzugangssicherheitsdienste} + + \begin{itemize} + \item + Vertraulichkeit der Benutzeridentität: + + \begin{itemize} + \item + Vertraulichkeit der Benutzeridentität: die Eigenschaft, dass die + permanente Benutzeridentität (IMSI) eines Benutzers, dem ein Dienst + bereitgestellt wird, auf der Funkzugangsverbindung nicht abgehört + werden kann + \item + Vertraulichkeit des Benutzerstandorts: die Eigenschaft, dass die + Anwesenheit oder die Ankunft eines Benutzers in einem bestimmten + Gebiet nicht durch Abhören der Funkzugangsverbindung ermittelt + werden kann + \item + Unverfolgbarkeit des Benutzers: die Eigenschaft, dass ein + Eindringling durch Abhören der Funkzugangsverbindung nicht ableiten + kann, ob verschiedene Dienste an denselben Benutzer geliefert werden + \end{itemize} + \item + Authentifizierung der Entität: + + \begin{itemize} + \item + Benutzerauthentifizierung: die Eigenschaft, dass das dienende Netz + die Identität des Benutzers bestätigt + \item + Netzauthentifizierung: die Eigenschaft, dass der Benutzer bestätigt, + dass er mit einem dienenden Netz verbunden ist, das von dem HE des + Benutzers autorisiert ist, ihm Dienste zu liefern; dies schließt die + Garantie ein, dass diese Autorisierung aktuell ist. + \end{itemize} + \item + Vertraulichkeit: + + \begin{itemize} + \item + Vereinbarung über den Chiffrieralgorithmus: die Eigenschaft, dass + der MS und der SN den Algorithmus, den sie später verwenden sollen, + sicher aushandeln können + \item + Chiffrierschlüssel-Vereinbarung: die Eigenschaft, dass der MS und + der SN sich auf einen Chiffrierschlüssel einigen, den sie später + verwenden können + \item + Vertraulichkeit der Nutzdaten: die Eigenschaft, dass Nutzdaten an + der Funkzugangsschnittstelle nicht abgehört werden können + \item + Vertraulichkeit der Signalisierungsdaten: die Eigenschaft, dass + Signalisierungsdaten auf der Funkzugangsschnittstelle nicht abgehört + werden können + \end{itemize} + \item + Integrität der Daten: + + \begin{itemize} + \item + Vereinbarung eines Integritätsalgorithmus + \item + Integritätsschlüssel-Vereinbarung + \item + Datenintegrität und Ursprungsauthentifizierung von + Signalisierungsdaten: die Eigenschaft, dass die empfangende Einheit + (MS oder SN) in der Lage ist, zu überprüfen, dass + Signalisierungsdaten seit dem Versand durch die sendende Einheit (SN + oder MS) nicht auf unautorisierte Weise verändert wurden und dass + der Datenursprung der empfangenen Signalisierungsdaten tatsächlich + der behauptete ist + \end{itemize} + \end{itemize} + + Einige UMTS-Authentifizierungsabkürzungen + + %\begin{longtable}[]{@{}ll@{}} + % \toprule + % \endhead + % AK & Anonymitätsschlüssel\tabularnewline + % AMF & Authentifizierungs-Management-Feld\tabularnewline + % AUTN & Authentifizierungs-Token\tabularnewline + % AV & Authentifizierungsvektor\tabularnewline + % CK & Cipher Key\tabularnewline + % HE & Heimatumgebung\tabularnewline + % IK & Integritätsschlüssel\tabularnewline + % RAND & Zufällige Herausforderung\tabularnewline + %% SQN & Sequenznummer\tabularnewline + % SN & Dienendes Netzwerk\tabularnewline + % USIM & Benutzerdienste-Identitätsmodul\tabularnewline + % XRES & Erwartete Antwort\tabularnewline + % \bottomrule + %\end{longtable} + + + \subsubsection{Überblick über den + UMTS-Authentifizierungsmechanismus} + + \begin{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-umts-authentication-mechanism.png} + \item + % \includegraphics{Assets/NetworkSecurity-umts-authentication-vectors.png} + + \begin{itemize} + \item + Der HE/AuC beginnt mit der Erzeugung einer neuen Sequenznummer SQN + und einer unvorhersehbaren Herausforderung RAND + + \begin{itemize} + \item + Für jeden Benutzer führt die HE/AuC einen Zähler \$SQN\_\{HE\}\$ + \end{itemize} + \item + Ein Authentifizierungs- und Schlüsselverwaltungsfeld AMF ist im + Authentifizierungs-Token jedes Authentifizierungsvektors enthalten. + \item + Anschließend werden die folgenden Werte berechnet: + + \begin{itemize} + \item + ein Nachrichtenauthentifizierungscode \$MAC = f1\_K(SQN + \textbar\textbar{} RAND \textbar\textbar{} AMF)\$, wobei f1 eine + Nachrichtenauthentifizierungsfunktion ist + \item + eine erwartete Antwort \$XRES = f2\_K(RAND)\$, wobei f2 eine + (möglicherweise verkürzte) Nachrichtenauthentifizierungsfunktion + ist + \item + ein Chiffrierschlüssel \$CK = f3\_K(RAND)\$, wobei f3 eine + Schlüsselerzeugungsfunktion ist + \item + ein Integritätsschlüssel \$IK = f4\_K(RAND)\$, wobei f4 eine + Schlüsselerzeugungsfunktion ist + \item + ein Anonymitätsschlüssel \$AK = f5\_K(RAND)\$, wobei f5 eine + Schlüsselerzeugungsfunktion ist + \end{itemize} + \item + Schließlich wird das Authentifizierungstoken \$AUTN = SQN + \textbackslash oplus AK \textbar\textbar{} AMF \textbar\textbar{} + MAC\$ konstruiert + \end{itemize} + \item + % \includegraphics{Assets/NetworkSecurity-umts-user-authentication-usim.png} + + \begin{itemize} + \item + Nach Erhalt von RAND und AUTN berechnet das USIM: + \item + berechnet es den Anonymitätsschlüssel \$AK = f5\_K (RAND)\$ + \item + ruft die Sequenznummer \$SQN = (SQN \textbackslash oplus AK) + \textbackslash oplus AK\$ ab + \item + errechnet \$XMAC = f1\_K (SQN \textbar\textbar{} RAND + \textbar\textbar{} AMF)\$ und + \item + vergleicht dies mit MAC, das in AUTN enthalten ist + \item + Wenn sie unterschiedlich sind, sendet der Benutzer die Ablehnung der + Benutzerauthentifizierung mit Angabe der Ursache an den VLR/SGSN + zurück, und der Benutzer bricht das Verfahren ab. + \item + Wenn die MAC korrekt ist, prüft das USIM, ob die empfangene + Sequenznummer SQN im richtigen Bereich liegt: + + \begin{itemize} + \item + Liegt die Sequenznummer nicht im korrekten Bereich, sendet das + USIM einen Synchronisationsfehler an den VLR/SGSN zurück, + einschließlich eines entsprechenden Parameters, und bricht das + Verfahren ab. + \end{itemize} + \item + Wenn die Sequenznummer im korrekten Bereich liegt, berechnet das + USIM: + + \begin{itemize} + \item + die Authentifizierungsantwort \$RES = f2\_K(RAND)\$ + \item + den Chiffrierschlüssel \$CK = f3\_K(RAND)\$ und den + Integritätsschlüssel \$IK = f4\_K(RAND)\$ + \end{itemize} + \end{itemize} + \end{itemize} + + + \subsubsection{Schlussfolgerungen zur Sicherheit in UMTS + Release'99} + + \begin{itemize} + \item + Die Sicherheit von UMTS Release '99 ist der Sicherheit von GSM sehr + ähnlich: + + \begin{itemize} + \item + Der Heimat-AUC generiert Challenge-Response-Vektoren + \item + Die Challenge-Response-Vektoren werden ungeschützt über das + Signalisierungsnetz an ein besuchtes Netz übertragen, das die + Authentizität eines Handys überprüfen muss. + \item + Anders als bei GSM authentifiziert sich das Netz auch gegenüber dem + Mobiltelefon + \item + Die IMSI, die einen Benutzer eindeutig identifiziert: + + \begin{itemize} + \item + wird immer noch dem besuchten Netz offenbart + \item + kann immer noch von einem Angreifer, der sich als Basisstation + ausgibt, abgefragt werden, da es in diesem Fall keine + Netzauthentifizierung gibt! + \end{itemize} + \item + Das Sicherheitsmodell setzt weiterhin Vertrauen zwischen allen + Netzbetreibern voraus + \item + Vertraulichkeit ist nur auf der Funkstrecke gegeben + \end{itemize} + \item + Zusammenfassend lässt sich sagen, dass UMTS Release'99 genauso sicher + sein soll wie ein unsicheres Festnetz + \end{itemize} + + + \subsection{Sicherheit in LTE-Netzen} + + \begin{itemize} + \item + Eine Weiterentwicklung von UMTS, so dass viele der Sicherheitskonzepte + gleich geblieben sind + + \begin{itemize} + \item + Das Protokoll zur Authentifizierung und Schlüsselvereinbarung (AKA) + ist im Wesentlichen dasselbe wie bei UMTS. + \item + Allerdings wird ein Master Key KASME abgeleitet, der dann zur + Ableitung von Integritäts- und Verschlüsselungsschlüsseln verwendet + wird + \end{itemize} + \item + Bemerkenswerte Unterschiede: + + \begin{itemize} + \item + GSM-SIMs dürfen nicht mehr auf das Netz zugreifen + \item + KASUMI wird nicht mehr verwendet, stattdessen werden SNOW, AES oder + ZUC (ein chinesischer Stream Cipher, der für LTE entwickelt wurde) + eingesetzt + \item + Das zugehörige Festnetz (Evolved Packet Core genannt) ist + vollständig paketvermittelt und normalerweise durch IPsec und IKEv2 + geschützt. + \item + Heim-eNBs + \end{itemize} + \item + Allerdings oft neue Namen für sehr ähnliche Dinge, z.B., + + \begin{itemize} + \item + Anstelle der TMSI wird eine Globally Unique Temporary Identity + (GUTI) verwendet, die aus Folgendem besteht: + + \begin{itemize} + \item + Einer PLMN-ID, MMEI und einer M-TMSI + \item + Damit werden das Public Land Mobile Network (PLMN), die Mobility + Management Entity (MME), vergleichbar mit der MSC in GSM/UMTS, und + das mobile Gerät (M-TMSI) identifiziert + \end{itemize} + \end{itemize} + \end{itemize} + + + \section{Referenzen} + + \begin{itemize} + \item + {[}AES01a{]} National Institute of Standards and Technology - + Specification for the Advanced Encryption Standard (AES) + \item + {[}DR97a{]} J. Daemen, V. Rijmen - AES Proposal: Rijndael + \href{http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf}{http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf} + \item + {[}FMS01a{]} S. Fluhrer, I. Mantin, A. Shamir - Weaknesses in the Key + Scheduling Algorithm of RC4. Eighth Annual Workshop on Selected Areas + in Cryptography + \item + {[}Riv01a{]} R. Rivest. - RSA Security Response to Weaknesses in Key + Scheduling Algorithm of RC4. + \href{http://www.rsa.com/rsalabs/node.asp}{http://www.rsa.com/rsalabs/node.asp} + \item + {[}SIR01a{]} A. Stubblefield, J. Ioannidis, A. D. Rubin. - Using the + Fluhrer, Mantin, and Shamir Attack to Break WEP. AT\&T Labs Technical + Report TD-4ZCPZZ + \item + {[}FKLS00{]} N. Ferguson, J. Kelsey, S. Lucks, B. Schneier, M. Stay, + D.Wagner, D. Whiting - Improved cryptanalysis of Rijndael. In FSE'00, + volume 1978 of Lecture Notes in Computer Science. Springer, 2000. + \item + {[}GM00{]} H. Gilbert and M. Minier - A Collision Attack on 7 Rounds + of Rijndael. In AES Candidate Conference, 2000. + \item + {[}BKR11{]} A. Bogdanov, D. Khovratovich, C. Rechberger - Biclique + cryptanalysis of the full AES. In ASIACRYPT'11, 2001. + \item + {[}Mir02{]} I. Mironov - (Not so) random shuffles of RC4. In Advances + in Cryptology - CRYPTO 2002 + \item + {[}Kle08{]} A.Klein. - Attacks on the RC4 stream cipher. In Designs, + Codes and Cryptography + \item + {[}ETS12{]} ETSI/SAGE - Specification of the 3GPP confidentiality and + integrity algorithms; Document 2: Kasumi specification + \item + {[}Kue01{]} U. Kühn. - Cryptanalysis of Reduced-Round MISTY. In + Advances in Cryptology - EUROCRYPT 2001 + \item + {[}BDN05{]} E. Biham, O. Dunkelman, N. Keller - A Related-Key + Rectangle Attack on the Full KASUMI , In ASIACRYPT 2005 + \item + {[}DKS10{]} O. Dunkelman, N. Keller, A. Shamir - A practical-time + related-key attack on the KASUMI cryptosystem used in GSM and 3G + telephony. In CRYPTO'10 + \item + {[}ETS06{]} ETSI/SAGE - Specification of the 3GPP Confidentiality and + Integrity Algorithms UEA2 \& UIA2. Document 2: SNOW 3G Specification + \item + {[}KY11{]} A. Kircanski A.M. Youssef. - On the Sliding Property of + SNOW 3G and SNOW 2.0 IET Inf. Secur. + \item + {[}Amo94{]} E. G. Amorosi. - Fundamentals of Computer Security + Technology + \item + {[}Cha95{]} Brent Chapman and Elizabeth Zwicky - Building Internet + Firewalls + \item + {[}For94b{]} Warwick Ford. - Computer Communications Security - + Principles, Standard Protocols and Techniques. + \item + {[}Gar96{]} Simson Garfinkel and Gene Spafford - Practical Internet \& + Unix Security + \item + {[}Men97a{]} A. J. Menezes, P. C. Van Oorschot, S. A. Vanstone - + Handbook of Applied Cryptography. CRC Press Series on Discrete + Mathematics and Its Applications + \item + {[}SR14{]} G. Schäfer, M. Rossberg - Netzsicherheit + \item + {[}Sch96{]} B. Schneier - Applied Cryptography Second Edition: + Protocols, Algorithms and Source Code in C + \item + {[}Sta13{]} W. Stallings - Cryptography and Network Security: + Principles and Practice + \item + {[}Sti05{]} D. R. Stinson - Cryptography: Theory and Practice + (Discrete Mathematics and Its Applications) + \item + {[}Bre88a{]} D. M. Bressoud. - Factorization and Primality Testing + \item + {[}Cor90a{]} T. H. Cormen, C. E. Leiserson, R. L. Rivest. Introduction + to Algorithms. + \item + {[}DH76{]} W. Diffie, M. E. Hellman - New Directions in Cryptography + \item + {[}ElG85a{]} T. ElGamal - A Public Key Cryptosystem and a Signature + Scheme based on Discrete Logarithms. + \item + {[}Kob87a{]} N. Koblitz - A Course in Number Theory and Cryptography + \item + {[}Men93a{]} A. J. Menezes - Elliptic Curve Public Key Cryptosystems. + \item + {[}Niv80a{]} I. Niven, H. Zuckerman - An Introduction to the Theory of + Numbers + \item + {[}RSA78{]} R. Rivest, A. Shamir und L. Adleman - A Method for + Obtaining Digital Signatures and Public Key Cryptosystems + \item + {[}KAFL10{]} T. Kleinjung, K. Aoki, J. Franke, A. Lenstra, E. Thomé, + J. Bos, P. Gaudry, A. Kruppa, P. Montgomery, D. Osvik, H. Te Riele, + A.Timofeev, P. Zimmermann - Factorization of a 768-bit RSA modulus + \item + {[}LM10{]} M. Lochter, J. Merkle - Elliptic Curve Cryptography (ECC) + Brainpool Standard Curves and Curve Generation + \item + {[}NIST99{]} NIST - Recommended Elliptic Curves for Federal Government + Use + \item + {[}NIST12{]} NIST - Recommendation for Key Management: Part 1: General + (Revision 3) + \item + {[}Ko87{]} N. Koblitz - Elliptic Curve Cryptosystems + \item + {[}BBP12{]} B.B. Brumley, M. Barbosa, D. Page, F. Vercauteren - + Practical realisation and elimination of an ECC-related software bug + attack + \item + {[}BT11{]} B.B. Brumley, N. Tuveri - Remote timing attacks are still + practical + \item + {[}BLR08{]} D. Bernstein, T. Lange, R. Rezaeian Farashahi - Binary + Edwards Curves + \item + {[}NIST09{]} NIST - Digital Signature Standard (DSS) + \item + {[}SM09{]} A. Sorniotti, R. Molva - A provably secure secret handshake + with dynamic controlled matching + \item + {[}BF03{]} D. Boneh, M. Franklin - Identity-Based Encryption from the + Weil Pairing + \item + {[}Sch85{]} R. Schoof - Elliptic Curves over Finite Fields and the + Computation of Square Roots mod p + \item + {[}Kra97a{]} H. Krawczyk, M. Bellare, R. Canetti. HMAC: Keyed-Hashing + for Message Authentication. Internet RFC 2104, February 1997. + \item + {[}Mer89a{]} R. Merkle. One Way Hash Functions and DES. Proceedings of + Crypto `89, Springer, 1989 + \item + {[}Men97a{]} A. J. Menezes, P. C. Van Oorschot, S. A. Vanstone. + Handbook of Applied Cryptography, CRC Press Series on Discrete + Mathematics and Its Applications, Hardcover, 816 pages, CRC Press, + 1997 + \item + {[}NIST02{]} National Institute of Standards and Technology (NIST). + Secure Hash Standard. Federal Information Processing Standards + Publication (FIPS PUB), 180-2, 2002 + \item + {[}Riv92a{]} R. L. Rivest. The MD5 Message Digest Algorithm. Internet + RFC 1321, April 1992 + \item + {[}Rob96a{]} M. Robshaw. On Recent Results for MD2, MD4 and MD5. RSA + Laboratories' Bulletin, No. 4, November 1996 + \item + {[}WYY05a{]} X. Wang, Y. L. Yin, H. Yu. Finding collisions in the full + SHA-1. In Advances in Cryptology - CRYPTO'05, pages 18-36, 2005 + \item + {[}Yuv79a{]} G. Yuval. How to Swindle Rabin. Cryptologia, July 1979. + \item + {[}WLYF04{]} X. Wang, D. Feng, X. Lai, H. Yu. Collisions for Hash + Functions MD4, MD5, HAVAL-128 and RIPEMD. IACR Eprint archive, 2004. + \item + {[}LWW05{]} A. Lenstra, X. Wang, B. de Weger. Colliding X.509 + Certificates. Cryptology ePrint Archive: Report 2005/067. 2005 + \item + {[}LD05{]} S. Lucks, M. Daum. The Story of Alice and her Boss. In Rump + session of Eurocrypt'05. 2005. + \item + {[}Kl06{]} V. Klima. Tunnels in Hash Functions: MD5 Collisions Within + a Minute (extended abstract), Cryptology ePrint Archive: Report + 2006/105, 2006 + \item + {[}SA09{]} Y. Sasaki, K. Aoki. Finding Preimages in Full MD5 Faster + Than Exhaustive Search. Advances in Cryptology - EUROCRYPT'09. 2009 + \item + {[}Man11{]} M. Manuel. Classification and Generation of Disturbance + Vectors for Collision Attacks against SHA-1. Journal Designs, Codes + and Cryptography. Volume 59, Issue 1-3, pages 247-263, 2011 + \item + {[}GH04{]} H. Gilbert, H. Handschuh. Security Analysis of SHA-256 and + Sisters. Lecture Notes in Computer Science, 2004, Volume 3006/2004, + pages 175-193. 2004 + \item + {[}AGM09{]} K. Aoki, J. Guo, K. Matusiewicz, V. Sasaki, L. Wang. + Preimages for Step-Reduced SHA-2. Advances in Cryptology - ASIACRYPT + 2009. pages 578-597, 2009 + \item + {[}KK06{]} J. Kelsey, T. Kohno. Herding Hash Functions and the + Nostradamus Attack. Advances in Cryptology - EUROCRYPT'06. 2006 + \item + {[}Jou04{]} A. Joux: Multicollisions in Iterated Hash Functions. + Application to Cascaded Constructions. CRYPTO 2004: pages 306-316. + 2004 + \item + {[}MV04{]} D. McGrew, J. Viega. The Security and Performance of the + Galois/Counter Mode (GCM) of Operation (Full Version). + \href{http://eprint.iacr.org/2004/193.}{http://eprint.iacr.org/2004/193.} + \item + {[}Fer05{]} N. Ferguson. Authentication weaknesses in GCM. 2005 + \item + {[}Dwo07{]} M. Dworkin. Recommendation for Block Cipher Modes of + Operation: Galois/Counter Mode (GCM) and GMAC. NIST Special + Publication 800-38D. 2007 + \item + {[}Saa11{]} M. Saarinen. GCM, GHASH and Weak Keys. Cryptology ePrint + Archive, Report 2011/202, + \href{http://eprint.iacr.org/2011/202,}{http://eprint.iacr.org/2011/202,} + 2011 + \item + {[}BDP07{]} G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. Sponge + Functions. Ecrypt Hash Workshop 2007 + \item + {[}BDP11a{]} G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. + Cryptographic sponge functions. Research report. Version 0.1. 2011 + \item + {[}BDP11b{]} G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. The + Keccak reference. Research report. Version 3.0. 2011 + \item + {[}BM92{]} BELLOVIN, S.; MERRITT, M.: Encrypted Key Exchange: + Password-Based Protocols Secure Against Dictionary Attacks. In: IEEE + Computer Society Symposium on Research in Security and Privacy, 1992 + \item + {[}Bry88{]} BRYANT, R.: Designing an Authentication System: A Dialogue + in Four Scenes. 1988. Project Athena, Massachusetts Institute of + Technology, Cambridge, USA + \item + {[}GNY90{]} GONG, L.; NEEDHAM, R. M.; YAHALOM, R.: Reasoning About + Belief in Cryptographic Protocols. In: Symposium on Research in + Security and Privacy IEEE Computer Society, IEEE Computer Society + Press, May 1990 + \item + {[}KNT94{]} KOHL, J.; NEUMAN, B.; TS'O, T.: The Evolution of the + Kerberos Authentication Service. In: BRAZIER, F.; JOHANSEN, D. (Eds): + Distributed Open Systems, IEEE Computer Society Press, 1994 + \item + {[}NS78{]} NEEDHAM, R. M.; SCHROEDER, M. D.: Using Encryption for + Authentication in Large Networks of Computers. In: Communications of + the ACM, 1978 + \item + {[}NS87{]} NEEDHAM, R.; SCHROEDER, M.: Authentication Revisited. In: + Operating Systems Review, 1987 + \item + {[}NYH+05{]} NEUMAN, C.; YU, T.; HARTMAN, S. ; RAEBURN, K.: The + Kerberos Network Authentication Service (V5)\_. 2005. - RFC 4120, + IETF, Status: Standard, + \href{https://tools.ietf.org/html/rfc4120}{https://tools.ietf.org/html/rfc4120} + \item + {[}OR87{]} OTWAY, D.; REES, O.: Efficient and Timely Mutual + Authentication. In: Operating Systems Review, 1987 + \item + {[}Pat97{]} PATEL, S.: Number Theoretic Attacks On Secure Password + Schemes. In: IEEE Symposium on Security and Privacy, 1997 + \item + {[}Sch05{]} SCHAAD, J.: Internet X.509 Public Key Infrastructure + Certificate Request Message Format (CRMF). September 2005. - RFC 4211, + IETF, Status: Proposed Standard, + \href{https://tools.ietf.org/html/rfc4211}{https://tools.ietf.org/html/rfc4211} + \item + {[}RFC1661{]} W. Simpson. \emph{The Point-to-Point Protocol (PPP).} + RFC 1661, 1994. + \item + {[}RFC1968{]} G. Meyer. \emph{The PPP Encryption Control Protocol + (ECP).} RFC 1968, 1996. + \item + {[}RFC1994{]} W. Simpson. \emph{PPP Challenge Handshake Authentication + Protocol (CHAP).} RFC 1994 (obsoletes RFC 1334), 1996. + \item + {[}RFC2284{]} L. Blunk, J. Vollbrecht. \emph{PPP Extensible + Authentication Protocol (EAP).} RFC 2284, 1998. + \item + {[}RFC2289{]} N. Haller, C. Metz, P. Nesser, M. Straw. \emph{A + One-Time Password System.} RFC 2289, 1998. + \item + {[}RFC2341{]} A. Valencia, M. Littlewood, T. Kolar. \emph{Cisco Layer + Two Forwarding Protocol (L2F).} RFC 2341, 1998. + \item + {[}RFC2419{]} K. Sklower, G. Meyer. \emph{The PPP DES Encryption + Protocol, Version 2 (DESE-bis).} RFC 2419 (obsoletes RFC 1969), 1998. + \item + {[}RFC2420{]} H. Kummert. \emph{The PPP Triple-DES Encryption Protocol + (3DESE).} RFC 2420, 1998. + \item + {[}RFC2433{]} G. Zorn, S. Cobb. \emph{Microsoft PPP CHAP Extensions.} + RFC 2433, 1998. + \item + {[}RFC2637{]} K. Hamzeh, G. Pall , W. Verthein, J. Taarud, W. Little, + G. Zorn. \emph{Point-to-Point Tunneling Protocol (PPTP).} RFC 2637, + 1999. + \item + {[}RFC2661{]} W. Townsley, A. Valencia, A. Rubens, G. Pall, G. Zorn, + B. Palter. \emph{Layer Two Tunneling Protocol (L2TP).} RFC 2661, 1999. + \item + {[}RFC2828{]} R. Shirey. \emph{Internet Security Glossary.} RFC 2828, + 2000. + \item + {[}RFC3078{]} G. Pall, G. Zorn. \emph{Microsoft Point to Point + Encryption Protocol (MPPE).} RFC 3078, 2001. + \item + {[}SM98a{]} B. Schneier, Mudge. \emph{Cryptanalysis of Microsoft's + Point-to-Point Tunneling Protocol (PPTP).} Proceedings of the 5th ACM + Conference on Communications and Computer Security, ACM Press, 1998. + \item + {[}SMW99a{]} B. Schneier, Mudge, D. Wagner. \emph{Cryptanalysis of + Microsoft's PPTP Authentication Extensions (MSCHAPv2).} Counterpane + Systems, 1999. + \item + {[}FH98a{]} P. Ferguson, G. Huston. \emph{What is a VPN?} The Internet + Protocol Journal, Cisco Systems. 1998. + \item + {[}ATM99a{]} ATM Forum. \emph{ATM Security Specification Version 1.0.} + AF-SEC-0100.000, + \item + {[}RFC2401{]} R. Atkinson, S. Kent. Security Architecture for the + Internet Protocol. RFC 2401, Internet Engineering Taskforce (IETF), + 1998. + \item + {[}RFC2402{]} R. Atkinson, S. Kent. IP Authentication Header (AH). RFC + 2402, IETF, 1998. {[}RFC2403{]} C. Madson, R. Glenn. The Use of + HMAC-MD5-96 within ESP and AH. RFC 2403, IETF, 1998. + \item + {[}RFC2404{]} C. Madson, R. Glenn. The Use of HMAC-SHA-1-96 within ESP + and AH. RFC 2404, IETF, 1998. + \item + {[}RFC2405{]} C. Madson, N. Doraswami. The ESP DES-CBC Cipher + Algorithm With Explicit IV. RFC 2405, IETF, 1998. + \item + {[}RFC2406{]} R. Atkinson, S. Kent. IP Encapsulating Security Payload + (ESP). RFC 2406, IETF, 1998. + \item + {[}RFC2407{]} D. Piper. The Internet IP Security Domain of + Interpretation for ISAKMP. RFC 2407, IETF, 1998. + \item + {[}RFC2408{]} D. Maughan, M. Schertler, M. Schneider, J. Turner. + Internet Security Association and Key Management Protocol (ISAKMP). + RFC 2408, - IETF, 1998. + \item + {[}RFC2409{]} D. Harkins, D. Carrel. The Internet Key Exchange (IKE). + RFC 2409, IETF, 1998. + \item + {[}RFC2857{]} A. Keromytis, N. Provos. The Use of HMAC-RIPEMD-160-96 + within ESP and AH. RFC 2857, IETF, 2000. + \item + {[}RFC3947{]} T. Kivinen, B. Swander, A. Huttunen, V. Volpe: + \emph{Negotiation of NAT-Traversal in the IKE.} RFC 3947, IETF, 2005. + \item + {[}RFC3948{]} A. Huttunen, B. Swander, V. Volpe, L. DiBurro, M. + Stenberg: \emph{UDP Encapsulation of IPsec ESP Packets.} RFC 3948, + IETF, 2005. + \item + {[}RFC4306{]} C. Kaufman: \emph{Internet Key Exchange (IKEv2) + Protocol.} RFC 4306, Internet Engineering Taskforce (IETF), 2005. + \item + {[}NiMe08{]} P. Nikander, J. Melen: \emph{A Bound End-to-End Tunnel + (BEET) mode for ESP.} Internet-Draft, IETF Network Working Group, + 2008. + \item + {[}Bhai08{]} Y. Bhaiji: \emph{Network Security Technologies and + Solutions} , Cisco Press, 2008. + \item + {[}Fluh01{]} S. Fluhrer: \emph{Tunnel Endpoint Discovery.} Expired + Internet-Draft, IETF IPSP Working Group, 2001. + \item + {[}Tran06{]} T.H. Tran: \emph{Proactive Multicast-Based IPSEC + Discovery Protocol and Multicast Extension.} Military Communications + Conference, 2006. + \item + {[}FBJW08{]} R. Figueiredo, P. O. Boykin, P. St. Juste, D. Wolinsky: + \emph{Social VPNs: Integrating Overlay and Social Networks for + Seamless P2P Networking'.} IEEE WETICE/COPS, 2008. + \item + {[}RSS10{]} M. Rossberg, T. Strufe, G. Schaefer: \emph{Distributed + Automatic Configuration of Complex IPsec-Infrastructures.} Journal of + Network and Systems Management, Volume 18, Issue 3, 2010. + \item + {[}RSSM09{]} M. Rossberg, W. Steudel, G.Schaefer, M. Martius: + \emph{Eine Software-Architektur zur Konstruktion flexibler + IPsec-Infrastrukturen.} BSI 11. Deutscher IT-Sicherheitskongress, + 2009. + \item + {[}BKS98a{]} D. Bleichenbacher, B. Kaliski, J. Staddon. \emph{Recent + Results on PKCS \#1: RSA Encryption Standard.} RSA Laboratories' + Bulletin 7, 1998 + \item + {[}Cop96a{]} D. Coppersmith, M. K. Franklin, J. Patarin, M. K. Reiter. + \emph{Low Exponent RSA with Related Messages.} In Advance in + Cryptology -\/- Eurocrypt'96, U. Maurer, Ed., vol. 1070 of Lectures + Notes in Computer Science, Springer-Verlag, 1996 + \item + {[}FKK96a{]} A. O. Freier, P. Karlton, P. C. Kocher. \emph{The SSL + Protocol Version 3.0.} Netscape Communications Corporation, 1996 + \item + {[}DA99{]} T. Dierks, C. Allen. \emph{The TLS Protocol Version 1.0.} + RFC 2246, 1999 + \item + {[}DR08{]} T. Dierks, E. Rescorla. \emph{The Transport Layer Security + (TLS) Protocol Version 1.2.} RFC 5246, 2008 + \item + {[}RD10{]} J. Rizzo, T. Duong, Practical Padding Oracle Attacks, 4th + USENIX conference on Offensive technologies (WOOT), 2010 + \item + {[}RRDO10{]} E. Rescorla, M. Ray, S. Dispensa, N. Oskov. + \emph{Transport Layer Security (TLS) Renegotiation Indication + Extension} , RFC 5746. 2010 + \item + {[}Zo11{]} T. Zoller. \emph{TLS \& SSLv3 renegotiation vulnerability.} + Technical report, G-SEC. 2011 + \item + {[}RM12{]} E. Rescorla, N. Modadugu. \emph{Datagram Transport Layer + Security Version 1.2.} RFC 6347, 2012 + \item + {[}LL06{]} S. Lehtinen, C. Lonvick. \emph{The Secure Shell (SSH) + Protocol Assigned Numbers.} RFC 4250, 2006 + \item + {[}YL06a{]} T. Ylonen, C. Lonvick. \emph{The Secure Shell (SSH) + Protocol Architecture.} RFC 4251, 2006 + \item + {[}YL06b{]} T. Ylonen, C. Lonvick. \emph{The Secure Shell (SSH) + Authentication Protocol.} RFC 4252, 2006 -{[}YL06c{]} T. Ylonen, C. + Lonvick. \emph{The Secure Shell (SSH) Transport Layer Protocol} , RFC + 4253, 2006 -{[}YL06d{]} T. Ylonen, C. Lonvick. \emph{The Secure Shell + (SSH) Connection Protocol.} RFC 4254, 2006 -{[}SG09{]} D. Stebila, J. + Green. \emph{Elliptic Curve Algorithm Integration in the Secure Shell + Transport Layer} , RFC 5656. 2009 -{[}IS09{]} K. Igoe, J. Solinas. + \emph{AES Galois Counter Mode for the Secure Shell Transport Layer + Protocol.} RFC 5647. 2009 + \item + {[}Müller99a{]} G. Müller, K. Rannenberg (Ed.). \emph{Multilateral + Security in Communications.} Addison-Wesley-Longman, 1999 + \item + {[}BGW01a{]} N. Borisov, I. Goldberg, D. Wagner. Intercepting Mobile + Communications: The Insecurity of 802.11. 7th ACM SIGMOBILE Annual + International Conference on Mobile Computing and Networking (MOBICOM), + Rome, Italy, July 2001 + \item + {[}FMS01a{]} S. Fluhrer, I. Mantin, A. Shamir. Weaknesses in the Key + Scheduling Algorithm of RC4. Eighth Annual Workshop on Selected Areas + in Cryptography, August 2001 {[}IEEE12{]} IEEE. Wireless LAN Medium + Access Control (MAC) and Physical Layer (PHY) Specifications. IEEE Std + 802.11-2012, The Institute of Electrical and Electronics Engineers + (IEEE), 2012 + \item + {[}Riv01a{]} R. Rivest. RSA Security Response to Weaknesses in Key + Scheduling Algorithm of RC4. + \href{http://www.rsa.com/rsalabs/technotes/wep.html}{http://www.rsa.com/rsalabs/technotes/wep.html}, + 2001 + \item + {[}SIR01a{]} A. Stubblefield, J. Ioannidis, A. D. Rubin. Using the + Fluhrer, Mantin, and Shamir Attack to Break WEP. AT\&T Labs Technical + Report TD-4ZCPZZ, August 2001 + \item + {[}TWP07{]} E. Tews, R. P. Weinmann, A. Pyshkin. Breaking 104 bit WEP + in less than 60 seconds. Information Security Applications, 188-202, + 2007 + \item + {[}WM02a{]} N. C. Winget, T. Moore, D. Stanley, J. Walker. IEEE + 802.11i Overview. NIST 802.11 Wireless LAN Security Workshop, Falls + Church, Virginia, December 4-5, 2002 + \item + {[}RFC2898{]}B. Kaliski. PKCS \#5: Password-Based Cryptography + Specification Version 2.0. IETF Request for Comments 2898, 2000 + \item + {[}RFC3394{]}J. Schaad, R. Housley. Advanced Encryption Standard (AES) + Key Wrap Algorithm. IETF Request for Comments 3394, 2002 + \item + {[}3GPP00a{]} 3GPP. 3G Security: Security Architecture (Release 1999). + 3rd Generation Partnership Project, Technical Specification Group + Services and System Aspects, 2000 + \item + {[}3GPP02a{]} 3GPP. 3G Security: Security Architecture (Release 5), + 2002 + \item + {[}3GPP02b{]} 3GPP. Security Mechanisms for the (U)SIM application + toolkit, December 2002 + \item + {[}ETSI93a{]} ETSI TC-GSM. GSM Security Aspects (GSM 02.09). + Recommendation GSM, European Telecommunications Standards Institute + (ETSI), 1993 + \item + {[}ETSI94a{]} ETSI TC-SMG. European Digital Cellular + Telecommunications System (Phase 2): Security Related Network + Functions (GSM 03.20). ETS 300 534, European Telecommunications + Standards Institute (ETSI), 1994 + \item + {[}Les02a{]} Lescuyer, P. UMTS -- Grundlagen, Architektur und + Standard. dpunkt.verlag, 2002 + \item + {[}Sch03a{]} J. Schiller. Mobile Communications - The Course. + \href{http://www.inf.fu-berlin.de/inst/ag-tech/resources/mobilecommunications.htm}{http://www.inf.fu-berlin.de/inst/ag-tech/resources/mobilecommunications.htm} + \item + {[}Sch03b{]} J. Schiller. Mobile Communications. second edition, + Addison-Wesley, 2003 + \end{itemize} + \end{multicols} \end{document} \ No newline at end of file