Sichere Multimediakonferenzen Diplomarbeit Markus Pscheidt April 2000 Begutachter: Reinhard Posch Betreuer: Herbert Leitold Institut für angewandte Informationsverarbeitung Technische Universität Graz Sichere Multimediakonferenzen Inhaltsverzeichnis Inhaltsverzeichnis 1. Einleitung .................................................................................................................................... 1 2. Computer Netzwerke.................................................................................................................. 3 2.1. Grundlagen ................................................................................................................................... 3 2.1.1. Anforderungen .................................................................................................................... 4 Verbindungen..................................................................................................................... 4 Kosteneffiziente Ressourcen-Aufteilung ........................................................................... 5 Funktionalität ..................................................................................................................... 6 Performance ....................................................................................................................... 7 2.1.2. Netzwerkarchitektur............................................................................................................8 Schichten und Protokolle ................................................................................................... 9 OSI Architektur................................................................................................................ 10 Internet Architektur.......................................................................................................... 11 2.2. Direct Link Netzwerke ............................................................................................................... 12 2.2.1. Ethernet (CSMA/CD)........................................................................................................ 13 Physikalische Eigenschaften ............................................................................................ 13 Frame Format ................................................................................................................... 14 Adressen........................................................................................................................... 14 Sende-Algorithmus .......................................................................................................... 14 2.3. Packet Switching ........................................................................................................................ 15 2.3.1. Forwarding ........................................................................................................................ 16 Virtuelle Verbindung ....................................................................................................... 16 Datagramme ..................................................................................................................... 16 2.3.2. Routing.............................................................................................................................. 17 2.4. Internetworking .......................................................................................................................... 18 2.4.1. Internet Protocol (IP)......................................................................................................... 18 Service Modell ................................................................................................................. 18 Datagramm-Dienst ........................................................................................................... 19 IP-Header ......................................................................................................................... 19 Fragmentierung ................................................................................................................ 20 Globale Adressen ............................................................................................................. 20 Datagram Forwarding ...................................................................................................... 21 Adress-Auflösung (ARP) ................................................................................................. 21 Fehlerbenachrichtigung (ICMP) ...................................................................................... 21 2.4.2. Host Namen (DNS) ........................................................................................................... 22 2.5. Transport-Protokolle................................................................................................................... 23 i Inhaltsverzeichnis Sichere Multimediakonferenzen 2.5.1. Demultiplexing: UDP........................................................................................................ 23 2.5.2. Byte-Stream: TCP ............................................................................................................. 24 Allgemeine Betrachtungen............................................................................................... 24 Segmente.......................................................................................................................... 24 TCP Header...................................................................................................................... 25 Verbindungsaufbau und Terminierung ............................................................................ 25 Sliding Window ............................................................................................................... 26 Flusskontrolle................................................................................................................... 28 Slow Start......................................................................................................................... 28 Congestion Avoidance ..................................................................................................... 28 Fast Retransmit ................................................................................................................ 29 Fast Recovery................................................................................................................... 29 3. Sicherheit in Datennetzen ........................................................................................................ 31 3.1. Einleitung.................................................................................................................................... 31 3.1.1. Gefahren und Maßnahmen................................................................................................ 31 3.2. Kryptographische Grundlagen.................................................................................................... 32 3.2.1. Symmetrische Verschlüsselung ........................................................................................ 33 Electronic Code Book Mode (ECB) ................................................................................ 33 Cipher Block Chaining (CBC) ......................................................................................... 34 DES .................................................................................................................................. 34 3.2.2. Asymmetrische Verschlüsselung ...................................................................................... 35 Diffie Hellman ................................................................................................................. 36 RSA.................................................................................................................................. 36 Hashing ............................................................................................................................ 37 Digitale Signaturen........................................................................................................... 37 Zertifikate......................................................................................................................... 37 3.3. Firewalls ..................................................................................................................................... 38 Paketfilter ......................................................................................................................... 38 Circuit Level Gateway ..................................................................................................... 39 Application Level Gateway.............................................................................................. 39 3.4. IPSec........................................................................................................................................... 40 Authentication Header (AH) ............................................................................................ 40 Encapsulating Security Payload (ESP) ............................................................................ 41 Schlüsselmanagement ...................................................................................................... 41 3.5. SSL ............................................................................................................................................. 42 3.6. SOCKS ....................................................................................................................................... 43 4. Multimediakonferenzen ........................................................................................................... 45 4.1. Real-Time Applikationen ........................................................................................................... 45 4.1.1. Service-Modell.................................................................................................................. 45 Service-Klassen................................................................................................................ 46 4.2. Protokoll-Stack ........................................................................................................................... 47 4.3. H.323 .......................................................................................................................................... 48 4.3.1. H.323 Endknoten............................................................................................................... 48 ii Sichere Multimediakonferenzen Inhaltsverzeichnis 4.3.2. Kanäle ............................................................................................................................... 49 4.4. SIP .............................................................................................................................................. 50 4.5. RTP/RTCP.................................................................................................................................. 51 4.5.1. RTP ................................................................................................................................... 52 4.5.2. RTCP................................................................................................................................. 53 4.6. RSVP .......................................................................................................................................... 53 4.6.1. Reservierung ..................................................................................................................... 54 5. Windows Sockets ...................................................................................................................... 55 5.1. Das WinSock-Modell ................................................................................................................. 55 5.2. Programm-Schema ..................................................................................................................... 56 5.2.1. Client/Server Modell......................................................................................................... 56 Client-Server Assoziation ................................................................................................ 56 5.2.2. Programm-Skizze.............................................................................................................. 57 5.2.3. Socket öffnen .................................................................................................................... 57 5.2.4. Socket benennen................................................................................................................ 57 5.2.5. Socket-Assoziation............................................................................................................ 58 Szenario UDP................................................................................................................... 58 Szenario TCP ................................................................................................................... 59 5.2.6. Senden und Empfangen..................................................................................................... 59 Socket Demultiplexing..................................................................................................... 60 5.2.7. Socket schließen................................................................................................................ 60 5.2.8. Skizzen für TCP und UDP ................................................................................................ 62 5.3. Operationsmodi .......................................................................................................................... 63 5.3.1. Blocking I/O...................................................................................................................... 63 5.3.2. Nonblocking I/O................................................................................................................ 63 5.3.3. Overlapped I/O.................................................................................................................. 63 5.4. Service Provider Interface .......................................................................................................... 64 5.4.1. WinSock 2 als WOSA....................................................................................................... 64 5.4.2. Interface Modell ................................................................................................................ 65 5.4.3. Layered Service Provider.................................................................................................. 66 5.4.4. Aufgabenteilung................................................................................................................ 66 5.4.5. Mapping zwischen API- und SPI-Funktionen .................................................................. 67 5.4.6. Installation......................................................................................................................... 67 6. Benutzung des RLSP ................................................................................................................ 69 6.1. Aufgabenstellung........................................................................................................................ 69 6.2. Funktionsweise ........................................................................................................................... 70 6.2.1. Szenario TCP .................................................................................................................... 71 6.2.2. Szenario UDP.................................................................................................................... 72 6.3. Komponenten.............................................................................................................................. 73 6.3.1. RLSP ................................................................................................................................. 73 6.3.2. RLSP.INI........................................................................................................................... 74 [Configuration]................................................................................................................. 74 [Proxytunnel] ................................................................................................................... 75 iii Inhaltsverzeichnis Sichere Multimediakonferenzen [TCP Outgoing], [UDP Outgoing] ................................................................................... 75 [TCP Incoming], [UDP Incoming] .................................................................................. 75 6.3.3. Proxytunnel ....................................................................................................................... 76 client.ini, server.ini........................................................................................................... 76 6.3.4. Installer.............................................................................................................................. 76 6.3.5. Monitor.............................................................................................................................. 78 7. Zusammenfassung .................................................................................................................... 81 A. Abkürzungen............................................................................................................................. 83 B. Bibliographie............................................................................................................................. 89 B.1.Networking ................................................................................................................................. 89 B.2.Security....................................................................................................................................... 90 B.3.Internet Telefonie........................................................................................................................ 91 B.4.Windows Sockets........................................................................................................................ 92 B.5.Weiterführende Literatur ............................................................................................................ 92 iv Sichere Multimediakonferenzen Abbildungsverzeichnis Abbildungsverzeichnis Bild 2-1: Direktverbundenes Netzwerk: (a) Point-to-Point, (b) Multiple Access ........................... 4 Bild 2-2: Netzwerk mit Switches..................................................................................................... 4 Bild 2-4: Kommunikationskanal zwischen Prozessen ..................................................................... 7 Bild 2-6: Service- und Peer-Interfaces............................................................................................. 9 Bild 2-8: OSI Netzwerkarchitektur................................................................................................ 10 Bild 2-9: Internet Protokollgraph................................................................................................... 11 Bild 2-10: Alternative Darstellung des Protokollgraphen................................................................ 11 Bild 2-11: CSMA/CD Verfahren..................................................................................................... 12 Bild 2-12: Ethernet Frame Format................................................................................................... 13 Bild 2-13: Durch Switch entsteht Stern-Topologie.......................................................................... 14 Bild 2-14: Netzwerk dargestellt als Graph....................................................................................... 17 Bild 2-15: Ein Netzwerk aus physikalischen Netzen („internet“) ................................................... 18 Bild 2-16: IPv4 Packet Header ........................................................................................................ 19 Bild 2-17: IP Adressen: (a) Klasse A; (b) Klasse B; (c) Klasse C................................................... 20 Bild 2-18: Beispiel einer DNS Hierarchie ....................................................................................... 22 Bild 2-19: Format des UDP Headers ............................................................................................... 23 Bild 2-20: Format des TCP Headers................................................................................................ 25 Bild 2-21: Zeitachse für den Three-Way Handshake....................................................................... 26 Bild 2-22: Vereinfachte Darstellung für eine Richtung des TCP Datenaustausches: Daten fließen in eine Richtung, ACKs in die andere ................................................................................ 26 Bild 2-23: Beziehung zwischen TCP Sende- und Empfangsbuffer................................................. 27 Bild 3-1: Sicherheitslösungen in den TCP/IP Ebenen ................................................................... 32 Bild 3-2: Symmetrischer (Private Key) Algorithmus .................................................................... 33 Bild 3-3: Electronic Code Book Mode (ECB)............................................................................... 34 Bild 3-4: Cipher Block Chaining (CBC) ....................................................................................... 34 Bild 3-5: Eine Runde des DES-Algorithmus ................................................................................. 34 Bild 3-6: Unsymmetrischer (Public Key) Algorithmus ................................................................. 35 Bild 3-9: AH in Transport Mode: (a) Original IP Paket; (b) Paket mit AH Header ...................... 40 Bild 3-10: AH in Tunnel Mode: (a) Original IP Paket; (b) Tunneled Packet; (c) Paket mit AH Header............................................................................................................................. 40 Bild 3-11: VPN mit IPSec: Hosts verschlüsseln, Gateways authentifizieren die Daten.................. 41 Bild 3-12: Zustandekommen einer SSL Verbindung....................................................................... 43 Bild 4-1: Layered Protocol Archtitektur ........................................................................................ 46 v Abbildungsverzeichnis Sichere Multimediakonferenzen Bild 4-2: Multimediakonferenz-Architektur laut IETF ................................................................. 47 Bild 4-3: H.323 Komponenten....................................................................................................... 49 Bild 4-4: SIP-Verbindungsaufbau mit Hilfe eines Proxy-Servers ................................................. 50 Bild 4-5: RTP Header .................................................................................................................... 52 Bild 4-6: RSVP Multicast-Baum ................................................................................................... 54 Bild 5-2: Verbindungsorientierte Netzwerk-Programme (TCP).................................................... 61 Bild 5-3: Verbindungslose Netzwerk-Programme (UDP) – Setze den Namen des Empängers explizit ............................................................................................................................ 62 Bild 5-4: Verbindungslose Netzwerk-Programme (UDP) – Setze den Namen des Empfänger bei jedem Datagramm .......................................................................................................... 62 Bild 5-5: Windows Sockets 2 Struktur als WOSA-Komponente in Windows.............................. 64 Bild 5-6: Layered Protocol Archtitektur ........................................................................................ 65 Bild 6-1: Funktionsweise des RLSP .............................................................................................. 70 Bild 6-2: Szenario TCP: Informationsfluss.................................................................................... 71 Bild 6-3: Szenario UDP mit Mapping zwischen Udp und Tcp...................................................... 72 Bild 6-4: Die graphische Version des Installers ............................................................................ 77 Bild 6-5: Der Monitor .................................................................................................................... 78 vi Sichere Multimediakonferenzen Einleitung 1. Einleitung Die Verschmelzung des traditionellen leitungsvermittelten Telefonnetzwerks mit paketvermittelten IPNetzen bringt zum einen Kosteneinsparungspotenziale, zum anderen entstehen neue Services. Der professionelle Einsatz von Internet-Telephonie und Multimediakonferenzen verlangt eine Sicherheitsinfrastruktur, die die Integrität und Vertraulichkeit der Daten sowie die Authentizität der Teilnehmer sicherstellt. Für den praktischen Teil der Diplomarbeit wurde ein Ansatz gewählt, der diese Aufgaben in einer für Netzwerk- Applikationen transparenten Weise erfüllt. Außerdem ist das Ergebnis der Arbeit nicht auf bestimmte Anwendungen beschränkt. Vielmehr werden beliebige IP Adressen und Ports spezifiziert, die über einen SSL-gesicherten Kanal kommunizieren sollen. Damit ist die Realisierung von Virtual Private Networks (VPN), also die Kommunikation zwischen vertrauenswürdigen Netzen über das unsichere Internet hinweg, möglich. Das Ergebnis ist eine dynamische Bibliothek (DLL), die die Service Provider Schnittstelle von Windows Sockets 2 nutzt und als Layered Service Provider in das Windows System eingebunden wird. Die DLL befindet sich logisch zwischen Applikation und TCP/IP-Stack. Nach der Registrierung gehen Datenströme von Applikationen an die DLL und werden über den sicheren SSL-Kanal gesendet. Der vorliegende Text beschreibt den theoretischen Hintergrund, in dem die Aufgabenstellung angesiedelt ist und leitet dann in die Erläuterung der praktischen Lösung über. Zunächst folgt eine Darstellung der Konzepte moderner Netzwerke mit Bezug auf das Internet. Kapitel 2 beschreibt ausgehend von den Anforderungen an Netzwerke jene Technologien, die Computer auf unterschiedlichen Ebenen miteinander verbinden. Es werden sowohl lokale Netzwerke betrachtet als auch die Strukturen des Internets. Kapitel 3 ist eine Einführung in Sicherheitskonzepte, die zur Sicherung von Netzwerkdaten eingesetzt werden. Zuerst werden die kryptographischen Grundlagen wie symmetrische und asymmetrische Verschlüsselung erläutert, die dann in Konzepten und Protokollen Anwendung finden, um Daten zwischen Computern im Netzwerk zu sichern. Zu diesen zählen unter anderem Firewalls und Secure Socket Layer (SSL). Im anschließenden Kapitel werden Multimediakonferenzen behandelt. Diese gehören zur Klasse der Real-Time-Applikationen und haben besondere Ansprüche an die Verzögerungscharakteristik des Netzwerks. Eine Reihe von Protokollen bildet die Basis für Multimediakonferenzen. Im Bereich des Verbindungsaufbaus gibt es zwei konkurrierende Ansätze, die jeweils beschrieben werden. Zusätzlich kommen Protokolle zur Übertragung von Bild und Ton in Echtzeit zum Einsatz. 1 Einleitung Sichere Multimediakonferenzen Die Beschreibung des praktischen Teils leitet das Kapitel über Windows Sockets ein. Dieses erläutert wesentliche Grundlagen, die der Erstellung des Security Providers zugrunde liegen. Dazu gehört einerseits die Struktur von Netzwerkapplikationen und deren Operationsmodi, andererseits das Service Provider Interface von Windows Sockets 2, das erst die Erstellung eines flexiblen Security Providers ermöglicht, der nicht an einzelne Applikationen gebunden ist. Das Ergebnis der praktischen Arbeit selbst wird im abschließenden Kapitel vorgestellt. Mein Dank gilt Prof. Reinhard Posch und DI Herbert Leitold für die Ermöglichung und die Betreuung der Arbeit während der vergangenen Monate. Graz, im April 2000 2 Sichere Multimediakonferenzen Computer Netzwerke 2. Computer Netzwerke Netzwerke zählen zu den zentralen Gebieten der Computerwissenschaften. Sie werden von vielen Menschen genutzt, unter anderem für populäre Dienste wie Emails zu versenden, durchs World Wide Web zu „surfen“ sowie mit zunehmender Bandbreite die Möglichkeit Videokonferenzen zu führen. In diesem Kapitel sollen die Konzepte vorgestellt und erläutert werden, mit Hilfe derer Netzwerke gebildet werden. Es beginnt damit, die Anforderungen zu definieren und mögliche Architekturen vorzustellen, in deren Mittelpunkt Protokolle stehen. Von diesen Architekturen ausgehend werden physische Verbindungen zwischen zwei bzw. mehreren Computern erstellt. Die Technologien dazu heißen etwa Ethernet oder Token Ring und bilden lokale Netzwerke. Diese stoßen an ihre Grenzen wenn es darum geht, geographisch weit entfernte sowie eine größere Anzahl an Hosts miteinander zu verbinden. Packet switching heißt das Konzept, um die Kommunikation zwischen nicht direkt verbundenen Hosts zu ermöglichen. Die Datenpakete durchlaufen Switches und Router, um ans Ziel zu gelangen. Dazu müssen Router die nötige Kenntnis über die Topologie des Netzwerks erlangen, sodass die Daten den Empfänger erreichen. Viele Pakete unterschiedlicher Sender passieren zur selben Zeit den Router, sie streiten sich sozusagen um die Aufmerksamkeit des Routers. Dieser Vorgang heißt Contention. Wenn die Buffer des Routers erschöpft sind, müssen weitere Pakete verworfen werden (Congestion). Der Aufbau dieses Kapitels erstreckt sich von der Analyse der Anforderungen und der Architekturen von Netzwerken über physikalische Netze – das sind Netze, deren Hosts ein gemeinsames Übertragungsmedium teilen – bis zu Transport-Protokollen, die für den geordneten Datentransfer aus der Sicht von Applikationen verantwortlich sind. Der anfänglichen Anforderungsanalyse wird viel Platz eingeräumt, da sie für das Verstehen des Funktionierens von Netzwerken eine wichtige Basis bildet. Auf das Konzept des Packet Switching wird in einem eigenen Abschnitt dieses Kapitels eingegangen, da sich dieses grundlegend von der traditionellen Methode der Vermittlung im Telefonnetz unterscheidet. Von diesen Konzepten ausgehend folgt eine Erläuterung des zentralen Internet Protokolls (IP). Zusätzlich wird noch das Namenssystem des Internet vorgestellt, das Domain Name System. Auf das IP Protokoll setzen schließlich die Transport-Protokolle auf, deren Analyse den Abschluss dieses Kapitels bildet. 2.1. Grundlagen Den Aufbau und die Technologien von Netzwerken ergeben sich aus einer Reihe von Anforderungen, die die Basis bilden für Applikationen wie etwa FTP, WWW und Videokonferenzen [PD96]. In diesem Abschnitt sollen zunächst diese Anforderungen analysiert werden, um danach auf Netzwerkarchitekturen überleiten zu können, die sich eignen, diese Anforderungen zu erfüllen. Wie 3 Computer Netzwerke Sichere Multimediakonferenzen (a) (b) Bild 2-1: Direktverbundenes Netzwerk: (a) Point-to-Point, (b) Multiple Access Bild 2-2: Netzwerk mit Switches im folgenden gezeigt wird, gibt es zunächst die Anforderung, dass Netzwerke ermöglichen sollen, Verbindungen zwischen Computern herzustellen, um damit einen Datenaustausch zu erreichen. Dabei sollen die stets beschränkten Ressourcen möglichst effizient ausgenutzt werden. Dazu ist es nötig, Kriterien für Effizienz zu analysieren. Schließlich wird noch gezeigt, welche Funktionen ein Netzwerk den Applikationen zur Verfügung stellen soll und welche Parameter der Messung von Netzwerkperformance dienen. Der nächste Schritt ist die Ableitung einer allgemeinen Architektur als Vorlage für Implementierungen. Dazu werden die Konzepte von Protokollen und Schichten, auf denen Protokolle implementiert werden, vorgestellt. Als Referenzarchitektur gilt die OSI-Architektur mit sieben Schichten. Schließlich wird die Internet-Architektur vorgestellt. 2.1.1. Anforderungen Dieser Abschnitt gliedert sich in vier Teile, die wesentliche Anforderungen an Netzwerke darstellen. Als erstes wird gezeigt, dass Verbindungen nötig sind, um einen Datenaustausch zwischen Computern zu ermöglichen. Daran schließen die Themen von effizienter Ressourcennutzung sowie Funktionalität bezüglich Applikationen und Performance-Parametern an. Verbindungen Zu allererst wird von einem Netzwerk verlangt, Verbindungen zwischen Computern bereitzustellen. Das passiert auf verschiedenen Ebenen. Auf unterster Ebene kann ein Netzwerk aus zwei oder mehreren Computern (Knoten, Nodes) bestehen, die über ein physikalisches Medium verbunden sind (Links). Im Falle eines einzelnen Paares spricht man von point-to-point, für den Fall mehrerer Knoten, die sich ein Medium teilen, verwendet man den Begriff multiple access, wie in Bild 2-1 zu sehen. Nicht alle Computer benötigen eine physikalische Verbindung zwischen einander. Kooperierende Knoten schaffen indirekte Verbindungen, wie im Beispiel eines switched networks. Dieser Typ von Netzwerken besteht aus Computern, die jeweils über point-to-point links verbunden sind. Computer, die mit mindestens zwei Links verknüpft sind, verwenden eine Logik, die in Software implementiert ist, um Daten weiterzuleiten (forwarding). Diese Computer stellen sogenannte Switches dar. Zwei Typen eines switched networks sind circuit switched (leitungsvermittelte) Netzwerke und packet switched (paketvermittelte) Netzwerke. 4 Sichere Multimediakonferenzen Computer Netzwerke Leitungsvermittelte Netze finden Anwendung im Telefonsystem. Es besteht eine Verbindung mit reservierter Bandbreite zwischen den Teilnehmern, die im Verbindungsaufbau zustande kommt. Paketvermittelte Netze werden oft für Computer-Netze eingesetzt. Es gibt keinen expliziten Verbindungsaufbau, sondern es werden diskrete Datenblöcke gesendet, die sich ihren Weg durchs Netzwerk bahnen, jedoch weder garantiert ankommen noch jedesmal mit der selben Zeitverzögerung. Paketvermittelte Netze verwenden die Strategie store and forward, d. h. die Pakete (genannt Packets oder Messages – je nach Transport Protokoll) werden zur Gänze in den Switches zwischengespeichert bevor sie den weiteren Weg durchs Netz antreten. Die Wolke in Bild 2-2 trennt die Knoten, die das Netzwerk implementieren (die Netzelemente) von den Knoten, die die Dienste des Netzwerks benutzen (die Hosts). Das Symbol der Wolke ist im allgemeinen Platzhalter für eine beliebige Art eines Netzes und findet oft Verwendung in Skizzen. Die nächste Ebene, in der Computer indirekt verbunden werden, ist das Zusammenführen unabhängiger Netzwerke zu einem sogenannten internetwork oder kurz internet. Dabei steht internet mit kleinem i ganz allgemein für ein Netz aus mehreren einzelnen Netzwerken, und das Internet für das konkrete operierende TCP/IP Internet. Die Funktion, die Switches zwischen Endknoten hat, nämlich Daten weiterzuleiten, erledigen Router (auch Gateways genannt) zwischen zwei oder mehreren Netzen. Damit ein Host die Möglichkeit hat, einen anderen Host als Empfänger zu definieren, erhalten alle Hosts eindeutige Adressen in numerischer Form zugewiesen, die sie von allen anderen Hosts im Netzwerk unterscheiden. Wenn Sender und Empfänger nicht direkt verbunden sind, ist es die Aufgabe der Switches und Router, die Daten auf geeignetem Weg durchs Netzwerk zu schleusen. Der Prozeß der systematischen Entscheidung, wohin Datenpakete weitergeleitet werden sollen, nennt sich Routing. Während bis dato davon ausgegangen wurde, dass der Source Node seine Daten an einen einzelnen Destination Node sendet – diese Adressierung nennt sich Unicast – kommt es gelegentlich auch vor, dass der Sender die Daten an alle Knoten im Netzwerk senden möchte (Broadcast) oder an einen Teil, jedoch nicht an alle Knoten (Multicast). Spezielle Adressen müssen also als Broadcast- bzw. Multicast-Adressen reserviert werden. Kosteneffiziente Ressourcen-Aufteilung Wie erwähnt herrscht das Modell des packet switched Netzwerks vor, wenn es sich um Computernetze handelt. Der Grund dafür liegt in der höheren Effizienz gegenüber den circuit switched Netzen, wie im folgenden gezeigt wird. Wenn jedes beliebige Paar von Hosts in einem indirekt verbundenen Netzwerk miteinander kommunizieren möchte, dann müssen die Ressourcen des Netzwerks aufgeteilt werden. Dabei kommt erschwerend hinzu, dass die Hosts jeden beliebigen Link potenziell zur selben Zeit in Anspruch nehmen. Das fundamentale Konzept dazu heißt Multiplexing, d. h. Aufteilen von Systemressourcen auf mehrere Benutzer. Die Daten mehrere Hosts werden also multiplexed auf den physikalischen Link und, nachdem die Daten den Link passiert haben, wieder demultiplexed, also wieder zum ursprünglichen Datenstrom zusammengesetzt. Es gibt verschiedene Arten des Multiplexing; Synchronous time division multiplexing (STDM) teilt den Teilnehmern eine feste Zeiteinheit zu. Frequency division multiplexing (FDM) vergibt einen Teil des gesamten zur Verfügung stehenden Frequenzspektrums, den der Teilnehmer für sich nutzen kann. 5 Computer Netzwerke Sichere Multimediakonferenzen ... Bild 2-3: Multiplexing von Paketen auf gemeinsam genutzten Link Daneben gibt es noch Statistical multiplexing. Dieses hat den großen Vorteil, daß hier keine Leerlaufzeiten entstehen, wenn ein Sender zeitweilig keine Daten versendet. Der Link wird zwar auch auf Zeitintervalle aufgeteilt, allerdings erfolgt die Zuteilung zu einem Sender auf Anfrage, also nur dann, wenn auch Daten anstehen. Da einige Sender eventuell sehr große Datenmengen versenden möchten, müssen sich alle auf eine Größe einigen, auf die des sogenannten Packet. Jeder Sender muß die Datenblöcke also im allgemeinen auf diese Größe fragmentieren, und der Empfänger muß darauf vorbereitet sein, die Packets wieder zu größeren Blöcken zusammenzusetzen. Die Entscheidung, welches Packet als nächstes gesendet wird, liegt bei den Netzwerkelementen. Jeder Router bzw. Switch entscheidet unabhängig; Sein Ziel sollte es sein, möglichst fair zu entscheiden. Beispiele für mögliche Strategien sind Round-Robin bzw. FIFO (First in – first out). Es kann vorkommen, dass der Router bzw. Switch mehr Pakete erhält als er über den Link weitersenden kann. In diesem Fall versucht er, Daten in internen Buffern temporär abzulegen. Sind die Buffer überlastet, müssen Pakete zwangsläufig verworfen werden. Diese Situation nennt man Congestion. Funktionalität Die Anforderungen an ein Netzwerk aus Applikations-Perspektive sind größer als lediglich das effiziente Transportieren von Datenpaketen in einer Ansammlung von Computern. Die vielfältigen Aufgaben, die bei der Kommunikation zwischen Applikationen auf verschiedenen Hosts entstehen, könnten in jeder einzelnen Applikation neu entwickelt werden, das ist aber sicher nicht besonders effizient. Daher ist es ein guter Kompromiss, gemeinsame Funktionalität einmal zu implementieren und den Anwendungen dann zur Verfügung zu stellen, die die Dienste dann nutzen können. Intuitiv werden Netzwerke als Provider von logischen Kanälen (Channels) gesehen, über die Applikationsprozesse Daten austauschen. Dies ist in Bild 2-4 veranschaulicht. Jeder Kanal stellt die Services dar, die die Applikation benötigt und stellt damit eine abstrakte Verbindung zwischen zwei Prozessen dar – so wie die Wolke Konnektivität zwischen Knoten symbolisiert. Die Herausforderung besteht darin, zu erkennen, welche Funktionalität von seiten der Anwendungen gefragt ist. Mögliche Bespiele sind garantierte Zustellung, Eintreffen der Datenpakete in der selben Reihenfolge, in der sie gesendet wurden, abhörsichere Kanäle mit Hilfe von Verschlüsselung. 6 Sichere Multimediakonferenzen Host Computer Netzwerke Host Applikation Host Host Applikation Bild 2-4: Kommunikationskanal zwischen Prozessen FTP sowie digitale Bibliotheken etwa laufen nach dem Schema eines Request/Reply Kanals ab. Eine Partei macht eine Anfrage (der Client), die vom Befragten, dem Server, beantwortet wird, in dem Dateien oder andere Informationen transferiert werden (so der Client die nötigen Zugriffsrechte besitzt. Während eine FTP Anfrage noch immer als erfolgreich gilt, auch wenn sie mehrere Sekunden in Anspruch nimmt, hat die Klasse von Applikationen für Videoübertragung und Videokonferenzen andere Anforderungen. Wird die Verzögerung der Übertragung kurzzeitig zu groß, sind die zu spät angekommenen Daten wertlos, da kein kontinuierliches Abspielen der Bild- oder Tondaten mehr möglich ist. Aus diesen Beispielen geht hervor, dass es mindestens zwei unterschiedliche Typen von Kanälen geben sollte: einen Request/Reply-Kanal und einen Message Stream-Kanal. Während Request/ReplyKanäle Daten verlässlich übertragen sollen, ist für Message Stream-Kanäle rasche Übertragung wichtiger. Für beide ist Übertragung in der korrekten Reihenfolge wichtig und auch Abhörsicherheit kann für beide interessant sein. Die Eigenschaften der Kanäle richten sich also nach den Anforderungen der übergeordneten Applikationen. Von der darunter liegenden Technologie aus betrachtet gibt es dagegen Limitationen, was diese Technologie bieten kann. Man hat mehrere Fehlerquellen zu beachten, die sich negativ auf die Verlässlichkeit des Netzwerks auswirken: Bit Fehler, Packet Fehler und Fehler auf Node und Link Level. Diese Fehlerquellen werden an dieser Stelle nicht weiter vertieft. Performance Wenn es um Netzwerke geht, ist es notwendig, von Anfang an den Aspekt der Effizient einzubeziehen. Es reicht nicht aus, etwas zuerst korrekt zu implementieren und danach zu optimieren. Netzwerkperformance wird in Bandbreite als auch in Verzögerung (Latency, Delay) gemessen. Die Bandbreite gibt die Anzahl der Bits an, die pro Zeiteinheit durch das Netzwerk bzw. über den Link transportiert werden können, z. B. 10 MBit/s. Umgekehrt kann man sich vorstellen, dass jedes einzelne Bit in einem 10 MBit/s Netzwerk 0,1 µs (10-7 s) benötigt, um in das Netzwerk zu gelangen. 7 Computer Netzwerke Sichere Multimediakonferenzen Delay Bandwidth Bild 2-5: Netzwerk abstrahiert als Leitung mit Länge und Durchmesser Latency ist die Zeit, die ein Bit benötigt, um von einem Ende des Netzwerks zum anderen zu gelangen, etwa 25 ms für einen transkontinentalen Link. Die sogenannte Round Trip Time (RTT) ist die Summe der Verzögerungen in beide Richtungen, also von einem Ende zum anderen und wieder zurück. Die wahrgenommene Verzögerung wird von drei Parametern beeinflusst: durch die endliche Ausbreitungsgeschwindigkeit des Lichts, die Zeit um einen Datenblock zu transportieren und durch Bufferzeiten innerhalb der Switches und Router: Verzögerung = Ausbreitung + Übertragung + Bufferzeiten Ausbreitung = Distanz / Lichtgeschwindigkeit Übertragung = Datengröße / Bandbreite Man erkennt, dass die gesamte Verzögerung potenziell durch die Lichtgeschwindigkeit begrenzt wird. Je nach Anwendung stehen unterschiedliche Aspekte der Verzögerung im Vordergrund. Beim Versenden eines einzelnes Byte wird Verzögerung wesentlich von der Distanz bestimmt, bei mehreren MByte dagegen maßgeblich von der Bandbreite. Das Delay × Bandwidth Produkt schließlich misst die Anzahl der Bits, die in einem Kanal Platz finden. Es gibt somit auch an, wie viele Bits der Sender absenden muss, bevor der Empfänger das erste Bit davon erhält. Viele Anwendungen fordern vom Netzwerk einfach soviel Bandbreite wie sie erhalten können. Andere, etwa Videoapplikationen, haben aufgrund der Bilddaten genau bekannte Anforderungen. Auch in Bezug auf Latency gibt es Anforderungen. Manche möchten einfach nur eine möglichst kurze Verzögerung, anderen ist es wichtig, dass die Verzögerung nicht zu stark variiert. Diese Variation der Verzögerung wird Jitter genannt. 2.1.2. Netzwerkarchitektur Zu den genannten Anforderungen an Netzwerke kommt hinzu, dass Netzwerke niemals eine konstante Struktur beibehalten, sondern ständig weiterentwickelt werden, um sich an neue Situationen und Anforderungen von Anwendungen und Technologie anzupassen [PD96]. Um diese komplexe Situation überschaubar zu machen, wurden Architekturen entwickelt, von denen die OSI- und die Internet-Architektur die am weitesten verbreiteten sind [Tan92]. Beiden gemeinsam ist die Organisation in Schichten, die unterschiedliche Teile der gesamten Funktionalität implementieren. Nach einer Erläuterung des Schichtenmodells folgt das OSI-Modell, da es ein wichtiges Referenzmodell ist, bevor die Internet-Architektur vorgestellt wird. 8 Sichere Multimediakonferenzen Host Übergeordnetes Objekt Protokoll Bild 2-6: Computer Netzwerke Host Service Interface Peer-zu-Peer Interface Übergeordnetes Objekt Protokoll Service- und Peer-Interfaces Schichten und Protokolle Zusätzliche Abstrahierung führt zum Design mit Hilfe von Schichten (Layer). Die Idee ist, die Dienste einer darunterliegenden Hardware zu nutzen und eine Anzahl an Schichten darüber zu legen. Jede Schicht baut auf die untere auf und implementiert ein höheres Service Level. Das Schichtenmodell bringt zwei Vorteile: Erstens zerlegt es die komplexe Aufgabe in kleinere, besser überschaubare Teile. Zweitens entsteht ein modulares Design, in der neue Funktionalität gezielt in eine Schicht eingebaut werden kann. Die Objekte, die die einzelnen Schichten darstellen, sind die Protokolle. Jedes Protokoll besitzt zwei Interfaces: ein Service Interface für lokale Objekte und ein Peer Interface zum Gegenstück auf einer anderen Maschine, das die Art und Weise festlegt, wie die beiden Peers Nachrichten austauschen, wie in Bild 2-6 dargestellt. Um die Daten mit dem Peer auszutauschen, gibt jede Schicht die Daten an das Protokoll unterhalb weiter, bis es schließlich auf den physikalischen Link gesendet wird. Die Protokolle, die das Netzwerk gemeinsam darstellen, werden im Protokollgraph zusammengefasst. Die Knoten stellen die Protokolle dar, die Kanten Abhängigkeitsbeziehungen. Die Protokolle, die sich eine Anwendung zu Nutze macht, um ein gewisses Service zu verwenden, nennt man Protokoll-Stack (z. B. TCP/IP Stack). Standards für Protokolle und Protokollgraphen werden von ISO (International Standards Organization) und IETF (Internet Engineering Task Force) festgelegt. Die Regeln, die Form und Inhalt der Protokollgraphen festlegen, werden als Netzwerkarchitektur bezeichnet. Kapselung Layer i+1 Ein Protokoll, das Daten von einer übergeordneten Schicht erhält, interpretiert diese Daten nicht, da es nichts darüber weiß, ob es sich z. B. um eine Email Nachricht, ein Videoframe oder sonst etwas handelt. Andererseits muss ein Protokoll mit seinem Peer einige Informationen austauschen, sodass dieser die empfangenen Daten in der richtigen Weise überarbeiten kann. Diese Kontrollinformationen werden in der Regel als Header vor die eigentliche Nachricht gestellt oder als Trailer an die Nachricht angehängt, bevor sie gesendet, d. h. an die nächste niedrigere Schicht weitergegeben wird. Das Format des Headers ist im Protokoll definiert. Die eigentliche Nachricht wird Datenblock Layer i Header Datenblock Layer i-1 Bild 2-7: Kapselung 9 Computer Netzwerke Sichere Multimediakonferenzen End Host End Host Application Application Presentation Presentation Session Session Knoten im Netzwerk (Switches, etc.) Transport Transport Network Network Network Network Data link Data link Data link Data link Physical Physical Physical Physical Bild 2-8: OSI Netzwerkarchitektur Body genannt und ist in der neu entstandenen, vergrößerten Nachricht gekapselt (encapsulated). Der Peer, der die Nachricht inklusive Header (bzw. Trailer) empfängt, macht die umgekehrten Operationen: der Header wird entfernt, die Aktionen, die der Header impliziert, werden auf den Message Body angewendet, und das Resultat an das höhere Objekt weitergegeben. Multiplexing und Demultiplexing Multiplexing gibt es nicht nur als Technik für Packet Switching, sondern auch, um die Beziehung zwischen zwei übereinander gelegenen Protokollen herzustellen. Damit das untere Protokoll feststellen kann, an welches von den vielen möglichen Protokollen die Daten weitergegeben werden sollen, besitzt der Header einen Demultiplexing Schlüssel (demux key), der senderseitig – so wie alle anderen Header-Felder – eingetragen wird und das übergeordnete Protokoll identifiziert. OSI Architektur ISO war eine der ersten Organisationen, die eine Spezifikation aufstellte, um Netzwerke zu implementieren. Diese Architektur heißt Open Systems Interconnection (OSI) [TAN92] und teilt die Netzwerkfunktionalität auf sieben Schichten auf, die ein Referenzmodell für Protokollgraphen darstellen. Die ITU (International Telecommunications Union) veröffentlicht Protokollspezifikationen auf Grundlage der ISO Architektur, z. B. X.25 als Standard für packet-switching Protokolle oder X.400 für Emails. Die sieben Schichten sind in Bild 2-8 dargestellt. Die untersten drei Schichten sind in allen Netzwerkknoten vorhanden und kommen zum Einsatz, wenn Daten einen Host passieren, während nur Endknoten die oberen Schichten implementieren, die dann benutzt werden, wenn Daten vom Benutzer gesendet oder empfangen werden. 10 o Die physische Schicht hat die Aufgabe, Bits über ein Kommunikationsmedium zu transportieren und bezieht sich auf die Hardware, die diese Aufgabe erfüllt. o Die Data Link Schicht aggregiert eine Anzahl von Bits zu einem sogenannten Frame. Sie ist für Fehlerkontrolle und Synchronisation der physischen Schicht verantwortlich. Diese Schicht wird meist von Netzwerkadaptern (Ethernet etc.) implementiert. Sichere Multimediakonferenzen FTP HTTP Computer Netzwerke NV TCP UDP Applikation TCP UDP IP IP Netzwerk Ethernet FDDI ... Token Ring Bild 2-10: Alternative Darstellung des Protokollgraphen Bild 2-9: Internet Protokollgraph o Die Network Schicht kümmert sich um das Routing und Forwarding von Paketen in paketvermittelten Netzen. o Der Transport Layer implementiert Kanäle zwischen Prozessen, die Nachrichten austauschen. Diese Schicht kontrolliert, dass die Pakete vollständig und in korrekter Reihenfolge übertragen werden. o Session soll die verschiedenen Datenströme einer Applikation organisieren. Diese Schicht koordiniert die Kommunikation und den dazu nötigen Verbindungsaufbau und die Terminierung. o Presentation ist dafür zuständig, Datenformate von eingehenden und ausgehenden Daten zu konvertieren. Dies kann z. B. die Darstellung eines Textes in Form eines Dialogfensters sein. Diese Schicht ist meist im Betriebssystem implementiert. o In der Application Schicht werden die Kommunikationspartner identifiziert sowie applikationsspezifische Parameter verhandelt. In dieser Schicht ist etwa das FTP Protokoll zum Dateiaustausch angesiedelt. Internet Architektur Die Internet-Architektur wird auch TCP/IP Architektur [PD96, Sta97] genannt und baut auf Erfahrungen auf, die im Zuge des ARPANET Projekts des U.S. Verteidigungsministeriums gesammelt wurden. Die OSI Architektur wiederum kam erst später und wurde von ARPANET und Internet Architektur mitbeeinflusst. Die Architektur besteht aus vier Schichten, die in Bild 2-9 dargestellt sind: Die unterste Schicht bilden die Data Link-Protokolle. Sie bestehen meist aus einer Kombination aus Hardware (Adapter) und Software (Device Driver). Hier finden sich die bekannten Ethernet und FDDI Protokolle. Das Internet Protocol (IP) steht auf der zweiten Ebene, der Network-Schicht. Es ermöglicht den Zusammenschluss unterschiedlicher Netzwerktechnologien in ein einziges logisches Netzwerk. Neben dem IP Protokoll finden sich auf dieser Ebene noch ICMP (Internet Control Message Protocol) und ARP (Address Resolution Protocol). IP stellt jedoch ein zentrales Element im Protokoll-Stack dar. Die Transport-Schicht enthält zwei wesentliche Protokolle: das Transmission Control Protocol (TCP) und das User Datagram Protocol (UDP). Sie stellen zwei alternative logische Kanäle bereit. TCP bietet einen verlässlichen Byte-Stream Kanal und UDP einen unverlässlichen Datagram- (entspricht einer Message) Kanal. TCP und UDP werden Transport-Protokolle sowie auch End-zu-End-Protokolle 11 Computer Netzwerke Sichere Multimediakonferenzen Carrier Sense Multiple Access Collision Detection Bild 2-11: CSMA/CD Verfahren genannt. Eine Eigenschaft des Internet Protokollstack ist, dass das Schichtenmodell nicht allzu streng verstanden werden will. Applikationen können direkt IP verwenden, also ohne TCP und UDP. Über der Transport-Schicht laufen Applikationsprotokolle, wie etwa FTP, SMTP (Simple Mail Transfer Protocol) oder HTTP (HyperText Transport Protocol). Sie sind nicht zu verwechseln mit Applikationen an sich. Applikationsprotokolle ermöglichen z. B. verschiedenen Email-Applikationen, miteinander zu kommunizieren, indem sich alle an das standardisierte Applikationsprotokoll SMTP halten. Eine bemerkenswerte Tatsache soll noch angebracht werden. Innerhalb der IETF gibt es die Kultur, nur bereits lauffähige Protokolle als Standard zuzulassen. Damit will man sicher gehen, dass nur effizient implementierbare Protokolle eingesetzt werden. Eine gute Charakterisierung der Arbeit der IETF stellt folgende Aussage dar: „We reject kings, presidents, and voting. We believe in rough consensus and running code“ (Dave Clark). 2.2. Direct Link Netzwerke Das einfachste vorstellbare Netzwerk ist eines, in dem alle Stationen über ein physikalisches Medium direkt verbunden sind. Mit dem Zusammenschließen mit Hilfe von Kupferleitungen ist es natürlich nicht getan, es gibt einige Probleme, um die sich jede Netzwerktechnologie kümmern muss, egal ob es sich um Point-to-Point Links, Carrier Sense Multiple Access Netzwerke oder Token Rings handelt [Sta97, PD96]: Kodierung: Bits müssen auf dem gemeinsamen Medium so übermittelt werden, dass sie der Empfänger verstehen kann. Dazu wird die logische 1 in ein High-, die 0 in ein Low-Signal verwandelt. Es entsteht die Problematik, dass die Clocks von Sender und Empfänger miteinander ständig synchronisiert sein müssen, damit die Daten korrekt dekodiert werden können. Dafür gibt es einige Kodierungs-Strategien wie z. B. NRZ (Non Return To Zero) und Manchester encoding . 12 Sichere Multimediakonferenzen Computer Netzwerke 64 48 48 16 Präambel Dest addr Src addr Type 32 Body 8 CRC Postambel Bild 2-12: Ethernet Frame Format Framing: Die Interpretation der Bit-Sequenzen als zusammengehörende Nachrichtenblöcke. Netzwerkadapter leisten diese Aufgabe, d. h. die Hosts senden und erhalten Frames. Fehlererkennung: Frames können während der Übertragung unbeabsichtigt modifiziert werden. Solche Fehler müssen erkannt und entsprechende Maßnahmen eingeleitet werden. Dazu wird redundante Information in den Frames mit übertragen, wie etwa mit Hilfe von CRC (Cyclic Redundancy Check) oder Checksummen. Medienzugriffskontrolle: Weil alle Hosts denselben Leiter teilen, muss der Zugriff darauf in einer fairen Weise gestaltet werden. In weiterer Folge soll beispielhaft die Technologie des Ethernet vorgestellt werden, wo ein gemeinsamer Bus zur Datenübertragung verwendet wird. Andere Technologien verwenden z. B. eine ringförmige Struktur der Datenleitungen wie etwa Token Ring und FDDI, auf die nicht näher eingegangen wird. 2.2.1. Ethernet (CSMA/CD) Ethernet [Bor96] ist eine erfolgreiche Netzwerktechnologie und ein Beispiel für Carrier Sense Multiple Access/Collision Detection (CSMA/CD). Das klassische Ethernet unterstützt eine Übertragungsrate von 10 MBit/s. Wie in Bild 2-11 zu sehen, senden und empfangen mehrere Stationen Frames über einen gemeinsamen Bus (Multiple Access). Alle Knoten haben die Fähigkeit zu unterscheiden, ob der Bus im Augenblick von einem anderen Teilnehmer benutzt wird oder nicht (Carrier Sense). Weiters kann jeder Knoten zugleich Bits auf den Bus plazieren und den Bus abhören, ob ein Frame eines anderen Knotens mit dem eigenen kollidiert (Collision Detection). Diese Situation kann entstehen, wenn beide Knoten quasi gleichzeitig mit dem Senden beginnen. Physikalische Eigenschaften Ein Ethernet Bus besteht aus einem Koaxial-, Twisted Pair- oder Glasfaserkabel und ist in der Länge beschränkt. Hosts, die sich einklinken, tun das mit Hilfe eines Transceivers, der für Übertragen und Abhören zuständig ist und der wiederum mit dem Ethernet Adapter verbunden ist. Der Adapter implementiert die gesamte Logik und ist selbst an den Host angeschlossen. Bis zu fünf EthernetBussegmente können per Repeater in Serie geschaltet werden. Alle Signale, die ein Host aussendet, werden durch das gesamte Netz geschickt. An den Enden werden die Signale absorbiert, so dass sie nicht reflektiert werden und andere Signale überlagern. Ethernet benutzt das Manchester Verfahren zur Bitkodierung. 13 Computer Netzwerke Sichere Multimediakonferenzen Bild 2-13: Durch Switch entsteht Stern-Topologie Frame Format Das Format eines Ethernet-Frames ist in Bild 2-12 dargestellt. Er beginnt mit einer 64 Bit-Präambel aus alternierenden Nullen und Einsen. Diese dient dazu, den Empfänger zu synchronisieren. Source und Destination Host werden durch 48 Bit-Adressen identifiziert. Das Packet Type Feld dient als Demultiplexing Schlüssel, der das übergeordnete Protokoll definiert. Ein Frame kann maximal 1500 Byte Daten enthalten, jedoch mindestens 46 Byte, um Kollisionen feststellen zu können. 32 Bit Checksumme und Postambel bezeichnen das Ende des Frames. Adressen Die Adresse ist fest ins ROM des Adapters eingebrannt. Sie ist weltweit eindeutig und die 6 Bytes werden meist in folgender Form, mit Doppelpunkten getrennt und ohne führende Nullen, dargestellt: z. B. 8:0:2b:e4:b1:2. Um die Eindeutigkeit zu erreichen, erhält jeder Hersteller einen Präfix, z. B. 0x08002 für AMD. Jedes Frame, das durch das Ethernet läuft, wird von jedem Adapter empfangen. Der leitet es jedoch nur dann weiter an den Host, wenn −= es die eigene Adresse wiedererkennt, −= es sich um eine Broadcast-Adresse handelt, −= es sich um eine Multicast-Adresse handelt und der Adapter vom Host angewiesen wurde, auf diese Adresse zu hören, −= der Adapter in den promiscous mode gesetzt wurde, d. h. alle Pakete akzeptiert werden sollen. Sende-Algorithmus Frames werden von jedem Adapter sofort gesendet, wenn der Bus nicht bereits verwendet wird [PD96]. Zwischen zwei Frames muss allerdings 9,6 µs gewartet werden, um den Bus nicht zu blockieren. Sollten zwei oder mehr Adapter zugleich beginnen, Daten zu senden, kommt es zur Kollision, die die Adapter jedoch bemerken. Die Transceiver senden eine Störsequenz und brechen den Sendevorgang ab. Um sicher zu gehen, dass keine Kollision zwischen dem eigenen und anderen 14 Sichere Multimediakonferenzen Computer Netzwerke Input Port Incoming Identifier Output Port Outgoing Identifier 2 1 2 4 2 4 0 3 2 5 1 11 2 6 0 4 Tabelle 2-1: Switch-Tabelle für Virtuelle Verbindung Ziel Switch Port A 3 B 0 C 2 D 3 E 1 Tabelle 2-2: Switch-Tabelle für Datagrammdienst Frames passiert, müssen mindestens 512 Bits gesendet werden – 14 Byte Header, 46 Byte Daten und 4 Byte CRC ergibt 64 Byte oder 512 Bit. Und zwar deshalb, da das Verzögerung × Bandbreite Produkt für ein Ethernet maximaler Ausdehnung von z. B. 2500 m 512 Bit ergibt (Delay 51,2 µs, Bandbreite 10 MBit/s). Nach einer Kollision wartet der Adapter entweder 0 oder 51,2 µs, je nach Ergebnis eines Zufallsgenerators. Bei neuerlicher Kollision kommt eine dritte Option dazu, und in jeder weiteren Runde eine neue, nämlich die doppelte Zeit. Nach 16 Versuchen wird ein Sendefehler zum Host gemeldet. 2.3. Packet Switching Die Netzwerke, die mit Ethernet und Token Ring Technologie gebildet werden können, sind in ihrer geographischen Ausdehnung sowie in der Anzahl der angeschlossenen Stationen eingeschränkt. Um globalere Netzwerke zu bauen, können Netzwerkelemente eingesetzt werden. Mit ihrer Hilfe können Hosts miteinander kommunizieren, die nicht direkt verbunden sind, d. h. die nicht das gleiche physikalische Ausbreitungsmedium (das selbe Kabel) teilen. In Bild 2-13 ist ein Switch dargestellt, der mehrere Hosts verbindet und dabei eine Stern-Topologie erzeugt. Trotzdem sind die über Switches verbundenen Stationen noch immer Teilnehmer des selben Netzwerks. Im Unterschied zum Telefonnetz, das eine Leitung zwischen Anrufer und Angerufenem vermittelt (circuit switching), werden hier die einzelnen Datenpakete vermittelt, die auf dem Weg von Sender zu Empfänger Switches durchlaufen und von diesen weitergeschickt werden (packet switching, Paketvermittlung) [Tan92]. Packet Switches [PD96] bestehen aus mehreren Inputs und Outputs, die mit Hosts und eventuell anderen Switches verbunden sind. Die Hauptaufgabe ist das Forwarding, das Empfangen von Paketen am Input und die Weiterleitung zum richtigen Output. Um feststellen zu können, welcher Output gewählt werden soll, benötigt der Switch einiges Wissen über die Topologie des Netzwerks. Der Prozess der Akkumulierung dieses Wissens in einem Switch ist eine einfache Form des Routing. Die dritte Herausforderung für einen Switch hat mit dem Buffer der Pakete zu tun. Wenn mehr Pakete an den Inputs ankommen, als an die Outputs – die auch nur eine begrenzte Bandbreite haben – abgegeben werden können, entsteht ein Stau am Eingang. Die Eigenschaft, dass alle einkommenden Pakete um die Gunst des Switches streiten, heißt Contention. Ein damit verwandtes Phänomen ist das von Congestion; das ist das Verwerfen von einkommenden Paketen, weil die Buffer der Switches nicht mehr ausreichen, um die Daten aufzunehmen. 15 Computer Netzwerke 2.3.1. Sichere Multimediakonferenzen Forwarding Die Verwendung eines Switches erzeugt eine Stern-Topologie (siehe Bild 2-13), deren Ausläufer aus Punkt-zu-Punkt Verbindungen, Bus- oder Ring-Strukturen gebildet werden. Einzelne Switches haben zwar selbst nur eine begrenzte Anzahl an Input und Output Ports, aber durch das Verbinden mehrerer Switches können sehr große Netzwerke entstehen. Diese Netzwerke haben eine gute Skalierbarkeit, da sich das Hinzufügen neuer Hosts an einen Switch nicht unbedingt negativ auf die Gesamtperformance des Netzwerks auswirkt. Das ist ein Unterschied zu den direkt verbundenen Netzwerken, wo niemals zwei Hosts gleichzeitig senden können. Das Forwarding [PD96] zwischen Input und Output Link ist laut OSI-Architektur Aufgabe des Network-Layer. Der Switch muss dabei jeweils das an diesem Link verwendete Data Link Protokoll unterstützen, z. B. jenes für E1 (2,048 MBit/s), E3 (34,368 MBit/s) oder STM-1 (Glasfaser mit 155,52 MBit/s). Die amerikanischen Äquivalente sind T1, T3 sowie STS-1, die jedoch unterschiedliche Bandbreiten unterstützen. Die Ein- und Ausgänge eines Switches werden als Ports bezeichnet. Die Tätigkeit des Forwardens arbeitet allgemein mit Hilfe von Informationen im Header des Packets, die der Switch als Grundlage für die Entscheidung nimmt, welcher Output Port gewählt werden soll. Wie diese Informationen aussehen, hängt von der verwendeten Methode ab. Die zwei gängigen Ansätze sind der verbindungslose Datagramm-Ansatz und der verbindungsorientierte Ansatz des Virtual Circuit (Virtuelle Verbindung). Virtuelle Verbindung Diese besonders für WAN-Verbindungen häufig eingesetzte Technik benötigt zuerst das Zustandekommen einer virtuellen Verbindung zwischen Source und Destination. Mit dem Transport der Connection Request Nachricht werden in allen Switches sogenannte Virtual Circuit Identifier (VCI) generiert, die später Pakete mit dem Sender assoziieren werden und – mit Hilfe des Wissens der Netzwerktopologie – den Output Port determinieren. Die Tabelle eines Beispiel-Switches in Tabelle 21 zeigt, dass aus der Kombination <Input Port, Incoming VCI> der Output Port und der VCI, der zwischen diesem Switch und dem folgenden Knoten ausgehandelt wurde, ermittelt wird. Jeder VCI gilt nur zwischen zwei Knoten und muss zwischen diesen beiden Knoten eindeutig sein. Datagramme Ohne zuerst eine Verbindung zum Empfänger herzustellen, werden die Datenpakete (Datagramme) losgeschickt. Jedes einzelne Paket hat genug Informationen in seinem Header, um das Ziel erreichen zu können; dabei handelt es sich um die gesamte Zieladresse – im Gegensatz zur kurzen VCI der virtuellen Verbindung. Ein Switch, der ein Paket empfängt, konsultiert die sogenannte Forwarding Tabelle (auch Routing Tabelle genannt), die das Mapping zwischen Empfängeradresse und Output Port enthält (Tabelle 2-2). Das Forwarding ist also ein simples Table-Lookup. Das eigentliche Problem ist (so wie im Fall der virtuellen Verbindung für das Connection Request Packet) das Beschaffen der Tabelleninhalte, also das Routing. 16 Sichere Multimediakonferenzen B 1 Computer Netzwerke 1 C A 1 D E 1 1 1 Kosten NextHop A 1 A C 1 C D 2 C E 2 A F 2 A G 3 A 1 1 F Ziel G Tabelle 2-3: Routing-Tabelle für Knoten B Bild 2-14: Netzwerk dargestellt als Graph 2.3.2. Routing Damit Forwarding überhaupt erst möglich ist, müssen Router wie auch Switches eine gewisse Kenntnis über das Netzwerk besitzen, das sie mit Hilfe von verteilten Routing-Protokollen erhalten. Routing [PD96, Bor96] ist ein graphentheoretisches Problem. Dabei sind die Switches die Knoten und die Links die Kanten, denen Kosten zugeordnet werden. Router speichern ihre Informationen in sogenannten Routing-Tabellen. In Bild 2-14 ist ein Beispiel-Netzwerk dargestellt, dessen Kanten alle gleich hohe Kosten haben und Tabelle 2-3 zeigt die Routing-Tabelle eines Knotens. Das Problem des Routing ist es, den kostengünstigsten Weg zwischen zwei Knoten des Netzwerks zu berechnen. Für einfache Netzwerke kann das statisch berechnet werden. Die Nachteile sind dabei jedoch, dass es nicht möglich ist, auf Link- oder Knotenausfälle zu reagieren und sich an neue Knoten oder geänderte Kosten zu adaptieren. Deshalb erfolgt das Routing in der Regel dynamisch. Um gute Skalierbarkeit zu erreichen, erfolgt es außerdem in einem über alle Router verteilten Verfahren. Es gibt zwei wesentliche Klassen von Routing-Protokollen: Distance Vector und Link State Vector. Beim Distance Vector Routing-Protokoll informiert jeder Router seine Nachbarn über seine eigene Routing-Tabelle. Wenn ein Router solche Informationen erhält, vergleicht er sie mit seiner eigenen Tabelle. Er erneuert die Einträge, wenn sich zu anderen Knoten geringere Kosten ergeben als bisher bekannt und informiert wiederum seine Nachbarn darüber. Wenn das Link State Routing-Protokoll verwendet wird, macht sich jeder Router ein Bild des gesamten Netzwerks. Wenn ein Link ausfällt oder wieder aktiv wird, wird eine Nachricht, das sogenannte Link State Advertisement, über das ganze Netzwerk gesendet. Damit können alle Router ihre Tabellen neu berechnen. Im Unterschied zu Distance Vector ist die ganze Route zum Empfänger bekannt. 17 Computer Netzwerke Sichere Multimediakonferenzen Netzwerk 1 (Ethernet) H1 H2 H3 H7 R3 H8 Netzwerk 2 (Ethernet) R1 R2 Netzwerk 4 (point to point) H4 Netzwerk 3 (Token Ring) H5 H6 Bild 2-15: Ein Netzwerk aus physikalischen Netzen („internet“) 2.4. Internetworking Ein internetwork oder kurz internet entsteht durch das Zusammenschließen einzelner physikalischer Netzwerke, die unterschiedlicher Art sein können, z. B. Ethernets und Token Rings. Es kommt zu zwei wichtigen Problemen, die gelöst werden müssen: die Heterogenität der Netzwerktechnologien und die Skalierbarkeit des internets. Bezüglich Heterogenität geht es darum, ein funktionierendes Host-zu-Host Service über diesen Mix an Technologien hinweg zu schaffen. Bezüglich Skalierbarkeit muss eine geeignete Routing-Methode sowie ein Adressmodell gewählt werden. 2.4.1. Internet Protocol (IP) Bild 2-15 zeigt ein Beispiel für ein internet, also ein logisches Netzwerk, das sich aus mehreren physikalischen Netzwerken zusammensetzt [PD96]. Diese Einzelnetzwerke basieren jeweils nur auf einer Technologie: Ethernet, Token Ring oder Point-to-Point. Die Knoten, die die physikalischen Netze verknüpfen, sind die sogenannten Router, mitunter auch Gateways genannt. Das Protokoll, das es ermöglicht, Daten zwischen zwei beliebigen Hosts im internet auszutauschen, ist das Internet Protocol (IP), auch bekannt nach den Erfindern als Kahn-Cerf Protokoll. IP läuft auf allen Knoten und macht aus den Einzelnetzen ein logisches internet. TCP und UDP laufen typischerweise in der Ebene über IP und verwenden dessen Infrastruktur. Das IP Protokoll wird in [Rob96] zusammengefasst. Service Modell Das Service, das IP bietet, ist die Host-to-Host Paketzustellung. Dabei wurde im Entwurf versucht, es so generell wie möglich zu halten, sodass jede beliebige existierende oder erst entstehende Netzwerktechnologie in der Lage sein soll, IP zu unterstützen. Das IP Service Modell besteht aus zwei Teilen: Ein Adress-Schema, das alle Hosts eindeutig identifiziert, und ein verbindungsloser 18 Sichere Multimediakonferenzen 0 4 8 Version HLen 16 19 TOS Ident TTL Computer Netzwerke 31 Length Flags Protocol Offset Checksum SourceAddr DestAddr Options (falls erwünscht) Pad Bild 2-16: IPv4 Packet Header Datagramm-Dienst zur Datenübertragung. Dieses Service Modell wird auch Best Effort genannt, weil IP alles versucht, um eine erfolgreiche Übertragung zustande zu bringen, aber keine Garantien abgibt. Datagramm-Dienst Die Datenübertragung erfolgt ohne explizite Reservierung einer End-zu-End-Verbindung. Als Übertragungsrahmen dient das Datagramm, das unter anderem mit der Ziel-Adresse versehen wird. Jedes Datagramm enthält genug Header-Informationen, um durch das Netzwerk gesendet zu werden. Sollte ein Datagramm verloren gehen, wird vom Netzwerk – in Übereinstimmung mit Best Effort – keine wiederholte Übertragung des Datagramms veranlasst. Aufgrund dieser Charakteristik des Datagrammdienstes ist IP ein unzuverlässiges (unreliable) Service. Dies gilt als eine der größten Stärken von IP, denn diese Flexibilität ermöglicht es IP, auf jeder Technologie zu laufen. Viele der Technologien existierten nicht, als IP erfunden wurde, und keine Netzwerktechnologie hat sich bisher als zu bizarr für IP erwiesen. Es wurde sogar behauptet, IP laufe über zwei Blechdosen und ein Stück Draht. IP-Header Das Format des IP-Headers ist in Bild 2-16 zu sehen. Eine detaillierte Beschreibung der Felder ist in [RFC0791] zu finden. An dieser Stelle sollen einige wesentliche Felder erläutert werden. Version wird für das derzeitige IP auf den Wert 4 gesetzt. Die nächste Version wird IPv6 bzw. IPng (IP Next Generation) [Sta97, PD96] sein. Die wichtigste Änderung in IPv6 ist die Erweiterung der Adressen (SourceAddr, DestAddr) von 32 Bit auf 128 Bit. Damit sollen Engpässe bei der Vergabe von IP-Adresse vermieden werden. Version 5 wurde für ein experimentelles Protokoll namens ST-II verwendet. TOS (Type of Service) sollte Applikationen die Möglichkeit geben, diverse Anforderungen an die Übertragung zu spezifizieren, z. B. bezüglich Netzwerkverzögerung, Verlässlichkeit der Übertragung oder Datendurchsatz. Diese Möglichkeiten wurden nie intensiv genutzt, stellen aber einen Weg dar, um QoS (Quality of Service) zu implementieren. Das zweite Wort enthält Informationen bezüglich Fragmentierung, die im folgenden Abschnitt behandelt wird. Das TTL (Time to Live) Feld wird in jedem Router dekrementiert und soll verhindern, dass Pakete ohne Ende ziellos durchs Internet zirkulieren. Es wird zu Beginn auf einen Wert größer 0, z. B. 64, gesetzt. Wenn 0 erreicht wird, wird das Datagramm verworfen. Der Wert dieses Feldes sollte 19 Computer Netzwerke Sichere Multimediakonferenzen 7 (a) 0 24 Network Host 16 14 (b) (c) 1 0 Network 1 1 0 Host 21 8 Network Host Bild 2-17: IP Adressen: (a) Klasse A; (b) Klasse B; (c) Klasse C laut Definition in Sekunden gemessen werden. Allerdings muss jeder Router den Wert um mindestens 1 vermindern, sodass meist die Anzahl der Hops gemessen wird. Als Demultiplexing Schlüssel für das übergelagerte Protokoll dient Protocol. TCP hat hier beispielsweise den Wert 6, UDP hat 17. Dieser Wert gibt damit an, welcher Header am Beginn der Payload des IP-Datagramms steht. Fragmentierung Da jedes physikalische Netzwerk seine eigene Maximalgröße für Datenpakete hat (z. B. Ethernet: 1500 Bytes, FDDI: 4500 Bytes), ist unmöglich, eine Größe für IP-Pakete zu finden, die in jedem Paket eines darunterliegenden Netzwerks Platz findet, ohne unnötig Ressourcen zu verschwenden. Die Alternative ist ein Mechanismus zur Fragmentierung und Wiederherstellung von IP-Paketen, falls sie zu groß sind. Fragmentierte Datagramme können mit Hilfe des Ident Feldes identifiziert und wiederhergestellt werden. Jedes Fragment ist selbst ein vollständiges Datagramm, das erst am Empfänger wieder mit den übrigen Fragmenten vereinigt wird. Der Fragmentierungsprozess kann beliebig wiederholt werden, sollte ein Fragment auf ein Netzwerk mit kleinerer Paketgröße stoßen. Die Fragmente können in jedem Fall sofort zum ursprünglichen Datagramm wiederhergestellt werden. Der Wert des IdentFeldes ist derselbe für alle Fragmente eines Datagramms und sollte am Empfänger eindeutig sein, damit die Fragmente zugeordnet werden können. Die Position des Fragments im ursprünglichen Datagramm ist durch den Wert des Offset gegeben. Globale Adressen Adressen müssen im gesamten Internet eindeutig sein, damit jeder mit jedem Host in jedem physikalischen Netzwerk kommunizieren kann. IP Adressen haben aber noch eine weitere Eigenschaft. Sie sind hierarchisch, im Unterschied zu den flachen (strukturlosen) Ethernet Adressen. IP Adressen setzen sich aus einem Netzwerkteil und einem Hostteil, der einen bestimmten Host in diesem Netzwerk bezeichnet, zusammen. IP Adressen werden in drei Klassen (A, B und C) unterteilt, die in Bild 2-17 dargestellt sind. Zusätzlich gibt es eine Klasse D für Multicast-Adressen. Sie haben eine Länge von 32 Bit. Adressen der Klasse A haben als erstes Bis eine 0. Wie man in der Abbildung sieht, sind von den circa vier Milliarden Adressen Hälfte aus der Klasse A, ein Viertel gehören zur Klasse B und ein Achtel zur 20 Sichere Multimediakonferenzen Computer Netzwerke Klasse C. Der Netzwerkteil von Klasse A Adressen besteht aus nur 7 Bits, d. h. es gibt lediglich 128 Klasse A Netzwerke, dagegen gibt es 221 ≈ zwei Millionen Klasse C Netze. Das Schema ist flexibel genug, Netzwerke von sehr unterschiedlicher Größenordnung zu organisieren. Es unterstützt wenige sehr große Netze (WANs) und sehr viel kleine Netze (LANs). IP Adressen werden üblicherweise mit vier durch Punkte getrennte Dezimalwerte niedergeschrieben, z. B. 129.27.142.140. Datagram Forwarding Forwarding ist der Prozess des Empfangens und Weiterleitens eines Paketes am korrekten Output Port. Datagramme, die von Sender zu Empfänger unterwegs sind, können mehrere Router passieren. Jeder Knoten, ob Router oder Host, versucht zuerst festzustellen, ob die Zieladresse im selben Netzwerk liegt. Dazu vergleicht der Knoten den Netzwerkteil der Zieladresse mit den Netzwerkteilen seiner Interfaces. Bei Übereinstimmung liegt das Ziel am selben physikalischen Netzwerk und das Paket wird direkt unter Benutzung der Übertragungsmechanismen dieses Netzwerks übermittelt. Im anderen Fall muss das Datagramm zum nächsten Router geschickt werden. Im allgemeinen hat jeder Knoten die Wahl zwischen mehreren Routern. Um den optimalen Router zu ermitteln, sieht der Knoten in der Forwarding Tabelle nach. Sollte das Ziel dort nicht aufscheinen, gibt es einen Default Router, an den das Datagramm gesendet werden kann. Adress-Auflösung (ARP) Hat das Datagramm das Netzwerk erreicht, in dem sich der Empfänger befindet, muss es noch zum entsprechenden Empfänger-Host transportiert werden. Dazu ist eine Übersetzung der IP Adresse des Empfängers in das Adressschema des jeweiligen Netzwerks nötig, also z. B. eine Übersetzung von IP in Ethernet Adressen. Dabei ist zu bemerken, dass diese beiden Adressen keine Beziehung zueinander haben und also nicht direkt voneinander ableitbar sind; es muss also eine Tabelle vorhanden sein, deren Inhalt eine Zuordnung ermöglicht und dynamisch generiert werden sollte, damit auf Änderungen der Netzwerktopologie automatisch reagiert werden kann. Das ist die Aufgabe des Address Resolution Protocol (ARP). Es macht sich die Tatsache zunutze, dass die meisten LANTechnologien wie Ethernet und FDDI Broadcast unterstützen. Wenn ein Host ein IP Datagramm an einen Host des eigenen Netzwerks schickt, konsultiert er die ARP Tabelle. Ist kein Eintrag vorhanden, schickt er eine Broadcast-Anfrage an das Netzwerk mit der gesuchten IP Adresse sowie der eigenen IP- und Link Layer Adresse. Der Host, der die gesuchte IPAdresse erkennt, antwortet mit seiner Link Layer Adresse, und der Sender fügt das Mapping in seine ARP Tabelle ein bzw. erneuert den Eintrag. Eine Erneuerung bedeutet das Rücksetzen des Timeouts. Da auch des Senders IP- und Link Level Adresse in der Broadcast-Anfrage vorhanden sind, können die Hosts, die das Broadcast empfangen, ihren entsprechenden Tabelleneintrag setzen. Weitere Informationen zu ARP sind unter [Rob96] und [PD96] zu finden. Fehlerbenachrichtigung (ICMP) Obwohl IP jederzeit zulässt, dass Pakete verworfen werden, geschieht dies nicht ohne Fehlermeldung. IP wird zusammen mit seinem Pendant ICMP (Internet Control Message Protocol) [Rob96, Sta97] eingesetzt. ICMP definiert eine Anzahl an Fehlermeldungen, die zum Source Host zurück geschickt werden, wenn es Probleme in einem Host oder Router gibt. Es existieren etwa Meldungen, dass ein 21 Computer Netzwerke at se co cc Sichere Multimediakonferenzen edu com ac gov nasa mil org net nsf tu-graz kfunigraz iaik iicm Bild 2-18: Beispiel einer DNS Hierarchie Host nicht erreichbar ist, dass die Wiederherstellung fragmentierter Pakete nicht gelingt, dass TTL den Wert 0 erreicht hat, dass die IP Checksumme nicht stimmt, etc. Außerdem definiert ICMP einige Kontrollnachrichten, mit denen ein Router den Sender informieren kann. Eine davon ist ICMP-Redirect, das den Sender instruiert, einen anderen Router zu verwenden, um zum gegebenen Empfänger zu gelangen, da dieser Weg kürzer bzw. kostengünstiger ist. 2.4.2. Host Namen (DNS) Dasselbe Problem, das ein Internet lösen muss, nämlich jenes der Skalierbarkeit, muss auch ein Benennungssystem lösen. Namen werden den Hosts in der Regel zusätzlich zu den Adressen vergeben, da die numerischen Adressen schwer zu merken sind. Namen haben die Eigenschaften, eine variable Länge zu haben und keinerlei Routing-Informationen für das Netzwerk bereitzuhalten. Ein Name Server hat die Aufgabe, mit einem Namen konfrontiert die dazu gebundene Adresse zu liefern. Das Benennungssystem des Internet ist das Domain Name System (DNS) [Rob96, PD96]. Bevor DNS eingeführt wurde, hatte eine zentrale Stelle namens Network Information Center (NIC) die Verantwortung, eine Datei namens hosts.txt zu verwalten, und sie regelmäßig an sämtliche Systemadminstratoren zu verteilen, die sie dann wiederum auf ihren Rechnern updaten mussten. Seit Mitte der 80er Jahre ist das DNS in Verwendung, das eine hierarchische Struktur hat (siehe Bild 2-18). Die gesamte Tabelle der <Name, Adresse> Bindungen ist in einer Anzahl an kleineren Tabellen über das Internet verteilt, und zwar in den Name Servern. Die DNS Hierarchie kann als Baum dargestellt. Das Wort „Domäne“ hat dabei nicht mehr Bedeutung als der Kontext, in dem neue Namen definiert werden können. Es existieren Domänen für jedes Land sowie die sechs U.S. Domänen edu, com, gov, mil, org und net. Die Hierarchie ist eine reine Abstraktion und wird in Zonen unterteilt. Jede Zone korrespondiert mit zwei oder mehreren Name Servern, die die selbe Information redundant speichern, sodass beim Ausfall eines Servers der Betrieb aufrecht erhalten werden kann. Anfragen an Name Server können auch mit dem Hinweis beantwortet werden, sich an den Name Server einer anderen Hierarchieebene zu wenden. 22 Sichere Multimediakonferenzen Computer Netzwerke SrcPort DstPort CheckSum Length Data Bild 2-19: Format des UDP Headers 2.5. Transport-Protokolle Wenn internets und die darunterliegenden Technologien erst einmal definiert sind, ist die nächste Aufgabe, Kanäle zwischen Prozessen zu schaffen. Die Protokolle, die die Kommunikation zwischen Prozessen anbieten, sind die Transport-Protokolle. Die Herausforderung für diese Protokolle besteht darin, die für Applikationen unerwünschten Eigenschaften wie Paketverluste, Größenbeschränkungen der Pakete, falsche Ankunftsreihenfolge der Pakete, etc. zu vermeiden und stattdessen Services anzubieten, die von Anwendungen benötigt werden [PD96]: o garantierte Übertragung o korrekte Reihenfolge der Pakete am Empfänger o nicht mehr als eine Kopie pro Paket o beliebig große Nachrichten o Flusskontrolle o Unterstützung mehrerer Applikationsprozesse pro Host UDP und TCP sind zwei solche Transport-Protokolle im Internet. Während UDP ein einfaches Demultiplexing-Service anbietet, steht TCP für ein zuverlässiges Byte-Stream Service. Applikationen haben über Application Programming Interfaces (APIs) Zugang zu den Diensten der TransportProtokolle. 2.5.1. Demultiplexing: UDP Das User Datagram Protocol (UDP) [Rob96, PD96] implementiert die einfachste Möglichkeit, das Host-zu-Host Service zu einem Prozess-zu-Prozess Service zu erweitern. Die einzige Anforderung dafür ist, ein Demultiplexing einzuführen, damit mehrere Prozesse am selben Host die Netzwerkdienste in Anspruch nehmen können. Zu diesem Zweck muss eine eindeutige Identifizierung der Ziel-Prozesse gegeben sein. Dies geschieht indirekt, indem ein abstrakter Identifikator, ein sogenannter Port eingesetzt wird. Source Hosts senden Daten an einen Port, und Destination Hosts erwarten Daten auf einem Port. Diese Demultiplexing Funktionalität wird mit Hilfe des UDP Headers implementiert, der in Bild 2-19 zu sehen ist. Die 16 Bit ergeben mehr als 65000 verschiedene Ports pro Host. Das ist genug, um einen Prozess auf einem Host zu identifizieren. Der Demultiplexing Schlüssel für UDP entspricht also dem <Host, Port> Tupel. 23 Computer Netzwerke Sichere Multimediakonferenzen Bevor der erste Kontakt zwischen einem Client und einem Server stattgefunden hat, konnten natürlich noch keine Ports vereinbart werden. Deswegen bietet der Server den Zugang über einen well-known Port an, also ein Port, den der Client kennt. Ein well-known Port ist vergleichbar mit einer Notrufnummer, die allgemein bekannt ist. DNS Server sind etwa auf Port 53 erreichbar, HTTP Server meist unter Port 80. 2.5.2. Byte-Stream: TCP Das Transmission Control Protocol (TCP) ist ein Protokoll, das ein verbindungsorientiertes, verlässliches Byte-Stream Service anbietet. Byte-Stream bedeutet, dass Daten nicht als unteilbare Messages betrachtet werden, sondern Byte für Byte übertragen werden, und damit einen Datenstrom aus vielen kleinen Elementen darstellen. Dabei können beide Seiten senden und empfangen, TCP Verbindungen sind also full-duplex. Neben einer zuverlässigen, geordneten Übertragung führt es selbständig Flusskontrolle und Congestion-Kontrolle aus. Congestion bezieht sich auf den Netzwerkzustand, während Flusskontrolle bedeutet, dass des Empfängers Buffer nicht überlastet werden sollen. Das TCP Protokoll wird in [Rob96] und [Sta97] zusammengefasst bzw. erläutert. Allgemeine Betrachtungen Das Herzstück von TCP bildet der sogenannte Sliding Window Algorithmus, der in weiterer Folge erklärt wird. Es soll noch auf einige konzeptuelle Merkmale des Protokolls eingegangen werden. Zwischen den beiden Hosts muss ein expliziter Verbindungsaufbau dafür sorgen, dass sich die beiden Prozesse auf einen gegenseitigen Datenaustausch einigen. Dabei werden Statusinformationen ausgetauscht, um den Sliding Window Algorithmus beginnen zu können. Zweitens muss beachtet werden, dass die RTT zwischen zwei beliebigen Hosts im Internet sehr variabel ist. Das bedeutet, dass der Timeout-Mechanismus für Retransmissions adaptiv sein soll, d. h. der Zeitpunkt, wann Daten wiederholt gesendet werden, hängt start vom Netzwerk zwischen den beiden Peers ab. Drittens können manche Pakete außergewöhnlich lange durch das Netzwerk benötigen, also muss der Empfänger darauf vorbereitet sein, dass Pakete in falscher Reihenfolge eintreffen. Viertens können die Hosts über sehr unterschiedliche Ressourcen verfügen, d. h. nicht jede TCPVerbindung kann mit derselben Buffergröße rechnen. Stattdessen sollen sich die beiden Peers gegenseitig informieren, wie groß ihre Ressource jeweils zum gegenwärtigen Zeitpunkt sind. Und fünftens hat ein Sender keine Kenntnis darüber, welchen Weg die Pakete durchs Netzwerk nehmen werden und welche Kapazitäten die Links zwischen Sender und Empfänger haben. Daher ist eine Vermeidung von Congestion wünschenswert. Segmente Obwohl TCP Byte-orientiert ist und somit von der Applikation Byte für Byte entgegennimmt, überträgt TCP nicht jedes Byte einzeln, sondern sammelt eine relevante Anzahl an Bytes von der Applikation und sendet diese in einem IP Paket zusammen mit dem TCP Header. Die Pakete, die 24 Sichere Multimediakonferenzen 0 4 10 Computer Netzwerke 16 31 DstPort SrcPort SequenceNum Acknowledgement HdrLen AdvertisedWindow 0 UrgPtr CheckSum Options (falls erwünscht) Data Bild 2-20: Format des TCP Headers zwischen den Peers ausgetauscht werden, nennt man Segmente, da sie jeweils einen Ausschnitt des Byte-Stromes beinhalten. TCP Header Der TCP-Header ist in Bild 2-20 dargestellt. So wie bei UDP finden sich ebenfalls Ports für Sender und Empfänger im Header. SequenceNum, Acknowledgment und AdvertisedWindow sind Teil des Sliding Window Algorithmus. Die sechs möglichen Flags sind: - SYN, FIN: für Verbindungsaufbau bzw. –abbau, - ACK: True, falls das Acknowledgment-Feld gültig ist, - URG: True, falls das Segment Urgent- (Out of Band-) Daten beinhaltet, - PUSH: die Push Operation wird ausgeführt, - RESET: Der Receiver wünscht einen Abbruch der Verbindung Die Checksum wird über den TCP Header, die TCP Daten und einen Pseudoheader über einige Felder des IP-Headers berechnet. HdrLen gibt die Länge des Headers in 32-Bit-Worten an und legt damit fest, ob Optionen definiert sind. Verbindungsaufbau und Terminierung Eine TCP Verbindung wird initiiert, indem ein Client ein active open zu einem Server ausführt, d. h. der Client gibt ein explizites Kommando zum Verbindungsaufbau. Der Server hat zuvor bereits ein passive open erledigt und wartet auf die Kontaktaufnahme durch Clients. Somit ist der Aufbau eine asymmetrische Aktivität, denn die beiden Seiten unternehmen unterschiedliche Aktivitäten zur Herstellung einer Verbindung. Der Algorithmus zur Verbindungsherstellung heißt Three-Way Handshake und ist in Bild 2-21 skizziert. Ziel ist es, die Sequenznummern auszutauschen, mit denen Sender und Empfänger ihre Daten durchnummerieren werden: 25 Computer Netzwerke Client Sichere Multimediakonferenzen Server 1 . SYN , Seque nceNum = x = y, ceNum Seq uen , K C 1 A + nt = x+ 2 . SYN dgeme le w o n Ack 3 . ACK , Ackno w ledge ment = y+ 1 Bild 2-21: Zeitachse für den Three-Way Handshake Data (SequenceNum) Sender Empfänger Acknowledgement + AdvertisedWindow Bild 2-22: Vereinfachte Darstellung für eine Richtung des TCP Datenaustausches: Daten fließen in eine Richtung, ACKs in die andere 1. Zuerst gibt der Client seine Sequenznummer bekannt. Diese sendet er in einem SYN-Paket. 2. Die Sequenznummer des Clients beantwortet der Server mit einem Acknowledgment und der Sequenznummer für seine Daten. In diesem Paket sind sowohl SYN- als auch ACK-Flag gesetzt. 3. Da in TCP jede Nachricht bestätigt werden muss, schickt der Client schließlich noch ein Acknowledgment zum Server. Damit sind die Sequenznummern vereinbart. Es gibt einen Grund dafür, dass Sequenznummern ausgetauscht werden. Es soll nämlich vermieden werden, immer bei der selben Nummer zu beginnen (z. B. 0), weil nach dem Abbruch einer Verbindung eine neue Verbindung aufgebaut werden kann, für die dann die gleichen Sequenznummern verwendet werden könnten. Diese Situation könnte zu Fehlern in der Übertragung führen. Sliding Window Der Sliding Window Algorithmus hat historische Bedeutung und wird heute durch einige Konzepte ergänzt, die in weiterer Folge diskutiert werden. Zunächst soll der Sliding Window Algorithmus erklärt werden. Er dient folgenden Funktionen: 26 Sichere Multimediakonferenzen Computer Netzwerke Sendeapplikation Epfängerapplikation TCP TCP LastByteWritten LastByteAcked LastByteSent LastByteRead NextByteExptected LastByteRcvd Bild 2-23: Beziehung zwischen TCP Sende- und Empfangsbuffer •= der zuverlässigen Übertragung von Daten, •= der Übertragung in korrekter Reihenfolge und •= der Flusskontrolle. Ein wesentliches Merkmal, das der Implementierung der Flusskontrolle entspricht, ist das Ankündigen einer Fenstergröße des Empfängers gegenüber dem Sender. Dies geschieht mit Hilfe des AdvertisedWindow-Feldes im TCP Header. Der Sender darf niemals mehr als AdvertisedWindow Daten im Umlauf haben. Wie Bild 2-23 zeigt, haben Sender und Empfänger jeweils einen dynamischen Buffer, dessen Größe durch die Werte einiger Variablen bestimmt wird, die den Zustand der Verbindung repräsentieren. Im Buffer des Senders befinden sich Daten, die gesendet, aber nicht bestätigt wurden, sowie Daten, die von der Applikation geschrieben wurden, aber noch nicht gesendet wurden. Der Buffer des Senders enthält Daten, die in der falschen Reihenfolge angekommen sind sowie Daten, die korrekter Reihenfolge vorliegen, aber von der Applikation noch nicht gelesen wurden. Jederzeit gilt im Sender: LastByteAcked ≤ LastByteSent da der Empfänger kein Byte bestätigen kann, das noch nicht gesendet wurde, sowie: LastByteSent ≤ LastByteWritten da TCP kein Byte senden kann, das die Applikation noch nicht geschrieben hat. Bytes zur Linken von LastByteAcked wurden bereits bestätigt und müssen nicht mehr im Buffer gespeichert werden. Rechts von LastByteWritten wurden noch keine Bytes generiert und es wird hier ebenso kein Bufferplatz benötigt. Die Ungleichungen am Empfänger lauten: LastByteRead < NextByteExpected 27 Computer Netzwerke Sichere Multimediakonferenzen da die Applikation ein Byte nicht lesen kann, bevor dieses und alle vorangehenden Bytes empfangen wurden. NextByteExpected zeigt auf das erste Byte, das entsprechend der Reihenfolge als nächstes erwartet wird, also auf den Beginn der (ersten) Lücke. Weiters gilt: NextByteExpected ≤ LastByteRcvd + 1 da NextByteExpected auf das Byte nach LastByteRcvd zeigt, falls alle Daten in korrekter Reihenfolge eintrafen. LastByteRcvd referenziert das Byte mit der höchsten Sequenznummer aller empfangenen Bytes und markiert somit das Ende des Buffers. Flusskontrolle Die Größe des Sliding Window bestimmte historisch die Menge an Daten, die gesendet werden kann, ohne auf Bestätigungen des Empfängers zu warten. Mit folgendem Konzept drosselt der Empfänger den Sender, indem er eine Fenstergröße ankündigt, die nicht größer als der freie Buffer des Empfängers ist: AdvertisedWindow = MaxRcvBuffer – (LastByteRcvd – LastByteRead) Um die Forderung des Empfängers einhalten zu können, berechnet der Sender die sogenannte effektive Fenstergröße. Nur wenn diese größer 0 ist, werden Daten gesendet: EffectiveWindow = AdvertisedWindow – (LastByteSent – LastByteAcked) Moderne Konzepte modifizieren dieses Verhalten. Diese Quasi-Standards haben sich in vielen Implementierungen bewährt. Es handelt sich dabei um Slow Start, Congestion Avoidance, Fast Retransmit und Fast Recovery. Slow Start Das Konzept des Slow Start soll verhindern, dass TCP zu Beginn die gesamte Menge an Daten ins Netzwerk sendet, die vom Receiver mittels AdvertisedWindow erlaubt werden. Dies kann insbesondere dann zu Problemen führen, wenn die beiden Hosts nicht im selben LAN sind und die Daten von Routern gebuffert werden müssen. Slow Start verwendet ein weiteres Fenster, das Congestion Window (cwnd). Beim Aufbau einer neuen Verbindung wird das Congestion Window auf die Größe eines Segments gesetzt. Bei jedem Empfang eines ACKs wird das Congestion Window um eine Segmentgröße erhöht. Beim Senden gilt jeweils das Minimum der beiden Fenster (Congestion und Advertised Window) als Obergrenze der erlaubten Datenmenge. Wird an einem bestimmten Punkt die Kapazität des Internets erreicht, beginnt ein Router, Pakete zu verwerfen. Damit wird der Sender in Kenntnis gesetzt, dass Congestion eingetreten ist. In der Praxis wird Slow Start meist gemeinsam mit Congestion Avoidance implementiert. Dieses Konzept wird als nächstes beschrieben. Congestion Avoidance Congestion Avoidance ist ein Verfahren, um mit verlorenen Paketen aufgrund von Congestion umzugehen. Der Algorithmus geht davon aus, dass die meisten Pakete nicht durch physische Schäden des Netzes, sondern durch Congestion verloren gehen. Zusätzlich zum Congestion Window wird noch eine zweite Variable benötigt, nämlich die Slow Start Threshold Size (ssthresh). 28 Sichere Multimediakonferenzen Computer Netzwerke Je nach der Größe des aktuellen Fensters (Minimum aus Congestion Window und Advertised Window) im Verhältnis zu ssthresh wird die Fesnstergröße bei Empfang eines ACK entweder nach dem Konzept von Slow Start erhöht oder um folgenden Betrag: segsize*segsize/sshtresh. Dabei ist zu bemerken, dass es sich im ersten Fall um eine exponentielle Steigerung handelt, im zweiten Fall aber um eine lineare Steigerung. Solange die aktuelle Fenstergröße kleiner oder gleich sshtresh ist, wird nach dem Slow-Start Konzept gesendet, sonst nach dem linearen Konzept. Zu Beginn wird sshtresh auf 65535 gesetzt [RFC2001]. Um auf eine Situation mit Congestion zu reagieren, wird sshtresh auf die Hälfte der aktuellen Fenstergröße gesetzt. Zusätzlich wird im Fall eines Timeouts das Congestion Window auf die Größe eines Segments zurückgesetzt. Damit beginnt die Übertragung wieder im Slow Start Verfahren, bis der nun verminderte sshtresh erreicht wird. Fast Retransmit TCP hat die Charakteristik, sogenannte duplicate ACKs zu senden, wenn Pakete in nicht korrekter Reihenfolge ankommen. Zunächst kann der Sender nicht entscheiden, ob ein Paket verloren wurde oder zeitlich später ankommt als Pakete mit höherer Sequenznummer. Wenn mehr als drei duplicate ACKs ankommen, wird ein Paketverlust angenommen und bei Anwendung des Fast Retransmit Algorithmus macht TCP eine erneute Übertragung dieses Pakets, ohne auf ein Timeout zu warten. Das Congestion Window wird auf Segmentgröße herabgesetzt. Fast Recovery Dies ist eine weitere Verfahren zur Verbesserung der Übertragungseigenschaften von TCP. Es besteht darin, nach dem erneuten Senden eines verlorenen Pakets durch Fast Retransmit nicht den Slow Start Algorithmus zu verwenden, sondern Congestion Avoidance. Das bedeutet, das Congestion Window wird nicht auf eine Segmentgröße zurückgesetzt, sondern auf den Wert von sstresh. Das verbessert den Throughput bei mäßiger Congestion – besonders für große Fenster. Der Grund, nicht in den Slow Start zu wechseln, liegt im Empfang von duplicate ACKs, denn diese können nur dann gesendet werden, wenn der Empfänger andere Segmente erhält. Das bedeutet, dass noch immer Daten zwischen Sender und Empfänger übertragen werden und der Datenfluss muss nicht notwendigerweise abrupt stark gebremst werden. 29 Computer Netzwerke 30 Sichere Multimediakonferenzen Sichere Multimediakonferenzen Sicherheit in Datennetzen 3. Sicherheit in Datennetzen In diesem Kapitel werden Sicherheitsaspekte vorgestellt, die sich auf den Schutz von Informationen in Netzwerken beziehen. Einleitend folgt eine Darstellung von Sicherheitsrisiken sowie von Strategien, möglichen Attacken entgegenzuwirken. Die meisten Methoden beruhen auf kryptographischen Algorithmen, die zum besseren Verständnis der später erläuterten Sicherheitskonzepte präsentiert werden. 3.1. Einleitung Kryptographie ist die Wissenschaft mathematischer Methoden, die sich mit verschiedenen Aspekten von Informationssicherheit beschäftigen wie etwa Geheimhaltung, Integrität und Authentizität [MOV97]. Dazu zählen grundsätzlich alle Verfahren, die Daten transformieren und die schwer umkehrbar sind. In diesem Zusammenhang spricht man von starker Kryptographie, wenn es praktisch unmöglich ist, diese Umkehroperation ohne das Wissen über die geeigneten Schritte durchzuführen. Unmöglich hat hier die Bedeutung, dass auch ein sehr großer Ressourceneinsatz dazu nicht ausreicht. Für ein relevantes Level an Datensicherheit ist starke Kryptographie das Maß der Dinge. 3.1.1. Gefahren und Maßnahmen Mögliche Gefahren für den Datentransport in Netzwerken entstehen durch die gemeinsame Nutzung der Infrastruktur großer Netze wie das Internet. Ein User, für den die Daten nicht bestimmt sind, kann seine Attacke anonym durchführen und hat dabei viele verschiedene Möglichkeiten [MAB99, Pfl97]: Abhören der ausgetauschten Informationen Manipulation der Informationen Vortäuschen einer falschen Identität Verhindern von Informationsaustausch (Denial of Service) Attacken auf Passwörter und Schlüssel Zerstörung von Daten (etwa durch einen Virus) Auf diese Bedrohungen gibt es nicht ein einziges Gegenmittel, das in der Lage ist, sie zu entschärfen. Dagegen schafft in vielen Fällen die Kombination der folgenden Konzepte das erwartete Maß an Sicherheit: 31 Sicherheit in Datennetzen Application Transport: TCP Network: IP Data Link: Interface Bild 3-1: Sichere Multimediakonferenzen - S-MIME - Kerberos - Proxies - SET - IPSec (ISAKMP) - SOCKS - SSL, TLS - IPSec (AH, ESP) - Paketfilter - Tunneling Protokolle - CHAP, PAP, MS-CHAP Sicherheitslösungen in den TCP/IP Ebenen Vertraulichkeit: durch Verschlüsselung werden die Daten für Dritte unzugänglich gemacht. Authentifizierung und Autorisierung der Kommunikationsteilnehmer identifiziert das jeweilige Gegenüber. Integrität bedeutet die Unverfälschtheit der Daten, dass also Übertragungsfehler und Veränderung durch Dritte erkannt werden. Verbindlichkeit oder Nichtabstreitbarkeit ist der sichere Nachweis einer Transaktion. Käufer und Händler können sich etwa gegenseitig Zusagen machen. Diese Sicherheitskonzepte werden von unterschiedlichen Diensten in unterschiedlichen Ebenen implementiert, wie in Bild 3-1 dargestellt. −= Der Internet Layer ist gut geeignet, Sicherheitsdienste im Bereich Host-zu-Host zu unterstützen. Aus den aufgezählten Konzepten soll S/Mime (Secure Multi-Purpose Internet Mail Extensions) hervorgehoben werden. Es erweitert den MIME Standard [RFC1521], der den Austausch beliebiger Daten per Email definiert, um Sicherheitsinstrumente. Die Daten können verschlüsselt bzw. signiert werden. S/Mime verwendet den RSA Algorithmus, der in Kapitel 3.2.2 erläutert wird. RSA Security hat S/Mime als IETF-Standard vorgeschlagen. −= Der Transport Layer ist geeignet für Sicherheit auf Prozess-zu-Prozess Basis. Sowohl SOCKS als auch SSL/TLS werden später in diesem Kapitel behandelt. −= Der Application Layer ist gut geeignet, um Sicherheitsvorkehrungen für individuelle Dokumente, die übertragen werden, zu treffen. −= Die Data Link-Ebene und einige zugehörige Beispiele sind in Bild 3-1 aus Gründen der Vollständigkeit ebenfalls eingezeichnet. Diese sollen aber nicht näher erläutert werden. 3.2. Kryptographische Grundlagen Im folgenden sollen die wesentlichen Konzepte zur Kryptographie vorgestellt werden. Die Ansätze können in symmetrische und asymmetrische Algorithmen unterteilt werden. Zunächst sollen die möglichen Operationsmodi für symmetrische Algorithmen vorgestellt werden. Daran schließt die Beschreibung des DES-Standards für symmetrische Verschlüsselung an. 32 Sichere Multimediakonferenzen Secret Key Verschlüsselung Bild 3-2: Sicherheit in Datennetzen Secret Key Entschlüsselung Symmetrischer (Private Key) Algorithmus Unsymmetrische Verschlüsselung ging aus den Arbeiten von Diffie und Hellman hervor. RSA zählt zu den wichtigsten Algorithmen in diesem Bereich. Mit Hilfe von unsymmetrischer Verschlüsselung können Signaturen und Zertifikate erzeugt werden, die ebenfalls dargestellt werden. [Sch96] ist eine umfassende Referenz zu Sicherheitsaspekten. [MOV97] ist theoretisch orientiert. Eine leicht verständliche, allgemeine Einführung bieten [Beu96] und [Wob98]. 3.2.1. Symmetrische Verschlüsselung Bei der symmetrischen oder Private Key-Verschlüsselung wird derselbe Schlüssel zum Ver- und Entschlüsseln benutzt. In Bild 3-2 wird dies durch das Schlüsselsymbol veranschaulicht. Sender und Empfänger müssen sich also auf einen gemeinsamen Schlüssel einigen, bevor irgendein Datenaustausch erfolgt. Dies ist ein Nachteil, da bei mehreren Teilnehmern die Anzahl an Schlüsseln sehr groß wird. Bei n Teilnehmern werden bereits n(n-1)/2 Schlüssel benötigt, damit jedes Teilnehmerpaar einen eigenen besitzt, der außerdem über einen sicheren Weg ausgetauscht werden will. Der Vorteil von symmetrischer Verschlüsselung ist die relativ hohe Geschwindigkeit, mit der ver- und entschlüsselt wird, und die effiziente Implementierbarkeit in Hardware. Ein simples Beispiel für ein symmetrisches Verfahren ist bitweises XOR. Zweimalige Anwendung des XOR Operators ergibt wieder das Original. Es gibt zwei Arten symmetrischer Algorithmen: Block-Algorithmen, die auf einem Datenblock pro Runde operieren, und Stream-Algorithmen, die Bit für Bit verarbeiten. Block-Algorithmen arbeiten in verschiedenen Modi, von denen im folgenden zwei elementare Modi herausgegriffen und näher erläutert werden sollen. Electronic Code Book Mode (ECB) Electronic Codebook Mode (ECB) bearbeitet jeden Block unabhängig von den anderen. Wie in Bild 3-3 zu sehen ist, werden die Klartextblöcke mi jeweils verschlüsselt, ohne dass das Ergebnis einer Verschlüsselung in die Verschlüsselung eines anderen Blocks eingeht. Das bedeutet, dass identische Datenblöcke auch in identische chiffrierte Blöcke umgewandelt werden. Dies ist ein Nachteil dieses Verfahrens, da dadurch Attacken möglich sind. Die unabhängige Verarbeitung erlaubt andererseits eine Parallelisierung der Verschlüsselung der Datenblöcke und damit eine hohe Verarbeitungsgeschwindigkeit. 33 Sicherheit in Datennetzen mi mi-1 Sichere Multimediakonferenzen mi+1 m1 m2 m3 Ek Ek Ek c1 c2 c3 c0 Ek Ek Ek ci-1 ci ci+1 Bild 3-3: Electronic Code Book Mode (ECB) Bild 3-4: Li-1 Ri-1 Cipher Block Chaining (CBC) Schlüssel shift Permutation shift Permutation S-Box Substitution P-Box Permutation Li Bild 3-5: Ri Schlüssel Eine Runde des DES-Algorithmus Cipher Block Chaining (CBC) CBC (Cipher Block Chaining) lässt das Ergebnis der Verschlüsselung des vorigen Blocks in die Verschlüsselung einfließen, sodass die Attacke erschwert wird. Jeder Datenblock wird, bevor der Verschlüsselungsalgorithmus angewendet wird, mit dem Output des vorigen Blocks XOR-verknüpft (Bild 3-4). Ein Initialisierungsvektor c0 wird als Input für die Verarbeitung des ersten Blocks verwendet. Dieser sollte zufällig gewählt werden. Neben diesen beiden Modi gibt es unter anderem noch CFB- (Cipher Feedback) und OFB- (Output Feedback) Modus. Bei diesen beiden fließt die vorangegangene Chiffrierung derart ein, dass Blöcke kleiner als die Blockgröße abgefertigt werden können. DES Ein verbreiteter Block-Algorithmus ist DES (Data Encryption Standard) [Sch96, Wob98]. DES wurde von IBM entwickelt und schon 1977 zum U.S. Standard erklärt. DES ist gut erforscht und arbeitet mit 56-Bit Schlüsseln auf 64-Bit Blöcken, entweder in ECB, in CBC oder für Blöcke kleiner 64 Bit in 34 Sichere Multimediakonferenzen Bob’s Public Key Verschlüsselung Sicherheit in Datennetzen Bob’s Private Key Entschlüsselung Alice Bild 3-6: Bob Unsymmetrischer (Public Key) Algorithmus CFB Modus. In jeder der 16 Runden wird ein neuer Schlüssel abgeleitet. Jede Runde stellt eine Kombination von Substitution und Permutation dar. Der DES-Schlüssel wird als 64-Bit Wert dargestellt. Davon sind allerdings 8 Bit zur Paritätskontrolle vorgesehen und haben für den Schlüssel keine weitere Bedeutung. Die Operationen, die in einer Runde ausgeführt werden, sind in Bild 3-5 zu sehen. Zu Beginn jeder Runde werden die Bits des Schlüssels verschoben. Aus den 56 Bits werden danach 48 Bits ausgewählt. Die rechte Hälfte des 64Bit Datenblocks wird durch Permutation auf 48 Bits erweitert und dient zusammen mit den 48 Bits des Schlüssels als Input zu einer XOR-Operation. Durch die anschließende Substitution in der sogenannten „S-Box“ ergibt sich eine Reduktion auf 32 Bits, die noch einer Permutation durch die „P-Box“ unterzogen werden. Schließlich folgt noch eine XOR-Operation dieser 32 Bits und der linken Hälfte des Datenblocks. Das daraus resultierende Ergebnis stellt die neue rechte Seite des Datenblocks dar. Die rechte Seite des Datenblocks wird die neue linke Seite. Inzwischen gibt es eine neue Variante von DES, um eine Brute-Force-Attacke auf den mittlerweile etwas kurzen 56-Bit Schlüssel zu erschweren: Triple DES (3DES) wendet den DES-Algorithmus in drei Runden mit zwei verschiedenen 56-Bit Schlüsseln an. Ein anderes Verfahren, das angetreten ist, DES zu ersetzen, ist AES (Advanced Encryption Standard). 1997 wurde eine Initiative seitens des NIST (National Institute of Standards and Technology) gestartet und die Öffentlichkeit wurde aufgerufen, Blockalgorithmen als Kandidaten vorzuschlagen. Von diesen Vorschlägen wurden 15 akzeptiert und evaluiert. Aus diesen wurden fünf Algorithmen für die nächste Runde zugelassen: Mars, RC6, Rijndael, Serpent und Twofish. Sie sollen aber nicht näher erläutert werden. Der Entscheidungsprozess ist derzeit noch nicht abgeschlossen. 3.2.2. Unsymmetrische Verschlüsselung Diese ist die zweite Kategorie von Chiffriermethoden. Sie wird auch Public Key Verschlüsselung genannt. Jeder Teilnehmer hat ein Schlüsselpaar, bestehend aus einem privaten und einem öffentlichen Schlüssel. Der private Schlüssel wird vom Teilnehmer geheimgehalten, während der öffentliche Schlüssel an alle weitergegeben werden kann bzw. soll. Die beiden Schlüssel ergänzen sich in dem Sinn, dass Daten mit einem Schlüssel chiffriert werden und mit dem anderen dechiffriert. Andere Benutzer können dem Besitzer des öffentlichen Schlüssels auf sicherem Weg Daten zukommen lassen, indem sie sie mit dem öffentlichen Schlüssel des Empfängers chiffrieren. Das dazupassende Gegenstück, der private Schlüssel, ist einzig im Besitz des Empfängers und nur dieser kann folglich die Daten lesen. 35 Sicherheit in Datennetzen Sichere Multimediakonferenzen Außerdem eignen sich die unsymmetrischen Algorithmen ausgezeichnet, um Nachrichten zu authentifizieren: Wird die Nachricht mit dem privaten Schlüssel chiffriert, weiß der Empfänger, der die Nachricht mit dem öffentlichen Schlüssel des Senders lesen kann, von wem sie kommt, da nur der Besitzer des privaten Schlüssels in der Lage ist, diesen anzuwenden. Dieses Prinzip wird in digitalen Signaturen angewendet. Außerdem gewährleistet dieses Verfahren Nichtabstreitbarkeit. Fügt man noch Datum und Zeit in die Signatur ein, so hat man einen guten Nachweis über die Kommunikation. Diffie Hellman Diffie und Hellman sind die Begründer der unsymmetrischen Verschlüsselungstechnik und publizierten den ersten Algorithmus, den Diffie Hellman-Algorithmus [Sch96]. Es handelt sich um ein Verfahren zum Austausch von Schlüsseln, die für symmetrische Verschlüsselung verwendet werden können. Dabei tauschen die beiden Teilnehmer lediglich öffentliche Informationen aus, also solche, die von jedermann lesbar sein können. Diese verwenden die beiden dann dazu, einen Schlüssel abzuleiten. Kein Dritter ist in der Lage, den Schlüssel zu rekonstruieren, auch wenn er den Datenfluss der beiden Partner abgehört hat. Diffie Hellman bietet keine Authentifizierung. Dazu kann z. B. RSA verwendet werden. Wollen Alice und Bob einen gemeinsamen geheimen Schlüssel erzeugen, gehen sie wie folgt vor: Zunächst einigen sich die beiden auf eine große Primzahl n und die Zahl g, die meist als Generator bezeichnet wird. Die Zahl g ist meist kleiner als n und hat die Eigenschaft, dass sie jede Zahl zwischen 1 und n-1 erzeugen kann, indem sie mit sich selbst eine bestimmte Anzahl mal multipliziert wird und anschließend die (mod n)-Funktion angewendet wird. Als nächstes berechnen Alice und Bob ihre privaten Werte: 1. Alice wählt einen privaten Wert x und sendet Bob den Wert der Berechnung X = gx mod n 2. Bob wählt den Wert y und sendet folgenden Wert an Alice: Y = gy mod n 3. Alice berechnet k = Yx mod n 4. Bob berechnet k’ = Xy mod n Sowohl k als auch k’ sind äquivalent zu gxy mod n. Kein Zuhörer kann diesen Wert berechnen, denn er kennt nur n, g, X und Y. Der Wert k ist der geheime Schlüssel, der von Alice und Bob getrennt berechnet wurde. RSA RSA [Sch96, Wob98], benannt nach seinen Erfindern Rivest, Shamir und Adelman, ist ein De facto Standard für unsymmetrische Verschlüsselung. Die Schlüssellänge ist nicht wie bei DES fix festgelegt, sondern kann je nach Bedarf mitwachsen; Beispiele sind 512, 768, 1024 oder 2048-Bit Schlüssel, die mit zunehmender Rechnerleistung immer größer werden. Der RSA Algorithmus funktioniert folgendermaßen: Zunächst werden zwei große Primzahlen p und q gewählt und daraus das Produkt n = pq berechnet. Diese Zahl n wird als Modulus bezeichnet. Danach wählt man eine Zahl e, die kleiner als n ist und die Bedingung erfüllt, dass sie keinen gemeinsamen Teiler mit (p-1)(q-1) besitzt außer die Zahl 1. Man wählt eine weitere Zahl d, für die gilt, dass (ed - 1) 36 Sichere Multimediakonferenzen Sicherheit in Datennetzen durch (p-1)(q-1) teilbar ist. Die Werte e und d sind Teil des öffentlichen und privaten Schlüssels. Die Werte p und q werden nicht länger benötigt und sollten vernichtet werden. Öffentlicher Schlüssel: (n, e) Privater Schlüssel: (n, d) Um eine Message m zu verschlüsseln, wird sie zuerst in Blöcke geteilt, deren numerischer Wert kleiner als n ist. Die Verschlüsselung erfolgt durch diese Berechnung: ci = mie mod n Die Entschlüsselung erfolgt mit dem anderen Schlüssel: mi = cid mod n Dabei ist es auch möglich, die beiden Schlüssel in umgekehrter Reihenfolge anzuwenden. Hashing Eine Hash-Funktion erzeugt eine Art Fingerabdruck eines Dokuments [Sch96, MAB98]. Sie erzeugt aus einem Input variabler Länge einen Hashwert von konstanter Länge, der keine Rückschlüsse auf das originale Dokument zulässt. Hashing soll möglichst vermeiden, dass verschiedene Dokumente denselben Hashwert produzieren. Diese Anforderung kann natürlich nie ganz erfüllt werden, da es mehrere Dokumente geben muss, die denselben Hashwert liefern, aber es soll nur mit unverhältnismäßig hohem Aufwand möglich sein. Hashfunktionen heißen auch Message Digests. Nimmt man neben dem Dokument als zweiten InputParameter einen Schlüssel, erhält man den sogenannten Message Authentication Code (MAC). In anderen Worten: Verschlüsselt man einen Hashwert, erhält man einen MAC. Hashfunktionen können die Integrität einer Nachricht beweisen. Mit der Verschlüsselung im Fall des MAC wird der Sender authentifiziert. Hashfunktionen sind vor allem dann sinnvoll, wenn man auf die Verschlüsselung der gesamten Nachricht (aus Effizienzgründen) verzichten möchte und lediglich Integrität und Authentizität zum Ziel hat. Digitale Signaturen Die digitale Signatur ist ein spezieller MAC, dessen Schlüssel der private Schlüssel des Absenders ist [MAB98]. Die Signatur wird an die Nachricht, die selbst verschlüsselt oder unverschlüsselt sein kann, angehängt. Der Empfänger, der den Hash-Algorithmus kennt, kann dann die erhaltene Signatur mit seiner selbst ermittelten vergleichen und somit Integrität und Authentizität der Nachricht sicherstellen. Übertragungsfehler und böswillige Veränderung werden erkannt, da der Fingerabdruck sich unterscheidet. Als Authentifizierungs-Standard gilt der Digital Signature Standard (DSS). Er setzt sich aus dem Digital Signature Algorithm (DSA) und dem Hash-Verfahren SHA-1 (Secure Hash Algorithm) zusammen. SHA-1 produziert einen 160-Bit Hashwert. 37 Sicherheit in Datennetzen Sichere Multimediakonferenzen privater Schlüssel Hashfunktion Nachricht Bild 3-7: Verschlüsselung Digitale Signatur Hashing einer Nachricht mit dem privaten Schlüssel ergibt Signatur Zertifikate Ein Problem mit der unsymmetrischen Verschlüsselung ist der Austausch von öffentlichen Schlüsseln. Dabei geht es um Unsicherheit, ob ein öffentlicher Schlüssel wirklich zu dieser Person gehört. Ein Man-In-The-Middle-Attack [Sch96, Wob98] macht davon Gebrauch, indem er den beiden Teilnehmern seinen öffentlichen Schlüssel als den des Kommunikationspartners ausgibt. Er kann damit alle Nachrichten abfangen, entschlüsseln, eventuell verändern, wieder verschlüsseln und weitersenden. Um diese Gefahr auszuschalten, gibt es Zertifizierungsstellen, die den öffentlichen Schlüssel an eine Person binden. Ein Zertifikat entsteht durch das Hashing des öffentlichen Schlüssels und des Namens des Besitzers. Dieser Fingerabdruck wird mit dem privaten Schlüssel der Certification Authority (CA) verschlüsselt. Damit dieses System funktioniert, müssen die Teilnehmer der Zertifizierungsstelle trauen. Das können öffentliche Einrichtungen wie etwa Universitäten sein oder es kann sich auch ein Netzwerk aus Bekannten ergeben, die sich gegenseitig vertrauen. Die Anordnung von Zertifizierungsstellen in einer Hierarchie kann zusätzliche Übersichtlichkeit bieten. Diese Hierarchie bildet eine sogenannte Trust chain. Der CA an der Wurzel traut jeder und ihr Private Key ist „top secret“. 3.3. Firewalls Firewalls [MAB98, CZ95] trennen das globale Netz in zwei Teile: in das vertrauenswürdige interne Netz und den Rest. Der Informationsfluss zwischen den beiden Seiten wird reguliert, damit die Gefahr von Attacken von außen so gering wie möglich wird. Die Firewall implementiert die Security Policy des Unternehmens. Firewalls stehen in Zusammenarbeit mit Routern, die das Verbindungsglied zwischen internen und externen Netzwerken darstellen. Die Firewall fällt ihre Entscheidungen, ob Daten passieren dürfen, aufgrund der Informationen der Paket-Header. Dabei unterscheiden sich drei Typen von Firewalls; Der sogenannte Paketfilter betrachtet jedes IP-Paket einzeln, während Circuit-Level Gateways Verbindungen behandeln. Application Level Gateways schließlich kennen Sessions, die zwischen Applikationen bestehen. 38 Sichere Multimediakonferenzen Sicherheit in Datennetzen Firewall Sicheres internes Netz (Organisation A) Bild 3-8: Firewall Unsicheres Netz (Internet) Sicheres internes Netz (Organisation B) Firewalls trennen interne Netze vom globalen Netz Paketfilter Der Paketfilter macht einen Binärvergleich der Header-Informationen des IP Paketes mit seiner Security Policy und lässt es passieren oder verwirft es. Die Policy kann den Verkehr über diese beiden Felder regulieren: Adress-Informationen: Es können einzelne Hosts oder ganze Netzwerke vom Zugang zum schützenswerten Netz ausgeschlossen werden. Dabei gibt es die beiden gegenläufigen Ansätze: entweder alle Adressen zuzulassen außer einigen, oder alle abzulehnen, außer den auserwählten, z. B. Netzwerke, die zur selben Organisation gehören. Service: Je nach Art des Services werden unterschiedliche Ports verwendet. Das kann dazu benutzt werden, einige Services zu verbieten. Telnet auf Port 23 könnte deaktiviert werden, um Hackern diese Angriffsfront zu verwehren, während Email auf Port 25 im allgemeinen ein wichtiger Dienst für die Angehörigen einer Organisation ist und freigeschaltet wird. Kombiniert man die beiden Varianten, könnte etwa Telnet von vertrauenswürdigen Netzen gewährt werden. Packet Filtering läuft meist in der Netzwerkadapterkarte des Routers ab, oder, in der langsameren Variante, im Betriebssystem des Routers. Zu den eingeschränkten Möglichkeiten der Paketfilter zählt unter anderem, dass das interne Netz nach wie vor sichtbar bleibt. Circuit Level Gateway Während Paketfilter sich keinen Status über die Verbindungen und die Messages merken, die sie passieren, ist die beim Circuit Level Gateway anders. Dies hat den Vorteil, dass der Datenfluss in beide Richtungen ermöglicht wird, wenn die Daten zur selben Verbindung gehören. Es sind also beispielsweise nicht zwei Einträge in die Policy für ein- und ausgehende Telnet-Nachrichten notwendig. Im Unterschied zum Application Level Gateway, der als nächstes beschrieben wird, werden die Datenpakete nicht zusätzlich bearbeitet. Application Level Gateway Dieser Typ Firewall tut mehr als Pakete auszufiltern. Jene Pakete, die die Filterkriterien erfüllen und durchgelassen werden, werden im Gateway neu formatiert, und die Adressfelder des Headers von ausgehenden Paketen zeigen von nun an auf den Gateway, als hätte dieser die Pakete erzeugt. Damit ist die Firewall der einzige Computer, der außerhalb des Netzwerks gesehen werden kann; ein Hacker 39 Sicherheit in Datennetzen (a) IP Hdr (b) IP Hdr Sichere Multimediakonferenzen Payload AH Hdr Payload Authentifiziert (außer variable Felder) Bild 3-9: AH in Transport Mode: (a) Original IP Paket; (b) Paket mit AH Header kann also nichts über die Topologie des internen Netzes ausforschen, ohne zuerst die Firewall zu knacken. Gateways erfordern sogenannte Proxy-Applikationen für jedes erlaubte Service. Die Proxies überprüfen die Inhalte der Pakete dieses Dienstes. Sie haben detailliertes Wissen zu den entsprechenden Services (z. B. Email, HTTP). Gateway Firewalls sind nicht in Hardware oder im Betriebssystem implementiert, sondern als eigenständige Software, das auf einem Server-OS läuft. Zu ihren Vorteilen zählt das Loggen des Netzwerkverkehrs. Damit werden alle Einbruchsversuche aufgezeichnet. Wegen der umfangreichen Aktionen (Re-Adressierung etc.) läuft ein Gateway langsamer als ein Paketfilter und kann die NetzPerformance für die Benutzer des internen Netzes wesentlich reduzieren. Außerdem besteht einiger Aufwand zur Administration: ein neues Service verlangt auch einen neuen Proxy. 3.4. IPSec Die IP Security Architecture schafft eine Möglichkeit für Benutzer, kryptographische Mechanismen zur Sicherheit zu nutzen [MAB98]. IP Pakete werden Integritäts-, Authentizitäts- und Verschlüsselungsverfahren unterworfen. Es ist sowohl für Hosts als auch für Gateways einsetzbar. Die kryptographischen Algorithmen sind dabei änderbar, ohne dass das Auswirkungen auf die restliche Implementierung von IPSec hat. Für Verschlüsselung kann z. B. DES, für Authentifizierung RSA zum Einsatz kommen. IPSec arbeitet auf Host-zu-Host Basis. Dafür bietet sich die Netzwerkschicht an, denn damit ist es möglich, den Datenaustausch applikationsunabhängig durchzuführen. Dies ist gut dafür geeignet, VPNs (Virtual Private Networks) zu implementieren. Auf der anderen Seite bringt die Verschlüsselung des gesamten Datenverkehrs auch einen Nachteil: Es ist nicht möglich, eine Einschränkung auf bestimmte Dienste vorzunehmen. Die zwei wesentlichen Verfahren sind der Authentication Header (AH), der eine SenderAuthentifizierung durchführt, und Encapsulating Security Payload (ESP), das Authentifizierung und auch Datenverschlüsselung bietet. 40 Sichere Multimediakonferenzen (a) IP Hdr (b) New IP Hdr (c) New IP Hdr AH Hdr Sicherheit in Datennetzen Payload IP Hdr Payload IP Hdr Payload Authentifiziert (außer variable Felder) Bild 3-10: AH in Tunnel Mode: (a) Original IP Paket; (b) Tunneled Packet; (c) Paket mit AH Header Host A Gateway Internet Gateway Host B AH in Tunnel Mode ESP in Transport Mode Bild 3-11: VPN mit IPSec: Hosts verschlüsseln, Gateways authentifizieren die Daten Authentication Header (AH) AH bietet Integrität und Authentifizierung für IP Pakete. Der AH kann in zwei unterschiedlichen Varianten angewendet werden: Die beiden Modi werden in Bild 3-9 und Bild 3-10 dargestellt. Transport Mode: Es werden die gesamten Payload Daten sowie jene IP Header-Informationen authentifiziert, die sich en route nicht ändern. Felder, die sich ändern, sind TOS, Flags, Fragment Offset, TTL und Header Checksum. Diese Felder sind nicht Teil des Inputs für den MACAlgorithmus. Tunnel Mode: Hier wird ein neues IP Paket erzeugt, dessen Payload das ursprüngliche Paket inklusive Header ist. Auf das neue Paket wird der Transport Mode angewendet. Der Vorteil ist, dass alle Felder authentifiziert werden. Die IP Adressen des ursprünglichen Headers und des neuen Headers müssen nicht übereinstimmen; dies ist besonders für Gateways interessant. Encapsulating Security Payload (ESP) Mit ESP ist auch Verschlüsselung des IP Paketes möglich. Auch hier gibt es Transport und Tunnel Mode. Während Transport Mode den Header des IP Pakets weder authentifiziert noch verschlüsselt, 41 Sicherheit in Datennetzen Sichere Multimediakonferenzen ist das im Tunnel Modus der Fall, da hier der Header zur Payload wird. Der Tunnel Mode wird typischerweise zwischen Gateways (Firewalls) verwendet. Obwohl ESP eigentlich alle Aufgaben erfüllt, die AH implementiert, ist AH sinnvoll, solange keine Verschlüsselung gefordert wird, da es effizienter in Bezug auf Geschwindigkeit implementiert ist. Eine beliebte Variante ist AH in Tunnel Mode, das mit ESP verschlüsselte Daten schützt, z. B. um ein Virtual Private Network (VPN, siehe Bild 3-11) oder Dial up Remote Access zu implementieren. Damit ist während der Übertragung größtmögliche Sicherheit gegeben, da durch den Tunnel-Modus von ESP der neuerzeugte Paket-Header die Adresse des Senders nicht offen legt. Schlüsselmanagement IPSec funktioniert auch einfach mit manuell erzeugten Schlüsseln. Aber eine Umgebung, die sich um Schlüsselerzeugung und deren Austausch kümmert, ist ab ein paar Benutzern unabkömmlich. Dieses Framework stellt IKE (Internet Key Exchange) zur Verfügung. In der ersten Phase wird zwischen den Kommunikationspartnern ein sicherer Kanal etabliert, auf dem dann die Schlüssel sowie einige andere Parameter für die sogenannte SA (Security Association) ausgetauscht werden; SAs identifizieren eine unidirektionale Kommunikation über IPSec zwischen zwei Hosts und definieren die Algorithmen für Authentifizierung und Verschlüsselung. Die wichtigen Bausteine der Schlüsselverwaltung sind: Internet Security Association and Key Management Protocol (ISAKMP): Eine Umgebung für das Management von SAs und Schlüsseln, jedoch nicht für den Schlüsselaustausch. Oakley: Ein Schlüsselaustauschprotokoll, das ISAKMP ergänzt. Es erledigt den Austausch und das Update von Schlüsselmaterial für Security Associations. IKE: Ein Protokoll, das Teile von ISAKMP und Teile des Oakley und des SKEME Protokolls für IPSec AH und ESP sowie für ISAKMP selbst implementiert. 3.5. SSL SSL steht für Secure Socket Layer [MAB98] und wurde von Netscape und RSA Data Security entwickelt mit dem Ziel, Verbindungen sicher zu machen. Dazu wird eine Schicht zwischen Transport- und Application-Layer eingefügt, also etwa zwischen TCP und HTTP. SSL bietet Verschlüsselung, Authentifizierung des Servers und optional (ab Version 3.0) auch des Clients und Datenintegrität. Im Gegensatz zu IPSec ist die Orientierung darauf ausgerichtet, Sicherheit für Dienste zu implementieren, nicht auf Host-zu-Host Basis. Die SSL-Schicht verhält sich zur TCP Applikation hin unsichtbar, indem es ein API anbietet, das dem von TCP gleicht. Theoretisch kann SSL daher von allen auf TCP/IP basierenden Protokollen genutzt werden, ohne die Applikation zu ändern. SSL setzt sich selbst aus zwei Schichten zusammen. Die obere implementiert das Handshake Protokoll für die einleitende Authentifizierung und den Transfer der symmetrischen Schlüssel, die dann in der unteren Schicht, dem SSL Record Protocol zum Datentransfer genutzt werden. Der Verbindungsaufbau läuft in mehreren Schritten ab (siehe dazu Bild 3-12): 1. Hello Phase: Der Client etabliert eine Verbindung zum Server und teilt diesem seine verfügbaren Krypto-Algorithmen mit. 42 Sichere Multimediakonferenzen Sicherheit in Datennetzen Client Server 1 SSL Record Change Cipher Spec SSL Handshake Client Hello 2 (Certifcate) (Client Key Exchange) (Certificate Verify) Finished Server Hello (Certificate) (Server Key Exchange) (Certificate Request) Server Hello Done 3 Change Cipher Specs 4 Finished Change Cipher Specs 5 Send Data Send Data Bild 3-12: Zustandekommen einer SSL Verbindung 2. Der Server wählt daraus ein Public Key-, ein Private Key- und ein Hash-Verfahren aus und teilt seine Wahl dem Client mit. Außerdem sendet der Server ein Zertifikat, falls der Client ihn dazu aufgefordert hat, und eine Server Key exchange message, um den symmetrischen Schlüssel zu generieren. 3. Der Client schickt eventuell ein Certificate, danach seine Key exchange message. Nun besitzen Client und Server genug Informationen, um über symmetrische Verschlüsselung einen vertraulichen Datenaustausch zu gewährleisten, sowie den MAC für die Integrität der Daten zu erzeugen. 4. Client und Server beenden die Verhandlungen mit je einer Finish Meldung. Der Client authentifiziert den Server, indem er einige chiffrierte zufällige Testnachrichten schickt, die nur der richtige Server lesen kann. Der Server kann auf vergleichbare Weise den Client authentifizieren, falls der Client über ein registriertes Zertifikat verfügt. 5. Alle weiteren Daten werden mit dem Sitzungsschlüssel chiffriert, etwa mit Hilfe des DES oder RC4 Verfahrens. MACs werden nach MD5, SHA oder DSS erzeugt und an den Datenblock angehängt. 43 Sicherheit in Datennetzen Sichere Multimediakonferenzen SOCKS Rules SOCKS Server IP Filter Rules Port 1080 Server Port Client Server SOCKS Authentifizierung Client-Server Authentifizierung Bild 3-13: SOCKS Server spaltet Client-Server Verbindung in zwei Teilverbindungen 3.6. SOCKS SOCKS ist ein Standard für Gateways [MAB98]. Anders als bei herkömmlichen Gateways erspart sich der Benutzer, sich zuerst am Proxy anzumelden und sich erst im zweiten Schritt zum gewünschten Ziel zu verbinden. Diese Aufgabe übernimmt die SOCKS-Software, die sowohl im SOCKS Server als auch im Client implementiert sein muss (SOCKSified Clients). Der Ziel-Server hat jedoch keine Kenntnis davon, dass die Verbindung von einem SOCKS Server erfolgt. SOCKSv5 erlaubt eingehende und ausgehende Verbindungen, sowohl TCP als auch UDP. Für SOCKS ist es nicht nötig, für jede neue Applikation einen Proxy Code zu entwerfen. SOCKSv5 unterstützt verschiedene Authentifizierungs-, Verschlüsselungs-, Tunnelingund Schlüsselmanagement-Methoden, unter anderem IPSec für Authentifizierung und Verschlüsselung. Der SOCKS Server nimmt auf Port 1080 Verbindungsanfragen entgegen und öffnet, wenn die notwendigen Berechtigungen existieren, je nach Anfrage einen TCP oder UDP Kanal. Danach folgt die Authentifizierung des Clients am Ziel-Server und schließlich der Datenaustausch. Im Falle einer UDP Anfrage führt jedes Datagramm einen Request-Header, der das Ziel identifiziert. 44 Sichere Multimediakonferenzen Multimediakonferenzen 4. Multimediakonferenzen Mit der gesteigerten Geschwindigkeit moderner Netzwerke sind neue Anwendungen entstanden, die aus dieser Tatsache ihren Nutzen ziehen. Es handelt sich dabei z. B. um Video- und Sprachübermittlung. Diese Applikationen stehen im Mittelpunkt dieses Kapitels. Zuerst wird das Service Modell diskutiert, das ihnen zugrunde liegt. Wie dieses Modell in der Praxis umgesetzt wird, sollen die Ausführungen zur Protokoll-Hierarchie erläutern, die im Rahmen von Internet Telephonie und Multimediakonferenzen zu finden ist. Schließlich folgt eine Einführung in die wichtigsten Protokolle, die sich derzeit im Einsatz befinden. 4.1. Real-Time Applikationen Unter Real-Time Applikationen versteht man jene Klasse von Anwendungen, die spezifische Anforderungen an die Verzögerungscharakteristik des Übertragungssystems stellen. Diese Anforderungen müssen somit von den Knoten im Netzwerk erfüllt werden; das derzeit etablierte BestEffort Modell des Internet reicht dafür nicht aus. Das angestrebte Service-Modell [PD96] für Real Time Applikationen geht über diesen Best-Effort Mechanismus hinaus und erweitert es. Applikationen sollen die Möglichkeit haben, gewisse Bandbreiten mit maximalem Delay vom Netzwerk anzufordern. Das Netzwerk kann dann versuchen eine Verbindung mit geforderter Qualität aufzubauen. Ein Zugang dazu ist, dass alle Router, die an dieser Verbindung teilhaben, versuchen, eine vereinbarte Anzahl an Bits pro Sekunde zu reservieren. Eine andere Möglichkeit ist die Verwendung von Service-Klassen, die Services unterschiedlicher Qualität anbieten. 4.1.1. Service-Modell Wir haben es grundsätzlich mit zwei Arten von Applikationen zu tun. Einerseits gibt es die traditionellen Datenapplikationen wie Telnet, FTP, Email, Web Browsing etc., für die ein kleiner Delay durchaus angenehm ist, die aber auch bei größerem Delay funktionieren. Daneben entstehen eine Reihe von Real-Time Applikationen wie etwa IP Telephonie: Daten werden erzeugt, indem Samples des Mikrofons digitalisiert werden. Die Daten werden in Pakete aufgeteilt und durch das Netzwerk transportiert. Am Empfänger werden die Daten entgegengenommen und in Audiosignale umgewandelt. Wichtig ist dabei der Zeitpunkt der Wiedergabe. Jedes Sample soll genau dann wiedergegeben werden, wenn das vorige die Wiedergabe abgeschlossen hat, also in sequenzieller Reihenfolge. 45 Sequenznummer Multimediakonferenzen Sichere Multimediakonferenzen Paketankunft Paketerzeugung Playback Buffer Verzögerung des Netzes Zeit Bild 4-1: Layered Protocol Archtitektur Ein Sample, das erst nach seinem geplanten Wiedergabezeitpunkt ankommt, ist damit ohne jeden Wert, denn der Redefluss kann aus Verständigungsgründen nicht verzögert werden. In einem solchen Fall wird das Sample ausgelassen und die Wiedergabe geht mit dem darauffolgenden Sample weiter. Könnte man garantieren, dass alle Pakete gleich lang durchs Netz benötigen, könnten alle Samples sofort nach Eintreffen abgespielt werden. Aber aufgrund von Queues in Switches und Routern variieren die Übertragungszeiten. Um mit dieser Situation umzugehen, implementiert der Empfänger einen Buffer für die Samples, die vor ihrem geplanten Abspieltermin eintreffen, um dann zum korrekten Zeitpunkt wiedergegeben zu werden. Damit werden kurze Verzögerungen der Pakete ausgeglichen. Durch diesen Mechanismus wird effektiv ein konstanter Offset zwischen dem Zeitpunkt des Sprechens und des Abspielens erzeugt. Bild 4-1 veranschaulicht die Situation: Die beiden Diagonalen zeigen Sample-Erzeugung bzw. Playback. Die geschwungene Linie entspricht der Ankunft der Pakete am Empfänger. Solange das Playback nicht zu früh erfolgt, werden die Variationen in der Übertragungszeit nicht bemerkt, da der Buffer vorhanden ist. Die Differenz zwischen Zeitpunkt des Sprechens und der Wiedergabe sollte jedoch nicht größer als 300 ms [PD96] betragen, da es sonst für die Gesprächspartner als unangenehm empfunden wird. Service-Klassen Aufgrund unterschiedlicher Typen von Applikationen ergeben sich unterschiedliche Anforderungen ans Netzwerk, die sich in den Service-Klassen niederschlagen. Diese bieten Services an, die über BestEffort hinausgehen. Real-Time Applikationen können einerseits in tolerante und intolerante Applikationen bezüglich Paketverlusten eingeteilt werden, andererseits nach ihrer Anpassungsfähigkeit bezüglich Delay und Datenrate. Man kann sich dabei viele Kombinationen vorstellen, mit Ausnahme von intoleranten und zugleich Delay-adaptiven Real-Time Applikationen. Ein Beispiel einer Anwendung mit adaptiver Datenrate ist ein Video-Kodieralgorithmus, dessen Datenrate die erzielte Qualität wiederspiegelt. Für die Palette an 46 Sichere Multimediakonferenzen Multimediakonferenzen Signaling H.323 SIP Quality of Service RTSP RSVP RTCP Transport media encaps. (H.261, MPEG) RTP TCP UDP IPv4, IPv6 Link layer Bild 4-2: Multimediakonferenz-Architektur laut IETF Applikationen ergeben sich verschiedene Service-Klassen. Intolerante Applikationen verlangen ein garantiertes Service, wo ein bestimmter Delay nicht überschritten werden darf. Eine weitere Kategorie ist ein Service mit vorhersagbarem Delay (predictive service), der zwar meist eingehalten wird, aber gelegentliche Paketverluste verzeichnet. Dieser Dienst kann zu einer effizienteren Netzwerkauslastung als das garantierte Service führen. Daneben kann es nützlich sein, vom Netzwerk eine Übertragung mit kontrolliertem Delay anzufordern. Dabei steht nicht so sehr die Quantität des Delays im Vordergrund als die Tatsache, dass die Pakete innerhalb eines gewissen Zeitintervalls ankommen, d. h. alle etwa gleich schnell. 4.2. Protokoll-Stack Internet Telephonie sowie Konferenzen mit anderen Medien wie z. B. Video basieren auf einer Reihe von Protokollen, die verschiedene Aufgaben übernehmen. IETF hat einen Protokoll-Stack entwickelt, der die Bereiche Verbindungsaufbau, Datentransport und Service-Qualität (QoS, Quality of Service) umfasst (Bild 4-2) [SR98]. Es werden sowohl Echtzeit-Applikationen als auch Stored Media Streams (z. B. Video abspielen) unterstützt. Die Verwendung mehrerer verschiedener Protokolle, die jeweils ein bestimmtes Service implementieren, schafft Modularität, Flexibilität, Übersichtlichkeit und einfache Erweiterbarkeit. Teilnehmer bzw. Netzwerk-Server, die nur ein bestimmtes Service unterstützen, brauchen nur das entsprechende Protokoll zu implementieren, ohne dadurch Interoperabilitätsprobleme zu erzeugen. Außerdem können Protokoll-Komponenten in Applikationen wiederverwendet werden. Die verwendeten Protokolle sind nicht auf bestimmte Medien oder auf Unicast eingeschränkt. Das Hinzufügen neuer Medien verlangt keine Änderungen in der Netzwerk-Infrastruktur, was einen großen Vorteil gegenüber dem traditionellen Telefonnetz darstellt. Außerdem ist das Erweitern von Gesprächen zwischen zwei Personen zu Multi-Party Konferenzen leicht möglich. Um das Zustandekommen einer Verbindung kümmern sich entweder das H.323 Protokoll der ITU-T oder das von der IETF entwickelte SIP (Session Initiation Protocol) [deC99]. RTP ist das zentrale Protokoll zum Transport von Sprach- und Videodaten für die Übertragung in Echtzeit. Die 47 Multimediakonferenzen Sichere Multimediakonferenzen H.323 Spezifikation des Systems H.225.0 Call control (RAS), call setup H.235 Sicherheitsprotokoll: Authentifikation, Integrität, Vertraulichkeit H.245 Capability exchange H.450 Zusatzdienste H.246 Interoperabilität mit verbindungsorientierten Netzwerk-Services H.332 Für Konferenzen mit vielen Teilnehmern H.26x Video codecs: z. B. H.261, H.263 G.7xx Audio codecs: G.711, G.723, G.729, G.728, etc. Tabelle 4-1: ITU-T Spezifikationen, die Teil von H.323 sind unidirektionale Übertragung von Streaming-Daten kontrolliert eventuell auch das RTSP (Real Time Streaming Protocol). Um die nötigen qualitativen Rahmenbedingungen, die für Real-Time-Applikationen notwendig sind und im vergangenen Kapitel erläutert wurden, zu gewährleisten, wird ein Ressourcen-AllokationsProtokoll eingesetzt, in diesem Stack ist es RSVP (Resource Reservation Protocol). 4.3. H.323 Es handelt sich hier um eine Familie von Standards, die in Tabelle 4-1 aufgelistet sind. H.323 spezifiziert das System und referenziert eine Reihe weiterer Standards. Das System, das von der ITU-T stammt, definiert Protokolle für die Implementierung von Multimedia-Kommunikation in paketvermittelten Netzen wie dem Internet. Es übernimmt die Aufgaben von Kodierung, Paketaufteilung von Audio- und Videosignalen, Verbindungsaufbau und –kontrolle, sowie Austausch der Fähigkeiten der Teilnehmer (capability exchange). Die meisten Implementationen entsprechen derzeit der Version 2 [ITU323]; Seit Semptember 1999 existiert Version 3. 4.3.1. H.323 Endknoten H.323 definiert vier wesentliche Komponenten: Terminals, Gateways, Gatekeeper und Multipoint Control Units (MCU). Terminals sind Client-Endknoten im IP-Netzwerk, die die folgenden Funktionen erfüllen sollen: Verbindungsmanagement: Zum Aufbauen und Überwachen von Verbindungen muss jeder Terminal drei Standards unterstützen: RAS (Registration/Admission/Status) zum An- und Abmelden am Gatekeeper, der die Zone verwaltet, H.225 um Calls zu erzeugen und H.245, das einen komplexen Standard darstellt um die Kanäle zu verwalten. Sämtliche Protokolle basieren auf ASN.1 (Abstract Syntax Notation One) für ihre Nachrichten. 48 Sichere Multimediakonferenzen Terminal Multimediakonferenzen Terminal Router Gatekeeper Terminal H.323 Zone Gateway Telephone Terminal IP Netzwerk SCN Telephone Terminal Bild 4-3: H.323 Komponenten Echtzeit-Kommunikation: Terminals verwenden RTP/RTCP für Audio- und VideoPaketübertragung. Codecs: Diese komprimieren und dekomprimieren die Audio- und Videodaten vor bzw. nach der Übertragung. Aus Interoperabilitätsgründen ist der G.711 Audio-Codec vorgeschrieben, andere sind optional. Gateways ermöglichen Verbindungen zwischen paketvermittelten und leitungsvermittelten Netzen. Sie sind nur im Fall solcher Verbindungen zwischen den Netzen erforderlich. Sie erledigen Call setup und Call control in beiden Netzen und übersetzen die Übertragungsformate und Codecs. Gatekeeper haben vier wesentliche Aufgaben: Adressübersetzung von Alias-Adressen zu TransportAdressen (IP Adresse und Port), Kontrolle über Zulassung von Calls, Regulierung der Bandbreite und das Zonen-Management. Gatekeeper sind zwar optional, aber wenn sie vorhanden sind, müssen sich alle anderen Endknoten, die in der administrativen Zone des Gatekeepers liegen, bei diesem registrieren und ihre Calls dort anmelden. MCUs ermöglichen Konferenzen zwischen drei oder mehr Endknoten. Eine MCU besteht typischerweise aus einem Multipoint Controller (MC) und einer variablen Anzahl an Multipoint Prozessoren (MP). Der MC hat Kontrollaufgaben wie Capability exchange, während die MPs die Medienströme verarbeiten und mischen. 4.3.2. Kanäle H.323 definiert folgende Transport-Layer-Verbindungen als Kanäle: RAS channel: Dieser Kanal dient der Kommunikation zwischen Endknoten und Gatekeeper und ist in H.225.0 definiert. Der Endknoten registriert sich über diesen Kanal und fragt um die Berechtigung, einen Call tätigen zu dürfen. 49 Multimediakonferenzen Sichere Multimediakonferenzen example.com fiction.com [email protected] (3) Alice@klingon (2) Alice registrar server (1) INVITE [email protected] (4) INVITE Alice@klingon (7) 200 OK user agent client (6) 200 OK (8) ACK [email protected] (8) AC proxy server (9) ACK Alice@klingon User agent server (5) Alice@klingon Bild 4-4: SIP-Verbindungsaufbau mit Hilfe eines Proxy-Servers Call signaling channel: Der Kanal dient der Medienkontrolle. Nach Eröffnen des Kanals werden die logischen Medienkanäle mit Hilfe dieses Kanals initiiert. Logische Medienkanäle: Sie transportieren Audio und Video mit Hilfe von RTP/RTCP. Die Übertragung erfolgt in Paaren von unidirektionalen Kanälen. RAS und logische Kanäle laufen über ein unverlässliches Transport-Protokoll wie UDP, H.245 und der Call signaling channel über ein verlässliches Service wie TCP. 4.4. SIP So wie im Fall von H.323 wird auch bei Verwendung von SIP als Medientransport-Protokoll RTP verwendet. SIP (Session Initiation Protocol) ist ein Application-Layer-Protokoll, das MultimediaSessions erzeugen, ändern und beenden kann [RFC2543]. Es gibt zwei wesentliche Elemente: den User Agent (UA) und den Network Server. Der User Agent residiert in den Endknoten und besteht aus zwei Komponenten: aus dem User Agent Client (UAC), der für das Versenden von SIP-Requests verantwortlich ist, und dem User Agent Server (UAS), der diese Requests beantwortet. Es gibt drei Arten von Netzwerk-Servern: den Redirect Server, den Proxy Server und den Registrar. Ein einfacher SIP Call kommt sogar ohne Server aus, aber viele Services benötigen sie. Im Vergleich zu H.323 ist der SIP UA äquivalent zu einem H.323 Terminal während die SIP Server dem H.323 Gatekeeper entsprechen. Eine typische Prozedur stellt ein SIP UAC dar, der einen Request sendet, wie in Bild 4-4 abgebildet. Ein SIP Proxy Server kümmert sich um die Lokalisierung des gewünschten Partners und ein SIP UAS akzeptiert den Call. Der gesamte Verbindungsaufbau nimmt in diesem Beispiel neun Schritte in Anspruch – eine erfolgreiche SIP-Invitation besteht im allgemeinen lediglich aus einem INVITE- und einem ACK-Request. Der INVITE-Request beinhaltet eine Session-Beschreibung mit Informationen 50 Sichere Multimediakonferenzen Multimediakonferenzen zu den unterstützten Medientypen und der Transport-Adresse, wohin die Mediendaten gesendet werden sollen. SIP Adressen werden SIP-URLs genannt und haben die Form sip:[email protected]. Das SIP Message-Format basiert auf dem leicht lesbaren HTTP Message-Format. In Bild 4-4 ist auch ein sogenannter Registrar-Server zu sehen, bei dem sich Empfänger – im konkreten Fall Alice – mit ihrer SIP-URL und IP-Adressen registrieren, sodass später eine Lokalisierung des Teilnehmers über die SIP-URL möglich ist. Redirect-Server behandeln eine INVITE Message, indem sie die SIP-URL des Empfängers zrücksenden, sodass der Client selbst die Verbindung zum Empfänger aufbauen kann Statt die Nachrichten indirekt über einen Proxy Server zu senden, werden diese also direkt zwischen den Teilnehmern ausgetauscht. SIP-Server können auch eine Kombination aus den verschiedenen ServerTypen sein; so wäre etwa ein kombinierter Server vorstellbar, der sowohl die Aufgaben eines Proxyals auch eines Registrar-Servers übernimmt. Die Beschreibung von SIP Sessions in Requests wird nicht von SIP selbst gemacht. Dazu steht ein eigenes Protokoll zur Verfügung, dessen sich SIP bedient: das Session Description Protocol (SDP). Es dient neben der Beschreibung auch für das Annoncieren von Sessions [RFC2327]. 4.5. RTP/RTCP Das Real Time Protocol (RTP) ist ein Transport Protokoll zum Übertragen von Datenblöcken in Echtzeit über Multicast oder Unicast Netzwerk-Dienste [RFC1889]. Das Datentransport-Protokoll RTP arbeitet stets zusammen mit dem Kontrollprotokoll RTCP (RTP Control Protocol). Letzteres erlaubt das Monitoring des Datentransfers in einer Art und Weise, dass es sich an eine große Anzahl an Multicast-Teilnehmer anpassen kann, ohne das Netzwerk zu überlasten (scaling). RTP und RTCP sind unabhängig von den darunter liegenden Transport und Network Schichten, werden in der Regel aber mit UDP/IP verwendet. Zu den wichtigsten Anforderungen, die die Übertragung von Real-Time-Datenströmen an ein Transport-Protokoll stellt, zählen Sequencing: Die Pakete müssen am Empfänger in Echtzeit geordnet werden. Verlorene Pakete müssen erkannt und ohne nochmalige Übertragung kompensiert werden. Medien-Synchronisation: Da keine Pakete während der Sprechpausen generiert werden, muss die Zeitdifferenz zwischen aufeinander folgenden Paketen übermittelt und eingehalten werden. Zusätzlich sollen die Medien untereinander, z. B. Audio und Video, synchronisiert werden, damit das Bild zum Ton passt. RTP/RTCP ist medienunabhängig. Das Kodierungsschema für ein bestimmtes Paket kann aus dem Header entnommen werden und entspricht einem bei IANA (Internet Assigned Numbers Authority) registrierten Schema. Obwohl QoS nicht im Bereich von RTCP liegt, wird ein Feedback generiert, das den Sendern Aufschluss über den Zustand der Übertragung gibt. Mixer und Translatoren sind zwei Komponenten, die in RTP-Systemen eingesetzt werden können. Sie konvertieren Mediendaten und dienen somit der effizienten Datenübertragung. Mixer kombinieren die Mediendaten verschiedener User zu einem Datenstrom und senden diesen. Translatoren hingegen betrachten nur einen einzelnen Datenstrom und konvertieren diesen in ein anderes Format, bevor sie 51 Multimediakonferenzen 0 4 V Sichere Multimediakonferenzen 8 16 CSRC payload P X count M type 31 sequence number timestamp synchronization source identifier (SSRC) contributing source identifiers (CSRC) opt. header extension opt. payload (audio, video, ...) Pad Bild 4-5: opt. RTP Header diesen senden. Translatoren können die Übertragung an die verfügbare Bandbreite anpassen und die Sender von dieser Aufgabe entlasten. Die Verschlüsselung der Mediendaten erfolgt über eine Methode, die durch das Signaling Protokoll vereinbart wird. Das bedeutet, dass durch H.323 oder SIP die Authentifizierung der Teilnehmer sowie auch der Austausch von Schlüsseln erfolgt, die dann zur Chiffrierung der Mediendaten herangezogen werden. 4.5.1. RTP Wenn ein Host Mediendaten senden möchte, übergibt er sie an RTP. RTP formatiert die Daten in Paketgröße, hängt diese an den RTP Header an und übergibt sie dem Transport Layer. Dadurch erfolgt die Übertragung zu einer Multicast-Gruppe oder unicast zu einem anderen Teilnehmer. Der RTP-Header besteht aus 12 Byte und einigen zusätzlichen optionalen Feldern und ist in Bild 4-5 dargestellt. V indiziert die Protokoll-Version, X signalisiert die Existenz einer Header extension. Wenn P gesetzt ist, besteht ein Padding am Ende der Payload, das nicht von RTP selbst benötigt wird, sondern den verwendeten Verschlüsselungsalgorithmus unterstützt, um eine einheitliche Blockgröße zu erreichen. Die Teilnehmer einer Multicast-Gruppe werden durch 32-Bit IDs (SSRC) identifiziert. Wenn ein Mixer im Einsatz ist, werden alle Teilnehmer, die zum Inhalt dieses Pakets beitragen – z. B. alle Sprecher einer Telefonkonferenz – in der CSRC-Liste aufgeführt, deren Länge durch den CSRC count bestimmt wird. Das M-Bit dient der Unterstützung des Framing und indiziert je nach Medium den Beginn oder das Ende eines zusammengehörigen Datenblocks. Payload type identifiziert das Kodierverfahren für dieses Paket. Sequence Number wird mit jedem Paket inkrementiert und zeigt den Zeitpunkt der Erzeugung des Pakets. Die Payload kann selbst einen medienspezifischen Header beinhalten. 52 Sichere Multimediakonferenzen 4.5.2. Multimediakonferenzen RTCP Der Datentransport von RTP wird durch ein Kontrollprotokoll erweitert, um die Übertragung zu überwachen und Informationen über die Sender und Empfänger der Datenströme auszutauschen. Durch das Senden von Feedback können Sender ihre Datenströme an die mögliche Übertragungsrate des Netzwerks anpassen. Jedes RTCP Paket besteht im allgemeinen aus einem sender report (SR) oder einem receiver report (RR), gefolgt von source descriptors (SDES). Sender reports werden von RTP-Sources generiert und beschreiben die Anzahl der gesendeten Bytes sowie Synchronisationsinformationen. Ein receiver report beschreibt für jeden Sender der Gruppe die Verlustrate und den Jitter. SDES-Pakete beinhalten einige Informationen über die Session wie den kanonischen Namen (CName), der die Form einer Email-Adresse hat, sowie Name, Email, Telefonnummer, etc. Diese Informationen können im User Interface dargestellt werden, um andere Teilnehmer kennenzulernen. Die RTCP-Pakete werden periodisch gesendet. Allerdings nimmt die Frequenz mit zunehmender Teilnehmeranzahl ab, damit große Gruppen das Netz nicht überlasten. 4.6. RSVP Während verbindungsorientierte Netze immer ein Setup-Protokoll benötigen, um in den Switches die nötigen Ressourcen zu reservieren, entstehen solche Protokolle erst mit dem Aufkommen neuer Dienste wie Echtzeit-Applikationen. Das meistbeachtetste derartige Protokoll ist das Resource Reservation Protocol (RSVP) [PD96, RFC2205]. RSVP ermöglicht es, Ressourcen im Internet zu reservieren. Damit können Benutzer, die einen Datenstrom empfangen möchten, die nötige Bandbreite vom Netzwerk anfordern. Die Reservierung findet vor dem eigentlichen Datentransfer statt. Paketvermittelte Netze erreichen Robustheit vor allem folgender Charakteristik: Router können abstürzen und Links ausfallen, ohne die Übertragung abzubrechen – die Daten können im allgemeinen auch einen anderen Weg durchs Netz nehmen. Um diese Situation zu erhalten, verwendet RSVP das Konzept des Soft State in den Routern, der nicht explizit gelöscht werden muss, sondern mittels Timeout terminiert wird, sobald das regelmäßige Refresh durch den Endknoten ausbleibt. Allerdings ist noch anzumerken, dass paketvermittelte Netzwerke nicht jenen Grad an Robustheit erreichen, der in leitungsvermittelten Netzen herrscht. Eine weitere Idee hinter RSVP ist der empfänger-orientierte Zugang. D. h., Empfänger sind für die Reservierung zuständig. Dies ist deshalb sinnvoll, da bei vielen Multicast Applikationen wesentlich mehr Empfänger als Sender existieren (z. B. Videoausstrahlung) und außerdem nicht jeder Empfänger die selben Medien empfangen möchte. Aufgrund von Soft State und Empfänger-Orientierung ist es einfach, Änderungen in der Reservierung vorzunehmen: Dafür ist lediglich ein Refresh mit geänderten Anforderungen nötig. 53 Multimediakonferenzen Sender 1 Sichere Multimediakonferenzen PATH R Sender 2 R PATH RESV (merged) R R RESV Empfänger 1 R RESV Bild 4-6: 4.6.1. Empfänger 2 RSVP Multicast-Baum Reservierung Für den einfachen Fall einer Unicast-Übertragung sind zwei Schritte notwendig. Zuerst benötigt der Empfänger die Charakteristik des Datenstroms des Senders, die sogenannte Flow Spec, um dann die Reservierung entsprechend zu beantragen. Diese Reservierung muss in jedem Router entlang des Übertragungspfades erfolgen. Dazu sendet der Sender eine PATH-Nachricht mit der Flow Spec zum Empfänger. Jeder Router, der diese Nachricht erhält, merkt sich den reverse path, den die Reservierungsanforderung später gehen wird. Nach dem Empfang der PATH-Message sendet der Empfänger eine RESV-Message zurück mit den benötigten Anforderungen. Jeder Router entlang des Pfades versucht die Reservierung durchzuführen und sendet die RESV-Nachricht weiter. Wenn alles gut geht, bestehen ab nun die reservierten Ressourcen zwischen Sender und Empfänger. Solange diese aufrecht erhalten werden sollen, sendet der Empfänger alle 30 Sekunden wieder eine RESV-Nachricht. Auch die PATH-Messages werden periodisch ausgesendet. Wenn ein Router oder Link ausfällt, geht die PATH-Nachricht automatisch einen anderen Weg, und ein neuer Pfad wird erzeugt, auf dem die RESV-Nachrichten und die Daten gesendet werden. Router, die nicht mehr am Pfad liegen, erhalten keine RESV-Nachrichten mehr und geben ihre Ressourcen frei. Im Fall von Multicast kann es mehrere Sender und mehrere Empfänger geben (Bild 4-6). Gibt es mehrere Empfänger und einen Sender, dann können sich die Pfade überschneiden. In diesem Fall senden alle Empfänger ihre RESV-Messages, die sich in einem Router treffen und getrennt oder gemeinsam behandelt werden. Verlangen z. B. zwei Empfänger die selbe Zusicherung bezüglich der Netzwerkverzögerung, dann braucht nur eine Reservierung durchgeführt werden, wenn sie die gleichen Daten erhalten. Bei Anfragen bezüglich Datenrate müssen die Datenraten aller Empfänger addiert werden. Gibt es mehrere Sender, sammeln die Empfänger die Flow Specs aller Sender und machen erst dann ihre Reservierungs-Anfrage. Dabei wird es etwa bei einer Audiokonferenz trotz vieler Teilnehmer ausreichen, Ressource für maximal zwei gleichzeitige Sprecher zu reservieren; mehrere Sprecher gleichzeitig würde kaum Sinn machen. 54 Sichere Multimediakonferenzen Windows Sockets 5. Windows Sockets Dieses Kapitel ist eine Darstellung der Netzwerkprogrammierung unter Windows. Windows Sockets, oder kurz WinSock, stellt einen Quasi-Standard für die Nutzung der Netzwerkdienste von Windows und Windows NT dar. Es wird das Client/Server Modell beschrieben, das die Grundlage aller Netzwerkprogramme darstellt. Weiters wird die Herstellung von virtuellen Verbindungen und das Austauschen von Daten zwischen zwei Hosts erläutert, sowie verschiedene Operationsmodi und die neuen Konzepte von WinSock 2 mit besonderem Augenmerk auf die Layered Protocol Architektur. Ein Socket bezeichnet ein abstraktes Objekt und stellt ein Kommunikationsmedium dar, über das Informationen über ein Netzwerk ausgetauscht werden können. Es dient als Übergabepunkt von Applikationen an die Netzwerkdienste des Betriebssystems. Mit Hilfe von Sockets können Daten zwischen Applikationen auf verschiedenen Hosts gesendet und empfangen werden. Jedes Socket entspricht einer bestimmten Protokollfamilie (z. B. TCP oder UDP) und wird durch das Tupel aus IPAdresse und Port definiert. 5.1. Das WinSock-Modell OSI Layers WinSock Modell 7 Application 6 Presentation 5 Session 4 Transport 3 Network 2 Data link Network Driver 1 Physical Network Interface Bild 5-1: Windows Sockets Application WinSock API Protocol Stack (z. B.. TCP/IP) Netzwerk System Windows Sockets Modell im Vergleich zum OSI Referenzmodell Ausgehend von der OSI Struktur kann man einen Vergleich zum WinSock-Modell anstellen [QS96]. Die oberen Schichten (OSI layers 5-7) entsprechen der WinSock Applikation, darunter liegen die den OSI Layers 1-4 entsprechenden Schichten des Netzwerk-Systems. Dazwischen liegt das Application Programming Interface (API), das von WinSock zur Verfügung gestellt wird. 55 Windows Sockets Sichere Multimediakonferenzen Eine Winsock-Applikation ist typischerweise eine ausführbare Datei, kann aber auch eine DLL sein. Beide sind in der Lage, die WinSock API einzubeziehen und die Dienste zu nutzen. Die WinSock API (WSA) ermöglicht Zugriff auf das Netzwerk. Das Netzwerk nimmt Daten von der Applikation entgegen. Es behandelt dabei die Daten, ohne sie in irgendeiner Weise zu interpretieren, d. h. die Übertragung erfolgt unabhängig vom Informationsgehalt. Nicht das Netzwerk, sondern die Applikationen tauschen Informationen aus. Für das Netzwerk erscheinen alle übergebenen Informationen als strukturlose Datenansammlungen ohne weitere Bedeutung. Das WinSock API ist protokoll-unabhängig. Das API darf nicht gleichgesetzt werden mit der Protokoll-Suite, die es unterstützt. Das API gibt Zugang zu den Netzwerk-Services der Protokolle, aber die Palette der installierten Protokolle entscheidet nicht unmittelbar über das Aussehen des API. Verschiedene APIs können die selben Services und damit dasselbe API exportieren; Andererseits kann ein Protokoll seine Services auch durch eine andere API anbieten – WinSock ist nicht die einzige API für TCP/IP; Das selbe API ist nur dann auf zwei miteinander kommunizierenden Hosts notwendig, wenn der selbe Quellcode lauffähig sein soll. 5.2. Programm-Schema Trotz einer Vielzahl an möglichen Netzwerk-Applikationen, die mit Hilfe von WinSock realisiert werden können, bauen alle auf einem einfachen Schema auf [QS96, Sin96], das in diesem Abschnitt behandelt wird. Zunächst wird das Client/Server-Modell betrachtet, das die Grundlage für die Kommunikation mit Sockets darstellt. Daran schließt eine Beschreibung an, welche Reihenfolge von Operationen ausgeführt wird, wenn ein TCP- oder UDP-Datenaustausch erfolgt. Die einzelnen Schritte werden danach weiter ausgeführt. 5.2.1. Client/Server Modell Jede Netzwerkapplikation ist ein Kommunikations-Endpunkt. Man unterscheidet zwischen zwei Arten von Endpunkten: Client und Server. Der Client sendet das erste Paket, der Server empfängt es. Da es schwierig zu koordinieren wäre, brauchen nicht beide zur exakt selben Zeit ihre Aktionen setzen. Stattdessen werden komplementäre Netzwerk-Operationen sequenziell ausgeführt: •= Der Server startet zuerst, indem er ein Socket erzeugt und wartet; •= Danach erzeugt der Client ein Socket und sendet damit das erste Paket in Richtung Server; •= Nachdem der Kontakt hergestellt ist, können beide senden und empfangen. Client-Server Assoziation Die Sockets werden nach dem Protokoll typisiert, das sie unterstützen; Häufig anzutreffen sind Stream-Sockets (sie unterstützen z. B. TCP) und Datagram-Sockets (z. B. UDP). Die Sockets an beiden Endpunkten müssen vom gleichen Typ sein. Server benennen ihre Sockets, damit Clients sie im Netzwerk lokalisieren können. Der Name besteht aus drei Teilen: Socket-Name = (Protokoll, IP Adresse, Port), 56 Sichere Multimediakonferenzen Windows Sockets also z. B. (TCP, 129.27.142.140, 80) für einen Endpunkt einer HTTP Verbindung. Der Client muss also den Namen des Servers kennen, damit der Datenaustausch initiiert werden kann. Nach der Kontaktierung sind Client und Server assoziiert. Ein Assoziation wird aus den beiden Namen der Endpunkte gebildet, wobei das Protokoll das selbe ist: Assoziation = (Protokoll, Client IP Adresse, Client Port, Server IP Adresse, Server Port). Bei TCP besteht die Assoziation von Beginn der TCP-Verbindung bis zu ihrer Terminierung, bei UDP ist dies nicht ganz klar, da keine virtuelle Verbindung erzeugt wird; Theoretisch entsteht die Assoziation bei jeder Datagramm-Übertragung neu. 5.2.2. Programm-Skizze Alle Netzwerk-Programme – sowohl Client also auch Server – führen diese fünf Schritte aus, die in den folgenden Abschnitten näher erläutert werden: Socket öffnen; Socket benennen; Mit einem anderen Socket assoziieren; Senden/Empfangen zwischen den Sockets; Socket schließen. Es sind dies die selben Schritte wie für File I/O, außer dass Dateien nicht erst benannt und mit dem System Device assoziiert werden müssen. Der Name eines Sockets wird eliminiert, wenn es geschlossen wird. 5.2.3. Socket öffnen Ein Socket ist eine Software-Abstraktion, äquivalent zum Netzwerk Hardware Interface. Applikationen können damit Zugang zum Netz erhalten. Viele Sockets können sich ein gemeinsames Interface teilen, es besteht also eine 1:n Beziehung. Ein Socket wird mit folgendem Befehl erzeugt: SOCKET PASCAL FAR socket(int af, int type, int protocol); Der Rückgabewert ist ein opakes Handle zum Verweisen auf das Socket. Es ist kein bestimmter Wert zu erwarten, außer den Fehlercode für einen Mißerfolg: INVALID_SOCKET. Die genaue Ursache für den Fehler erhält man mittels WSAGetLastError(). af steht für die Adress-Familie, type für den Protokolltyp (AF_INET für die TCP/IP Suite) und protocol wählt ein Protokoll aus der Protokoll-Suite. 5.2.4. Socket benennen Ein Server muss seine Sockets benennen, damit Clients sie lokalisieren können. Die Namensattribute – Protokoll, Adresse, Port – spiegeln sich in der sockaddr_in Struktur wider. Es handelt sich um eine zentrale Datenstruktur, die für mehrere Socket Kommandos verwendet wird: 57 Windows Sockets struct sockaddr_in { short u_short struct char }; Sichere Multimediakonferenzen sin_family; sin_port; in_addr sin_addr; sin_zero[8]; /* adress family (AF_INET) */ /* port (service) Nummer */ /* IP Adresse (32-bit) */ /* Padding, unbenutzt */ Wenn der Server ein Socket benennt, wird in sin_addr die lokale IP Adresse eingetragen. Das Makro INADDR_ANY sorgt für eine automatische Zuweisung der lokalen Adresse, selbst bei mehreren Interfaces. Das angebotene Service kommt in das Feld sin_port. Das Kommando bind() weist den Inhalt der sockaddr_in Struktur dem Socket zu: int PASCAL FAR bind (SOCKET s, struct sockaddr FAR *addr, int namelen); Das bind()-Kommando akzeptiert die protokoll-unabhängige Struktur sockaddr, um nicht auf eine Adress-Familie eingeschränkt zu sein. Die allgemein übliche Praxis ist, die sockaddr_in-Struktur mittels Typecast in den Typ sockaddr überzuführen. Beide Strukturen haben die selbe Länge, die mittels namelen (in Bytes) spezifiziert wird. Return Value ist entweder SOCKET_ERROR oder der Wert 0, der dem Makro NOERROR entspricht. Bei Clients ist die Benennung optional. Obwohl jedes Socket einen eindeutigen Namen benötigt, brauchen Clients ihre Sockets nicht explizit zu benennen. Die implizite Zuweisung bei der Assoziation (connect() bei TCP, sendto() bei UDP) ist üblich und ratsam, denn dadurch entstehen keine Konflikte bei der Vergabe von Portnummern. In jedem Fall ist der Name später mit getsockname() abrufbar. Die Namensgebung ist einmalig; Bei einem wiederholten Versuch resultiert eine Fehlermeldung. 5.2.5. Socket-Assoziation Die Assoziation ist gekennzeichnet durch die Kombination zweier Socket-Namen. Sie erfolgt in drei Schritten: TCP UDP Vorbereitung des Servers listen() dispatch recv() oder select() Client initiiert Assoziation connect() sendto() Server vollendet Assoziation accept() complete recv() Szenario UDP Die Assoziation erfolgt während des Sendens bzw. Empfanges des ersten Datenpaketes. Der Server startet recv() oder recvfrom() und wartet darauf, bis Daten von einem Client ankommen. Der Client sendet mittels send() oder sendto() und der Server kann die Daten empfangen. Damit sind die Sockets assoziiert. 58 Sichere Multimediakonferenzen Windows Sockets Szenario TCP Der Server hat ein explizites Kommando zur Verfügung, um die Assoziation vorzubereiten. Mit der Operation listen() geht ein Server in den Wartezustand: int PASCAL FAR listen (SOCKET s, int backlog); Der Parameter backlog gibt die Anzahl der Connection Requests an, die gebuffert werden sollen, während gerade andere Verbindungen behandelt werden. Er liegt zwischen 1 und 5. Das Socket s wird in den Wartezustand versetzt. Connection Requests werden mit select() oder accept() erkannt. Der Unterschied zwischen den beiden ist, dass select() lediglich den Status berichtet, während accept() die Assoziation effektiv durchführt. int PASCAL FAR connect (SOCKET s, struct sockaddr FAR *addr, int namelen); Der Client initiiert den Verbindungsaufbau, indem er connect() aufruft. Wenn das Socket noch nicht benannt wurde, wird das hiermit erledigt. Die sockaddr-Struktur beschreibt hier den Namen des Servers. Ein häufiger Fehlercode ist 10061: WSAECONNREFUSED. Dies tritt etwa dann auf, wenn der Server nicht aktiv ist. SOCKET PASCAL FAR accept (SOCKET s, sockaddr FAR *addr, int FAR *addrlen); Die Assoziation ist abgeschlossen, nachdem accept() erfolgreich ausgeführt wurde. Als Rückgabewert erhält man ein neues Socket-Handle oder INVALID_SOCKET. Die sockaddr-Struktur wird hier nicht vor dem Aufruf von accept() mit Werten versehen, sondern von accept() selbst. Nach der Ausführung enthält die Struktur den Namen des Clients. Der Socket s kann für weitere Connection Requests verwendet werden, da mit jeder neuen Verbindung ein neues Socket generiert wird. Damit kann ein Multi-Threaded Server erstellt werden, indem für jede neue Verbindung ein neuer Thread gestartet wird. 5.2.6. Senden und Empfangen Nachdem eine Assoziation aufgebaut ist, sind Client und Server gleichberechtigte Peers, das heißt beide können jederzeit senden und empfangen. Zum Senden stehen zwei Funktionen zur Verfügung: send() und sendto(). send() ist nur dann möglich, wenn zuvor ein connect() für dieses Socket aufgerufen wurde, das die Default Ziel-Adresse definiert. Für TCP ist der Aufruf von connect() obligat. sendto() erwartet einen Adress-Parameter, der das Ziel angibt, und wird häufig für UDP Sockets verwendet. int PASCAL FAR send (SOCKET s, const char FAR *buf, int len, int flags); int PASCAL FAR sendto (SOCKET s, const char FAR *buf, int len, int flags, struct sockaddr FAR *to, int tolen); buf und len spezifizieren die Attribute des Buffers, der gesendet werden soll. Als Rückgabewert erhält man die Anzahl der gesendeten Bytes oder die Standard-Fehlermeldung SOCKET_ERROR. Da TCP Stream-orientiert ist, kann der Rückgabewert durchaus kleiner sein als die Buffergröße und die restlichen Bytes werden später gesendet. UDP hingegen bricht mit einer Fehlermeldung ab, wenn nicht die gesamte Message zugestellt werden kann. 59 Windows Sockets Sichere Multimediakonferenzen Generell heißt eine erfolgreiche Ausführung lediglich, dass die Daten an den Protokoll-Stack weitergegeben werden konnten – die Buffer waren also groß genug. Es heißt aber nicht, dass sie am Socket des Peers ankommen. int PASCAL FAR recv (SOCKET s, char FAR *buf, int len, int flags); int PASCAL FAR recvfrom (SOCKET s, char FAR *buf, int len, int flags, struct sockaddr FAR *from, int fromlen); Zum Empfangen gibt es wieder ein Funktionen-Paar. Die beiden unterscheiden sich lediglich im zusätzlichen Buffer from und seiner Längenangabe. from enthält Angaben über den Sender, nachdem die Operation erfolgreich abgeschlossen wurde. Als Rückgabewert gibt es wieder die Anzahl an Bytes der erfolgten Transaktion, in diesem Fall die Größe des eingegangenen Datenblocks. Die Verfügbarkeit von Daten wird mit select() oder WSAAsyncSelect() festgestellt. Die asynchrone Variante veranlasst das Windows-System, eine Nachricht zu senden, sobald Daten darauf warten, abgeholt zu werden. So wie send() kann auch recv() nur auf „connected“ Sockets angewendet werden. Der Aufruf von connect() hat für recv() die Funktion eines Filters. IP Pakete, bei denen nicht IP Adresse und Port übereinstimmen, werden vom Protokoll-Stack verworfen. Socket Demultiplexing Das Socket-Handle erscheint in den Paketen nicht selbst. Es ist also ein Verfahren notwendig, die die ankommenden Pakete dem richtigen Socket und damit dem gewünschten Empfänger zuordnet. Das geschieht über das 5-Tupel der Assoziation (Protokoll, IP Source Adresse, Source Port, IP Dest Adresse, Dest Port), das in jedem Paket in den Headern von IP und TCP bzw. UDP zu finden ist; Die IP Adressen finden sich im IP Header, die Ports im TCP/UDP Header. 5.2.7. Socket schließen Zum Schließen eines Sockets gibt es zwei Kommandos. Das Schließen eines Sockets läuft im allgemeinen in zwei Schritten ab. Zunächst teilt man die Absicht mit, ein Socket zu schließen. Dies erfolgt mit dem Kommando shutdown(). Damit beendet man die eigene Datenübertragung und und wartet darauf, dass eventuell noch im Umlauf befindliche Daten ankommen. Wenn alle Daten empfangen wurden, werden die Ressourcen des Sockets durch den Befehl closesocket() freigegeben. Der Syntax der beiden Operationen ist: int PASCAL FAR shutdown (SOCKET s, int how); int PASCAL FAR closesocket (SOCKET s); 60 Sichere Multimediakonferenzen Windows Sockets Client Server socket() socket() initialisiere sockaddr_in mit Server Namen initialisiere sockaddr_in mit lokalem Namen bind() listen() connect() accept() /* Assoziation erzeugt – beide Seiten können senden und empfangen */ send() recv() recv() send() closesocket() closesocket() /* connected Socket */ closesocket() /* Listener-Socket */ Bild 5-2: Verbindungsorientierte Netzwerk-Programme (TCP) Für den how Parameter von shutdown() können drei Werte eingesetzt werden. Diese Werte beeinflussen die Art, wie die Schließung des Socktes initiiert wird. Man spricht von einem graceful shutdown, wenn zuerst noch im Umlauf befindliche Daten empfangen werden, bevor das Socket terminiert wird. 0: Empfangen ab sofort unterbunden 1: Senden unterbunden 2: Beides Ein graceful shutdown erreicht man bei Verwendung von how = 1. Bei dieser Variante wird ein TCP FIN an den Peer gesendet, das diesem mitteilt, dass keine Pakete mehr zu erwarten sind. Das Empfangen für den Initiator des shutdown() ist aber weiterhin möglich. Es sollen noch alle Daten empfangen werden, die im Umlauf sind – das sind jene Pakete, die die Gegenseite gesendet hat, bevor die Nachricht TCP FIN erhalten wurde. Danach ist der korrekte Zeitpunkt, das Socket freizugeben. Mit how = 0 ist ein graceful shutdown nicht möglich, da ein Empfangen von im Umlauf befindlichen Daten nicht mehr möglich ist. Außerdem bekommt der Sender keine direkte Information, dass sein Gegenüber keine Daten mehr entgegennimmt. Mit how = 2 gibt man die Möglichkeit des graceful shutdown ebenfalls aus der Hand, da keine Pakete empfangen werden können. Aber immerhin wird die Gegenseite benachrichtigt. Sollte es sich also um einen unidirektionalen Datenaustausch handeln, ist diese Option die richtige Wahl. 61 Windows Sockets 5.2.8. Sichere Multimediakonferenzen Skizzen für TCP und UDP Das Zusammenspiel der bisher beschriebenen Operationen lässt sich am anschaulichsten mit Hilfe von einfachen Skizzen zeigen. Es gibt nicht die eine Skizze, die für alle Fälle gilt, denn dafür sind Stream(siehe Bild 5-2) und Datagramm-Service (siehe Bild 5-3 und Bild 5-4) zu unterschiedlich. Client Server socket() socket() initialisiere sockaddr_in mit Server Namen initialisiere sockaddr_in mit lokalem Namen bind() connect() send() recv() /* Assoziation erzeugt – beide Seiten können senden und empfangen */ recv() send() closesocket() closesocket() Bild 5-3: Verbindungslose Netzwerk-Programme (UDP) – Setze den Namen des Empängers explizit Client Server socket() socket() initialisiere sockaddr_in mit Server Namen initialisiere sockaddr_in mit lokalem Namen bind() sendto() recvfrom() recvfrom() sendto() closesocket() closesocket() Bild 5-4: Verbindungslose Netzwerk-Programme (UDP) – Setze den Namen des Empfänger bei jedem Datagramm Für Datagramm-orientierte Programme gibt es die Möglichkeit, den Namen des Servers mit connect() zu setzen. Jedes folgende send() benutzt diese Adresse als Default. Alternativ steht der sendto() Befehlt zur Verfügung, der den Namen des Servers als Parameter übernimmt, und auch einen eventuellen Default-Wert übertrifft. Dies ist besonders dann nützlich, wenn der Client an unterschiedliche Server sendet. 62 Sichere Multimediakonferenzen Windows Sockets 5.3. Operationsmodi Sockets lassen sich in verschiedenen Modi betreiben. WinSock 1.1 unterstützt Blocking und Nonblocking Mode. In der aktuellen Version 2.0 kommt noch der Overlapped-Modus dazu. Die Operationsmodi erlauben die flexible Unterstützung von Applikationsbedürfnissen – je nachdem, ob der Datendurchsatz oder die simultane Behandlung mehrerer Sockets Priorität haben. Beide Kommandos zum Senden und beide Kommandos zum Empfangen unterstützen jeweils alle drei Modi. 5.3.1. Blocking I/O Diese ist die einfachste Form, I/O zu betreiben. Jedes Socket, das nicht mit dem Overlapped-Flag erzeugt wird, befindet sich zunächst in diesem Modus. Sämtliche Sende- und Empfangsoperationen blockieren, d. h. kehren nicht zurück, solange die Operation nicht vollständig abgeschlossen wird. Das bedeutet, ein Thread ist während dieser Zeit im Wartezustand. Sollen mehrere Sockets bedient werden, empfiehlt sich eine Applikation aus mehreren parallelen Threads. 5.3.2. Nonblocking I/O Sockets können nach ihrer Erzeugung vom Blocking in den Nonblocking Zustand versetzt werden und umgekehrt. Dies geschieht mit dem Kommando ioctlsocket(). Im Nonblocking-Modus kehren Socket Operationen stets unmittelbar zurück, auch wenn die Aufgabe nicht bereits vollendet werden konnte. Dies macht sich in einem speziellen Rückgabewert bemerkbar (WSAEWOULDBLOCK), der zwar den Status eines Fehlercodes hat, aber im Fall von nicht blockierenden Sockets keinen Fehler diagnostiziert, sondern nur darüber informiert, dass die angeordnete Operation noch im Gang ist. Sie wird im Hintergrund ausgeführt. Die Benachrichtigung über den Abschluss erfolgt über Events. Sie können mit select() auf ihren Status überprüft werden. Für diese Art von Socket I/O empfiehlt sich eine zentrale Routine, die sämtliche Events überwacht, auswertet und die entsprechenden Schritte einleitet. 5.3.3. Overlapped I/O Sockets können mit dem Overlapped-Flag erzeugt werden. Ein späteres Hin- und Herwechseln zwischen Overlapped und Non-Overlapped Status ist nicht mehr möglich. Diese Sockets blockieren niemals. Overlapped I/O erspart einen Kopiervorgang zwischen den Buffern von Applikation und ProtokollStack. Das Resultat ist ein besserer Durchsatz. Besonders interessant ist dieses Verfahren für speicherintensive sowie zeitkritische Übertragungen wie etwa Ton- und Videokonferenzen. Die Applikation gibt bei einem WSASend() oder WSARecv() Kommando seine Buffer – es kann auch mehr als ein Buffer sein – an den Protokoll-Stack bekannt und signalisiert damit, die Buffer nicht zu stören (zu verändern), solange die I/O Operation nicht abgeschlossen ist. Das Ende des I/O wird durch Events oder Completion Routines angekündigt. Bei Verwendung von Completion Routines werden diese nach Beendigung des I/O automatisch aufgerufen. 63 Windows Sockets Sichere Multimediakonferenzen WinSock 2 Applikation WinSock 2 Applikation WinSock 2 API WinSock 2 DLL WS2-32.DLL (32 Bit) WinSock 2 Transport SPI WinSock 2 Name Space SPI Transport Service Provider Bild 5-5: Transport Service Provider Name Space Service Provider Name Space Service Provider Windows Sockets 2 Struktur als WOSA-Komponente in Windows 5.4. Service Provider Interface In der Version 2 von Windows Sockets wurde eine neue Architektur eingeführt. Bestand die WinSock 1.1 Implementierung lediglich aus einer DLL, die die API-Funktionen exportierte, handelt es sich nun um eine Struktur nach dem Vorbild von WOSA (Windows Open Services Architecture), wie in [SPI97] erläutert wird. Diese neue Architektur öffnet neue Möglichkeiten zur Erweiterung der Dienste von WinSock um beliebige Nerzwerkdienste. Eine eigene Schnittstelle, das Service Provider Interface, steht in WinSock 2 zur Verfügung und erlaubt es, Zugang zu den Daten zu erlangen, die von Netzwerkapplikationen gesendet und empfangen werden. Damit können diese Daten in gewünschter Weise bearbeitet werden. Im Fall eines Security Service Providers können die Daten auf dem Rechner des Senders verschlüsselt und auf dem Rechner des Empfängers wieder entschlüsselt werden. Die Architektur nach WOSA bietet somit äußert gute Voraussetzungen, um einen Netzwerkdienst anzubieten. In diesem Abschnitt wird zunächst genauer auf die Architektur eingegangen. Die einzelnen Aspekte der Einbindung eines Dienstes in das WinSock-System folgt darauf. Dazu wird unter anderem die Aufgabenteilung zwischen den einzelnen Komponenten der WOSA-Architektur analysiert. 5.4.1. WinSock 2 als WOSA Beim WOSA-Standard (Windows Open Services Architecture) handelt es sich um ein Set von Interfaces für Front End Applikationen und Back End Services. Applikationen und Services brauchen 64 Sichere Multimediakonferenzen Windows Sockets API WinSock 2 DLL SPI Layered Protocol SPI Layered Protocol SPI Base Protocol Bild 5-6: Layered Protocol Archtitektur nicht direkt mit einander kommunizieren, denn dazwischen liegt eine zentrale Komponente, die als Bindeglied fungiert. Diese Architektur ist in Bild 5-5 dargestellt und erlaubt die Kombination von beliebigen Applikationen mit beliebigen Services. Beide können unabhängig weiterentwickelt werden. So wie viele andere WOSA kompatible Komponenten nutzt auch WinSock 2 die Möglichkeiten von DLLs. Damit ist es möglich, dass Applikationen die erforderlichen Services erst bei ihrer Ausführung (Runtime) binden. Die Applikation braucht jedoch nur das exportierte Interface des Services kennen, nicht dessen Implementierung. Die WOSA kompatible WinSock 2 Architektur besteht aus Application Programming Interface (API), Service Provider Interface (SPI) und der zentralen WinSock 2 DLL (ws2_32.dll). Es gibt zwei Arten von Service Providern: Transport Service Provider (Datenübertragung) und Name Space Service Provider (Interface mapping z. B. zu DNS). Beide müssen registriert und damit ins Windows System eingebunden werden, damit sie aktiv sein können. Sie bleiben so lange registriert, bis sie explizit abgemeldet werden, also auch nach einem System-Neustart. Die Liste der installierten Service Provider kann von Applikationen abgerufen und durchgesehen werden. Hier sollen nur Transport Provider diskutiert werden, weitere Informationen zu Name Space Provider finden sich in [SPI97]. 5.4.2. Interface Modell Transport Service Provider sind DLLs mit nur einer exportierten Funktion: WSPStartup(). Wenn diese Funktion von der WinSock 2 DLL aufgerufen wird, enthält sie als Parameter die Dispatch Table mit den Adressen der Funktionen des darunter liegenden Providers. Der Service Provider behält sich eine Kopie und überschreibt die Einträge der Funktionen, die der Service Provider selbst anbietet. Einerseits dient der Tabellenaustausch dazu, der WinSock 2 DLL die Einsprungadressen des Service Providers mitzuteilen (z. B. für WSPSend()). Die WinSock 2 DLL leitet dann API-Calls (z. B. send()) an den Service Provider weiter anstatt direkt an den Base Provider. Andererseits gibt es auch Upcalls vom Service Provider zur DLL (z. B. WPUCompleteOverlappedRequest(), deren Adressen der Service Provider benötigt. 65 Windows Sockets Sichere Multimediakonferenzen Im Zusammenhang mit den Funktionen treten folgende Präfixe auf: WSA (WinSock API) – Funktionen, die zum WinSock API gehören WSP (WinSock Service Provider) – Transport Service Provider-Einstiegspunkte WPU (WinSock Provider Upcall) - WinSock 2 DLL-Funktionen für Service Provider WSC (WinSock Configuration) – WinSock 2 DLL-Funktionen zur Installation NSP (Name Space Provider) – Einstiegspunkte für Name Space Provider 5.4.3. Layered Service Provider Wie in Bild 5-6 zu sehen ist, besteht die Layered Protokoll-Architektur von WinSock 2 neben der WinSock 2 DLL aus einem Base Provider und einer beliebigen Anzahl an Layern, die dazwischen installiert werden können. Um die Architektur zu organisieren, gibt es das Konzept der Protocol Chain, einer Verkettung von ein oder mehreren Layered Protokollen mit dem Basis-Protokoll. Der Base Provider ist z. B. der TCP/IP Stack, der Stream und Datagramm Dienste anbietet. Das Layered Protocol nutzt den darunter liegenden Transport Stack für den Datenaustausch und implementiert ein Service, z. B. ein Security Layer mit Authentifizierung und Verschlüsselung. Es exportiert das selbe SPI wie der Base Provider und kann zwischen WinSock 2 DLL und Base Provider installiert werden, ohne dass eine Anwendung davon etwas weiß. Damit ist also ein anwendungsunabhängiges Security-Layer möglich, das sämtlich Daten während der Übertragung sichert. 5.4.4. Aufgabenteilung Die WinSock 2 DLL kümmert sich um die Organisation des Netzwerkverkehrs: der Zuordnung von Datenströmen zu Sockets und zum entsprechenden Service Provider. Die Service Provider implementieren gemeinsam mit den Base Providern die Low-Level Netzwerk-Protokolle. Die WinSock 2 DLL ist damit das Verbindungsstück zwischen Applikationen und Service Providern. Ein Service Provider implementiert ein Transport-Protokoll und erledigt damit Verbindungs-Setup, Datenübertragung, Flusskontrolle, Fehlerkontrolle und anderes mehr. Die WinSock 2 DLL hat keine Kenntnis darüber, wie Services implementiert werden, diese Details werden versteckt. Die WinSock 2 DLL ist hauptsächlich „Traffic Manager“ zwischen Service Provider und Applikation. Die Auswahl eines Service Providers erfolgt aufgrund der Parameter des socket() Calls, nämlich durch Übereinstimmung des Tupels (Adressfamilie, Socket Type, Protokoll) mit den Eigenschaften des Service Providers. Der ausgewählte Service Provider wird dem Socket für nachfolgende Calls zugeordnet (z. B. send()). Bei einem API Call der Applikation wird von der WinSock 2 DLL die entsprechende Funktion des Service Providers aufgerufen. Daneben bietet die WinSock 2 DLL einige Dienste für Applikationen und Service Provider an: Byte Swapping zwischen Netzwerk und Host Byte Order Queuing von asymmetrischen Completion Routines für Overlapped I/O Versions-Verhandlungen zwischen Applikationen und WinSock 2 DLL bzw. zwischen DLL und Service Providern 66 Sichere Multimediakonferenzen 5.4.5. Windows Sockets Mapping zwischen API- und SPI-Funktionen In WinSock 1.1 hatten die API Socket-Befehle einen einfachen Syntax: socket(), send(), recv(), etc. In WinSock 2 haben viele dieser Operationen eine erweiterte Palette an Parametern erhalten und damit einen neuen Namen mit Präfix: WSASocket(), WSASend(), etc. Es existieren also teilweise zwei Versionen von Befehlen, andere sind neu dazugekommen. Der Grund liegt in der erweiterten Funktionalität vieler Socket-Befehle, z. B. der Unterstützung des Overlapped-Modus (siehe Abschnitt 5.3.3) für Sende- und Empfangsbefehle. Dafür sind oft eine größere Zahl an Parametern für die Socket-Befehle und damit neue Versionen der Befehle notwendig. Auf der SPI Ebene gibt es jedoch nur eine Version von Befehlen, die das Präfix WSP trägt: WSPSocket(), WSPSend(), etc. Sie haben dieselben Parameter wie die WSAxxx() Befehle. Auch die WinSock 1.1 Versionen werden daher auf die erweiterten Versionen gemapped: socket() resultiert im Aufruf von WSPSocket(). Das selbe gilt für WSASocket(). Dabei haben die gemappten Socket-Befehle stets den Satz an Parametern der erweiterten WinSock 2-Befehle, damit eine vollständige ParameterÜbergabe gewährleistet wird. Einige Funktionen sind nur in der WinSock 2 DLL implementiert und haben kein Gegenstück im SPI: Byte Swapping: htons(), ntohs(), etc. Protokoll-Aufzählung sämtlicher Service Provider: WSAEnumProtocols() Fehlerinformation der letzten Socket-Operation: WSAGetLastError() TCP-spezifische Konversionen: gethostbyaddr(), gethostbyname() Daneben gibt es auch noch Funktionen, die direkt auf Services des Operationssystems abgebildet werden. Dazu zählen Event-Management- sowie Warte-Funktionen: z. B. WSASetEvent(), WSAWaitForMultipleEvents(). 5.4.6. Installation Es ist eine Eintragung in die Configuration Database von WinSock 2 notwendig, damit ein Service Provider aktiviert werden kann. Die WinSock 2 DLL exportiert eine Installations-Funktion (WSCInstallProvider()), die der Hersteller des Service Providers in einem eigenen Installationsprogramm aufrufen kann, um den Service Provider zu registrieren. Dabei wird eine Liste von Service bzw. Base Providern verlangt, die dieser Service Provider unterstützt. Als Gegenstück existiert die Funktion WSCDeinstallProvider(), wodurch die Informationen aus der Datenbank entfernt werden. Entscheidend dafür, dass der installierte Service Provider auch den entsprechenden Applikationen zugeordnet wird, ist die Reihenfolge, in der die einzelnen Service Provider in der WinSock 2 DLL erscheinen, denn der erste passende Service Provider wird gewählt. Ein Service Provider, der auf TCP/IP aufsetzt, sollte also vor dem TCP/IP Base Provider selbst erscheinen. Eine Änderung der Reihenfolge ist mit Hilfe von sporder.dll und sporder.exe möglich. 67 Windows Sockets Sichere Multimediakonferenzen Der Parameter ChainLen steuert, ob ein Base Provider, ein Layered Protocol oder eine Protocol Chain registriert wird: 0: Layered Protocol 1: Base Protocol – oder Kette mit nur einem Element 2: Protocol Chain Zuerst werden alle Layered Protokolle und Base Provider ins System eingefügt, danach die Ketten, die sich aus diesen zusammensetzen. Eine Kette listet alle Provider auf, aus der sie besteht. Das Element 0 entspricht dem ersten Provider, z. B. die des Security Services. Das nächste Element ist der darunter liegenden Provider, z. B. TCP. Es ist nicht möglich, in einer Kette einen Provider mehrmals zu instanzieren. 68 Sichere Multimediakonferenzen Benutzung des RLSP 6. Benutzung des RLSP Im praktischen Teil der Diplomarbeit sollte eine Möglichkeit gefunden werden, Sicherheitsmechanismen für den Einsatz mit Multimedia-Konferenzsystemen zu finden. Das Ergebnis ist eine dynamische Bibliothek, die in das Windows-System eingebunden werden kann und applikationsunabhängig eine mit SSL kryptographisch gesicherte Verbindung zwischen Hosts im Netzwerk bereitstellt. Das folgende Kapitel erläutert die Motivation und den Einsatz dieses Sicherheitsmechanismus. 6.1. Aufgabenstellung Ausgangspunkt war, eine Möglichkeit zu finden, dass Teilnehmer einer Videokonferenz über Instrumente verfügen, sich gegenseitig zu authentifizieren sowie einen gesicherten Datenaustausch zu gewährleisten, sodass Integrität und Vertraulichkeit gewahrt bleiben. Dazu galt es, einen entsprechenden Zugang zu wählen. Einerseits kann man sich an den verwendeten Protokollen orientieren, die hinter den verbreiteten Videokonferenzsystemen stecken, und davon ausgehend Authentifizierungs- und Verschlüsselungsmaßnahmen implementieren. Hier gibt es mehrere Schwierigkeiten: Zunächst muss man festhalten, dass es zwar Standards gibt, diese aber von verschiedener Herstellern auch verschieden interpretiert werden. Dazu kommt, dass Standards sich stets weiterentwickeln. Das bedeutet, dass eine regelmäßige Anpassung der Sicherheitslösung erfolgen müsste. Andererseits kann man bestimmte Kombinationen von IP-Adressen und Portnummern heranziehen, die vom Benutzer spezifiziert werden, und auf diese Kanäle die Sicherheitsmechanismen anwenden. Dies hat den entscheidenden Vorteil, unabhängig von Applikationen und Protokollen zu sein. Man ist also nicht auf Multimediakonferenzen beschränkt, sondern kann auch andere Netzwerkapplikationen wie etwa FTP und VNC mit einem Sicherheitsdienst unterstützen. Von Beginn an war es eine klare Anforderung, dass für die Applikationen selbst keine Änderungen entstehen dürfen. Das heißt insbesondere, dass für sie nach Einbeziehung des Sicherheitsdienstes die Verbindungen, die zwischen Hosts aufgebaut werden, exakt die selben sind wie sie es ohne Verschlüsselung sind. Dies bedeutet, dass bei Verwendung zusätzlicher Verbindungen diese in Form von Tunneling erfolgen und die von den Applikationen zwischen Sender und Empfänger initiierte Verbindung beim Empfänger wieder aufgelöst werden muss, sodass aus seiner Sicht alles beim alten bleibt. Sender- und Empfänger-Applikation wissen also gar nicht, dass ihre Daten auf sicherem Weg übertragen werden. 69 Benutzung des RLSP Sender Host A Bild 6-1: RLSP: Redirect? Ja Nein Proxytunnel Client Sichere Multimediakonferenzen Empfänger Backrouter Proxytunnel Server Host B Funktionsweise des RLSP 6.2. Funktionsweise Eine weitere Entscheidung musste gefällt werden: Welches Security-Protokoll soll eingesetzt werden? Die Wahl fiel auf den Proxytunnel des Instituts, der SSL verwendet. Eine Alternative war Open SSL, das als Bibliothek frei verfügbar ist. Die Kommunikation mit dem Proxytunnel erfolgt über TCPVerbindungen. Das bedeutet als Konsequenz, dass aus einer Verbindung zwischen Sender um Empfänger mehrere werden. Zuerst eine Verbindung zum Proxytunnel-Client, die nächste zum Proxytunnel-Server des Empfängers und die dritte zur Applikation des Empfängers. Als hilfreich erwies sich das Layered Service Provider Konzept von Windows Sockets. Dieses ermöglicht es, einen Security Service auf einer Ebene zu implementieren, die ohne jegliche Änderungen an den Applikationen auskommt. Dabei wird das Security Service in Form einer dynamischen Bibliothek (DLL) in das Windows System eingebunden. Danach wird der Netzwerkverkehr dieses Hosts von WinSock an die DLL übergeben, die die Daten verschlüsseln kann, bevor sie ins Netzwerk gelangen. Dies geschieht, indem die Daten zum Proxytunnel gesendet werden. Aufgrund des Umleitens der Daten mit Hilfe eines Layered Service Providers ist der Name des Security-Dienstes RLSP.DLL. Das Schaltbild in Bild 6-1 verdeutlicht den Systemzusammenhang. Die Netzwerkdaten der Applikation durchlaufen den RLSP-Client. Dieser entscheidet aufgrund von Benutzerwünschen, ob die Daten über den SSL-Kanal laufen sollen. Ist dies der Fall, werden die Daten zum Proxytunnel-Client umgeleitet. Dies setzt voraus, dass am Host des Empfängers RLSP im Server-Modus und ProxytunnelServer installiert sind. Nachdem die Daten wieder entschlüsselt wurden, ist es noch notwendig, den Status der Verbindung gegenüber der Applikation wiederherzustellen, damit die Applikation am Empfänger weiß, dass die Verbindung vom Host A kommt und nicht vom eigenen Host. Dies wird im Backrouter erledigt. Die Verwendung von SSL hat zur Folge, dass vom Proxytunnel nur TCP Verbindungen angenommen werden. Das bedeutet, dass TCP Verkehr zwar einfach zum Proxytunnel umgeleitet werden kann, dass für UDP aber ein Mapping auf TCP erfolgen muss. UDP Messages werden also für die SSL Übertragung in TCP Segmente verpackt und am Empfänger wieder zurückgewandelt. Dabei ist zu beachten, dass UDP byte-orientiert, TCP aber stream-orientiert ist. Während TCP Datenströme Byte für Byte betrachtet und Datenblöcke während der Übertragung eventuell fragmentiert, erwartet ein 70 Sichere Multimediakonferenzen Benutzung des RLSP App: App: "connect to a.b.c.d:x" "Accept" x Daten Daten RLSP RLSP x C1 C2 Info Daten Info 30001 1111 Proxytunnel C2 Info Bild 6-2: Daten Proxytunnel Daten Szenario TCP: Informationsfluss UDP-Empfänger die Messages unfragmentiert. Andernfalls verwirft der UDP-Empfänger die ankommenden Daten als fehlerhaft. Auf der Empfängerseite wurde daher ein Ringbuffer implementiert, der Messages in ihre originale Gestalt bringt, bevor sie die Applikation erreichen. 6.2.1. Szenario TCP Dieses Szenario zeigt die notwendigen Schritte, die vom RLSP ausgeführt werden, um die Verbindung über den Proxytunnel umzuleiten. Für diesen Zweck wurde eine Modifikation des Proxytunnel vorgenommen, das eine Ansteuerung des Proxytunnels mit Zielinformationen erlaubt. Das heißt, die Adresse des Proxytunnel-Servers stehen nicht wie sonst üblich in der ‚client.ini’ Datei des Proxytunnel-Clients, sondern diese Informationen werden dem Proxytunnel-Client über TCP mitgeteilt. Das ermöglicht einen sehr flexiblen Einsatz und hilft, die Anzahl der entstehenden Verbindungen einzuschränken. Ohne diese Eigenschaft wäre es notwendig, eine Verbindung vom Proxytunnel-Client zurück zum RLSP zu erzeugen, bevor die Verbindung zum Target-Host erfolgen kann. Dort erfolgt das selbe Spiel: Der Proxytunnel-Server wird ebenfalls mit Informationen versorgt, unter welcher Adresse und welchem Port der Backrouter bzw. die Applikation erreichbar ist. Bild 6-2 zeigt, wie der Informationsfluss abläuft. Der RLSP-Client erzeugt die Kontrolldaten, die die beiden Proxytunnel und der RLSP-Server benötigen, um die umgeleitete Verbindung zu erzeugen. D. h. bevor die Applikationsdaten gesendet werden, werden Connect-Daten (C1 und C2) für die beiden Proxytunnel sowie der Infoblock für den RLSP-Server gesendet. Jede dieser Einheiten liest die für ihn bestimmten Informationen und sendet die restlichen Daten weiter. Die Connect-Daten enthalten je eine vollständige Transport-Adresse (IP Adresse und Port). Der Infoblock beschreibt die gesamte Verbindung (IP Adressen und Ports von Sender und Empfänger) sowie den Typ der Verbindung (TCP oder UDP). Zusätzlich sind in der Abbildung auch die während der Entwicklung benutzten Ports eingezeichnet. Diese sind über die Initialisierungsdatei RLSP.INI einstellbar. Es handelt sich um einen Port für die Kommunikation zwischen RLSP-Client und Proxytunnel-Client (SSL-Client-Port) sowie einen Port für die Kommunikation zwischen den beiden Proxytunnel, der die verschlüsselte Verbindung 71 Benutzung des RLSP Sichere Multimediakonferenzen App: App: "connect to a.b.c.d:x" "Accept" x RLSP RLSP: UDP->TCP x TcpUdpMapper (Ringbuffer) 30001 Proxytunnel Bild 6-3: 1111 Proxytunnel x +Offset Szenario UDP mit Mapping zwischen Udp und Tcp repräsentiert (Safe Port). Die Portnummern müssen jeweils beiden Partnern bekannt sein. Der Proxytunnel-Server baut seine Verbindung bereits zum Port der Applikation auf. Der RLSP-Server erkennt, dass die Verbindung umgeleitet wurde und stellt aus Sicht der Applikation die ursprüngliche Verbindung wieder her. Dies ist möglich, da der Accept()-Call vom RLSP abgefangen wird. So wie beim Empfangen das Accept() abgefangen wird, erfolgt dies beim Senden mit connect(), wenn der RLSP im Windows-System registriert ist. In dieser Funktion passiert also das Umleiten und das Erzeugen der Connect-Daten und des Infoblocks. Für die Sender-Applikation scheint es, also wäre eine Verbindung zum gewünschten Zielsocket aufgemacht worden. In Wirklichkeit wurde jedoch eine Verbindung zum Proxytunnel erstellt. 6.2.2. Szenario UDP Die Umleitung erfolgt ähnlich. Allerdings werden die ausgehenden Pakete mit send() und sendto() abgefangen. Es gibt zwar auch in UDP die Möglichkeit, connect() zu verwenden; dabei wird jedoch keine Verbindung wie in TCP aufgebaut. Was hier also hinzukommt, ist das Mapping der UDP-Pakete in einen TCP-Stream. Dazu ist einerseits notwendig, ein geeignetes Mapping zu finden, andererseits die Rekonstruktion des TCP-Streams in die UDP-Messages am Empfänger. Die Transportadresse des Empfängers (IP Adresse und Port) wird auf einen TCP-Socket gemapped. D. h., alle Messages, die an denselben Empfänger gehen sollen, laufen über einen Kanal. Ein wichtiger Punkt ist auch die Wahl des TCP-Ports, der für den gemappten Kanal verwendet werden sollen. Einerseits müssen sich die Portnummern je nach Applikation unterscheiden, da sonst der TcpUdpMapper nicht unterscheiden könnte, zu welche Applikation die Messages gehören; es kann also nicht ein fixer Port verwendet werden. Andererseits erscheint es nicht sinnvoll, die selbe Portnummer zu verwenden wie UDP (z. B. UDP-Port 53 auf TCP-Port 53), da es speziell in den niederen Portbereichen zu Portkonflikten kommen kann. Deshalb wird ein Offset verwendet, um die gemappten TCP-Kanäle in den oberen Bereichen (z. B. ab Port 40000) anzuordnen. Der TcpUdpMapper ist ein Thread, der für jeden erwarteten Port am Empfänger gestartet wird und der sich dann nur um diesen Port kümmern braucht. 72 Sichere Multimediakonferenzen Benutzung des RLSP Zur Rekonstruktion der Messages wurde ein Ringbuffer implementiert. Dieser liest jeweils den TCPStream solange ein, bis alle Bytes eingetroffen sind, die zur Message gehören. Dazu wertet der TcpUdpMapper den Infoblock aus, denn dieser enthält Angaben zur Größe der Message. Das Mapping zwischen UDP und TCP hat auch zur Folge, dass ein größerer Kommunikationsaufwand betrieben werden muss: Neben den drei TCP-Verbindungen RLSP-Proxytunnel, Proxytunnel-Proxytunnel und Proxytunnel-TcpUdpMapper müssen die Daten noch einmal den UDP-Stack durchlaufen, wenn sie vom TcpUdpMapper zur Applikation gesendet werden. 6.3. Komponenten Das gesamte System zur sicheren Übertragung zwischen Netzwerkapplikationen setzt sich aus einer Reihe von Komponenten zusammen. Ausgehend vom Proxytunnel und seinen Initialisierungsdateien wird diese Infrastruktur durch den RLSP erweitert, der das Verbindungsmanagement übernimmt, sodass sich Applikationen nicht mehr um die Anbindung an den Proxytunnel kümmern brauchen. Der RLSP ist über die Steuerdatei RLSP.INI konfigurierbar, in der unter anderem die IP:Port-Paare spezifiziert werden können, die umgeleitet werden sollen. Die An- und Abmeldung des RLSP erfolgt mit dem Installer, der wahlweise eine graphische Oberfläche anbietet oder von der Kommandozeile aus aufrufbar ist. Schließlich steht ein Monitor zur Verfügung, der Informationen zu umgeleiteten Verbindungen protokolliert. 6.3.1. RLSP Der RLSP ist die zentrale Steuereinheit, die den Netzwerkverkehr auf Wunsch umleitet und auf Seite des Empfängers wieder entgegennimmt. Er fängt Socket-Calls ab, wenn er registriert ist. Im Fall von TCP sind das in erster Linie connect() und accept(), die für den Verbindungsaufbau verantwortlich sind. Im connect()-Call werden die Einträge in der RLSP.INI geprüft, ob eine Umleitung für den Peer der aufzubauenden Verbindung gewünscht ist. Wenn das nicht der Fall ist, greift der RLSP nicht weiter in ein. Es ändert sich also nichts an der Verbindung. Wenn eine Umleitung erwünscht ist, wird der connect()-Call des Base Providers mit anderen Parametern für IP-Adresse und Port aufgerufen. Im accept() prüft der RLSP ebenso die Einträge der RLSP.INI-Datei, um zu erfahren, ob die eingehende Verbindung umgeleitet wurde. Ist das nämlich der Fall, wird vor den eigentlichen Daten noch der Infoblock empfangen. Damit kann dann die effektive Verbindung zwischen Source und Destination wieder hergestellt werden. Wenn UDP-Messages gesendet werden, sind es die Sende- und Empfangsfunktionen, in denen die Umleitung erfolgt. UDP-Messages werden entweder mit sendto() gesendet oder mit der Kombination aus connect() und send(). connect() legt dabei das Default-Ziel fest, das für folgende send()Kommandos gilt. In jedem Fall erfolgt die Umleitung im sendto(), denn auch das abgefangene send() ruft sendto() auf. Dort wird, wenn in der RLSP.INI gewünscht, aus der UDP Message eine TCPVerbindung erzeugt, die dann über die beiden Proxytunnel und den TcpUdpMapper den Server-RLSP erreicht. 73 Benutzung des RLSP Sichere Multimediakonferenzen Im Gegensatz zu TCP wird bei UDP kein accept() verwendet. Die Identifikation des Senders erfolgt in recvfrom(). Hier hat der Server-RLSP also darauf acht zu geben, den effektiven Sender zu ermitteln und diesen entsprechend zurückzuliefern. Auch für das Empfangen von Messages gibt es eine zweite Funktion, nämlich recv(). In beiden Fällen wird der Infoblock empfangen, der Informationen über die Verbindung beinhaltet. Diese Informationen sind auch über getpeername(), das ebenfalls vom RLSP abgefangen wird, später abrufbar. 6.3.2. RLSP.INI Die Datei RLSP.INI ermöglicht die Konfiguration des Systems. Es setzt sich aus mehreren Sektionen zusammen: Zuerst gibt es einen allgemeinen Teil (Configuration). Danach folgen jeweils eine Sektion für jeden Proxytunnel, der verwendet wird. Anschließend folgen die beiden Teile für TCP, nämlich für eingehende und ausgehende Verbindungen. Zum Schluss gibt es noch die selben beiden Sektionen für UDP. [Configuration] Hier stehen allgemeine Parameter, die UDP und TCP ein- oder ausschalten und steuern, ob diese Instanz des RLSP ein Client, ein Server oder beides sein soll. Zusätzlich werden die Ports spezifiziert, die für eine sichere Übertragung verwendet werden sollen: Im Fall von TCP der SafePort, im Fall von UDP ein Offset, der zum UDP-Port addiert wird und damit den verwendeten TCP-Port ergibt. Ausserdem hat man noch die Möglichkeit, zu entscheiden, ob ein Logging durch einen Monitor erfolgen soll und wo sich dieser im Netzwerk befindet. Schließlich gibt es noch einen Eintrag zum Festlegen der IP-Adresse des lokalen Host. Dies hat Bedeutung, wenn mehrere Interfaces am Host präsent sind, denn damit kann eines auswählt werden. Die Auswahl kann händisch oder mit der graphischen Version des Installers erfolgen, der die Auswahl dann in die RLSP.INI-Datei schreibt. Client_Enabled = true | false Server_Enabled = true | false UDP_Enabled = true | false TCP_Enabled = true | false SafePort = 40000 UDP_Port_Offset = 10000 Monitor = on | off Monitor_Host = 127.0.0.1 Monitor_Port = 5051 Localhost=129.27.142.140 Die angegebenen Zahlenwerte sind Beispielwerte. Sinnvoll ist es, Ports stets über 10000 zu wählen. Ports zwischen 0 und 1023 sind die sogenannten well-known ports, die in der Regel von Systemprozessen verwendet werden. Danach folgen die registrierten Portnummern, die von Herstellern angemeldet werden können. Die registrierten Ports liegen zwischen 1024 und 65535, erstrecken sich also bis zum Ende des Portraums. Beinahe alle registrierten Ports liegen jedoch im Bereich unter 10000, deshalb sind die Möglichkeiten für Konflikte für Ports größer als 10000 geringer. 74 Sichere Multimediakonferenzen Benutzung des RLSP Wenn UDP bzw. TCP deaktiviert werden, werden die Einträge in den UDP- bzw. TCP-Sektionen nicht berücksichtigt. Dasselbe gilt für Client- und Server-Aktivierung. Hier werden die jeweiligen Incoming- bzw. Outgoing-Sektionen nur dann ausgelesen, wenn sie aktiviert wurden. [Proxytunnel] Es kann mehrere Proxytunnel-Einträge geben. Diese Einträge werden dann in den Outgoing-Sektionen für TCP und UDP angeführt. Zwei Beispiele: [pille] host = 129.27.142.148 port = 30001 [Home] host=127.0.0.1 port=30001 Der Proxytunnel-Client muss sich nicht am selben Host befinden wie die Applikation selbst. Host und Port spezifizieren die Transportadresse des Proxytunnels. Entweder wird die IP-Adresse eingegeben, oder das Kürzel für den Localhost (127.0.0.1). Die letztere Schreibweise hat den Vorteil, dass sie nicht adaptiert werden muss, wenn der RLSP und der Proxytunnel auf einem anderen Rechner gestartet werden. [TCP Outgoing], [UDP Outgoing] Hier wird angegeben, welche Verbindungen verschlüsselt werden sollen. Der Syntax ist für die TCPund UDP-Sektionen gleich. Einige Beispiele: 129.27.142.229:* = Home 129.27.142.229:23 = pille 129.27.*:* = Home 129.27.142.229:23-25 = Home 129.27.142.229:23 = – ; alle Verbindungen zum Host 129.27.142.229 ; Verbindungen auf Port 23 zu 129.27.142.229 ; alle Verbindungen zu Hosts mit 129.27....-Adresse ; Verbindungen auf Port 23, 24 und 25 ; diese Verbindungen nicht umleiten Es gibt die Möglichkeit, Intervalle zu spezifizieren. Man kann Bereiche von Ports spezifizieren, die zwischen zwei Werten liegen. Außerdem kann man Wildcards (*) für Ports und IP-Adressen verwenden. Schließlich kann man auch Transportadressen von der Umleitung wieder ausschließen. Dafür wird ein Minus (–) anstatt des Namens des Proxytunnels geschrieben. [TCP Incoming], [UDP Incoming] Hier werden die Ports spezifiziert, die über umgeleitete Verbindungen zum Host gelangen, die also von einem Client-RLSP über die Proxytunnel initiiert wurden. Es gelten dieselben Syntaxregeln für die Portspezifikation wie in der vorangegangenen Beschreibung. Hier wird allerdings kein Proxytunnel nach dem Gleichheitszeichen spezifiziert. Die Ausnahme von Ports ist aber möglich. * = 23-25 = 24 = - ; alle Ports werden als umgeleitet interpretiert ; Port 23, 24 und 25 werden als umgeleitet interpretiert ; Port 24 wird als nicht umgeleitet interpretiert 75 Benutzung des RLSP 6.3.3. Sichere Multimediakonferenzen Proxytunnel Der Proxytunnel ist ein Produkt des Instituts für Angewandte Informationsverarbeitung und wurde plattformunabhängig in Java implementiert. Er bietet SSL-Verschlüsselung für TCP-Verbindungen. Der Proxytunnel ist multithreaded und wartet auf konfigurierbaren Ports auf Peers, die sich über TCP verbinden. Über die Steuerdateien client.ini und server.ini wird festgelegt, wohin die Verbindung aufgebaut werden soll. client.ini, server.ini In den beiden Dateien client.ini und server.ini werden einerseits Informationen über die Zertifikate und den zu verwendenden Cipher gemacht, andererseits werden hier die Ports und andere Parameter für die Proxytunnel-Instanzen spezifiziert. In der Regel stehen in der client.ini Tunnel, die unverschlüsselte Daten übernehmen und verschlüsselt versenden und in der server.ini umgekehrt. Allerdings können beide Arten von Tunnel in beiden Dateien spezifiziert werden. Interessant im Zusammenhang mit dem RLSP sind vor allem die Tunnelspezifikationen. Jeder Tunnel wird zuerst deklariert: NumTunnels=2 Tunnel.1=RlspTunnel Tunnel.2=FTPTunnel Später werden die einzelnen Tunnel näher parametrisiert. Hier ein Beispiel für FTP in der client.ini: FTPTunnel.acceptHost = localhost FTPTunnel.InPort = 21 FTPTunnel.InputUsesSSL = false FTPTunnel.connectHost = 129.27.142.229 FTPTunnel.OutPort = 20021 FTPTunnel.OutputUsesSSL = true Auf Port 21 werden unverschlüsselte Verbindungen empfangen, die vom Localhost initiiert wurde. Der FTPTunnel baut eine verschlüsselte Verbindung zum Host 129.27.142.229 auf Port 20021 auf, wo dann der FTPTunnel-Server auf verschlüsselte Verbindungen wartet. Eine wesentliche Eigenschaft für den Einsatz mit dem RLSP ist die Möglichkeit, den OutPort sowie den connectHost über Connect-Daten mitzuteilen. Dafür ist beim Outport der Wert –1 einzutragen. Die ersten 7 Byte, die nach dem Verbindungsaufbau zwischen den Sockets von Applikation und Proxytunnel gesendet werden, enthalten die Connect-Daten: ein Byte als Id, vier Bytes für den Host und zwei Bytes für den Port. 6.3.4. Installer Der Installer registriert die RLSP.DLL am Windows-System. Sobald dies geschehen ist, wird die RLSP.DLL bei Programmstarts von Netzwerkapplikationen, die die WinSock-API benutzen, zusammen mit der WinSock-DLL geladen. Für Applikationen, die bereits laufen, während die Registrierung stattfindet, hat dies keinen Einfluss. 76 Sichere Multimediakonferenzen Bild 6-4: Benutzung des RLSP Die graphische Version des Installers Der Installer kann auf zwei Arten aufgerufen werden: Die graphische Version ist in Bild 6-4 zu sehen. Daneben kann dieselbe Datei (Installer.exe) von der Kommandozeile mit Parametern aufgerufen werden. Im letzteren Fall wird dann kein Fenster angezeigt. Damit ergibt sich folgender Syntax für den Installer: Installer [ /? | /t | /u | filename ] /?: Damit erhält man Hilfe /t: Test, ob die RLSP.DLL registriert ist /u: Uninstall RLSP.DLL filename: Die angegebene Datei wird als RLSP.DLL registriert In der graphischen Version hat man die Möglichkeit, das Interface des Localhost aus einer Liste auszuwählen und mittels Apply in die RLSP.INI einzutragen. Dieses hat dann Bedeutung, wenn wie im Fall von FTP die eigene Adresse (die des Localhost) an den Peer kommuniziert wird und dieser dann eine Verbindung zurück zum eigenen Host eröffnet. Dafür sollte die Adresse korrekt sein, denn sonst kann kein FTP-Datentransfer zustande kommen. In der unteren Hälfte des Fenster werden Statusmeldungen geschrieben, die den Registrierungsvorgang beschreiben. Man sieht, dass nach dem Installieren des neuen Layered Service Providers die protocol chains neu festgelegt werden, sodass ab jetzt der RLSP Vorzug vor dem 77 Benutzung des RLSP Bild 6-5: Sichere Multimediakonferenzen Der Monitor eigentlichen TCP- bzw. UDP-Protokoll hat, das dann vom RLSP selbst aufgerufen wird. Zum Schluss des Registrierungsvorgangs werden Informationen über die angemeldete RLSP.DLL in der Windows Registry gespeichert. Diese Informationen werden jedes mal versucht zu lesen, wenn der Installer gestartet wird. Damit kann der Installer feststellen, ob der RLSP augenblicklich registriert ist und dementsprechend die Buttons für Register oder Unregister anbieten. Wenn der RLSP abgemeldet wird, bedeutet dies, dass alle Netzwerkapplikationen, die ab diesem Zeitpunkt gestartet werden, den RLSP nicht mehr benutzen. Für Applikationen, die vor dem Zeitpunkt des Abmeldens den RLSP in Verbindung mit TCP oder UDP benutzen, ändert sich nichts, solange sie nicht geschlossen und neu gestartet werden. 6.3.5. Monitor Der Monitor ist ein optionales Element in der RLSP-Architektur. Er hat die Aufgabe, ein graphisches Protokoll des Netzwerkverkehrs zu erstellen, der von RLSP und Proxytunnel übertragen wird. Dazu kann man mittels des dafür vorgesehenen Eintrags in der RLSP.INI veranlassen, dass LogInfoStrukturen vom RLSP an den Monitor gesendet werden, wenn der RLSP eine Aktion wie connect() oder send() ausführt. Der Monitor zeigt Informationen über den Zeitpunkt der Übertragung sowie über den Typ (TCP oder UDP), die Adressen von Sender und Empfänger, den Port des Empfängers und die Anzahl der übertragenen Bytes bei Sende- oder Empfangsoperationen. 78 Sichere Multimediakonferenzen Benutzung des RLSP Der Monitor ist multithreaded, kann also bei Bedarf auch für mehrere verschiedene RLSPs eingesetzt werden, denn er kann auf einem beliebigen Host laufen, nicht notwendigerweise am selben Host wie der RLSP. 79 Benutzung des RLSP 80 Sichere Multimediakonferenzen Sichere Multimediakonferenzen Zusammenfassung 7. Zusammenfassung In dieser Arbeit wurde untersucht, wie Sicherheitskonzepte in Konferenzsystemen implementiert werden können. Dazu wurde mit Windows Sockets 2 eine Möglichkeit gewählt, die es in einer flexiblen Weise erlaubt, Authentifizierung, Integrität und Verschlüsselung in bestehende Systeme einzubauen. Dazu wird das Layered Service Provider Interface von Windows Sockets in Kombination mit Secure Socket Layer eingesetzt. Im vorliegenden Text wurde zunächst der theoretische Hintergrund aufgearbeitet, der die Themenbereiche Netzwerke, Datensicherheit und Konferenzsysteme betrifft. Daran anschließend folgte eine Erläuterung praktischer Aspekte bezüglich der Implementierung in Windows Sockets. Schließlich wurde das Ergebnis der Implementierung vorgestellt. 81 Zusammenfassung 82 Sichere Multimediakonferenzen Sichere Multimediakonferenzen Abkürzungen A. Abkürzungen 3DES Triple DES AES Advanced Encryption Standard AH Authentication Header API Application Programming Interface ARP Address Resolution Protocol ARPA Advanced Research Projects Agency ASN.1 Abstract Syntax Notation One ATM Asynchronous Transfer Mode BER Basic Encoding Rules BGP Border Gateway Protocol CA Certification Authority CBC Cipher Block Chaining CCITT Comité Consultif International de Télégraphique et Téléphonique jetzt ersetzt durch ITU-T CFB Cipher Feedback CHAP Challenge Handshake Authentication Protocol CRC Cyclic redundancy check CSMA/CD Carrier Sense Multiple Access with Collicion Detection DES Data Encryption Standard DLL Dynamic Link Library DNS Domain Name System DSA Digital Signature Algorithm DSS Digital Signature Standard 83 Abkürzungen Sichere Multimediakonferenzen ECB Electronic Codebook Mode ESP Encapsulating Security Payload FDDI Fiber Distributed Data Interface FDM Frequency division multiplexing FIFO First in – first out FTP File Transfer Protocol HTML HyperText Markup Language HTTP HyperText Transport Protocol IAB Internet Activities Board IANA Internet Assigned Numbers Authority ICMP Internet Control Message Protocol IDEA International Data Encryption Algorithm IEEE Institute for Electrical and Electronics Engineers IETF Internet Engineering Task Force IKE Internet Key Exchange IP Internet Protocol (IPv4) IPng Internet Protocol – Next Generation (IPv6) IPSec IP Security Architecture ISAKMP Internet Security Association and Key Management Protocol ISDN Integrated Services Digital Network ISO International Standards Organization ITU International Telecommunications Union (der Vereinten Nationen) LAN Local area network MAC Message Authentication Code MAC Media access control MAN Metropolitan area network MBone Multicast Backbone MC Multipoint Controller 84 Sichere Multimediakonferenzen MCU Multipoint Control Unit MD5 Message Digest version 5 MIB Management Information Base MIME Multipurpose Internet Mail Extensions MP Multipoint Processor MS-CHAP Microsoft Challenge Handshake Authentication Protocol MTU Maximum transmission unit NIC Network Information Center NIST National Institute for Standards and Technology NRZ Non Return to Zero NSF National Science Foundation NSP Name Space Provider OC Optical Carrier, z.b. OC-1 ≡ 51.84 Mbps OFB Output Feedback OSI Open Systems Interconnection OSPF Open Shortest Path First PAP Password Authentication Protocol PGP Pretty Good Privacy POTS Plain old telephone service PPP Point to Point Protocol PSTN Public Switched Telephone Network QoS Quality of Service RC4 Rivest Cipher version 4 RFC Request for Comments RIP Routing Information Protocol RPC Remote Procedure Call RSA Rivest-Shamir-Adelman RSVP Resource Reservation Protocol Abkürzungen 85 Abkürzungen Sichere Multimediakonferenzen RTCP RTP Control Protocol RTP Real Time Protocol RTSP Real Time Streaming Protocol RTT Round-trip time SHA Secure Hash Algorithm SET Secure Electronic Transaction S-HTTP Secure HTTP SIP Session Initiation Protocol S-MIME Secure MIME SMTP Simple Mail Transfer Protocol SNMP Simple Network Management Protocol SONET Synchronous Optical Network SSL Secure Socket Layer STDM Synchronous time division multiplexing STS Synchronous Transport Signal, z.b. STS-1 ≡ 51.84 Mbps TCP Transmission Control Protocol TLS Transport Layer Security UA User Agent UAC User Agent Client UAS User Agent Server TTL Time to live UDP User Datagram Protocol URL Uniform resource locator VCI Virtual Circuit Identifier VPN Virtual private network WAN Wide area network WOSA Windows Open Services Architecture WPU WinSock Provider Upcall 86 Sichere Multimediakonferenzen WSA WinSock Application Programming Interface WSP WinSock Service Provider WWW World Wide Web Abkürzungen 87 Abkürzungen 88 Sichere Multimediakonferenzen Sichere Multimediakonferenzen Bibliographie B. Bibliographie B.1. Networking [Bor96] Borowka, Petra: 1996. Internetworking. Konzepte, Komponenten, Protokolle, Einsatz-Szenarios. Bergheim: Datacom. [PD96] Peterson, Larry L.; Bruce S. Davie: 1996. Computer Networks. A System Approach. San Francisco: Morgan Kaufmann. [Tan92] Tanenbaum, Andrew S.:1992. Computer-Netzwerke [ Computer Networks, deutsch ]. Attenkirchen: Wolfram’s Fachverlag. [Sta97] Stallings, William: 1997. Data and Computer Communications. Fifth Edition (International). Upper Saddle River, New Jersey: Prentice Hall. [Rob96] Roberts, David: 1996. Internet Protocols Handbook. Scottsdale, Arizona: Coriolis Group. [MAB98] Murhammer, Martin W.; Orcun Atakan; Stefan Bretz u.a.: 1998. TCP/IP Tutorial and Technical Overview. IBM Redbooks. http://www.redbooks.ibm.com [RFC2001] Stevens, W.: 1997. TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms. RFC 2001. Network Working Group. [RFC1700] Reynolds, J.; Jon Postel: 1994. Assigned Numbers. RFC 1700. Network Working Group. [RFC0768] Postel, Jan: 1980. User Datagram Protocol. RFC 768. [RFC0791] 1981. Internet Protocol. RFC 791. [RFC0792] Postel, Jan: 1981. Internet Control Message Protocol. RFC 792. Network Working Group. 89 Bibliographie Sichere Multimediakonferenzen [RFC0793] 1981. Transmission Control Protocol. RFC 793. [RFC0959] Postel, J.; J. Reynolds: 1985. File Transfer Protocol. RFC 959. Network Working Group. [RFC1034] Mockapetris, P.: 1987. Domain Names – Concepts and Facilities. RFC 1034. Network Working Group. [RFC1035] Mockapetris, P.: 1987. Domain Names – Implementation and Specification. RFC 1035. Network Working Group. [RFC1071] Braden, R.: 1988. Computing the Internet Checksum. RFC 1071. Network Working Group. [RFC1122] Braden, R..: 1989. Requirements for Internet Hosts – Communication Layers. RFC 1122. Network Working Group. [RFC1123] Braden, R..: 1989. Requirements for Internet Hosts – Application and Support. RFC 1123. Network Working Group. [RFC1521] Borenstein, N; N. Freed: 1993. MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies. RFC 1521. Network Working Group. B.2. Security [CZ95] Chapman, D. Brent; Elizabeth D. Zwicky: 1995. Building Internet Firewalls. Sebastopol, California: O’Reilly & Associates. [MOV97] Menezes, A; P. van Oorschot; S. Vanstone: 1997. Handbook of Applied Cryptography. CRC Press. [Pfl97] Pfleeger, Charles P.: 1997. Security in Computing. Upper Saddle River, New Jersey: Prentice Hall. [Sch96] Schneier, Bruce: 1996. Applied Cryptography. Protocols, Algorithms, and Source Code in C. New York: John Wiley & Sons. [SS94] Shaffer, Steven L.; Alan R. Simon: 1994. Network Security. Cambridge, Massachusetts: Academic Press. [Wob98] Wobst, Reinhard: 1998. Abenteuer Kryptologie. Methoden, Risiken und Nutzen der Datenverschlüsselung. Reading, Massachusetts: Addison Wesley-Longman. 90 Sichere Multimediakonferenzen Bibliographie [Beu96] Beutelspacher, Alfred: 1996. Kryptologie. 5. Auflage. Braunschweig: Vieweg. [RFC2246] Dierks, T.; C. Allen: 1999. The TLS Protocol. RFC 2246. Network Working Group. [BSW98] Beutelspacher, Alfred; Jörg Schwenk; Klaus-Dieter Wolfenstetter: 1998. Moderne Verfahren der Kryptologie. 2. Auflage. Braunschweig: Vieweg. [Kya98] Kyas, Othmar: 1998. Sicherheit im Internet. 2. Auflage. Bonn: Thompson. B.3. Internet Telefonie [RAR99] Rensing, Christoph; Ralf Ackermann; Utz Roedig u.a.: 1999. „Sicherheitsunterstützung für Internet Telefonie“. In: Patrick Horster (Hrsg.). Sicherheitsinfrastrukturen.Buchreihe DuD-Fachbeiträge. Braunschweig: Vieweg [Pot97] Pott, Oliver: 1997. Webphoning & Netfax. 2. Auflage. Kilchberg, Schweiz: SmartBooks Publishing. [ITU235] ITU-T: 1998. Security and encryption for H-Series (H.235 and other H.245-based) multimedia terminals. ITU-T Recommendation H.235. [ITU245] ITU-T: 1998. Control protocol for multimedia communication. ITU-T Recommendation H.245. [ITU323] ITU-T: 1998. Packet-based multimedia communications systems. ITU-T Recommendation H.323. [RFC1889] Schulzrinne, H.; S. Casner u.a.: 1996. RTP: A Transport Protocol for Real-Time Applications. RFC 1889. Network Working Group. [RFC2326] Schulzrinne, H.; R. Lanphier: 1998. Real Time Streaming Protocol (RTSP). RFC 2326. Network Working Group. [deC99] deCarmo, Linden: 1999. „Internet Telephony Protocols“. In: Dr. Dobb’s Journal. July 1999. San Francisco, CA: Miller Freeman. http://www.ddj.com [DF99] Dalgic, Ismail; Hanlin Fang: 1999. Comparison of H.323 and SIP for IP Telephony Signaling. CA: 3Com Corporation, Cisco Systems. 91 Bibliographie Sichere Multimediakonferenzen [SR98] Schulzrinne, Henning; Jonathan Rosenberg: 1998. Internet Telephony: Architecture and Protocols. An IETF Perspective. Columbia University, Lucent Technologies. [RFC2543] Handley, M.; H. Schulzrinne; E. Schooler u.a.: 1999. SIP: Session Initiation Protocol. RFC 2543. Network Working Group. [RFC2327] Handley, M.; V. Jacobson: 1998. SDP: Session Description Protocol. RFC 2327. Network Working Group. B.4. Windows Sockets [QS96] Quinn, Bob; Dave Shute: 1996. Windows Sockets Network Programming. Reading, Massachusetts: Addison-Wesley. [SPI97] The Winsock Group: 1997. Windows Sockets 2 Service Provider Interface. A Service Provider Interface for Transparent Network Programming under Microsoft Windows, Revision 2.2.2. ftp://ftp.microsoft.com/bussys/winsock/winsock2/wsspi22.doc [API97] The Winsock Group: 1997. Windows Sockets 2 Application Programming Interface. An Interface for Transparent Network Programming Under Microsoft Windows, Revision 2.2.2. ftp://ftp.microsoft.com/bussys/winsock/winsock2/wsapi22.doc [And96] Andersen, David B.: 1996. A Proposal for Managing the Ordering of Layered Providers in Protocol Chains. http://www.sockets.com/apiorder.txt [ANX97] The Winsock Group: 1996. Windows Sockets 2 Protocol-Specific Annex. ftp://ftp.microsoft.com/bussys/winsock/winsock2/wsanx203.DOC [Sin96] Sinha, Alok: 1996. Network Programming in Windows NT. Reading, Massachusetts: Addison Wesley. B.5. Weiterführende Literatur [Rich97] 92 Richter, Jeffrey: 1997. Windows Programmierung für Experten. Übers. v. Wolfgang Augustin, Titel des Originals: Advanced Windows. Unterschleißheim: Microsoft Press Deutschland.