diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..76dc792 Binary files /dev/null and b/.DS_Store differ diff --git a/BWL/BDR.potx b/BWL/BDR.potx new file mode 100644 index 0000000..2f0b893 Binary files /dev/null and b/BWL/BDR.potx differ diff --git a/Betriebssysteme/.DS_Store b/Betriebssysteme/.DS_Store new file mode 100644 index 0000000..112e3c4 Binary files /dev/null and b/Betriebssysteme/.DS_Store differ diff --git a/Betriebssysteme/Betriebssysteme - PA.pdf b/Betriebssysteme/Betriebssysteme - PA.pdf new file mode 100644 index 0000000..81380f8 Binary files /dev/null and b/Betriebssysteme/Betriebssysteme - PA.pdf differ diff --git a/Betriebssysteme/Klausurvorbereitung.md b/Betriebssysteme/Klausurvorbereitung.md new file mode 100644 index 0000000..2216023 --- /dev/null +++ b/Betriebssysteme/Klausurvorbereitung.md @@ -0,0 +1,5 @@ +# Klausurvorbereitung + +### Themen: +- Operationsprinzipien und Bestandteile eines Minimalsystems bei der John-Von-Neumann Architektur +- Keine Simulation eines Schedulers kommt ran \ No newline at end of file diff --git a/Betriebssysteme/PA.md b/Betriebssysteme/PA.md new file mode 100644 index 0000000..ec912eb --- /dev/null +++ b/Betriebssysteme/PA.md @@ -0,0 +1,16 @@ +# Notizen zur PA + +- C-Datei zu Main (Import von Funktionen) +- C-Datei zu Funktionen +- H-Datei zu Interfaces/**Deklarationen**/Prototypen + +Anforderungen genau befolgen!!! + +Anforderung: +- wenn eine .c-Datei geändert wird, soll nur die geänderte .c-Datei neu kompiliert werden +- wenn eine .h-Datei geändert wird, sollen alle .c-Dateien neu kompiliert werden +- Test Prints können einfach auskommentiert werden (müssen nicht gelöscht werden, gibt aber auch kein Minuspunkt wenn es keine gibt) +- Jeder Thread soll eine Log-Datei haben +- Ordnungsgemäß warten bis Thread beendet wurden +- Funktionen sollten nur EIN return statement haben +- In Makefile keine Variablen mit $() nutzen sondern Klarnamen der Dateien verwenden! \ No newline at end of file diff --git a/Betriebssysteme/WilhelmLeuthardt.zip b/Betriebssysteme/WilhelmLeuthardt.zip new file mode 100644 index 0000000..9f5a943 Binary files /dev/null and b/Betriebssysteme/WilhelmLeuthardt.zip differ diff --git a/Betriebssysteme/Zusammenfassung_Dateisysteme.md b/Betriebssysteme/Zusammenfassung_Dateisysteme.md new file mode 100644 index 0000000..f320307 --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Dateisysteme.md @@ -0,0 +1,148 @@ +# Zusammenfassung: Dateisysteme +## 1. Einführung: Warum externe Speicher? +Ein Prozessor kann Informationen nicht dauerhaft in Registern speichern, da diese sich ständig ändern. Auch der Arbeitsspeicher (RAM) ist keine Lösung für langfristige Speicherung, da er: +1. **Flüchtig ist:** Daten gehen beim Ausschalten verloren. +2. **Teuer und begrenzt ist:** Man kann nicht unendlich viel RAM verbauen. +### Gründe für Festplatten/externe Datenträger +- Speicherung sehr großer Datenmengen. +- Dauerhafte Verfügbarkeit (Persistenz) nach dem Herunterfahren. +- Gleichzeitige Nutzung der Daten durch viele Prozesse. +## 2. Definitionen & Grundkonzepte +### Dateisystem vs. Datenbank +Es gibt zwei Hauptarten der Datenspeicherung: +- **Dateisystem:** Das Betriebssystem verwaltet die Daten als Dateien. Es organisiert Speichern, Löschen, Suchen und Umbenennen. +- **Datenbank (DBMS):** Eine separate Software verwaltet strukturierte Daten. (Ausnahme: OS/400 nutzt eine DB als Dateisystem) +### Definition Dateisystem +Es stellt die Regeln dar, wie Daten gespeichert werden. Es sorgt für Transparenz: Der Benutzer muss nicht wissen, wie die Bits physikalisch auf der Platte liegen, er arbeitet nur mit logischen Dateien. +### Klassifizierung von Dateisystemen +1. **Lokal:** Befinden sich auf demselben Rechner (z.B. NTFS auf C:). +2. **Netzwerk:** Befinden sich auf einem anderen Rechner, Kommunikation über OS (z.B. SMB/CIFS). +3. **Verteilt:** Weiterentwicklung von Netzwerk-FS. Der Client weiß nicht, wo physikalisch der Server steht. +4. **Virtuell:** Eine große Datei (Container), die intern wie ein Dateisystem strukturiert ist (z.B. .vhd, .vdi). +## 3. Dateien & Verzeichnisse +### Dateinamen & Konventionen +- **Goldene Regel (Kompatibilität):** Nur lateinische Buchstaben, Ziffern, Unterstrich. Maximal 8 Zeichen. Erstes Zeichen ein Buchstabe. +- **Nicht empfohlene Zeichen:** > < | ? ! * + \ / & ; +### Erkennung von Dateitypen +Das OS muss wissen, ob eine Datei ausführbar ist oder Daten enthält. +1. **Dateierweiterung (für Benutzer):** .exe, .txt, .jpg. Dient der Zuordnung zur Anwendung. +2. **Magische Zahl (für Programme):** Eine Byte-Sequenz am Anfang der Datei: + - **MZ:** Ausführbare MS-DOS/Windows Datei. + - **%PDF:** Adobe PDF Dokument. + - **FFD8 (Start) / FFD9 (Ende):** JPEG Bild. +### Zugriffsarten +- **Sequentiell:** Lesen von Anfang bis Ende (z.B. Magnetbänder). +- **Direkt:** Sprung an eine beliebige Position (Festplatten). +- **Indexsequenziell:** Nutzung eines Index-Blocks, um den richtigen Datenblock schnell zu finden. +### Metadaten (Attribute) +Jede Datei besitzt neben dem Inhalt auch Verwaltungsdaten: +- Eigentümer (User ID). +- Rechte (Read/Write/Execute). +- Zeitstempel (Erstellt, Geändert, Zugriff). +- Flags (Hidden, System, Read-only, Archive). +## 4. Physische Struktur & Partitionierung +Bevor ein Dateisystem erstellt werden kann, muss der Datenträger partitioniert werden. +### Sektoren & Cluster +- **Sektor:** Kleinste physische Einheit der Festplatte (meist 512 Byte). +- **Cluster (Block):** Kleinste logische Einheit des Dateisystems. Besteht aus mehreren Sektoren (z.B. 4 KiB). Eine Datei belegt immer mindestens einen ganzen Cluster (interne Fragmentierung bei kleinen Dateien). +### MBR (Master Boot Record) +Der allererste Sektor der Festplatte. +- Enthält den IPL (Initial Program Loader) zum Booten. +- Enthält die Partitionstabelle (max. 4 primäre Partitionen). +- Adressierung: Zylinder-Kopf-Sektor (CHS). Begrenzt auf 2 TiB. +### GPT (GUID Partition Table) +Der moderne Nachfolger des MBR. +- Teil des UEFI-Standards. +- Adressierung: LBA (Logical Block Addressing) – Sektoren werden einfach durchnummeriert. +- Unterstützt Festplatten bis 8 ZiB und (mindestens) 128 Partitionen. +- Enthält einen "Schutz-MBR" für Kompatibilität. +### Boot-Prozess +- **BIOS:** Startet IPL aus MBR. Sehr starr/eingeschränkt. +- **UEFI:** Modernes "Mini-OS" auf dem Mainboard-Chip. Kann Filesysteme lesen, bietet Grafikmenü, Secure Boot. +## 5. Speicherzuweisung (Implementierung) +Wie werden die Blöcke einer Datei auf der Platte organisiert? +### 1. Kontinuierliche Zuweisung +- Datei liegt am Stück (Block 1, 2, 3 hintereinander). +- **Vorteil:** Einfach, sehr schnelles Lesen. +- **Nachteil:** Externe Fragmentierung (Löcher beim Löschen), Datei kann nicht wachsen, wenn kein Platz dahinter ist. +### 2. Verknüpfte Liste (Linked List) +- Jeder Block enthält Daten + Zeiger auf den nächsten Block. +- **Vorteil:** Keine Fragmentierung, Datei kann wachsen. +- **Nachteil:** Zugriff auf Block 500 erfordert Lesen von 1 bis 499 (langsam). +### 3. Informationsknoten (Index / FAT) +- Die Zeiger werden aus den Blöcken herausgenommen und in einer zentralen Tabelle gespeichert. +## 6. Konkrete Dateisysteme +### A. FAT (File Allocation Table) +Das älteste und einfachste System (FAT12/16/32/exFAT). +**Struktur:** +1. **FAT:** Eine Tabelle, die die Festplatte abbildet. Jeder Eintrag entspricht einem Cluster. Inhalte: "Frei", "Defekt", "Letzter Cluster" oder "Zeiger auf nächsten Cluster". +2. **Hauptverzeichnis:** Tabelle mit Dateinamen, Erweiterung, Attributen und Start-Cluster. +3. **Datenzone:** Der eigentliche Inhalt. +**Eigenschaften:** Keine Rechteverwaltung (Sicherheit), kein Besitzer-Konzept, kein Journaling. Dateiidentifikation nur über Name. +**Attribute (8 Bit):** Read-only, Hidden, System, Volume-Label, Directory, Archive. +### B. NTFS (New Technology File System) +Standard seit Windows NT/XP. Proprietär von Microsoft. +- **Struktur:** Zentral ist die MFT (Master File Table). Jede Datei (und das Verzeichnis) ist ein Eintrag in der MFT. +- **Identifikation:** Über FRN (File Reference Number), nicht Name. +**Features:** +- **ACL (Access Control List):** Sehr feine Rechteverwaltung. +- **Journaling:** Protokolliert Änderungen, verhindert Inkonsistenz bei Absturz. +- **EFS:** Verschlüsselung. +- **Quotas:** Speicherplatzbegrenzung pro User. +- **Hard Links:** Ein Inhalt, mehrere Dateinamen (FRNs). +### C. ext (Extended Filesystem - Linux) +Standard unter Linux (ext2/3/4). Verwendet Inodes. +- **Identifikation:** Über Inode-Nummer. Dateinamen existieren nur im Verzeichnis. +**Aufbau:** +- **Superblock:** Infos über FS-Größe und Typ. +- **Bitmaps:** I-Bitmap (belegte Inodes) und D-Bitmap (belegte Datenblöcke). +- **Inode-Liste:** Tabelle aller Inodes. +**Inode-Struktur (Wichtig!):** +Enthält Metadaten (UID, GID, Rechte rwxrwxrwx, Zeitstempel) und Zeiger: +- 12 Direkte Verweise (auf Datenblöcke). +- 1 Indirekter Verweis 1. Grades (zeigt auf Block mit weiteren Zeigern). +- 1 Indirekter Verweis 2. Grades. +- 1 Indirekter Verweis 3. Grades. +- **Resultat:** Sehr kleine und extrem große Dateien (bis Peta-Bytes) effizient speicherbar. +**Verzeichnis:** Ist bei ext einfach eine Datei, die eine Liste von "Name ↔ Inode-Nummer" enthält. +## 7. Fragmentierung & Optimierung +### Interne Fragmentierung +Entsteht, wenn die Dateigröße kein Vielfaches der Blockgröße ist. Der letzte Block ist nur halb voll. +- **Optimierung:** Große Dateien → große Blöcke. Viele kleine Dateien → kleine Blöcke. +### Externe Fragmentierung +Dateien sind physikalisch auf der Platte verstreut (nicht am Stück). +- **FAT:** Stark betroffen. +- **ext:** Bildet Block-Gruppen und lässt Platz für Wachstum → kaum Fragmentierung. +- **xfs:** Puffert im RAM, um Größe zu berechnen, bevor geschrieben wird. +### Bad Blocks +Fehlerhafte Sektoren werden vom Dateisystem markiert und in einen Reserve-Bereich ("Hot Fix") umgeleitet. Das OS bekommt davon nichts mit. +## 8. Sicherheit & Links +### Links (Verknüpfungen) +- **Hard Link:** Ein zweiter Name für denselben Inode/FRN. Löscht man einen, bleibt die Datei erhalten, solange der "Link-Counter" > 0 ist. (Nur im selben FS möglich). +- **Soft Link (Symbolic):** Eine kleine Datei, die nur den Pfad zur Zieldatei enthält. (Funktioniert auch partitionsübergreifend). +### Journaling +Schutz gegen Abstürze während Schreibvorgängen (Stromausfall). +- **Problem:** Metadaten (Bitmap, Inode, Verzeichnis) müssen konsistent sein. +- **Lösung:** Änderungen erst in ein Log (Journal) schreiben, dann ausführen. +- **Full-Journaling:** Auch Nutzdaten werden protokolliert (sehr sicher, aber langsam). + +## 9. Backup & Datensicherung +**Wichtig:** Ein RAID-System (Redundant Array of Independent Disks) ist KEIN Backup! RAID schützt vor Hardwareausfall (Verfügbarkeit), Backup schützt vor Datenverlust (Löschen, Virus, Feuer). +### Sicherungsarten (Klausurrelevant!) +1. **Voll-Backup (Normal):** Sichert alles. Setzt das "Archiv-Bit" zurück (markiert als gesichert) +2. **Kopie-Sicherung:** Sichert alles, fasst das Archiv-Bit aber nicht an. +3. **Inkrementell:** + - Sichert nur Änderungen seit dem letzten Backup (egal ob voll oder inkrementell). + - Markiert Dateien als gesichert. + - **Vorteil:** Schnell, klein. + - **Nachteil:** Restore aufwändig (Voll + Ink1 + Ink2 + Ink3 ...). +4. **Differenziell:** + - Sichert Änderungen seit dem letzten Voll-Backup. + - Markiert Dateien nicht als gesichert. Die Sicherung wächst jeden Tag. + - **Vorteil:** Schnellerer Restore (Voll + letzte Diff). + - **Nachteil:** Braucht mehr Platz als inkrementell +### Strategie: Großvater-Vater-Sohn +Rotationsprinzip mit mehreren Medien (z.B. Monat, Woche, Tag). Ermöglicht Rückgriff auf verschiedene Zeitpunkte in der Vergangenheit. +### Betriebsarten +- **Hot Backup:** Im laufenden Betrieb (Gefahr von Inkonsistenz). +- **Cold Backup:** System wird heruntergefahren (Sicher, konsistent). \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_Deadlocks.md b/Betriebssysteme/Zusammenfassung_Deadlocks.md new file mode 100644 index 0000000..2496cf7 --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Deadlocks.md @@ -0,0 +1,82 @@ +# Zusammenfassung: Deadlocks (Verklemmungen) +## 1. Grundlagen: Ressourcen und Prozesse +Prozesse benötigen zur Ausführung Ressourcen (Prozessor, Speicher, Dateien, Drucker, Laufwerke). Um das Phänomen Deadlock zu verstehen, muss man zunächst die Art der Ressourcen unterscheiden. +### Arten von Ressourcen +**1. Preemptable (Unterbrechbar/Entziehbar):** +- Diese Ressourcen können einem Prozess weggenommen werden, ohne dass das System abstürzt oder Fehler entstehen. +- **Beispiel:** CPU (durch Scheduling) oder Arbeitsspeicher (auf Standard-PCs durch Paging/Swapping auf die Festplatte). +- **Hinweis:** Auf Smartphones ist RAM oft nicht entziehbar, da diese meist kein Swapping unterstützen. +**2. Non-preemptable (Nicht-unterbrechbar/Nicht-entziehbar):** +- Diese Ressourcen können nicht entzogen werden, ohne dass der Prozess oder die Aufgabe scheitert. +- **Beispiel:** Drucker (ein halb gedrucktes Blatt kann nicht von einem anderen Job fortgesetzt werden), DVD/Blu-ray-Brenner. +- **Fokus:** Deadlocks entstehen meistens im Kampf um diese nicht-entziehbaren Ressourcen. +### Definition eines Deadlocks +Ein Deadlock ist ein Zustand, in dem mehrere Prozesse aufeinander warten. Jeder Prozess wartet auf ein Ereignis (z. B. Freigabe einer Ressource), das nur ein anderer Prozess in dieser wartenden Gruppe auslösen kann. Da alle warten, passiert nichts mehr. +## 2. Die 4 Strategien des Betriebssystems +Wie geht ein OS mit Deadlocks um? Es gibt vier fundamentale Ansätze: +1. **Ignorieren (Ignoring):** So tun, als ob es keine Deadlocks gibt. +2. **Erkennen (Recognizing):** Zulassen, aber erkennen und beheben. +3. **Vermeiden (Avoiding):** Dynamisch zur Laufzeit entscheiden, ob eine Zuweisung sicher ist. +4. **Verhindern (Preventing):** Das System statisch so designen, dass Deadlocks strukturell unmöglich sind. +## 3. Strategie 1: Ignorieren (Der Strauß-Algorithmus) +Dies ist der einfachste Ansatz: Das Betriebssystem ignoriert die Möglichkeit eines Deadlocks komplett. Wenn einer auftritt, bleiben die Prozesse ewig hängen, bis der Benutzer eingreift (z. B. Prozess killt oder neu startet). +### Rechtfertigung +- **Wahrscheinlichkeit:** Wenn Deadlocks sehr selten auftreten (z. B. einmal alle 5 Jahre), aber reguläre Hardware-Abstürze wöchentlich passieren, lohnt sich der Aufwand für eine komplexe Deadlock-Lösung nicht. +- **Performance:** Lösungen kosten oft Leistung oder Komfort. Ingenieure nehmen selten massive Performance-Einbußen in Kauf, um ein extrem seltenes Problem zu lösen. +- Dieser Ansatz ist technisch "falsch", aber wirtschaftlich oft die Realität (Windows, Linux und macOS nutzen diesen Ansatz in vielen Bereichen). +## 4. Voraussetzungen: Die Coffman-Bedingungen +Damit ein Deadlock überhaupt entstehen kann, müssen vier Bedingungen gleichzeitig erfüllt sein (Coffman's Conditions): +1. **Mutual Exclusion (Gegenseitiger Ausschluss):** Eine Ressource darf nur von einem Prozess exklusiv genutzt werden (nicht teilbar). +2. **Hold and Wait (Besitzen und Warten):** Ein Prozess besitzt bereits Ressourcen und fordert weitere an, während er die alten behält. +3. **No Preemption (Nicht-Entziehbarkeit):** Ressourcen können nicht gewaltsam weggenommen werden; der Besitzer muss sie freiwillig zurückgeben. +4. **Circular Wait (Zirkuläres Warten):** Es gibt eine Kette von Prozessen (A wartet auf B, B wartet auf C ... C wartet auf A), die im Kreis aufeinander warten. +## 5. Strategie 2: Erkennung (Recognizing) +Das System lässt Deadlocks zu, überwacht aber den Zustand, um sie zu erkennen und dann zu lösen. +### Der Ressourcengraph +Zur Erkennung baut das OS einen Graphen auf: +- **Kreise:** Stellen Prozesse dar (P). +- **Rechtecke:** Stellen Ressourcen dar (R). +- **Pfeil P → R:** Prozess fordert Ressource an (Request). +- **Pfeil R → P:** Prozess besitzt Ressource (Assignment). +### Analyse +Das OS prüft diesen Graphen mittels Algorithmen (Tiefensuche, Rekursion) auf Zyklen. +- Wird ein Zyklus (Kreis) gefunden, liegt ein Deadlock vor. +- **Beispiel:** P1 hat Kamera, will HDD. P2 hat USB, will Kamera... P5 hat HDD, will USB. Dies bildet einen geschlossenen Kreis → Deadlock. +### Behebung (Recovery) +Wenn ein Deadlock erkannt wurde, muss er durchbrochen werden: +1. **Killing (Prozessabbruch):** Einen Prozess im Zyklus beenden. Brachial, aber einfach. Am besten trifft es Prozesse, die ohne Datenverlust neu gestartet werden können (z. B. Compiler). +2. **Preemption (Entzug):** Einer Ressource temporär den Besitzer wegnehmen. Hängt stark von der Hardware ab und ist oft manuell oder gar nicht möglich. +3. **Rollback (Zurücksetzen):** Prozesse erstellen regelmäßig Checkpoints (Sicherungspunkte des Zustands). Bei Deadlock wird ein Prozess auf einen früheren Zeitpunkt zurückgesetzt (bevor er die kritische Ressource anforderte). Er verliert die Arbeit seit dem Checkpoint, aber der Deadlock ist gelöst +## 6. Strategie 3: Vermeidung (Avoiding) +Hier wird versucht, Deadlocks dynamisch zu umgehen, bevor sie entstehen. Das System entscheidet bei jeder Anfrage: "Ist es sicher, diese Ressource jetzt zu vergeben?" +### Das Konzept des sicheren Zustands +- Ein Zustand ist sicher, wenn es einen Weg gibt, alle Prozesse nacheinander zu bedienen, ohne dass sie blockieren. +- Das OS führt Buch darüber, welcher Prozess was braucht. Droht ein "unsicherer Zustand" (Clinch), wird die Ressource nicht vergeben, und der Prozess muss warten. +### Das Problem +Avoiding funktioniert nur, wenn das OS in die Zukunft sehen kann. Es muss im Voraus wissen: +- Welche Prozesse laufen werden. +- Wann genau sie welche Ressourcen brauchen. +Da diese Informationen in der Realität fast nie vorliegen, ist diese Strategie in der Praxis kaum anwendbar. +## 7. Strategie 4: Verhinderung (Preventing) +Dieser Ansatz ist statisch. Das System wird so designt, dass mindestens eine der vier Coffman-Bedingungen (siehe Punkt 4) niemals erfüllt werden kann. Wenn eine Bedingung fehlt, ist ein Deadlock mathematisch unmöglich. +Man greift gezielt die einzelnen Bedingungen an: +### A. Angriff auf "Mutual Exclusion" (Exklusivität) +- **Idee:** Ressourcen gar nicht exklusiv vergeben. +- **Lösung:** Spooling. Beispiel Drucker: Kein Prozess greift direkt auf den Drucker zu. Nur ein "Drucker-Daemon" darf das. Prozesse schreiben ihre Daten in eine Datei (Spool-Verzeichnis). Da Prozesse nur Dateien schreiben (was parallel geht) und nicht auf den Drucker warten, gibt es keinen Deadlock am Drucker. +### B. Angriff auf "Hold and Wait" (Besitzen und Warten) +- **Idee:** Verhindern, dass jemand Ressourcen hortet und auf neue wartet. +**Lösung 1:** Ein Prozess muss alle benötigten Ressourcen ganz am Anfang anfordern. Bekommt er sie, läuft er. Wenn nicht, wartet er mit leeren Händen. +- **Nachteil:** Man weiß oft nicht am Start, was man später braucht. Ressourcen werden verschwendet (lange belegt, aber erst am Ende genutzt). +- **Beispiel:** Mainframe-Batch-Jobs (JCL) müssen oft alle Ressourcen im Header definieren. +**Lösung 2:** Wer eine neue Ressource will, muss erst alle alten zurückgeben und dann alles zusammen neu anfordern. +### C. Angriff auf "No Preemption" (Nicht-Entziehbarkeit) +- **Idee:** Ressourcen gewaltsam wegnehmen. +- **Problem:** Bei Druckern oder CD-Brennern führt das zu Chaos/Datenmüll. +- **Lösung:** Virtualisierung (siehe Spooling). Die Hardware wird "versteckt", aber das geht nicht bei allen Ressourcen (z. B. Datensätzen in Datenbanken). +### D. Angriff auf "Circular Wait" (Zirkuläres Warten) +- **Idee:** Kreise unmöglich machen. +- **Lösung:** Hierarchische Anforderung. + - Alle Ressourcen bekommen eine Nummer (1 bis N). + - **Regel:** Ein Prozess darf Ressourcen nur in aufsteigender Reihenfolge anfordern. + - Wer Ressource Nr. 5 hat, darf Nr. 6 anfordern, aber niemals Nr. 2. + - Damit ist ein Kreis (A → B → A) mathematisch ausgeschlossen. \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_Einführung_Hardware.md b/Betriebssysteme/Zusammenfassung_Einführung_Hardware.md new file mode 100644 index 0000000..dd82f8d --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Einführung_Hardware.md @@ -0,0 +1,254 @@ +# Zusammenfassung Einführung + Hardware + +### 1. Definition und Aufgaben +• **Hauptaufgabe:** Verwaltung physischer und logischer Ressourcen (CPU, RAM, Geräte, Prozesse) +• **Schlüsselkonzept Transparenz:** Das BS verbirgt die komplexe interne Struktur und Hardware-Details vor dem Benutzer +• **Zielfunktionen:** +    ◦ **Auftragsverwaltung:** Steuerung und Abrechnung von Jobs +    ◦ **Betriebsmittelverwaltung:** Zuweisung von Hardware und Vermeidung von Konflikten (Deadlocks) +    ◦ **Speicherverwaltung:** Verwaltung von physischem und virtuellem Speicher +    ◦ **Schutz:** Zugriffskontrolle und Fehlerbehandlung +### 2. Klassifizierung von Betriebssystemen +Betriebssysteme werden nach verschiedenen Kriterien unterschieden: +• **Anzahl der Aufgaben:** +    ◦ **Single-Tasking:** Nur ein Programm läuft (historisch) +    ◦ **Multi-Tasking:** Mehrere Programme laufen scheinbar gleichzeitig +• **Verarbeitungsmodus:** +    ◦ **Stapelverarbeitung (Batch):** Jobs werden ohne Benutzerinteraktion nacheinander abgearbeitet (Großrechner) +    ◦ **Dialogbetrieb (Interactive):** Der Benutzer interagiert direkt mit dem System +    ◦ **Echtzeitverarbeitung (Real-time):** Garantierte Reaktionszeiten für Steuerungsaufgaben +• **Architektur:** Zentralisiert vs. Verteilt (Zentrale Systemsteuerung existiert/existiert nicht) +### 3. Eigenschaften moderner Betriebssysteme +• **Präemptives Multitasking:** Das BS kann einem Prozess die CPU entziehen (im Gegensatz zum kooperativen Multitasking, wo das Programm die CPU freiwillig abgeben musste) +• **Multithreading:** Eine Anwendung kann mehrere Aufgaben (Threads) parallel ausführen +• **Symmetrisches Multiprocessing (SMP):** Mehrere gleichwertige Prozessoren teilen sich die Aufgaben ("jeder macht alles") +• **Stabilität:** Durch Speichertrennung führt der Absturz einer App nicht zum Absturz des Gesamtsystems +• **Sicherheit (C2-Standard):** Authentifizierung, Zugriffskontrolllisten (ACLs) für Ressourcen und Protokollierung +• **Skalierbarkeit:** Fähigkeit, Leistung bei wachsenden Anforderungen durch neue Hardware (_Scale Up_) oder neue Rechner (_Scale Out_) zu halten +### 4. Architektur und Design (Kernel) +**Bestandteile eines BS:** Kernel (resident im RAM), externe Module (Treiber), Befehlsinterpreter. _Nicht_ dazu gehören Compiler oder Office-Programme +**Architektur-Modelle:** +• **Monolithischer Kernel:** +    ◦ Alles (Dateisystem, Treiber, Speicherverwaltung) läuft im Kernel-Modus in einer Datei. +    ◦ _Vorteil:_ Sehr schnell. +    ◦ _Nachteil:_ Ein Fehler im Treiber bringt das ganze System zum Absturz +• **Mikrokernel:** +    ◦ Nur minimale Funktionen (IPC, Scheduling) im Kernel-Modus. Treiber und Dateisysteme laufen im Benutzer-Modus. +    ◦ _Vorteil:_ Sehr stabil. +    ◦ _Nachteil:_ Langsamer durch Kommunikations-Overhead +• **Hybrid:** Mischung aus beiden (z.B. Windows, macOS), um Geschwindigkeit und Stabilität zu vereinen +**Schichtenmodell:** Jede Schicht darf nur Dienste der direkt darunterliegenden Schicht nutzen +### 5. Dualer Modus +Zum Schutz vor fehlerhaften Programmen arbeitet der Prozessor in zwei Modi (gesteuert durch das CPL-Bit im Register): +1. **Kernelmodus (Ring 0 / CPL=0):** Das BS hat vollen Zugriff auf alle Befehle und Hardware +2. **Benutzermodus (Ring 3 / CPL=3):** Anwendungen laufen hier. Kritische Befehle (Hardwarezugriff, I/O) sind verboten +### 6. Systemaufrufe +**Der Systemaufruf (System Call):** Wenn eine Anwendung eine kritische Operation benötigt (z.B. "Speichere Datei"), kann sie das nicht selbst tun. +• Sie ruft eine Bibliotheksfunktion auf (z.B. `open()`, `read()`) +• Dies löst einen **Systemaufruf** aus. +• Die CPU schaltet in den **Kernelmodus**, führt die Aufgabe sicher aus und schaltet zurück +#### 1. Das Grundproblem +Eine Anwendung (z.B. Word) darf nicht direkt auf die Hardware (z.B. Festplatte) zugreifen. Würde sie das tun, könnte ein Fehler in Word die Festplatte beschädigen oder Daten anderer Programme überschreiben. Daher laufen Anwendungen im **Benutzermodus (User Mode, Ring 3)** und das Betriebssystem (BS) im **Kernelmodus (Kernel Mode, Ring 0)**. +Ein **Systemaufruf** ist der definierte Weg, wie eine Anwendung den Kernel bittet: _"Bitte erledige diese privilegierte Aufgabe für mich"_ +#### 2. Der Ablauf eines Systemaufrufs +Der Prozess ist streng geregelt, um Sicherheit zu garantieren: +1. **Aufruf:** Die Anwendung ruft eine Bibliotheksfunktion auf (z.B. `read()` in C),. +2. **Auslöser:** Diese Funktion löst einen Software-Interrupt (Trap) aus. Dies signalisiert der CPU, dass ein Moduswechsel nötig ist. +3. **Moduswechsel:** Die CPU schaltet vom Benutzermodus (CPL=3) in den Kernelmodus (CPL=0),. +4. **Identifikation:** Das BS schaut in einer internen Tabelle (System Call Table) nach, welche Funktion ausgeführt werden soll (basierend auf einer ID/Nummer),. +5. **Prüfung:** Das BS prüft die übergebenen Parameter auf Gültigkeit (z.B.: Darf dieser Nutzer diese Datei lesen?),. +6. **Ausführung:** Der Kernel führt die Operation (z.B. Festplattenzugriff) aus. +7. **Rückkehr:** Das BS schaltet zurück in den Benutzermodus und gibt das Ergebnis (oder einen Fehlercode) an die Anwendung zurück +#### 3. Methoden der Parameterübergabe +Da der Kernel und die Anwendung in unterschiedlichen Adressräumen arbeiten können, ist die Übergabe von Daten (z.B. "Welche Datei soll geöffnet werden?") nicht trivial. Es gibt drei Methoden: +1. **Über Register:** +    ◦ _Funktionsweise:_ Parameter werden direkt in die CPU-Register geschrieben. +    ◦ _Vorteil:_ Sehr schnell und einfach. +    ◦ _Nachteil:_ Die Anzahl und Größe der Register ist stark begrenzt (reicht nicht für viele Daten). +2. **Über einen Speicherblock (Tabelle):** +    ◦ _Funktionsweise:_ Die Parameter werden in einen Speicherblock im RAM geschrieben. Nur die **Startadresse** dieses Blocks wird in einem Register an den Kernel übergeben. +    ◦ _Vorteil:_ Anzahl und Größe der Parameter spielen keine Rolle. +    ◦ _Nachteil:_ Langsamer als Register +3. **Über den Stack (Stapel):** +    ◦ _Funktionsweise:_ Parameter werden auf den Stack gelegt (push). Das BS liest sie vom Stack (pop). +    ◦ _Vorteil:_ Flexible Anzahl an Parametern möglich. +#### 4. Kategorien und Beispiele +Systemaufrufe decken alle Bereiche ab, in denen das BS Ressourcen verwaltet. In den Folien werden folgende Kategorien unterschieden: + +| | | | +|---|---|---| +|Kategorie|Beispiele (Funktionen)|Erklärung| +|**Prozessmanagement**|`fork()`, `exit()`, `CreateProcess()`|Prozesse erzeugen, beenden oder steuern.| +|**Dateiverwaltung**|`open()`, `read()`, `CreateFile()`|Dateien öffnen, lesen, schreiben.| +|**Speicherverwaltung**|`malloc()`, `GlobalAlloc()`|Arbeitsspeicher anfordern.| +|**Geräteverwaltung**|`ioctl()`, `ReadConsole()`|Hardware konfigurieren oder ansprechen.| +|**Zeitmanagement**|`sleep()`, `SetTimer()`|Warten oder Zeit messen.| +|**Schutz/Sicherheit**|`chmod()`, `icacls()`|Zugriffsrechte ändern.| + +#### 5. Inkompatibilität zwischen Betriebssystemen +Warum läuft ein Windows-Programm (.exe) nicht auf Linux? Einer der Hauptgründe sind die Systemaufrufe. +• Die **Formate** der Systemaufrufe sind unterschiedlich. +• Die **Art**, wie Parameter übergeben werden, unterscheidet sich. Selbst auf der gleichen Hardware (z.B. Intel CPU) sind Anwendungen daher nicht kompatibel, da sie eine "andere Sprache" sprechen, um mit dem Kernel zu reden +### 7. Programmausführung & Speicher +Wie wird aus Code ein Prozess? +1. **Compiler:** Quellcode -> Objektdatei +2. **Linker:** Verbindet Objektdatei mit Bibliotheken -> Ausführbare Datei (.exe) +3. **Loader:** Lädt Datei in den RAM -> **Prozess** +**Speicheraufbau eines C-Programms im RAM:** +• **Text:** Der Programmcode +• **Data:** Initialisierte globale Variablen +• **BSS:** Nicht-initialisierte globale Variablen +• **Heap:** Dynamischer Speicher (malloc) +• **Stack:** Lokale Variablen und Funktionsaufrufe +## Hardware: +### 1. Grundbegriffe & Einheiten +• **EVA-Prinzip:** Eingabe → Verarbeitung → Ausgabe. Peripheriegeräte (Tastatur, Monitor) machen E/A, die Systemeinheit (CPU) macht die Verarbeitung +• **Maßeinheiten:** Die Folien unterscheiden strikt zwischen dezimalen und binären Präfixen: +    ◦ **KB, MB, GB:** Basieren auf Faktor 1000 (103). +    ◦ **KiB, MiB, GiB:** Basieren auf Faktor 1024 (210). _Wichtig: Das Betriebssystem rechnet meist binär (GiB), Festplattenhersteller oft dezimal (GB)._ +### 2. Rechnerarchitekturen +#### Von-Neumann-Architektur (Standard PC) +Die meisten modernen PCs basieren auf dem **John-von-Neumann-Prinzip** (1945): +1. **SISD:** Single Instruction, Single Data (ein Befehl bearbeitet einen Datensatz). +2. **Gemeinsamer Speicher:** Befehle (Programmcode) und Daten liegen im selben RAM. +3. **Lineare Adressierung:** Speicherzellen werden über Adressen angesprochen. +#### Andere Architekturen +• **Harvard:** Getrennter Speicher für Befehle und Daten (schneller, teurer). +• **SIMD (Single Instruction Multiple Data):** Ein Befehl bearbeitet viele Daten gleichzeitig (Vektorrechner, Supercomputer). +• **MIMD (Multiple Instruction Multiple Data):** Viele Prozessoren bearbeiten unterschiedliche Daten mit unterschiedlichen Befehlen. +#### Das Minimalsystem +Ein funktionierender Computer benötigt mindestens: +1. **CPU:** Verarbeitet Daten. +2. **RAM:** Speichert Daten flüchtig. +3. **Datenträger:** Speichert Daten dauerhaft. +4. **Bussystem:** Verbindet alles. Besteht aus: +     ◦ _Datenbus_ (Prozessor -> Arbeitsspeicher). +     ◦ _Adressbus_ (wählt Speicherzellen/Geräte aus). +     ◦ _Steuerbus_ (Taktgeber, Lese-/Schreibsignale). +#### Mainboard: +Die Hauptplatine belegt die zentrale Stelle im Systemgehäuse. Sie steuert die Zusammenarbeit aller Bauteile +**Wichtige Komponenten auf dem Mainboard:** +• **Prozessorsockel:** Hier wird die CPU eingesetzt. Server-Mainboards können oft mehrere Sockel für mehrere Prozessoren haben, um die Leistung massiv zu steigern +• **Chipsatz:** Der "Verkehrspolizist" des Mainboards. Er steuert den Datenfluss zwischen Prozessor, Speicher und Peripherie +• **BIOS & CMOS:** +    1. **Das BIOS (Basic Input/Output System)** ist die **Firmware** (Software). Es enthält die unveränderlichen Funktionen und Anweisungen, um den Startvorgang (Boot) überhaupt durchzuführen, +2. **Das CMOS** ist der **Datenspeicher**. Es ist ein kleiner Speicherchip, der die **variablen Einstellungen** (Uhrzeit, Boot-Reihenfolge, Passwörter) speichert. Da dieser Speicher flüchtig ist, wird er von einer kleinen **Batterie** auf dem Mainboard gepuffert, damit die Daten nicht verloren gehen, wenn Sie den Stecker ziehen + **Kurz gemerkt:** Das BIOS ist der „Motor“ (das Programm), das CMOS ist der „Tank“ für Ihre persönlichen Einstellungen. +• **Schnittstellen & Steckplätze:** +    ◦ _Intern:_ Speicherbänke für RAM, Anschlüsse für Festplatten/SSDs (SATA/M.2) +    ◦ _Erweiterung:_ Slots (z.B. PCIe) für Grafik-, Sound- oder Netzwerkkarten +    ◦ _Extern:_ USB, Monitor, Netzwerk +### 3. Der Prozessor (CPU) +Die CPU führt arithmetische und logische Operationen aus. Die Leistung hängt von der Taktfrequenz und der Architektur (32-Bit vs. 64-Bit) ab +#### CISC vs. RISC +• **CISC (Complex Instruction Set Computing):** (z.B. Intel/AMD) +    ◦ Mächtige, komplexe Befehle. +    ◦ Befehle werden intern oft durch **Mikrocode** (Software im Chip) realisiert. +    ◦ _Nachteil:_ Dekodierung dauert länger. +• **RISC (Reduced Instruction Set Computing):** (z.B. ARM, SPARC) +    ◦ Wenige, einfache Befehle. +    ◦ Fest verdrahtet (kein Mikrocode), sehr schnelle Ausführung. +#### Wichtige Register +Register sind extrem schnelle, aber kleine Speicherbereiche direkt im Prozessor. Sie sind entscheidend für die Arbeitsweise der CPU und das Verständnis von Kontextwechseln (Multitasking). +##### 1. Register-Gruppen und Namenskonventionen +Die Bezeichnung der Register hängt von der Architektur ab. Die Folien nutzen die Intel-Nomenklatur: +• **16-Bit:** `AX`, `BX`, `CX` ... +• **32-Bit:** `EAX`, `EBX`, `ECX` ... (E = Extended) +• **64-Bit:** `RAX`, `RBX`, `RCX` ... (R = Register/Re-extended) +##### 2. Datenregister (General Purpose Registers) +Diese werden für Rechenoperationen genutzt: +• **AX / EAX / RAX (Accumulator):** Der primäre Akkumulator für arithmetische Operationen. Er wird auch für den Datenaustausch mit dem Arbeitsspeicher genutzt (ein Operand hier, einer im RAM). +• **BX / EBX / RBX (Base):** Das Basisregister. Es wird oft für die adressierte Indizierung (Zeiger auf Daten) verwendet. +• **CX / ECX / RCX (Counter):** Das Zählregister. Es ist speziell für Schleifen (`loops`) optimiert, da es automatisch herunterzählen (dekrementieren) kann. +• **DX / EDX / RDX (Data):** Das Datenregister. Es wird für I/O-Operationen und für Berechnungen mit großen Zahlen (z.B. Multiplikation/Division zusammen mit AX) genutzt. +##### 3. Segmentregister +Da der Speicher in Segmente unterteilt ist, zeigen diese Register auf den Beginn eines Segments: +• **CS (Code Segment):** Startadresse des Programmcodes (Befehle). +• **DS (Data Segment):** Startadresse der Daten (Variablen, Konstanten). +• **SS (Stack Segment):** Startadresse des Stacks (für Funktionsaufrufe/lokale Variablen). +• **ES (Extra Segment):** Zusätzlicher Speicherbereich für Daten. +##### 4. Zeiger- und Indexregister (Klausurrelevant!) +Diese Register sind für den Programmablauf und die Stack-Verwaltung essenziell: +• **IP / EIP / RIP (Instruction Pointer / Befehlszeiger):** +    ◦ Speichert die Adresse des **nächsten** auszuführenden Befehls. +    ◦ Zusammen mit dem `CS`-Register (`CS:IP`) ergibt sich die exakte physikalische Adresse des Befehls. +• **SP / ESP / RSP (Stack Pointer / Stapelzeiger):** +    ◦ Zeigt immer auf das aktuelle **Ende** (Top) des Stacks. +    ◦ Wird zusammen mit dem `SS`-Register (`SS:SP`) verwendet. +• **BP / EBP / RBP (Base Pointer):** +    ◦ Dient als Referenzrahmen für Funktionsparameter und lokale Variablen auf dem Stack. +     +Wenn ein **Interrupt** auftritt oder ein **Prozesswechsel** (Kontextwechsel) stattfindet, muss das Betriebssystem den Inhalt _aller_ dieser Register sichern (in den PCB oder auf den Stack). Wenn der Prozess später weiterrechnet, werden die alten Werte in die Register zurückgeladen, damit der Prozess exakt dort weitermachen kann, wo er unterbrochen wurde +#### Multicore +Um Leistung zu steigern, ohne die Taktfrequenz (Wärme!) zu erhöhen, nutzt man mehrere Kerne. +• **Hyperthreading:** Ein Kern simuliert zwei logische Kerne. +• **Multi-Core:** Echte physische Kerne auf einem Chip. Jeder Kern hat eigene Rechenwerke (ALU/FPU) und L1-Cache, teilt sich aber oft L2/L3-Cache. +### 4. Speicherhierarchie & Datenträger +• **Cache (L1, L2, L3):** Puffer zwischen der sehr schnellen CPU und dem langsamen RAM. Ziel: Daten bereitstellen, bevor die CPU sie anfordert +• **RAM (Arbeitsspeicher):** +    ◦ _DRAM:_ Günstig, braucht Refresh-Zyklen (Kondensatoren entladen sich). +    ◦ _SRAM:_ Schnell, teuer, kein Refresh nötig (Flip-Flops) +• **Massenspeicher:** +    ◦ _HDD:_ Mechanisch, Fragmentierung ist ein Problem. +    ◦ _SSD:_ Flash-Speicher, keine beweglichen Teile, sehr schnell, verhält sich logisch wie eine Festplatte +### 5. Treiber +#### Das Grundproblem: Sprachbarrieren +Das Betriebssystem muss mit vielen unterschiedlichen internen und externen Geräten (Festplatte, Grafikkarte, Drucker, Netzwerkkarte) kommunizieren. +• **Komplexität:** Jedes Gerät ist technisch anders aufgebaut und besitzt eine eigene, oft sehr komplizierte „Sprache“ (Protokolle, Befehlssätze),. +• **Unmöglichkeit:** Das Betriebssystem selbst (der Kernel) kann unmöglich alle Sprachen aller existierenden (und zukünftigen) Geräte beherrschen,. +#### Die Hardware-Seite: Der Controller +Jedes Gerät besitzt einen **Geräte-Controller** (einen Hardware-Chip). +• Dieser Controller versteht die spezifische interne Sprache des Geräts und steuert die physischen Vorgänge (z.B. Schreibkopf bewegen, Pixel setzen). +• Der Controller ist der direkte Ansprechpartner für die Software,. +#### Die Software-Seite: Der Treiber +Der **Treiber** ist ein spezielles Programm (Teil des Betriebssystems), das als Übersetzer fungiert. +1. **Funktion:** Der Treiber kennt die Sprache des spezifischen Geräte-Controllers. Er übersetzt die allgemeinen Befehle des Betriebssystems (z.B. „Drucke Datei“) in die spezifischen Befehle für den Controller,. +2. **Kommunikation:** Er sorgt für den Datentransfer hin und her zwischen dem Hauptspeicher und dem Gerät,. +3. **Abstraktion:** Für manche standardisierten Schnittstellen (z.B. USB-Massenspeicher) gibt es generische Treiber, die für viele Geräte funktionieren. Meistens ist ein Treiber aber spezifisch für genau **ein** Gerät und genau **ein** Betriebssystem,. +#### Geschwindigkeit +Alle **E/A-Operationen** (Ein-/Ausgabe), die über Treiber laufen, sind im Vergleich zu reinen CPU-Register- oder RAM-Zugriffen extrem **langsam**. Daher versucht das BS oft, diese Wartezeiten durch Multitasking (Prozesswechsel) zu überbrücken. +### 6. Datenübertragung: DMA (Direct Memory Access) +**Problem:** Wenn die CPU jedes Byte einzeln von der Festplatte in den RAM kopieren müsste, wäre sie zu 100% ausgelastet ("zu schlau für dumme Arbeit") +**Lösung (DMA-Ablauf):** +1. Die **CPU** beauftragt den **DMA-Controller**: "Kopiere X Bytes von Adresse A nach B". +2. Die CPU widmet sich sofort anderen Prozessen (rechnet weiter). +3. Der **DMA-Controller** übernimmt den Bus und kopiert die Daten selbstständig. +4. Nach Abschluss sendet der DMA-Controller einen **Interrupt** an die CPU ("Fertig!"). +5. Die CPU unterbricht ihre Arbeit kurz und bearbeitet das Ende des Transfers. +### 7. Kommunikation: Polling vs. Interrupts +#### 1. Polling (Aktives Warten) +Dies ist die ältere und einfachere, aber ineffiziente Methode. +**Das Prinzip:** Der Prozessor übernimmt die aktive Rolle. Er befindet sich in einer Schleife und fragt nacheinander jedes angeschlossene Gerät ab: _"Hast du Daten für mich? Hast du einen Auftrag?"_ +**Der Ablauf:** +1. Die CPU stoppt ihre aktuelle Berechnung. +2. Sie fragt Gerät A: "Status?". +3. Sie fragt Gerät B: "Status?". +4. Wenn kein Gerät etwas will, nimmt die CPU die Berechnung wieder auf oder fängt die Runde von vorne an +**Die Nachteile (Warum wir es kaum noch nutzen):** +• **Verschwendung:** Die CPU verbringt einen Großteil ihrer Zeit mit Fragen, auf die die Antwort meistens "Nein" lautet. Diese Zeit fehlt für echte Berechnungen +• **Datenverlust:** Wenn die CPU gerade Gerät A bedient (Daten kopiert) und Gerät B in diesem Moment wichtige Daten empfängt (z.B. Netzwerkpakete), kann die CPU nicht reagieren. Da Gerät B oft keinen großen eigenen Speicher hat, gehen diese Daten verloren +#### 2. Interrupts (Unterbrechungen) +Dies ist der Standard in modernen Systemen. Hier melden sich die Geräte aktiv bei der CPU ("Event-Driven"). + +**Das Prinzip:** Die CPU kümmert sich nicht um die Geräte, sondern rechnet an ihrem Prozess. Wenn ein Gerät Aufmerksamkeit braucht, sendet es ein elektronisches Signal (Interrupt). Die CPU unterbricht ihre Arbeit _sofort_, erledigt den Job des Geräts und macht dann weiter, als wäre nichts gewesen +**Notwendige Hardware-Komponenten:** Damit das funktioniert, benötigt die CPU Hilfe: +• **Interrupt-Register (IR):** Ein spezielles Register in der CPU, in dem Bits gesetzt werden, wenn eine Unterbrechung anliegt. +• **Interrupt-Controller:** Ein Chip, der die Signale der vielen Geräte sammelt und geordnet an die CPU weiterleitet. +• **Stack:** Ein Speicherbereich im RAM, um den Zustand der CPU (Kontext) kurzzeitig zu sichern. +• **Interrupt-Vektoren:** Eine Tabelle im Speicher, die der CPU sagt: "Bei Fehler Nr. 5 springe zu Adresse X". +• **ISR (Interrupt Service Routine):** Das kleine Programm (Treiber), das das Gerät tatsächlich bedient. + +Der detaillierte Ablauf eines Interrupts am Beispiel einer Netzwerkkarte, die Daten empfängt: +1. **Ereignis:** Daten kommen an der Netzwerkkarte an. Da ihr Speicher klein ist, müssen sie sofort abgeholt werden. +2. **Signal:** Die Karte sendet ein Signal an den **Interrupt-Controller** (z.B. IRQ 5). +3. **Weiterleitung:** Der Interrupt-Controller setzt das entsprechende Bit (Nr. 5) im **Interrupt-Register (IR)** der CPU. +4. **Zyklus-Check:** Die CPU beendet ihren _aktuellen_ Befehl. Bevor sie den nächsten Befehl lädt, prüft sie automatisch das IR. +5. **Erkennung:** Die CPU sieht: "Bit 5 ist gesetzt!". +6. **Sicherung (Kontextwechsel):** Die CPU unterbricht das laufende Programm. Sie speichert alle wichtigen Registerinhalte und den Befehlszeiger auf den **Stack**. +7. **Lookup:** Die CPU schaut in der Vektortabelle nach Eintrag Nr. 5, um die Startadresse der passenden **ISR** zu finden. +8. **Ausführung:** Die CPU springt zur ISR. Die ISR kopiert die Daten von der Netzwerkkarte in den RAM. +9. **Restore:** Die ISR ist fertig. Die CPU lädt die alten Registerwerte vom Stack zurück. +10. **Weiter:** Das ursprüngliche Programm läuft an exakt der gleichen Stelle weiter. +#### Vergleich: +• Beim **Polling** geht die Initiative von der CPU aus (teuer, langsam). +• Beim **Interrupt** geht die Initiative vom Gerät aus (effizient, schnell). \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_IPC.md b/Betriebssysteme/Zusammenfassung_IPC.md new file mode 100644 index 0000000..80382e9 --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_IPC.md @@ -0,0 +1,112 @@ +# Zusammenfassung: IPC +## 1. Grundlagen und Motivation +Prozesse benötigen häufig einen Informationsaustausch (Beispiel: Ein E-Mail-Programm Mail User Agent sendet Daten an den Mail Transfer Agent). Da jeder Prozess grundsätzlich einen eigenen, isolierten Adressraum besitzt, ist eine direkte Kommunikation nicht trivial. +**Das Grundprinzip:** +- Für die Kommunikation ist gemeinsam genutzter Speicher (Shared Memory) zwingend erforderlich. Dies kann ein Bereich im Kernel-Adressraum sein oder eine Datei auf der Festplatte. +- Moderne Betriebssysteme erlauben es Prozessen, Teile ihres Adressraums explizit für andere freizugeben. +**Prozesse vs. Threads in der IPC:** +- Threads desselben Prozesses teilen sich bereits automatisch den Adressraum. +- Wenn zwei Prozesse einen gemeinsamen Speicherbereich nutzen, verhalten sie sich technisch fast identisch zu zwei Threads. +- Daher gilt der Leitsatz: **Interprozesskommunikation ist im Grunde immer Interthreadkommunikation.** +## 2. Das Problem: Race-Conditions (Wettlaufsituationen) +**Definition:** Eine Race-Condition entsteht, wenn mehrere Prozesse/Threads gleichzeitig auf gemeinsam beschreibbare Ressourcen zugreifen und das Endergebnis von der zufälligen zeitlichen Reihenfolge der Ausführung abhängt. +**Gefahren:** +- Race-Conditions führen zu semantischen Fehlern, die schwer zu finden sind (keine Syntaxfehler!). +- Der Code funktioniert meistens korrekt, stürzt aber sporadisch ab („Heisenbugs"). +### Beispiel 1: Das Logdatei-Problem (Der Absturz) +Zwei Prozesse (A und B) wollen in dieselbe Logdatei schreiben: +1. Prozess A liest den Status: „Datei ist geschlossen". A setzt intern `is_open = false`. +2. **Kontextwechsel:** Die Zeitscheibe von A läuft ab, bevor A die Datei wirklich öffnen kann. +3. Prozess B kommt an die Reihe, liest den Status: „Datei ist geschlossen". +4. Prozess B öffnet die Datei, schreibt hinein und setzt den Status (physikalisch) auf „offen". +5. **Kontextwechsel:** B wird unterbrochen. +6. Prozess A läuft weiter. Da A intern gespeichert hat `is_open = false`, prüft es nicht erneut. +7. **Fehler:** A versucht, die (bereits offene) Datei erneut zu öffnen → Absturz oder Datenverlust. +### Beispiel 2: Lost Update (Datenbank) +Zwei Threads wollen einen Zähler (`counter = 0`) erhöhen. Code: `counter = counter + 1;` +Obwohl der Code logisch aussieht, passiert auf Maschinenebene Folgendes: +1. Thread A lädt Wert 0 in Register. +2. Thread B lädt Wert 0 in Register (bevor A schreibt). +3. A erhöht auf 1 und speichert. +4. B erhöht (seine 0) auf 1 und speichert. → Ergebnis ist 1 statt 2. Ein Update ging verloren. +## 3. Die Lösung: Der Kritische Bereich +**Definition:** Der Programmteil, in dem auf den gemeinsam genutzten Speicher zugegriffen wird, nennt sich **Kritischer Bereich (Critical Section)**. +### Die 4 zentralen Bedingungen für Synchronisation +Um Race-Conditions zu verhindern, muss das Betriebssystem folgende Regeln garantieren: +1. **Gegenseitiger Ausschluss (Mutual Exclusion):** Es dürfen sich niemals zwei Prozesse gleichzeitig im kritischen Bereich befinden. +2. **Keine Annahmen:** Die Lösung darf nicht von der Geschwindigkeit der Prozesse oder der Anzahl der CPUs abhängen. +3. **Keine Blockierung von außen:** Ein Prozess, der sich außerhalb seines kritischen Bereichs befindet, darf andere Prozesse nicht blockieren. +4. **Kein ewiges Warten (No Starvation):** Jeder Prozess muss irgendwann die Chance bekommen, in den kritischen Bereich einzutreten. +## 4. Mechanismus 1: Atomare Operationen +Das Grundproblem ist, dass Hochsprachen-Befehle (wie `i++`) nicht atomar (unteilbar) sind. Sie bestehen aus mehreren CPU-Befehlen (Load, Increment, Store), die unterbrochen werden können. +**Lösung auf Hardware-Ebene:** Prozessoren bieten spezielle Assembler-Instruktionen, die garantiert nicht unterbrochen werden können. Wären alle Befehle atomar, gäbe es keine Race-Conditions. +**Wichtige Assembler-Befehle:** +- **TSL (Test-and-Set-Lock):** Liest ein Byte aus dem Speicher in ein Register und schreibt im selben Taktzyklus einen neuen Wert (z.B. 1) an diese Stelle. +- **FAA (Fetch-and-Add):** Inkrementiert einen Wert im Speicher atomar. +- **CAS (Compare-and-Swap):** Vergleicht den Speicherinhalt mit einem Erwartungswert und tauscht ihn nur bei Übereinstimmung aus (Basis für lock-free Algorithmen). +- **XCHG (Exchange):** Tauscht die Inhalte zweier Register oder Speicheradressen atomar. +## 5. Mechanismus 2: Mutex (Mutual Exclusion) +**Konzept:** Ein Mutex ist eine Technik und Datenstruktur, die als "Schloss" dient. +- Nur der Thread, der den Mutex "besitzt" (lock), darf in den kritischen Bereich. +- Nur der Besitzer kann den Mutex wieder freigeben (unlock). +**Ablauf (Code-Schema):** +```c +pthread_mutex_lock(&m); // Versuche Schloss zu holen. Wenn belegt -> Warten. +/* KRITISCHER BEREICH (z.B. Schreiben in Datei) */ +pthread_mutex_unlock(&m); // Schloss freigeben. +``` +### Verhalten bei belegtem Mutex +Wenn Thread A den Mutex hat und Thread B ihn will, hat B drei Optionen: +1. **Passives Warten:** B gibt die CPU ab und wird vom OS "schlafen gelegt" (blocked), bis der Mutex frei ist. +2. **Aktives Warten (Spinlock):** B läuft in einer Schleife und prüft permanent („Ist frei? Ist frei?"). Sinnvoll nur bei sehr kurzen Wartezeiten auf Multi-Core-Systemen. +3. **Timeout:** B bricht den Versuch nach einer Zeit ab. +## 6. Mechanismus 3: Signale +**Eigenschaften:** Signale sind ein sehr altes Konzept (Unix) und stellen eine Software-Unterbrechung (Interrupt) dar. Sie können an Prozesse oder Threads gesendet werden. +**Funktionsweise:** +- Wenn ein Signal empfangen wird, unterbricht der Prozess seine Arbeit sofort. +- Entweder führt er eine ISR (Interrupt Service Routine) aus (benutzerdefiniert) oder die Standardaktion des Kernels (z.B. Prozess beenden). +- **Signalmaske:** Jeder Thread kann definieren, welche Signale er blockieren/ignorieren möchte. +**Wichtige POSIX-Funktionen:** +- `pthread_kill()`: Sendet Signal an einen Thread (nicht zwingend tödlich, dient als Benachrichtigung). +- `sigwait()`: Thread wartet passiv auf ein bestimmtes Signal. +## 7. Mechanismus 4: Semaphore (nach Dijkstra) +**Konzept:** Ein Semaphor ist mächtiger als ein Mutex. Er erlaubt den Zugriff einer vordefinierten Anzahl von Threads gleichzeitig. +### Datenstruktur +Ein Semaphor besteht aus zwei Elementen: +1. Einem Zähler (Integer). +2. Einer Warteschlange (Queue) für blockierte Threads. +### Die zwei Operationen +- **P() / wait():** Dekrementiert den Zähler. + - Ist der Zähler danach ≥ 0: Zugriff erlaubt. + - Ist der Zähler < 0 (bzw. war 0): Thread wird blockiert und in die Queue geschoben. +- **V() / signal():** Inkrementiert den Zähler. + - Wenn Threads in der Queue warten, wird einer geweckt. +### Unterschied zu Mutex +- Ein Mutex muss vom Besitzer freigegeben werden. Ein Semaphor kann von jedem Thread inkrementiert (V) werden (Asynchrone Signalisierung). +- Ein Semaphor mit Zähler = 1 (Binärer Semaphor) verhält sich wie ein Mutex. +### Beispiel: Bahnhofsüberwachung (Performance-Begrenzung) +**Szenario:** Es gibt viele Kameras, aber aus Performance-Gründen dürfen maximal 3 Such-Threads gleichzeitig Bilder analysieren. +- **Initialisierung:** `Semaphore s = new Semaphore(3);` +- **Thread startet:** `s.P()` (Zähler wird 2... dann 1... dann 0). +- Der 4. Thread muss warten (Zähler bleibt 0, Thread in Queue). +- **Thread fertig:** `s.V()` (Zähler wird 1, Wartender darf rein). +## 8. Mechanismus 5: Monitore +**Konzept:** Monitore sind ein Konstrukt auf höherer Abstraktionsebene (Sprachunterstützung). Ein Monitor ist ein gekapselter kritischer Bereich (z.B. eine Klasse oder Methode). +**Eigenschaften:** +- **Automatische Sicherheit:** Der Compiler garantiert, dass immer nur ein einziger Prozess/Thread gleichzeitig im Monitor aktiv ist. +- Programmierer müssen Lock/Unlock nicht manuell schreiben → weniger fehleranfällig. +**Implementierung in Java:** +- Schlüsselwort: `synchronized`. +- Kann auf Methoden (`synchronized void methode()`) oder Blöcke (`synchronized(this) { ... }`) angewendet werden. +### Bedingte Synchronisation (Warten im Monitor) +Oft muss ein Thread im Monitor warten, bis eine Bedingung erfüllt ist (z.B. Puffer nicht mehr leer). Dazu gibt es spezielle Methoden: +- `wait()`: Thread legt sich schlafen und gibt den Monitor frei, damit andere eintreten können. +- `notify()`: Weckt einen wartenden Thread (zufällig). +- `notifyAll()`: Weckt alle wartenden Threads (sicherer, um Deadlocks zu vermeiden). +## 9. Weitere Konzepte +### Das volatile Primitiv +- Kennzeichnet Variablen, die sich "außerhalb des Programmflusses" ändern können (z.B. durch Hardware oder andere Threads). +- **Effekt:** Der Compiler schaltet Optimierungen ab und erzwingt bei jedem Zugriff ein Lesen aus dem Hauptspeicher (statt aus dem schnellen CPU-Cache). +- **Achtung:** `volatile` garantiert Sichtbarkeit (Aktualität), aber keine Atomizität. Es ersetzt keinen Mutex bei komplexen Operationen. +### Parallele Programmiersprachen +Sprachen wie Occam, Ada oder Erlang besitzen eingebaute Kontrollstrukturen (z.B. `PAR` für parallele Ausführung oder Kanäle für Kommunikation), um Synchronisation direkt in der Syntax abzubilden, statt externe Bibliotheken zu nutzen. \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_Prozesse.md b/Betriebssysteme/Zusammenfassung_Prozesse.md new file mode 100644 index 0000000..94df241 --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Prozesse.md @@ -0,0 +1,120 @@ +# Zusammenfassung: Prozesse und Threads + +## Der Prozess: Definition und Konzept +1. **Bessere Definition:** „Ein Prozess ist eine Instanz eines ausgeführten Programms, einschließlich der aktuellen Werte des Programmzählers, der Register und Variablen.“ [4]. +2. **Umfassende Definition:** Ein Prozess ist der laufende Programmcode plus der Prozesskontext (alle Mittel und Parameter für die Ausführung) [5]. +### Der Unterschied zwischen Programm und Prozess +Dieser Unterschied ist subtil, aber entscheidend. Ein Programm ist **passiv** (Code auf der Festplatte). Ein Prozess ist **aktiv** (Ressourcenzusammenfassung + Ausführung). +- Ein Prozess führt ein Programm aus. +- Viele Prozesse können dasselbe Programm ausführen. Jeder hat dabei seine eigene Instanz im eigenen Adressraum, völlig unabhängig von den anderen [6] +### Der Prozesskontext +Der Kontext umfasst alles, was die CPU zur Ausführung benötigt [5]: +- Registerwerte der CPU. +- Belegung des Caches (Befehle/Daten). +- Belegung des Hauptspeichers (Code/Daten). +- Benutzer- und Gruppenkennungen (IDs). +- Seitentabellen (Memory Management). +- Geöffnete Dateien. +- Prioritäten und Zustandsinformationen. + +## Prozessverwaltung durch das Betriebssystem +### Process Control Block (PCB) +Das OS fasst alle Informationen eines Prozesses in einer Verwaltungsstruktur zusammen, dem PCB. Für jeden Prozess gibt es einen eigenen PCB. Die Gesamtheit aller PCBs bildet die Prozesstabelle [7]. +- Je komplexer das OS, desto größer der PCB. +- Unter Linux ist die Struktur in `sched.h` definiert [8]. +### Ressourcennutzung (Code-Sharing) +Da Prozesse Instanzen desselben Programms sein können, optimiert das OS den Speicher: +- **Codesegment (CS):** Wird nur einmal geladen und von allen Instanzen geteilt (spart Speicher und Zeit). +- **Datensegment (DS) & Stapel (SS):** Jeder Prozess erhält seine eigene Kopie. +- **Instruction Pointer (IP):** Jeder Prozess hat einen eigenen Zeiger, wo er sich im Code gerade befindet. So können Prozesse denselben Code an unterschiedlichen Stellen ausführen, ohne sich zu stören [8], [9]. +### Hierarchie +Prozesse sind hierarchisch organisiert. Ein Elternprozess (_Parent_) erstellt einen Kindprozess (_Child_). Das Kind erbt Attribute vom Elternteil. Jeder Prozess kennt seine eigene ID (**PID**) und die des Elternprozesses (**PPID**) [10]. +## Lebenszyklus eines Prozesses +Ein Prozess durchläuft verschiedene Phasen [11]: +1. Erstellung. +2. Ausführung auf dem Prozessor. +3. Anforderung von Ressourcen (Warten auf Zuweisung). +4. Warten auf Ergebnisse anderer Prozesse. +5. Erhalt einer Zeitscheibe (Quantum). +6. Warten auf die nächste Zeitscheibe (nach Entzug der CPU). +7. Beendigung. +### Wichtige Zustände (States) +Nicht zu verwechseln mit den Phasen, gibt es drei Hauptzustände in der Warteschlange [12]: +- **Bereit (Ready):** Wartet auf Zuteilung der CPU. +- **Rechnend (Running):** Führt Code aus. +- **Blockiert (Waiting):** Wartet auf ein Ereignis (z.B. I/O), CPU wurde entzogen. +### Kontextwechsel (Context Switch) +Der Wechsel von Prozess A zu Prozess B erfordert das Speichern des Zustands von A im PCB-A und das Laden von B aus PCB-B. +- Dies ist sehr zeitaufwändig. +- Hardware-Unterstützung (mehrere Registersätze) kann dies beschleunigen [13], [14]. +### Prozessbeendigung +Ein Prozess kann auf drei Arten enden [15]: +1. **Normal:** Geplantes Ende (letzte Anweisung, `return`). +2. **Fehler:** Ungeplant (Nulldivision, Datei fehlt, Speicherfehler). +3. **Kill:** Befehl von außen (z.B. `kill -9 PID` unter Linux) [16]. +**Probleme bei der Beendigung:** +- **Speicherlecks:** Wenn `malloc` genutzt wurde, aber kein `free`, bleibt Speicher belegt. Moderne Sprachen (Java, Go) nutzen Garbage Collection +- **Zombies:** Ein Prozess ist beendet, aber der Elternprozess hat den Status nicht abgefragt. Er bleibt als "Leiche" in der Tabelle +## Prozesserstellung: Linux vs. Windows +### Linux (`fork` & `exec`) +Das Verfahren ist zweistufig und sehr flexibel: +1. **`fork()`:** Erzeugt eine exakte Kopie des Elternprozesses. + - Der neue Prozess (Kind) beginnt an der gleichen Stelle (nach dem fork). + - **Unterscheidung durch Rückgabewert:** + - `0`: Ich bin das Kind. + - `PID > 0`: Ich bin der Elternprozess (Wert ist die PID des Kindes). + - `-1`: Fehler. +2. **`exec()` (optional):** Lädt ein neues Programm in den Speicher des Kindprozesses und überschreibt den alten Code. +### Windows +Nutzt den Systemaufruf `CreateProcess()`. +## Threads +**Definition:** Ein Thread ist ein sequenzieller Kontrollfluss innerhalb eines Prozesses. Ein Prozess kann mehrere Threads haben, die parallel ausgeführt werden. Threads dienen dazu, die Programmausführung zu beschleunigen und Aufgaben zu parallelisieren (z.B. Rechnen vs. E/A). +### Ressourcenteilung +Threads und Prozesse sind unterschiedliche Konzepte. Der Prozess dient der Ressourcengruppierung, der Thread ist die Einheit der Ausführung auf der CPU. + +|**Gemeinsam genutzt (Shared)**|**Privat pro Thread (Private)**| +|---|---| +|Adressraum im Speicher|Program Counter (PC/IP)| +|Globale Variablen|Stack (Stapel)| +|Geöffnete Dateien|CPU-Register| +|Untergeordnete Prozesse|Zustand & Priorität| +|Benutzer-/Gruppen-ID|Signale (teils)| +|IPC-Mittel|| + +**Vorteile von Threads:** +- Erstellung ist 10- bis 100-mal schneller als bei Prozessen. +- Einfacher Zugriff auf gemeinsame Daten (kein komplexes IPC nötig). +- Echte Parallelität auf Multi-Core-Systemen [24]. +## Thread-Modelle: User vs. Kernel +### A. User-Threads (Benutzer-Ebene) +Das Betriebssystem weiß nichts von diesen Threads. Sie werden von einer Bibliothek (Runtime System) im User-Space verwaltet. +- **Vorteile:** + - Keine Kernel-Aufrufe nötig (schnell). + - Verwaltung rein lokal im Prozessspeicher. + - Eigenes Scheduling möglich [28]. +- **Nachteile:** + - **Blockierung:** Wenn ein Thread einen blockierenden Systemaufruf macht (z.B. Warten auf Tastatur), blockiert der gesamte Prozess (alle Threads stehen). +### B. Kernel-Threads (Betriebssystem-Ebene) +Das Betriebssystem kennt und verwaltet die Threads direkt. +- **Vorteile:** + - Wenn ein Thread blockiert, laufen andere weiter. + - Echte parallele Verteilung auf mehrere CPUs [30]. +- **Nachteile:** + - Langsamer (Systemaufrufe nötig für Erstellung/Wechsel). + - Belegt mehr Speicher im Kernel [30], [31]. +### C. Mapping (Die Verbindung) +Es muss eine Beziehung zwischen User- und Kernel-Threads geben [32], [33]: +- **Many-to-One:** Viele User-Threads auf einen Kernel-Thread (wie reines User-Threading). +- **One-to-One:** Jeder User-Thread hat einen Kernel-Thread (WinAPI, Linux Pthreads). +- **Many-to-Many:** Hybridansatz. +## Programmierung und Standards +POSIX Pthreads (IEEE 1003.1c): +Der Standard für Unix/Linux. +- **Bibliothek:** `pthread` +- **Funktionen:** `pthread_create`, `pthread_join` (warten auf Ende). +WinAPI Threads: +Der Standard für Windows. +- **Funktionen:** `CreateThread`, `WaitForSingleObject` (statt join), `CloseHandle`. +**Java & Go:** +- **Java:** Threads werden vom Runtime-System verwaltet (früher User-Threads, heute oft Mapping auf Kernel-Threads). Klasse `Thread` oder Interface `Runnable`. Starten mit `.start()` (ruft `.run()` auf) [33]. +- **Go:** „Goroutinen“ (`go function()`). Sehr leichtgewichtig, vom Go-Runtime-System verwaltet [38], [39]. \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_Scheduling.md b/Betriebssysteme/Zusammenfassung_Scheduling.md new file mode 100644 index 0000000..a240714 --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Scheduling.md @@ -0,0 +1,121 @@ +# Zusammenfassung: Scheduling +## 1. Grundlagen und Definitionen +**Was ist Scheduling?** Scheduling ist die Strategie und Methode, mit der das Betriebssystem die verfügbare Prozessorzeit (CPU-Zeit) auf die verschiedenen lauffähigen Prozesse oder Threads verteilt. +### Die drei Arten des Schedulings +1. **Kurzfristiges Scheduling (Short-Term / CPU-Scheduling):** Die Entscheidung, welcher Prozess als nächstes die CPU bekommt. (Dies ist der Fokus dieser Zusammenfassung) +2. **Mittelfristiges Scheduling:** Verwaltung des Arbeitsspeichers (Swapping, Prozess auslagern). +3. **Langfristiges Scheduling:** Entscheidung, welche Aufgaben (Jobs) überhaupt ins System zugelassen werden (Job-Queue). +### Wichtige Komponenten +- **Scheduler:** Die „Logik". Er entscheidet basierend auf einem Algorithmus, welcher Prozess als nächstes laufen darf. +- **Dispatcher:** Der „Mechaniker". Er führt den tatsächlichen Kontextwechsel durch. Er stoppt den alten Prozess, sichert den Status, lädt den neuen Status und übergibt die Kontrolle an die CPU. + - **Dispatch-Latenz:** Die Zeit, die der Dispatcher für das Umschalten braucht. Diese Zeit ist „Verlust" (Overhead) und sollte so gering wie möglich sein. +## 2. Prozess-Verhalten: Bursts +Prozesse arbeiten nicht linear. Sie wechseln ständig zwischen zwei Phasen: +1. **CPU-Burst:** Der Prozess rechnet aktiv (nutzt die CPU). +2. **E/A-Burst (I/O-Burst):** Der Prozess wartet auf Daten (Festplatte, Netzwerk, Tastatur) und nutzt die CPU nicht. +### Unterscheidung der Prozess-Typen +- **CPU-gebunden (CPU-bound):** Lange CPU-Bursts, seltenes Warten. (Beispiel: Videorendering, Simulationen) +- **E/A-gebunden (I/O-bound):** Kurze CPU-Bursts, häufiges Warten. (Beispiel: Texteditor, Webbrowser) +- **Ziel:** Ein guter Scheduler mischt diese Typen, um die Hardware optimal auszulasten. +## 3. Wann wird geschedult? +Der Scheduler muss in vier Situationen aktiv werden: +1. **Neuer Prozess:** Ein Programm wird gestartet. +2. **Prozessende:** Ein Prozess ist fertig. +3. **Blockierung:** Ein Prozess wartet auf E/A oder einen Semaphor/Mutex. +4. **Interrupt (nur bei Präemption):** Ein Hardware-Timer (Clock-Interrupt) unterbricht den laufenden Prozess. +## 4. Ziele des Schedulings +Die Ziele hängen stark von der Art des Systems ab. Es gibt oft Konflikte (z.B. Fairness vs. Effizienz). +### Allgemeine Ziele +- **Fairness:** Jeder Prozess erhält einen gerechten Anteil der CPU (Mindestzuteilung). +- **Effizienz:** Die CPU soll immer zu 100% beschäftigt sein (kein Leerlauf). +- **Balance:** Alle Systemteile (CPU, Disk, RAM) sollen ausgelastet sein. +- **Policy Enforcement:** Durchsetzung von Regeln (z.B. „Chef-Prozesse haben Vorrang"). +### Spezifische Ziele nach Modus +**Batch-Systeme (Stapelverarbeitung):** +- Maximierung des Durchsatzes (Jobs pro Stunde). +- Minimierung der Durchlaufzeit (Zeit von Abgabe bis Fertigstellung). +**Interaktive Systeme (PC/Server):** +- Minimierung der Antwortzeit (Zeit bis zur ersten Reaktion auf eine Eingabe). +- Minimierung der Wartezeit in der "Bereit"-Schlange. +**Echtzeitsysteme:** +- Einhaltung von Deadlines (Fristen). +- Vorhersagbarkeit (kein Datenverlust durch Verzögerung). +## 5. Algorithmen-Konzepte: Präemptiv vs. Nicht-Präemptiv +### A. Nicht-Präemptiv (Kooperativ) +- Ein Prozess behält die CPU, bis er fertig ist, blockiert (I/O) oder sie freiwillig abgibt. +- **Vorteil:** Einfach, keine Timer-Hardware nötig. +- **Nachteil:** Ein Endlos-Schleifen-Prozess kann das ganze System einfrieren (Windows 3.1 Ära). +### B. Präemptiv (Verdrängend) +- Das OS kann einem Prozess die CPU gewaltsam entziehen. +- Benötigt Clock-Interrupts. +- Jeder Prozess erhält ein Zeitquantum (Zeitscheibe, typisch 10–200 ms). +- **Faustregel:** Verhältnis Kontextwechsel zu Quantum sollte ca. 1:20 bis 1:50 betragen, um Overhead gering zu halten. +## 6. Die Scheduling-Algorithmen im Detail +### 6.1 FCFS (First Come First Serve) +- **Prinzip:** „Wer zuerst kommt, mahlt zuerst". Einfache Warteschlange (FIFO). +- **Typ:** Nicht-präemptiv. +- **Vorteil:** Sehr einfach zu implementieren. +- **Nachteil:** Konvoi-Effekt. Ein langer CPU-Prozess blockiert alle kurzen E/A-Prozesse. Führt zu schlechter Durchschnitts-Wartezeit. +### 6.2 SJF (Shortest Job First) +- **Prinzip:** Der Prozess mit dem kürzesten CPU-Burst wird als nächstes gewählt. +- **Typ:** Nicht-präemptiv. +- **Vorteil:** Garantiert die beste (minimale) durchschnittliche Wartezeit aller Verfahren. +- **Nachteil:** Die Laufzeit muss im Voraus bekannt sein (schwierig bei interaktiven Systemen). Gefahr von Starvation (Verhungern) langer Jobs, wenn immer neue kurze Jobs kommen. +### 6.3 SRTN (Shortest Remaining Time Next) +- **Prinzip:** Die präemptive Version von SJF. Wenn ein neuer Job kommt, dessen Laufzeit kürzer ist als der Rest des aktuellen Jobs, wird gewechselt. +- **Vorteil:** Sehr gut für kurze Jobs geeignet. +- **Nachteil:** Laufzeit muss bekannt sein; Overhead durch Überwachung der Restzeiten. +### 6.4 RR (Round Robin) +- **Prinzip:** Jeder Prozess bekommt die CPU für ein festes Zeitquantum (z.B. 20ms). Ist er nicht fertig, kommt er ans Ende der Schlange. +- **Typ:** Präemptiv. +- **Vorteil:** Der fairste Algorithmus. Keine Starvation. Gute Antwortzeit für Benutzer. +- **Nachteil:** Durchschnittliche Durchlaufzeit oft schlechter als SJF. +**Das Quantum-Problem:** +- **Zu groß:** RR verhält sich wie FCFS (schlechte Reaktion). +- **Zu klein:** Zu viele Kontextwechsel (CPU verbringt nur Zeit mit Umschalten, nicht mit Rechnen). +## 7. Prioritätsmechanismen +Priorität ist kein eigener Algorithmus, sondern ein Aufsatz auf andere (z.B. Priority-Queue statt FIFO). +### Hierarchie (Wer hat Vorrang?) +1. Kernel (Höchste Prio). +2. OS-Dienste / Treiber. +3. Interrupts. +4. GUI / Interaktive Apps. +5. Hintergrunddienste. +### Problem Starvation & Lösungen +Wenn Prozesse mit hoher Priorität die CPU monopolisieren, verhungern niedrige Prozesse. +- **Aging (Altern):** Die Priorität wartender Prozesse wird schrittweise erhöht. +- **Dynamische Anpassung:** Das OS beobachtet das Verhalten (z.B. Gauß-Methode oder Lotterie-Scheduling) und passt Prioritäten zur Laufzeit an. +## 8. Echtzeit-Modus (Real-Time) +Hier zählt nicht Geschwindigkeit, sondern Vorhersagbarkeit. +- **Harte Echtzeit:** Deadline muss gehalten werden (z.B. Airbag-Auslösung). Verspätung = Systemversagen. +- **Weiche Echtzeit:** Verspätung ist tolerierbar, aber Qualität sinkt (z.B. Video-Stream ruckelt). +- **Bedingung:** Das System ist nur planbar, wenn die Summe aller Prozess-Laufzeiten kleiner ist als die verfügbare CPU-Zeit. +## 9. Das große Rechenbeispiel (Klausur-relevant!) +Die Quelle vergleicht Algorithmen anhand von 5 Prozessen. Dies zeigt die Unterschiede in der Durchlaufzeit (Turnaround Time). +### Szenario +- **Prozesse:** A (Länge 12), B (6), C (7), D (2), E (9). +- **Prioritäten (0=hoch):** C(1), B(2), E(3), A(4), D(5). (Achtung: D hat niedrigste Prio!) +### A. FCFS (Reihenfolge A, B, C, D, E) +- A wartet 0, läuft 12 → Ende bei 12. +- B wartet auf A (12), läuft 6 → Ende bei 18. +- C endet bei 25. +- D endet bei 27. +- E endet bei 36. +- **Durchschnitt:** (12+18+25+27+36)/5 = **23,6** +### B. SJF (Sortiert nach Länge: D, B, C, E, A) +- D (2) läuft zuerst → Ende bei 2. +- B (6) startet bei 2 → Ende bei 8. +- C (7) startet bei 8 → Ende bei 15. +- E (9) startet bei 15 → Ende bei 24. +- A (12) startet bei 24 → Ende bei 36. +- **Durchschnitt:** (2+8+15+24+36)/5 = **17** +- **Fazit:** SJF ist der beste für den Durchsatz, aber unfair für A. +### C. Round Robin mit Priorität (Hier als Beispiel für "Worst Case") +- Im Beispiel führt dies zu vielen Wechseln und einer durchschnittlichen Zeit von 25,4. +- **Fazit:** RR ist der schlechteste für die Durchlaufzeit, aber der fairste Algorithmus. +## 10. Zusammenfassende Erkenntnisse für MC-Fragen +1. **Dispatcher vs. Scheduler:** Scheduler plant, Dispatcher schaltet. +2. **SJF:** Beste Performance, aber Gefahr von Starvation und schwer vorhersagbar. +3. **Round Robin:** Beste Fairness, Nutzung in interaktiven Systemen, abhängig vom Quantum. +4. **Batch vs. Interaktiv:** Batch will Durchsatz, Interaktiv will kurze Antwortzeiten. +5. **1:20 bis 1:50:** Das goldene Verhältnis von Overhead (Kontextwechsel) zu Nutzlast (Quantum). \ No newline at end of file diff --git a/Betriebssysteme/Zusammenfassung_Speicherverwaltung.md b/Betriebssysteme/Zusammenfassung_Speicherverwaltung.md new file mode 100644 index 0000000..828d88a --- /dev/null +++ b/Betriebssysteme/Zusammenfassung_Speicherverwaltung.md @@ -0,0 +1,140 @@ +# Zusammenfassung: Speicherverwaltung +## 1. Einführung: Die Direkte Speicherverwaltung +Die einfachste und historisch älteste Form der Speicherverwaltung ist die direkte Verwaltung. +- **Grundprinzip:** Alle Adressen, die im Programmcode stehen, entsprechen direkt den physikalischen Adressen im Hauptspeicher (RAM). Es gibt keine Übersetzungsschicht. +- **Beispiel:** Der Assembler-Befehl `mov AX, 42` bedeutet, dass der Prozessor direkt auf die physikalische Speicherzelle Nr. 42 zugreift und deren Inhalt in das Register AX lädt. +### Historische Speichertypen +Frühere Computer unterschieden strikt zwei Arten von Speicher: +1. **ROM (Read-Only-Memory):** Ein kleiner Speicher (ca. 64 KiB), der nicht überschrieben werden konnte. Er enthielt Boot-Funktionen, Treiber und Teile des Betriebssystems. +2. **RAM (Random-Access-Memory):** Der große Arbeitsspeicher für das Betriebssystem und die Benutzerprogramme. +### Organisation +Wenn nur ein einziges Benutzerprogramm und das Betriebssystem (OS) im Speicher sind, gab es drei Organisationsformen: +1. OS im RAM (unten), Benutzerprogramm darüber. +2. OS im ROM (oben), Benutzerprogramm im RAM. +3. Treiber im ROM, OS und Benutzerprogramm im RAM. +### Nachteile der direkten Verwaltung +Dieses Modell stößt schnell an Grenzen: +1. **Mangelnder Schutz:** Ein Programm kann versehentlich das Betriebssystem oder andere Programme beschädigen, da es Zugriff auf jedes physikalische Byte hat. +2. **Kein echtes Multitasking:** Es ist fast unmöglich, mehrere Programme gleichzeitig laufen zu lassen. Wenn zwei Programme hartkodierte Adressen nutzen (z.B. beide wollen an Adresse 1000 starten), können sie nicht gleichzeitig im Speicher liegen. +3. **Größenbeschränkung:** Das gesamte Programm muss vollständig in den physikalischen Speicher passen ("The whole program must be presented in memory"). +## 2. Die erste Lösung: Adressräume & Swapping +Um die Probleme der direkten Verwaltung zu lösen, wurden Adressräume eingeführt. Ein Adressraum ist die Menge aller Adressen, die ein Prozess verwenden darf. Jeder Prozess erhält seinen eigenen, isolierten Raum. +### Hardware-Unterstützung (Basis & Limit) +Der Prozessor nutzt zwei spezielle Register zur Verwaltung: +1. **Basisregister:** Enthält die physikalische Startadresse des Programms. +2. **Grenzwertregister (Limit):** Enthält die Gesamtlänge des Programms. +- **Berechnung:** Die effektive physikalische Adresse = Programmadresse + Basisregister. +- **Schutz:** Die Hardware prüft bei jedem Zugriff: Effektive Adresse ≤ Basis + Limit. Ist dies nicht der Fall, wird der Zugriff verweigert (Schutzverletzung). +### Das Konzept des Swapping (Auslagerung) +Da der Arbeitsspeicher selten groß genug ist, um alle Prozesse gleichzeitig vollständig zu halten, nutzt das OS "Swapping". +- **Vorgang:** Wenn der Platz knapp wird, wird ein inaktiver Prozess komplett auf die Festplatte geschrieben (ausgelagert) und ein anderer Prozess komplett in den Speicher geladen. +- **Problem der Fragmentierung:** Durch das ständige Ein- und Auslagern entstehen ungenutzte Lücken ("Löcher") zwischen den Prozessen. Der Speicher zerstückelt. +- **Lösung:** Das OS muss den Speicher defragmentieren (komprimieren), was jedoch sehr rechenaufwändig ist. +### Speicherzuweisungs-Algorithmen (Allocation Algorithms) +Wenn ein neuer Prozess geladen werden soll, muss das OS eine passende Lücke im RAM finden. Hierfür gibt es fünf klassische Strategien: +1. **First Fit:** Wählt die erste Lücke, die groß genug ist. Schnell, aber fragmentiert den Speicher vorne. +2. **Next Fit:** Beginnt die Suche dort, wo die letzte Zuweisung endete. +3. **Best Fit:** Sucht die kleinste Lücke, die gerade so ausreicht. Nachteil: Hinterlässt winzige, nutzlose Rest-Lücken. +4. **Worst Fit:** Wählt die größte verfügbare Lücke. Idee: Der Rest ist groß genug für weitere Prozesse. +5. **Quick Fit:** Hält separate Listen für häufig benötigte Lückengrößen bereit. +## 3. Virtuelle Speicherverwaltung (Paging) +Das ist der Standard in allen modernen Systemen (Windows, Linux, Android, macOS). Es entkoppelt die Sicht des Programms von der physikalischen Realität. +### Kernkonzepte +- **Virtueller Speicher:** Das Programm "sieht" einen perfekten, linearen Speicher, der in Pages (Seiten) unterteilt ist. +- **Physischer Speicher:** Der RAM ist in Frames (Seitenrahmen) unterteilt. +- **Mapping:** Es gilt immer: Größe Frame = Größe Page (Standard ist oft 4 KiB). +- **Vorteil:** Ein Programm kann größer sein als der physikalische Speicher. Die Seiten müssen nicht zusammenhängend im RAM liegen. +### MMU (Memory Management Unit) +Die MMU ist ein Hardware-Baustein direkt auf dem Prozessor-Chip. +- **Aufgabe:** Sie übersetzt bei jedem Speicherzugriff die virtuelle Adresse in eine physikalische Adresse. +- **Richtung:** Immer Virtuell → Physikalisch (niemals umgekehrt!). +### Berechnung der optimalen Seitengröße +Die Wahl der Seitengröße ist ein Kompromiss. +- **Kleine Seiten:** Weniger Verschnitt (interne Fragmentierung), aber riesige Verwaltungstabellen. +- **Große Seiten:** Kleine Tabellen, aber viel ungenutzter Platz am Ende der letzten Seite. +- **Formel:** p = √(2 · s · e) + - p: Seitengröße + - s: Durchschnittliche Prozessgröße + - e: Größe eines Seitentabellen-Eintrags + - Beispiel: Bei 1 MiB Programmgröße und 8 Byte Eintrag ergibt sich mathematisch eine optimale Größe von 4 KiB. +## 4. Datenstrukturen: Seitentabellen & TLB +### Die Seitentabelle (Page Table) +Jeder Prozess besitzt eine eigene Seitentabelle im RAM. Sie dient der MMU als Nachschlagewerk. Ein Eintrag in dieser Tabelle (typisch 32 Bit / 4 Byte) enthält komplexe Statusinformationen: +1. **Rahmennummer:** Die eigentliche physikalische Adresse im RAM (wo liegt die Seite?). +2. **Present/Absent Bit (P):** + - 1: Seite ist im RAM (Zugriff okay). + - 0: Seite ist nicht im RAM (löst Seitenfehler / Page Fault aus). +3. **Modified Bit (M) / Dirty Bit:** + - 1: Die Seite wurde verändert (geschrieben). Sie muss beim Entfernen auf die Festplatte zurückgesichert werden. + - 0: Seite ist sauber (identisch mit der Festplatte), kann einfach überschrieben werden. +4. **Referenced Bit (R):** + - 1: Seite wurde kürzlich gelesen oder beschrieben. Wichtig für Ersetzungs-Algorithmen. Das OS setzt dieses Bit periodisch auf 0 zurück. +5. **Schutz-Bits (RWX):** Definieren Rechte (Read, Write, Execute). + +### Das Problem der Größe +Da jeder Prozess eine Tabelle braucht, kann dies viel Speicher kosten. Bei 32-Bit oder 64-Bit Systemen können Tabellen mehrere Megabyte groß werden (z.B. 4 MiB). +- **Lösung:** Mehrstufige Seitentabellen (Paged Page Tables). +### TLB (Translation Lookaside Buffer) +Da ein Zugriff auf die Seitentabelle im RAM langsam ist (Verdopplung der Zugriffszeit: 1x Tabelle lesen, 1x Daten lesen), nutzt die MMU einen Hardware-Cache namens TLB. +- Der TLB speichert die häufigsten Übersetzungen. +- Die MMU prüft zuerst den TLB. Nur bei einem "Miss" greift sie auf die langsame Tabelle im RAM zu. +## 5. Seitenersetzungs-Algorithmen (Page Replacement) +Wenn der physikalische Speicher voll ist und eine neue Seite geladen werden muss (Demand Paging), muss eine alte Seite weichen ("Opfer"). Welcher Algorithmus trifft diese Entscheidung? +### A. NRU (Not Recently Used) +Klassifiziert Seiten anhand der R- und M-Bits in 4 Klassen: +- **Klasse 0:** Nicht referenziert, nicht modifiziert. (Bestes Opfer). +- **Klasse 1:** Nicht referenziert, modifiziert. +- **Klasse 2:** Referenziert, nicht modifiziert. +- **Klasse 3:** Referenziert, modifiziert. (Schlechtes Opfer, wird oft gebraucht). +**Strategie:** Löscht zufällig eine Seite aus der niedrigsten vorhandenen Klasse. Einfach, aber mäßig effizient. +### B. FIFO (First-In-First-Out) +- **Strategie:** Führt eine Liste aller Seiten. Die älteste (zuerst geladene) Seite fliegt raus. +- **Nachteil:** Die älteste Seite kann eine wichtige Kernel-Bibliothek sein, die ständig benötigt wird. FIFO ist daher in Reinform ineffizient. +### C. Second Chance (SC) +Eine Verbesserung von FIFO. Prüft das R-Bit der ältesten Seite: +- **R=0:** Seite ist alt und unbenutzt → Raus. +- **R=1:** Seite ist alt, aber aktiv → R-Bit löschen, Seite ans Ende der Liste verschieben (wie neu geladen). Sie erhält eine "zweite Chance". +### D. Clock (Uhr-Algorithmus) +- Eine effizientere Implementierung von Second Chance mittels einer zirkulären Liste (wie ein Zifferblatt). +- Ein Zeiger dreht sich im Kreis. Trifft er auf R=1, setzt er es auf 0 und geht weiter. Trifft er auf R=0, wird die Seite ersetzt. +### E. LRU (Least Recently Used) +- **Idee:** Die Vergangenheit sagt die Zukunft voraus. Seiten, die lange nicht genutzt wurden, werden wohl auch bald nicht gebraucht. +- **Implementierung:** Theoretisch bräuchte man einen Zeitstempel bei jedem Zugriff (zu teuer). +- **Praxis:** Hardware-Zähler in der Seitentabelle oder Matrix-Methoden. Gilt als einer der besten Algorithmen. +### F. Working Set (WS) +- Definiert eine "Arbeitsmenge" an Seiten, die ein Prozess in einem Zeitfenster τ (z.B. 100ms) benötigt hat. +- **Strategie:** Entferne nur Seiten, die nicht zum aktuellen Working Set gehören. Verhindert "Thrashing" (das System ist nur noch mit Auslagern beschäftigt). +## 6. Der Ablauf eines Seitenfehlers (Page Fault) +Was passiert im Detail, wenn ein Prozess auf eine Adresse zugreift, deren Present-Bit 0 ist? Dies ist ein komplexer Vorgang in 11 Schritten: +1. **Trap:** Die Hardware bemerkt den Fehler. Ein Interrupt wird ausgelöst, der Programmzähler (PC) wird im Stack gesichert. Der Modus wechselt zu Kernel-Mode. +2. **Sichern:** Alle flüchtigen Informationen (Register) werden gespeichert. +3. **Identifikation:** Das OS ermittelt, welche virtuelle Adresse den Fehler verursacht hat (steht oft in einem Spezialregister der CPU). +4. **Validierung:** Das OS prüft: Ist die Adresse überhaupt gültig? Hat der Prozess Rechte dafür? Falls nein → Prozess-Abbruch (Segmentation Fault). +5. **Rahmensuche:** Das OS sucht einen freien physikalischen Rahmen. Falls keiner frei ist, muss der Seitenersetzungsalgorithmus (siehe Punkt 5) ausgeführt werden, um Platz zu schaffen. +6. **Auslagern (Eviction):** Wenn die "Opfer-Seite" modifiziert war (M=1), muss sie erst auf die Festplatte geschrieben werden. +7. **Kontextwechsel:** Da Festplattenzugriffe langsam sind, wird der aktuelle Prozess blockiert und ein anderer Prozess darf solange rechnen (CPU-Nutzung optimieren). +8. **Laden:** Die eigentlich angeforderte Seite wird nun von der Festplatte in den freien Rahmen geladen. +9. **Update:** Die Seitentabelle wird aktualisiert: Rahmennummer eintragen, Present-Bit auf 1 setzen. +10. **Wiederherstellung (Restore):** Die gesicherten Register des Prozesses werden wiederhergestellt. Der Programmzähler wird auf den Befehl zurückgesetzt, der den Fehler verursachte. +11. **Fortsetzung:** Der Befehl wird erneut ausgeführt – diesmal erfolgreich, da die Seite nun im RAM ist. +## 7. Segmente & Speicherschutz +Ein moderner Prozess-Adressraum ist nicht homogen, sondern in logische Segmente unterteilt, die unterschiedliche Rechte (Schutz-Bits) haben: +1. **Code-Segment (Text):** Enthält die Maschinenbefehle. + - Rechte: Nur Lesen und Ausführen (r-x). Schreiben ist verboten (verhindert selbst-modifizierenden Code). +2. **Daten-Segment:** Enthält globale Variablen. + - Rechte: Lesen und Schreiben (rw-). Ausführen verboten (Schutz vor Buffer-Overflow-Exploits). +3. **Stack-Segment:** Für lokale Variablen und Funktionsaufrufe. (rw-). +4. **Heap-Segment:** Für dynamisch angeforderten Speicher (malloc / new). (rw-). +### Segmentation Fault +Ein "Segfault" tritt auf, wenn ein Programm versucht, auf eine Adresse zuzugreifen, für die es keine Rechte hat (z.B. Schreiben in Code-Segment) oder die nicht existiert (z.B. Dereferenzierung eines Null-Zeigers). +## 8. Vergleich: Swapping vs. Paging + +|Merkmal|Swapping (Veraltet)|Paging (Modern)| +|---|---|---| +|**Einheit**|Ganzer Prozess wird verschoben.|Einzelne Seiten (Teile) werden verschoben.| +|**Speicherart**|Nur bei direkter Speicherverwaltung nötig.|Nur bei virtueller Speicherverwaltung.| +|**Effizienz**|Gering (große Datenmengen, Fragmentierung).|Hoch (feingranular, nur benötigte Teile).| +|**Hardware**|Benötigt Basis-/Limit-Register.|Benötigt MMU und Seitentabellen.| + +### Demand Paging +Moderne Systeme laden Seiten nicht im Voraus ("Prefetching"), sondern strikt nach Bedarf ("Demand"). Eine Seite wird erst geladen, wenn ein Page Fault auftritt. Das spart Speicher und I/O-Bandbreite. \ No newline at end of file diff --git a/Dashboard.md b/Dashboard.md new file mode 100644 index 0000000..a050c76 --- /dev/null +++ b/Dashboard.md @@ -0,0 +1,25 @@ +# 📊 Studium Dashboard + +> Letzte Aktualisierung: `2026-03-19` + +--- + +## Fortschritt Übersicht + +| Modul | Vorlesungen | Folien | Zusammenfassungen | NotebookLM | Status | +| ------------------------------------------ | ----------- | ------ | ----------------- | ---------- | ------ | +| [[Kryptografie/_Overview\|Kryptografie]] | 6 | 5/6 | 5/6 | 5/6 | 🟡 | +| [[Netzwerke/_Overview\|Netzwerke]] | 11 | 4/11 | 4/11 | 4/11 | 🟡 | +| [[IT-Sicherheit/_Overview\|IT-Sicherheit]] | 10 | 5/10 | 5/10 | 5/10 | 🟡 | + +**Legende:** 🔴 Nicht begonnen · 🟡 In Arbeit · 🟢 Abgeschlossen + +--- + +## Workflow + +1. **Folien erhalten** → Vorlesung besucht, Folien gesichert +2. **Zusammenfassung** → Folien an Claude schicken, Markdown speichern +3. **NotebookLM** → Zusammenfassung hochladen +4. **Lernkarten** → Quiz und Karten in NotebookLM erstellen +5. **Durchgearbeitet** → Karten gelernt, Thema sitzt diff --git a/Datenbanken/.DS_Store b/Datenbanken/.DS_Store new file mode 100644 index 0000000..61a2c2d Binary files /dev/null and b/Datenbanken/.DS_Store differ diff --git a/Datenbanken/Folien/BadExampleNF.jpg b/Datenbanken/Folien/BadExampleNF.jpg new file mode 100644 index 0000000..52a2b4a Binary files /dev/null and b/Datenbanken/Folien/BadExampleNF.jpg differ diff --git a/Datenbanken/Folien/ExampleFullOuterJoin.pdf b/Datenbanken/Folien/ExampleFullOuterJoin.pdf new file mode 100644 index 0000000..cc833c3 Binary files /dev/null and b/Datenbanken/Folien/ExampleFullOuterJoin.pdf differ diff --git a/Datenbanken/Folien/ExampleFullOuterJoin.xlsx b/Datenbanken/Folien/ExampleFullOuterJoin.xlsx new file mode 100644 index 0000000..57650ab Binary files /dev/null and b/Datenbanken/Folien/ExampleFullOuterJoin.xlsx differ diff --git a/Datenbanken/Folien/a_Organisation.pdf b/Datenbanken/Folien/a_Organisation.pdf new file mode 100644 index 0000000..2268006 Binary files /dev/null and b/Datenbanken/Folien/a_Organisation.pdf differ diff --git a/Datenbanken/Folien/b_Mengenlehre.pdf b/Datenbanken/Folien/b_Mengenlehre.pdf new file mode 100644 index 0000000..59064f3 Binary files /dev/null and b/Datenbanken/Folien/b_Mengenlehre.pdf differ diff --git a/Datenbanken/Folien/b_Modellierung.pdf b/Datenbanken/Folien/b_Modellierung.pdf new file mode 100644 index 0000000..a2dedd3 Binary files /dev/null and b/Datenbanken/Folien/b_Modellierung.pdf differ diff --git a/Datenbanken/Folien/b_ModellierungFB.pdf b/Datenbanken/Folien/b_ModellierungFB.pdf new file mode 100644 index 0000000..056fee2 Binary files /dev/null and b/Datenbanken/Folien/b_ModellierungFB.pdf differ diff --git a/Datenbanken/Folien/c_Algebra.pdf b/Datenbanken/Folien/c_Algebra.pdf new file mode 100644 index 0000000..2f8bffc Binary files /dev/null and b/Datenbanken/Folien/c_Algebra.pdf differ diff --git a/Datenbanken/Folien/d_SQL.pdf b/Datenbanken/Folien/d_SQL.pdf new file mode 100644 index 0000000..e017446 Binary files /dev/null and b/Datenbanken/Folien/d_SQL.pdf differ diff --git a/Datenbanken/Folien/e_NFs.pdf b/Datenbanken/Folien/e_NFs.pdf new file mode 100644 index 0000000..facdafe Binary files /dev/null and b/Datenbanken/Folien/e_NFs.pdf differ diff --git a/Datenbanken/Folien/f_Transaktionen.pdf b/Datenbanken/Folien/f_Transaktionen.pdf new file mode 100644 index 0000000..41c9d96 Binary files /dev/null and b/Datenbanken/Folien/f_Transaktionen.pdf differ diff --git a/Datenbanken/Folien/g_Speicherstrukturen.pdf b/Datenbanken/Folien/g_Speicherstrukturen.pdf new file mode 100644 index 0000000..cbeda85 Binary files /dev/null and b/Datenbanken/Folien/g_Speicherstrukturen.pdf differ diff --git a/Datenbanken/Folien/h_Sicherungskonzepte.pdf b/Datenbanken/Folien/h_Sicherungskonzepte.pdf new file mode 100644 index 0000000..07a3d21 Binary files /dev/null and b/Datenbanken/Folien/h_Sicherungskonzepte.pdf differ diff --git a/Datenbanken/Folien/i_DWKonzepte.pdf b/Datenbanken/Folien/i_DWKonzepte.pdf new file mode 100644 index 0000000..6fe5bcf Binary files /dev/null and b/Datenbanken/Folien/i_DWKonzepte.pdf differ diff --git a/Datenbanken/Folien/j_AndereDB.pdf b/Datenbanken/Folien/j_AndereDB.pdf new file mode 100644 index 0000000..53aa914 Binary files /dev/null and b/Datenbanken/Folien/j_AndereDB.pdf differ diff --git a/Datenbanken/Folien/nf.bmp b/Datenbanken/Folien/nf.bmp new file mode 100644 index 0000000..c6e4b9f Binary files /dev/null and b/Datenbanken/Folien/nf.bmp differ diff --git a/Datenbanken/Folien/nf.pdf b/Datenbanken/Folien/nf.pdf new file mode 100644 index 0000000..8e1fec2 Binary files /dev/null and b/Datenbanken/Folien/nf.pdf differ diff --git a/Datenbanken/Klausur/Zimmi Hinweise.md b/Datenbanken/Klausur/Zimmi Hinweise.md new file mode 100644 index 0000000..40e260b --- /dev/null +++ b/Datenbanken/Klausur/Zimmi Hinweise.md @@ -0,0 +1,3 @@ +# Klausurhinweise + +- Views und Inline-Views in SQL Code erkennen und unterscheiden können \ No newline at end of file diff --git a/Datenbanken/Lehrplan.pdf b/Datenbanken/Lehrplan.pdf new file mode 100644 index 0000000..758e491 Binary files /dev/null and b/Datenbanken/Lehrplan.pdf differ diff --git a/Datenbanken/PA/.DS_Store b/Datenbanken/PA/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Datenbanken/PA/.DS_Store differ diff --git a/Datenbanken/PA/PA_A1_bis_A3.pdf b/Datenbanken/PA/PA_A1_bis_A3.pdf new file mode 100644 index 0000000..001a408 Binary files /dev/null and b/Datenbanken/PA/PA_A1_bis_A3.pdf differ diff --git a/Datenbanken/PA/PA_A4_bis_A8.sql b/Datenbanken/PA/PA_A4_bis_A8.sql new file mode 100644 index 0000000..32afcf1 --- /dev/null +++ b/Datenbanken/PA/PA_A4_bis_A8.sql @@ -0,0 +1,165 @@ +/* + Thema: Datenbanken PA + Datum: 20.02.2026 + + Autor 1: Theo Leuthardt + MatrNr.: 77205844868 + Autor 2: Domenik Wilhelm + MatrNr.: 77207300494 +*/ + +-- Tabellen löschen, falls vorhanden -- +BEGIN EXECUTE IMMEDIATE 'DROP TABLE PA_RESULT CASCADE CONSTRAINTS'; EXCEPTION WHEN OTHERS THEN NULL; END; +/ +BEGIN EXECUTE IMMEDIATE 'DROP TABLE PA_SATELLITEN CASCADE CONSTRAINTS'; EXCEPTION WHEN OTHERS THEN NULL; END; +/ +BEGIN EXECUTE IMMEDIATE 'DROP TABLE PA_STERNE CASCADE CONSTRAINTS'; EXCEPTION WHEN OTHERS THEN NULL; END; +/ +BEGIN EXECUTE IMMEDIATE 'DROP TABLE PA_REFERENZ CASCADE CONSTRAINTS'; EXCEPTION WHEN OTHERS THEN NULL; END; +/ + +-- Aufgabe 4: Tabellen erstellen -- +CREATE TABLE PA_REFERENZ ( + EntscheidungID INTEGER PRIMARY KEY, + Entscheidung VARCHAR2(50) NOT NULL +); + +CREATE TABLE PA_STERNE ( + Stern VARCHAR2(50) PRIMARY KEY, + Masse NUMBER NOT NULL, + Radius NUMBER NOT NULL +); + +CREATE TABLE PA_SATELLITEN ( + Kennung VARCHAR2(50) PRIMARY KEY, + Geschwindigkeit NUMBER NOT NULL +); + +CREATE TABLE PA_RESULT ( + Stern VARCHAR2(50) NOT NULL, + Kennung VARCHAR2(50) NOT NULL, + EntscheidungID INTEGER NOT NULL, + CONSTRAINT pk_result PRIMARY KEY (Stern, Kennung), + CONSTRAINT fk_result_stern FOREIGN KEY (Stern) + REFERENCES PA_STERNE (Stern), + CONSTRAINT fk_result_sat FOREIGN KEY (Kennung) + REFERENCES PA_SATELLITEN (Kennung), + CONSTRAINT fk_result_ref FOREIGN KEY (EntscheidungID) + REFERENCES PA_REFERENZ (EntscheidungID) +); + +COMMIT; + +-- Aufgabe 4: Tabellen befüllen -- +INSERT INTO PA_REFERENZ (EntscheidungID, Entscheidung) VALUES (0, 'Kreisen'); +INSERT INTO PA_REFERENZ (EntscheidungID, Entscheidung) VALUES (1, 'Kollidieren'); +INSERT INTO PA_REFERENZ (EntscheidungID, Entscheidung) VALUES (2, 'Weiter fliegen'); +INSERT INTO PA_REFERENZ (EntscheidungID, Entscheidung) VALUES (9, 'Entscheidungsfehler'); + +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Aldebaran', 3.38E+30, 3.07E+10); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Arktur', 2.19E+30, 1.77E+10); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Betelgeuse', 3.28E+31, 6.17E+11); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Orion', 6.20E+35, 1.67E+13); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Polarstern', 8.70E+30, 7.78E+08); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Sonne', 1.99E+30, 6.96E+08); +INSERT INTO PA_STERNE (Stern, Masse, Radius) VALUES ('Erde', 5.97E+24, 6.37E+06); + +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Bohr', 9.90E+04); +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Galileo', 5.00E+05); +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Higgs', 1.28E+14); +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Kopernikus', 1.31E+08); +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Newton', 9.10E+03); +INSERT INTO PA_SATELLITEN (Kennung, Geschwindigkeit) VALUES ('Plank', 7.77E+78); + +COMMIT; + +-- Aufgabe 5: PL/SQL Paket SAT -- +CREATE OR REPLACE PACKAGE SAT AS + C_GRAVITATIONSKONSTANTE CONSTANT NUMBER := 6.67E-11; + C_WURZEL_ZWEI CONSTANT NUMBER := 1.41421356237; + + PROCEDURE Action; +END SAT; +/ + +-- Aufgabe 6: PL/SQL Prozedur GetVelocity -- +CREATE OR REPLACE PACKAGE BODY SAT AS + + PROCEDURE GetVelocity( + p_EKG OUT NUMBER, + p_ZKG OUT NUMBER, + p_Masse IN NUMBER, + p_Radius IN NUMBER + ) IS + BEGIN + p_EKG := SQRT(C_GRAVITATIONSKONSTANTE * p_Masse / p_Radius); + p_ZKG := p_EKG * C_WURZEL_ZWEI; + END GetVelocity; + +-- Aufgabe 7: PL/SQL Prozedur Action -- + + PROCEDURE Action IS + v_EKG NUMBER; + v_ZKG NUMBER; + v_EntscheidungID INTEGER; + + CURSOR c_Sterne IS + SELECT Stern, Masse, Radius + FROM PA_STERNE; + + CURSOR c_Satelliten IS + SELECT Kennung, Geschwindigkeit + FROM PA_SATELLITEN; + BEGIN + FOR r_Stern IN c_Sterne LOOP + FOR r_Satellit IN c_Satelliten LOOP + GetVelocity(v_EKG, v_ZKG, r_Stern.Masse, r_Stern.Radius); + + IF r_Satellit.Geschwindigkeit < v_EKG THEN + v_EntscheidungID := 1; + ELSIF r_Satellit.Geschwindigkeit <= v_ZKG THEN + v_EntscheidungID := 0; + ELSIF r_Satellit.Geschwindigkeit > v_ZKG THEN + v_EntscheidungID := 2; + ELSE + v_EntscheidungID := 9; + END IF; + + INSERT INTO PA_RESULT (Stern, Kennung, EntscheidungID) + VALUES (r_Stern.Stern, r_Satellit.Kennung, v_EntscheidungID); + END LOOP; + END LOOP; + END Action; + +END SAT; +/ + +-- Aufgabe 8: PL/SQL Anonymer Block -- +DECLARE + CURSOR c_Ergebnis IS + SELECT r.Stern, r.Kennung, ref.Entscheidung + FROM PA_RESULT r + JOIN PA_REFERENZ ref ON r.EntscheidungID = ref.EntscheidungID + ORDER BY r.Stern, r.Kennung; + + r_Ergebnis c_Ergebnis%ROWTYPE; +BEGIN + DELETE FROM PA_RESULT; + + SAT.Action; + + OPEN c_Ergebnis; + LOOP + FETCH c_Ergebnis INTO r_Ergebnis; + EXIT WHEN c_Ergebnis%NOTFOUND; + + DBMS_OUTPUT.PUT_LINE( + 'Stern: ' || RPAD(r_Ergebnis.Stern, 12) || + ' | Satellit: ' || RPAD(r_Ergebnis.Kennung, 12) || + ' | Entscheidung: ' || r_Ergebnis.Entscheidung + ); + END LOOP; + CLOSE c_Ergebnis; +END; +/ +COMMIT; \ No newline at end of file diff --git a/Datenbanken/Uebungen/Uebung_BitmapIndex.pdf b/Datenbanken/Uebungen/Uebung_BitmapIndex.pdf new file mode 100644 index 0000000..1e6b495 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_BitmapIndex.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_1.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_1.pdf new file mode 100644 index 0000000..0aa7353 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_1.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.odg b/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.odg new file mode 100644 index 0000000..7e8142e Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.odg differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.pdf new file mode 100644 index 0000000..c4c48cd Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_1_Lsng.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_2.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_2.pdf new file mode 100644 index 0000000..74d7bba Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_2.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_3.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_3.pdf new file mode 100644 index 0000000..2adfecc Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_3.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.odg b/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.odg new file mode 100644 index 0000000..70cb9a5 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.odg differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.pdf new file mode 100644 index 0000000..464d963 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_3_Lsng.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_4.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_4.pdf new file mode 100644 index 0000000..4fda469 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_4.pdf differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.odg b/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.odg new file mode 100644 index 0000000..5b479dc Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.odg differ diff --git a/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.pdf b/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.pdf new file mode 100644 index 0000000..b9aa2a8 Binary files /dev/null and b/Datenbanken/Uebungen/Uebung_NF_ERM_4_Lsng.pdf differ diff --git a/Datenbanken/Uebungen/Uebungen.ods b/Datenbanken/Uebungen/Uebungen.ods new file mode 100644 index 0000000..9c7f7ac Binary files /dev/null and b/Datenbanken/Uebungen/Uebungen.ods differ diff --git a/Datenbanken/Uebungen/Uebungen.pdf b/Datenbanken/Uebungen/Uebungen.pdf new file mode 100644 index 0000000..32e1b70 Binary files /dev/null and b/Datenbanken/Uebungen/Uebungen.pdf differ diff --git a/Datenbanken/Zusammenfassungen/Gesamtzusammenfassung.md b/Datenbanken/Zusammenfassungen/Gesamtzusammenfassung.md new file mode 100644 index 0000000..1858d5e --- /dev/null +++ b/Datenbanken/Zusammenfassungen/Gesamtzusammenfassung.md @@ -0,0 +1,2721 @@ +# Datenbanken – Gesamtzusammenfassung +**Dozent:** Prof. Dr. Arthur Zimmermann | HWR Berlin | 2026 | Semester 6 + +--- + +## Inhaltsverzeichnis + +- [1. Modellierung](#1-modellierung-b_modellierung) + - [1.1 Einführung](#11-einführung) + - [1.2 Codds 12 Regeln](#12-codds-12-regeln) + - [1.3 Mengenlehre](#13-mengenlehre-b_mengenlehre) + - [1.4 ANSI-SPARC-Modell](#14-ansi-sparc-modell-drei-schichten-architektur) + - [1.5 Phasen des Datenbankentwurfs](#15-phasen-des-datenbankentwurfs) + - [1.6 Anforderungsanalyse](#16-anforderungsanalyse) + - [1.7 Konzeptueller Entwurf – ERM](#17-konzeptueller-entwurf--entity-relationship-modell-erm) + - [1.8 Logischer Entwurf – ERM → Tabellen](#18-logischer-entwurf--konvertierung-erm--tabellen) +- [2. Modellierung – Fallbeispiel](#2-modellierung--fallbeispiel-b_modellierungfb) + - [Mini-Welt 1 (M:N)](#mini-welt-1) + - [Mini-Welt 2 (1:N)](#mini-welt-2) + - [Vergleich der Mini-Welten](#vergleich-der-mini-welten) +- [3. Relationale Algebra](#3-relationale-algebra-c_algebra) + - [Grundoperatoren (vollständiger Satz)](#grundoperatoren-vollständiger-satz) + - [Operatoren im Detail](#operatoren-im-detail) + - [Zusammenfassung Operatoren](#zusammenfassung-operatoren) +- [4. SQL](#4-sql-d_sql) + - [4.1 SQL-Kategorien (DDL/DML/DCL/TCL)](#41-sql-kategorien) + - [4.2 Datentypen (Oracle)](#42-datentypen) + - [4.3 Einfache Befehle (CREATE, INSERT, UPDATE, DELETE)](#43-einfache-befehle) + - [4.4 Erweiterungen (LIKE, IN, GROUP BY, HAVING, NULL)](#44-erweiterungen) + - [4.5 Anfragen über mehrere Relationen](#45-anfragen-über-mehrere-relationen) + - [4.6 JOINs (NATURAL, INNER, OUTER, SEMI)](#46-joins) + - [4.7 Anfragebearbeitung (Parser, Optimizer, RBO/CBO)](#47-anfragebearbeitung) + - [4.8 Indizes (Binärbaum, Hashing, Bitmap)](#48-indizes) +- [5. Normalformen](#5-normalformen-e_nfs) + - [5.1 Einführung & Funktionale Abhängigkeit](#51-einführung) + - [5.3 1NF – Atomare Werte](#53-erste-normalform--1nf) + - [5.4 2NF – Volle PK-Abhängigkeit](#54-zweite-normalform--2nf) + - [5.5 3NF – Keine transitive Abhängigkeit](#55-dritte-normalform--3nf) + - [5.6 BCNF – Schlüsselkandidaten-Überlappung](#56-boyce-codd-normalform--bcnf) + - [5.7 4NF – Semantische Trennung](#57-vierte-normalform--4nf) + - [5.8 5NF – Irreducible Zerlegung](#58-fünfte-normalform--5nf) + - [5.9 Anomalien ohne Normalisierung](#59-anomalien-ohne-normalisierung) + - [Durchgängiges Beispiel: Bahnwagen](#durchgängiges-beispiel-bahnwagen) +- [6. Transaktionen](#6-transaktionen-f_transaktionen) + - [6.4 ACID-Eigenschaften](#64-acid-eigenschaften) + - [6.5 Zustände einer Transaktion](#65-zustände-einer-transaktion) + - [6.7 Probleme bei paralleler Ausführung](#67-probleme-bei-paralleler-ausführung) + - [6.9 Isolationsstufen nach ANSI/ISO SQL92](#69-isolationsstufen-nach-ansiiso-sql92) + - [6.11 Synchronisationsverfahren (2PL, Zeitstempel)](#611-synchronisationsverfahren) +- [7. Speicherstrukturen (Oracle)](#7-speicherstrukturen-g_speicherstrukturen) + - [7.2 Datenträger (Tablespace, Segmente, Redo-Log)](#72-datenträger) + - [7.3 Arbeitsspeicher (SGA, PGA, UGA)](#73-arbeitsspeicher) +- [8. Sicherungskonzepte](#8-sicherungskonzepte-h_sicherungskonzepte) + - [8.4 Grundprinzipien (Authentifizierung, Autorisierung, Protokollierung)](#84-grundprinzipien-der-sicherheit) + - [8.5 Integrität (Constraints, Trigger)](#85-integrität) + - [8.6 Rechte (DAC, MAC, GRANT, REVOKE)](#86-rechte) + - [8.7 Backup (Arten, Methoden, RAID, Strategie)](#87-backup) +- [9. Data Warehouse Konzepte](#9-data-warehouse-konzepte-i_dwkonzepte) + - [9.2 OLAP](#92-olap) + - [9.3 ROLAP / MOLAP / HOLAP](#93-rolap-molap-holap) + - [9.5 Vergleich OLTP und OLAP](#95-vergleich-oltp-und-olap) + - [9.6 ETL – Extract, Transform, Load](#96-etl--extract-transform-load) + - [9.7 Hypercube-Operationen](#97-hypercube-operationen) +- [10. Andere Typen von Datenbanken](#10-andere-typen-von-datenbanken-j_anderedb) + - [10.1 Hierarchische Datenbanken (IMS)](#101-hierarchische-datenbanken) + - [10.2 Netzartige Datenbanken (UDS)](#102-netzartige-datenbanken) + - [10.3 Verteilte Datenbanken (Two-Phase-Commit)](#103-verteilte-datenbanken) + - [10.4 Objektorientierte Datenbanken](#104-objektorientierte-datenbanken) + - [10.5 No-SQL-Datenbanken (BASE-Prinzip)](#105-no-sql-datenbanken-not-only-sql) +- [11. Gesamtübersicht & Cheat-Sheet](#11-gesamtübersicht--cheat-sheet) + - [11.1 Datenbankentwicklungsprozess](#111-datenbankentwicklungsprozess-phasenmodell) + - [11.2 ERM → Tabellen Kurzreferenz](#112-erm--relationale-tabellen--kurzreferenz) + - [11.3 Normalformen Kurzreferenz](#113-normalformen--kurzreferenz) + - [11.4 Relationale Algebra Operatoren](#114-relationale-algebra--vollständiger-operatorensatz) + - [11.5 SQL SELECT-Syntax](#115-sql--vollständige-select-syntax) + - [11.6 ACID & Isolationsstufen](#116-transaktionen--acid-und-isolationsstufen) + - [11.7 Oracle-Speicherstruktur](#117-speicherstrukturen--oracle-hierarchie) + - [11.8 Backup-Entscheidungsmatrix](#118-backup-entscheidungsmatrix) + - [11.9 OLTP vs. OLAP](#119-oltp-vs-olap-vs-data-warehouse) + - [11.10 No-SQL Vergleich](#1110-no-sql-datenbanken--vergleich) + - [11.11 Begriffe-Schnellreferenz](#1111-wichtige-begriffe--schnellreferenz) + +--- + +## 1. Modellierung (b_Modellierung) +### 1.1 Einführung +#### Definitionen + +**Charakteristik der Informationen im Unternehmen:** +- Informationen bilden Entscheidungsgrundlagen +- Informationen können aus unterschiedlichen Quellen stammen +- Qualität hängt von Verfügbarkeit, Korrektheit und Vollständigkeit ab +- Erhebung, Speichern und Verarbeiten erzeugt Aufwände +- Aufgabengebiete sind durch Informationsbeziehungen verknüpft + +**Aspekte des Datenmanagements:** +- Architektur (Datenmodellierung) +- Datentechnik (Hardware, Installation, Reorganisation, Sicherung) +- Administration und Datennutzung + +**Anforderungen an Datenverwaltung:** +- Zentrale Verwaltung der Daten +- Vermeidung/Einschränkung von Redundanzen +- Vermeidung von Inkonsistenzen +- Gemeinsame Nutzung durch verschiedene Anwendungen +- Datenschutz und Datensicherung +- Datenintegrität +- Datenunabhängigkeit von Anwendungen + +**Definitionen:** +- **Daten** = Logisch strukturierte Informationseinheiten +- **Datenbank** = Einrichtung für langfristige sichere Aufbewahrung von Daten + +#### Modellierung + +Ein **Modell** ist ein Abbild der realen Welt, das man mit Absicht erstellt, um bestimmte Probleme zu lösen. + +**Modellbildungsprozess:** +Reales Problem → Modell → Analyse/Simulation → Theoretische Lösung → Interpretation → Überprüfung → Reale Lösung + +**Kriterien eines Modells nach Heinrich Hertz:** +1. **Richtigkeit** — Nicht beweisbar, nur durch Experimente überprüfbar und widerlegbar +2. **Zulässigkeit** — Logisch eindeutig formuliert, ohne Widersprüche +3. **Zweckmäßigkeit** — Keine überflüssigen Anteile; so einfach wie möglich, so kompliziert wie nötig + +**Modellierungsansätze:** Verschiedene Modellierungssprachen führen zu verschiedenen semantischen Datenmodellen. Praktische Bedeutung haben insbesondere **Entity-Relationship-Modellierung (ERM)** und **UML**. Gängige Vorgehensweise: Erst ER-Modell, dann Konvertierung in relationales Modell. + +#### Datenhaltung + +Zwei grundsätzliche Formen: +1. **Herkömmliche Form (Dateien):** Datenverwaltung in die Anwendung integriert → enormer Entwicklungsaufwand, kaum Datenaustausch +2. **Datenbanken:** Datenbank = Datenmanagement + Daten. DBMS übernimmt Speicherung, Aufruf, Änderungen, Sortieren, Sicherungen + +**Vorteile von Datenbanken gegenüber Dateien:** +- Reduktion der Entwicklungskosten +- Flexible Verarbeitung und Darstellung +- Vermeidung von Redundanzen, Inkonsistenzen, Datenverlust +- Zugriffskontrolle +- Mehrbenutzerbetrieb +- Hohe Verfügbarkeit + +**Dateien statt Datenbanken empfohlen bei:** +- Sehr kleinen, nicht-kommerziellen Anwendungen +- Systemnahen Anwendungen +- Verschiedenen Testumgebungen +- Groben konzeptuellen Entwicklungen + +#### Architektur + +**Client/Server-Architektur:** +- **Client** nimmt die Ressource in Anspruch (z. B. Darstellung) +- **Server** stellt die Ressource zur Verfügung (z. B. Bearbeitung) + +**Oracle-Architektur:** +- SQL-Plus, SQL-Developer, Oracle Instant Client → Listener → Dispatcher → DBMS-Instanzen → Datenbestände +- Multi-Tenant-Container und Real Application Cluster (RAC) + +**SQLite-Architektur (keine Client/Server-Architektur):** +- DBMS-Instanz direkt in die Anwendung eingebettet +- Datenbestand als Dateien im Dateisystem + +#### Datenbankbenutzer + +| Rolle | Aufgaben | +|---|---| +| **DBA (Datenbankadministrator)** | DB-Design, Softwareinstallation/-wartung, Speicherplatzverwaltung, Sicherheitsmechanismen, Backup/Recovery, Reorganisation, Systembeobachtung/Tuning | +| **Anwendungsentwickler** | Systemanalyse, SQL, Standard-Abfragen, Anwendungsentwicklung | +| **Endanwender** | Benutzung erstellter Programme, vorgefertigte/Ad-Hoc-Abfragen, QBE-Werkzeuge | + +#### Entwicklung + +- **1960er Jahre:** Jede Anwendung hat eigenes Datenmanagement und eigene Daten +- **1970er Jahre:** Gemeinsames Datenmanagement, aber noch getrennte Datenbestände +- **Heute:** Gemeinsames Datenmanagement und gemeinsame Datenbestände + +Zugriff auf Datenbanken erfolgt programmatisch z. B. über **JDBC** (Java Database Connectivity). + +#### Arten von Datenbanken + +| Art | Status | +|---|---| +| Hierarchische Datenbanken | Heute selten verwendet | +| Netzartige Datenbanken | Heute selten verwendet | +| Dokumentenbasierte Datenbanken | Selten verwendet (z. B. MongoDB) | +| Key-Value-Datenbanken | Begrenzte Bedeutung (z. B. BerkeleyDB) | +| Objektorientierte Datenbanken | Vorhanden | +| **Relationale Datenbanken** | **Heute fast ausschließlich verwendet** | + +**Warum relationale Datenbanken dominieren:** +- Beziehungen und Entitäten werden gleich dargestellt → derselbe Verarbeitungsmechanismus +- Relationale Algebra liefert umfangreiche und fortgeschrittene Operationen +- Alle anderen DB-Typen lassen sich damit emulieren + +### 1.2 Codds 12 Regeln + +Die **12 Regeln von Codd** definieren eine relationale Datenbank: + +1. Vollständige Verwaltung über relationale Fähigkeiten +2. **Darstellung von Informationen:** Alle Informationen als Werte in Tabellen +3. **Zugriff auf Daten:** Über Tabellenname + Primärschlüssel + Spaltenname +4. **Systematische Behandlung von Nullwerten:** Durchgängig gleich als unbekannt/fehlend +5. **Struktur:** Systemkatalog auf derselben logischen Ebene wie die Daten +6. **Abfragesprache:** Mindestens eine Sprache mit vollständigem Befehlssatz (DDL, DML, Integrität, Autorisierung, Transaktionen) +7. **Aktualisieren von Sichten:** Theoretisch aktualisierbare Sichten müssen vom System aktualisierbar sein +8. **Abfragen und Bearbeiten:** Unterstützung für Einfügen, Aktualisieren und Löschen ganzer Tabellen +9. **Physikalische Datenunabhängigkeit:** Logischer Zugriff unabhängig von physikalischen Methoden +10. **Logische Datenunabhängigkeit:** Tabellenstruktur-Änderungen ohne Einfluss auf Anwendungslogik +11. **Unabhängigkeit der Integrität:** Integritätsregeln in der DB-Sprache definierbar, nicht umgehbar +12. **Verteilungsunabhängigkeit:** Logischer Zugriff unverändert bei verteilten Datenbanken + +### 1.3 Mengenlehre (b_Mengenlehre) + +Die Mengenlehre bildet die **mathematische Grundlage** der Theorie relationaler Datenbanken. Sie wurde von **Georg Cantor** entwickelt. + +#### Definition (G. Cantor, 1895) + +> Eine **Menge** ist die Zusammenfassung von bestimmten **wohlunterschiedenen Objekten** unserer Anschauung oder unseres Denkens zu einem Ganzen. + +#### Eigenschaften einer Menge + +1. Die **Natur der Elemente** ist unerheblich +2. Alle Elemente sind **unterschiedlich** (keine Duplikate) +3. **Bezeichnung:** M = { e₁, e₂, ..., eₙ, ... }, eᵢ ∈ M +4. Die **Reihenfolge der Elemente** spielt keine Rolle + +**Beispiele:** Menge aller Computer im Unternehmen · Menge der positiven Zahlen · Menge der Elektronen im Universum + +**Anzahl der Elemente:** +- **endlich** (z. B. Mitarbeiter einer Firma) +- **unendlich:** + - **abzählbar** (z. B. ℕ, ℤ) + - **unabzählbar** (z. B. ℝ) + +#### Quantoren + +| Symbol | Bedeutung | +|---|---| +| **∀** | Für alle Elemente (Allquantor) | +| **∃** | Es existiert mindestens ein Element (Existenzquantor) | + +Quantoren werden verwendet, um Aussagen in der Mengenlehre (und generell in der Mathematik) formal zu schreiben. + +#### Operationen über Mengen + +Folgende allgemeine Operationen sind über Mengen definiert: + +**Kartesisches Produkt (Kreuzprodukt)** +``` +A × B = { (a, b) | ∀ a ∈ A und ∀ b ∈ B } +``` +Beispiel: A = { +, − }, B = { 1, 2, 3 } +→ A × B = { (+,1), (−,1), (+,2), (−,2), (+,3), (−,3) } = { +1, −1, +2, −2, +3, −3 } + +**Kartesisches Produkt mehrerer Mengen:** +``` +M₁ × M₂ × ... × Mₙ = { (m₁, m₂, ..., mₙ) | ∀ mᵢ ∈ Mᵢ, ∀ i ∈ [1,...,n] } +``` + +Die Elemente heißen **n-Tupel**: +- n = 2: **Paar** (Dupel) +- n = 3: **Tripel** +- n = 4: **Quadrupel** +- n = 5: **Quintupel** + +**Vereinigung** +``` +A ∪ B = { e | ∀ e, e ∈ A oder e ∈ B } +``` +Zur Vereinigung gehören alle Elemente aus A und alle aus B (keine Verdoppelung der Elemente). + +**Durchschnitt (Schnittmenge)** +``` +A ∩ B = { e | ∀ e, e ∈ A und e ∈ B } +``` +Zum Durchschnitt gehören die Elemente, die gleichzeitig zu A und zu B gehören. + +**Differenz** +``` +A — B = { e | ∀ e, e ∈ A und e ∉ B } +``` +Zur Differenz gehören die Elemente aus A, die zu B nicht gehören. + +#### Zahlenmengen + +| Symbol | Name | Definition | +|---|---|---| +| **ℕ** | Natürliche Zahlen | = { 0, 1, 2, 3, ... } | +| **ℤ** | Ganze Zahlen | = { ..., −3, −2, −1, 0, 1, 2, 3, ... } | +| **ℚ** | Rationale Zahlen | = { q \| ∃ x,y ∈ ℤ ⟹ q = x/y } | +| **ℐ** | Irrationale Zahlen | = { s \| ∀ x,y ∈ ℤ, y≠0 ⟹ s ≠ x/y } | +| **ℝ** | Reelle Zahlen | = ℚ ∪ ℐ | +| **ℂ** | Komplexe Zahlen | = { z = a+b×i \| ∀ a,b ∈ ℝ, i×i = −1 } | + +**Inklusionen:** ℕ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ + +**Operationen auf ganzen Zahlen:** Addition, Subtraktion, Multiplikation, ganzzahlige Division (liefert Quotient und Rest – zwei unterschiedliche Operationen) + +**Operationen auf reellen Zahlen:** Addition, Subtraktion, Multiplikation, reelle Division (liefert nur Quotient; kein Rest definiert) + +Alle Mengen außer ℂ haben eine **natürliche (lineare) Ordnung**. + +#### Dimensionen + +Gegeben zwei Mengen R₁ und R₂ mit dim(R₁) = k und dim(R₂) = n: + +| Operation | Dimension des Ergebnisses | +|---|---| +| R₁ × R₂ | k · n | +| R₁ ∪ R₂ | ∈ { max{k,n}, ..., k+n } | +| R₁ ∩ R₂ | ∈ { 0, 1, ..., min{k,n} } | +| R₁ — R₂ | k − dim{ R₁ ∩ R₂ } | + +#### Relevanz für Datenbanken + +- Eine **Relation** (Tabelle) ist eine Untermenge des kartesischen Produkts mehrerer Datentypen +- **Keine Duplikate** in Mengen → in relationaler Algebra gibt es keine doppelten Tupel (in SQL daher `DISTINCT` nötig) +- Die Mengenlehre erklärt direkt, warum im Fallbeispiel (Mini-Welt 1) gleiche [RechnPosNr, Menge]-Kombinationen zusammengefasst werden müssen + +### 1.4 ANSI-SPARC-Modell (Drei-Schichten-Architektur) + +Das ANSI-SPARC-Modell gewährleistet Unabhängigkeit der Datenbank von Programmiersprache und Hardware: + +| Ebene | Bezeichnung | Inhalt | +|---|---|---| +| **Externe Ebene** | Anwendungs-Ebene | Benutzeroberflächen, Datensichten, API, Schnittstellen. Jede Sicht zeigt nur einen Teil der Daten | +| **Konzeptionelle Ebene** | Logische Ebene | Beziehungen, Daten. Relationales Datenmodell, ERM-Diagramme, Integritätsbedingungen, Zugriffsrechte | +| **Interne Ebene** | Physische Ebene | Art und Form der Speicherung. Dateien, Partitionen, Tablespaces, Zugriffsmechanismen | + +### 1.5 Phasen des Datenbankentwurfs + +1. **Anforderungsanalyse** → Spezifikation (Pflichtenheft) +2. **Konzeptueller Entwurf** → Konzeptuelles Schema (ERM) +3. **Logischer Entwurf** → Logisches Schema (Tabellen) +4. **Physischer Entwurf** → Physisches Schema (Datenträger) + +### 1.6 Anforderungsanalyse + +Im Laufe der Anforderungsanalyse wird erfasst: +- Welche Abteilungen mit der DB arbeiten +- Welche Geschäftsprozesse unterstützt werden +- Welche Daten involviert werden +- Wie die Daten strukturiert sind +- Qualitative und quantitative Anforderungen + +**Schritte nach A. Kemper:** +1. Identifikation von Organisationseinheiten +2. Identifikation der zu unterstützenden Aufgaben +3. Anforderungs-Sammelplan (zu befragende Personen) +4. Anforderungs-Sammlung +5. Filterung (Verständigkeit und Eindeutigkeit prüfen) +6. Satzklassifikationen (Objekte, Beziehungen, Operationen, Ereignisse) +7. Formalisierung/Systematisierung (ins Pflichtenheft übertragen) + +**Ergebnisse der Anforderungsanalyse:** +- **Informationsanforderungen:** Beschreibung von Objekten/Attributen und Beziehungen/Attributen +- **Datenverarbeitungsanforderungen:** Beschreibung von Prozessen + +**Drei Arten von Beschreibungen:** + +**Objektbeschreibung** (z. B. Uni-Angestellte): + +| Attribut | Typ | Länge | Identifizierend | Beispiel | +|---|---|---|---|---| +| PersonalNr | Char | 10 | ja | 1234561234 | +| Gehalt | Dezimal | 8.2 | nein | 9000.11 | +| Rang | String | 4 | nein | W3 | + +**Beziehungsbeschreibung** (z. B. prüfen): +- Beteiligte Objekte: Professor (Prüfer), Student (Prüfling), Vorlesung (Lehrstoff) +- Attribute: Datum, Uhrzeit, Note + +**Prozessbeschreibung** (z. B. Zeugnisausstellung): +- Häufigkeit, Priorität, benötigte Daten, Datenmenge + +### 1.7 Konzeptueller Entwurf – Entity-Relationship-Modell (ERM) + +Auf Basis der Anforderungsanalyse wird ein konzeptuelles ERM erstellt. Das konkrete DBMS wird noch nicht betrachtet. + +#### Modellierungsstrukturen in Peter-Chen-Notation + +| Element | Grafische Darstellung | Bedeutung | +|---|---|---| +| **Entitätstypen** | Rechteck | Objekte der realen Welt | +| **Beziehungstypen** | Raute | Bindungen zwischen Entitäten | +| **Attribute** | Oval/Kreis | Charakteristiken von Entitäten und Beziehungen | +| **Funktionalitäten** | Beschriftung an Verbindungslinien | Kardinalität der Beziehungen | +| **Schlüssel** | Unterstrichene Attribute | Identifizierende Attribute | +| **Rollen** | Beschriftung bei rekursiven Beziehungen | Rolle einer Entität in der Beziehung | + +#### Entitätstypen + +Gegenstände sind Objekte der realen Welt, die zu **Gegenstandstypen (Entitätstypen)** abstrahiert werden: +- "Zimmermann", "Merkel", "Meier" → **Mensch** +- "VW", "Mercedes", "BMW" → **Auto** + +Man arbeitet ausschließlich mit Entitätstypen (abstrakte Klassen), nicht mit einzelnen Instanzen. + +#### Beziehungstypen + +Beziehungen drücken Bindungen zwischen Entitäten aus. Nicht alle Entitätstypen müssen verbunden sein, aber ein alleinstehender Entitätstyp ohne Beziehung ist verdächtig. + +#### Attribute + +**Attributierte Beziehungen:** Wenn beide Entitätstypen semantisch gleiche Attribute haben, werden diese dem Beziehungstyp zugeordnet (z. B. Betrag bei "Kredit geben" zwischen Kunde und Bank). + +**Entscheidung Entitätstyp vs. Attribut:** +- Wird etwas durch anderes beschrieben → das Beschriebene ist Entitätstyp, das Beschreibende ist Attribut +- Kann etwas durch nichts weiteres beschrieben werden → es ist ein Attribut + +**Attributtypen:** + +| Typ | Beschreibung | Beispiel | +|---|---|---| +| **Einfach** | Ein Wert zu einem Zeitpunkt | Name = "Müller" | +| **Mehrwertig** | Mehrere Werte gleichzeitig | Ampel: rot + gelb | +| **Zusammengesetzt** | Besteht aus Teilattributen | Adresse: PLZ + Ort + Straße | +| **Abgeleitet** | Aus anderen Attributen berechnet | Bruttopreis = Netto × (1 + MwSt) | + +#### Schlüssel und Primärschlüssel + +- **Schlüssel:** Attributmenge, deren Werte eine Entität eindeutig identifizieren +- **Schlüsselkandidaten:** Mehrere mögliche Schlüssel +- **Primärschlüssel (PK):** Der Kandidat mit minimaler Länge, im ERM unterstrichen +- **Minimaler Schlüssel:** Keine Untermenge des PK bildet selbst einen Schlüssel +- **Wichtig:** Wahl eines anderen PK ändert das gesamte Modell + +#### Rekursive Beziehungen + +Beziehungen zwischen Entitäten desselben Entitätstyps. Dabei werden **Rollen** zugeschrieben. + +**Beispiele:** +- Vorlesungen → voraussetzen (Vorgänger/Nachfolger) +- Softwareprodukt → Versionsnummer +- Polizisten → im Zweierteam patrouillieren + +#### Funktionalitäten + +Funktionalität gibt an, wie viele Instanzen in einer Beziehung teilnehmen: + +| Typ | Beschreibung | Beispiel | +|---|---|---| +| **1:1** | Einer Entität aus E1 entspricht höchstens eine aus E2 (und umgekehrt) | Persönliche Daten ↔ Ansprechdaten | +| **1:N** | Einer aus E1 entsprechen mehrere aus E2, aber einer aus E2 höchstens eine aus E1 | Schüler → Fahrausweise | +| **N:M** | Mehrere aus E1 entsprechen mehreren aus E2 | Studenten ↔ Vorlesungen (hören) | + +**Auflösung einer M:N-Beziehung:** Wird in zwei 1:N-Beziehungen aufgebrochen durch Einführung eines neuen Entitätstyps (z. B. Hersteller ↔ Lieferant → Hersteller → Herstlr_Liefrnt ← Lieferant). + +#### (min,max)-Notation + +Genauere Angabe der Kardinalitäten als Standardfunktionalitäten: +- **min = 0:** Entitäten, die an keiner Beziehung teilnehmen +- **max = *:** Beliebig viele Entitäten + +**Beispiel Polyeder:** +- Polyeder (4,*) — Hülle — (1,1) Flächen +- Flächen (3,*) — Grenze — (2,2) Kanten +- Kanten (2,2) — StartEnde — (3,*) Punkte + +#### Mehrstellige Beziehungen + +- **Ternäre Beziehung:** Zwischen 3 Entitätstypen +- **n-äre Beziehung:** Zwischen n Entitätstypen +- Sollten möglichst in binäre Beziehungen umgewandelt werden +- Beispiel: "prüfen" (Student, Vorlesung, Professor) → neuer Entitätstyp "Prüfungen" mit binären Beziehungen + +#### Spezielle Konzepte + +**Komposition / Schwache Entitäten (has-a):** +Existenz eines Entitätstyps ist von der Existenz eines anderen abhängig. +- Beispiel: Konto existiert nur in Zusammenhang mit einer Bank + +**Generalisierung (is-a):** +Abstraktion auf Ebene der Entitätstypen. Gemeinsame Eigenschaften werden in einen **Obertyp** ausgelagert, spezifische bleiben bei den **Untertypen**. +- Beispiel: Lebensmittel (gültig bis) und Eisenwaren (Garantiefrist) → Obertyp **Produkt** (Bezeichnung, Hersteller) + +**Aggregation (has-a):** +Verschiedene Entitätstypen bilden in ihrer Gemeinsamkeit einen neuen Entitätstyp. +- Beispiel: Fahrrad besteht aus Rahmen (Rohre, Lenker) und Rad (Speiche, Felge) + +### 1.8 Logischer Entwurf – Konvertierung ERM → Tabellen + +#### Definitionen + +- **Datentyp** = Werte + Operationen (z. B. integer: +, -, *, /, mod) +- **Relation** = Untermenge des kartesischen Produktes mehrerer Datentypen = **Tabelle** +- **Tupel** = Zeile (Record, Datensatz) +- **Feld** = Spalte (Attribut, Eigenschaft) +- **Schema** = Namen aller Felder + Datentypen + Länge + Reihenfolge + +**Vorteile des relationalen Modells:** +- Entitäten und Beziehungen werden gleich als Tabellen dargestellt +- Dieselben algebraischen Operationen für beide +- Mathematisch begründet durch E.F. Codd + +**Notation:** +``` +RelationsName = { [ Feld1:Datentyp1, Feld2:Datentyp2, ... ] } +``` +Beispiel: `Auto = { [ KFZ:string, Modell:string, Gewicht:real, Baujahr:integer ] }` +Primärschlüssel wird unterstrichen. + +#### Konvertierungsregeln + +**Regeln für Entitätstypen:** +1. Neue Tabelle (Entitäts-Tabelle) bilden +2. Alle Attribute des Entitätstyps inkludieren + +**Regeln für Beziehungstypen:** +1. Neue Tabelle (Beziehungs-Tabelle) bilden +2. Primärschlüssel aller verbundenen Entitätstypen inkludieren → bilden i.d.R. den PK der Beziehungstabelle +3. Attribute des Beziehungstyps inkludieren + +#### Vereinfachung der Darstellungen + +**1:1-Beziehungen** – Zwei Optionen: +- **Option A:** Beide Entitäts-Tabellen zu einer Tabelle zusammenführen + Beziehungsattribute. Vorsicht: Datensätze können zu groß werden +- **Option B:** Beziehungs-Tabelle weglassen, PK einer Entitäts-Tabelle als FK in die andere aufnehmen + +**1:N-Beziehungen:** +- Beziehungs-Tabelle weglassen +- In die Tabelle auf der **N-Seite** den PK der Tabelle auf der **1-Seite** als **Fremdschlüssel (FK)** einfügen +- Beziehungsattribute ebenfalls in die N-Seiten-Tabelle + +**Schwache Entitäten:** +- Eigene Tabelle für schwache Entität +- PK der referenzierten (starken) Entität wird **Teil des PK** der schwachen Entität (Unterschied zu normalen 1:N-Beziehungen, wo der FK nicht Teil des PK wird) + +#### Beispiel: Uni-Schema als Tabellen + +| Tabelle | Felder | +|---|---| +| Professoren | PersNr, Name, Rang, Raum | +| Studenten | MatrNr, Name, Semester | +| Vorlesungen | VorlNr, Titel, SWS, gelesenVon (FK→Professoren) | +| Assistenten | PersNr, Name, Fachgebiet, Boss (FK→Professoren) | +| hören | MatrNr (FK), VorlNr (FK) | +| voraussetzen | Vorgänger (FK), Nachfolger (FK) | +| prüfen | MatrNr (FK), VorlNr (FK), PersNr (FK), Note | + +#### Wichtige Bemerkung + +**Keine Felder/PK/FK willkürlich in Tabellen hinzufügen!** Nur laut Vereinfachungsregeln. + +**Ausnahmen:** +- ERM-bezogene Gründe (z. B. PID, MonsterID) +- Auditing/Richtlinien (z. B. "Alle Zeilen müssen fortlaufend nummeriert werden") +- Administrative Gründe (z. B. Fusion großer Datenmengen) +- Anwendungsbezogene Gründe (z. B. OO-DB pflegen PK selbst) + +**Kontroverse um künstliche IDs:** +Einige Autoren empfehlen ausdrücklich künstliche IDs, weil: +- PK soll keine semantischen Informationen enthalten +- PK darf sich nicht mit der Zeit ändern +- PK soll einfach aufgebaut sein (nicht aus mehreren Feldern) + +--- + +## 2. Modellierung – Fallbeispiel (b_ModellierungFB) + +### Überblick + +Modellierung einer Rechnung: Beispiel-Rechnungen betrachten → Mini-Welten beschreiben → Konzeptuellen Entwurf erstellen → Logischen Entwurf erstellen → Fazit + +### Identifizierte Entitätstypen + +**Artikel:** +- Artikelnummer (kann fehlen), Beschreibung (immer vorhanden), Einzelpreis (Netto), MwSt-Satz und MwSt-Betrag + +**Rechnungsposition:** +- Reihenfolgenummer (kann fehlen, aber wichtig), Menge / Anzahl der Artikel + +**Rechnung (übergeordnet):** +- Rechnungsnummer, Datum, Gesamtsumme (abgeleitetes Attribut), MwSt-Betrag der ganzen Rechnung (abgeleitetes Attribut) + +**Formale Notation:** +``` +Rechnung = { [ RgNr, Datum, Gesamtpreis, GesamtMwSt ] } +Artikel = { [ ArtNr, ArtBezeichnung, EP, MwStSatz ] } +``` + +### Mini-Welt 1 + +Alle Rechnungen werden **durchgehend** betrachtet. Gleiche Kombinationen [RechnPosNr, Menge] werden **zusammengefasst** (laut Mengenlehre nach G. Cantor: keine doppelten Elemente). + +``` +Rechnungsposition = { [ RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` + +**Konzeptueller Entwurf:** + +| Beziehung | Funktionalität | +|---|---| +| Rechnung — besteht aus — Rechnungsposition | **M : N** | +| Rechnungsposition — beinhaltet — Artikel | **N : 1** | + +**Logischer Entwurf:** +``` +Rechnung = { [ RgNr, Datum, Gesamtpreis, GesamtMwSt ] } +Artikel = { [ ArtNr, EP, MwStSatz, ArtBezeichnung ] } +Rechnungsposition = { [ RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +besteht_aus = { [ RgNr, RechnPosNr, Menge ] } +beinhaltet = { [ ArtNr, RechnPosNr, Menge ] } +``` + +**Vereinfachung** (1:N-Beziehung "beinhaltet" auflösen): +``` +Rechnungsposition = { [ ArtNr, RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` + +### Mini-Welt 2 + +**Alle** Rechnungspositionen aus allen Rechnungen werden individuell erfasst, auch wenn [RechnPosNr, Menge] gleich sind. Da Duplikate nach Cantor nicht zulässig sind, wird ein neues Attribut **LaufendeNummer (LfndNr)** eingeführt. + +**Konsequenz:** Mehr Entitäten im Entitätstyp, mehr Redundanz, aber die **Zuordnung jeder Position zu einer Rechnung bleibt erhalten**. + +``` +Rechnungsposition = { [ LfndNr, RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` + +**Konzeptueller Entwurf:** + +| Beziehung | Funktionalität | +|---|---| +| Rechnung — besteht aus — Rechnungsposition | **1 : N** | +| Rechnungsposition — beinhaltet — Artikel | **N : 1** | + +**Logischer Entwurf (nach Vereinfachung beider 1:N-Beziehungen):** +``` +Rechnungsposition = { [ ArtNr, RgNr, LfndNr, RechnPosNr, Menge, + Zwischensumme, ZwischenMwSt ] } +``` + +**Hinweis:** LfndNr wird nicht für Verknüpfungen (Join-Prädikat) verwendet, hat wenig Semantik, muss aber gepflegt werden. + +### Vergleich der Mini-Welten + +| Aspekt | Mini-Welt 1 | Mini-Welt 2 | +|---|---|---| +| Beziehung Rechnung↔Position | M:N | 1:N | +| Duplikate | Keine (zusammengefasst) | Individuell (via LfndNr) | +| Zuordnung Position→Rechnung | Geht verloren | Bleibt erhalten | +| Redundanz | Weniger | Mehr | +| Tabellen nach Vereinfachung | 3 + besteht_aus | 3 (alles in einer) | + +**Empfehlung:** Beide Modelle implementieren und Antwortzeiten bei größerem Datenumfang vergleichen. + +--- + +## 3. Relationale Algebra (c_Algebra) + +### Formale Sprachen für Relationen + +| Sprache | Beschreibung | +|---|---| +| **Relationale Algebra** | Definiert Operationen über Relationen; Ergebnis ist wieder eine Relation (Geschlossenheit). Definiert **was** man will, nicht **wie** | +| **Relationenkalkül** | Deklarative Beschreibung gewünschter Ergebnisse | + +Die relationale Algebra bildet die **Basis für SQL**. + +**Beispiele Relationenkalkül:** +``` +{ k | k ∈ KUNDEN ∧ k.STATUS = "Aktiv" } +{ [a.NAME, f.TITEL] | a∈ACTOR ∧ f∈FILM ∧ a.ID=f.A_ID } +``` + +### Grundoperatoren (vollständiger Satz) + +| Operator | Notation | Beschreibung | +|---|---|---| +| **Selektion** | σ_Prädikat(Relation) | Zeilen filtern nach Bedingung | +| **Projektion** | π_Attribute(Relation) | Spalten auswählen | +| **Kartesisches Produkt** | R1 × R2 | Alle Kombinationen von Zeilen | +| **Umbenennung** | ρ_Alias(Relation) | Relation oder Attribute umbenennen | +| **Vereinigung** | R1 ∪ R2 | Tupel aus beiden Relationen zusammenfassen | +| **Differenz** | R1 — R2 | Tupel aus R1, die nicht in R2 vorkommen | + +**Wichtig:** Dieser Satz ist **vollständig** — alle anderen Operatoren lassen sich durch diese ausdrücken. + +### Operatoren im Detail + +#### Selektion σ + +Filtert Zeilen einer Relation anhand eines Prädikats. Das Prädikat wird für **jede Zeile** geprüft. + +``` +σ_{Semester > 10}(Studenten) +→ Ergebnis: MatrNr 24002 (Xenokrates, 18), MatrNr 25403 (Jonas, 12) + +σ_{Name = 'Sokrates'}(Professoren) +→ Ergebnis: PersNr 2125, Sokrates, C4, Raum 226 +``` + +#### Projektion π + +Wählt bestimmte Spalten aus einer Relation aus. + +``` +π_{MatrNr, Name}(Studenten) +→ Ergebnis: Nur MatrNr und Name aller Studenten + +π_{Rang}(Professoren) +→ Ergebnis: C3, C4 (Duplikate werden in relationaler Algebra eliminiert!) +``` + +**Wichtig:** In relationaler Algebra gibt es **keine Duplikate**, in SQL schon (deshalb `DISTINCT`). + +#### Zusammenhang Algebra ↔ SQL + +| Relationale Algebra | SQL | +|---|---| +| **π** (Projektion) | **SELECT** | +| **σ** (Selektion) | **WHERE** | + +| Anfrage | Algebra | SQL | +|---|---|---| +| Wie heißen die Professoren? | π_{Name}(Professoren) | `SELECT Name FROM Professoren;` | +| Name des Studenten mit MatrNr 25403? | π_{Name}(σ_{MatrNr=25403}(Studenten)) | `SELECT Name FROM Studenten WHERE MatrNr = 25403` | +| Studenten mit >6 Semestern? | π_{Name,MatrNr}(σ_{Semester>6}(Studenten)) | `SELECT Name, MatrNr FROM Studenten WHERE Semester > 6` | + +#### Reihenfolge der Operatoren + +**Grundsätzlich dürfen relationale Operatoren in zusammengesetzten Ausdrücken nicht vertauscht werden!** + +``` +π_{Name,MatrNr}(σ_{Semester>6}(Studenten)) ← korrekt +σ_{Semester>6}(π_{Name,MatrNr}(Studenten)) ← FALSCH (Semester ist nach Projektion weg!) +``` + +#### Umbenennung ρ + +Notwendig wenn: +- Relationen gleich benannte Attribute besitzen, die beide in der Abfrage benötigt werden +- Eine Relation **mehrfach** in einer Abfrage vorkommt (rekursive Beziehungen) + +**Umbenennung ist immer temporär (operatorbezogen).** + +``` +ρ_{Relation-Alias}(Relation) ← Relation umbenennen +ρ_{Attribut-Alias ← Attribut}(Relation) ← Attribut umbenennen +``` + +#### Vereinigung ∪ + +**Voraussetzungen (Vereinigungskompatibilität):** +- Gleiche Anzahl von Attributen +- Attribute gleich benannt +- Gleichnamige Attribute haben denselben Datentyp + +Zum Erfüllen der Kriterien können Projektion und Umbenennung verwendet werden. + +**Ergebnis:** Selbes Schema wie die Operanden, Tupel zusammengefasst, **Duplikate eliminiert**. + +```sql +SELECT Name FROM Studenten UNION +SELECT Name FROM Assistenten UNION +SELECT Name FROM Professoren; +``` + +**Beispiel:** +``` +R = { [1, abc, 1.5], [2, def, 2.3] } +S = { [7, xyz, 4.4], [8, uvw, 6.7] } +R ∪ S = { [1, abc, 1.5], [2, def, 2.3], [7, xyz, 4.4], [8, uvw, 6.7] } +``` + +#### Differenz — + +**Gleiche Voraussetzungen** wie bei Vereinigung. + +**Ergebnis:** Selbes Schema, enthält Tupel aus R1, die in R2 **nicht** vorkommen. + +``` +R = { [1, abc, 1.5], [2, def, 2.3] } +S = { [2, def, 2.3], [7, xyz, 4.4] } +R — S = { [1, abc, 1.5] } +``` + +**SQL-Umsetzung:** +```sql +-- Variante 1: NOT IN +SELECT Name FROM Studenten WHERE MatrNr NOT IN + (SELECT DISTINCT MatrNr FROM hoeren); + +-- Variante 2: MINUS +SELECT MatrNr FROM Studenten +MINUS +SELECT DISTINCT MatrNr FROM hoeren; +``` + +#### Schnittmenge ∩ + +Die Schnittmenge ist **kein Grundoperator**, kann aber abgeleitet werden: + +``` +A ∩ B = A — (A — B) = B — (B — A) +``` + +**SQL-Umsetzung:** +```sql +-- Variante 1: INTERSECT +SELECT gelesenVon AS PersNr FROM Vorlesungen +INTERSECT +SELECT PersNr FROM Professoren WHERE Rang = 'C4'; + +-- Variante 2: IN (falls INTERSECT nicht verfügbar) +SELECT gelesenVon AS PersNr FROM Vorlesungen +WHERE PersNr IN + (SELECT PersNr FROM Professoren WHERE Rang = 'C4'); +``` + +#### Kartesisches Produkt × und Join + +Komplexe Abfragen nutzen das kartesische Produkt mit anschließender Selektion (**Equi-Join**): + +**Anfrage:** "Welche Studenten hören welche Vorlesungen?" + +``` +π_{s.Name, v.Titel}(σ_{h.VorlNr=v.VorlNr ∧ s.MatrNr=h.MatrNr}( + Studenten s × Vorlesungen v × hoeren h)) +``` + +### Zusammenfassung Operatoren + +| Operator | Symbol | SQL-Entsprechung | Grundoperator? | +|---|---|---|---| +| Selektion | σ | WHERE | Ja | +| Projektion | π | SELECT | Ja | +| Kartesisches Produkt | × | FROM (Cross Join) | Ja | +| Umbenennung | ρ | AS | Ja | +| Vereinigung | ∪ | UNION | Ja | +| Differenz | — | MINUS / NOT IN | Ja | +| Schnittmenge | ∩ | INTERSECT / IN | Nein (ableitbar) | +| Join | ⋈ | JOIN ... ON | Nein (σ + ×) | + +--- + +## 4. SQL (d_SQL) + +### 4.1 SQL-Kategorien + +| Kategorie | Abkürzung | Befehle | +|---|---|---| +| **Data Definition Language** | DDL | ALTER, COMMENT, CREATE, DROP, RENAME, TRUNCATE | +| **Data Manipulation Language** | DML | CALL, DELETE, EXPLAIN, INSERT, LOCK, MERGE, SELECT, UPDATE | +| **Data Control Language** | DCL | GRANT, REVOKE | +| **Transaction Control Language** | TCL | COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION | + +### 4.2 Datentypen + +**Datentyp = Werte + Operationen** + +#### Oracle-Datentypen + +| Datentyp | Beschreibung | +|---|---| +| **VARCHAR(n) / VARCHAR2(n)** | Zeichenkette variabler Länge | +| **CHAR(n)** | Zeichenkette fester Länge | +| **NUMBER(p, s)** | Dezimale Zahl, p=Stellen (1–38), s=Nachkomma (-84–127), Werte bis ±10^125 | +| **DECIMAL(p, s)** | Dezimale Zahl, Werte bis ±10^308 | +| **INTEGER** | Ganze Zahl, -2.147.483.648 bis 2.147.483.647 | +| **DATE** | Datum/Uhrzeit (sekundengenau) | +| **RAW(n)** | Binärdaten, 1–2000 Bytes | +| **LONG RAW** | Binärdaten bis 2 GiB | +| **CLOB** | Zeichenketten bis 4 GiB | +| **BLOB** | Binärdaten bis 4 GiB | +| **CFILE / BFILE** | Zeiger auf externe Dateien (Text/Binär) | + +### 4.3 Einfache Befehle + +#### DDL – Tabellen anlegen und löschen + +```sql +CREATE TABLE Professoren ( + PersNr INTEGER NOT NULL, + Name VARCHAR(30) NOT NULL, + Rang CHARACTER(2), + PRIMARY KEY(PersNr) +); + +DROP TABLE Professoren; +``` + +#### DML – Einfügen, Löschen, Ändern + +```sql +-- Einzelnes Tupel einfügen +INSERT INTO Professoren (PersNr, Name, Rang) +VALUES (30314, 'Cantor', 'W2'); + +-- Mehrere Tupel gleichzeitig +INSERT INTO Professoren (PersNr, Name, Rang) VALUES +(30314, 'Cantor', 'W2'), +(30315, 'Leibniz', 'W1'), +(30316, 'Plank', 'W1'); + +-- Einfügen mit verschachtelter Abfrage +INSERT INTO hoeren +SELECT MatrNr, VorlNr +FROM Studenten, Vorlesungen +WHERE Titel = 'Datenbanken'; + +-- Teilweises Einfügen (Rang wird NULL) +INSERT INTO Professoren (PersNr, Name) +VALUES (30317, 'Feuerbach'); + +-- Löschen +DELETE FROM Professoren; +DELETE FROM Professoren WHERE Rang = 'W3'; + +-- Ändern +UPDATE Studenten SET Semester = Semester + 1; +``` + +#### Inline-View + +Eine SELECT-Anweisung mit einer weiteren SELECT-Anweisung in der FROM-Klausel: + +```sql +SELECT p.Name, p.Raum +FROM Professoren p, + (SELECT DISTINCT Boss FROM Assistenten) a +WHERE p.PersNr = a.Boss; +``` + +#### Allgemeine SELECT-Syntax + +```sql +SELECT column1, column2 +FROM table1, table2 +WHERE condition +GROUP BY column1, column2 +HAVING condition +ORDER BY column1, column2; +``` + +### 4.4 Erweiterungen + +#### Sortieren +```sql +SELECT PersNr, Name, Rang FROM Professoren +ORDER BY Rang DESC, Name ASC; +``` + +#### Duplikate eliminieren +```sql +SELECT DISTINCT Rang FROM Professoren; +``` + +#### Platzhalter (nur mit LIKE) +- `_` — genau ein Zeichen +- `%` — beliebig viele Zeichen (auch keines) + +```sql +SELECT * FROM Professoren WHERE Rang LIKE 'W_'; +SELECT * FROM Professoren WHERE Name LIKE 'T%eophrastos'; +``` + +#### IN / NOT IN +```sql +SELECT Name FROM Studenten WHERE Semester IN (1, 2, 3); + +SELECT Name FROM Professoren +WHERE PersNr NOT IN (SELECT gelesenVon FROM Vorlesungen); +``` + +#### ALL / ANY +```sql +-- ALL: Alle Bedingungen müssen erfüllt sein (AND) +SELECT Name FROM Studenten WHERE Semester >= ALL (7, 8, 9); + +-- ANY: Mindestens eine Bedingung (OR) +SELECT Name FROM Studenten WHERE Semester >= ANY (7, 8, 9); +``` + +#### Aggregatfunktionen + +Aggregatfunktionen berechnen einen **einzelnen Wert** aus einer Menge von Zeilen: + +| Funktion | Beschreibung | Beispiel | +|---|---|---| +| **COUNT(\*)** | Anzahl aller Zeilen | Anzahl aller Studenten | +| **COUNT(Spalte)** | Anzahl nicht-NULL-Werte | Anzahl Studenten mit gesetztem Semester | +| **SUM(Spalte)** | Summe der Werte | Summe aller Gehälter | +| **AVG(Spalte)** | Durchschnitt | Durchschnittsnote | +| **MIN(Spalte)** | Kleinster Wert | Niedrigstes Semester | +| **MAX(Spalte)** | Größter Wert | Höchstes Semester | + +```sql +-- Anzahl aller Studenten +SELECT COUNT(*) FROM Studenten; + +-- Durchschnittsnote +SELECT AVG(Note) FROM pruefen; + +-- Anzahl verschiedener Ränge +SELECT COUNT(DISTINCT Rang) FROM Professoren; +``` + +#### GROUP BY + +`GROUP BY` gruppiert Zeilen nach gemeinsamen Attributwerten, sodass Aggregatfunktionen **pro Gruppe** berechnet werden: + +```sql +-- Anzahl Vorlesungen pro Professor +SELECT gelesenVon, COUNT(*) AS Anzahl +FROM Vorlesungen +GROUP BY gelesenVon; + +-- Durchschnittsnote pro Vorlesung +SELECT VorlNr, AVG(Note) AS Schnitt +FROM pruefen +GROUP BY VorlNr; +``` + +**Wichtig:** In der SELECT-Klausel dürfen bei GROUP BY nur: +- Spalten aus GROUP BY und/oder +- Aggregatfunktionen stehen + +#### HAVING + +`HAVING` filtert **Gruppen** (analog zu WHERE für Zeilen). Wird immer **nach** GROUP BY angewendet: + +```sql +-- Nur Professoren, die mehr als 2 Vorlesungen halten +SELECT gelesenVon, COUNT(*) AS Anzahl +FROM Vorlesungen +GROUP BY gelesenVon +HAVING COUNT(*) > 2; +``` + +**Reihenfolge der Klauseln:** +```sql +SELECT ... -- 5. Projektion +FROM ... -- 1. Tabellen bestimmen +WHERE ... -- 2. Zeilen filtern +GROUP BY ... -- 3. Gruppen bilden +HAVING ... -- 4. Gruppen filtern +ORDER BY ... -- 6. Sortieren +``` + +#### NULL-Werte + +- `NULL` bedeutet **unbekannt / nicht vorhanden** +- Vergleiche mit NULL sind immer `NULL` (nicht TRUE oder FALSE) +- Prüfung auf NULL: `IS NULL` / `IS NOT NULL` + +```sql +-- Professoren ohne Raum +SELECT Name FROM Professoren WHERE Raum IS NULL; + +-- Professoren mit Raum +SELECT Name FROM Professoren WHERE Raum IS NOT NULL; +``` + +- Aggregatfunktionen **ignorieren** NULL-Werte (außer COUNT(\*)) + +### 4.5 Anfragen über mehrere Relationen + +**Vorgehensweise:** +1. Kreuzprodukt aus Tabellen bilden +2. Relevante Zeilen und Felder ausschneiden + +**Wichtigste Voraussetzung:** Information über Verbindung zwischen Tabellen (Join-Prädikat). + +```sql +SELECT p.Name Professor, a.Name Assistent +FROM Professoren p, Assistenten a +WHERE p.PersNr = a.Boss; -- join-Prädikat (access-Prädikat) +``` + +**Aliasse** sind praktikabel und notwendig, wenn Felder mit gleichen Namen aus verschiedenen Tabellen involviert sind. + +### 4.6 JOINs + +#### Motivation + +Ohne JOIN stehen Join- und Filter-Prädikate zusammen in WHERE. Der JOIN-Operator **trennt** diese: +- **JOIN ... ON**: Join-Prädikat +- **WHERE**: Filter-Prädikat + +→ Erleichtert dem Optimizer die Arbeit. + +#### Innere JOINs + +Tupel **ohne Partner gehen verloren**. + +**Natürlicher Verbund (NATURAL JOIN):** +- Voraussetzung: Gleich benannte Attribute mit gleichem Datentyp +- Verknüpft automatisch über gleichnamige Spalten +- Join-Attribute erscheinen nur einmal im Ergebnis + +```sql +SELECT MatrNr, Name, Titel +FROM Studenten NATURAL JOIN hoeren NATURAL JOIN Vorlesungen; +``` + +**Allgemeiner Verbund (Theta-JOIN / INNER JOIN):** +- Beliebige Attribute und Bedingungen +- Keine Attribute werden eliminiert + +```sql +SELECT p.Name Professor, a.Name Assistent +FROM Professoren p JOIN Assistenten a ON p.PersNr = a.Boss; +``` + +#### Äußere JOINs + +Tupel **ohne Partner werden mit NULL ergänzt** und bleiben im Ergebnis. + +| Typ | Beschreibung | SQL | +|---|---|---| +| **LEFT OUTER JOIN** | Alle Tupel der **linken** Relation bleiben, rechts ggf. NULL | `L LEFT OUTER JOIN R ON ...` | +| **RIGHT OUTER JOIN** | Alle Tupel der **rechten** Relation bleiben, links ggf. NULL | `L RIGHT OUTER JOIN R ON ...` | +| **FULL OUTER JOIN** | Alle Tupel **beider** Relationen bleiben, ggf. NULL | `L FULL OUTER JOIN R ON ...` | + +**Beispiel LEFT OUTER JOIN:** + +| L.A | L.B | L.C | R.D | R.E | +|---|---|---|---|---| +| a1 | b1 | c1 | d1 | e1 | +| a2 | b2 | c2 | **NULL** | **NULL** | + +#### Semi-JOINs + +Liefern Tupel **nur aus einer** der beiden Relationen. + +| Operator | Symbol | Beschreibung | Formel | +|---|---|---|---| +| Semi-JOIN L mit R | L ⋉ R | Tupel aus L, die Partner in R haben | π_L(L ⋈ R) | +| Semi-JOIN R mit L | L ⋊ R | Tupel aus R, die Partner in L haben | π_R(L ⋈ R) | +| Anti-Semi-JOIN L | L ⊲ R | Tupel aus L **ohne** Partner in R | L — (L ⋉ R) | +| Anti-Semi-JOIN R | L ⊳ R | Tupel aus R **ohne** Partner in L | R — (L ⋊ R) | + +```sql +-- Semi-JOIN +SELECT L.* FROM L INNER JOIN R ON L.x = R.x; +SELECT L.* FROM L INNER JOIN R USING (x); +``` + +#### SQL-Schlüsselwörter + +| SQL-Schlüsselwort | Entsprechung | +|---|---| +| CROSS JOIN | Kartesisches Produkt | +| NATURAL JOIN | Natürlicher Verbund | +| INNER JOIN | Allgemeiner Verbund (Theta-JOIN) | +| LEFT OUTER JOIN | Linker äußerer Verbund | +| RIGHT OUTER JOIN | Rechter äußerer Verbund | +| FULL OUTER JOIN | Vollständiger äußerer Verbund | + +### 4.7 Anfragebearbeitung + +#### Ablauf einer SQL-Anweisung + +1. **Parser** → Syntax prüfen +2. **Optimizer** → Optimalen Zugriffsplan erstellen +3. **Row Source Generator** → Ausführungsplan auf physische Ressourcen +4. **Execution Engine** → Ergebnisse erzeugen + +#### Optimizer-Algorithmen + +| Typ | Beschreibung | +|---|---| +| **RBO (Rule-Based)** | Intern festgelegte Regeln; veraltet | +| **CBO (Cost-Based)** | Interne Statistiken über Tabellen/Indizes; empfohlen | + +**Wichtig:** Statistiken müssen regelmäßig aktualisiert werden (Befehl `ANALYZE`). Optimizer-Hints möglich: `/*+CHOOSE */`, `/*+ORDERED */` + +#### Suchverfahren + +| Methode | Voraussetzung | Geschwindigkeit | +|---|---|---| +| **Full Table Scan** | Keine geeigneten Indizes | Langsamste | +| **Index-Scan** | Geeigneter Index vorhanden | Schnellste (Rückgabe: RowID) | +| **Hash-Scan** | Keine Indizes; Hash-Werte werden generiert | Mittel | + +#### Join-Verfahren + +| Verfahren | Beschreibung | +|---|---| +| **Verschachtelte Schleifen** (Nested Loops) | Äußere Schleife + innere Schleife für jede Zeile | +| **Sort-Merge-Join** | Beide Tabellen sortieren, dann zusammenführen | +| **Hash-Join** | Hash-Tabelle für eine Tabelle, Suche mit Werten der anderen | +| **Kartesisches Produkt** | Bei fehlenden Verbindungsbedingungen | +| **Index-Join** | Indizes statt Tabellen verknüpfen (nur bei einspaltigen Indizes) | + +### 4.8 Indizes + +#### Überblick + +| Index-Typ | Geeignet für | Beispiel | +|---|---|---| +| **Konventionell (Binärbaum)** | Spalten mit vielen unterschiedlichen Werten | PersID, Matrikelnummer | +| **Bitmap** | Spalten mit vielen gleichen Werten (geringe Kardinalität) | Geschlecht, Kategorie | + +**Allgemeiner Aufbau:** `{ [ Suchfeld, RowID ] }` + +#### Lineare Listen + +**Einfach verkettete Liste:** Jedes Element hat Daten + Zeiger auf nächstes Element. +**Doppelt verkettete Liste:** Zusätzlicher Rückwärts-Zeiger. + +**Operationen:** +- Anhängen am Ende (keine Sortierung): O(1) +- Sortiertes Einfügen: O(n) +- Löschen: Zeiger des Vorgängers auf Nachfolger setzen, Speicher freigeben + +#### Binärbäume + +**Terminologie:** + +| Begriff | Bedeutung | +|---|---| +| **Wurzel (Root)** | Einziger Knoten ohne Vorgänger | +| **Blatt** | Knoten ohne Nachfolger | +| **Innerer Knoten** | Weder Wurzel noch Blatt | +| **Kante** | Gerichtete Verbindung (Vorgänger → Nachfolger) | +| **Ebene** | Knoten mit gleicher Pfadlänge zur Wurzel | +| **Tiefe** | Gesamtzahl der Ebenen | +| **Grad** | Maximale Anzahl direkter Nachfolger | + +**Suchaufwand:** Logarithmisch O(log n) — aber kann zu O(n) degradieren wenn Baum entartet. + +**AVL-Baum:** Höhe beider Teilbäume an jedem Knoten unterscheidet sich höchstens um 1. + +**Balancierter Baum:** Höchstens letzte Ebene nicht vollständig besetzt. Jeder balancierte Baum ist ein AVL-Baum, aber nicht umgekehrt. + +**Durchlauf-Reihenfolgen:** + +| Reihenfolge | Kürzel | Verwendung | +|---|---|---| +| **Preorder** | WLR | Baum linear auf Datenträger speichern | +| **Inorder** | LWR | Sortierte Liste erstellen → balancierten Baum erzeugen | +| **Postorder** | LRW | Geräte programmieren (erst Parameter, dann Operation) | + +**Balancierung:** +- **Offline:** Kopie → Inorder-Liste → Binär einfügen → Ausgeglichener Baum. Einfach, aber Zugriffe gesperrt. +- **Online:** Zur Laufzeit rekursiv ausgleichen. Kann kurzfristig zu Fehlern führen. + +#### Hashing + +**Funktionsprinzip:** +1. Für jeden Datensatz wird ein Schlüssel gebildet +2. Hash-Funktion ordnet dem Schlüssel einen kurzen Hash-Wert zu +3. Hash-Wert dient als Index in der Hash-Tabelle +4. Hash-Tabelle enthält Verweise auf Datensätze + +**Kollision:** Zwei unterschiedliche Schlüssel erzeugen denselben Hash-Wert. + +**Kollisionsbehandlung:** +- **Hashing mit Verkettung:** Verkettete Listen an Hash-Tabellen-Einträgen +- **Lineares Hashing:** Dynamische Tabellenerweiterung bei hohem Belegungsfaktor +- **Sondierung:** Linear/quadratisch/zufällig in der Tabelle selbst suchen + +**Anforderungen an Hash-Funktionen:** +- Effizient berechenbar, geringer Speicherbedarf +- Wenig Kollisionen (Gleichverteilung der Hash-Werte) +- Einwegfunktion (Hash → Schlüssel nicht berechenbar) +- Surjektivität (kein Hash-Wert unmöglich) +- **Lawineneffekt:** 1 Bit Unterschied → mindestens halbe Bits der Hash-Werte unterschiedlich + +**Hash-Funktions-Beispiele:** +1. **Modulo:** HW = Key % Basis (Primzahlen empfohlen) +2. **Abschneiden:** Key² berechnen, dann von links/rechts kürzen +3. **Zerlegung & Addition:** Key in gleich große Teile zerlegen und addieren + +**Binärbäume vs. Hashing:** +- Bäume: Garantie im Worst Case, Sortierung möglich, dynamische Größe +- Hashing: Schneller im Durchschnitt O(1) vs. O(log n) + +#### Bitmap-Indizes + +**Geeignet für:** +- Geringe Kardinalität (0,1%–1% unterschiedliche Werte) +- Wenige Änderungen (Data Warehouse / OLAP) + +**Aufbau:** Für jeden einzigartigen Wert eine Bit-Spalte. Pro Zeile steht 1 (Treffer) oder 0 (kein Treffer). + +**Vorteile:** +- Stark komprimiert → schnell lesbar +- Mehrere Indizes kombinierbar +- Logische Operationen (AND, OR) sehr schnell im Prozessor + +**Nachteile:** +- Immenser Wartungsaufwand bei Änderungen +- Bandbreite der Prozessor-Kanäle wichtig +- Können Deadlocks verursachen + +--- + +## 5. Normalformen (e_NFs) + +### 5.1 Einführung + +**Normalisierung** = Aufteilung von Attributen in mehrere Relationen (Tabellen) mithilfe der Normalisierungsregeln, sodass eine Struktur entsteht, die **keine vermeidbaren Redundanzen** mehr enthält. + +**Ziele:** + +| Ziel | Beschreibung | +|---|---| +| **Redundanzbeseitigung** | Nur notwendige Redundanz bleibt erhalten | +| **Anomalienvermeidung** | Funktionelle und transitive Abhängigkeiten werden aufgelöst | +| **Klare Struktur** | Erstellung eines klar strukturierten Datenbankmodells | + +**Praktische Bedeutung:** +- Praktisch wichtig sind nur die **ersten drei Normalformen** (1NF, 2NF, 3NF) +- Manchmal ist es sinnvoll, auf Normalformen aus **Performancegründen** zu verzichten +- Jede nächste Normalform **basiert auf der vorigen** + +### 5.2 Funktionale Abhängigkeit + +**Definition:** Y ist von X **funktional abhängig** (X → Y), wenn für alle Tupel t1 und t2 gilt: +``` +Wenn t1 ∩ X = t2 ∩ X, dann gilt auch t1 ∩ Y = t2 ∩ Y +``` + +- Y hängt von X ab, wenn X die Werte von Y **eindeutig bestimmt** +- X bestimmt alle anderen Attribute → X ist ein **Superschlüssel** +- Ist X auch **minimal**, dann ist X ein **Kandidat für Primärschlüssel** + +**Arten der Abhängigkeit:** + +| Art | Notation | Beschreibung | +|---|---|---| +| **Funktionale Abhängigkeit** | X → Y | X bestimmt Y eindeutig | +| **Mehrwertige Abhängigkeit** (multivalued) | X →→ Y | X bestimmt eine Menge von Y-Werten | + +### 5.3 Erste Normalform – 1NF + +Eine Tabelle liegt in **1NF** vor, wenn ihre Zellen nur **atomare Werte** beinhalten, d. h. sie enthalten nicht mehr als einen Wert (keine Auflistungen). + +**"Atomar"** bedeutet: Die Werte können nicht weiter in kleinere Komponenten zerlegt werden, die **einzeln einen Sinn** im Anwendungsbereich ergeben. + +**Regeln:** +- Wiederholungsgruppen werden vermieden, indem jede Gruppe in eine **separate Tabelle** eingefügt und durch eine **1:N-Beziehung** verbunden wird +- Ob ein Attribut atomar ist, hängt **stark von der Mini-Welt** ab +- Laut E. F. Codd müssen Tabellen in 1NF **nicht unbedingt einen Primärschlüssel** haben + +**Mini-Welt-Beispiele: Adresse:** + +| Mini-Welt | Kontext | Atomar? | +|---|---|---| +| **Logistik-Firma (Müll-Abfuhr)** | PLZ, Straße, Hausnummer werden einzeln für Routenberechnung benötigt | PLZ, Straße, Hausnummer sind **jeweils atomar** | +| **Buchhaltung (Gehaltsabrechnung)** | Nur die gesamte Adresse wird für Briefversand benötigt | Gesamte Adresse ist **als Ganzes atomar** | + +**Beispiel Bahnwagen:** + +Ausgangstabelle (nicht in 1NF): Feld "Beschreibung" enthält `'Wagentyp, Leergewicht, Kapazität, Hersteller, Baujahr'` → **nicht atomar** + +In 1NF gebracht: +``` +W1 = { [ WagenID, Status, Ankunft, Station, WagenType, + Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +``` + +**Beispiel Vertragsdaten:** + +Ausgangstabelle (nicht in 1NF): + +| Vertragsdatum | Kunde | Produkt | +|---|---|---| +| 01.02.2010 | Kohl | VW 30.000, BMW 40.000, Opel 40.000 | +| 03.01.2012 | Schröder | VW 32.000, Mercedes 35.000 | + +In 1NF gebracht: + +| Vertragsdatum | Kunde | Produkt | Preis | +|---|---|---|---| +| 01.02.2010 | Kohl | VW | 30.000 | +| 01.02.2010 | Kohl | BMW | 40.000 | +| 01.02.2010 | Kohl | Opel | 40.000 | +| 03.01.2012 | Schröder | VW | 32.000 | +| 03.01.2012 | Schröder | Mercedes | 35.000 | + +### 5.4 Zweite Normalform – 2NF + +Eine Tabelle liegt in **2NF** vor, wenn sie: +1. In **1NF** vorliegt +2. Jedes Feld, das **nicht** zum Primärschlüssel gehört, vom **ganzen** Primärschlüssel abhängt + +**Regel:** Besteht der Primärschlüssel nur aus **einem Feld**, liegt die Tabelle **automatisch in 2NF** vor. + +**Vorgang:** Felder, die nur vom **Teil des Primärschlüssels** abhängig sind, werden zusammen mit dem Teilschlüssel in **neue Tabellen ausgelagert**. + +**Beispiel Bahnwagen:** +Die Felder [WagenType], [Leergewicht], [Kapazitaet], [Hersteller], [Baujahr] hängen nur von [WagenID] ab, aber **nicht** von [Ankunft] → nicht in 2NF. + +Aufteilung in 2NF: +``` +W11 = { [ WagenID, Ankunft, Status, Station ] } ← PK = [WagenID, Ankunft] +W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, + Hersteller, Baujahr ] } ← PK = [WagenID] +``` + +**Beispiel Vertragsdaten:** +PK = [Vertragsdatum, Kunde, Produkt] +- [Herkunftsland] hängt nur von [Produkt] ab → verletzt 2NF +- [Lieferadresse] hängt nur von [Kunde] ab → verletzt 2NF +- [V-Art] hängt nur von [Produkt] ab → verletzt 2NF + +**Beispiel Bestellungen:** +Bei ArtNr : LagerOrt = 1:1 gibt es **zwei Schlüsselkandidaten**: [RNr, ArtNr] und [RNr, LagerOrt]. Die 2NF ist in beiden Fällen verletzt. + +**ERM-Bezug:** Wenn man vom **ERM ausgeht** und den konzeptuellen Entwurf korrekt in den logischen umwandelt, kommt man direkt zu Tabellen, die die 2NF nicht verletzen. + +### 5.5 Dritte Normalform – 3NF + +Eine Tabelle liegt in **3NF** vor, wenn sie: +1. In **2NF** vorliegt +2. Alle Felder, die **nicht** zum Primärschlüssel gehören, **voneinander unabhängig** sind + +**Regel:** Wenn nur **ein Nichtschlüsselfeld** in der Tabelle vorhanden ist, liegt die Tabelle **automatisch in 3NF** vor. + +**Wichtig:** In der Praxis ist die 3NF oft ausreichend für eine perfekte Balance aus **Redundanz, Performance und Flexibilität**. + +**Vorgang:** Funktionale Abhängigkeiten unter Nicht-PK-Feldern werden durch **Aufteilung der Tabelle** aufgelöst. + +**Beispiel Bahnwagen:** +Aus 2NF: `W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }` +[Leergewicht], [Kapazitaet], [Hersteller] und ggf. [Baujahr] sind vom Feld [WagenType] abhängig → nicht in 3NF. + +Variante a (Baujahr vom WagenType abhängig): +``` +W121a = { [ WagenID, WagenType ] } +W122a = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +``` + +Variante b (Baujahr vom WagenType unabhängig): +``` +W121b = { [ WagenID, WagenType, Baujahr ] } +W122b = { [ WagenType, Leergewicht, Kapazitaet, Hersteller ] } +``` + +### 5.6 Boyce-Codd-Normalform – BCNF + +Eine Tabelle liegt in **BCNF** vor, wenn sie: +1. In **3NF** vorliegt +2. **Kein Teil** eines Schlüsselkandidaten funktional von keinem Teil eines **anderen** Schlüsselkandidaten abhängig ist + +**Kern:** BCNF behandelt die **Abhängigkeiten zwischen Teilen mehrerer Schlüsselkandidaten**, falls diese sich teilweise **überlappen**. + +**Regel:** Gibt es nur **einen Schlüsselkandidaten** oder liegt **keine Überlappung** vor, befindet sich die Tabelle **automatisch in BCNF**. + +**Beispiel Sportvereine:** + +| Name | Sportart | Verein | +|---|---|---| +| Schulz | Fußball | FC Berlin | +| Mayer | Fußball | FC Berlin | +| Zimmermann | Fußball | FC Marzahn | +| Mayer | Volleyball | VC Hamburg | + +Beziehung: Sportart : Verein = 1 : N. Schlüsselkandidaten: [Name, Sportart] und [Name, Verein] → **Überlappung** (Name). [Sportart] hängt vom Nicht-Schlüssel-Feld [Verein] ab → verletzt BCNF. + +Lösung: +``` +Tabelle 1 = { [ Name, Verein ] } +Tabelle 2 = { [ Sportart, Verein ] } +``` + +### 5.7 Vierte Normalform – 4NF + +Eine Tabelle liegt in **4NF** vor, wenn sie: +1. In **BCNF** vorliegt +2. Nur **semantisch verbundene** Nichtschlüsselattribute sich in der Tabelle befinden + +Die 4NF trennt **semantisch (thematisch, inhaltlich) unabhängige** Entitäten durch Aufteilung. + +**Beispiel Bahnwagen:** +[Leergewicht] und [Kapazitaet] werden **viel öfter** verwendet als [Hersteller] und [Baujahr] (historische Bedeutung) → **unterschiedliche Semantik**. + +``` +W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] } ← technische Daten +W122a2 = { [ WagenType, Hersteller, Baujahr ] } ← historische Daten +``` + +### 5.8 Fünfte Normalform – 5NF + +Eine Tabelle liegt in **5NF** vor, wenn sie: +1. In **4NF** vorliegt +2. Nicht mehr in Tabellen eines **geringeren Grades** zerlegt werden kann + +**Kern:** Die neuen Tabellen können jederzeit den ursprünglichen Zustand **ohne Informationsverlust** wieder herstellen (durch JOIN). + +**Nachteil:** Man braucht in der Praxis ständig die ganzen Informationen und muss daher ständig die vereinfachten Tabellen wieder **vereinigen** (JOIN). + +**Beispiel Touristik-Firma:** +``` +T10 = { [ PersID, TourNr, Trans-Unternehmen ] } ← PK = alle drei Attribute +``` +Zerlegbar in: +``` +T11 = { [ PersID, TourNr ] } +T12 = { [ PersID, Trans-Unternehmen ] } +T13 = { [ TourNr, Trans-Unternehmen ] } +``` + +**Beispiel Hersteller-Produkt-Person:** +``` +TA = { [ HerstID, ProduktID ] } +TB = { [ PersID, ProduktID ] } +TC = { [ HerstID, PersID ] } +``` + +### 5.9 Anomalien ohne Normalisierung + +**Beispiel:** Tabelle mit Mitarbeitern, Abteilungen und Projekten (nicht normalisiert): + +| PersID | Name | AbtNr | Abteilung | ProjNr | ProjBeschreibung | +|---|---|---|---|---|---| +| 1 | Anna | 42 | Second Level | BE | Bergland ... | +| 1 | Anna | 42 | Second Level | NO | Nordsee ... | +| 2 | Arnold | 42 | Second Level | NO | Nordsee ... | +| 2 | Arnold | 42 | Second Level | OG | Ostgipfel ... | +| 3 | Betty | 53 | First Dept | OG | Ostgipfel ... | +| 3 | Betty | 53 | First Dept | WO | West-Ozean ... | +| 4 | Chris | 53 | First Dept | WO | West-Ozean ... | + +| Anomalie | Problem | +|---|---| +| **Einfüge-Anomalie** | Neuer Mitarbeiter mit mehreren Projekten → mehrere Zeilen, Vertippen möglich | +| **Änderungs-Anomalie** | Projektumbenennung → mehrere Zeilen ändern, Übersehen möglich | +| **Lösch-Anomalie** | Mitarbeiter löschen → mehrere Zeilen entfernen, Übersehen möglich | + +**Normalisierung → 3NF:** +``` +Mitarbeiter = { [ PersID, Name, AbtNr ] } +Abteilung = { [ AbtNr, Abteilung ] } +arbeitet_an = { [ PersID, ProjNr ] } +Projekt = { [ ProjNr, ProjBeschreibung ] } +``` + +### 5.10 ERM als Alternative zur Normalisierung + +**Wichtige Erkenntnis:** Wenn man vom **ERM ausgeht** und den konzeptuellen Entwurf korrekt in den logischen umwandelt (inkl. Vereinfachung), bekommt man **ziemlich wahrscheinlich** Tabellen in 3NF. ERM und Normalisierung sind **komplementäre Ansätze** zum gleichen Ziel. + +### Übersicht Normalformen + +| NF | Voraussetzung | Regel | Automatisch erfüllt wenn... | +|---|---|---|---| +| **1NF** | — | Nur atomare Werte in Zellen | Keine Auflistungen vorhanden | +| **2NF** | 1NF | Jedes Nicht-PK-Feld hängt vom **ganzen** PK ab | PK besteht aus nur einem Feld | +| **3NF** | 2NF | Nicht-PK-Felder sind **voneinander unabhängig** | Nur ein Nicht-PK-Feld vorhanden | +| **BCNF** | 3NF | Keine Abhängigkeiten zwischen Teilen verschiedener Schlüsselkandidaten | Nur ein Schlüsselkandidat oder keine Überlappung | +| **4NF** | BCNF | Nur semantisch verbundene Nicht-PK-Attribute zusammen | Alle Attribute thematisch zusammengehörig | +| **5NF** | 4NF | Nicht weiter in Tabellen geringeren Grades zerlegbar | Zerlegung würde Informationsverlust verursachen | + +### Durchgängiges Beispiel: Bahnwagen + +``` +Ausgangstabelle: { [ WagenID, Beschreibung, Status, Ankunft, Station ] } +→ 1NF: W1 = { [ WagenID, Status, Ankunft, Station, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 2NF: W11 = { [ WagenID, Ankunft, Status, Station ] } + W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 3NF: W11 = { [ WagenID, Ankunft, Status, Station ] } + W121 = { [ WagenID, WagenType ] } + W122 = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 4NF: W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] } + W122a2 = { [ WagenType, Hersteller, Baujahr ] } +``` + +--- + +## 6. Transaktionen (f_Transaktionen) + +### 6.1 Definition + +**Integrität (Konsistenz)** der Datenbank = Zustand der Daten, in dem sie **korrekt, vollständig und widerspruchsfrei** sind. + +**Transaktion** = Mehrere Operationen, die: +- Entweder **alle erfolgreich** durchgeführt werden +- Oder, falls ein Fehler vorliegt, die schon durchgeführten **rückgängig gemacht** werden müssen + +**Eigenschaften:** +- Transaktionen gewährleisten einen **konsistenten Zustand** der Datenbank +- Sie versetzen den Datenbestand von einem konsistenten Zustand in einen **anderen konsistenten Zustand** +- Eine Transaktion wird als **atomare (ununterbrechbare) Operation** betrachtet +- Bei Fehlern werden Komponenten nicht rückgängig gemacht (zeitintensiv), sondern der **zuvor gespeicherte Zustand** wird wiederhergestellt + +### 6.2 Beispiel + +Zwei ganze Zahlen A und B: +``` +T1 = { A=A+100; B=B+100; } +T2 = { A=A*2; B=B*2; } +``` + +- **Sequenzielle Ausführung** → Konsistenz gewährleistet +- **Gemischte Operationen** → Konsistenz **nicht** mehr gewährleistet + +### 6.3 Anforderungen + +| Anforderung | Beschreibung | +|---|---| +| Gleichzeitige Verarbeitung | Mehrere Transaktionen müssen **quasi-parallel** verarbeitet werden | +| Fehlerbehandlung | Abgeschlossene Transaktionen bleiben bestehen, offene werden rückgängig gemacht | +| Organisation | Manuell (im Source-Code) oder automatisch | +| Zwischenpunkte | Daten erfolgreich durchgeführter Operationen können gespeichert werden | +| Abschlussarten | Nur **COMMIT** (erfolgreich) oder **ROLLBACK** (erfolglos) | + +**Gründe für ROLLBACK:** Systemfehler, Integritätsverletzungen, Deadlock, Benutzeranweisung. + +### 6.4 ACID-Eigenschaften + +| Eigenschaft | Beschreibung | +|---|---| +| **A**tomicity (Atomarität) | Entweder **alle** Befehle oder **gar keine** werden ausgeführt | +| **C**onsistency (Konsistenz) | Transaktion hinterlässt nach Beendigung einen **konsistenten Datenzustand**, ansonsten komplettes Zurücksetzen | +| **I**solation | Nebenläufige Transaktionen beeinflussen sich **nicht gegenseitig**; jede wird logisch so ausgeführt, als wäre sie die einzig aktive | +| **D**urability (Dauerhaftigkeit) | Wirkung einer erfolgreich abgeschlossenen Transaktion bleibt **dauerhaft** erhalten, auch nach Systemfehler | + +### 6.5 Zustände einer Transaktion + +``` +BoT → Active → Committing → Änderungen festgeschrieben → EoT + ↓ ↓ + Waiting for ERROR + resources ↓ + ↓ Rolling back → Änderungen rückgängig gemacht → EoT + DEADLOCK + ↓ + ROLLBACK → Rolling back +``` + +| Zustand | Beschreibung | +|---|---| +| **BoT** | Begin of Transaction | +| **Active** | Transaktion führt Operationen aus | +| **Waiting for resources** | Wartet auf gesperrte Ressourcen | +| **DEADLOCK** | Gegenseitige Blockierung erkannt | +| **Committing** | Änderungen werden festgeschrieben (COMMIT) | +| **Rolling back** | Änderungen werden rückgängig gemacht (ROLLBACK) | +| **EoT** | End of Transaction | + +### 6.6 Synchronisation + +**Synchronisation (Mehrbenutzersynchronisation)** = Koordinierung von mehreren Benutzerprozessen, eng verbunden mit der Ausführung der Transaktionen. + +| Art | Beschreibung | Eigenschaft | +|---|---|---| +| **Seriell** | Transaktionen nacheinander | Absolut sicher, aber **langsam**; blockiert nachfolgende Transaktionen | +| **Parallel** | Transaktionen gleichzeitig | Nutzt Ressourcen **besser** aus | +| **Serialisierung** | Anordnung paralleler Operationen | Entspricht in der Wirkung der seriellen Ausführung, garantiert Konsistenz | + +### 6.7 Probleme bei paralleler Ausführung + +Bei Zugriff auf **denselben Datenbestand** können folgende Probleme entstehen: + +#### Lost Update + +Die von einer Transaktion geänderten Daten werden von einer anderen Transaktion überschrieben. + +**Variante 1 – Direkt:** +``` +T1: update TabX set V=42; T2: ... +T1: ... T2: update TabX set V=53; +T1: ... T2: commit; +T1: commit; T2: ... +``` +→ Update von T2 geht verloren. Kommt in Datenbanken **nicht vor**, da T2 auf Freigabe wartet. + +**Variante 2 – Über lokale Variable:** +``` +T1: select V from TabX into W; T2: ... +T1: W := W+1; T2: update TabX set V=53; +T1: update TabX set V=W; T2: commit; +T1: commit; T2: ... +``` +→ Update von T2 geht verloren. Kann durch **höhere Isolationsstufe** vermieden werden. + +**Lösung:** `SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;` +- Die Transaktion merkt sich die Daten, die zum **Start der Transaktion** festgeschrieben waren +- Ändert eine andere Transaktion diese Daten, bricht die erste ab +- Fehler: `ORA-08177: can't serialize access for this transaction` + +#### Dirty Read + +Eine Transaktion liest Daten, die eine andere Transaktion geändert, aber **noch nicht festgeschrieben** hat. + +``` +T1: ... T2: update TabX set V=42; +T1: select V from TabX; T2: ... ← T1 liest V=42 +T1: ... T2: rollback; ← V=42 war ungültig! +``` + +**Lösung:** Standard-Isolationsstufe in Oracle ist **READ COMMITTED** → verhindert Dirty Read automatisch. Dirty Read ist nur möglich mit `READ UNCOMMITTED` (in Oracle nicht verfügbar). + +#### Non-Repeatable Read + +Eine Transaktion liest **zweimal dieselben Daten** und bekommt **unterschiedliche Ergebnisse**. + +``` +T1: select V from TabX; T2: ... +T1: ... T2: update TabX set V=42; +T1: ... T2: commit; +T1: select V from TabX; T2: ... ← anderer Wert! +``` + +**Lösung:** Isolationsstufe **SERIALIZABLE** (Standard READ COMMITTED lässt dies zu). + +#### Phantom Read + +Ähnlich Non-Repeatable Read, aber mit **Anzahl der Zeilen** statt Werten. + +``` +T1: select count(*) from TabX; T2: ... +T1: ... T2: insert into TabX ...; +T1: ... T2: commit; +T1: select count(*) from TabX; T2: ... ← anderer Count! +``` + +**Lösung:** Isolationsstufe **SERIALIZABLE**. + +### 6.8 Trade-off der Isolationsstufen + +| Niedrigere Stufe | Höhere Stufe | +|---|---| +| Erlaubt gleichzeitigen Zugriff | Vermindert Probleme | +| Mehr mögliche Nebenwirkungen | Mehr Systemressourcen | +| Höhere Performance | Höhere Blockierungswahrscheinlichkeit | + +### 6.9 Isolationsstufen nach ANSI/ISO SQL92 + +| Isolationsstufe | Verhindert | Besonderheit | +|---|---|---| +| **READ UNCOMMITTED** | — | Dirty Read erlaubt; **fehlt in Oracle** | +| **READ COMMITTED** | Dirty Read | Standard in Oracle; Lesesperren werden kurz gesetzt und aufgehoben | +| **REPEATABLE READ** | Dirty Read, Non-Repeatable Read | Sperren für gesamte Transaktion; **fehlt in Oracle** | +| **SERIALIZABLE** | Dirty Read, Non-Repeatable Read, Phantom Read, Lost Update | Höchste Stufe; keine weiteren schreibenden Transaktionen auf dieselben Daten | + +**Hinweis:** +- Die Isolationsstufe betrifft den **Schreibvorgang nicht** – eine Transaktion bekommt immer eine **exklusive Sperre** für alle zu ändernden Daten +- Die Isolationsstufe wirkt auf die **Lesevorgänge** – definiert, wie Lesevorgänge von anderen Transaktionen abhängig sind +- Der SQL-Standard schreibt diese Stufen vor, aber konkrete Datenbanken unterstützen sie **unterschiedlich** + +### 6.10 Synchronisationsstrategien + +Der **Scheduler** steuert die Ausführungsreihenfolge von Operationen verschiedener Transaktionen. + +| Strategie | Beschreibung | +|---|---| +| **Pessimistisch** | Scheduler **verzögert** Operationen, legt optimale Reihenfolge fest | +| **Optimistisch** | Scheduler schickt Operationen **sofort** zur Ausführung | + +### 6.11 Synchronisationsverfahren + +#### Sperrbasierte Synchronisation + +Wird **oft eingesetzt**. + +| Regel | Beschreibung | +|---|---| +| Jedes Datenobjekt hat eine Sperre | Tabelle, Datensatz, Attribut, Index, View | +| Sperren vor Benutzung | Jedes Objekt muss vor Zugriff gesperrt werden | +| Warten bei Sperre | Ist Objekt schon gesperrt, muss die Transaktion warten | +| Exklusivität | Nur **eine** Transaktion kann die Sperre halten | +| **Lesesperre** (shared lock) | Andere Transaktionen dürfen die Daten **lesen** | +| **Schreibsperre** (exclusive lock) | Andere Transaktionen dürfen Daten **weder lesen noch ändern** | +| Sperren aufheben | Am Ende der Transaktion werden **alle Sperren** aufgehoben | + +**Löst:** Alle Probleme **außer Phantom Read**. + +#### 2-Phasen-Sperrprotokoll – 2PL + +| Phase | Beschreibung | Sicherste Variante | +|---|---|---| +| **Wachstumsphase** | Viele Sperren werden **angefordert**, wenige freigegeben | Sperren werden nur **gesetzt**, nicht aufgehoben | +| **Minderungsphase** (Schrumpfphase) | Viele Sperren werden **freigegeben**, wenige angefordert | Sperren werden nur **aufgehoben**, nicht gesetzt | + +#### Zeitstempelbasierte Synchronisation + +Wird **selten eingesetzt**. + +| Regel | Beschreibung | +|---|---| +| Eindeutiger Zeitstempel | Jede Transaktion bekommt einen eindeutigen Zeitstempel | +| Ordnung | Scheduler ordnet konkurrierende Operationen nach Zeitstempel | +| Objektstempel | Zu jedem Datenobjekt wird der Zeitstempel der letzten Operation gespeichert | +| Abweisung | Operation mit **früherem** Zeitstempel als der des Objektes wird **abgewiesen** | +| Reihenfolge | Transaktionen müssen laut Zeitstempelreihenfolge beendet werden | + +**Löst:** Alle Probleme **außer Phantom Read**. + +--- + +## 7. Speicherstrukturen (g_Speicherstrukturen) + +### 7.1 Überblick + +Oracle verwaltet eigene Speicherstrukturen auf dem **Datenträger** und im **Arbeitsspeicher** zwecks effizienter und konsistenter Datenbearbeitung. + +| Ort | Strukturen | +|---|---| +| **Datenträger** | Tablespaces, Datenbankdateien, Segmente, Redo-Log-Dateien | +| **Arbeitsspeicher** | System Global Area (SGA), Program Global Area (PGA), User Global Area (UGA) | + +### 7.2 Datenträger + +#### Tablespace + +Ein Tablespace enthält theoretisch mehrere **Tabellen** und **Indizes**, verteilt auf mehrere **Datenbankdateien**. + +``` +Tablespace +├── Tabelle A, Tabelle B, Tabelle C +├── Index D, Index E +├── Datenbankdatei 1 +└── Datenbankdatei 2 +``` + +#### Hierarchie der Strukturen + +Ein separates Tablespace ist für **jede Anwendung** gedacht (alle User, Tabellen, Indizes, Prozeduren). + +| Ebene | Beschreibung | +|---|---| +| **Datenbank** | Besteht aus mehreren **Tablespaces** | +| **Tablespace** | Besteht aus mehreren **Datenbankdateien** | +| **Datenbankdatei** | Besteht aus mehreren **Segmenten** (Extenten), zugeordnet zu Tabellen oder Indizes | +| **Segment** | Besteht aus mehreren **Blöcken** | +| **Block** | Kleinste Einheit, die gelesen/geschrieben werden kann | + +Ist eine Tabelle voll, kann sie durch ein **Segment (Extent)** erweitert werden. + +#### Logische vs. Physische Objekte + +| Typ | Beispiele | +|---|---| +| **Logische Objekte** | Tabellen, Indizes, User, Prozeduren | +| **Physische Objekte** | Tablespace, Datenbankdatei, Segment (Extent), Block | + +#### CREATE TABLE mit Storage-Klausel + +```sql +CREATE TABLE T ( + A INTEGER, B VARCHAR2(20) +) +TABLESPACE myTabSpc STORAGE ( + INITIAL 1M -- Anfangssegment + NEXT 500K -- Extente (weitere Segmente) + MINEXTENTS 1 -- minimale Anzahl der Segmente + MAXEXTENTS 100 -- maximale Anzahl der Segmente + PCTINCREASE 10 -- Größe der Segmente wächst um 10% +); +``` + +#### Tablespace-Verwaltung + +```sql +-- Tablespace anzeigen +SELECT * FROM user_tablespaces; +SELECT * FROM dba_tablespaces; + +-- Tablespace erstellen +CREATE TABLESPACE orion +DATAFILE 'c:\oracle\oradata\ora\orion.dbf' +SIZE 10M +AUTOEXTEND ON NEXT 200K MAXSIZE 200M; + +-- Datenbankdatei hinzufügen +ALTER TABLESPACE orion +ADD DATAFILE 'c:\oracle\oradata\ora\orion2.dbf' +SIZE 10M AUTOEXTEND ON NEXT 100K MAXSIZE 800M; + +-- Tablespace offline/online schalten +ALTER TABLESPACE orion OFFLINE IMMEDIATE; +ALTER TABLESPACE orion ONLINE; + +-- Einzelne Datenbankdateien offline/online +ALTER DATABASE DATAFILE '...\orion3.dbf' OFFLINE DROP; +ALTER DATABASE DATAFILE '...\orion4.dbf' ONLINE; +``` + +#### Rollback-Segmente und Redo-Log-Dateien + +| Struktur | Funktion | +|---|---| +| **Rollback-Segmente** | Speichern Daten **vor** Änderungen; Anfragen lesen aus Rollback-Segmenten, solange Änderungen noch nicht COMMIT sind; in Oracle automatisch via **Undo-Management** im UNDO-Tablespace verwaltet | +| **Redo-Log-Dateien** | Enthalten **schon durchgeführte** Änderungen; ermöglichen Nachvollziehen der gesamten Datenänderungsgeschichte; werden **zyklisch beschrieben** und automatisch archiviert | + +### 7.3 Arbeitsspeicher + +#### System Global Area – SGA + +| Komponente | Beschreibung | +|---|---| +| **Database-Buffer-Cache** | Enthält Datenblöcke (z. B. Zeilen einer Tabelle), die angezeigt/geändert werden müssen; lädt mehrere Zeilen (auch benachbarte) für hohe Zugriffsgeschwindigkeit; wird von speziellen Algorithmen verwaltet (Verdrängung nicht benötigter Daten) | +| **Dirty List** | Liste mit Blockadressen aus dem Database-Buffer-Cache, deren Daten **geändert** wurden; geänderte Blöcke werden nach COMMIT anhand der Dirty List in die Datenbank geschrieben | +| **Redo-Log-Buffer** | Protokolliert Daten vom Database-Buffer-Cache für den Fall eines **unerwarteten Systemabsturzes** | +| **Shared Pool** | Verarbeitet SQL-Anweisungen: Benutzerrechte prüfen, Existenz von Tabellen/Spalten prüfen, Syntax prüfen, Optimierung; nutzt Metadaten aus dem **Data Dictionary** (Tablespace SYSTEM) | +| **Large Pool** | Speicherplatz für System-Komponenten wie z. B. **Recovery-Manager** | +| **Java Pool** | Virtuelle Umgebung für **Java-Anwendungen** | + +#### Program Global Area – PGA + +Beinhaltet Informationen, die für die **Steuerung der gesamten Oracle-Prozesse** notwendig sind. + +#### User Global Area – UGA + +Beinhaltet Informationen, die einem **aktuell verbundenen Benutzer** zugeordnet sind (Sitzung). + +--- + +## 8. Sicherungskonzepte (h_Sicherungskonzepte) + +### 8.1 Datensicherheit + +**Datensicherheit** = Alle technischen und organisatorischen Maßnahmen zum Schutz der Daten vor **Verfälschung, Zerstörung und unzulässiger Weitergabe**. + +- Informationssicherheit ist nicht nur Technik, sondern auch abhängig von **organisatorischen und personellen** Rahmenbedingungen +- Das **BSI** (Bundesamt für Sicherheit in der Informationstechnik) veröffentlicht das IT-Grundschutzhandbuch + +### 8.2 Schadenskategorien + +| Kategorie | Beschreibung | Beispiel | +|---|---|---| +| **Verlust der Verfügbarkeit** | Grundlegende Informationen nicht vorhanden | Keine Geldtransaktionen, Online-Bestellungen oder Produktionsprozesse möglich | +| **Verlust der Vertraulichkeit** | Ungewollte Offenlegung von Informationen | Personenbezogene Daten, Umsatz, Marketing, Forschungsdaten gelangen an Konkurrenz | +| **Verlust der Integrität** | Gefälschte Daten | Fehlbuchungen, falsche Lieferungen, fehlerhafte Produkte | +| **Verlust der Authentizität** | Daten falscher Person zugeordnet | Zahlungsanweisungen zu Lasten Dritter, falsche digitale Willenserklärungen | + +### 8.3 Relevante Gesetze + +| Gesetz | Kürzel | Jahr | +|---|---|---| +| Bundesdatenschutzgesetz | BDSG | 1990/2003/2009 | +| Telekommunikationsgesetz | TKG | 2004 | +| Telemediengesetz | TMG | 2007 | +| Signaturgesetz | SigG | 2001 | +| Diverse Landesdatenschutzgesetze | — | — | + +### 8.4 Grundprinzipien der Sicherheit + +| Prinzip | Beschreibung | +|---|---| +| **Authentifizierung** | Subjekte (Benutzer, Rechner, Dienste) müssen ein Konto besitzen und sich mit gültigem Anmeldenamen + Kennwort anmelden; moderne DB erlauben auch Betriebssystem-Authentifizierung und Zertifikate | +| **Autorisierung** | System muss Zugriffsrechte implementieren: Leserechte (ohne Änderung), Änderungsrechte (inkl. Lesen), volle Rechte (inkl. Weitergabe); Verweigerung/Entziehung möglich | +| **Protokollierung** | Alle wichtigen Vorgänge müssen überwacht werden: Lesen/Ändern/Löschen, Anmeldung, DB-Start/Stop, Kontenverwaltung; Mindestangaben: **wer**, **was**, **wann**; in Oracle: **Auditing** | + +**Beispiel Verletzung:** Web-Server ordnet alle Anfragen einem pauschalen Konto zu → Verletzung der Authentifizierung → potenzieller Angreifer kann unsinnige Anfragen senden. + +### 8.5 Integrität + +**Integrität (Konsistenz)** = Zustand der Daten, in dem sie korrekt, vollständig und widerspruchsfrei sind. + +| Art | Beschreibung | +|---|---| +| **Semantische Integrität** | Werte gehören zum Wertebereich, richtige Datentypen, keine Tippfehler | +| **Referentielle Integrität** | Korrektheit der Primär- und Fremdschlüssel, Existenz der Verweise | +| **Logische Integrität** | Transaktionen, zusammengehörende Operationen | + +#### Gewährleistung der Integrität + +| Ebene | Beschreibung | +|---|---| +| **Datenbank** (bessere Lösung) | Klauseln in DDL-Anweisungen | +| **Anwendung** (zusätzliche Lösung) | Programmcode der Anwendung | + +**Vorteile der DB-Ebene:** +- DB selbst gewährleistet Konsistenz → inkonsistente Zustände unmöglich +- Ein-/Ausschaltbar (z. B. beim Import) +- Standardisierte Möglichkeiten +- Unabhängig von einzelnen Anwendungen +- Schnellere Anwendungsentwicklung + +#### Integritätsverletzende Operationen + +- **DML:** INSERT, UPDATE, DELETE +- **DDL:** ALTER, DROP, RENAME + +#### Aktionen bei Integritätsverletzung + +| Aktion | Beschreibung | +|---|---| +| **Rollback** | Abbrechen der Operation und Zurücksetzen auf Zustand davor | +| **Cascade** | Propagieren der Operation auf alle beteiligten Tabellen | +| **Set Null** | Betroffene Attribute auf NULL setzen | + +#### Referentielle Integrität + +Die Werte eines **Fremdschlüssels** müssen auch als Werte des **Primärschlüssels** vorhanden sein. + +#### Constraint-Typen + +| Constraint | Beschreibung | +|---|---| +| **PRIMARY KEY** | Attribut(e) bilden primären Schlüssel; automatisch wird Index angelegt (Oracle) | +| **FOREIGN KEY** | Attribut(e) bilden PK in einer anderen Tabelle | +| **ON DELETE CASCADE** | Löschen in PK-Tabelle löscht auch FK-Datensätze | +| **NOT NULL** | Attribut muss einen Wert haben | +| **UNIQUE** | Werte sind einmalig | +| **CHECK** | Logischer Ausdruck muss wahr sein | + +#### Beispiele + +```sql +CREATE TABLE Studenten ( + MatrNr INTEGER PRIMARY KEY, + Name VARCHAR(30) NOT NULL, + Semester INTEGER CHECK Semester BETWEEN 1 AND 13 +); + +CREATE TABLE Professoren ( + PersNr INTEGER PRIMARY KEY, + Name VARCHAR(30) NOT NULL, + Rang CHAR(2) CHECK (Rang IN ('C2', 'C3', 'C4')), + Raum INTEGER UNIQUE +); + +CREATE TABLE voraussetzen ( + Vorgaenger INTEGER REFERENCES Vorlesungen(VorlNr) ON DELETE CASCADE, + Nachfolger INTEGER REFERENCES Vorlesungen(VorlNr) ON DELETE NO ACTION, + PRIMARY KEY (Vorgaenger, Nachfolger) +); + +CREATE TABLE pruefen ( + MatrNr INTEGER REFERENCES Studenten ON DELETE CASCADE, + VorlNr INTEGER REFERENCES Vorlesungen, + PersNr INTEGER REFERENCES Professoren, + Note NUMERIC(2,1) CHECK (Note BETWEEN 0.7 AND 5.0), + PRIMARY KEY (MatrNr, VorlNr) +); +``` + +#### Trigger + +**Trigger** = Prozedur/Funktion, die bei bestimmten Ereignissen **automatisch** gestartet wird. + +**Auslöser:** +- DML: INSERT, DELETE, UPDATE +- DDL: CREATE, ALTER, DROP +- An-/Abmeldung, Start/Stop der DB + +**Zeitpunkt:** + +| Zeitpunkt | Beschreibung | +|---|---| +| **BEFORE** | Vor der Änderung | +| **AFTER** | Nach der Änderung | +| **INSTEAD OF** | Statt der Änderung | + +### 8.6 Rechte + +#### User/Schema-Konzept in Oracle + +- Zentral: **User (Benutzer)**, auch **Schema** genannt +- Oracle-DB besteht aus verschiedenen Schemen, innerhalb derer ERM realisiert sind +- Vordefinierte Benutzer: **SYS** und **SYSTEM** (alle Rechte) +- Alle anderen Benutzer müssen erstellt und mit Rechten versehen werden + +#### Zugriffsrichtlinien + +Klare Richtlinien sollten festlegen: wer darf zugreifen, auf welche Ressourcen, welche Zugriffsart, an welchen Tagen/Uhrzeiten, von welchen Computern, wer erlaubt/informiert/protokolliert/abrechnet. + +#### Sicherheitsmechanismen + +| Mechanismus | Beschreibung | +|---|---| +| **DAC** (Discretionary Access Control) | Regel: {O, S, R, P, F} – Objekte, Subjekte, Zugriffsrechte, Prädikat, Recht zur Rechtevergabe | +| **MAC** (Mandatory Access Control) | Hierarchie der Prozesse mit Markierungen (Einstufung); Kommunikation nur bei gleichem Niveau | + +#### Privilegien + +| Typ | Beispiele | +|---|---| +| **Systemprivilegien** | Anmeldung, Anlegen/Löschen von Tabellen/Benutzern/Prozeduren, Abfragen von Systemtabellen, Verwaltung von Tablespaces | +| **Objektprivilegien** | Abfragen von Tabellen, Ändern von Inhalten, Verwenden von Funktionen | + +**Empfehlung:** Sinnvolle **Rollenmatrix** erstellen; Benutzer bekommen keine Privilegien direkt, sondern über **Rollen**. + +#### Benutzerverwaltung + +```sql +-- Benutzer erstellen +DROP USER Student07; +CREATE USER Student07 IDENTIFIED BY system +DEFAULT TABLESPACE users +TEMPORARY TABLESPACE temp +QUOTA UNLIMITED ON users; + +-- Passwort ändern +ALTER USER Student07 IDENTIFIED BY System01; + +-- Rolle erstellen und Rechte vergeben +DROP ROLE StudentRole; +CREATE ROLE StudentRole; +GRANT CREATE session, CREATE table, CREATE view, + CREATE synonym, CREATE procedure, CREATE trigger +TO StudentRole; +GRANT StudentRole TO Student07; + +-- Objektprivilegien (direkt, nicht empfohlen) +GRANT SELECT ON Tabelle13 TO Student07, Student08; +GRANT INSERT, SELECT ON Student03.TabelleA TO Student07; +GRANT ALL ON database TO dba_user02; + +-- Spalten-basierte Rechte +GRANT UPDATE (Spalte1), INSERT (Spalte2, Spalte3) +ON Tabelle52 TO Student07; +``` + +**Befehle:** Nur **GRANT** (Rechte vergeben) und **REVOKE** (Rechte entziehen). + +### 8.7 Backup + +#### Definition + +**Backup (Datensicherung)** = Speicherung der Daten, mit der ein System nicht direkt arbeitet. + +**Eigenschaften:** +- Kann mehrere Dateien und Verzeichnisse beinhalten +- Kann wie eine oder mehrere Dateien aussehen +- Kann verschlüsselt und/oder komprimiert sein +- Kann sich über mehrere Datenträger verbreiten + +**Backup-Archiv** = Sammlung von mehreren Backups. + +**Zwecke:** +1. Wiederherstellung nach Absturz +2. Wiederherstellung eines bestimmten Zeitpunkts für Statistik (z. B. Jahresbericht) +3. Wiederherstellung für planmäßige Funktionalität (z. B. Forschungsprojekte) + +**Regel:** In allen nicht privaten Systemen muss man immer Backup planen und regelmäßig durchführen. + +#### RAID + +**RAID** (Redundant Array of Inexpensive/Independent Disks) ist **kein Backup!** + +| Eigenschaft | Beschreibung | +|---|---| +| Funktion | Redundante Speicherung auf mehreren Festplatten | +| Bei Ausfall | Daten können von anderer Platte gelesen/geschrieben werden | +| Hot-Swap | Kaputte Platte im laufenden Betrieb austauschbar | +| Software-RAID | Von fast allen Betriebssystemen unterstützt | +| Hardware-RAID | Betriebssystemunabhängig | + +- RAID erfüllt **keine** Backup-Funktionen +- RAID kann als **Speicherort** für Backup verwendet werden + +#### Oracle Backup-Tools + +| Tool | Beschreibung | +|---|---| +| **exp/imp** | Ältere Versionen | +| **expdp/impdp** | Neuere Versionen (Data Pump) | +| **RMAN** | Recovery Manager | + +**Weitere Tools:** Linux (cp, tar, bzip, gzip, dd), Windows (copy, Server-Sicherung), Drittanbieter (Acronis, Paragon, Fwbackups, Bacula). + +#### Backup-Medien + +| Medium | Beschreibung | +|---|---| +| **DAS** | Direct Attached Storage (lokale Festplatte) | +| **NAS** | Network Attached Storage (Netzwerk) | +| **SAN** | Storage Area Network (Netzwerk) | +| Magnetband | Bandlaufwerk mit Roboter, bis zu 4 GiB | +| CD/DVD/Blu-Ray | Optische Medien | +| USB-Geräte | Externe Speicher | +| FireWire-Geräte | Externe Speicher | +| Cloud | Sicherheit bedenklich | + +**Generationsprinzip (Großvater-Vater-Sohn):** +- 3 Datenträger rotierend: 1. Sicherung → Großvater, 2. → Vater, 3. → Sohn +- 4. Sicherung: Großvater wird zum Sohn überschrieben, Rollen rotieren +- Je mehr Datenträger, desto sicherer + +#### Backup-Methoden + +| Methode | Beschreibung | +|---|---| +| **Online/Hot Backup** | DB läuft weiter, Daten werden im laufenden Betrieb gesichert; Gefahr: nicht-konsistenter Zustand; DB liefert spezifische Lösungen | +| **Offline/Cold Backup** | DB wird heruntergefahren, geschlossene Dateien kopiert; Datenbestand ist **immer konsistent** | + +#### Sicherungsarten + +| Art | Umfang | Markierung? | Wiederherstellung | Vorteil/Nachteil | +|---|---|---|---|---| +| **Normal** | Alle ausgewählten Daten | Ja (als gesichert) | Nur diese Sicherung | Einfach, aber groß | +| **Kopie** | Wie Normal | Nein | — | Keine Auswirkung auf andere Strategien | +| **Täglich** | Nur heute geänderte Daten | Ja | — | Klein, tagesbezogen | +| **Inkrementell** | Nur seit letzter Sicherung geänderte Daten | Ja | Letzte Normal + alle Inkrementellen in Reihenfolge | Wenig Zeit/Speicher, aber aufwändige Wiederherstellung | +| **Differenziell** | Nur seit letzter normaler Sicherung geänderte Daten | Nein | Letzte Normal + letzte Differenzielle | Einfache Wiederherstellung, aber wachsende Größe | + +#### Sicherungsstrategien + +| Strategie | Beispiel | +|---|---| +| Nur normale Sicherungen | Monatlich | +| Normal + Inkrementell | Jährlich normal, monatlich inkrementell | +| Normal + Differenziell | Jährlich normal, monatlich differenziell | + +**Wichtig:** Anforderungen des Unternehmens und Speicherbedarf müssen berücksichtigt werden. + +--- + +## 9. Data Warehouse Konzepte (i_DWKonzepte) + +### 9.1 Konzepte + +Drei Verarbeitungsarten: +- **Batch-Verarbeitung** – klassische Stapelverarbeitung +- **OLTP** = Online Transaction Processing – Tagesgeschäft +- **OLAP** = Online Analytical Processing – Analyse und Auswertung + +OLAP-Systeme sind unverzichtbare Instrumente zur **Analyse umfangreicher und mehrdimensionaler Daten**. Sie gewähren anwendungsspezifische Sichten und werden primär von **Managern unterschiedlicher Ebenen** verwendet. + +### 9.2 OLAP + +**Gründe für OLAP:** +- Trennung von Tagesgeschäft und Auswertungen +- Historisierte Daten mit Zeitraum-Bezug +- Große Mengen von **Nur-Lese-Daten** (Permanenz) +- **Multidimensionale Datenmodelle** +- Gezielte **Denormalisierung** des ganzen Modells + +**Eigenschaften von OLAP:** +- Intuitive und interaktive Analyse der Daten +- Flexible Darstellung aus unterschiedlichen Perspektiven +- Basis: **Hypercube** (kartesisches Produkt) +- Besondere Operationen: Rotation, Slice, Dice, Drill-Through, Drill-Across, Roll-Up, Drill-Down +- Clients: Spezielle Programme oder Tabellenkalkulationstools (z.B. Excel) + +**Data Warehouse als OLAP-Datenbank dient:** +- Unterstützung strategischer Entscheidungen +- Analyse von Tendenzen und Mustern über große Zeiträume +- Bessere Entscheidungen durch bessere Informationen +- Flexiblere Analysemöglichkeiten +- Verlagerung der Analyse in Fachabteilungen +- Geringere Berichterstellungskosten +- Gemeinsame Informationsbasis im Unternehmen + +### 9.3 ROLAP, MOLAP, HOLAP + +#### ROLAP – Relationales OLAP + +- Basiert auf **relationalen Datenbanken** (Oracle, DB2) +- Verwendet **Star-Schema** (Fakten- und Dimensionstabellen, 3NF bei Dimensionstabellen verletzt) und **Snowflake-Schema** (normalisiert) +- Für hohes Datenvorkommen und große Nutzerzahlen geeignet + +**Vorteile:** +- Bewährte relationale Technologien für Abfragen, Verwaltung, Speicherung, Recovery, Archivierung +- Sperrmechanismen und Transaktionen nicht benötigt + +**Nachteile:** +- Umfangreiche JOINs, Indizes, Table Scans nötig +- Umfangreiche Aggregationen und Berechnungen + +#### MOLAP – Multidimensionales OLAP + +- Basiert auf **herstellerspezifischen Datenbanken** +- Optimiert für hohe Performance in multidimensionalen Datenstrukturen +- Schnelle Aggregationen + +**Vorteile:** +- Hohe Performance +- Am multidimensionalen Modell ausgerichtet + +**Nachteile:** +- Hoher Schulungsaufwand +- Proprietäre Verwaltung +- Oft fehlende Standardschnittstellen + +#### HOLAP – Hybrides OLAP + +Variante aus ROLAP und MOLAP. + +### 9.4 Lebenszyklus eines Data Warehouse + +**Schritt A – Planung:** +- Analyse von Architektur und Infrastruktur +- Definition der Ressourcen und Zeitvorgaben +- Archivierungsstrategien +- Verbindungsmöglichkeiten und Ladeprogramme + +**Schritt B – Spezifikation & Modellierung:** +- Ermittlung der Entitäten und Attribute +- Geschäftsprozesse und -anwendungsfälle identifizieren +- Ein-/Ausgabedaten und Detailierungsgrad festlegen +- **Logisches Datenmodell** entsteht + +**Schritt C – Physischer Datenbankentwurf:** +- Star-Schema / Snowflake-Schema entwerfen +- Aufheben der Normalisierung +- Schlüssel, Indizierungsstrategien, Partitionierung festlegen + +**Schritt D – Befüllen des DWH:** +- Definition der Quellsysteme +- Umformungsspezifikationen +- Aktualisierungszyklus festlegen +- **ETL-Prozeduren** definieren und testen +- Automatisierung der Ladevorgänge, Backup- und Recovery-Prozeduren +- Anwendungsentwicklung (Berichte, Dokumentation, Test) + +**Schritt E – Betrieb:** +- Test und Überprüfung der Daten +- Schulung, Produktabnahme, Wartung +- Verbesserungen und Weiterentwicklung +- Performance-Untersuchungen + +### 9.5 Vergleich OLTP und OLAP + +| Merkmal | OLTP | OLAP | +|---|---|---| +| Abfragen | Vorhersehbar, einzelne Datensätze | Komplex, unvorhersehbar | +| Daten | Ständige Änderungen | Statisch, unveränderbar | +| Datenstruktur | Normalisiertes Modell (nur notwendige Redundanz) | Denormalisiertes Modell (verständlich) | +| Fokus | Hohe Transaktionsrate | Aggregation – viele Fakten zu einem Fakt | + +### 9.6 ETL – Extract, Transform, Load + +#### Extraktion +- Periodischer, ereignisgesteuerter oder anfragegesteuerter Abzug +- Komplette oder Delta-Übertragungen +- Protokollierung der Änderungen und Übertragungen + +#### Transformation (im Arbeitsbereich) +- Datentypkonvertierung +- Wertumsetzung +- Schlüsselvergabe, -anpassung, -bereinigung +- Zeitstempelvergabe +- Datenverdichtung, -bereinigung + +#### Laden +- Übertragung der Daten aus dem Arbeitsbereich in das Data Warehouse + +### 9.7 Hypercube-Operationen + +Grundlage: **Mehrdimensionaler Hypercube** mit Dimensionen wie Zeitperioden, Produkte, Abteilungen und Werten wie Absatzvolumen. + +#### Navigationsoperationen + +| Operation | Beschreibung | +|---|---| +| **Rotation** | Auswahl zweier konkreter Dimensionen (Drehung des Würfels) | +| **Slice** | Voller zweidimensionaler Ausschnitt aus dem Würfel | +| **Dice** | Mehrdimensionaler Ausschnitt (Untermenge, kleiner Würfel) | +| **Drill-Across** | Verbindung mehrerer Würfel gleicher Dimension zu einer Kette | + +#### Hierarchische Navigation + +| Operation | Beschreibung | +|---|---| +| **Drill-Down** | Von oberer zu tieferer Ebene der Hierarchie | +| **Roll-Up** | Von tieferer zu oberer Ebene der Hierarchie | +| **Drill-Through** | Wenn Drill-Down nicht mehr möglich, wird neue Datenquelle (Würfel) angeschlossen | + +### 9.8 Varianten + +- **Data Marts** – Begrenzter Anwendungsbereich (z.B. eine Abteilung). Einfacher einzurichten als DWH, aber Konsistenzprobleme bei mehreren Data Marts +- **Operation Data Stores** – Für aktuelle (tägliche) Auswertungen, unterstützen kaum langfristige Abfragen + +--- + +## 10. Andere Typen von Datenbanken (j_AndereDB) + +### 10.1 Hierarchische Datenbanken + +#### Konzept +- Vermutlich die **ältesten Datenbanken**, heute nur noch historische Bedeutung +- Bei Bedarf durch relationale Datenbanken simulierbar +- Datenbestand: Datensätze mit fester oder variabler Struktur +- Semantische Beziehungen sind **fest programmmäßig durch Verweise** implementiert (Vorgänger-Nachfolger-Prinzip) + +#### Vorteile +- Theoretisch sehr schnelle Such-, Einfüge- und Änderungsvorgänge + +#### Nachteile +- **Unflexible baumartige Struktur** +- Mit der Zeit werden Zugriffe langsamer (Einfüge-/Löschoperationen) → Baum muss in Gleichgewicht gebracht werden (zeit- und speicheraufwendig) + +#### Merkmale +- Gut geeignet für: **Dateisysteme**, LDAP, Internet-Domänen, Stücklisten +- Datensätze können mehr als zwei Verweise enthalten → nicht nur binäre, sondern auch **n-äre Bäume** +- Knoten können auf Bäume mit anders strukturierten Datensätzen verweisen (Bäume/Unterbäume = Entitätstypen) +- Nicht-hierarchische Beziehungen: durch verkettete Listen implementiert + +#### IMS von IBM +- Älteste, bis heute eingesetzte hierarchische Datenbank +- Komponenten: Datenbank, IMS Explorer, IMS SOAP Gateway, IMS Java Connector, IMS Data Provider .NET + +### 10.2 Netzartige Datenbanken + +#### Konzept +- Entstehen aus hierarchischen DB durch **Verweisfelder für Rückwärtsbewegung** +- **Verallgemeinerung** der hierarchischen Datenbanken +- Unterschiedliche Entitätstypen vertreten, Beziehungen durch besondere Art der Datensätze modelliert + +#### Vorteile +- Theoretisch vielfältige Verweise möglich + +#### Nachteile +- Unflexible netzartige Struktur +- Modellierung der Beziehungen eingeschränkt +- Saubere Trennung der Entitätstypen kaum möglich + +#### Merkmale +- Geeignet für: **geografische Elemente**, Makrostrukturen des Internets +- Jeder Knoten kann mehrere Vorgänger und Nachfolger haben +- Semantische Darstellung der Beziehungen meist programmiert +- Bekannter Vertreter: **UDS** (Universal Datenbank System) von Siemens +- Ca. 20 Jahre im Einsatz, dann durch **relationale Datenbanken verdrängt** + +### 10.3 Verteilte Datenbanken + +#### Konzept +- **Verbund von mehreren** (meist relationalen) Datenbanken +- Zusammenfassung von Informationseinheiten auf **mehreren Knoten** (Computern), über ein Netzwerk verbunden +- **Metadaten** (Zugriffsdaten) in einer übergeordneten Datenbank zusammengefasst +- Verteilte Transaktionen bestehen aus Teil-Transaktionen in den Komponenten-Datenbanken + +#### Vorteile +- Optimale Darstellung der Unternehmensstruktur durch lokale Datenbestände +- Unabhängigkeit der Teil-Datenbanken voneinander +- Orts-, Plattform- und Netzwerkunabhängigkeit +- Ständiger Betrieb +- Effizienz durch parallele Verarbeitung +- Transparenz der Anfragen und Anweisungen +- Ergebnis- statt Sourcedaten-Transfer + +#### Nachteile +- Vorbereitungsaufwand (Konzepte, Planung, Koordination) +- Zusätzliche Administration der Metadaten (Backup/Restore, Konsistenz) +- Aufwendige Entwicklung der Abfragen +- Abhängigkeit von Lauffähigkeit der einzelnen Teil-Datenbanken + +#### Entwurf + +Wie bei konventionellen relationalen DB, plus zusätzliche Schritte: +1. **Fragmentierungsschema** erstellen +2. **Zuordnungsschema** erstellen + +#### Fragmentierung + +Relationen werden in disjunkte Fragmente zerlegt: +- **Horizontale Zerlegung** – Datensätze nach Kriterien zusammengefasst (z.B. Status='Prof') +- **Vertikale Zerlegung** – Attribute zusammengefasst (z.B. Vorname + Nachname) +- **Kombinierte Zerlegung** – horizontal + vertikal + +Anforderungen: +- **Vollständigkeit** – Rekonstruktion ergibt vollständige Datenbank +- **Disjunktion** – Fragmente überlappen sich nicht + +#### Zuordnung (Allocation) +- Fragmente auf Knoten verteilen (theoretisch redundanzfrei) +- Aus Sicherheits-/Leistungsgründen: **Replikation** +- Benutzer arbeiten idealerweise nur mit dem Gesamtschema (Transparenz) + +#### Verteilte Transaktionen +- DBMS muss globale Transaktion in **Teil-Transaktionen** zerlegen +- Entweder alle erfolgreich oder alle zurückgesetzt +- Jede Teil-DB muss **UNDO- und REDO-Funktionalität** beherrschen +- **Two-Phase-Commit**: prepare → ready/failed → commit/abort + +### 10.4 Objektorientierte Datenbanken + +#### Konzept +- Idee der OO: Daten und Aktionen (Methoden) zusammen bringen → **Kapselung** +- Idee der DB: Daten und deren **Beziehungen** modellieren, unabhängig von Aktionen +- Diese beiden Ideen sind **schwer zu vereinbaren** + +#### Eigenschaften +- Vorteilhaft bei **Klassenhierarchien** unter Daten +- Komplexe Objekte speicher- und abrufbar +- **Keine Normalisierung** +- Abfragen langsamer als bei relationalen DB +- Geringe Kompatibilität zu allgemeinen Anwendungen + +#### Beispiele +- **db4o** – geringe Speichergröße, für Java/.NET, keine SQL-Abfragesprache (QBE wird unterstützt), unterstützt Transaktionen (COMMIT, ROLLBACK) +- **Oracle** – objektrelationaler Ansatz: Objekttypen (analog zu Klassen) mit Daten, Funktionen und Prozeduren, instanziierbar in PL/SQL + +### 10.5 No-SQL-Datenbanken (Not only SQL) + +#### Konzept +- **No-SQL = Not only SQL** – betont die Existenz anderer Datenbanken neben relationalen +- Relationale DB bleiben wichtig für Anwendungen mit strengen Konsistenz-/Sicherheitsanforderungen + +#### Gründe für No-SQL +- Enorm große Datenvolumen (TiB- und PiB-Bereiche) +- Kurze Laufzeiten der Abfragen nötig +- Konsistenz nicht vorrangig (Daten meist nur abgefragt) +- **Verfügbarkeit vor Konsistenz** (z.B. DNS) +- Speicher für relationale DB wird teuer + +#### Eigenschaften +- Einfaches/schwaches/kein Schema +- Einfache horizontale und vertikale **Skalierung** (horizontal bevorzugt) +- **BASE-Prinzip** statt ACID +- Keine Normalformen, keine JOINs, denormalisiert +- Hohe Leistung und Verfügbarkeit dank **Replikation** + +#### BASE vs. ACID + +| BASE | ACID | +|---|---| +| **B**asically **A**vailable – Verfügbarkeit ggf. auf Kosten der Konsistenz | **A**tomic – Transaktion ununterbrechbar | +| **S**oft State – Konsistenz an Entwickler delegiert | **C**onsistent – konsistenter Zustand gewährleistet | +| **E**ventually Consistent – Abfragen auch bei inkonsistentem Zustand | **I**solated – Transaktionen verletzen einander nicht | +| | **D**urable – ausgefallene Transaktion gefährdet eigene Daten nicht | + +#### Document-Stores +- **Schemafrei**, Daten in Dokumenten mit eindeutiger ID +- Keine einheitliche Struktur, verschachtelbar +- Felder können verschiedene Datentypen und Arrays haben +- Hohe Skalierbarkeit +- Beispiele: **MongoDB, CouchDB** (halb-strukturierte Formate: XML, JSON) +- Nachteil: keine Normalisierung → Datenredundanz möglich, Konsistenz durch Anwendung + +#### Key-Value-Stores +- Nur **Schlüssel und zugehörige Werte** gespeichert +- Einfaches Schema, Schlüssel sortierbar +- Werte: Zahlen, Zeichenketten, Listen, Dokumente, Tabellen (nicht einheitlich) +- Daten im **Hauptspeicher (In-Memory)** oder auf Datenträger (On-Disc) +- Beispiele: **Berkeley DB, Redis, Amazon DynamoDB** +- Schnelle einfache Abfragen, aber komplexe Beziehungen schwer zu implementieren + +#### Wide-Column-Stores +- Datensätze haben **unterschiedliche Struktur** (schemafrei) +- Milliarden von Feldern pro Datensatz möglich +- Feldstruktur: Spaltenname (Schlüssel), Daten, Zeitstempel +- **Column Families** für zusammenhängende Spalten +- Beispiele: **MS Azure Cosmos DB, Cassandra** +- Gut für Big Data Analytics / DWH +- Nicht verwechseln mit spaltenorientierten relationalen DB (die haben festes Schema) + +#### XML-Datenbanken +- Daten im **XML-Format** gespeichert +- Abfragesprache: **XPath** +- Beispiel: **BaseX** +- Schnell für ganze Dokumente, langsam bei großen Datenmengen +- Fehlende Operationen wie COMMIT, ROLLBACK +- Eher **Verarbeitungssysteme für XML-Dokumente** als echte Datenbanken + +#### Graph-Datenbanken +- Daten in drei Klassen: **Knoten, Attribut, Kante** (Graph-Struktur) +- Knoten = Tupel (Datensätze), Kanten = Beziehungen +- Effektiv für **"wer-kennt-wen"**-Informationen +- Nachteile: keine einheitliche Abfragesprache, keine direkten Zugriffe auf Knoten via Attributen + +### Fazit + +Die No-SQL-Datenbanken sind **sehr effektiv in ihrem Spezialgebiet**. Relationale DB bleiben wichtig für Anwendungen mit strengen Konsistenz-/Sicherheitsanforderungen. + +--- + +## 11. Gesamtübersicht & Cheat-Sheet + +### 11.1 Datenbankentwicklungsprozess (Phasenmodell) + +``` +Anforderungsanalyse + ↓ +Konzeptueller Entwurf → ERM (Peter-Chen-Notation) + ↓ +Logischer Entwurf → Relationale Tabellen (Konvertierungsregeln) + ↓ +Normalisierung → 1NF → 2NF → 3NF → BCNF → 4NF → 5NF + ↓ +Physischer Entwurf → Tablespaces, Indizes, Storage-Parameter + ↓ +Implementierung → SQL (DDL + DML) + Constraints + Trigger + ↓ +Betrieb → Transaktionen, Backup, Rechte, Monitoring +``` + +### 11.2 ERM → Relationale Tabellen – Kurzreferenz + +| ERM-Element | Konvertierungsregel | +|---|---| +| Entitätstyp | Eigene Tabelle; alle Attribute inkl. PK | +| N:M-Beziehung | Eigene Beziehungstabelle; PKs beider Seiten = PK der Beziehungstabelle | +| 1:N-Beziehung | Kein eigene Tabelle; PK der 1-Seite als FK in die N-Seite | +| 1:1-Beziehung | Option A: Zusammenführen; Option B: FK in eine der Tabellen | +| Schwache Entität | Eigene Tabelle; PK der starken Entität wird **Teil des PK** | +| Generalisierung | Obertyp-Tabelle + je eine Untertyp-Tabelle (PK des Obertyps als FK) | +| Mehrwertige Attribute | Eigene Tabelle + 1:N-Beziehung zur Entitätstabelle | + +### 11.3 Normalformen – Kurzreferenz + +| NF | Verletzung erkennen | Lösung | +|---|---|---| +| **1NF** | Zelle enthält mehrere Werte / Liste | Aufteilen in separate Zeilen oder Tabelle | +| **2NF** | Nicht-PK-Feld hängt nur von *Teil* des zusammengesetzten PK ab | Auslagern in neue Tabelle mit Teilschlüssel als PK | +| **3NF** | Nicht-PK-Feld hängt von einem anderen Nicht-PK-Feld ab (transitive Abhängigkeit) | Auslagern; abhängiges Feld wird PK neuer Tabelle | +| **BCNF** | Teil eines Schlüsselkandidaten hängt von Teil eines anderen Schlüsselkandidaten ab (Überlappung) | Aufteilen nach Schlüsselkandidaten | +| **4NF** | Nicht-PK-Felder sind semantisch unabhängig (unterschiedliche Verwendungshäufigkeit) | Nach Semantik trennen | +| **5NF** | Tabelle kann verlustfrei in kleinere Tabellen zerlegt werden | Vollständig zerlegen (JOIN-Rekonstruktion muss möglich sein) | + +### 11.4 Relationale Algebra – Vollständiger Operatorensatz + +| Operator | Notation | SQL | Grundoperator | +|---|---|---|---| +| **Selektion** | σ_P(R) | WHERE P | Ja | +| **Projektion** | π_A(R) | SELECT A | Ja | +| **Kartesisches Produkt** | R₁ × R₂ | CROSS JOIN | Ja | +| **Umbenennung** | ρ_alias(R) | AS alias | Ja | +| **Vereinigung** | R₁ ∪ R₂ | UNION | Ja | +| **Differenz** | R₁ — R₂ | MINUS / EXCEPT | Ja | +| **Schnittmenge** | R₁ ∩ R₂ | INTERSECT | Nein (= R₁ — (R₁ — R₂)) | +| **Join (Theta/Inner)** | R₁ ⋈_P R₂ | INNER JOIN ... ON P | Nein (= σ_P(R₁ × R₂)) | +| **Natural Join** | R₁ ⋈ R₂ | NATURAL JOIN | Nein | +| **Left Outer Join** | R₁ ⟕ R₂ | LEFT OUTER JOIN | Nein | +| **Right Outer Join** | R₁ ⟖ R₂ | RIGHT OUTER JOIN | Nein | +| **Full Outer Join** | R₁ ⟗ R₂ | FULL OUTER JOIN | Nein | +| **Semi-JOIN L** | L ⋉ R | SELECT L.* ... INNER JOIN | Nein | +| **Anti-Semi-JOIN L** | L ⊲ R | NOT IN / NOT EXISTS | Nein | + +### 11.5 SQL – Vollständige SELECT-Syntax + +```sql +SELECT [DISTINCT] spalten | * -- Projektion (π) + [, aggregatfunktion(spalte) [AS alias]] +FROM tabelle1 [alias1] -- Quellen (×) + [JOIN tabelle2 ON bedingung] -- Verbund (⋈) + [(SELECT ...) AS inline_view] -- Inline View +WHERE filterbedingung -- Selektion (σ) + [AND | OR | NOT weiteresBedingung] + [AND spalte LIKE 'muster'] + [AND spalte IN (wert1, wert2)] + [AND spalte IS [NOT] NULL] +GROUP BY gruppierungsspalten -- Gruppierung +HAVING aggregatbedingung -- Gruppenfilter +ORDER BY sortierspalte [ASC | DESC]; -- Sortierung +``` + +### 11.6 Transaktionen – ACID und Isolationsstufen + +| Problem | Tritt auf bei | Gelöst durch | +|---|---|---| +| **Lost Update** | Zwei parallele Updates auf gemeinsamer Variable | SERIALIZABLE | +| **Dirty Read** | Lesen nicht-committeter Änderungen | READ COMMITTED (Oracle-Standard) | +| **Non-Repeatable Read** | Zweifaches Lesen liefert andere Werte | SERIALIZABLE | +| **Phantom Read** | Zweifaches COUNT liefert andere Anzahl | SERIALIZABLE | + +| Isolationsstufe | Lost Update | Dirty Read | NR Read | Phantom | Oracle | +|---|---|---|---|---|---| +| READ UNCOMMITTED | ✗ | möglich | möglich | möglich | nicht verfügbar | +| READ COMMITTED | ✗ | verhindert | möglich | möglich | **Standard** | +| REPEATABLE READ | ✗ | verhindert | verhindert | möglich | nicht verfügbar | +| SERIALIZABLE | verhindert | verhindert | verhindert | verhindert | verfügbar | + +### 11.7 Speicherstrukturen – Oracle-Hierarchie + +``` +Datenbank + └── Tablespace (eine pro Anwendung) + └── Datenbankdatei (.dbf) + └── Segment / Extent (erweiterbare Speichereinheit) + └── Block (kleinste I/O-Einheit) + +Arbeitsspeicher: + ├── SGA (System Global Area) + │ ├── Database-Buffer-Cache (aktuelle Datenblöcke) + │ ├── Dirty List (geänderte, noch nicht geschriebene Blöcke) + │ ├── Redo-Log-Buffer (Änderungsprotokoll für Crash-Recovery) + │ ├── Shared Pool (SQL-Parsing, Data Dictionary) + │ ├── Large Pool (Recovery Manager) + │ └── Java Pool (Java-Anwendungen) + ├── PGA (Program Global Area) – Prozesssteuerung + └── UGA (User Global Area) – Sitzungsdaten je Benutzer +``` + +### 11.8 Backup-Entscheidungsmatrix + +| Kriterium | Normal | Inkrementell | Differenziell | Kopie | +|---|---|---|---|---| +| Umfang | Alle ausgewählten Daten | Seit letzter Sicherung | Seit letzter Normal | Wie Normal | +| Als gesichert markiert? | Ja | Ja | Nein | Nein | +| Wiederherstellung | Diese Sicherung allein | Letzte Normal + alle Inkrementellen | Letzte Normal + letzte Differenzielle | — | +| Speicherbedarf | Hoch | Gering | Mittel | Hoch | +| Wiederherstellungsaufwand | Gering | Hoch | Mittel | — | + +### 11.9 OLTP vs. OLAP vs. Data Warehouse + +| Merkmal | OLTP | OLAP / DWH | +|---|---|---| +| Zweck | Tagesgeschäft | Analyse / Entscheidungsunterstützung | +| Abfragen | Vorhersehbar, einfach, einzelne Sätze | Komplex, ad-hoc, viele Zeilen | +| Daten | Ständige Änderungen | Statisch, historisiert, Nur-Lesen | +| Schema | Normalisiert (3NF) | Denormalisiert (Star/Snowflake) | +| Transaktionen | Häufig, kurz | Selten / keine | +| Benutzer | Viele operative Benutzer | Wenige Analytiker / Manager | +| Index-Typ | Konventionell (B-Tree) | Bitmap-Indizes (geringe Kardinalität) | + +### 11.10 No-SQL-Datenbanken – Vergleich + +| Typ | Struktur | Beispiele | Stärke | Schwäche | +|---|---|---|---|---| +| **Document-Store** | Dokumente (JSON/XML) | MongoDB, CouchDB | Flexibles Schema | Keine Normalisierung | +| **Key-Value-Store** | Schlüssel → Wert | Redis, DynamoDB, Berkeley DB | Extrem schnell | Keine komplexen Beziehungen | +| **Wide-Column-Store** | Spaltenorientiert, schemafrei | Cassandra, Azure Cosmos DB | Milliarden Felder, Big Data | Kein festes Schema | +| **XML-Datenbank** | XML + XPath | BaseX | Dokumentverarbeitung | Kein COMMIT/ROLLBACK | +| **Graph-Datenbank** | Knoten + Kanten | Neo4j u.a. | Beziehungsgeflechte | Keine einheitliche Abfragesprache | +| **Relational** | Tabellen, Normalisierung | Oracle, PostgreSQL, MySQL | ACID, SQL, Flexibilität | Skalierung bei extremen Datenmengen | + +### 11.11 Wichtige Begriffe – Schnellreferenz + +| Begriff | Definition | +|---|---| +| **Relation** | Untermenge des kartesischen Produkts mehrerer Datentypen = Tabelle | +| **Tupel** | Zeile / Datensatz in einer Relation | +| **Attribut / Feld** | Spalte in einer Relation | +| **Schema** | Namen aller Felder + Datentypen + Länge + Reihenfolge | +| **Primärschlüssel (PK)** | Minimaler Schlüssel, der Tupel eindeutig identifiziert | +| **Fremdschlüssel (FK)** | Attribut, das auf PK einer anderen Tabelle verweist | +| **Kardinalität** | Anzahl der Tupel in einer Relation | +| **Grad** | Anzahl der Attribute einer Relation | +| **Funktionale Abhängigkeit** | X → Y: X bestimmt Y eindeutig | +| **Transaktion** | Atomare Folge von Operationen (alles oder nichts) | +| **ACID** | Atomicity, Consistency, Isolation, Durability | +| **BASE** | Basically Available, Soft State, Eventually Consistent | +| **Deadlock** | Zwei Transaktionen warten gegenseitig aufeinander | +| **Serialisierbarkeit** | Parallele Ausführung entspricht in der Wirkung einer seriellen | +| **ETL** | Extract, Transform, Load (Befüllung eines DWH) | +| **OLTP** | Online Transaction Processing (Tagesgeschäft) | +| **OLAP** | Online Analytical Processing (Analyse) | +| **Hypercube** | Mehrdimensionaler Datenwürfel als Basis für OLAP | +| **Tablespace** | Logischer Container für Datenbankobjekte in Oracle | +| **Redo-Log** | Protokoll durchgeführter Änderungen (für Crash-Recovery) | +| **Rollback-Segment** | Speicher für Datenzustand vor Änderungen (für UNDO) | diff --git a/Datenbanken/Zusammenfassungen/b_Modellierung - zusammenfassung.md b/Datenbanken/Zusammenfassungen/b_Modellierung - zusammenfassung.md new file mode 100644 index 0000000..470972a --- /dev/null +++ b/Datenbanken/Zusammenfassungen/b_Modellierung - zusammenfassung.md @@ -0,0 +1,417 @@ +# Modellierung – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–112** + +--- + +## 1. Einführung (Folien 1–32) + +### 1.1 Definitionen (Folien 3–6) + +**Charakteristik der Informationen im Unternehmen:** +- Informationen bilden Entscheidungsgrundlagen +- Informationen können aus unterschiedlichen Quellen stammen +- Qualität hängt von Verfügbarkeit, Korrektheit und Vollständigkeit ab +- Erhebung, Speichern und Verarbeiten erzeugt Aufwände +- Aufgabengebiete sind durch Informationsbeziehungen verknüpft + +**Aspekte des Datenmanagements:** +- Architektur (Datenmodellierung) +- Datentechnik (Hardware, Installation, Reorganisation, Sicherung) +- Administration und Datennutzung + +**Anforderungen an Datenverwaltung:** +- Zentrale Verwaltung der Daten +- Vermeidung/Einschränkung von Redundanzen +- Vermeidung von Inkonsistenzen +- Gemeinsame Nutzung durch verschiedene Anwendungen +- Datenschutz und Datensicherung +- Datenintegrität +- Datenunabhängigkeit von Anwendungen + +**Definitionen:** +- **Daten** = Logisch strukturierte Informationseinheiten +- **Datenbank** = Einrichtung für langfristige sichere Aufbewahrung von Daten + +### 1.2 Modellierung (Folien 7–9) + +Ein **Modell** ist ein Abbild der realen Welt, das man mit Absicht erstellt, um bestimmte Probleme zu lösen. + +**Modellbildungsprozess:** +Reales Problem → Modell → Analyse/Simulation → Theoretische Lösung → Interpretation → Überprüfung → Reale Lösung + +**Kriterien eines Modells nach Heinrich Hertz:** +1. **Richtigkeit** — Nicht beweisbar, nur durch Experimente überprüfbar und widerlegbar +2. **Zulässigkeit** — Logisch eindeutig formuliert, ohne Widersprüche +3. **Zweckmäßigkeit** — Keine überflüssigen Anteile; so einfach wie möglich, so kompliziert wie nötig + +**Modellierungsansätze:** Verschiedene Modellierungssprachen führen zu verschiedenen semantischen Datenmodellen. Praktische Bedeutung haben insbesondere **Entity-Relationship-Modellierung (ERM)** und **UML**. Gängige Vorgehensweise: Erst ER-Modell, dann Konvertierung in relationales Modell. + +### 1.3 Datenhaltung (Folien 10–14) + +Zwei grundsätzliche Formen: +1. **Herkömmliche Form (Dateien):** Datenverwaltung in die Anwendung integriert → enormer Entwicklungsaufwand, kaum Datenaustausch +2. **Datenbanken:** Datenbank = Datenmanagement + Daten. DBMS übernimmt Speicherung, Aufruf, Änderungen, Sortieren, Sicherungen + +**Vorteile von Datenbanken gegenüber Dateien:** +- Reduktion der Entwicklungskosten +- Flexible Verarbeitung und Darstellung +- Vermeidung von Redundanzen, Inkonsistenzen, Datenverlust +- Zugriffskontrolle +- Mehrbenutzerbetrieb +- Hohe Verfügbarkeit + +**Dateien statt Datenbanken empfohlen bei:** +- Sehr kleinen, nicht-kommerziellen Anwendungen +- Systemnahen Anwendungen +- Verschiedenen Testumgebungen +- Groben konzeptuellen Entwicklungen + +### 1.4 Architektur (Folien 15–18) + +**Client/Server-Architektur:** +- **Client** nimmt die Ressource in Anspruch (z. B. Darstellung) +- **Server** stellt die Ressource zur Verfügung (z. B. Bearbeitung) + +**Oracle-Architektur:** +- SQL-Plus, SQL-Developer, Oracle Instant Client → Listener → Dispatcher → DBMS-Instanzen → Datenbestände +- Multi-Tenant-Container und Real Application Cluster (RAC) + +**SQLite-Architektur (keine Client/Server-Architektur):** +- DBMS-Instanz direkt in die Anwendung eingebettet +- Datenbestand als Dateien im Dateisystem + +### 1.5 Datenbankbenutzer (Folien 19–20) + +| Rolle | Aufgaben | +|---|---| +| **DBA (Datenbankadministrator)** | DB-Design, Softwareinstallation/-wartung, Speicherplatzverwaltung, Sicherheitsmechanismen, Backup/Recovery, Reorganisation, Systembeobachtung/Tuning | +| **Anwendungsentwickler** | Systemanalyse, SQL, Standard-Abfragen, Anwendungsentwicklung | +| **Endanwender** | Benutzung erstellter Programme, vorgefertigte/Ad-Hoc-Abfragen, QBE-Werkzeuge | + +### 1.6 Entwicklung (Folien 21–24) + +- **1960er Jahre:** Jede Anwendung hat eigenes Datenmanagement und eigene Daten +- **1970er Jahre:** Gemeinsames Datenmanagement, aber noch getrennte Datenbestände +- **Heute:** Gemeinsames Datenmanagement und gemeinsame Datenbestände + +Zugriff auf Datenbanken erfolgt programmatisch z. B. über **JDBC** (Java Database Connectivity). + +### 1.7 Arten von Datenbanken (Folien 25–28) + +| Art | Status | +|---|---| +| Hierarchische Datenbanken | Heute selten verwendet | +| Netzartige Datenbanken | Heute selten verwendet | +| Dokumentenbasierte Datenbanken | Selten verwendet (z. B. MongoDB) | +| Key-Value-Datenbanken | Begrenzte Bedeutung (z. B. BerkeleyDB) | +| Objektorientierte Datenbanken | Vorhanden | +| **Relationale Datenbanken** | **Heute fast ausschließlich verwendet** | + +**Warum relationale Datenbanken dominieren:** +- Beziehungen und Entitäten werden gleich dargestellt → derselbe Verarbeitungsmechanismus +- Relationale Algebra liefert umfangreiche und fortgeschrittene Operationen +- Alle anderen DB-Typen lassen sich damit emulieren + +### 1.8 Prinzipien von E.F. Codd (Folien 29–32) + +Die **12 Regeln von Codd** definieren eine relationale Datenbank: + +1. Vollständige Verwaltung über relationale Fähigkeiten +2. **Darstellung von Informationen:** Alle Informationen als Werte in Tabellen +3. **Zugriff auf Daten:** Über Tabellenname + Primärschlüssel + Spaltenname +4. **Systematische Behandlung von Nullwerten:** Durchgängig gleich als unbekannt/fehlend +5. **Struktur:** Systemkatalog auf derselben logischen Ebene wie die Daten +6. **Abfragesprache:** Mindestens eine Sprache mit vollständigem Befehlssatz (DDL, DML, Integrität, Autorisierung, Transaktionen) +7. **Aktualisieren von Sichten:** Theoretisch aktualisierbare Sichten müssen vom System aktualisierbar sein +8. **Abfragen und Bearbeiten:** Unterstützung für Einfügen, Aktualisieren und Löschen ganzer Tabellen +9. **Physikalische Datenunabhängigkeit:** Logischer Zugriff unabhängig von physikalischen Methoden +10. **Logische Datenunabhängigkeit:** Tabellenstruktur-Änderungen ohne Einfluss auf Anwendungslogik +11. **Unabhängigkeit der Integrität:** Integritätsregeln in der DB-Sprache definierbar, nicht umgehbar +12. **Verteilungsunabhängigkeit:** Logischer Zugriff unverändert bei verteilten Datenbanken + +--- + +## 2. Mengenlehre (Folie 33) + +Die Mengenlehre bildet die mathematische Grundlage der Theorie relationaler Datenbanken. Behandelt in separatem Skript (b_Mengenlehre). Themen: Definition, Eigenschaften, Operationen, Zahlenmengen, Dimensionen. + +--- + +## 3. ANSI-SPARC-Modell (Folien 34–38) + +### 3.1 Drei-Schichten-Architektur (Folien 35–37) + +Das ANSI-SPARC-Modell gewährleistet Unabhängigkeit der Datenbank von Programmiersprache und Hardware: + +| Ebene | Bezeichnung | Inhalt | +|---|---|---| +| **Externe Ebene** | Anwendungs-Ebene | Benutzeroberflächen, Datensichten, API, Schnittstellen. Jede Sicht zeigt nur einen Teil der Daten | +| **Konzeptionelle Ebene** | Logische Ebene | Beziehungen, Daten. Relationales Datenmodell, ERM-Diagramme, Integritätsbedingungen, Zugriffsrechte | +| **Interne Ebene** | Physische Ebene | Art und Form der Speicherung. Dateien, Partitionen, Tablespaces, Zugriffsmechanismen | + +### 3.2 Phasen des Datenbankentwurfs (Folie 38) + +1. **Anforderungsanalyse** → Spezifikation (Pflichtenheft) +2. **Konzeptueller Entwurf** → Konzeptuelles Schema (ERM) +3. **Logischer Entwurf** → Logisches Schema (Tabellen) +4. **Physischer Entwurf** → Physisches Schema (Datenträger) + +--- + +## 4. Anforderungsanalyse (Folien 39–50) + +### 4.1 Kurzfassung (Folien 40–42) + +Im Laufe der Anforderungsanalyse wird erfasst: +- Welche Abteilungen mit der DB arbeiten +- Welche Geschäftsprozesse unterstützt werden +- Welche Daten involviert werden +- Wie die Daten strukturiert sind +- Qualitative und quantitative Anforderungen + +**Schritte nach A. Kemper:** +1. Identifikation von Organisationseinheiten +2. Identifikation der zu unterstützenden Aufgaben +3. Anforderungs-Sammelplan (zu befragende Personen) +4. Anforderungs-Sammlung +5. Filterung (Verständigkeit und Eindeutigkeit prüfen) +6. Satzklassifikationen (Objekte, Beziehungen, Operationen, Ereignisse) +7. Formalisierung/Systematisierung (ins Pflichtenheft übertragen) + +**Ergebnisse der Anforderungsanalyse:** +- **Informationsanforderungen:** Beschreibung von Objekten/Attributen und Beziehungen/Attributen +- **Datenverarbeitungsanforderungen:** Beschreibung von Prozessen + +### 4.2 Beispiel: Universitätsschema (Folien 43–46) + +Drei Arten von Beschreibungen: + +**Objektbeschreibung** (z. B. Uni-Angestellte): +| Attribut | Typ | Länge | Identifizierend | Beispiel | +|---|---|---|---|---| +| PersonalNr | Char | 10 | ja | 1234561234 | +| Gehalt | Dezimal | 8.2 | nein | 9000.11 | +| Rang | String | 4 | nein | W3 | + +**Beziehungsbeschreibung** (z. B. prüfen): +- Beteiligte Objekte: Professor (Prüfer), Student (Prüfling), Vorlesung (Lehrstoff) +- Attribute: Datum, Uhrzeit, Note + +**Prozessbeschreibung** (z. B. Zeugnisausstellung): +- Häufigkeit, Priorität, benötigte Daten, Datenmenge + +### 4.3 Beispiel: Krankenhaus-Modell (Folien 47–50) + +Objekte: Ärzte, Pflegepersonal, Patienten mit deren Beziehungen (behandelt, betreut) und Prozessen (Behandlungsplan erstellen). + +--- + +## 5. Konzeptueller Entwurf (Folien 51–87) + +### 5.1 Entity-Relationship-Modell (ERM) (Folien 51–54) + +Auf Basis der Anforderungsanalyse wird ein konzeptuelles ERM erstellt. Das konkrete DBMS wird noch nicht betrachtet. + +**Beispiele:** +- **Uni-Schema:** Studenten, Vorlesungen, Professoren, Assistenten mit Beziehungen hören, prüfen, lesen, arbeitenFür, voraussetzen +- **Krankenhaus-Schema:** Arzt, Patient, Pflegepersonal mit Beziehungen behandelt, betreut + +### 5.2 Modellierungsstrukturen in Peter-Chen-Notation (Folie 55) + +| Element | Grafische Darstellung | Bedeutung | +|---|---|---| +| **Entitätstypen** | Rechteck | Objekte der realen Welt | +| **Beziehungstypen** | Raute | Bindungen zwischen Entitäten | +| **Attribute** | Oval/Kreis | Charakteristiken von Entitäten und Beziehungen | +| **Funktionalitäten** | Beschriftung an Verbindungslinien | Kardinalität der Beziehungen | +| **Schlüssel** | Unterstrichene Attribute | Identifizierende Attribute | +| **Rollen** | Beschriftung bei rekursiven Beziehungen | Rolle einer Entität in der Beziehung | + +### 5.3 Entitätstypen (Folie 56) + +Gegenstände sind Objekte der realen Welt, die zu **Gegenstandstypen (Entitätstypen)** abstrahiert werden: +- "Zimmermann", "Merkel", "Meier" → **Mensch** +- "VW", "Mercedes", "BMW" → **Auto** + +Man arbeitet ausschließlich mit Entitätstypen (abstrakte Klassen), nicht mit einzelnen Instanzen. + +### 5.4 Beziehungstypen (Folie 57) + +Beziehungen drücken Bindungen zwischen Entitäten aus. Nicht alle Entitätstypen müssen verbunden sein, aber ein alleinstehender Entitätstyp ohne Beziehung ist verdächtig. + +### 5.5 Attribute (Folien 58–62) + +**Attributierte Beziehungen:** Wenn beide Entitätstypen semantisch gleiche Attribute haben, werden diese dem Beziehungstyp zugeordnet (z. B. Betrag bei "Kredit geben" zwischen Kunde und Bank). + +**Entscheidung Entitätstyp vs. Attribut:** +- Wird etwas durch anderes beschrieben → das Beschriebene ist Entitätstyp, das Beschreibende ist Attribut +- Kann etwas durch nichts weiteres beschrieben werden → es ist ein Attribut + +**Attributtypen:** + +| Typ | Beschreibung | Beispiel | +|---|---|---| +| **Einfach** | Ein Wert zu einem Zeitpunkt | Name = "Müller" | +| **Mehrwertig** | Mehrere Werte gleichzeitig | Ampel: rot + gelb | +| **Zusammengesetzt** | Besteht aus Teilattributen | Adresse: PLZ + Ort + Straße | +| **Abgeleitet** | Aus anderen Attributen berechnet | Bruttopreis = Netto × (1 + MwSt) | + +### 5.6 Schlüssel und Primärschlüssel (Folien 63–65) + +- **Schlüssel:** Attributmenge, deren Werte eine Entität eindeutig identifizieren +- **Schlüsselkandidaten:** Mehrere mögliche Schlüssel +- **Primärschlüssel (PK):** Der Kandidat mit minimaler Länge, im ERM unterstrichen +- **Minimaler Schlüssel:** Keine Untermenge des PK bildet selbst einen Schlüssel +- **Wichtig:** Wahl eines anderen PK ändert das gesamte Modell + +### 5.7 Rekursive Beziehungen (Folie 66) + +Beziehungen zwischen Entitäten desselben Entitätstyps. Dabei werden **Rollen** zugeschrieben. + +**Beispiele:** +- Vorlesungen → voraussetzen (Vorgänger/Nachfolger) +- Softwareprodukt → Versionsnummer +- Polizisten → im Zweierteam patrouillieren + +### 5.8 Funktionalitäten (Folien 67–76) + +Funktionalität gibt an, wie viele Instanzen in einer Beziehung teilnehmen: + +| Typ | Beschreibung | Beispiel | +|---|---|---| +| **1:1** | Einer Entität aus E1 entspricht höchstens eine aus E2 (und umgekehrt) | Persönliche Daten ↔ Ansprechdaten | +| **1:N** | Einer aus E1 entsprechen mehrere aus E2, aber einer aus E2 höchstens eine aus E1 | Schüler → Fahrausweise | +| **N:M** | Mehrere aus E1 entsprechen mehreren aus E2 | Studenten ↔ Vorlesungen (hören) | + +**Auflösung einer M:N-Beziehung:** Wird in zwei 1:N-Beziehungen aufgebrochen durch Einführung eines neuen Entitätstyps (z. B. Hersteller ↔ Lieferant → Hersteller → Herstlr_Liefrnt ← Lieferant). + +### 5.9 (min,max)-Notation (Folien 77–78) + +Genauere Angabe der Kardinalitäten als Standardfunktionalitäten: +- **min = 0:** Entitäten, die an keiner Beziehung teilnehmen +- **max = *:** Beliebig viele Entitäten + +**Beispiel Polyeder:** +- Polyeder (4,*) — Hülle — (1,1) Flächen +- Flächen (3,*) — Grenze — (2,2) Kanten +- Kanten (2,2) — StartEnde — (3,*) Punkte + +### 5.10 Mehrstellige Beziehungen (Folien 79–80) + +- **Ternäre Beziehung:** Zwischen 3 Entitätstypen +- **n-äre Beziehung:** Zwischen n Entitätstypen +- Sollten möglichst in binäre Beziehungen umgewandelt werden +- Beispiel: "prüfen" (Student, Vorlesung, Professor) → neuer Entitätstyp "Prüfungen" mit binären Beziehungen + +### 5.11 Spezielle Konzepte (Folien 82–87) + +#### Komposition / Schwache Entitäten (Folie 83) +Existenz eines Entitätstyps ist von der Existenz eines anderen abhängig (**has-a**). +- Beispiel: Konto existiert nur in Zusammenhang mit einer Bank + +#### Generalisierung (Folien 84–86) +Abstraktion auf Ebene der Entitätstypen (**is-a**). Gemeinsame Eigenschaften werden in einen **Obertyp** ausgelagert, spezifische bleiben bei den **Untertypen**. +- Beispiel: Lebensmittel (gültig bis) und Eisenwaren (Garantiefrist) → Obertyp **Produkt** (Bezeichnung, Hersteller) + +#### Aggregation (Folie 87) +Verschiedene Entitätstypen bilden in ihrer Gemeinsamkeit einen neuen Entitätstyp (**has-a**). +- Beispiel: Fahrrad besteht aus Rahmen (Rohre, Lenker) und Rad (Speiche, Felge) + +--- + +## 6. Logischer Entwurf (Folien 88–112) + +### 6.1 Definitionen (Folien 89–90) + +- **Datentyp** = Werte + Operationen (z. B. integer: +, -, *, /, mod) +- **Relation** = Untermenge des kartesischen Produktes mehrerer Datentypen = **Tabelle** +- **Tupel** = Zeile (Record, Datensatz) +- **Feld** = Spalte (Attribut, Eigenschaft) +- **Schema** = Namen aller Felder + Datentypen + Länge + Reihenfolge + +### 6.2 Relationale Darstellung (Folien 91–93) + +**Vorteile des relationalen Modells:** +- Entitäten und Beziehungen werden gleich als Tabellen dargestellt +- Dieselben algebraischen Operationen für beide +- Mathematisch begründet durch E.F. Codd + +**Notation:** +``` +RelationsName = { [ Feld1:Datentyp1, Feld2:Datentyp2, ... ] } +``` +Beispiel: `Auto = { [ KFZ:string, Modell:string, Gewicht:real, Baujahr:integer ] }` +Primärschlüssel wird unterstrichen. + +### 6.3 Konvertierungsregeln ERM → Relational (Folie 93) + +**Regeln für Entitätstypen:** +1. Neue Tabelle (Entitäts-Tabelle) bilden +2. Alle Attribute des Entitätstyps inkludieren + +**Regeln für Beziehungstypen:** +1. Neue Tabelle (Beziehungs-Tabelle) bilden +2. Primärschlüssel aller verbundenen Entitätstypen inkludieren → bilden i.d.R. den PK der Beziehungstabelle +3. Attribute des Beziehungstyps inkludieren + +### 6.4 Vereinfachung der Darstellungen (Folien 94–106) + +#### 1:1-Beziehungen (Folien 95–97) +Zwei Optionen: +- **Option A:** Beide Entitäts-Tabellen zu einer Tabelle zusammenführen + Beziehungsattribute. Vorsicht: Datensätze können zu groß werden +- **Option B:** Beziehungs-Tabelle weglassen, PK einer Entitäts-Tabelle als FK in die andere aufnehmen + +#### 1:N-Beziehungen (Folien 98–99) +- Beziehungs-Tabelle weglassen +- In die Tabelle auf der **N-Seite** den PK der Tabelle auf der **1-Seite** als **Fremdschlüssel (FK)** einfügen +- Beziehungsattribute ebenfalls in die N-Seiten-Tabelle + +#### Schwache Entitäten (Folien 100–101) +- Eigene Tabelle für schwache Entität +- PK der referenzierten (starken) Entität wird **Teil des PK** der schwachen Entität (Unterschied zu normalen 1:N-Beziehungen, wo der FK nicht Teil des PK wird) + +### 6.5 Beispiel: Uni-Schema als Tabellen (Folien 102–103) + +| Tabelle | Felder | +|---|---| +| Professoren | PersNr, Name, Rang, Raum | +| Studenten | MatrNr, Name, Semester | +| Vorlesungen | VorlNr, Titel, SWS, gelesenVon (FK→Professoren) | +| Assistenten | PersNr, Name, Fachgebiet, Boss (FK→Professoren) | +| hören | MatrNr (FK), VorlNr (FK) | +| voraussetzen | Vorgänger (FK), Nachfolger (FK) | +| prüfen | MatrNr (FK), VorlNr (FK), PersNr (FK), Note | + +### 6.6 Wichtige Bemerkung (Folien 109–111) + +**Keine Felder/PK/FK willkürlich in Tabellen hinzufügen!** Nur laut Vereinfachungsregeln. + +**Ausnahmen:** +- ERM-bezogene Gründe (z. B. PID, MonsterID) +- Auditing/Richtlinien (z. B. "Alle Zeilen müssen fortlaufend nummeriert werden") +- Administrative Gründe (z. B. Fusion großer Datenmengen) +- Anwendungsbezogene Gründe (z. B. OO-DB pflegen PK selbst) + +**Kontroverse um künstliche IDs:** +Einige Autoren empfehlen ausdrücklich künstliche IDs, weil: +- PK soll keine semantischen Informationen enthalten +- PK darf sich nicht mit der Zeit ändern +- PK soll einfach aufgebaut sein (nicht aus mehreren Feldern) + +Im Unterricht wird auf diese Meinung verzichtet (Verständnis halber), obwohl sie in der Wirtschaft sehr verbreitet ist. + +--- + +## Zusammenfassung der Kernthemen + +| Thema | Kernaussage | +|---|---| +| Datenbank vs. Dateien | DB bietet Redundanzvermeidung, Mehrbenutzerbetrieb, Zugriffskontrolle | +| Codds 12 Regeln | Definieren eine relationale DB im strengen Sinne | +| ANSI-SPARC-Modell | Drei Ebenen: extern, konzeptionell, intern → Datenunabhängigkeit | +| Anforderungsanalyse | Objekt-, Beziehungs- und Prozessbeschreibungen erstellen | +| ERM – Peter-Chen | Entitäten (Rechteck), Beziehungen (Raute), Attribute (Oval), Schlüssel (unterstrichen) | +| Funktionalitäten | 1:1, 1:N, N:M; (min,max)-Notation für genaue Kardinalitäten | +| Spezielle Konzepte | Komposition (has-a, schwache Entität), Generalisierung (is-a), Aggregation (has-a) | +| Logischer Entwurf | ERM → Tabellen; Vereinfachung bei 1:1 und 1:N durch Wegfall der Beziehungstabelle | +| Fremdschlüssel | Bei 1:N wird PK der 1-Seite als FK in die N-Seite eingefügt | diff --git a/Datenbanken/Zusammenfassungen/b_ModellierungFB - zusammenfassung.md b/Datenbanken/Zusammenfassungen/b_ModellierungFB - zusammenfassung.md new file mode 100644 index 0000000..fc2d516 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/b_ModellierungFB - zusammenfassung.md @@ -0,0 +1,157 @@ +# Modellierung – Fallbeispiel – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–16** + +--- + +## 1. Überblick (Folie 1) + +Das Fallbeispiel behandelt die **Modellierung einer Rechnung** und folgt dem Schema: +1. Beispiel-Rechnungen betrachten +2. Mini-Welten beschreiben +3. Konzeptuellen Entwurf für jede Mini-Welt erstellen +4. Logischen Entwurf für jede Mini-Welt erstellen +5. Fazit + +--- + +## 2. Beispiel-Rechnungen (Folien 2–5) + +Es werden verschiedene reale Rechnungen als Ausgangspunkt gezeigt, aus denen die relevanten Entitätstypen und Beziehungen abgeleitet werden. + +--- + +## 3. Mini-Welten – Entitätstypen (Folien 6–8) + +Aus den Rechnungen werden **mindestens 3 Entitätstypen** identifiziert: + +### Artikel +- Artikelnummer (kann fehlen) +- Beschreibung (immer vorhanden) +- Einzelpreis (Netto) +- MwSt-Satz und MwSt-Betrag + +### Rechnungsposition +- Reihenfolgenummer (kann fehlen, aber wichtig) +- Menge / Anzahl der Artikel + +### Rechnung (übergeordnet) +- Rechnungsnummer +- Datum +- Gesamtsumme (abgeleitetes Attribut) +- MwSt-Betrag der ganzen Rechnung (abgeleitetes Attribut) + +**Hinweis:** Kundeninformation wird bewusst vernachlässigt. Es gibt viele abgeleitete Attribute. + +### Formale Notation + +Entitätstypen als Mengen: +``` +E = { e } = { [ Attr1, Attr2, ..., AttrN ] } +``` + +**Feste Entitätstypen (in beiden Mini-Welten gleich):** +``` +Rechnung = { [ RgNr, Datum, Gesamtpreis, GesamtMwSt ] } +Artikel = { [ ArtNr, ArtBezeichnung, EP, MwStSatz ] } +``` + +**Beziehungen:** +- Rechnung **besteht aus** Rechnungspositionen +- Rechnungsposition **beinhaltet** Artikel + +--- + +## 4. Mini-Welt 1 (Folien 9–11) + +### Ansatz +Alle Rechnungen werden **durchgehend** betrachtet. Gleiche Kombinationen [RechnPosNr, Menge] werden **zusammengefasst** (laut Mengenlehre nach G. Cantor: keine doppelten Elemente). + +**Beispiel:** Wenn in Rechnung A die erste Zeile 2 Tastaturen enthält und in Rechnung B die erste Zeile 2 Drucker, ist für beide nur ein Element [1, 2] zuständig. + +``` +Rechnungsposition = { [ RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` + +### Konzeptueller Entwurf (Folie 10) + +| Beziehung | Funktionalität | +|---|---| +| Rechnung — besteht aus — Rechnungsposition | **M : N** | +| Rechnungsposition — beinhaltet — Artikel | **N : 1** | + +### Logischer Entwurf (Folie 11) + +``` +Rechnung = { [ RgNr, Datum, Gesamtpreis, GesamtMwSt ] } +Artikel = { [ ArtNr, EP, MwStSatz, ArtBezeichnung ] } +Rechnungsposition = { [ RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +besteht_aus = { [ RgNr, RechnPosNr, Menge ] } +beinhaltet = { [ ArtNr, RechnPosNr, Menge ] } +``` + +**Vereinfachung** (1:N-Beziehung "beinhaltet" auflösen): +``` +Rechnungsposition = { [ ArtNr, RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` +Dabei wird ArtNr als Fremdschlüssel eingefügt. + +--- + +## 5. Mini-Welt 2 (Folien 12–14) + +### Ansatz +**Alle** Rechnungspositionen aus allen Rechnungen werden individuell erfasst, auch wenn [RechnPosNr, Menge] gleich sind. Da Duplikate nach Cantor nicht zulässig sind, wird ein neues Attribut **LaufendeNummer (LfndNr)** eingeführt. + +**Konsequenz:** Mehr Entitäten im Entitätstyp, mehr Redundanz, aber die **Zuordnung jeder Position zu einer Rechnung bleibt erhalten** (anders als in Mini-Welt 1, wo sie verloren geht). + +``` +Rechnungsposition = { [ LfndNr, RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +``` + +### Konzeptueller Entwurf (Folie 13) + +| Beziehung | Funktionalität | +|---|---| +| Rechnung — besteht aus — Rechnungsposition | **1 : N** | +| Rechnungsposition — beinhaltet — Artikel | **N : 1** | + +### Logischer Entwurf (Folie 14) + +``` +Rechnung = { [ RgNr, Datum, Gesamtpreis, GesamtMwSt ] } +Artikel = { [ ArtNr, EP, MwStSatz, ArtBezeichnung ] } +Rechnungsposition = { [ LfndNr, RechnPosNr, Menge, Zwischensumme, ZwischenMwSt ] } +besteht_aus = { [ RgNr, LfndNr ] } +beinhaltet = { [ ArtNr, LfndNr ] } +``` + +**Vereinfachung** (beide 1:N-Beziehungen auflösen): +``` +Rechnungsposition = { [ ArtNr, RgNr, LfndNr, RechnPosNr, Menge, + Zwischensumme, ZwischenMwSt ] } +``` + +**Hinweis:** LfndNr wird nicht für Verknüpfungen (Join-Prädikat) verwendet, hat wenig Semantik, muss aber gepflegt werden. + +--- + +## 6. Fazit (Folie 15) + +Beide Mini-Welten bilden den Sachverhalt ab. Welches Modell besser ist, hängt von den zuvor angeforderten Kriterien ab (z. B. Leistung/Geschwindigkeit). + +**Empfehlung:** +- Beide Modelle implementieren +- Antwortzeiten bei größerem Datenumfang vergleichen +- Häufigste Abfragen vergleichen, seltene ebenfalls + +--- + +## Vergleich der Mini-Welten + +| Aspekt | Mini-Welt 1 | Mini-Welt 2 | +|---|---|---| +| Beziehung Rechnung↔Position | M:N | 1:N | +| Duplikate | Keine (zusammengefasst) | Individuell (via LfndNr) | +| Zuordnung Position→Rechnung | Geht verloren | Bleibt erhalten | +| Redundanz | Weniger | Mehr | +| Tabellen nach Vereinfachung | 3 + besteht_aus | 3 (alles in einer) | diff --git a/Datenbanken/Zusammenfassungen/c_Algebra - zusammenfassung.md b/Datenbanken/Zusammenfassungen/c_Algebra - zusammenfassung.md new file mode 100644 index 0000000..c9f75ae --- /dev/null +++ b/Datenbanken/Zusammenfassungen/c_Algebra - zusammenfassung.md @@ -0,0 +1,205 @@ +# Relationale Algebra – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–16** + +--- + +## 1. Definitionen (Folien 1–3) + +### Formale Sprachen für Relationen + +Es gibt zwei formale Sprachen für die Behandlung von Relationen: + +| Sprache | Beschreibung | +|---|---| +| **Relationale Algebra** | Definiert Operationen über Relationen; Ergebnis ist wieder eine Relation (Geschlossenheit). Definiert **was** man will, nicht **wie** | +| **Relationenkalkül** | Deklarative Beschreibung gewünschter Ergebnisse | + +Die relationale Algebra bildet die **Basis für SQL** (Structured Query Language). + +**Beispiele Relationenkalkül:** +``` +{ k | k ∈ KUNDEN ∧ k.STATUS = "Aktiv" } +{ [a.NAME, f.TITEL] | a∈ACTOR ∧ f∈FILM ∧ a.ID=f.A_ID } +``` + +### Grundoperatoren (vollständiger Satz) + +| Operator | Notation | Beschreibung | +|---|---|---| +| **Selektion** | σ_Prädikat(Relation) | Zeilen filtern nach Bedingung | +| **Projektion** | π_Attribute(Relation) | Spalten auswählen | +| **Kartesisches Produkt** | R1 × R2 | Alle Kombinationen von Zeilen | +| **Umbenennung** | ρ_Alias(Relation) | Relation oder Attribute umbenennen | +| **Vereinigung** | R1 ∪ R2 | Tupel aus beiden Relationen zusammenfassen | +| **Differenz** | R1 — R2 | Tupel aus R1, die nicht in R2 vorkommen | + +**Wichtig:** Dieser Satz ist **vollständig** — alle anderen Operatoren lassen sich durch diese ausdrücken. + +--- + +## 2. Operatoren im Detail (Folien 4–15) + +### 2.1 Selektion σ (Folie 4) + +Filtert Zeilen einer Relation anhand eines Prädikats. Das Prädikat wird für **jede Zeile** geprüft. + +**Beispiele:** +``` +σ_{Semester > 10}(Studenten) +→ Ergebnis: MatrNr 24002 (Xenokrates, 18), MatrNr 25403 (Jonas, 12) + +σ_{Name = 'Sokrates'}(Professoren) +→ Ergebnis: PersNr 2125, Sokrates, C4, Raum 226 +``` + +### 2.2 Projektion π (Folie 5) + +Wählt bestimmte Spalten aus einer Relation aus. + +``` +π_{MatrNr, Name}(Studenten) +→ Ergebnis: Nur MatrNr und Name aller Studenten + +π_{Rang}(Professoren) +→ Ergebnis: C3, C4 (Duplikate werden in relationaler Algebra eliminiert!) +``` + +**Wichtig:** In relationaler Algebra gibt es **keine Duplikate**, in SQL schon (deshalb `DISTINCT`). + +### 2.3 Zusammenhang Algebra ↔ SQL (Folien 6–7) + +| Relationale Algebra | SQL | +|---|---| +| **π** (Projektion) | **SELECT** | +| **σ** (Selektion) | **WHERE** | + +**Beispiele:** + +| Anfrage | Algebra | SQL | +|---|---|---| +| Wie heißen die Professoren? | π_{Name}(Professoren) | `SELECT Name FROM Professoren;` | +| Name des Studenten mit MatrNr 25403? | π_{Name}(σ_{MatrNr=25403}(Studenten)) | `SELECT Name FROM Studenten WHERE MatrNr = 25403` | +| Studenten mit >6 Semestern? | π_{Name,MatrNr}(σ_{Semester>6}(Studenten)) | `SELECT Name, MatrNr FROM Studenten WHERE Semester > 6` | + +### Reihenfolge der Operatoren (Folie 7) + +**Grundsätzlich dürfen relationale Operatoren in zusammengesetzten Ausdrücken nicht vertauscht werden!** + +``` +π_{Name,MatrNr}(σ_{Semester>6}(Studenten)) ← korrekt +σ_{Semester>6}(π_{Name,MatrNr}(Studenten)) ← FALSCH (Semester ist nach Projektion weg!) +``` + +### 2.4 Umbenennung ρ (Folie 8) + +Notwendig wenn: +- Relationen gleich benannte Attribute besitzen, die beide in der Abfrage benötigt werden +- Eine Relation **mehrfach** in einer Abfrage vorkommt (rekursive Beziehungen) + +**Umbenennung ist immer temporär (operatorbezogen).** + +``` +ρ_{Relation-Alias}(Relation) ← Relation umbenennen +ρ_{Attribut-Alias ← Attribut}(Relation) ← Attribut umbenennen +``` + +### 2.5 Vereinigung ∪ (Folien 9–10) + +**Voraussetzungen (Vereinigungskompatibilität):** +- Gleiche Anzahl von Attributen +- Attribute gleich benannt +- Gleichnamige Attribute haben denselben Datentyp + +Zum Erfüllen der Kriterien können Projektion und Umbenennung verwendet werden. + +**Ergebnis:** Selbes Schema wie die Operanden, Tupel zusammengefasst, **Duplikate eliminiert**. + +```sql +SELECT Name FROM Studenten UNION +SELECT Name FROM Assistenten UNION +SELECT Name FROM Professoren; +``` + +**Beispiel:** +``` +R = { [1, abc, 1.5], [2, def, 2.3] } +S = { [7, xyz, 4.4], [8, uvw, 6.7] } +R ∪ S = { [1, abc, 1.5], [2, def, 2.3], [7, xyz, 4.4], [8, uvw, 6.7] } +``` + +### 2.6 Differenz — (Folien 11–13) + +**Gleiche Voraussetzungen** wie bei Vereinigung. + +**Ergebnis:** Selbes Schema, enthält Tupel aus R1, die in R2 **nicht** vorkommen. + +``` +R = { [1, abc, 1.5], [2, def, 2.3] } +S = { [2, def, 2.3], [7, xyz, 4.4] } +R — S = { [1, abc, 1.5] } +``` + +**SQL-Umsetzung:** +```sql +-- Variante 1: NOT IN +SELECT Name FROM Studenten WHERE MatrNr NOT IN + (SELECT DISTINCT MatrNr FROM hoeren); + +-- Variante 2: MINUS +SELECT MatrNr FROM Studenten +MINUS +SELECT DISTINCT MatrNr FROM hoeren; +``` + +### 2.7 Schnittmenge ∩ (Folie 14) + +Die Schnittmenge ist **kein Grundoperator**, kann aber abgeleitet werden: + +``` +A ∩ B = A — (A — B) = B — (B — A) +``` + +**SQL-Umsetzung:** +```sql +-- Variante 1: INTERSECT +SELECT gelesenVon AS PersNr FROM Vorlesungen +INTERSECT +SELECT PersNr FROM Professoren WHERE Rang = 'C4'; + +-- Variante 2: IN (falls INTERSECT nicht verfügbar) +SELECT gelesenVon AS PersNr FROM Vorlesungen +WHERE PersNr IN + (SELECT PersNr FROM Professoren WHERE Rang = 'C4'); +``` + +### 2.8 Kartesisches Produkt × und Join (Folie 15) + +Komplexe Abfragen nutzen das kartesische Produkt mit anschließender Selektion (**Equi-Join**): + +**Anfrage:** "Welche Studenten hören welche Vorlesungen?" + +``` +π_{s.Name, v.Titel}(σ_{h.VorlNr=v.VorlNr ∧ s.MatrNr=h.MatrNr}( + Studenten s × Vorlesungen v × hoeren h)) +``` + +Oder ausführlich mit expliziter Umbenennung: +``` +π_{s.Name, v.Titel}(σ_{v.VorlNr=h.VorlNr ∧ h.MatrNr=s.MatrNr}( + ρ_s(Studenten) × ρ_v(Vorlesungen) × ρ_h(hoeren))) +``` + +--- + +## Zusammenfassung + +| Operator | Symbol | SQL-Entsprechung | Grundoperator? | +|---|---|---|---| +| Selektion | σ | WHERE | Ja | +| Projektion | π | SELECT | Ja | +| Kartesisches Produkt | × | FROM (Cross Join) | Ja | +| Umbenennung | ρ | AS | Ja | +| Vereinigung | ∪ | UNION | Ja | +| Differenz | — | MINUS / NOT IN | Ja | +| Schnittmenge | ∩ | INTERSECT / IN | Nein (ableitbar) | +| Join | ⋈ | JOIN ... ON | Nein (σ + ×) | diff --git a/Datenbanken/Zusammenfassungen/d_SQL - zusammenfassung.md b/Datenbanken/Zusammenfassungen/d_SQL - zusammenfassung.md new file mode 100644 index 0000000..0b17007 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/d_SQL - zusammenfassung.md @@ -0,0 +1,406 @@ +# SQL – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–96** + +--- + +## 1. Überblick (Folie 2) + +SQL-Befehle sind in vier Kategorien unterteilt: + +| Kategorie | Abkürzung | Befehle | +|---|---|---| +| **Data Definition Language** | DDL | ALTER, COMMENT, CREATE, DROP, RENAME, TRUNCATE | +| **Data Manipulation Language** | DML | CALL, DELETE, EXPLAIN, INSERT, LOCK, MERGE, SELECT, UPDATE | +| **Data Control Language** | DCL | GRANT, REVOKE | +| **Transaction Control Language** | TCL | COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION | + +--- + +## 2. Datentypen (Folien 3–5) + +**Datentyp = Werte + Operationen** + +### Oracle-Datentypen + +| Datentyp | Beschreibung | +|---|---| +| **VARCHAR(n) / VARCHAR2(n)** | Zeichenkette variabler Länge | +| **CHAR(n)** | Zeichenkette fester Länge | +| **NUMBER(p, s)** | Dezimale Zahl, p=Stellen (1–38), s=Nachkomma (-84–127), Werte bis ±10^125 | +| **DECIMAL(p, s)** | Dezimale Zahl, Werte bis ±10^308 | +| **INTEGER** | Ganze Zahl, -2.147.483.648 bis 2.147.483.647 | +| **DATE** | Datum/Uhrzeit (sekundengenau) | +| **RAW(n)** | Binärdaten, 1–2000 Bytes | +| **LONG RAW** | Binärdaten bis 2 GiB | +| **CLOB** | Zeichenketten bis 4 GiB | +| **BLOB** | Binärdaten bis 4 GiB | +| **CFILE / BFILE** | Zeiger auf externe Dateien (Text/Binär) | + +--- + +## 3. Einfache Befehle (Folien 6–11) + +### DDL – Tabellen anlegen und löschen + +```sql +CREATE TABLE Professoren ( + PersNr INTEGER NOT NULL, + Name VARCHAR(30) NOT NULL, + Rang CHARACTER(2), + PRIMARY KEY(PersNr) +); + +DROP TABLE Professoren; +``` + +### DML – Einfügen, Löschen, Ändern + +```sql +-- Einzelnes Tupel einfügen +INSERT INTO Professoren (PersNr, Name, Rang) +VALUES (30314, 'Cantor', 'W2'); + +-- Mehrere Tupel gleichzeitig +INSERT INTO Professoren (PersNr, Name, Rang) VALUES +(30314, 'Cantor', 'W2'), +(30315, 'Leibniz', 'W1'), +(30316, 'Plank', 'W1'); + +-- Einfügen mit verschachtelter Abfrage +INSERT INTO hoeren +SELECT MatrNr, VorlNr +FROM Studenten, Vorlesungen +WHERE Titel = 'Datenbanken'; + +-- Teilweises Einfügen (Rang wird NULL) +INSERT INTO Professoren (PersNr, Name) +VALUES (30317, 'Feuerbach'); + +-- Löschen +DELETE FROM Professoren; +DELETE FROM Professoren WHERE Rang = 'W3'; + +-- Ändern +UPDATE Studenten SET Semester = Semester + 1; +``` + +### Inline-View + +Eine SELECT-Anweisung mit einer weiteren SELECT-Anweisung in der FROM-Klausel: + +```sql +-- Professoren, die Assistenten haben +SELECT p.Name, p.Raum +FROM Professoren p, + (SELECT DISTINCT Boss FROM Assistenten) a +WHERE p.PersNr = a.Boss; +``` + +### Allgemeine SELECT-Syntax (Folie 11) + +```sql +SELECT column1, column2 +FROM table1, table2 +WHERE condition +GROUP BY column1, column2 +HAVING condition +ORDER BY column1, column2; +``` + +--- + +## 4. Erweiterungen (Folien 12–14) + +### Sortieren +```sql +SELECT PersNr, Name, Rang FROM Professoren +ORDER BY Rang DESC, Name ASC; +``` + +### Duplikate eliminieren +```sql +SELECT DISTINCT Rang FROM Professoren; +``` + +### Platzhalter (nur mit LIKE) +- `_` — genau ein Zeichen +- `%` — beliebig viele Zeichen (auch keines) + +```sql +SELECT * FROM Professoren WHERE Rang LIKE 'W_'; +SELECT * FROM Professoren WHERE Name LIKE 'T%eophrastos'; +``` + +### IN / NOT IN +```sql +SELECT Name FROM Studenten WHERE Semester IN (1, 2, 3); + +SELECT Name FROM Professoren +WHERE PersNr NOT IN (SELECT gelesenVon FROM Vorlesungen); +``` + +### ALL / ANY +```sql +-- ALL: Alle Bedingungen müssen erfüllt sein (AND) +SELECT Name FROM Studenten WHERE Semester >= ALL (7, 8, 9); + +-- ANY: Mindestens eine Bedingung (OR) +SELECT Name FROM Studenten WHERE Semester >= ANY (7, 8, 9); +``` + +--- + +## 5. Anfragen über mehrere Relationen (Folien 15–20) + +**Vorgehensweise:** +1. Kreuzprodukt aus Tabellen bilden +2. Relevante Zeilen und Felder ausschneiden + +**Wichtigste Voraussetzung:** Information über Verbindung zwischen Tabellen (Join-Prädikat). + +```sql +SELECT p.Name Professor, a.Name Assistent +FROM Professoren p, Assistenten a +WHERE p.PersNr = a.Boss; -- join-Prädikat (access-Prädikat) +``` + +**Aliasse** sind praktikabel und notwendig, wenn Felder mit gleichen Namen aus verschiedenen Tabellen involviert sind. + +--- + +## 6. Operator JOIN (Folien 21–53) + +### 6.1 Motivation (Folie 21) + +Ohne JOIN stehen Join- und Filter-Prädikate zusammen in WHERE. Der JOIN-Operator **trennt** diese: +- **JOIN ... ON**: Join-Prädikat +- **WHERE**: Filter-Prädikat + +→ Erleichtert dem Optimizer die Arbeit. + +### 6.2 Innere JOINs (Folien 23–30) + +Tupel **ohne Partner gehen verloren**. + +#### Natürlicher Verbund (NATURAL JOIN) +- Voraussetzung: Gleich benannte Attribute mit gleichem Datentyp +- Verknüpft automatisch über gleichnamige Spalten +- Join-Attribute erscheinen nur einmal im Ergebnis + +```sql +SELECT MatrNr, Name, Titel +FROM Studenten NATURAL JOIN hoeren NATURAL JOIN Vorlesungen; +``` + +#### Allgemeiner Verbund (Theta-JOIN / INNER JOIN) +- Beliebige Attribute und Bedingungen +- Keine Attribute werden eliminiert + +```sql +SELECT p.Name Professor, a.Name Assistent +FROM Professoren p JOIN Assistenten a ON p.PersNr = a.Boss; +``` + +### 6.3 Äußere JOINs (Folien 31–37) + +Tupel **ohne Partner werden mit NULL ergänzt** und bleiben im Ergebnis. + +| Typ | Beschreibung | SQL | +|---|---|---| +| **LEFT OUTER JOIN** | Alle Tupel der **linken** Relation bleiben, rechts ggf. NULL | `L LEFT OUTER JOIN R ON ...` | +| **RIGHT OUTER JOIN** | Alle Tupel der **rechten** Relation bleiben, links ggf. NULL | `L RIGHT OUTER JOIN R ON ...` | +| **FULL OUTER JOIN** | Alle Tupel **beider** Relationen bleiben, ggf. NULL | `L FULL OUTER JOIN R ON ...` | + +**Beispiel LEFT OUTER JOIN:** + +| L.A | L.B | L.C | R.D | R.E | +|---|---|---|---|---| +| a1 | b1 | c1 | d1 | e1 | +| a2 | b2 | c2 | **NULL** | **NULL** | + +### 6.4 Semi-JOINs (Folien 38–46) + +Liefern Tupel **nur aus einer** der beiden Relationen. + +| Operator | Symbol | Beschreibung | Formel | +|---|---|---|---| +| Semi-JOIN L mit R | L ⋉ R | Tupel aus L, die Partner in R haben | π_L(L ⋈ R) | +| Semi-JOIN R mit L | L ⋊ R | Tupel aus R, die Partner in L haben | π_R(L ⋈ R) | +| Anti-Semi-JOIN L | L ⊲ R | Tupel aus L **ohne** Partner in R | L — (L ⋉ R) | +| Anti-Semi-JOIN R | L ⊳ R | Tupel aus R **ohne** Partner in L | R — (L ⋊ R) | + +```sql +-- Semi-JOIN +SELECT L.* FROM L INNER JOIN R ON L.x = R.x; +SELECT L.* FROM L INNER JOIN R USING (x); +``` + +### 6.5 SQL-Implementierung (Folien 47–53) + +| SQL-Schlüsselwort | Entsprechung | +|---|---| +| CROSS JOIN | Kartesisches Produkt | +| NATURAL JOIN | Natürlicher Verbund | +| INNER JOIN | Allgemeiner Verbund (Theta-JOIN) | +| LEFT OUTER JOIN | Linker äußerer Verbund | +| RIGHT OUTER JOIN | Rechter äußerer Verbund | +| FULL OUTER JOIN | Vollständiger äußerer Verbund | + +--- + +## 7. Anfragebearbeitung (Folien 54–58) + +### Ablauf einer SQL-Anweisung + +1. **Parser** → Syntax prüfen +2. **Optimizer** → Optimalen Zugriffsplan erstellen +3. **Row Source Generator** → Ausführungsplan auf physische Ressourcen +4. **Execution Engine** → Ergebnisse erzeugen + +### Optimizer-Algorithmen + +| Typ | Beschreibung | +|---|---| +| **RBO (Rule-Based)** | Intern festgelegte Regeln; veraltet | +| **CBO (Cost-Based)** | Interne Statistiken über Tabellen/Indizes; empfohlen | + +**Wichtig:** Statistiken müssen regelmäßig aktualisiert werden (Befehl `ANALYZE`). Optimizer-Hints möglich: `/*+CHOOSE */`, `/*+ORDERED */` + +### Suchverfahren + +| Methode | Voraussetzung | Geschwindigkeit | +|---|---|---| +| **Full Table Scan** | Keine geeigneten Indizes | Langsamste | +| **Index-Scan** | Geeigneter Index vorhanden | Schnellste (Rückgabe: RowID) | +| **Hash-Scan** | Keine Indizes; Hash-Werte werden generiert | Mittel | + +### Join-Verfahren + +| Verfahren | Beschreibung | +|---|---| +| **Verschachtelte Schleifen** (Nested Loops) | Äußere Schleife + innere Schleife für jede Zeile | +| **Sort-Merge-Join** | Beide Tabellen sortieren, dann zusammenführen | +| **Hash-Join** | Hash-Tabelle für eine Tabelle, Suche mit Werten der anderen | +| **Kartesisches Produkt** | Bei fehlenden Verbindungsbedingungen | +| **Index-Join** | Indizes statt Tabellen verknüpfen (nur bei einspaltigen Indizes) | + +--- + +## 8. Indizes (Folien 59–95) + +### 8.1 Überblick (Folie 59) + +| Index-Typ | Geeignet für | Beispiel | +|---|---|---| +| **Konventionell (Binärbaum)** | Spalten mit vielen unterschiedlichen Werten | PersID, Matrikelnummer | +| **Bitmap** | Spalten mit vielen gleichen Werten (geringe Kardinalität) | Geschlecht, Kategorie | + +**Allgemeiner Aufbau:** `{ [ Suchfeld, RowID ] }` + +### 8.2 Lineare Listen (Folien 60–64) + +**Einfach verkettete Liste:** Jedes Element hat Daten + Zeiger auf nächstes Element. + +**Doppelt verkettete Liste:** Zusätzlicher Rückwärts-Zeiger. + +**Operationen:** +- Anhängen am Ende (keine Sortierung): O(1) +- Sortiertes Einfügen: O(n) +- Löschen: Zeiger des Vorgängers auf Nachfolger setzen, Speicher freigeben + +### 8.3 Binärbäume (Folien 65–75) + +**Terminologie:** + +| Begriff | Bedeutung | +|---|---| +| **Wurzel (Root)** | Einziger Knoten ohne Vorgänger | +| **Blatt** | Knoten ohne Nachfolger | +| **Innerer Knoten** | Weder Wurzel noch Blatt | +| **Kante** | Gerichtete Verbindung (Vorgänger → Nachfolger) | +| **Ebene** | Knoten mit gleicher Pfadlänge zur Wurzel | +| **Tiefe** | Gesamtzahl der Ebenen | +| **Grad** | Maximale Anzahl direkter Nachfolger | + +**Suchaufwand:** Logarithmisch O(log n) — aber kann zu O(n) degradieren wenn Baum entartet. + +**AVL-Baum:** Höhe beider Teilbäume an jedem Knoten unterscheidet sich höchstens um 1. + +**Balancierter Baum:** Höchstens letzte Ebene nicht vollständig besetzt. Jeder balancierte Baum ist ein AVL-Baum, aber nicht umgekehrt. + +### Durchlauf-Reihenfolgen + +| Reihenfolge | Kürzel | Verwendung | +|---|---|---| +| **Preorder** | WLR | Baum linear auf Datenträger speichern | +| **Inorder** | LWR | Sortierte Liste erstellen → balancierten Baum erzeugen | +| **Postorder** | LRW | Geräte programmieren (erst Parameter, dann Operation) | + +### Balancierung + +- **Offline:** Kopie → Inorder-Liste → Binär einfügen → Ausgeglichener Baum. Einfach, aber Zugriffe gesperrt. +- **Online:** Zur Laufzeit rekursiv ausgleichen. Kann kurzfristig zu Fehlern führen. + +### 8.4 Hashing (Folien 76–90) + +**Funktionsprinzip:** +1. Für jeden Datensatz wird ein Schlüssel gebildet +2. Hash-Funktion ordnet dem Schlüssel einen kurzen Hash-Wert zu +3. Hash-Wert dient als Index in der Hash-Tabelle +4. Hash-Tabelle enthält Verweise auf Datensätze + +**Kollision:** Zwei unterschiedliche Schlüssel erzeugen denselben Hash-Wert. + +**Kollisionsbehandlung:** +- **Hashing mit Verkettung:** Verkettete Listen an Hash-Tabellen-Einträgen +- **Lineares Hashing:** Dynamische Tabellenerweiterung bei hohem Belegungsfaktor +- **Sondierung:** Linear/quadratisch/zufällig in der Tabelle selbst suchen + +**Anforderungen an Hash-Funktionen:** +- Effizient berechenbar, geringer Speicherbedarf +- Wenig Kollisionen (Gleichverteilung der Hash-Werte) +- Einwegfunktion (Hash → Schlüssel nicht berechenbar) +- Surjektivität (kein Hash-Wert unmöglich) +- **Lawineneffekt:** 1 Bit Unterschied → mindestens halbe Bits der Hash-Werte unterschiedlich + +**Hash-Funktions-Beispiele:** +1. **Modulo:** HW = Key % Basis (Primzahlen empfohlen) +2. **Abschneiden:** Key² berechnen, dann von links/rechts kürzen +3. **Zerlegung & Addition:** Key in gleich große Teile zerlegen und addieren + +**Binärbäume vs. Hashing:** +- Bäume: Garantie im Worst Case, Sortierung möglich, dynamische Größe +- Hashing: Schneller im Durchschnitt O(1) vs. O(log n) + +### 8.5 Bitmap-Indizes (Folien 92–95) + +**Geeignet für:** +- Geringe Kardinalität (0,1%–1% unterschiedliche Werte) +- Wenige Änderungen (Data Warehouse / OLAP) + +**Aufbau:** Für jeden einzigartigen Wert eine Bit-Spalte. Pro Zeile steht 1 (Treffer) oder 0 (kein Treffer). + +**Vorteile:** +- Stark komprimiert → schnell lesbar +- Mehrere Indizes kombinierbar +- Logische Operationen (AND, OR) sehr schnell im Prozessor + +**Nachteile:** +- Immenser Wartungsaufwand bei Änderungen +- Bandbreite der Prozessor-Kanäle wichtig +- Können Deadlocks verursachen + +--- + +## Zusammenfassung + +| Thema | Kernaussage | +|---|---| +| SQL-Kategorien | DDL (Struktur), DML (Daten), DCL (Rechte), TCL (Transaktionen) | +| Einfache Befehle | CREATE, INSERT, UPDATE, DELETE, SELECT | +| JOINs | Inner (NATURAL, Theta), Outer (LEFT, RIGHT, FULL), Semi (⋉, ⋊, ⊲, ⊳) | +| Anfragebearbeitung | Parser → Optimizer (RBO/CBO) → Row Source Generator → Execution Engine | +| Suchverfahren | Full Table Scan, Index-Scan (schnellste), Hash-Scan | +| Binärbäume | O(log n) Suche; AVL/balanciert halten; Preorder/Inorder/Postorder | +| Hashing | O(1) Durchschnitt; Kollisionsbehandlung; Modulo/Abschneiden/Zerlegung | +| Bitmap-Indizes | Für geringe Kardinalität; Bit-Spalten pro Wert; schnelle logische Operationen | diff --git a/Datenbanken/Zusammenfassungen/e_NFs - zusammenfassung.md b/Datenbanken/Zusammenfassungen/e_NFs - zusammenfassung.md new file mode 100644 index 0000000..b7db06a --- /dev/null +++ b/Datenbanken/Zusammenfassungen/e_NFs - zusammenfassung.md @@ -0,0 +1,423 @@ +# Normalisierung – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–41** + +--- + +## 1. Einführung (Folien 1–6) + +### Was ist Normalisierung? + +Die relationale Darstellung einer entworfenen Datenbank kann noch **verfeinert** werden. Die Basis dafür bilden die **Normalformen** der Tabellen. + +**Normalisierung** = Aufteilung von Attributen in mehrere Relationen (Tabellen) mithilfe der Normalisierungsregeln, sodass eine Struktur entsteht, die **keine vermeidbaren Redundanzen** mehr enthält. + +### Ziele der Normalisierung + +| Ziel | Beschreibung | +|---|---| +| **Redundanzbeseitigung** | Nur notwendige Redundanz bleibt erhalten | +| **Anomalienvermeidung** | Funktionelle und transitive Abhängigkeiten werden aufgelöst | +| **Klare Struktur** | Erstellung eines klar strukturierten Datenbankmodells | + +### Praktische Bedeutung + +- Praktisch wichtig sind nur die **ersten drei Normalformen** (1NF, 2NF, 3NF) +- Manchmal ist es sinnvoll, auf Normalformen aus **Performancegründen** zu verzichten (z. B. lange Laufzeiten, große Anzahl der Tabellen) +- Jede nächste Normalform **basiert auf der vorigen** + +### Funktionale Abhängigkeit (Folie 4) + +**Definition:** Man betrachtet eine Relation, X und Y sind Mengen der Attribute. Y ist von X **funktional abhängig** (X → Y), wenn für alle Tupel t1 und t2 gilt: + +``` +Wenn t1 ∩ X = t2 ∩ X, dann gilt auch t1 ∩ Y = t2 ∩ Y +``` + +- Y hängt von X ab, wenn X die Werte von Y **eindeutig bestimmt** +- X bestimmt alle anderen Attribute → X ist ein **Superschlüssel** +- Ist X auch **minimal**, dann ist X ein **Kandidat für Primärschlüssel** + +### Arten der Abhängigkeit (Folie 5) + +| Art | Notation | Beschreibung | +|---|---|---| +| **Funktionale Abhängigkeit** | X → Y | X bestimmt Y eindeutig | +| **Mehrwertige Abhängigkeit** (multivalued) | X →→ Y | X bestimmt eine Menge von Y-Werten | + +### Überblick Normalformen (Folie 6) + +Die Normalformen bilden eine **aufsteigende Kette**: 1NF → 2NF → 3NF → BCNF → 4NF → 5NF + +--- + +## 2. Erste Normalform – 1NF (Folien 7–16) + +### Definition (Folie 8) + +Eine Tabelle liegt in **1NF** vor, wenn ihre Zellen nur **atomare Werte** beinhalten, d. h. sie enthalten nicht mehr als einen Wert (keine Auflistungen). + +**"Atomar"** bedeutet: Die Werte können nicht weiter in kleinere Komponenten zerlegt werden, die **einzeln einen Sinn** im Anwendungsbereich ergeben. + +### Regeln der 1NF + +- Wiederholungsgruppen werden vermieden, indem jede Gruppe in eine **separate Tabelle** eingefügt und durch eine **1:N-Beziehung** verbunden wird +- Ob ein Attribut atomar ist, hängt **stark von der Mini-Welt** ab +- Laut E. F. Codd müssen Tabellen in 1NF **nicht unbedingt einen Primärschlüssel** haben – dieser ist erst für weitere Normalformen nötig + +### Mini-Welt-Beispiele: Adresse (Folien 9–10) + +| Mini-Welt | Kontext | Atomar? | +|---|---|---| +| **Logistik-Firma (Müll-Abfuhr)** | PLZ, Straße, Hausnummer werden einzeln für Routenberechnung benötigt | PLZ, Straße, Hausnummer sind **jeweils atomar** | +| **Buchhaltung (Gehaltsabrechnung)** | Nur die gesamte Adresse wird für Briefversand benötigt | Gesamte Adresse ist **als Ganzes atomar** | + +### Beispiel: Bahnwagen (Folien 12–13) + +**Ausgangstabelle (nicht in 1NF):** +``` +Wagen = { [ WagenID, Beschreibung, Status, Ankunft, Station ] } +PK = [WagenID, Ankunft] +``` + +**Problem:** Feld "Beschreibung" enthält: `'Wagentyp, Leergewicht, Kapazität, Hersteller, Baujahr'` → **nicht atomar** + +**In 1NF gebracht:** +``` +W1 = { [ WagenID, Status, Ankunft, Station, WagenType, + Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +``` + +### Beispiel: Vertragsdaten (Folien 14–16) + +**Ausgangstabelle (nicht in 1NF):** + +| Vertragsdatum | Kunde | Produkt | +|---|---|---| +| 01.02.2010 | Kohl | VW 30.000, BMW 40.000, Opel 40.000 | +| 03.01.2012 | Schröder | VW 32.000, Mercedes 35.000 | + +**In 1NF gebracht** – Produkt und Preis werden getrennt, jede Kombination ist eine eigene Zeile: + +| Vertragsdatum | Kunde | Produkt | Preis | +|---|---|---|---| +| 01.02.2010 | Kohl | VW | 30.000 | +| 01.02.2010 | Kohl | BMW | 40.000 | +| 01.02.2010 | Kohl | Opel | 40.000 | +| 03.01.2012 | Schröder | VW | 32.000 | +| 03.01.2012 | Schröder | Mercedes | 35.000 | + +**Erweitertes Beispiel (Folie 15–16):** Tabelle mit Produkt+Herkunftsland und Menge+V.art als nicht-atomare Felder → Zerlegung in 7 separate Spalten (Vertragsdatum, Kunde, Produkt, Herkunftsland, V-Art, Lieferadresse, Menge). In 1NF ist hier **kein PK nötig**. + +--- + +## 3. Zweite Normalform – 2NF (Folien 17–24) + +### Definition (Folie 17) + +Eine Tabelle liegt in **2NF** vor, wenn sie: +1. In **1NF** vorliegt +2. Jedes Feld, das **nicht** zum Primärschlüssel gehört, vom **ganzen** Primärschlüssel abhängt + +**Regel:** Besteht der Primärschlüssel nur aus **einem Feld**, liegt die Tabelle **automatisch in 2NF** vor. + +### Vorgang (Folie 18) + +Felder, die nur vom **Teil des Primärschlüssels** abhängig sind, werden zusammen mit dem Teilschlüssel in **neue Tabellen ausgelagert**: + +``` +Vorher: PK = [S1, S2] → alle Felder +Nachher: Tabelle 1: PK = [S1, S2] → Felder die vom ganzen PK abhängen + Tabelle 2: PK = [S2] → Felder die nur von S2 abhängen (DepS2) +``` + +### Beispiel: Bahnwagen (Folie 19) + +Die Felder [WagenType], [Leergewicht], [Kapazitaet], [Hersteller], [Baujahr] hängen nur von **[WagenID]** ab, aber **nicht** von [Ankunft] → **nicht in 2NF**. + +**Aufteilung in 2NF:** +``` +W11 = { [ WagenID, Ankunft, Status, Station ] } ← PK = [WagenID, Ankunft] +W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, + Hersteller, Baujahr ] } ← PK = [WagenID] +``` + +### Beispiel: Vertragsdaten (Folien 20–22) + +**PK festgelegt:** [Vertragsdatum, Kunde, Produkt] + +**Analyse der Abhängigkeiten:** +- [Herkunftsland] hängt nur von [Produkt] ab → **verletzt 2NF** +- [Lieferadresse] hängt nur von [Kunde] ab → **verletzt 2NF** +- [V-Art] hängt nur von [Produkt] ab → **verletzt 2NF** + +**Aufteilung:** +``` +T-1 = { [ Vertragsdatum, Kunde, Produkt, Herkunftsland, Menge ] } +T-2 = { [ Produkt, Herkunftsland ] } ← falls V-Art unabhängig +T-3 = { [ Kunde, Lieferadresse ] } +``` + +Wenn [V-Art] nur von [Produkt] abhängig ist, wird T-2 weiter aufgeteilt: +``` +T-3-1 = { [ Produkt, Herkunftsland ] } +T-3-2 = { [ Produkt, V-Art ] } +``` + +### Beispiel: Bestellungen (Folie 23) + +| RNr | ArtNr | LagerOrt | Anzahl | +|---|---|---|---| +| 100100 | 1010 | 22 | 1 | +| 100100 | 1020 | 15 | 2 | +| 100103 | 1040 | 13 | 10 | + +Bei ArtNr : LagerOrt = 1:1 gibt es **zwei Schlüsselkandidaten**: [RNr, ArtNr] und [RNr, LagerOrt]. Die **2NF ist in beiden Fällen verletzt**, da [LagerOrt] vom Teilschlüssel [ArtNr] abhängt (bzw. umgekehrt). + +**Lösung:** +``` +Tabelle 1 = { [ RNr, ArtNr, Anzahl ] } +Tabelle 2 = { [ ArtNr, LagerOrt ] } +``` + +### ERM-Bezug (Folie 24) + +Wenn man vom **ERM ausgeht** und den konzeptuellen Entwurf korrekt in den logischen umwandelt, kommt man direkt zu Tabellen, die die 2NF nicht verletzen – die Normalisierung ist dann nicht nötig. + +--- + +## 4. Dritte Normalform – 3NF (Folien 25–28) + +### Definition (Folie 25) + +Eine Tabelle liegt in **3NF** vor, wenn sie: +1. In **2NF** vorliegt +2. Alle Felder, die **nicht** zum Primärschlüssel gehören, **voneinander unabhängig** sind + +**Regel:** Wenn nur **ein Nichtschlüsselfeld** in der Tabelle vorhanden ist, liegt die Tabelle **automatisch in 3NF** vor. + +**Wichtig:** In der Praxis ist die 3NF oft ausreichend, um eine perfekte Balance aus **Redundanz, Performance und Flexibilität** zu gewährleisten. Es gibt Sonderfälle (z. B. wissenschaftlicher Bereich), wo weiter normalisiert werden muss. + +### Vorgang (Folie 26) + +Funktionale Abhängigkeiten unter Nicht-PK-Feldern werden durch **Aufteilung der Tabelle** aufgelöst: + +``` +Vorher: PK = [S1, S2], Feld F hängt von DepF ab (beide Nicht-PK) +Nachher: Tabelle 1: [S1, S2, F] ← F bleibt als FK + Tabelle 2: [F, DepF] ← F wird PK der neuen Tabelle +``` + +### Beispiel: Bahnwagen (Folie 27) + +Aus der 2NF: `W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }` + +[Leergewicht], [Kapazitaet], [Hersteller] und ggf. [Baujahr] sind vom Feld [WagenType] abhängig → **nicht in 3NF**. + +**Variante a** (Baujahr ist vom WagenType abhängig): +``` +W121a = { [ WagenID, WagenType ] } +W122a = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +``` + +**Variante b** (Baujahr ist vom WagenType unabhängig): +``` +W121b = { [ WagenID, WagenType, Baujahr ] } +W122b = { [ WagenType, Leergewicht, Kapazitaet, Hersteller ] } +``` + +### Beispiel: Kunden (Folie 28) + +**Ausgangstabelle:** `{ [ KundenID, Adresse, Telefon ] }` + +Wenn Adresse und Telefon voneinander unabhängig sind (nur vom PK KundenID abhängig), ist die Tabelle bereits in 3NF. Falls nicht → Aufteilung: +``` +Tabelle 1 = { [ KundenID, Adresse ] } +Tabelle 2 = { [ KundenID, Telefon ] } +``` + +--- + +## 5. Boyce-Codd-Normalform – BCNF (Folien 29–30) + +### Definition (Folie 29) + +Eine Tabelle liegt in **BCNF** vor, wenn sie: +1. In **3NF** vorliegt +2. **Kein Teil** eines Schlüsselkandidaten funktional von keinem Teil eines **anderen** Schlüsselkandidaten abhängig ist + +**Kern:** BCNF behandelt die **Abhängigkeiten zwischen Teilen mehrerer Schlüsselkandidaten**, falls diese sich teilweise **überlappen**. + +**Regel:** Gibt es nur **einen Schlüsselkandidaten** oder liegt **keine Überlappung** vor, befindet sich die Tabelle **automatisch in BCNF**. + +### Beispiel: Sportvereine (Folie 30) + +| Name | Sportart | Verein | +|---|---|---| +| Schulz | Fußball | FC Berlin | +| Mayer | Fußball | FC Berlin | +| Zimmermann | Fußball | FC Marzahn | +| Mayer | Volleyball | VC Hamburg | + +**Beziehung:** Sportart : Verein = 1 : N (ein Verein betreibt nur eine Sportart, aber zu einer Sportart gehören mehrere Vereine) + +**Schlüsselkandidaten:** [Name, Sportart] und [Name, Verein] → **Überlappung** (Name) + +**Problem:** [Sportart] hängt vom Nicht-Schlüssel-Feld [Verein] ab → verletzt BCNF + +**Lösung:** +``` +Tabelle 1 = { [ Name, Verein ] } +Tabelle 2 = { [ Sportart, Verein ] } +``` + +--- + +## 6. Vierte Normalform – 4NF (Folie 31) + +### Definition + +Eine Tabelle liegt in **4NF** vor, wenn sie: +1. In **BCNF** vorliegt +2. Nur **semantisch verbundene** Nichtschlüsselattribute sich in der Tabelle befinden + +Die 4NF trennt **semantisch (thematisch, inhaltlich) unabhängige** Entitäten durch Aufteilung der Tabelle. + +### Beispiel: Bahnwagen + +Aus der 3NF: `W122a = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] }` + +[Leergewicht] und [Kapazitaet] werden **viel öfter** verwendet als [Hersteller] und [Baujahr] (historische Bedeutung) → **unterschiedliche Semantik** → werden nie gleichzeitig benötigt. + +**Aufteilung in 4NF:** +``` +W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] } ← technische Daten +W122a2 = { [ WagenType, Hersteller, Baujahr ] } ← historische Daten +``` + +--- + +## 7. Fünfte Normalform – 5NF (Folien 32–34) + +### Definition (Folie 32) + +Eine Tabelle liegt in **5NF** vor, wenn sie: +1. In **4NF** vorliegt +2. Nicht mehr in Tabellen eines **geringeren Grades** zerlegt werden kann + +**Kern:** Die neuen Tabellen können jederzeit den ursprünglichen Zustand **ohne Informationsverlust** wieder herstellen (durch JOIN). + +**Nachteil:** Man braucht in der Praxis ständig die ganzen Informationen und muss daher ständig die vereinfachten Tabellen wieder **vereinigen** (JOIN). + +### Beispiel 1: Touristik-Firma (Folie 33) + +``` +T10 = { [ PersID, TourNr, Trans-Unternehmen ] } ← PK = alle drei Attribute +``` + +Keine mehrwertigen Abhängigkeiten, da die drei Felder zusammen eine informative Einheit bilden. Trotzdem zerlegbar in: + +``` +T11 = { [ PersID, TourNr ] } +T12 = { [ PersID, Trans-Unternehmen ] } +T13 = { [ TourNr, Trans-Unternehmen ] } +``` + +Diese drei Tabellen können durch JOIN wieder die Originaltabelle herstellen. + +### Beispiel 2: Hersteller-Produkt-Person (Folie 34) + +| HerstID | ProduktID | PersID | +|---|---|---| +| 1 | Stift | 006 | +| 1 | Ordner-L | 007 | +| 1 | Kopierpapier | 007 | +| 2 | Ordner-Z | 006 | +| 3 | Kopierpapier | 007 | + +**Zerlegung in 5NF:** +``` +TA = { [ HerstID, ProduktID ] } +TB = { [ PersID, ProduktID ] } +TC = { [ HerstID, PersID ] } +``` + +--- + +## 8. Bedeutung des ERM (Folien 35–41) + +### ERM als Alternative zur Normalisierung (Folie 35) + +- Für die Praxis ist es empfehlenswert, dass Tabellen sich in **3NF** befinden +- Höhere Normalformen sind eher für **theoretische Untersuchungen** wichtig +- In der Praxis gelten Richtlinien (z. B. Geschwindigkeit), die manchmal den Verzicht auf 3NF (sogar 2NF) erfordern + +**Wichtige Erkenntnis:** Wenn man vom **ERM ausgeht** und den konzeptuellen Entwurf korrekt in den logischen umwandelt (inkl. Vereinfachung), bekommt man **ziemlich wahrscheinlich** Tabellen in 3NF. + +### Anomalien ohne Normalisierung (Folien 36–38) + +**Beispiel:** Eine Tabelle mit Mitarbeitern, Abteilungen und Projekten (nicht normalisiert): + +| PersID | Name | AbtNr | Abteilung | ProjNr | ProjBeschreibung | +|---|---|---|---|---|---| +| 1 | Anna | 42 | Second Level | BE | Bergland ... | +| 1 | Anna | 42 | Second Level | NO | Nordsee ... | +| 2 | Arnold | 42 | Second Level | NO | Nordsee ... | +| 2 | Arnold | 42 | Second Level | OG | Ostgipfel ... | +| 3 | Betty | 53 | First Dept | OG | Ostgipfel ... | +| 3 | Betty | 53 | First Dept | WO | West-Ozean ... | +| 4 | Chris | 53 | First Dept | WO | West-Ozean ... | + +**Probleme (Anomalien):** + +| Anomalie | Problem | +|---|---| +| **Einfüge-Anomalie** | Neuer Mitarbeiter mit mehreren Projekten → mehrere Zeilen, Vertippen möglich | +| **Änderungs-Anomalie** | Projektumbenennung → mehrere Zeilen ändern, Übersehen möglich | +| **Lösch-Anomalie** | Mitarbeiter löschen → mehrere Zeilen entfernen, Übersehen möglich | + +### Normalisierung → 3NF (Folie 39) + +**Ergebnis der Normalisierung:** +``` +Mitarbeiter = { [ PersID, Name, AbtNr ] } +Abteilung = { [ AbtNr, Abteilung ] } +arbeitet_an = { [ PersID, ProjNr ] } +Projekt = { [ ProjNr, ProjBeschreibung ] } +``` + +### ERM-Ansatz liefert dasselbe Ergebnis (Folie 40) + +Wenn man mit dem **ERM anfängt** (konzeptuellen Entwurf richtig durchführt): + +``` +Abteilung (1) — gehört zu — (N) Mitarbeiter (M) — arbeitet an — (N) Projekt +``` + +Die Überführung in die relationale Darstellung liefert **dieselben Tabellen** wie die Normalisierung → ERM und Normalisierung sind **komplementäre Ansätze** zum gleichen Ziel. + +--- + +## Zusammenfassung + +| Normalform | Voraussetzung | Regel | Automatisch erfüllt wenn... | +|---|---|---|---| +| **1NF** | — | Nur atomare Werte in Zellen | Keine Auflistungen vorhanden | +| **2NF** | 1NF | Jedes Nicht-PK-Feld hängt vom **ganzen** PK ab | PK besteht aus nur einem Feld | +| **3NF** | 2NF | Nicht-PK-Felder sind **voneinander unabhängig** | Nur ein Nicht-PK-Feld vorhanden | +| **BCNF** | 3NF | Keine Abhängigkeiten zwischen Teilen verschiedener Schlüsselkandidaten | Nur ein Schlüsselkandidat oder keine Überlappung | +| **4NF** | BCNF | Nur semantisch verbundene Nicht-PK-Attribute zusammen | Alle Attribute thematisch zusammengehörig | +| **5NF** | 4NF | Nicht weiter in Tabellen geringeren Grades zerlegbar | Zerlegung würde Informationsverlust verursachen | + +### Durchgängiges Beispiel: Bahnwagen + +``` +Ausgangstabelle: { [ WagenID, Beschreibung, Status, Ankunft, Station ] } +→ 1NF: W1 = { [ WagenID, Status, Ankunft, Station, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 2NF: W11 = { [ WagenID, Ankunft, Status, Station ] } + W12 = { [ WagenID, WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 3NF: W11 = { [ WagenID, Ankunft, Status, Station ] } + W121 = { [ WagenID, WagenType ] } + W122 = { [ WagenType, Leergewicht, Kapazitaet, Hersteller, Baujahr ] } +→ 4NF: W122a1 = { [ WagenType, Leergewicht, Kapazitaet ] } + W122a2 = { [ WagenType, Hersteller, Baujahr ] } +``` diff --git a/Datenbanken/Zusammenfassungen/f_Transaktionen - zusammenfassung.md b/Datenbanken/Zusammenfassungen/f_Transaktionen - zusammenfassung.md new file mode 100644 index 0000000..ae67543 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/f_Transaktionen - zusammenfassung.md @@ -0,0 +1,273 @@ +# Transaktionen – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–31** + +--- + +## 1. Definition (Folien 1–2) + +### Integrität und Transaktionen + +**Integrität (Konsistenz)** der Datenbank = Zustand der Daten, in dem sie **korrekt, vollständig und widerspruchsfrei** sind. + +**Transaktion** = Mehrere Operationen, die: +- Entweder **alle erfolgreich** durchgeführt werden +- Oder, falls ein Fehler vorliegt, die schon durchgeführten **rückgängig gemacht** werden müssen + +### Eigenschaften + +- Transaktionen gewährleisten einen **konsistenten Zustand** der Datenbank +- Sie versetzen den Datenbestand von einem konsistenten Zustand in einen **anderen konsistenten Zustand** +- Eine Transaktion wird als **atomare (ununterbrechbare) Operation** betrachtet +- Bei Fehlern werden Komponenten nicht rückgängig gemacht (zeitintensiv), sondern der **zuvor gespeicherte Zustand** wird wiederhergestellt + +--- + +## 2. Beispiel (Folie 3) + +Zwei ganze Zahlen A und B (Datenbestand): + +``` +T1 = { A=A+100; B=B+100; } +T2 = { A=A*2; B=B*2; } +``` + +- **Sequenzielle Ausführung** → Konsistenz gewährleistet +- **Gemischte Operationen** → Konsistenz **nicht** mehr gewährleistet + +--- + +## 3. Anforderungen (Folien 4–5) + +### Allgemeine Anforderungen (Folie 4) + +| Anforderung | Beschreibung | +|---|---| +| Gleichzeitige Verarbeitung | Mehrere Transaktionen müssen **quasi-parallel** verarbeitet werden | +| Fehlerbehandlung | Abgeschlossene Transaktionen bleiben bestehen, offene werden rückgängig gemacht | +| Organisation | Manuell (im Source-Code) oder automatisch | +| Zwischenpunkte | Daten erfolgreich durchgeführter Operationen können gespeichert werden | +| Abschlussarten | Nur **COMMIT** (erfolgreich) oder **ROLLBACK** (erfolglos) | + +**Gründe für ROLLBACK:** Systemfehler, Integritätsverletzungen, Deadlock, Benutzeranweisung. + +### ACID-Eigenschaften (Folie 5) + +| Eigenschaft | Beschreibung | +|---|---| +| **A**tomicity (Atomarität) | Entweder **alle** Befehle oder **gar keine** werden ausgeführt | +| **C**onsistency (Konsistenz) | Transaktion hinterlässt nach Beendigung einen **konsistenten Datenzustand**, ansonsten komplettes Zurücksetzen | +| **I**solation | Nebenläufige Transaktionen beeinflussen sich **nicht gegenseitig**; jede wird logisch so ausgeführt, als wäre sie die einzig aktive | +| **D**urability (Dauerhaftigkeit) | Wirkung einer erfolgreich abgeschlossenen Transaktion bleibt **dauerhaft** erhalten, auch nach Systemfehler | + +--- + +## 4. Zustände einer Transaktion (Folie 6) + +``` +BoT → Active → Committing → Änderungen festgeschrieben → EoT + ↓ ↓ + Waiting for ERROR + resources ↓ + ↓ Rolling back → Änderungen rückgängig gemacht → EoT + DEADLOCK + ↓ + ROLLBACK → Rolling back +``` + +| Zustand | Beschreibung | +|---|---| +| **BoT** | Begin of Transaction | +| **Active** | Transaktion führt Operationen aus | +| **Waiting for resources** | Wartet auf gesperrte Ressourcen | +| **DEADLOCK** | Gegenseitige Blockierung erkannt | +| **Committing** | Änderungen werden festgeschrieben (COMMIT) | +| **Rolling back** | Änderungen werden rückgängig gemacht (ROLLBACK) | +| **EoT** | End of Transaction | + +--- + +## 5. Synchronisation (Folien 7–8) + +### Definition + +**Synchronisation (Mehrbenutzersynchronisation)** = Koordinierung von mehreren Benutzerprozessen, eng verbunden mit der Ausführung der Transaktionen. + +### Ausführungsarten + +| Art | Beschreibung | Eigenschaft | +|---|---|---| +| **Seriell** | Transaktionen nacheinander | Absolut sicher, aber **langsam**; blockiert nachfolgende Transaktionen | +| **Parallel** | Transaktionen gleichzeitig | Nutzt Ressourcen **besser** aus | +| **Serialisierung** | Anordnung paralleler Operationen | Entspricht in der Wirkung der seriellen Ausführung, garantiert Konsistenz | + +--- + +## 6. Probleme bei paralleler Ausführung (Folien 9–26) + +### Übersicht (Folie 10) + +Bei Zugriff auf **denselben Datenbestand** können folgende Probleme entstehen: +1. **Lost Update** +2. **Dirty Read** +3. **Non-Repeatable Read** +4. **Phantom Read** + +Diese Probleme können durch **Isolation** (verschiedene Sicherheitsstufen) vermieden werden. + +### Isolationsstufen – allgemein (Folie 11) + +- Die Isolationsstufe betrifft den **Schreibvorgang nicht** – eine Transaktion bekommt immer eine **exklusive Sperre** für alle zu ändernden Daten +- Die Isolationsstufe wirkt auf die **Lesevorgänge** – definiert, wie Lesevorgänge von anderen Transaktionen abhängig sind + +### 6.1 Lost Update (Folien 12–17) + +**Problem:** Die von einer Transaktion geänderten Daten werden von einer anderen Transaktion überschrieben. + +**Variante 1 – Direkt (Folie 12):** +``` +T1: update TabX set V=42; T2: ... +T1: ... T2: update TabX set V=53; +T1: ... T2: commit; +T1: commit; T2: ... +``` +→ Update von T2 geht verloren. Kommt in Datenbanken **nicht vor**, da T2 auf Freigabe wartet. + +**Variante 2 – Über lokale Variable (Folie 13):** +``` +T1: select V from TabX into W; T2: ... +T1: W := W+1; T2: update TabX set V=53; +T1: update TabX set V=W; T2: commit; +T1: commit; T2: ... +``` +→ Update von T2 geht verloren. Kann durch **höhere Isolationsstufe** vermieden werden. + +**Lösung:** `SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;` +- Die Transaktion merkt sich die Daten, die zum **Start der Transaktion** festgeschrieben waren +- Ändert eine andere Transaktion diese Daten, bricht die erste ab +- Fehler: `ORA-08177: can't serialize access for this transaction` + +### 6.2 Dirty Read (Folien 18–19) + +**Problem:** Eine Transaktion liest Daten, die eine andere Transaktion geändert, aber **noch nicht festgeschrieben** hat. + +``` +T1: ... T2: update TabX set V=42; +T1: select V from TabX; T2: ... ← T1 liest V=42 +T1: ... T2: rollback; ← V=42 war ungültig! +``` + +**Lösung:** Standard-Isolationsstufe in Oracle ist **READ COMMITTED** → verhindert Dirty Read automatisch. + +Dirty Read ist nur möglich mit `READ UNCOMMITTED` (in Oracle nicht verfügbar). + +### 6.3 Non-Repeatable Read (Folien 20–21) + +**Problem:** Eine Transaktion liest **zweimal dieselben Daten** und bekommt **unterschiedliche Ergebnisse**. + +``` +T1: select V from TabX; T2: ... +T1: ... T2: update TabX set V=42; +T1: ... T2: commit; +T1: select V from TabX; T2: ... ← anderer Wert! +``` + +**Lösung:** Isolationsstufe **SERIALIZABLE** (Standard READ COMMITTED lässt dies zu). + +### 6.4 Phantom Read (Folie 22–23) + +**Problem:** Ähnlich Non-Repeatable Read, aber mit **Anzahl der Zeilen** statt Werten. + +``` +T1: select count(*) from TabX; T2: ... +T1: ... T2: insert into TabX ...; +T1: ... T2: commit; +T1: select count(*) from TabX; T2: ... ← anderer Count! +``` + +**Lösung:** Isolationsstufe **SERIALIZABLE** löst auch dieses Problem in Oracle. + +### Trade-off der Isolationsstufen (Folie 24) + +| Niedrigere Stufe | Höhere Stufe | +|---|---| +| Erlaubt gleichzeitigen Zugriff | Vermindert Probleme | +| Mehr mögliche Nebenwirkungen | Mehr Systemressourcen | +| Höhere Performance | Höhere Blockierungswahrscheinlichkeit | + +### Isolationsstufen nach ANSI/ISO SQL92 (Folien 25–26) + +| Isolationsstufe | Verhindert | Besonderheit | +|---|---|---| +| **READ UNCOMMITTED** | — | Dirty Read erlaubt; **fehlt in Oracle** | +| **READ COMMITTED** | Dirty Read | Standard in Oracle; Lesesperren werden kurz gesetzt und aufgehoben | +| **REPEATABLE READ** | Dirty Read, Non-Repeatable Read | Sperren für gesamte Transaktion; **fehlt in Oracle** | +| **SERIALIZABLE** | Dirty Read, Non-Repeatable Read, Phantom Read, Lost Update | Höchste Stufe; keine weiteren schreibenden Transaktionen auf dieselben Daten | + +**Hinweis:** Der SQL-Standard schreibt diese Stufen vor, aber konkrete Datenbanken unterstützen sie **unterschiedlich**. + +--- + +## 7. Synchronisationsstrategien (Folie 27) + +Der **Scheduler** steuert die Ausführungsreihenfolge von Operationen verschiedener Transaktionen. + +| Strategie | Beschreibung | +|---|---| +| **Pessimistisch** | Scheduler **verzögert** Operationen, legt optimale Reihenfolge fest | +| **Optimistisch** | Scheduler schickt Operationen **sofort** zur Ausführung | + +--- + +## 8. Synchronisationsverfahren (Folien 28–30) + +### 8.1 Sperrbasierte Synchronisation (Folie 28) + +Wird **oft eingesetzt**. Idee: + +| Regel | Beschreibung | +|---|---| +| Jedes Datenobjekt hat eine Sperre | Tabelle, Datensatz, Attribut, Index, View | +| Sperren vor Benutzung | Jedes Objekt muss vor Zugriff gesperrt werden | +| Warten bei Sperre | Ist Objekt schon gesperrt, muss die Transaktion warten | +| Exklusivität | Nur **eine** Transaktion kann die Sperre halten | +| **Lesesperre** (shared lock) | Andere Transaktionen dürfen die Daten **lesen** | +| **Schreibsperre** (exclusive lock) | Andere Transaktionen dürfen Daten **weder lesen noch ändern** | +| Sperren aufheben | Am Ende der Transaktion werden **alle Sperren** aufgehoben | + +**Löst:** Alle Probleme **außer Phantom Read**. + +### 2-Phasen-Sperrprotokoll – 2PL (Folie 29) + +| Phase | Beschreibung | Sicherste Variante | +|---|---|---| +| **Wachstumsphase** | Viele Sperren werden **angefordert**, wenige freigegeben | Sperren werden nur **gesetzt**, nicht aufgehoben | +| **Minderungsphase** (Schrumpfphase) | Viele Sperren werden **freigegeben**, wenige angefordert | Sperren werden nur **aufgehoben**, nicht gesetzt | + +### 8.2 Zeitstempelbasierte Synchronisation (Folie 30) + +Wird **selten eingesetzt**. Idee: + +| Regel | Beschreibung | +|---|---| +| Eindeutiger Zeitstempel | Jede Transaktion bekommt einen eindeutigen Zeitstempel | +| Ordnung | Scheduler ordnet konkurrierende Operationen nach Zeitstempel | +| Objektstempel | Zu jedem Datenobjekt wird der Zeitstempel der letzten Operation gespeichert | +| Abweisung | Operation mit **früherem** Zeitstempel als der des Objektes wird **abgewiesen** | +| Reihenfolge | Transaktionen müssen laut Zeitstempelreihenfolge beendet werden | + +**Löst:** Alle Probleme **außer Phantom Read**. + +--- + +## Zusammenfassung + +| Konzept | Beschreibung | +|---|---| +| **Transaktion** | Atomare Operation: alles oder nichts (COMMIT/ROLLBACK) | +| **ACID** | Atomicity, Consistency, Isolation, Durability | +| **Lost Update** | Überschreiben von Änderungen → SERIALIZABLE | +| **Dirty Read** | Lesen nicht festgeschriebener Daten → READ COMMITTED | +| **Non-Repeatable Read** | Unterschiedliche Leseergebnisse → SERIALIZABLE | +| **Phantom Read** | Geänderte Zeilenanzahl → SERIALIZABLE | +| **Sperrbasiert (2PL)** | Wachstums- und Schrumpfphase, shared/exclusive locks | +| **Zeitstempelbasiert** | Ordnung nach Transaktions-Zeitstempeln | diff --git a/Datenbanken/Zusammenfassungen/g_Speicherstrukturen - zusammenfassung.md b/Datenbanken/Zusammenfassungen/g_Speicherstrukturen - zusammenfassung.md new file mode 100644 index 0000000..2e8ff2a --- /dev/null +++ b/Datenbanken/Zusammenfassungen/g_Speicherstrukturen - zusammenfassung.md @@ -0,0 +1,138 @@ +# Speicherstrukturen – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–11** + +--- + +## 1. Überblick (Folie 2) + +Oracle verwaltet eigene Speicherstrukturen auf dem **Datenträger** und im **Arbeitsspeicher** zwecks effizienter und konsistenter Datenbearbeitung. + +| Ort | Strukturen | +|---|---| +| **Datenträger** | Tablespaces, Datenbankdateien, Segmente, Redo-Log-Dateien | +| **Arbeitsspeicher** | System Global Area (SGA), Program Global Area (PGA), User Global Area (UGA) | + +--- + +## 2. Datenträger (Folien 3–7) + +### Tablespace (Folie 3) + +Ein Tablespace enthält theoretisch mehrere **Tabellen** und **Indizes**, verteilt auf mehrere **Datenbankdateien**. + +``` +Tablespace +├── Tabelle A, Tabelle B, Tabelle C +├── Index D, Index E +├── Datenbankdatei 1 +└── Datenbankdatei 2 +``` + +### Hierarchie der Strukturen (Folie 4) + +Ein separates Tablespace ist für **jede Anwendung** gedacht (alle User, Tabellen, Indizes, Prozeduren). + +| Ebene | Beschreibung | +|---|---| +| **Datenbank** | Besteht aus mehreren **Tablespaces** | +| **Tablespace** | Besteht aus mehreren **Datenbankdateien** | +| **Datenbankdatei** | Besteht aus mehreren **Segmenten** (Extenten), zugeordnet zu Tabellen oder Indizes | +| **Segment** | Besteht aus mehreren **Blöcken** | +| **Block** | Kleinste Einheit, die gelesen/geschrieben werden kann | + +Ist eine Tabelle voll, kann sie durch ein **Segment (Extent)** erweitert werden. + +### Logische vs. Physische Objekte (Folie 5) + +| Typ | Beispiele | +|---|---| +| **Logische Objekte** | Tabellen, Indizes, User, Prozeduren | +| **Physische Objekte** | Tablespace, Datenbankdatei, Segment (Extent), Block | + +### CREATE TABLE mit Storage-Klausel (Folie 5) + +```sql +CREATE TABLE T ( + A INTEGER, B VARCHAR2(20) +) +TABLESPACE myTabSpc STORAGE ( + INITIAL 1M -- Anfangssegment + NEXT 500K -- Extente (weitere Segmente) + MINEXTENTS 1 -- minimale Anzahl der Segmente + MAXEXTENTS 100 -- maximale Anzahl der Segmente + PCTINCREASE 10 -- Größe der Segmente wächst um 10% +); +``` + +### Tablespace-Verwaltung (Folie 6) + +```sql +-- Tablespace anzeigen +SELECT * FROM user_tablespaces; +SELECT * FROM dba_tablespaces; + +-- Tablespace erstellen +CREATE TABLESPACE orion +DATAFILE 'c:\oracle\oradata\ora\orion.dbf' +SIZE 10M +AUTOEXTEND ON NEXT 200K MAXSIZE 200M; + +-- Datenbankdatei hinzufügen +ALTER TABLESPACE orion +ADD DATAFILE 'c:\oracle\oradata\ora\orion2.dbf' +SIZE 10M AUTOEXTEND ON NEXT 100K MAXSIZE 800M; + +-- Tablespace offline/online schalten +ALTER TABLESPACE orion OFFLINE IMMEDIATE; +ALTER TABLESPACE orion ONLINE; + +-- Einzelne Datenbankdateien offline/online +ALTER DATABASE DATAFILE '...\orion3.dbf' OFFLINE DROP; +ALTER DATABASE DATAFILE '...\orion4.dbf' ONLINE; +``` + +### Rollback-Segmente und Redo-Log-Dateien (Folie 7) + +| Struktur | Funktion | +|---|---| +| **Rollback-Segmente** | Speichern Daten **vor** Änderungen; Anfragen lesen aus Rollback-Segmenten, solange Änderungen noch nicht COMMIT sind; in Oracle automatisch via **Undo-Management** im UNDO-Tablespace verwaltet | +| **Redo-Log-Dateien** | Enthalten **schon durchgeführte** Änderungen; ermöglichen Nachvollziehen der gesamten Datenänderungsgeschichte; werden **zyklisch beschrieben** und automatisch archiviert | + +--- + +## 3. Arbeitsspeicher (Folien 8–10) + +### System Global Area – SGA (Folien 8–9) + +| Komponente | Beschreibung | +|---|---| +| **Database-Buffer-Cache** | Enthält Datenblöcke (z. B. Zeilen einer Tabelle), die angezeigt/geändert werden müssen; lädt mehrere Zeilen (auch benachbarte) für hohe Zugriffsgeschwindigkeit; wird von speziellen Algorithmen verwaltet (Verdrängung nicht benötigter Daten) | +| **Dirty List** | Liste mit Blockadressen aus dem Database-Buffer-Cache, deren Daten **geändert** wurden; geänderte Blöcke werden nach COMMIT anhand der Dirty List in die Datenbank geschrieben | +| **Redo-Log-Buffer** | Protokolliert Daten vom Database-Buffer-Cache für den Fall eines **unerwarteten Systemabsturzes** | +| **Shared Pool** | Verarbeitet SQL-Anweisungen: Benutzerrechte prüfen, Existenz von Tabellen/Spalten prüfen, Syntax prüfen, Optimierung; nutzt Metadaten aus dem **Data Dictionary** (Tablespace SYSTEM) | +| **Large Pool** | Speicherplatz für System-Komponenten wie z. B. **Recovery-Manager** | +| **Java Pool** | Virtuelle Umgebung für **Java-Anwendungen** | + +### Program Global Area – PGA (Folie 10) + +Beinhaltet Informationen, die für die **Steuerung der gesamten Oracle-Prozesse** notwendig sind. + +### User Global Area – UGA (Folie 10) + +Beinhaltet Informationen, die einem **aktuell verbundenen Benutzer** zugeordnet sind (Sitzung). + +--- + +## Zusammenfassung + +| Ebene | Struktur | Funktion | +|---|---|---| +| **Datenträger** | Tablespace | Container für Anwendungsdaten | +| | Datenbankdatei | Physische Dateien im Tablespace | +| | Segment/Extent | Erweiterbare Speichereinheit für Tabellen/Indizes | +| | Block | Kleinste I/O-Einheit | +| | Rollback-Segment | Daten vor Änderung (UNDO) | +| | Redo-Log-Datei | Daten nach Änderung (REDO) | +| **Arbeitsspeicher** | SGA | Globaler Speicher: Buffer-Cache, Dirty List, Redo-Log-Buffer, Shared Pool, Large Pool, Java Pool | +| | PGA | Prozesssteuerung | +| | UGA | Benutzer-Sitzungsdaten | diff --git a/Datenbanken/Zusammenfassungen/h_Sicherungskonzepte - zusammenfassung.md b/Datenbanken/Zusammenfassungen/h_Sicherungskonzepte - zusammenfassung.md new file mode 100644 index 0000000..c5d5800 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/h_Sicherungskonzepte - zusammenfassung.md @@ -0,0 +1,314 @@ +# Sicherungskonzepte – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–49** + +--- + +## 1. Einführung (Folien 1–12) + +### Datensicherheit (Folie 3) + +**Datensicherheit** = Alle technischen und organisatorischen Maßnahmen zum Schutz der Daten vor **Verfälschung, Zerstörung und unzulässiger Weitergabe**. + +- Informationssicherheit ist nicht nur Technik, sondern auch abhängig von **organisatorischen und personellen** Rahmenbedingungen +- Das **BSI** (Bundesamt für Sicherheit in der Informationstechnik) veröffentlicht das IT-Grundschutzhandbuch (ab 2005: IT-Grundschutz-Kataloge) unter www.bsi.bund.de + +### Schadenskategorien (Folien 5–6) + +| Kategorie | Beschreibung | Beispiel | +|---|---|---| +| **Verlust der Verfügbarkeit** | Grundlegende Informationen nicht vorhanden | Keine Geldtransaktionen, Online-Bestellungen oder Produktionsprozesse möglich | +| **Verlust der Vertraulichkeit** | Ungewollte Offenlegung von Informationen | Personenbezogene Daten, Umsatz, Marketing, Forschungsdaten gelangen an Konkurrenz | +| **Verlust der Integrität** | Gefälschte Daten | Fehlbuchungen, falsche Lieferungen, fehlerhafte Produkte | +| **Verlust der Authentizität** | Daten falscher Person zugeordnet | Zahlungsanweisungen zu Lasten Dritter, falsche digitale Willenserklärungen | + +### Relevante Gesetze (Folie 7) + +| Gesetz | Kürzel | Jahr | +|---|---|---| +| Bundesdatenschutzgesetz | BDSG | 1990/2003/2009 | +| Telekommunikationsgesetz | TKG | 2004 | +| Telemediengesetz | TMG | 2007 | +| Signaturgesetz | SigG | 2001 | +| Diverse Landesdatenschutzgesetze | — | — | + +### Grundprinzipien der Sicherheit (Folien 8–12) + +| Prinzip | Beschreibung | +|---|---| +| **Authentifizierung** | Subjekte (Benutzer, Rechner, Dienste) müssen ein Konto besitzen und sich mit gültigem Anmeldenamen + Kennwort anmelden; moderne DB erlauben auch Betriebssystem-Authentifizierung und Zertifikate | +| **Autorisierung** | System muss Zugriffsrechte implementieren: Leserechte (ohne Änderung), Änderungsrechte (inkl. Lesen), volle Rechte (inkl. Weitergabe); Verweigerung/Entziehung möglich | +| **Protokollierung** | Alle wichtigen Vorgänge müssen überwacht werden: Lesen/Ändern/Löschen, Anmeldung, DB-Start/Stop, Kontenverwaltung; Mindestangaben: **wer**, **was**, **wann**; in Oracle: **Auditing** | + +**Beispiel Verletzung:** Web-Server ordnet alle Anfragen einem pauschalen Konto zu → Verletzung der Authentifizierung → potenzieller Angreifer kann unsinnige Anfragen senden. + +--- + +## 2. Integrität (Folien 13–23) + +### Definition (Folie 14) + +**Integrität (Konsistenz)** = Zustand der Daten, in dem sie korrekt, vollständig und widerspruchsfrei sind. + +| Art | Beschreibung | +|---|---| +| **Semantische Integrität** | Werte gehören zum Wertebereich, richtige Datentypen, keine Tippfehler | +| **Referentielle Integrität** | Korrektheit der Primär- und Fremdschlüssel, Existenz der Verweise | +| **Logische Integrität** | Transaktionen, zusammengehörende Operationen | + +### Gewährleistung der Integrität (Folie 15) + +| Ebene | Beschreibung | +|---|---| +| **Datenbank** (bessere Lösung) | Klauseln in DDL-Anweisungen | +| **Anwendung** (zusätzliche Lösung) | Programmcode der Anwendung | + +**Vorteile der DB-Ebene** (Folie 16): +- DB selbst gewährleistet Konsistenz → inkonsistente Zustände unmöglich +- Ein-/Ausschaltbar (z. B. beim Import) +- Standardisierte Möglichkeiten +- Unabhängig von einzelnen Anwendungen +- Schnellere Anwendungsentwicklung + +### Integritätsverletzende Operationen (Folie 17) + +- **DML:** INSERT, UPDATE, DELETE +- **DDL:** ALTER, DROP, RENAME + +### Aktionen bei Integritätsverletzung (Folie 18) + +| Aktion | Beschreibung | +|---|---| +| **Rollback** | Abbrechen der Operation und Zurücksetzen auf Zustand davor | +| **Cascade** | Propagieren der Operation auf alle beteiligten Tabellen | +| **Set Null** | Betroffene Attribute auf NULL setzen | + +### Referentielle Integrität (Folie 19) + +Die Werte eines **Fremdschlüssels** müssen auch als Werte des **Primärschlüssels** vorhanden sein. + +### Constraint-Typen (Folie 20) + +| Constraint | Beschreibung | +|---|---| +| **PRIMARY KEY** | Attribut(e) bilden primären Schlüssel; automatisch wird Index angelegt (Oracle) | +| **FOREIGN KEY** | Attribut(e) bilden PK in einer anderen Tabelle | +| **ON DELETE CASCADE** | Löschen in PK-Tabelle löscht auch FK-Datensätze | +| **NOT NULL** | Attribut muss einen Wert haben | +| **UNIQUE** | Werte sind einmalig | +| **CHECK** | Logischer Ausdruck muss wahr sein | + +### Beispiele (Folien 21–22) + +```sql +CREATE TABLE Studenten ( + MatrNr INTEGER PRIMARY KEY, + Name VARCHAR(30) NOT NULL, + Semester INTEGER CHECK Semester BETWEEN 1 AND 13 +); + +CREATE TABLE Professoren ( + PersNr INTEGER PRIMARY KEY, + Name VARCHAR(30) NOT NULL, + Rang CHAR(2) CHECK (Rang IN ('C2', 'C3', 'C4')), + Raum INTEGER UNIQUE +); + +CREATE TABLE voraussetzen ( + Vorgaenger INTEGER REFERENCES Vorlesungen(VorlNr) ON DELETE CASCADE, + Nachfolger INTEGER REFERENCES Vorlesungen(VorlNr) ON DELETE NO ACTION, + PRIMARY KEY (Vorgaenger, Nachfolger) +); + +CREATE TABLE pruefen ( + MatrNr INTEGER REFERENCES Studenten ON DELETE CASCADE, + VorlNr INTEGER REFERENCES Vorlesungen, + PersNr INTEGER REFERENCES Professoren, + Note NUMERIC(2,1) CHECK (Note BETWEEN 0.7 AND 5.0), + PRIMARY KEY (MatrNr, VorlNr) +); +``` + +### Trigger (Folie 23) + +**Trigger** = Prozedur/Funktion, die bei bestimmten Ereignissen **automatisch** gestartet wird. + +**Auslöser:** +- DML: INSERT, DELETE, UPDATE +- DDL: CREATE, ALTER, DROP +- An-/Abmeldung, Start/Stop der DB + +**Zeitpunkt:** + +| Zeitpunkt | Beschreibung | +|---|---| +| **BEFORE** | Vor der Änderung | +| **AFTER** | Nach der Änderung | +| **INSTEAD OF** | Statt der Änderung | + +--- + +## 3. Rechte (Folien 24–31) + +### User/Schema-Konzept in Oracle (Folie 25) + +- Zentral: **User (Benutzer)**, auch **Schema** genannt +- Oracle-DB besteht aus verschiedenen Schemen, innerhalb derer ERM realisiert sind +- Vordefinierte Benutzer: **SYS** und **SYSTEM** (alle Rechte) +- Alle anderen Benutzer müssen erstellt und mit Rechten versehen werden + +### Zugriffsrichtlinien (Folie 26) + +Klare Richtlinien sollten festlegen: wer darf zugreifen, auf welche Ressourcen, welche Zugriffsart, an welchen Tagen/Uhrzeiten, von welchen Computern, wer erlaubt/informiert/protokolliert/abrechnet. + +### Sicherheitsmechanismen (Folie 27) + +| Mechanismus | Beschreibung | +|---|---| +| **DAC** (Discretionary Access Control) | Regel: {O, S, R, P, F} – Objekte, Subjekte, Zugriffsrechte, Prädikat, Recht zur Rechtevergabe | +| **MAC** (Mandatory Access Control) | Hierarchie der Prozesse mit Markierungen (Einstufung); Kommunikation nur bei gleichem Niveau | + +### Privilegien (Folie 28) + +| Typ | Beispiele | +|---|---| +| **Systemprivilegien** | Anmeldung, Anlegen/Löschen von Tabellen/Benutzern/Prozeduren, Abfragen von Systemtabellen, Verwaltung von Tablespaces | +| **Objektprivilegien** | Abfragen von Tabellen, Ändern von Inhalten, Verwenden von Funktionen | + +**Empfehlung:** Sinnvolle **Rollenmatrix** erstellen; Benutzer bekommen keine Privilegien direkt, sondern über **Rollen**. + +### Benutzerverwaltung (Folien 29–31) + +```sql +-- Benutzer erstellen +DROP USER Student07; +CREATE USER Student07 IDENTIFIED BY system +DEFAULT TABLESPACE users +TEMPORARY TABLESPACE temp +QUOTA UNLIMITED ON users; + +-- Passwort ändern +ALTER USER Student07 IDENTIFIED BY System01; + +-- Rolle erstellen und Rechte vergeben +DROP ROLE StudentRole; +CREATE ROLE StudentRole; +GRANT CREATE session, CREATE table, CREATE view, + CREATE synonym, CREATE procedure, CREATE trigger +TO StudentRole; +GRANT StudentRole TO Student07; + +-- Objektprivilegien (direkt, nicht empfohlen) +GRANT SELECT ON Tabelle13 TO Student07, Student08; +GRANT INSERT, SELECT ON Student03.TabelleA TO Student07; +GRANT ALL ON database TO dba_user02; + +-- Spalten-basierte Rechte +GRANT UPDATE (Spalte1), INSERT (Spalte2, Spalte3) +ON Tabelle52 TO Student07; +``` + +**Befehle:** Nur **GRANT** (Rechte vergeben) und **REVOKE** (Rechte entziehen). + +--- + +## 4. Backup (Folien 32–49) + +### Definition (Folien 33–34) + +**Backup (Datensicherung)** = Speicherung der Daten, mit der ein System nicht direkt arbeitet. + +**Eigenschaften:** +- Kann mehrere Dateien und Verzeichnisse beinhalten +- Kann wie eine oder mehrere Dateien aussehen +- Kann verschlüsselt und/oder komprimiert sein +- Kann sich über mehrere Datenträger verbreiten + +**Backup-Archiv** = Sammlung von mehreren Backups. + +**Zwecke:** +1. Wiederherstellung nach Absturz +2. Wiederherstellung eines bestimmten Zeitpunkts für Statistik (z. B. Jahresbericht) +3. Wiederherstellung für planmäßige Funktionalität (z. B. Forschungsprojekte) + +**Regel:** In allen nicht privaten Systemen muss man immer Backup planen und regelmäßig durchführen. + +### RAID (Folien 35–38) + +**RAID** (Redundant Array of Inexpensive/Independent Disks) ist **kein Backup**! + +| Eigenschaft | Beschreibung | +|---|---| +| Funktion | Redundante Speicherung auf mehreren Festplatten | +| Bei Ausfall | Daten können von anderer Platte gelesen/geschrieben werden | +| Hot-Swap | Kaputte Platte im laufenden Betrieb austauschbar | +| Software-RAID | Von fast allen Betriebssystemen unterstützt | +| Hardware-RAID | Betriebssystemunabhängig | + +- RAID erfüllt **keine** Backup-Funktionen +- RAID kann als **Speicherort** für Backup verwendet werden + +### Oracle Backup-Tools (Folie 39) + +| Tool | Beschreibung | +|---|---| +| **exp/imp** | Ältere Versionen | +| **expdp/impdp** | Neuere Versionen (Data Pump) | +| **RMAN** | Recovery Manager | + +**Weitere Tools (Folie 40):** Linux (cp, tar, bzip, gzip, dd), Windows (copy, Server-Sicherung), Drittanbieter (Acronis, Paragon, Fwbackups, Bacula). + +### Backup-Medien (Folien 41–42) + +| Medium | Beschreibung | +|---|---| +| **DAS** | Direct Attached Storage (lokale Festplatte) | +| **NAS** | Network Attached Storage (Netzwerk) | +| **SAN** | Storage Area Network (Netzwerk) | +| Magnetband | Bandlaufwerk mit Roboter, bis zu 4 GiB | +| CD/DVD/Blu-Ray | Optische Medien | +| USB-Geräte | Externe Speicher | +| FireWire-Geräte | Externe Speicher | +| Cloud | Sicherheit bedenklich | + +**Generationsprinzip (Großvater–Vater–Sohn):** +- 3 Datenträger rotierend: 1. Sicherung → Großvater, 2. → Vater, 3. → Sohn +- 4. Sicherung: Großvater wird zum Sohn überschrieben, Rollen rotieren +- Je mehr Datenträger, desto sicherer + +### Backup-Methoden (Folie 43) + +| Methode | Beschreibung | +|---|---| +| **Online/Hot Backup** | DB läuft weiter, Daten werden im laufenden Betrieb gesichert; Gefahr: nicht-konsistenter Zustand; DB liefert spezifische Lösungen | +| **Offline/Cold Backup** | DB wird heruntergefahren, geschlossene Dateien kopiert; Datenbestand ist **immer konsistent** | + +### Sicherungsarten (Folien 44–47) + +| Art | Umfang | Markierung? | Wiederherstellung | Vorteil/Nachteil | +|---|---|---|---|---| +| **Normal** | Alle ausgewählten Daten | Ja (als gesichert) | Nur diese Sicherung | Einfach, aber groß | +| **Kopie** | Wie Normal | Nein | — | Keine Auswirkung auf andere Strategien | +| **Täglich** | Nur heute geänderte Daten | Ja | — | Klein, tagesbezogen | +| **Inkrementell** | Nur seit letzter Sicherung geänderte Daten | Ja | Letzte Normal + alle Inkrementellen in Reihenfolge | Wenig Zeit/Speicher, aber aufwändige Wiederherstellung | +| **Differenziell** | Nur seit letzter normaler Sicherung geänderte Daten | Nein | Letzte Normal + letzte Differenzielle | Einfache Wiederherstellung, aber wachsende Größe | + +### Sicherungsstrategien (Folie 48) + +| Strategie | Beispiel | +|---|---| +| Nur normale Sicherungen | Monatlich | +| Normal + Inkrementell | Jährlich normal, monatlich inkrementell | +| Normal + Differenziell | Jährlich normal, monatlich differenziell | + +**Wichtig:** Anforderungen des Unternehmens und Speicherbedarf müssen berücksichtigt werden. + +--- + +## Zusammenfassung + +| Bereich | Kernkonzepte | +|---|---| +| **Grundprinzipien** | Authentifizierung, Autorisierung, Protokollierung | +| **Integrität** | Semantisch, Referentiell, Logisch; Constraints (PK, FK, NOT NULL, UNIQUE, CHECK); Trigger | +| **Rechte** | DAC/MAC, System-/Objektprivilegien, Rollen, GRANT/REVOKE | +| **Backup** | Hot/Cold, Normal/Inkrementell/Differenziell, RAID ≠ Backup, Generationsprinzip | diff --git a/Datenbanken/Zusammenfassungen/i_DWKonzepte - zusammenfassung.md b/Datenbanken/Zusammenfassungen/i_DWKonzepte - zusammenfassung.md new file mode 100644 index 0000000..f083431 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/i_DWKonzepte - zusammenfassung.md @@ -0,0 +1,163 @@ +# Data Warehouse Konzepte – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–19** + +--- + +## 1. Konzepte (Folie 2) + +Drei Verarbeitungsarten: +- **Batch-Verarbeitung** – klassische Stapelverarbeitung +- **OLTP** = Online Transaction Processing – Tagesgeschäft +- **OLAP** = Online Analytical Processing – Analyse und Auswertung + +OLAP-Systeme sind unverzichtbare Instrumente zur **Analyse umfangreicher und mehrdimensionaler Daten**. Sie gewähren anwendungsspezifische Sichten und werden primär von **Managern unterschiedlicher Ebenen** verwendet. + +--- + +## 2. OLAP (Folien 3–5) + +### Gründe für OLAP +- Trennung von Tagesgeschäft und Auswertungen +- Historisierte Daten mit Zeitraum-Bezug +- Große Mengen von **Nur-Lese-Daten** (Permanenz) +- **Multidimensionale Datenmodelle** +- Gezielte **Denormalisierung** des ganzen Modells + +### Eigenschaften von OLAP +- Intuitive und interaktive Analyse der Daten +- Flexible Darstellung aus unterschiedlichen Perspektiven +- Basis: **Hypercube** (kartesisches Produkt) +- Besondere Operationen: Rotation, Slice, Dice, Drill-Through, Drill-Across, Roll-Up, Drill-Down +- Clients: Spezielle Programme oder Tabellenkalkulationstools (z.B. Excel) + +### Data Warehouse als OLAP-Datenbank dient: +- Unterstützung strategischer Entscheidungen +- Analyse von Tendenzen und Mustern über große Zeiträume +- Bessere Entscheidungen durch bessere Informationen +- Flexiblere Analysemöglichkeiten +- Verlagerung der Analyse in Fachabteilungen +- Geringere Berichterstellungskosten +- Gemeinsame Informationsbasis im Unternehmen + +--- + +## 3. ROLAP und MOLAP (Folien 6–8) + +### ROLAP – Relationales OLAP +- Basiert auf **relationalen Datenbanken** (Oracle, DB2) +- Verwendet **Star-Schema** (Fakten- und Dimensionstabellen, 3NF bei Dimensionstabellen verletzt) und **Snowflake-Schema** (normalisiert) +- Für hohes Datenvorkommen und große Nutzerzahlen geeignet + +**Vorteile:** +- Bewährte relationale Technologien für Abfragen, Verwaltung, Speicherung, Recovery, Archivierung +- Sperrmechanismen und Transaktionen nicht benötigt + +**Nachteile:** +- Umfangreiche JOINs, Indizes, Table Scans nötig +- Umfangreiche Aggregationen und Berechnungen + +### MOLAP – Multidimensionales OLAP +- Basiert auf **herstellerspezifischen Datenbanken** +- Optimiert für hohe Performance in multidimensionalen Datenstrukturen +- Schnelle Aggregationen + +**Vorteile:** +- Hohe Performance +- Am multidimensionalen Modell ausgerichtet + +**Nachteile:** +- Hoher Schulungsaufwand +- Proprietäre Verwaltung +- Oft fehlende Standardschnittstellen + +### HOLAP – Hybrides OLAP +- Variante aus ROLAP und MOLAP + +--- + +## 4. Lebenszyklus eines Data Warehouse (Folien 9–13) + +### Schritt A – Planung +- Analyse von Architektur und Infrastruktur +- Definition der Ressourcen und Zeitvorgaben +- Archivierungsstrategien +- Verbindungsmöglichkeiten und Ladeprogramme + +### Schritt B – Spezifikation & Modellierung +- Ermittlung der Entitäten und Attribute +- Geschäftsprozesse und -anwendungsfälle identifizieren +- Ein-/Ausgabedaten und Detailierungsgrad festlegen +- **Logisches Datenmodell** entsteht + +### Schritt C – Physischer Datenbankentwurf +- Star-Schema / Snowflake-Schema entwerfen +- Aufheben der Normalisierung +- Schlüssel, Indizierungsstrategien, Partitionierung festlegen + +### Schritt D – Befüllen des DWH +- Definition der Quellsysteme +- Umformungsspezifikationen +- Aktualisierungszyklus festlegen +- **ETL-Prozeduren** definieren und testen +- Automatisierung der Ladevorgänge, Backup- und Recovery-Prozeduren +- Anwendungsentwicklung (Berichte, Dokumentation, Test) + +### Schritt E – Betrieb +- Test und Überprüfung der Daten +- Schulung, Produktabnahme, Wartung +- Verbesserungen und Weiterentwicklung +- Performance-Untersuchungen + +--- + +## 5. Vergleich OLTP und OLAP (Folie 14) + +| Merkmal | OLTP | OLAP | +|---|---|---| +| Abfragen | Vorhersehbar, einzelne Datensätze | Komplex, unvorhersehbar | +| Daten | Ständige Änderungen | Statisch, unveränderbar | +| Datenstruktur | Normalisiertes Modell (nur notwendige Redundanz) | Denormalisiertes Modell (verständlich) | +| Fokus | Hohe Transaktionsrate | Aggregation – viele Fakten zu einem Fakt | + +--- + +## 6. ETL – Extract, Transform, Load (Folie 15) + +### Extraktion +- Periodischer, ereignisgesteuerter oder anfragegesteuerter Abzug +- Komplette oder Delta-Übertragungen +- Protokollierung der Änderungen und Übertragungen + +### Transformation (im Arbeitsbereich) +- Datentypkonvertierung +- Wertumsetzung +- Schlüsselvergabe, -anpassung, -bereinigung +- Zeitstempelvergabe +- Datenverdichtung, -bereinigung + +### Laden +- Übertragung der Daten aus dem Arbeitsbereich in das Data Warehouse + +--- + +## 7. Funktionsweise – Hypercube-Operationen (Folien 16–17) + +Grundlage: **Mehrdimensionaler Hypercube** mit Dimensionen wie Zeitperioden, Produkte, Abteilungen und Werten wie Absatzvolumen. + +### Navigationsoperationen +- **Rotation** – Auswahl zweier konkreter Dimensionen (Drehung des Würfels) +- **Slice** – Voller zweidimensionaler Ausschnitt aus dem Würfel +- **Dice** – Mehrdimensionaler Ausschnitt (Untermenge, kleiner Würfel) +- **Drill-Across** – Verbindung mehrerer Würfel gleicher Dimension zu einer Kette + +### Hierarchische Navigation +- **Drill-Down** – Von oberer zu tieferer Ebene der Hierarchie +- **Roll-Up** – Von tieferer zu oberer Ebene der Hierarchie +- **Drill-Through** – Wenn Drill-Down nicht mehr möglich, wird neue Datenquelle (Würfel) angeschlossen + +--- + +## 8. Varianten (Folie 18) + +- **Data Marts** – Begrenzter Anwendungsbereich (z.B. eine Abteilung). Einfacher einzurichten als DWH, aber Konsistenzprobleme bei mehreren Data Marts +- **Operation Data Stores** – Für aktuelle (tägliche) Auswertungen, unterstützen kaum langfristige Abfragen diff --git a/Datenbanken/Zusammenfassungen/j_AndereDB - zusammenfassung.md b/Datenbanken/Zusammenfassungen/j_AndereDB - zusammenfassung.md new file mode 100644 index 0000000..c128441 --- /dev/null +++ b/Datenbanken/Zusammenfassungen/j_AndereDB - zusammenfassung.md @@ -0,0 +1,199 @@ +# Andere Typen von Datenbanken – Zusammenfassung +**Dozent:** A. Zimmermann | HWR Berlin | 2026 | **Folien 1–44** + +--- + +## 1. Hierarchische Datenbanken (Folien 2–14) + +### Konzept +- Vermutlich die **ältesten Datenbanken**, heute nur noch historische Bedeutung +- Bei Bedarf durch relationale Datenbanken simulierbar +- Datenbestand: Datensätze mit fester oder variabler Struktur +- Semantische Beziehungen sind **fest programmmäßig durch Verweise** implementiert (Vorgänger-Nachfolger-Prinzip) + +### Vorteile +- Theoretisch sehr schnelle Such-, Einfüge- und Änderungsvorgänge + +### Nachteile +- **Unflexible baumartige Struktur** +- Mit der Zeit werden Zugriffe langsamer (Einfüge-/Löschoperationen) → Baum muss in Gleichgewicht gebracht werden (zeit- und speicheraufwendig) + +### Merkmale +- Gut geeignet für: **Dateisysteme**, LDAP, Internet-Domänen, Stücklisten +- Datensätze können mehr als zwei Verweise enthalten → nicht nur binäre, sondern auch **n-äre Bäume** +- Knoten können auf Bäume mit anders strukturierten Datensätzen verweisen (Bäume/Unterbäume = Entitätstypen) +- Nicht-hierarchische Beziehungen: durch verkettete Listen implementiert + +### IMS von IBM +- Älteste, bis heute eingesetzte hierarchische Datenbank +- Komponenten: Datenbank, IMS Explorer, IMS SOAP Gateway, IMS Java Connector, IMS Data Provider .NET + +--- + +## 2. Netzartige Datenbanken (Folien 15–17) + +### Konzept +- Entstehen aus hierarchischen DB durch **Verweisfelder für Rückwärtsbewegung** +- **Verallgemeinerung** der hierarchischen Datenbanken +- Unterschiedliche Entitätstypen vertreten, Beziehungen durch besondere Art der Datensätze modelliert + +### Vorteile +- Theoretisch vielfältige Verweise möglich + +### Nachteile +- Unflexible netzartige Struktur +- Modellierung der Beziehungen eingeschränkt +- Saubere Trennung der Entitätstypen kaum möglich + +### Merkmale +- Geeignet für: **geografische Elemente**, Makrostrukturen des Internets +- Jeder Knoten kann mehrere Vorgänger und Nachfolger haben +- Semantische Darstellung der Beziehungen meist programmiert +- Bekannter Vertreter: **UDS** (Universal Datenbank System) von Siemens +- Ca. 20 Jahre im Einsatz, dann durch **relationale Datenbanken verdrängt** + +--- + +## 3. Verteilte Datenbanken (Folien 18–25) + +### Konzept +- **Verbund von mehreren** (meist relationalen) Datenbanken +- Zusammenfassung von Informationseinheiten auf **mehreren Knoten** (Computern), über ein Netzwerk verbunden +- **Metadaten** (Zugriffsdaten) in einer übergeordneten Datenbank zusammengefasst +- Verteilte Transaktionen bestehen aus Teil-Transaktionen in den Komponenten-Datenbanken + +### Vorteile +- Optimale Darstellung der Unternehmensstruktur durch lokale Datenbestände +- Unabhängigkeit der Teil-Datenbanken voneinander +- Orts-, Plattform- und Netzwerkunabhängigkeit +- Ständiger Betrieb +- Effizienz durch parallele Verarbeitung +- Transparenz der Anfragen und Anweisungen +- Ergebnis- statt Sourcedaten-Transfer + +### Nachteile +- Vorbereitungsaufwand (Konzepte, Planung, Koordination) +- Zusätzliche Administration der Metadaten (Backup/Restore, Konsistenz) +- Aufwendige Entwicklung der Abfragen +- Abhängigkeit von Lauffähigkeit der einzelnen Teil-Datenbanken + +### Entwurf +Wie bei konventionellen relationalen DB, plus zusätzliche Schritte: +1. **Fragmentierungsschema** erstellen +2. **Zuordnungsschema** erstellen + +### Fragmentierung +Relationen werden in disjunkte Fragmente zerlegt: +- **Horizontale Zerlegung** – Datensätze nach Kriterien zusammengefasst (z.B. Status='Prof') +- **Vertikale Zerlegung** – Attribute zusammengefasst (z.B. Vorname + Nachname) +- **Kombinierte Zerlegung** – horizontal + vertikal + +Anforderungen: +- **Vollständigkeit** – Rekonstruktion ergibt vollständige Datenbank +- **Disjunktion** – Fragmente überlappen sich nicht + +### Zuordnung (Allocation) +- Fragmente auf Knoten verteilen (theoretisch redundanzfrei) +- Aus Sicherheits-/Leistungsgründen: **Replikation** +- Benutzer arbeiten idealerweise nur mit dem Gesamtschema (Transparenz) + +### Verteilte Transaktionen +- DBMS muss globale Transaktion in **Teil-Transaktionen** zerlegen +- Entweder alle erfolgreich oder alle zurückgesetzt +- Jede Teil-DB muss **UNDO- und REDO-Funktionalität** beherrschen +- **Two-Phase-Commit**: prepare → ready/failed → commit/abort + +--- + +## 4. Objektorientierte Datenbanken (Folien 26–29) + +### Konzept +- Idee der OO: Daten und Aktionen (Methoden) zusammen bringen → **Kapselung** +- Idee der DB: Daten und deren **Beziehungen** modellieren, unabhängig von Aktionen +- Diese beiden Ideen sind **schwer zu vereinbaren** + +### Eigenschaften +- Vorteilhaft bei **Klassenhierarchien** unter Daten +- Komplexe Objekte speicher- und abrufbar +- **Keine Normalisierung** +- Abfragen langsamer als bei relationalen DB +- Geringe Kompatibilität zu allgemeinen Anwendungen + +### Beispiele +- **db4o** – geringe Speichergröße, für Java/.NET, keine SQL-Abfragesprache (QBE wird unterstützt), unterstützt Transaktionen (COMMIT, ROLLBACK) +- **Oracle** – objektrelationaler Ansatz: Objekttypen (analog zu Klassen) mit Daten, Funktionen und Prozeduren, instanziierbar in PL/SQL + +--- + +## 5. No-SQL-Datenbanken (Folien 30–43) + +### Konzept +- **No-SQL = Not only SQL** – betont die Existenz anderer Datenbanken neben relationalen +- Relationale DB bleiben wichtig für Anwendungen mit strengen Konsistenz-/Sicherheitsanforderungen + +### Gründe für No-SQL +- Enorm große Datenvolumen (TiB- und PiB-Bereiche) +- Kurze Laufzeiten der Abfragen nötig +- Konsistenz nicht vorrangig (Daten meist nur abgefragt) +- **Verfügbarkeit vor Konsistenz** (z.B. DNS) +- Speicher für relationale DB wird teuer + +### Eigenschaften +- Einfaches/schwaches/kein Schema +- Einfache horizontale und vertikale **Skalierung** (horizontal bevorzugt) +- **BASE-Prinzip** statt ACID +- Keine Normalformen, keine JOINs, denormalisiert +- Hohe Leistung und Verfügbarkeit dank **Replikation** + +### BASE vs. ACID + +| BASE | ACID | +|---|---| +| **B**asically **A**vailable – Verfügbarkeit ggf. auf Kosten der Konsistenz | **A**tomic – Transaktion ununterbrechbar | +| **S**oft State – Konsistenz an Entwickler delegiert | **C**onsistent – konsistenter Zustand gewährleistet | +| **E**ventually Consistent – Abfragen auch bei inkonsistentem Zustand | **I**solated – Transaktionen verletzen einander nicht | +| | **D**urable – ausgefallene Transaktion gefährdet eigene Daten nicht | + +### Vertreter der No-SQL-Datenbanken + +#### Document-Stores +- **Schemafrei**, Daten in Dokumenten mit eindeutiger ID +- Keine einheitliche Struktur, verschachtelbar +- Felder können verschiedene Datentypen und Arrays haben +- Hohe Skalierbarkeit +- Beispiele: **MongoDB, CouchDB** (halb-strukturierte Formate: XML, JSON) +- Nachteil: keine Normalisierung → Datenredundanz möglich, Konsistenz durch Anwendung + +#### Key-Value-Stores +- Nur **Schlüssel und zugehörige Werte** gespeichert +- Einfaches Schema, Schlüssel sortierbar +- Werte: Zahlen, Zeichenketten, Listen, Dokumente, Tabellen (nicht einheitlich) +- Daten im **Hauptspeicher (In-Memory)** oder auf Datenträger (On-Disc) +- Beispiele: **Berkeley DB, Redis, Amazon DynamoDB** +- Schnelle einfache Abfragen, aber komplexe Beziehungen schwer zu implementieren + +#### Wide-Column-Stores +- Datensätze haben **unterschiedliche Struktur** (schemafrei) +- Milliarden von Feldern pro Datensatz möglich +- Feldstruktur: Spaltenname (Schlüssel), Daten, Zeitstempel +- **Column Families** für zusammenhängende Spalten +- Beispiele: **MS Azure Cosmos DB, Cassandra** +- Gut für Big Data Analytics / DWH +- Nicht verwechseln mit spaltenorientierten relationalen DB (die haben festes Schema) + +#### XML-Datenbanken +- Daten im **XML-Format** gespeichert +- Abfragesprache: **XPath** +- Beispiel: **BaseX** +- Schnell für ganze Dokumente, langsam bei großen Datenmengen +- Fehlende Operationen wie COMMIT, ROLLBACK +- Eher **Verarbeitungssysteme für XML-Dokumente** als echte Datenbanken + +#### Graph-Datenbanken +- Daten in drei Klassen: **Knoten, Attribut, Kante** (Graph-Struktur) +- Knoten = Tupel (Datensätze), Kanten = Beziehungen +- Effektiv für **"wer-kennt-wen"**-Informationen +- Nachteile: keine einheitliche Abfragesprache, keine direkten Zugriffe auf Knoten via Attributen + +### Fazit +Die No-SQL-Datenbanken sind **sehr effektiv in ihrem Spezialgebiet**. diff --git a/Digitaltechnik/.DS_Store b/Digitaltechnik/.DS_Store new file mode 100644 index 0000000..f97de6d Binary files /dev/null and b/Digitaltechnik/.DS_Store differ diff --git a/Digitaltechnik/1aus8Decoder.circ b/Digitaltechnik/1aus8Decoder.circ new file mode 100644 index 0000000..7dc90f9 --- /dev/null +++ b/Digitaltechnik/1aus8Decoder.circ @@ -0,0 +1,285 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/3BItSynchronZähler.circ b/Digitaltechnik/3BItSynchronZähler.circ new file mode 100644 index 0000000..157d5c1 --- /dev/null +++ b/Digitaltechnik/3BItSynchronZähler.circ @@ -0,0 +1,194 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/4bitForwardCounter.circ b/Digitaltechnik/4bitForwardCounter.circ new file mode 100644 index 0000000..ebe6d28 --- /dev/null +++ b/Digitaltechnik/4bitForwardCounter.circ @@ -0,0 +1,139 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/DNF.circ b/Digitaltechnik/DNF.circ new file mode 100644 index 0000000..98ad110 --- /dev/null +++ b/Digitaltechnik/DNF.circ @@ -0,0 +1,148 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/DualGrayUmsetzer.circ b/Digitaltechnik/DualGrayUmsetzer.circ new file mode 100644 index 0000000..c706102 --- /dev/null +++ b/Digitaltechnik/DualGrayUmsetzer.circ @@ -0,0 +1,132 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/FlipFlop.circ b/Digitaltechnik/FlipFlop.circ new file mode 100644 index 0000000..d9bdfaf --- /dev/null +++ b/Digitaltechnik/FlipFlop.circ @@ -0,0 +1,386 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/GrayDualUmsetzer.circ b/Digitaltechnik/GrayDualUmsetzer.circ new file mode 100644 index 0000000..645a84c --- /dev/null +++ b/Digitaltechnik/GrayDualUmsetzer.circ @@ -0,0 +1,160 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/Klausuruebung.circ b/Digitaltechnik/Klausuruebung.circ new file mode 100644 index 0000000..75484a1 --- /dev/null +++ b/Digitaltechnik/Klausuruebung.circ @@ -0,0 +1,155 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/SynchronDualZähler.circ b/Digitaltechnik/SynchronDualZähler.circ new file mode 100644 index 0000000..53b0243 --- /dev/null +++ b/Digitaltechnik/SynchronDualZähler.circ @@ -0,0 +1,149 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/elektronischerWuerfel.circ b/Digitaltechnik/elektronischerWuerfel.circ new file mode 100644 index 0000000..b3c6393 --- /dev/null +++ b/Digitaltechnik/elektronischerWuerfel.circ @@ -0,0 +1,58 @@ + + + This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Digitaltechnik/labor7/4BitAsynchronZaehler_3b.circ b/Digitaltechnik/labor7/4BitAsynchronZaehler_3b.circ new file mode 100755 index 0000000..999b810 --- /dev/null +++ b/Digitaltechnik/labor7/4BitAsynchronZaehler_3b.circ @@ -0,0 +1,206 @@ + + +This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EInfuehrungProgrammierung/Probeprüfung - Biologischer Stammbaum.pdf b/EInfuehrungProgrammierung/Probeprüfung - Biologischer Stammbaum.pdf new file mode 100644 index 0000000..a2a0dde Binary files /dev/null and b/EInfuehrungProgrammierung/Probeprüfung - Biologischer Stammbaum.pdf differ diff --git a/EInfuehrungProgrammierung/Probeprüfung - Klassenbuch.pdf b/EInfuehrungProgrammierung/Probeprüfung - Klassenbuch.pdf new file mode 100644 index 0000000..634a3c2 Binary files /dev/null and b/EInfuehrungProgrammierung/Probeprüfung - Klassenbuch.pdf differ diff --git a/Grafik/.DS_Store b/Grafik/.DS_Store new file mode 100644 index 0000000..f426a04 Binary files /dev/null and b/Grafik/.DS_Store differ diff --git a/Grafik/Hackbarth/.DS_Store b/Grafik/Hackbarth/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/Grafik/Hackbarth/.DS_Store differ diff --git a/Grafik/Hackbarth/Hackbarth Einstiegsprojekt.md b/Grafik/Hackbarth/Hackbarth Einstiegsprojekt.md new file mode 100644 index 0000000..5d74dc2 --- /dev/null +++ b/Grafik/Hackbarth/Hackbarth Einstiegsprojekt.md @@ -0,0 +1,22 @@ +# Einstiegsprojekt in Visual Studio + +### Erstellung des Projekts +- C++ Game erstellen auswählen (Win11 SDK wichtig!) +- Desktop Installer Projekt erstellen +- main.cpp als Entrypoint + - windows.h inkludieren für Windows API! + - Docs: [Windows API Docs](https://learn.microsoft.com/en-us/windows/win32/learnwin32/creating-a-window) + +``` +#include + +int main( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nShowCmd +) +{ + return 0; +}; +``` diff --git a/Grafik/Hackbarth/Klausurthemen.md b/Grafik/Hackbarth/Klausurthemen.md new file mode 100644 index 0000000..5fd2e44 --- /dev/null +++ b/Grafik/Hackbarth/Klausurthemen.md @@ -0,0 +1,96 @@ +# Klausurvorbereitung + +- Es gibt keine Minuspunkte, aber halbe Punkte +- Antwortlänge an Punkte pro Frage anpassen +- Reihenfolgen und Sortierungsfragen auch werden auch dabei sein +- Datentypen oder Enumwerte aus D3D9/D3D11 (z. B. WMQUITE, WMDESTROY, WMEXIT) +- History-Inhalte aus den Folien aus den Folien kommt nicht + +**Transformation**:(Local Space) +- World +- View +- Projection + +**Zugelassen für Rechnungen**: +- Taschenrechner (nicht programmierbar) +- Windows oder Physisch + +### Themengebiete: +##### Generell: +- Graphics C ++ (z. B. warum C++ benutzen) +- Unterschied zwischen Pointer und Handle, Pointer-Pointer +- COM (Component Object Model von Windows) +- generelle Graphics Programmingsachen +##### Fenster: +- Fensternachrichten (Typen aus Vorlesungsfolien) +- Messagequeue +- Wozu braucht man Nachrichten? +- Messagequeue-Funktion: Window Prop +##### Graphics -API: +- Welche gibt es? +- Direct 3D +- Fixed Function vs. Programmable Pipeline +- Elemente der Pipelines: Vertex, Mesh, Transformation, Spaces, Projektion, Primitive Types, Unterschied List vs. Strip, Texture Mapping (Was ist eine Normale?) +- Homogenisierte Koordinaten und dessen Bedeutung +- Berechnungen: Koordinaten, FPS, Deltatime, Größe von Strukturen + - Beispiele: + - Indexbuffers -> kibiByte beachten -> Indices zählen + - Vertexbuffer berechnen (Umschrieben, nicht direkt gestellt) + - Texturebuffer berechnen + - Mipmapping (zählen der Stufen) +- Textures: + - UV-Mapping + - UV-Tiling (Address Modes) + - Bild von Modell und gefragt wie viele Verticies benötigt werden und welche +- Lighting: + - Sources, Lichtbestandteile (Ambient Light, Diffuse Light, Specular Light, Emission Light + - Vertex- vs. Pixel-Lighting +- Stages: + - Screen-Stage + - Rasterizer-Stage: Front faces /Back faces + +##### Direct3D/DirectX: +- Direct3D9 and Direct3D11 +- ID3D11 Device Context, IDirectDevice9 +- konkrete Datentypen aus Framework +- ID3D11 Device vs. ID3D11 Device Context +##### Shader: +- Shadertypen (6): + - Vertex shade + - Hall Shader + - Domain Shader + - Geometry Shader + - Pixelshader + - Computeshader +- zu jedem Shader Grundfunktionalitäten, wozu + sie da sind +- Shader Ressources (Vertexbuffer, Indexbuffer, Constantbuffer) +- HSL: High Level Shader Language, genereller Sinn von Semantiken in HSL + + +##### Verticies berechnen: +- Ziel: Lichtberechnung und Texturierung +1. Verticiesanzahl berechnen: Verticies = Ecken (4 pro Fläche) + - 4 Verticies * 6 Flächen = **24 Verticies** + - Eine Normale pro Fläche wegrn des Lichts, deswegen 24 Verticies statt 8 +2. Vertexgröße: + - Position: 3 Floats (x,y,z) + - Normale: 3 Floats (x,y,z) + - UV-Koordinaten: 2 Floats + - 1 Float = 4 Byte + ↳ 8 Floats. 4 Byles: **32 Byte pro Vertex** + - Verfexcolor: 4 Floats + - Grafikkarte ist auf Floats optimiert +3. Vertexbuffergröße: + - 24 Vertexe * 32 Byte pro Vertex = **768 Byte** + - 2 Byle = 1 Word +##### Indexbuffer berechnen: +- Primitive Type Lists: Triangle List (oder Linelist, Pointlist) +- 6 Flächen, 2 Dreiecke pro Fläche +- Mehrfachverwendung der Verticies +- Zusatzinfos nötig für die Berechnung: Wie viele Flächen und welche Form haben die Flächen +- wenn die Wahl frei steht: Triangle List (haben wir in der Vorlesung immer benutzt) +- Bytegröße selbst wählen: Anzahl der Indicies muss in die Bytegröße passen +- Berechnung: + 1. 12 Dreiecke * 3 Ecken = 36 Indicies + 2. 36 Indicies * 2 Byte = **72 Byte** \ No newline at end of file diff --git a/Grafik/Hackbarth/Klausurthemen.pdf b/Grafik/Hackbarth/Klausurthemen.pdf new file mode 100644 index 0000000..2270d44 Binary files /dev/null and b/Grafik/Hackbarth/Klausurthemen.pdf differ diff --git a/Grafik/Hackbarth/Links & Lighting.md b/Grafik/Hackbarth/Links & Lighting.md new file mode 100644 index 0000000..3cc19a9 --- /dev/null +++ b/Grafik/Hackbarth/Links & Lighting.md @@ -0,0 +1,29 @@ +--- +share_link: https://share.note.sx/432fk0nz#QrHwi4GF8i8Br/2gDbauKzSsc3TUy6hNjn0oYBUNeUk +share_updated: 2025-12-04T13:48:22+01:00 +--- +# Links & Lighting + +Stages & Pipeline: https://learn.microsoft.com/de-de/windows/win32/direct3d9/direct3d-architecture + +Strukturen: Vertices, Edges und Triangles + +Transformation: https://learn.microsoft.com/de-de/windows/win32/direct3d9/transforms +World Transformation: https://learn.microsoft.com/de-de/windows/win32/direct3d9/world-transform +View Transformation: https://learn.microsoft.com/de-de/windows/win32/direct3d9/view-transform +Projection Transformation: https://learn.microsoft.com/de-de/windows/win32/direct3d9/projection-transform + +Camera Grenze: Near & Far Clipping Plane + +Licht: +- Tiefen wahrnehmen -> Realismus +- Zum Einbeziehen: Lichtquellen + - Directional Light + - Point Light + - Spot Light +- Typen: + - Ambient Light + - Diffuse Light + - Specular Light + - Emission Light +- Formel für eine Lichtquelle: Texturen * (Umgebung + Diffuse) + Specular + Emission \ No newline at end of file diff --git a/Grafik/Hackbarth/Tag1_Bericht.md b/Grafik/Hackbarth/Tag1_Bericht.md new file mode 100644 index 0000000..511f298 --- /dev/null +++ b/Grafik/Hackbarth/Tag1_Bericht.md @@ -0,0 +1,400 @@ +Fundamentale Architektur: Ein umfassender technischer Leitfaden zu Windows-APIs und der DirectX-Grafikpipeline-Evolution (D3D9 zu D3D11) + +TEIL 1: Windows- und C++-Grundlagen für die Grafikanwendung + +1. Abstraktion und Ressourcenverwaltung in C++ und Win32 + +1.1. Pointer versus Handle: Detaillierte Unterschiede, technische Implementation und Verwendungszwecke + +Die Unterscheidung zwischen Pointern und Handles ist ein grundlegender Aspekt des Windows-Architekturentwurfs, der die Sicherheit und Stabilität des Betriebssystems gewährleistet. + +Ein **Pointer** ist eine direkte, typisierte virtuelle Speicheradresse im User Space. Die Anwendung hat volle Kontrolle über den Speicher, auf den der Pointer verweist, und der C++-Typ (`T*`) definiert, wie der Compiler diesen Speicher interpretiert.[1] Pointer bieten Transparenz und ermöglichen direkten Zugriff, was sie jedoch gefährlich für kritische Systemressourcen macht. + +Im Gegensatz dazu ist ein **Handle** (z. B. `HANDLE`, `HWND`) eine **opake Referenz**, die nicht notwendigerweise eine Speicheradresse darstellt.[1] Ein Handle ist ein Pseudo-Pointer, oft als numerischer Wert oder als `void*` Alias implementiert.[2] + +**Technische Implementation und Sicherheitsmechanismen:** Handles dienen als Abstraktionsschicht für systemweite Ressourcen (wie Fenster, Dateien oder Device Contexts). Der Windows-Kernel verwendet den Handle-Wert als Index oder ID, um einen Eintrag in einer internen, prozessübergreifenden Handle-Tabelle nachzuschlagen.[3, 4] Dieser Eintrag im Kernel Space enthält die tatsächlichen Adressen und Statusinformationen der Ressource. Dies entkoppelt die Anwendung von der internen Kernel-Struktur.[1] Der entscheidende Vorteil dieser Opazität ist die **Kernel-Sicherheit**: User-Mode-Anwendungen können kritische Systemressourcen nur über gesicherte API-Funktionen, die den Handle validieren, manipulieren. + +**Gültigkeitsprüfung und Lebenszyklus:** Da Handles vom Betriebssystem verwaltet werden, ist das Konzept der **Typsicherheit** weniger relevant als bei C++-Pointern; der Typ wird implizit durch die aufrufende API-Funktion bestimmt.[2] Die Verwaltung des Handles durch den Kernel führt zu einem kritischen Problem: **Handle Recycling**. Wenn eine Ressource geschlossen wird (z. B. ein Fenster zerstört), kann der numerische Handle-Wert sofort einer neuen, völlig anderen Ressource zugewiesen werden. Daher ist die einfache Überprüfung eines Handles auf Ungleichheit mit NULL oder `INVALID_HANDLE_VALUE` unzureichend, da ein recycelter Handle scheinbar gültig sein kann, aber auf das falsche Objekt verweist.[5] Die Anwendung ist verpflichtet, den Lebenszyklus des Handles strikt zu verfolgen. + +| | | | +|---|---|---| +|**Feature**|**C++ Pointer (RAW)**|**Windows Handle (HANDLE, HWND)**| +|**Natur**|Direkte, typisierte Speicheradresse.|Opaque Reference (Pseudopointer/ID).[1, 3]| +|**Verwaltungshoheit**|Userspace, manuelle Freigabe.|Kernel Space, Abstraktion von Systemressourcen.[4]| +|**Typsicherheit**|Streng typisiert (z. B. T∗).|Generisch (void∗/HANDLE); Typ wird durch API-Kontext bestimmt.[2]| +|**Gültigkeitsprüfung**|Risiko des Handle Recycling; erfordert striktes Lifecycle-Tracking.[5]|| + +1.2. HWND und andere Windows-Handles: HDC, HINSTANCE, HMODULE + +Windows verwendet spezifische Handle-Typen, um verschiedene Ressourcen zu identifizieren: + +• **HWND (Handle to a Window):** Der primäre Bezeichner für ein Fenster oder ein Kindfenster-Steuerelement. Er dient als Ziel für Rendering-Operationen und als Adresse für das Windows Message System.[2, 6] + +• **HDC (Handle to a Device Context):** Repräsentiert die logische Verbindung zu einem bestimmten Zielgerät (z. B. Bildschirm). Es ist unerlässlich, um GDI- oder ältere Grafik-APIs an ein Fenster zu binden. + +• **HINSTANCE (Handle to an Instance):** Repräsentiert die geladene Instanz des Programms.[6] Es wird in der `WNDCLASS`-Struktur benötigt, um die Fensterklasse zu registrieren.[7] + +• **HMODULE (Handle to a Module):** Funktional oft identisch mit `HINSTANCE` in modernen Windows-Versionen; es bezeichnet die Basisadresse des geladenen Moduls (EXE oder DLL). + +1.3. Windows-Datentypen: DWORD, WORD, BYTE, LPARAM, WPARAM, LRESULT + +Die Win32-API definiert aliasierte Datentypen mit expliziter Größe, um die Kompatibilität zwischen 32-Bit- und 64-Bit-Architekturen zu standardisieren.[8] + +• **BYTE:** Ein Unsigned 8-Bit-Integer. + +• **WORD:** Ein Unsigned 16-Bit-Integer. + +• **DWORD (Double Word):** Ein Unsigned 32-Bit-Integer (Bereich: 0 bis 232−1, also 4.294.967.295).[8, 9] + +• **WPARAM / LPARAM / LRESULT:** Diese Typen dienen der Übertragung von Informationen in Nachrichten (Window Messages). Während in 16-Bit-Systemen `WPARAM` 16 Bit und `LPARAM` 32 Bit waren, wurden sie in modernen 64-Bit-Systemen auf 64 Bit erweitert. Dies geschieht, damit sie Zeiger (`PVOID`) oder große Werte speichern können, was für die Konsistenz und Zukunftsfähigkeit der API entscheidend ist.[8] `LRESULT` ist der Rückgabewert der Window Procedure. + +2. Component Object Model (COM) + +Das Component Object Model (COM) bildet das architektonische Rückgrat für Direct3D. Es ist ein binärer Standard, der die Sprache, in der ein Objekt implementiert wurde, abstrahiert.[10] + +2.1. Architektur, Interface-Konzept (IUnknown) und Bedeutung für DirectX + +**Architektur und Interface-Konzept:** Ein COM-Objekt (`Coclass`) implementiert eine oder mehrere Schnittstellen (`Interfaces`).[10] Jede Schnittstelle ist streng nach dem Prinzip der Vererbung von **IUnknown** abgeleitet. Interfaces sind V-Table-basierte Methodensammlungen. Diese binäre Standardisierung ist notwendig, um die **Application Binary Interface (ABI)** über verschiedene Compiler-Versionen und Programmiersprachen hinweg stabil zu halten. + +**Bedeutung für DirectX:** DirectX, beginnend mit Direct3D 8, basiert vollständig auf COM. Jedes kritische API-Objekt in Direct3D, wie beispielsweise `IDirect3DDevice9` oder `ID3D11Device`, ist ein COM-Interface. Dies ermöglicht es Microsoft, die Laufzeitumgebung (Runtime) und die zugrunde liegenden Treiber-Implementierungen zu aktualisieren, ohne dass bestehende Binärcode-Anwendungen neu kompiliert werden müssen. + +2.2. Reference Counting (AddRef/Release) und QueryInterface + +COM verwendet ein Reference Counting, um den Lebenszyklus des Objekts zu steuern. + +• **AddRef/Release:** Das `IUnknown`-Interface exponiert diese Methoden, die einen internen 32-Bit-Referenzzähler steuern.[11] Wenn ein neuer Zeiger auf eine Schnittstelle erstellt oder geklont wird, wird `AddRef` aufgerufen.[11] `Release` dekrementiert den Zähler. Sobald der Zähler Null erreicht, ist das COM-Objekt dafür verantwortlich, seinen eigenen Speicher freizugeben (`self-destruction`).[10] In C++ ist die Nutzung von Smart Pointers (`ComPtr`) die Best Practice, um diese Verwaltung automatisch und fehlerfrei über das RAII-Prinzip sicherzustellen.[10] + +• **QueryInterface:** Dies ist der Mechanismus für die dynamische Typerkennung und -navigation innerhalb eines COM-Objekts.[12] + +    ◦ Die Methode akzeptiert eine **IID** (Interface Identifier), die ein **GUID** (Globally Unique Identifier) ist.[13] + +    ◦ Wenn das Objekt die angeforderte Schnittstelle unterstützt, wird der Zeiger auf diese Schnittstelle zurückgegeben und sofort `AddRef` aufgerufen.[12] Dies ist notwendig, da der neue Zeiger die Lebensdauer des Objekts verlängert. + +    ◦ Andernfalls wird der Fehlercode `E_NOINTERFACE` zurückgegeben, was funktionell einem fehlschlagenden C++ DynamicCast entspricht.[13] + +2.3. HRESULT, GUID/IID und COM-Initialisierung + +• **HRESULT:** Der universelle 32-Bit-Rückgabewert aller COM-Methoden. Er signalisiert den Status des Aufrufs. Werte von Null oder größer (`S_OK`, `S_FALSE`) bedeuten Erfolg, während negative Werte Fehlerzustände darstellen. + +• **GUID/IID:** Die 128-Bit-Bezeichner (Global Unique Identifiers), die die Eindeutigkeit von COM-Klassen (`CLSID`) und deren Schnittstellen (`IID`) garantieren. Diese Uniqueness ist entscheidend für das dynamische Laden von Komponenten. + +• **COM-Initialisierung (CoInitializeEx):** Bevor ein Thread COM-Interfaces verwenden oder Komponenten instanziieren kann, muss er die COM-Bibliothek initialisieren, indem er `CoInitializeEx` aufruft.[14] Die Funktion ist pro Thread erforderlich. Der zweite Parameter (`dwCoInit`) legt das Threading-Modell fest: + +    ◦ **COINIT_APARTMENTTHREADED (STA):** Apartment Threading. Erfordert die Garantie, dass auf COM-Objekte nur über einen einzigen Thread zugegriffen wird, und setzt voraus, dass der Thread eine **Nachrichtenschleife** (`Message Loop`) besitzt.[14] + +    ◦ **COINIT_MULTITHREADED (MTA):** Multi-Threading. Erlaubt den Zugriff über mehrere Threads, erfordert jedoch eine komplexe Synchronisation. + +Die Anforderung, dass STA-Threads eine Message Loop besitzen müssen, schafft eine direkte kausale Verbindung zwischen dem Windows Message System und der korrigierten COM-Nutzung: wenn der Haupt-Thread einer Grafikanwendung als STA initialisiert wird (was üblich ist, da er das Fenster erstellt), muss die Message Loop (`GetMessage` oder `PeekMessage`) korrekt funktionieren, um auch interne COM-Synchronisationsnachrichten zu verarbeiten.[14] + +3. Das Windows-Nachrichtensystem (Message System) + +Das Nachrichtensystem ist der Kernmechanismus der Event-driven Programming in Windows und steuert den Lebenszyklus sowie die Interaktion der Anwendung. + +3.1. Window Creation: WNDCLASS, RegisterClass, CreateWindow, ShowWindow + +Die Erstellung eines Fensters folgt einer strikten Sequenz: + +1. **WNDCLASS/WNDCLASSEX:** Definition der Fensterklasse. Die Struktur enthält kritische Elemente wie das Handle der Anwendung (`hInstance`), den Klassennamen (`lpszClassName`) und, am wichtigsten, den Funktionszeiger zur **Window Procedure** (`lpfnWndProc`).[7] + +2. **RegisterClass/RegisterClassEx:** Registriert die definierte Klasse beim Betriebssystem.[7] + +3. **CreateWindow/CreateWindowEx:** Erstellt eine Instanz der registrierten Klasse und gibt das `HWND` (Handle to a Window) zurück. + +4. **ShowWindow / UpdateWindow:** Macht das Fenster sichtbar. `UpdateWindow` sendet die erste `WM_PAINT`-Nachricht, um den Client-Bereich zu zeichnen. + +3.2. Message Queue und Window Procedure + +Das System arbeitet über dedizierte Message Queues pro Thread. + +• **Message Loop:** Die Anwendung muss kontinuierlich Nachrichten aus ihrer Queue abrufen. Die Wahl der Abruffunktion ist entscheidend für die Anwendungsarchitektur: + +    ◦ **GetMessage():** Dies ist ein **blockierender** Aufruf. Wenn die Queue leer ist, hält der Thread an, bis eine Nachricht verfügbar ist.[15] Dies ist für traditionelle UI-Anwendungen geeignet, aber in Echtzeit-Anwendungen (Game Loops) unbrauchbar, da es keine Idle Processing (Rendern) zulässt. + +    ◦ **PeekMessage():** Dies ist ein **nicht-blockierender** Aufruf. Er kehrt sofort zurück, unabhängig davon, ob eine Nachricht in der Queue gefunden wurde.[15, 16] Wenn `PeekMessage` `FALSE` zurückgibt, kann die Anwendung sofort zur Real-Time-Rendering-Logik übergehen ("Idle Processing").[15] + +• **DispatchMessage und TranslateMessage:** + +    ◦ `TranslateMessage` verarbeitet virtuelle Tastatur-Codes und generiert `WM_CHAR`-Nachrichten. + +    ◦ `DispatchMessage` leitet die Nachricht an die Window Procedure (`WndProc`) des korrespondierenden `HWND` weiter. + +• **DefWindowProc:** Nachrichten, die die Anwendung nicht explizit behandelt, müssen an `DefWindowProc` zurückgegeben werden.[17] Diese Funktion stellt das standardmäßige, vom Betriebssystem erwartete Verhalten (z. B. Verschieben des Fensters, Minimieren) sicher. + +3.3. Windows Message System: WM_QUIT, WM_DESTROY, WM_CLOSE, WM_PAINT, WM_SIZE + +Die geordnete Behandlung von Fensternachrichten ist für die Stabilität von Grafikanwendungen fundamental. + +• **WM_CLOSE:** Eine höfliche **Anfrage** zur Beendigung, die gesendet wird, wenn der Benutzer auf das Schließen-Symbol klickt. Die Anwendung kann diese Anfrage ablehnen (z. B. um den Benutzer zum Speichern aufzufordern).[18] Die Standardreaktion ist der Aufruf von `DestroyWindow`.[18] + +• **WM_DESTROY:** Ein Signal, das an das Fenster gesendet wird, nachdem es vom Bildschirm entfernt wurde, aber bevor seine Ressourcen (einschließlich Kindfenster) freigegeben werden.[19] Dies ist der Zeitpunkt, an dem alle Direct3D-Ressourcen, die direkt dem Fenster zugeordnet sind (wie die Swap Chain), freigegeben werden müssen.[18] Für das Hauptanwendungsfenster wird hier typischerweise `PostQuitMessage(0)` aufgerufen.[17, 19] + +• **WM_QUIT:** Dies ist **keine Fensternachricht**; sie wird direkt in die Thread-Queue eingefügt und dient ausschließlich dazu, die Message Loop zu beenden. Wenn `GetMessage` diese Nachricht abruft, gibt es 0 zurück und terminiert damit die Schleife.[18] + +• **WM_SIZE:** Wird gesendet, wenn die Abmessungen des Client-Bereichs geändert wurden. Dies ist der kritische Hook, um die Rendering-Infrastruktur neu zu konfigurieren: die Viewport-Größe muss angepasst und die Swap-Chain (Backbuffer) muss neu dimensioniert werden. + +• **WM_PAINT:** Signalisiert einen ungültigen Bereich, der neu gezeichnet werden muss. `WM_SIZE` wird typischerweise von einem `WM_PAINT`-Aufruf gefolgt.[20] In einem Game Loop, der kontinuierlich rendert, wird `WM_PAINT` oft ignoriert, da das Rendern bereits im Idle Processing stattfindet. + +TEIL 2: Theoretische und Praktische Grafikpipeline-Architekturen + +4. Die Evolution der Rendering-Pipelines + +Die Entwicklung der Grafikhardware hat zu einem Paradigmenwechsel von der Fixed Function Pipeline (FFP) zur modernen Programmable Pipeline (PP) geführt. + +4.1. Fixed Function Pipeline (FFP) + +Die FFP, wie sie in älteren OpenGL- und Direct3D-Versionen (bis D3D9 im FFP-Modus) verwendet wurde, war eine starre Kette von Verarbeitungsstufen.[21] Ihre Logik war im Grafikprozessor (GPU) hartkodiert und konnte nur durch das Setzen von Render States konfiguriert werden.[22] + +**Stages und Limitierungen:** + +• **Vertex Processing und Lighting (T&L):** Die Geometrie-Transformation und die Beleuchtungsberechnungen (typischerweise Blinn-Phong-Modell) waren fixiert und erfolgten pro Vertex.[22] Die mangelnde Flexibilität bedeutete, dass keine benutzerdefinierten Beleuchtungsmodelle oder realistisches Per-Pixel-Lighting möglich waren.[23] + +• **Texture Stages (Combiner):** Anstelle programmierbarer Pixel Shader wurde ein komplexes System von Textur-Umgebungen und Combinern verwendet, um festzulegen, wie mehrere Texturen und Farben gemischt werden.[22] + +• **Steuerung:** Die Steuerung erfolgte über Tausende von API-Aufrufen, die den internen Zustand der GPU änderten, wie `IDirect3DDevice9::SetRenderState`.[24] + +• **Limitierungen:** Die größte Einschränkung war die Unmöglichkeit, neue Algorithmen zu implementieren. Anspruchsvolle Effekte erforderten ineffizientes Multi-Pass-Rendering und komplexe "Cubemap magic".[23] + +4.2. Programmable Pipeline (PP) + +Die Programmable Pipeline ersetzte starre Stufen durch Shader-Programme, die direkt auf der GPU ausgeführt werden. + +**Shader-basierte Flexibilität und Vorteile:** Die Einführung von Vertex Shadern (VS) und Pixel Shadern (PS) ermöglichte es Entwicklern, die Transformations- und Beleuchtungslogik vollständig neu zu definieren. Die Flexibilität erlaubt: + +1. **Per-Pixel Beleuchtung:** Deutlich realistischere Beleuchtung, die im Pixel Shader berechnet wird.[23] + +2. **Reduzierte Draw Calls:** Komplexe Materiallogik, die früher mehrere FFP-Pässe erforderte, kann in einem einzigen Shader zusammengefasst werden, was den Zustandwechsel-Overhead reduziert.[23] + +3. **Moderne Architekturen:** Die PP ist die Basis für Tessellation (Hull/Domain Shaders, ab SM 5.0) und GPGPU-Computing (Compute Shaders). + +**Shader-Kompilierung:** HLSL (High-Level Shading Language) wird von der Entwicklungsumgebung in einen hardwareunabhängigen Bytecode kompiliert. Die Grafik-Runtime (DirectX-Treiber) übersetzt diesen Bytecode zur Laufzeit in Maschinencode für die spezifische GPU-Architektur. + +4.3. Vergleich beider Pipelines + +Die PP ist nicht in jeder Hinsicht schneller als die FFP. Wenn ein Entwickler einen Shader schreibt, der exakt die gleiche einfache Beleuchtungslogik der FFP implementiert, könnte die FFP aufgrund ihrer extremen Hardware-Optimierung leicht überlegen sein.[23] Die wahre Leistungssteigerung der PP liegt in der Möglichkeit, komplexe Effekte in wenigen Durchgängen zu realisieren, die in der FFP nur durch viele Pässe oder gar nicht möglich wären. + +Tabelle 4.1: Vergleich von Fixed Function Pipeline (FFP) und Programmable Pipeline (PP) + +| | | | +|---|---|---| +|**Kriterium**|**Fixed Function Pipeline (D3D9 Legacy)**|**Programmable Pipeline (D3D11)**| +|**Flexibilität**|Gering, nur Konfiguration über Zustände.[21]|Sehr hoch, benutzerdefinierte Shader-Programme.[23]| +|**Beleuchtung**|Per-Vertex, hartkodiert (z. B. Blinn-Phong).[22]|Per-Pixel, frei definierbar, hochrealistisch.[23]| +|**Zustandsverwaltung**|Hoher CPU-Overhead durch viele `SetRenderState`-Aufrufe.[25]|Effizient durch Immutable State Objects und konstanten Datenaustausch.[26]| +|**Use Cases**|Einfache 3D-Anwendungen, Legacy-Support.|Moderne Spiele, erweiterte Physik, GPGPU-Computing.| + +5. Geometrie-Verarbeitung und Transformation + +5.1. Vertex: Struktur, Attribute und Deklaration + +Ein Vertex ist die fundamentale Dateneinheit, die die Geometrie und deren Eigenschaften definiert. + +**Attribute:** Neben der **Position** (XYZ) im lokalen Raum gehören dazu: + +• **Normalen:** Richtungsvektoren, die für die Berechnung der Beleuchtung pro Vertex oder zur Interpolation für den Pixel Shader notwendig sind.[27] + +• **Tangenten und Binormalen:** Werden benötigt, um das lokale TBN-Koordinatensystem (Tangent, Binormal, Normal) für Effekte wie Normal Mapping zu definieren.[27] + +• **Texturkoordinaten (TexCoord/UV Sets):** Definieren, wie Texturdaten auf die Oberfläche abgebildet werden.[27] + +**Vertex Declaration und FVF:** + +• **FVF (Flexible Vertex Format):** In Direct3D 9 verwendete ein kompaktes Bit-Flag-Schema (`D3DFVF_XYZ | D3DFVF_NORMAL`), um den Inhalt eines Vertex zu definieren. Es war einfach, aber unflexibel für benutzerdefinierte Attribute.[28, 29] + +• **Input Layout (D3D11):** Im modernen Pipeline-Ansatz wird ein explizites `Input Layout` erstellt, das das Speicher-Layout des Vertex-Buffers mit der Eingabesignatur des Vertex Shaders (definiert durch Semantics wie `POSITION0`, `TEXCOORD1`) abgleicht.[29] Dies bietet eine präzisere und typsicherere Methode zur Datenübergabe. + +5.2. Mesh: Definition, Organisation und Index-Nutzung + +Ein Mesh ist die Organisation der Geometriedaten. Die effizienteste Organisation beinhaltet **Vertex-Sharing** durch die Verwendung eines **Index Buffers**.[30] + +• **Definition und Organisation:** Ein Mesh besteht aus einem Vertex Buffer (die eigentlichen Datenpunkte) und einem optionalen Index Buffer (die Reihenfolge, in der die Vertices verarbeitet werden sollen).[30] + +• **Index-Nutzung:** Anstatt die gleichen Vertex-Daten für mehrere benachbarte Dreiecke zu duplizieren (z. B. an einer Kante), enthält der Index Buffer nur die Indizes der Vertices, die das Dreieck bilden. Dies reduziert die Speichernutzung drastisch und verbessert die Effizienz des Post-Transform Vertex Cache auf der GPU, da Vertices, die bereits transformiert wurden, wiederverwendet werden können.[30] + +5.3. Transformation: Model-, View-, Projection-Matrix + +Die Grafikpipeline transformiert Vertices durch eine Reihe von Koordinatensystemen mithilfe von Matrizen. + +• **Model-Matrix (M):** Transformiert von Local/Object Space in World Space (Position, Rotation, Skalierung des Objekts).[31] + +• **View-Matrix (V):** Transformiert von World Space in View/Camera Space (Positionierung und Ausrichtung der Kamera).[31] + +• **Projection-Matrix (P):** Transformiert von View Space in den Homogenen Clip Space. Sie definiert das Sichtvolumen (Frustum) und wendet die perspektivische Verzerrung an.[31] + +**MVP-Matrix und Multiplikationsreihenfolge:** Die Gesamttransformation wird oft in einer einzigen Matrix, der MVP-Matrix (P×V×M), zusammengefasst. Wenn der Vektor V![](data:image/svg+xml;utf8,)local​ als Spaltenvektor multipliziert wird, lautet die korrekte Reihenfolge der Operationen: V![](data:image/svg+xml;utf8,)clip​=P×V×M×V![](data:image/svg+xml;utf8,)local​ Die Transformationen werden in der Reihenfolge M, dann V, dann P angewendet.[32] Während eine Vorberechnung der gesamten MVP-Matrix im Vertex Shader Rechenzeit sparen kann, erfordern die Transformation von Normalen oder Tangenten zusätzliche Matrizen (z. B. nur M oder V×M).[33] + +**Handedness (DirectX Left-Handed):** DirectX verwendet standardmäßig ein linkshändiges Koordinatensystem, bei dem die positive Z-Achse in die Szene hinein zeigt. Dies ist eine kritische Designentscheidung, die sich auf die Definition der View- und Projection-Matrizen sowie auf die Winding Order (für das Culling) auswirkt. + +5.4. Coordinate Spaces + +Die Transformationskette definiert die folgenden fünf kritischen Räume: + +1. **Local/Object Space:** Koordinaten relativ zum Ursprung des 3D-Modells. + +2. **World Space:** Koordinaten relativ zum globalen Ursprung der Szene (nach M). + +3. **View/Camera Space (Eye Space):** Koordinaten relativ zur Position der virtuellen Kamera (nach V).[31] + +4. **Clip Space (Homogeneous Coordinates):** Koordinaten im Bereich von (wobei W die perspektivische Tiefe ist) (nach P).[31] Clipping und perspektivische Division erfolgen hier. + +5. **Screen Space (Viewport):** Die endgültigen 2D-Pixelkoordinaten, nachdem die Viewport-Transformation die normalisierten Koordinaten (NDC, Normalized Device Coordinates, [−1,1]) in den tatsächlichen Bildschirmbereich konvertiert hat.[34] + +6. Primitive Assembly und Rasterization Stage + +6.1. Primitives: List, Strip, Fan und Effizienz + +Die Input Assembler (IA) Stage setzt die Vertices, unter Verwendung der Indizes, zu Primitiven zusammen. + +• **Point List, Line List/Strip:** Grundlegende Topologien. + +• **Triangle List:** Dreiecke sind voneinander unabhängig (z. B. V0​,V1​,V2​;V3​,V4​,V5​). Für N Dreiecke sind 3N Vertices erforderlich. + +• **Triangle Strip und Triangle Fan:** Diese Topologien maximieren die Vertex-Wiederverwendung und sind daher effizienter. Für N Vertices generieren sowohl Strips als auch Fans N−2 Dreiecke (N≥3).[35, 36] + +    ◦ **Triangle Strip:** Jedes neue Dreieck teilt sich die letzten beiden Vertices mit dem vorherigen. Ideal für zusammenhängende Oberflächen wie Geländebänder oder Zylinderseiten.[35] + +    ◦ **Triangle Fan:** Alle Dreiecke teilen sich den ersten Vertex. Ideal für konvexe Polygone oder Zylinderkappen.[35] + +6.2. Rasterizer Stage + +Die Rasterizer Stage (RS) ist der feste Teil der Pipeline, der Vektorgeometrie in rasterbasierte Fragmente (potenzielle Pixel) umwandelt.[37, 38] + +**Operationen:** + +• **Clipping:** Primitiven, die teilweise außerhalb des Sichtvolumens (Clip Space) liegen, werden zugeschnitten, während vollständig außerhalb liegende Primitiven verworfen werden.[37] + +• **Culling und Winding Order:** Back-Face Culling verwirft Dreiecke, deren Winding Order (Reihenfolge der Vertices, z. B. CW oder CCW) angibt, dass sie von der Kamera abgewandt sind. Dies reduziert die zu verarbeitende Geometrie frühzeitig. + +• **Viewport-Transformation:** Die 3D-Koordinaten werden in 2D-Bildschirmkoordinaten umgewandelt.[34, 38] + +• **Triangle Rasterization:** Algorithmen (z. B. Scan-Line oder Edge Functions) bestimmen, welche Pixel auf dem Bildschirm vom Dreieck bedeckt sind. Die **Top-Left Fill Convention** stellt sicher, dass benachbarte Dreiecke keine überlappenden Pixel erzeugen.[39] + +• **Interpolation von Vertex-Attributen:** Attribute (Farbe, UVs, Normalen, Tiefe) werden über die Fläche des Dreiecks interpoliert und dem generierten Fragment zugewiesen. Dies geschieht typischerweise mithilfe von **Barycentric Coordinates**, um eine perspektivisch korrekte Interpolation zu gewährleisten.[39] + +7. Output Merger (OM) + +Der Output Merger (OM) ist die letzte Stufe der Pipeline, die entscheidet, wie und ob das generierte Fragment die Zielpuffer (Framebuffers) beeinflusst. + +• **Screen Stage und Framebuffers:** Die Render-Ziele bestehen aus dem **Frame Buffer** (Farbe), dem **Depth Buffer** (Z-Buffer, Speicherung der Tiefe) und dem **Stencil Buffer** (logische Maskierung). + +• **Depth Buffer (Z-Buffer):** Speichert den Tiefenwert des nächstgelegenen Pixels. Der **Depth Test** vergleicht die Tiefe des eingehenden Fragments mit dem Wert im Depth Buffer. Wenn das Fragment den Test besteht (z. B. näher liegt), darf es fortfahren. Das Deaktivieren des Z-Buffer-Schreibens kann eine Optimierung sein, wenn sichergestellt ist, dass die Objekte in einer bestimmten Reihenfolge (z. B. Depth First) gerendert werden.[26] + +• **Stencil Buffer:** Wird für komplexe Maskierungseffekte, Portale oder Schattenvolumina verwendet. Der **Stencil Test** wendet benutzerdefinierte logische Regeln an. + +• **Blending:** Nach den Tests kombiniert der OM die Farbe des Fragments mit der bereits im Render Target vorhandenen Farbe (z. B. für Transparenz oder additive Effekte).[26] + +• **Multi-Render-Targets (MRT):** Ermöglicht das gleichzeitige Schreiben in mehrere Farbpuffer (Texturen) in einem einzigen Durchgang. Dies ist fundamental für Techniken wie Deferred Shading, bei dem Normalen, Tiefen und Materialeigenschaften in separate Texturen (G-Buffer) geschrieben werden. + +TEIL 3: DirectX-Versionsvergleich und API-Migration + +8. Direct3D 9: Die monolithische Ära + +Direct3D 9 (D3D9) war die vorherrschende API für über ein Jahrzehnt und zeichnete sich durch einen monolithischen Ansatz aus, der sowohl FFP als auch die frühen Shader Models (bis SM 3.0) unterstützte. + +• **Device-Konzept und Immediate Mode:** + +    ◦ Das gesamte API-Management war in der einzigen zentralen Schnittstelle, `IDirect3DDevice9`, gebündelt.[40] Dieses Device war für die Ressourcenerstellung, das Setzen von Zuständen und die Ausführung von Draw Calls verantwortlich. + +    ◦ Dieses Design erzwang den sogenannten **Immediate Mode**, bei dem Befehle sofort zur Ausführung an den Treiber gesendet wurden. Dies verursachte Engpässe auf modernen Multi-Core-CPUs, da alle API-Aufrufe notwendigerweise sequenziell auf einem einzigen Thread synchronisiert werden mussten. + +• **API-Struktur und Initialisierung:** + +    ◦ Die Initialisierung erforderte die Erstellung des `IDirect3D9`-Objekts (API-Zugriff), die Auswahl eines Adapters und den Aufruf von `IDirect3D9::CreateDevice` mit den `D3DPRESENT_PARAMETERS`, welche die Backbuffer- und Fenster-Einstellungen enthielten.[17] + +• **Pipeline-Steuerung und FFP-Zustände:** + +    ◦ Die Steuerung der Pipeline erfolgte über Funktionen wie `IDirect3DDevice9::SetVertexShader` und `IDirect3DDevice9::SetPixelShader`. + +    ◦ Die Fixed Function Pipeline wurde mittels `SetRenderState` konfiguriert (z. B. `D3DRS_LIGHTING`, `D3DRS_CULLMODE`).[24] + +• **Ressourcen-Handling:** + +    ◦ Buffers (`CreateVertexBuffer`, `CreateIndexBuffer`) wurden erstellt und der Zugriff vom CPU-Speicher auf den GPU-Speicher für Updates erfolgte über die Methoden **Lock und Unlock**. `Lock` war oft ein blockierender Aufruf, der erhebliche Performance-Stalls verursachen konnte, da er Synchronisation mit der GPU erzwingen musste. + +9. Direct3D 11: Moderne, Multithread-fähige Architektur + +Direct3D 11 (D3D11) führte eine tiefgreifende architektonische Umstrukturierung ein, um die Skalierbarkeit auf Multi-Core-CPUs zu gewährleisten und modernere Shader Models zu unterstützen. + +9.1. Trennung Device vs. Device Context + +Die wichtigste Neuerung war die funktionale Trennung der Verantwortlichkeiten: + +• **ID3D11Device:** Das Device ist thread-sicher und dient ausschließlich der **Erstellung von Ressourcen** (Buffers, Texturen, Views, State Objects) und der Abfrage von Hardware-Fähigkeiten.[40] + +• **ID3D11DeviceContext:** Der Context ist für die **Setzung des Pipeline-Zustands** (State Binding) und die **Generierung von Render-Befehlen** (`Draw Calls`) zuständig.[40] + +**Multithreading-Vorteile (Deferred Context):** Diese Trennung ermöglichte echtes Multithreading. Ein **Immediate Context** wird vom Haupt-Thread verwendet. Zusätzlich können **Deferred Contexts** auf Worker-Threads verwendet werden, um Render-Befehle und State-Bindungen parallel vorzubereiten. Die Ergebnisse dieser parallelen Arbeit werden in **Command Lists** gespeichert. Diese Command Lists können anschließend schnell vom Immediate Context eingereicht werden, was die CPU-Last für das Rendering effizient über mehrere Kerne verteilt und die Framerate in CPU-gebundenen Szenarien verbessert.[41] + +9.2. DXGI und Feature Levels + +• **DXGI (DirectX Graphics Infrastructure):** Eine dedizierte API-Schicht, die von Direct3D entkoppelt wurde, um allgemeine Grafik-Infrastrukturaufgaben zu übernehmen. DXGI verwaltet Adapter-Enumeration, Multi-Monitor-Konfiguration und die **Swap Chain**.[40, 42] + +• **Feature Levels:** D3D11 führte Feature Levels (9_1 bis 11_1) ein, um die Komplexität der Hardware-Erkennung zu standardisieren.[41, 43] Ein Entwickler kann `D3D11CreateDevice` aufrufen und den maximal benötigten Feature Level anfordern (z. B. 11_0). Die Runtime wählt das höchste unterstützte Level auf der Hardware. Dies bedeutet, dass D3D11-Code auf D3D9-Hardware laufen kann (z. B. Feature Level 9_3), wobei automatisch die entsprechenden Einschränkungen (z. B. Shader Model 3.0, keine Geometry Shader) beachtet werden.[41] + +9.3. Ressourcen-Management und Views-Konzept + +D3D11 implementiert ein striktes, auf Views basierendes Ressourcen-Binding-System. + +• **Ressourcen und Views:** Die zugrundeliegenden Ressourcen (Buffers, Texturen) müssen über eine explizite **View** an die Pipeline gebunden werden.[40] + +    ◦ **SRV (Shader Resource View):** Lesezugriff in Shadern. + +    ◦ **RTV (Render Target View):** Schreibzugriff in der Output Merger Stage (Farbe). + +    ◦ **DSV (Depth Stencil View):** Zugriff auf Tiefen- und Stencil-Puffer. + +    ◦ **UAV (Unordered Access View):** Ungeordnete Lese-/Schreibzugriffe (für Compute Shaders).[44, 45] + +    ◦ **Konfliktvermeidung:** Das System verhindert, dass dieselbe Ressource gleichzeitig als Lese- (SRV) und Schreib-Ressource (RTV/UAV) an dieselbe Pipeline-Stufe gebunden wird.[45] + +• **Input Assembler (IA) und Input Layout:** Die IA-Stage ist verantwortlich für das Binden des Vertex- und Index-Buffers. Das **Input Layout** ist dabei die zwingend notwendige Metadaten-Beschreibung, die festlegt, wie die Bits des Vertex-Buffers dem Vertex Shader zugeordnet werden (Ablösung des FVF-Systems).[28] + +10. Detaillierter Vergleich und Migrationspfad (D3D9 vs. D3D11) + +Der Übergang von D3D9 zu D3D11 stellt einen bedeutenden architektonischen Wandel dar.[46] + +10.1. API-Calls und Initialisierung-Unterschiede + +| | | | +|---|---|---| +|**Merkmal**|**Direct3D 9**|**Direct3D 11**| +|**API-Initialisierung**|Multi-Schritt-Prozess: `Direct3DCreate9` → `CreateDevice`.|Einzelfunktion: `D3D11CreateDevice` (erstellt Device und Context).[40]| +|**Swap Chain**|Implizit im Device-Objekt enthalten.|Gemanagt durch separate DXGI-Schnittstelle.[40]| +|**Draw-Calls**|`IDirect3DDevice9::DrawPrimitive`.|`ID3D11DeviceContext::Draw` (über Context aufgerufen).| + +10.2. State-Management (State Objects vs SetRenderState) + +Dies ist der tiefgreifendste Paradigmenwechsel. + +• **D3D9 (Zustands-Imperativ):** Der Entwickler setzte Zustände (Culling, Blending, Tiefentest) dynamisch zur Laufzeit mithilfe zahlreicher `SetRenderState`-Aufrufe. Jede dieser Änderungen war ein API-Aufruf, der potenziell hohen Treiber-Overhead verursachte, da die GPU-Pipeline-Konfiguration häufig neu berechnet werden musste.[25] + +• **D3D11 (Zustands-Deklarativ / State Objects):** Alle fixen Pipeline-Zustände werden in unveränderlichen Objekten (`ID3D11RasterizerState`, `ID3D11DepthStencilState`) gekapselt und einmalig erstellt.[40] Zur Laufzeit bindet der Context diese Objekte als Ganzes. Dies ermöglicht dem Treiber eine bessere interne Voroptimierung und reduziert den Aufwand für Zustandswechsel im Rendering-Loop drastisch. + +10.3. Shader-Handling und Ressourcen-Binding + +• **Shader Model 3.0 vs 5.0:** D3D9 war auf SM 3.0 beschränkt, was keine Tessellation oder Compute Shaders unterstützte. SM 5.0 (D3D11) fügte diese modernen Stufen hinzu und erhöhte die Komplexität und Größe der Shader-Programme erheblich.[41] + +• **Constant Buffers vs Constants:** Anstelle der begrenzten, einfachen Konstantenregister von D3D9 verwendet D3D11 **Constant Buffers (C-Buffers)**. Dies sind strukturierte Ressourcen, die effizient über `ID3D11DeviceContext::Map`/`Unmap` von der CPU aktualisiert werden können, was das Daten-Streaming zur GPU verbessert. + +10.4. Migration-Aspekte + +Der Wechsel von D3D9 zu D3D11/D3D10 ist ein signifikanter Bruch, da die grundlegenden Annahmen über State Management und Datenfluss sich ändern.[46] + +• **Architektonische Vorbereitung:** Experten empfehlen, die D3D9-API-Aufrufe so früh wie möglich durch eine eigene Abstraktionsschicht zu isolieren. Dies minimiert den Umfang der Code-Änderungen, wenn Konzepte wie Input Layout und State Objects eingeführt werden müssen.[46] + +• **Performance-Implikationen:** Die primäre Performance-Steigerung bei der Migration zu D3D11 wird oft durch die verbesserte CPU-Skalierung (Multithreading via Deferred Contexts) und die effizientere Zustandsverwaltung (State Objects) erzielt.[47] + +• **Deprecations:** Das Flexible Vertex Format (FVF) und die Fixed Function Pipeline wurden in D3D11 vollständig abgeschafft. Anwendungen müssen die FFP-Logik in Shader-Code (Vertex und Pixel Shader) portieren. + +• **HLSL-Syntax-Unterschiede:** Während HLSL in seiner Basis ähnlich bleibt, erfordert D3D11 die Verwendung von Puffer-Semantiken und konstanten Puffer-Definitionen, die in D3D9 nicht existierten. + +Schlussfolgerung + +Die evolutionäre Analyse von Windows-Grafikprogrammierung, von den Win32-Fundamentals bis zur Direct3D-Architektur, zeigt einen klaren Trend: die Verschiebung von einer **imperativen, CPU-zentrierten Steuerung** hin zu einer **deklarativen, GPU-zentrierten Programmierung**. + +In der Windows-Grundlagenarchitektur dient die Opazität von Handles und die Struktur des Component Object Model (COM) der Durchsetzung der Kernel-Integrität und der binären Stabilität der API. Die korrekte Interaktion mit dem Message System, insbesondere die Wahl zwischen `GetMessage` und `PeekMessage`, ist der notwendige Mechanismus, der es der Anwendung ermöglicht, sowohl auf Events zu reagieren als auch Echtzeit-Idle-Processing (Rendering) durchzuführen. + +Der Wandel von der Fixed Function Pipeline zu den programmierbaren Shadern in Direct3D 11 ist die Antwort auf die Notwendigkeit flexiblerer und realistischerer Grafikeffekte. Die D3D11-Architektur löst die Performance-Probleme von D3D9, indem sie die monolithische Steuerung in separate Device- und Context-Objekte zerlegt. Diese Trennung und die Einführung von Immutable State Objects sind die technologischen Voraussetzungen für die Skalierbarkeit des Rendering-Workloads über moderne Multi-Core-CPUs. Entwickler, die von D3D9 migrieren, müssen diese architektonischen Verschiebungen – von dynamischem State Management zu deklarativen State Objects und von FVF zu Input Layouts – vollständig adaptieren, um die Performance-Vorteile der modernen Hardware voll auszuschöpfen. + +![[TTS/Tag1_Bericht - Dec 16 2025 14-25.mp3]] + +![[TTS/Tag1_Bericht - Dec 16 2025 14-32.mp3]] \ No newline at end of file diff --git a/Grafik/Hackbarth/Tag2_Bericht.md b/Grafik/Hackbarth/Tag2_Bericht.md new file mode 100644 index 0000000..1fe043d --- /dev/null +++ b/Grafik/Hackbarth/Tag2_Bericht.md @@ -0,0 +1,200 @@ +Detaillierte Analyse der GPU-Pipeline in DirectX: Shader, Beleuchtung und Texturierung + +Dieser Bericht dient als umfassende Lernressource und prüfungsrelevante Aufbereitung der Kernkonzepte des Real-Time Renderings in Direct3D. Er beleuchtet die Architektur programmierbarer Shader-Stufen, die Implementierung physisch basierter Beleuchtungsmodelle und die Optimierung von Textur-Streaming und Qualität. + +TEIL 1: Erweiterte Shader-Programmierung in DirectX + +Die programmierbaren Shader-Stufen bilden das Rückgrat der modernen DirectX-Pipeline und ermöglichen eine hochgradig flexible und parallele Verarbeitung von Geometrie und Pixeldaten. + +1.1 Die Sechs Programmierbaren Shader-Typen + +Die Pipeline in Direct3D ist modular aufgebaut und bietet sechs programmierbare Stufen, die jeweils spezifische Aufgaben in der Datenverarbeitung von den initialen Vertices bis zum finalen Pixel übernehmen. + +1.1.1 Vertex Shader + +Der Vertex Shader ist eine obligatorische Stufe in der minimalen Rendering-Pipeline. Er wird einmal pro Vertex ausgeführt und ist primär für die räumliche Transformation zuständig. Die Hauptaufgabe des VS besteht darin, die lokale Koordinatenposition des Vertex unter Anwendung der World-View-Projection Matrizen in die homogene Clip-Space-Position zu überführen. Dieser obligatorische Output muss die System Value Semantik SV_Position tragen. Darüber hinaus transformiert der VS alle für spätere Stufen benötigten Attribute wie Normalen, Tangenten und Texturkoordinaten in den erforderlichen Raum, meist Weltraum oder Sichtraum, und leitet sie zur Rasterization weiter. Die Input-Daten für den VS stammen aus dem Vertex Buffer und werden durch User Semantics wie POSITION0, NORMAL0 oder TEXCOORD0 gebunden. + +1.1.2 Tesselation Stages: Hull Shader und Domain Shader + +Die Tessellation ermöglicht die dynamische Generierung geometrischer Details auf der GPU, was die LOD-Verwaltung deutlich vereinfacht. + +Hull Shader: Diese Stufe, auch bekannt als Tessellation Control Stage, verarbeitet einen Input-Patch, eine Gruppe von Kontrollpunkten zwischen 1 und 32, und generiert neue Kontrollpunkte sowie Patch-Konstanten. Die wichtigste Ausgabe sind die Tessellation Factors, numerische Werte, welche die Dichte der Unterteilung der Patch-Kanten und des Inneren für die nachfolgende fixe Tessellator-Stufe definieren. Eine wichtige Optimierung liegt in der Möglichkeit, den gesamten Patch zu verwerfen, also Culling, indem der HS die Tessellation Factors auf 0 oder NaN setzt. + +Domain Shader: Der Domain Shader wird einmal pro Ausgabekoordinate des Tessellators aufgerufen. Er fungiert als Evaluator, indem er die vom Tessellator bereitgestellten Koordinaten, zum Beispiel baryzentrische Koordinaten, sowie die Kontrollpunkte des HS-Outputs nutzt, um die exakte 3D-Position der neuen, hochauflösenden Vertices zu berechnen. Im Prinzip führt der DS die Transformationen des ursprünglichen Vertex Shaders für die neu generierte Geometrie durch und liefert die transformierte Vertex-Position an den Rasterizer. + +1.1.3 Geometry Shader + +Der Geometry Shader arbeitet auf Primitiven: Punkten, Linien oder Dreiecken. Im Gegensatz zum VS, der 1:1 Vertices verarbeitet, kann der GS die Topologie manipulieren, indem er Primitiven entfernt oder neue Geometrie erzeugt, zum Beispiel aus einem Punkt ein Quad generiert. Ein zentrales Feature des GS ist Stream-Out, das es ermöglicht, verarbeitete Geometriedaten direkt zurück in einen GPU-Buffer zu schreiben, anstatt sie dem Rasterizer zuzuführen. Dies ist fundamental für Rückkopplungsschleifen, wie sie in Partikelsimulationen oder komplexen LOD-Systemen benötigt werden. + +Architektonische Implikation: Aufgrund seiner sequenziellen Natur und der Schwierigkeit, seine Ausführung effizient zu parallelisieren, gilt der GS als Performance-Engpass. In Direct3D 12 Ultimate wird er daher durch die effizienteren, GPU-gesteuerten Mesh Shaders ersetzt. Es ist bemerkenswert, dass der Mesh Shader den Stream-Out-Mechanismus in seiner ursprünglichen Form nicht fortführt, was auf einen Paradigmenwechsel in der Geometrieverarbeitung hindeutet. + +1.1.4 Pixel Shader + +Der Pixel Shader, oder Fragment Shader, ist die zweite obligatorische Stufe. Er wird pro Pixel oder Fragment ausgeführt, das vom Rasterizer als abgedeckt identifiziert wird. Der PS erhält alle vom VS, oder DS/GS, ausgegebenen und vom Rasterizer über die Oberfläche des Primitivs interpolierten Attribute, zum Beispiel interpolierte Normalen, UV-Koordinaten und Weltposition. Seine Hauptfunktion ist die Berechnung der endgültigen Farbe, oft basierend auf Beleuchtungsmodellen und Textur-Sampling. Die finale Ausgabe des PS muss über die Semantik SV_Target erfolgen, die den Farbwert in den gebundenen Render Target Buffer schreibt. Der PS kann optional die Screen-Space-Position, also Pixelkoordinaten X/Y, als Input über SV_Position empfangen, was für gewisse Post-Processing-Effekte nützlich ist. + +1.1.5 Compute Shader + +Der Compute Shader ist technisch gesehen kein Teil der klassischen Rendering-Pipeline, sondern ermöglicht General Purpose GPU Computing, GPGPU. Er bietet hochparallele Rechenleistung für beliebige, nicht-grafische Aufgaben, wie Physik-Simulationen, Raytracing-Beschleunigung oder komplexes Culling. Compute Shader greifen typischerweise über Unordered Access Views, UAVs, auf Ressourcen zu, die wahlfreien Lese- und Schreibzugriff erlauben. + +1.2 Shader-Ressourcen: Buffer und Speichermanagement + +Shader-Ressourcen werden in Buffern organisiert und dienen der Bereitstellung von Geometrie-Input oder konstanten Uniform-Daten. + +1.2.1 Vertex und Index Buffer + +Vertex Buffer: Speichert die Kernattribute der Geometrie: Position, Normale, UV und Farbe. + +Index Buffer: Enthält eine Liste von Indizes, die definieren, welche Vertices aus dem VB zur Konstruktion von Primitiven verwendet werden sollen. Die Nutzung des Index Buffers ist ein entscheidender Performance-Vorteil, da sie die Menge der zu speichernden Duplikate von Vertices reduziert. Darüber hinaus verbessert die Verwendung von Indizes und eine gute Indexreihenfolge die Vertex-Cache-Effizienz auf der GPU, da oft dieselben Vertex-Daten schnell aus dem Cache abgerufen werden können, was die Gesamtgeschwindigkeit des Renderings erhöht. + +1.2.2 Constant Buffer + +Constant Buffers, CBs, speichern Daten, die für alle Invocations eines Shaders konstant bleiben, jedoch häufig von der CPU aktualisiert werden, zum Beispiel Transformationsmatrizen oder Lichtparameter. CBs sind für den Transfer kleiner, oft aktualisierter Datensätze optimiert. + +HLSL Packing Rules: Um eine effiziente Ausrichtung und Übertragung von Daten zwischen CPU und GPU zu gewährleisten, wendet HLSL strenge Packing-Regeln an, die Daten in 16-Byte-Vektoren gruppieren. Variablen werden so angeordnet, dass sie keine 16-Byte-Grenze überschreiten. Dies verhindert unnötigen Overhead beim Hochladen von Daten. + +Packing-Beispiel und Effizienz: Ein float4 belegt genau 16 Bytes. Wenn man innerhalb eines cbuffer kleine Datentypen ungeschickt platziert, entsteht Padding. Wenn die Struktur nicht optimiert wird, führt dies zu einer unnötig großen Datenmenge, die bei jedem Aufruf des Constant Buffers von der CPU zur GPU übertragen werden muss. Eine bewusste Organisation der HLSL-Strukturen, um die Vektor-Packing-Regeln auszunutzen, ist daher eine kritische Optimierungsstrategie für Rendering-Architekten. + +1.3 HLSL und Semantiken + +HLSL ist eine C-ähnliche Sprache. Sie verwendet Basistypen wie float, int, und deren Vektorvarianten float2 bis float4 sowie matrix. + +Semantiken als Pipeline-Schnittstelle: Semantiken sind Bindungsnamen, die dem Compiler und der Hardware mitteilen, welche Daten wohin fließen sollen. Sie sind in zwei Hauptkategorien unterteilt: + +1. User Semantiken: Werden zur Identifizierung benutzerdefinierter Datenströme verwendet, hauptsächlich Input-Attribute aus dem Vertex Buffer: POSITION, NORMAL, TEXCOORD. + +2. System Value Semantiken: Spezielle Semantiken, die von der Pipeline selbst verarbeitet werden. SV_Position: Obligatorischer Output des Vertex Shaders, definiert die transformierte 4D-Position im Clip Space. Kann auch als optionaler Input im Pixel Shader verwendet werden, um die Pixelkoordinaten im Screen Space zu erhalten. SV_Target: Obligatorischer Output des Pixel Shaders, definiert die endgültige Farbe, die in das Render Target geschrieben wird. + + +1.4 Shader-Pipeline-Flow + +Die Rendering-Pipeline ist sequenziell. Der minimale Flow besteht aus Vertex Shader und Pixel Shader. Die optionalen Stufen, HS, DS, GS, werden eingefügt, um spezifische Effekte wie Tessellation oder Geometrie-Manipulation zu erzielen. + +TEIL 2: Lighting, Beleuchtung + +Die Beleuchtung in DirectX wird durch die Implementierung von lokalen Beleuchtungsmodellen in den Shadern, typischerweise im Pixel Shader, realisiert, wobei die Intensität des reflektierten Lichts durch die Art der Lichtquelle und die Materialeigenschaften bestimmt wird. + +2.1 Lichtquellen-Typen + +Directional Light: Parallele Strahlen von unendlicher Entfernung, zum Beispiel die Sonne. Definiert nur durch Richtung L. Keine Attenuation, geringe Berechnung mit konstantem L. + +Point Light: Strahlt in alle Richtungen von einem Punkt P. Definiert durch Position und Radius. Attenuation nur abstandsabhängig, mittlere Berechnung mit Abstand d, L variiert. + +Spot Light: Kegelförmige Strahlenbündel. Definiert durch Position P, Richtung D und Winkel. Attenuation durch Abstand und Kegel-Form, hohe Berechnung mit Abstand d, L variiert und Cone-Test. + +2.2 Licht-Komponenten des Beleuchtungsmodells + +Das lokale Beleuchtungsmodell, häufig basierend auf Phong oder Blinn-Phong, setzt sich aus additiven Komponenten zusammen. + +Ambient: Simuliert indirektes oder gestreutes Licht. Es ist konstant und richtungsunabhängig. + +Diffuse: Simuliert die matte Reflexion. Die Intensität hängt von der Orientierung der Oberfläche zur Lichtquelle ab, Lambert'sches Gesetz. Diffuse ist proportional zu Maximum von N mal L, 0, wobei N die Normale und L die Lichtrichtung ist. + +Specular: Simuliert glänzende Highlights auf der Oberfläche. Die Intensität ist stark von der Blickrichtung V und der Oberflächenrauheit, Shininess, abhängig. + +Emission: Licht, das vom Objekt selbst ausgestrahlt wird, unabhängig von externen Lichtquellen. + +Die finale beleuchtete Farbe C Final wird durch die Summe dieser Komponenten bestimmt: C Final gleich Ambient plus Diffuse plus Specular plus Emission. + +2.3 Beleuchtungs-Berechnungen + +2.3.1 Blinn-Phong Specular + +Während das klassische Phong-Modell den Reflexionsvektor R und den Blickvektor V vergleicht, nutzt das Blinn-Phong-Modell den Halbvektor H. Dies ist rechnerisch effizienter. + +Der Halbvektor H wird als normalisierte Summe der Lichtrichtung L und der Blickrichtung V berechnet: H gleich L plus V geteilt durch die Norm von L plus V. Die spekulare Intensität wird dann berechnet als: Specular gleich C Specular mal Maximum von N mal H, 0 hoch n. Wobei n der Shininess-Exponent ist, der die Glanzstärke des Materials bestimmt. + +2.3.2 Attenuation, Dämpfung + +Die quadratische Attenuation ist das Standardmodell zur Simulation der realistischen Intensitätsabnahme von Point und Spot Lights mit der Entfernung d. + +Attenuation von d gleich 1 geteilt durch c const plus c linear mal d plus c quadratic mal d Quadrat. + +Der konstante, lineare und quadratische Koeffizient steuern, wie schnell und stark die Lichtintensität abfällt. Ein häufiger Fehler in HLSL-Implementierungen ist die fehlerhafte Priorisierung von Operatoren, zum Beispiel 1,0f geteilt durch d mal d statt 1,0f geteilt durch Klammer auf d mal d Klammer zu, was zu falschen oder fehlenden Dämpfungseffekten führt. + +2.4 Vertex Lighting versus Pixel Lighting, Gouraud versus Phong + +Die Wahl des Beleuchtungsorts, VS oder PS, stellt einen kritischen Trade-off zwischen Renderqualität und Performance dar. + +Vertex Lighting, Gouraud Shading: Die Beleuchtung wird einmal pro Vertex im Vertex Shader berechnet. Die resultierenden Farbewerte werden vom Rasterizer über die Fläche des Primitivs interpoliert. Dies ist sehr schnell, Performance proportional zur Anzahl der Vertices, führt aber zu unpräzisen Ergebnissen, insbesondere bei großen Polygonen oder kleinen, glänzenden Highlights, die zwischen den Vertices verschwinden können. Die Interpolation der fertigen Farbe kann zu sichtbaren Farbabstufungen, Mach Bands, führen. + +Pixel Lighting, Phong Shading: Die Beleuchtung wird für jeden Pixel im Pixel Shader neu berechnet. Hierbei werden die Normalenvektoren vom VS an den PS weitergegeben und über die Oberfläche interpoliert. Da die Beleuchtung pro Pixel erfolgt, ist die Qualität deutlich höher, die Highlights sind glatt und präzise, unabhängig von der Polygondichte. Der Nachteil ist der höhere Rechenaufwand, da die teure Beleuchtungsberechnung für potenziell Millionen von Pixeln durchgeführt werden muss, Performance proportional zur Anzahl der Pixel. + +Pixel Lighting, Phong Shading, ist der heutige Standard, da moderne GPUs die zusätzliche Last gut bewältigen können, um die notwendige visuelle Qualität zu gewährleisten. + +TEIL 3: Texturen, Mapping und Filtertechniken + +Texturen sind essentielle Datenquellen für Shader und erfordern spezielle Techniken für Adressierung, Sampling und Qualitätsoptimierung. + +3.1 UV-Mapping und Adressierungsmodi + +UV-Mapping: Definiert die Abbildung von 3D-Vertex-Positionen auf die 2D-Texturkoordinaten u und v. Der Standardbereich für Texturkoordinaten liegt in 0 bis 1 mal 0 bis 1. Ein einzelnes Bildelement in der Textur wird als Texel bezeichnet. + +Texture Address Modes, UV-Tiling: Diese Modi bestimmen das Verhalten des Samplers, wenn die übergebenen UV-Koordinaten außerhalb des Standardbereichs liegen. + +Wrap, Repeat: Die Textur wird wiederholt, indem nur der gebrochene Teil der Koordinate verwendet wird, zum Beispiel u modulo 1,0. Anwendung: Tiling von Oberflächen wie Wände und Böden. + +Mirror: Die Textur wird bei jeder ganzzahligen Grenze gespiegelt. Reduziert sichtbare Nähte bei Kachelung. + +Clamp: Die Koordinaten werden auf 0 bis 1 begrenzt. Die Farbe der Randtexel wird bis zur Grenze des Primitivs ausgedehnt, Smearing. Anwendung: Einzelobjekte, die nicht kacheln sollen, zum Beispiel UI-Elemente. + +Border: Außerhalb von 0 bis 1 wird eine definierte Border Color verwendet. Vermeidung von Smearing bei bestimmten Effekten. + +3.2 Texture Sampling und Filterung + +Sampling beschreibt den Prozess des Auslesens von Farbinformationen an einer bestimmten UV-Koordinate. + +Point Filtering, Nearest Neighbor: Wählt den Farbwert des Texels, dessen Zentrum dem Sample-Punkt am nächsten liegt. Resultiert in einer blockigen, pixelierten Optik. + +Linear Filtering, Bilinear: Interpoliert linear zwischen den vier nächstgelegenen Texeln auf der aktuellen Mipmap-Stufe, um einen glatteren Farbübergang zu erzeugen. + +Mipmapping + +Mipmapping ist eine Hierarchie von vorab berechneten, kleineren Versionen der Originaltextur, Level 0. + +Zweck: Mipmapping dient primär dazu, das Minifikations-Aliasing, Moiré-Effekte bei Texturen in der Ferne, zu reduzieren und die Performance zu steigern, da der GPU-Speicherzugriff, Bandbreite, stark reduziert wird, wenn weit entfernte Objekte kleinere Textur-Levels verwenden. + +Berechnung der Stufenanzahl L: Die Anzahl der Mipmap-Levels für eine Textur mit den Dimensionen W mal H wird berechnet als: L gleich Abrundung von Logarithmus zur Basis 2 von Maximum von W, H plus 1. + +Beispiel 1: 256 mal 256 ergibt Logarithmus zur Basis 2 von 256 plus 1 gleich 8 plus 1 gleich 9 Stufen. + +Beispiel 2: 1024 mal 1024 ergibt Logarithmus zur Basis 2 von 1024 plus 1 gleich 10 plus 1 gleich 11 Stufen. + +Speicher-Overhead: Der gesamte zusätzliche Speicher, der für alle Mipmap-Stufen benötigt wird, beträgt nur etwa 33% der Größe der ursprünglichen, größten Textur, Level 0. Dies macht Mipmapping zu einer sehr effizienten Methode. + +Trilinear und Anisotropic Filtering + +Trilinear Filtering: Verbessert das Bilinear Filtering, indem es nicht nur innerhalb eines Mipmap-Levels interpoliert, sondern zusätzlich linear zwischen den beiden Mipmap-Stufen, LOD A und LOD B, interpoliert, die dem optimalen Level of Detail am nächsten liegen. Dies verhindert das abrupte Umschalten zwischen Mipmap-Stufen, bekannt als Mipmap Popping. + +Anisotropic Filtering, AF: Dies ist die hochwertigste Filterung. Bilinear und Trilinear sind isotrop, filtern gleichmäßig. Bei schrägen Blickwinkeln, zum Beispiel bei Bodenflächen, führt dies zu Unschärfe, da das Aliasing in einer Achse stärker ist als in der anderen. AF wendet eine richtungsabhängige Filterung an, um die Texturdetails auch bei extrem schrägen Winkeln scharf und detailliert zu halten. Trotz der höheren Qualität hat AF auf modernen GPUs nur einen minimalen Performance-Einfluss und wird daher fast immer in den höchsten Stufen verwendet. + +3.3 Advanced Texturing Techniken + +3.3.1 Texture-Typen + +Cube Maps: Bestehen aus sechs 2D-Texturen, die die Seiten eines Würfels repräsentieren. Sie werden primär für das Environment Mapping, zum Beispiel Skyboxes oder Reflexionen, verwendet, um die Umgebung aus einem zentralen Punkt zu erfassen. + +Texture Arrays: Sammlungen von 1D-, 2D- oder 3D-Texturen, die es dem Shader ermöglichen, schnell auf verschiedene Texturlayer zuzugreifen, ohne die Shader-Bindings ändern zu müssen. Dies ist nützlich für Terrain-Layering oder das Verwalten von Textursätzen. + +3.3.2 Normal Mapping + +Normal Mapping ist eine Bump-Mapping-Technik, die mittels einer speziellen Textur, der Normal Map, detaillierte Oberflächenbeleuchtung simuliert, ohne die Geometrie zu erhöhen. + +Tangent Space: Da die in der Normal Map gespeicherten Normalenvektoren typischerweise relative Normalen sind, lokal zum Polygon, müssen die Beleuchtungsberechnungen im Tangent Space durchgeführt werden. + +TBN Matrix: Um die Normalen aus der Textur korrekt im Raum zu orientieren, wird eine Basis aus drei Vektoren definiert: der Tangente T, der Bitangente B und der geometrischen Normale N. Diese drei Vektoren bilden die TBN-Matrix, die es ermöglicht, die Beleuchtungsvektoren, Lichtrichtung L, Blickrichtung V, vom Weltraum in den Tangent Space zu transformieren, sodass sie mit der Normalen aus der Textur verglichen werden können. + +3.3.3 Parallax Mapping + +Parallax Mapping nutzt das Prinzip der Parallaxe, der scheinbaren Verschiebung von Objekten bei Änderung des Blickwinkels, um eine Illusion von Tiefe auf einer flachen 2D-Textur zu erzeugen. + +Funktion: Die Technik verwendet eine Höhenkarte, Height Map, ein Graustufenbild, wobei hellere Werte höhere Bereiche darstellen, und verschiebt die UV-Koordinaten des Texels abhängig vom Blickwinkel des Betrachters. + +UV-Verschiebung: Die Verschiebung Delta UV wird in Abhängigkeit von der Höhe H aus der Höhenkarte und dem Blickvektor V ts im Tangent Space berechnet. Wenn der Blickwinkel steiler ist, flacher Winkel zur Oberfläche, ist die Verschiebung größer, was die Tiefenillusion verstärkt. + +Erweiterte Formen: Einfaches Parallax Mapping berücksichtigt keine Selbstverdeckung. Techniken wie Parallax Occlusion Mapping, POM, nutzen iterative Verfahren, zum Beispiel Ray-Marching, gegen das Höhenfeld, um den korrekten Schnittpunkt zu finden und somit Selbstverschattung und präzisere Silhouetten zu ermöglichen. + +Schlussfolgerung + +Die Beherrschung der DirectX-Pipeline erfordert ein tiefes Verständnis der Interaktion zwischen programmierbaren Stufen und GPU-Architektur. Prüfungsrelevant sind insbesondere die Schnittstellen, Semantiken, die Optimierungsansätze, HLSL Packing und Vertex Caching durch Index Buffer, und die Trade-offs zwischen Qualität und Performance. + +Die evolutionären Schritte in der Pipeline zeigen eine klare Verschiebung hin zu mehr GPU-Kontrolle, Tessellation, Mesh Shaders als Ersatz für GS. Im Bereich Beleuchtung bleibt Blinn-Phong der Standard aufgrund seiner Balance zwischen Qualität und Leistung. Bei Texturen stellen Mipmaps und Anisotropic Filtering nicht nur Qualitätsverbesserungen dar, sondern sind fundamentale Mechanismen zur effizienten Bandbreitennutzung und Cache-Optimierung auf modernen GPU-Systemen. Die korrekte Anwendung von TBN-Matrizen und Parallax-Algorithmen ermöglicht es schließlich, visuelle Komplexität zu simulieren, die weit über die tatsächliche Geometriedichte hinausgeht. \ No newline at end of file diff --git a/Grafik/Hackbarth/Tag2_Themen.md b/Grafik/Hackbarth/Tag2_Themen.md new file mode 100644 index 0000000..cbb8907 --- /dev/null +++ b/Grafik/Hackbarth/Tag2_Themen.md @@ -0,0 +1,84 @@ +Erstelle einen umfassenden, detaillierten Lernbericht zu folgenden DirectX-Berechnungsthemen für Grafikprogrammierung: +TEIL 1: Vertices & Buffer-Berechnungen +- Vertex-Struktur und Attribute: + * Position: 3D-Koordinaten (x, y, z), Datentyp float, Speichergröße + * Normale: Normalisierter Vektor (nx, ny, nz), Verwendung für Beleuchtung + * Tangente und Binormale: Für Normal Mapping, Speichergröße + * UV-Koordinaten: Texturkoordinaten (u, v), Wertebereich [0,1] + * Farbe: RGBA vs. ARGB, Byte vs. Float-Repräsentation +- Vertex-Count-Berechnungen für verschiedene Geometrien: + * Würfel: Warum 24 Vertices statt 8? (4 Vertices pro Fläche × 6 Flächen) + * Quad/Plane: Vertex-Count mit und ohne Shared Vertices + * Zylinder: Berechnung basierend auf Segmenten (Seitenflächen + Deckel) + * Kugel/Sphere: Berechnung basierend auf Längen- und Breitengraden +- Vertex-Buffer-Größenberechnung: + * Formel: Anzahl Vertices × Bytes pro Vertex + * Detaillierte Beispiele: + - Position (3 floats) + Normal (3 floats) + UV (2 floats) = 8 floats + - 8 floats × 4 Bytes = 32 Bytes pro Vertex + - Würfel: 24 Vertices × 32 Bytes = 768 Bytes + * Verschiedene Vertex-Formate und deren Größen + * Padding und Alignment-Regeln (16-Byte-Alignment) + * Beispielrechnungen mit verschiedenen Attribut-Kombinationen +- Vertex-Buffer-Typen: + * Static vs. Dynamic vs. Staging Buffers +- Praktische Übungsaufgaben: + * Berechne Vertex-Buffer-Größe für verschiedene Mesh-Typen +TEIL 2: Index-Buffer-Berechnungen +- Index-Buffer-Grundlagen: + * Zweck: Vertex-Wiederverwendung, Memory-Effizienz + * Index-Datentypen: 16-bit (WORD, 0-65535) vs. 32-bit (DWORD) +- Triangle List Index-Berechnungen: + * Formel: Anzahl Dreiecke × 3 Indices + * Index-Buffer-Größe: 36 Indices × 2 Bytes (WORD) = 72 Bytes +- Index-Count für verschiedene Primitive-Typen: + * Triangle List: N Dreiecke = 3N Indices + * Triangle Strip: N Dreiecke = N+2 Indices (Effizienz!) + * Triangle Fan: N Dreiecke = N+2 Indices + * Line List: N Linien = 2N Indices + * Line Strip: N Linien = N+1 Indices +- Detaillierte Geometrie-Berechnungen: + * Würfel: 12 Dreiecke (Triangle List) vs. optimierte Strip-Varianten + * Quad: 2 Dreiecke, 6 Indices (List) vs. 4 Indices (Strip) + * Zylinder: Mantel + Deckel, Index-Berechnung + * Kugel: Segments × Rings × 6 Indices (bei Triangle List) +TEIL 3: Transformationen und Koordinatensysteme +- Coordinate Spaces im Detail: + * Local/Object Space: Mesh-eigenes Koordinatensystem, Origin am Pivot + * World Space: Globales 3D-Koordinatensystem der Szene + * View/Camera/Eye Space: Kamera am Origin, Blickrichtung -Z + * Clip Space: Nach Projection, homogene Koordinaten, [-1,1] oder [0,1] + * Screen/Viewport Space: 2D-Pixel-Koordinaten +- Transformations-Pipeline: + * Reihenfolge: Local → World → View → Projection → Clip → Screen + * Matrix-Multiplikation: Vertex × Model × View × Projection + * Warum diese Reihenfolge? +- Model/World Transformation: + * Translation: Verschiebung im Raum, Translation Matrix + * Rotation: Um X, Y, Z-Achse, Euler Angles, Rotation Matrices + * Scaling: Uniform vs. Non-Uniform, Scaling Matrix + * Kombinierte Transformation: Scale → Rotate → Translate (SRT) + * Matrix-Multiplikations-Reihenfolge und deren Bedeutung +- View Transformation: + * Look-At Matrix: Eye Position, Target, Up-Vector + * Kamera-Position und Orientierung + * View Matrix Berechnung +- Projection Transformation: + * Perspective Projection: FOV (Field of View), Aspect Ratio, Near/Far Plane + * Orthographic Projection: Left, Right, Top, Bottom, Near, Far + * Perspective, Orthographic Matrix Aufbau und Vergleich +- Homogene Koordinaten: + * 4D-Vektoren (x, y, z, w) für 3D-Grafik + * Warum w-Komponente? Perspektivische Teilung, Translation in Matrix-Form + * Homogenisierung: Division durch w nach Projection + * w = 0 für Richtungsvektoren, w = 1 für Punkte + * Perspective Divide: (x/w, y/w, z/w) +- Viewport Transformation: + * Clip Space [-1,1] → Screen Space [0, Width]×[0, Height] + * Viewport-Parameter: X, Y, Width, Height, MinDepth, MaxDepth + * Depth Buffer Mapping [0,1] +- Praktische Transformations-Beispiele: + * Schritt-für-Schritt: Vertex durch alle Transformationen + * Numerische Berechnungen mit Beispiel-Matrizen + * Verständnis: Was passiert in jedem Space? +Füge zu jedem Abschnitt hinzu: Schritt-für-Schritt-Berechnungen, Formeln in mathematischer Notation, konkrete Zahlenbeispiele, Visualisierungen (beschreibe sie textuell), häufige Rechenfehler. Strukturiere den Bericht so, dass Berechnungswege klar nachvollziehbar sind und sich für Karteikarten mit Rechenaufgaben eignen. Erstelle Übungsaufgaben mit Lösungen für jedes Thema. \ No newline at end of file diff --git a/Grafik/Hackbarth/Tag3_Bericht.md b/Grafik/Hackbarth/Tag3_Bericht.md new file mode 100644 index 0000000..e69de29 diff --git a/Grafik/Hackbarth/Tag3_Themen.md b/Grafik/Hackbarth/Tag3_Themen.md new file mode 100644 index 0000000..9e6ef89 --- /dev/null +++ b/Grafik/Hackbarth/Tag3_Themen.md @@ -0,0 +1,86 @@ +Erstelle einen detaillierten Lernbericht zu Shader, Lighting und Texturen in DirectX. Fokussiere auf prüfungsrelevante Konzepte mit prägnanten Erklärungen und praktischen Beispielen: + +TEIL 1: Shader-Programmierung +- Die 6 Shader-Typen (Grundfunktion, Input/Output, Verwendungszweck): + * Vertex Shader (VS): Vertex-Transformation, Position-Berechnung, Attribute-Weiterleitung + * Hull Shader (HS): Tesselation Control, Patch-Verarbeitung, Tesselation-Faktoren + * Domain Shader (DS): Tesselation Evaluation, neue Vertices generieren + * Geometry Shader (GS): Primitive-Manipulation, Stream-Out, zusätzliche Geometrie erzeugen + * Pixel Shader (PS): Per-Pixel-Farbe, Lighting, Texturing + * Compute Shader (CS): General Purpose GPU Computing, nicht in Rendering-Pipeline +- Shader-Ressourcen: + * Vertex Buffer: Input für Vertex Shader, Vertex-Daten (Position, Normal, UV, etc.) + * Index Buffer: Definiert Primitive-Topologie, optimiert Vertex-Sharing + * Constant Buffer: Uniforme Daten (Matrizen, Lichtdaten, Material), updates per Frame/Object + * Unterschiede: Buffer-Typen, Binding-Slots, Update-Frequenz +- HLSL (High Level Shading Language): + * Syntax: C-ähnlich, Datentypen (float, float2-4, matrix, struct) + * Semantiken: Bindings zwischen Pipeline-Stages (POSITION, NORMAL, TEXCOORD, SV_Position, SV_Target) + * Input-Semantiken: Was kommt rein? (z.B. POSITION0) + * Output-Semantiken: Was geht raus? (z.B. SV_Position für Vertex Shader) + * System-Value-Semantiken: SV_* (spezielle GPU-Werte) + * Shader-Kompilierung: .hlsl → Bytecode +- Shader-Pipeline-Flow: + * Datenfluss durch alle Stages + * Welche Shader sind verpflichtend? (VS + PS minimal) + * Optional: HS+DS (Tesselation), GS +TEIL 2: Lighting (Beleuchtung) +- Lichtquellen-Typen: + * Directional Light: Parallele Strahlen, keine Position, nur Richtung (z.B. Sonne) + * Point Light: Strahlt in alle Richtungen, Position + Reichweite, Attenuation + * Spot Light: Kegelförmig, Position + Richtung, Inner/Outer Cone Angle, Attenuation + * Vergleich: Berechnungsaufwand, Anwendungsfälle +- Licht-Komponenten (Beleuchtungsmodell): + * Ambient: Konstante Grundhelligkeit, keine Richtung, simuliert indirektes Licht + * Diffuse: Matte Oberfläche, Lambert-Reflexion, abhängig von Normal·Light-Direction + * Specular: Glänzende Highlights, abhängig von View-Direction, Shininess/Power + * Emission: Selbstleuchtende Objekte, unabhängig von Lichtquellen + * Formel: Final = Ambient + Diffuse + Specular + Emission +- Beleuchtungs-Berechnungen: + * Lambert (Diffuse): max(N·L, 0) + * Phong Specular: (R·V)^n (Reflection Vector) + * Blinn-Phong: (N·H)^n (Half Vector, effizienter) + * Attenuation für Point/Spot: 1/(constant + linear*d + quadratic*d²) +- Vertex Lighting vs. Pixel Lighting: + * Vertex Lighting: Berechnung im Vertex Shader, Interpolation, weniger präzise, schneller + * Pixel Lighting: Berechnung im Pixel Shader, pro Pixel, präziser, teurer + * Vergleich: Qualität, Performance, wann was verwenden? + * Gouraud Shading (Vertex) vs. Phong Shading (Pixel) +TEIL 3: Texturen +- UV-Mapping: + * Texturkoordinaten (u,v): 2D-Koordinaten [0,1] × [0,1] + * Mapping: 3D-Vertices → 2D-Textur + * UV-Layout, UV-Unwrapping + * Texel: Texture Pixel +- Texture Address Modes (UV-Tiling): + * Wrap/Repeat: Textur wiederholt sich (u % 1.0) + * Mirror: Spiegelt sich an Grenzen + * Clamp: Letzte Texel-Farbe wird wiederholt + * Border: Definierte Border-Color außerhalb [0,1] + * Anwendung: Tiling von Oberflächen vs. einzelne Objekte +- Texture Sampling: + * Sampler States: Filter-Modi, Address-Modes + * Point Filtering: Nächster Texel, blocky + * Linear Filtering: Bilineare Interpolation, smooth + * Anisotropic Filtering: Qualität bei schrägen Winkeln +- Mipmapping: + * Zweck: Performance, Anti-Aliasing für Distanz + * Mipmap-Stufen: Jede Stufe ist halbe Auflösung + * Berechnung Anzahl Stufen: log₂(max(width, height)) + 1 + * Beispiele: + - 256×256 → Stufen: log₂(256) + 1 = 8 + 1 = 9 Stufen + - 512×256 → log₂(512) + 1 = 9 + 1 = 10 Stufen + - 1024×1024 → 11 Stufen + * Memory-Overhead: ~33% zusätzlicher Speicher + * Trilinear Filtering: Interpolation zwischen Mipmap-Stufen +- Texture-Typen: + * 1D, 2D, 3D Textures + * Cube Maps: 6 Faces für Environment Mapping + * Texture Arrays +- Advanced Texturing: + * Normal Mapping: Tangent Space, Detail ohne Geometrie + * Parallax Mapping: Tiefenillusion + * Multi-Texturing: Mehrere Texturen kombinieren +Füge hinzu: Kernkonzepte, Formeln, Berechnungsbeispiele für Mipmaps, Code-Snippets in HLSL wo relevant, Vergleichstabellen, und prüfungsrelevante Details. Strukturiere für Karteikarten-Erstellung mit Fokus auf Verständnis und Anwendung. + +Erstelle mir bitte nur auf Grundlage der Quelle: ("Detaillierte Analyse der GPU-Pipeline in DirectX: Shader, Beleuchtung und Texturierung") Lernkarten zum ausführlichen Lernen der Inhalte und decke bitte alles ab. \ No newline at end of file diff --git a/Grafik/Hackbarth/Zeitplan.md b/Grafik/Hackbarth/Zeitplan.md new file mode 100644 index 0000000..d6fd7a7 --- /dev/null +++ b/Grafik/Hackbarth/Zeitplan.md @@ -0,0 +1,85 @@ +# Zeitplan + +## Tag 1: Grundlagen, Fenster & Pipeline-Struktur + +**Ziel:** Das "Gerüst" verstehen (Windows, COM) und den Ablauf der Grafikpipeline verinnerlichen. + +### 1. Windows & C++ Basics (45 Min) + +- Verstehe den Unterschied zwischen Pointer und Handle sowie das COM (Component Object Model). +- Lerne die Fensternachrichten (`WM_QUIT`, `WM_DESTROY`, `WM_EXIT`) und die Funktion der Messagequeue (`Window Proc`). +- Frage dich: Wozu braucht man Nachrichten? + +### 2. Die Pipelines (1 Std.) + +- Vergleiche Fixed Function vs. Programmable Pipeline. +- Lerne die Elemente der Pipeline auswendig: Vertex, Mesh, Transformation, Primitives (Unterschied List vs. Strip). +- Schau dir die Stages an: Rasterizer (Front/Back Faces) und Screen-Stage. + +### 3. DirectX Versionen (30 Min) + +- Unterscheide Direct3D9 (Device) vs. Direct3D11 (Device Context vs. Device). + +--- + +## Tag 2: Berechnungen (Der "Anwendungs"-Teil) + +**Ziel:** Die Rechenaufgaben sicher beherrschen. Der Taschenrechner ist erlaubt, also übe den Weg. + +### 1. Vertices & Buffer berechnen (1,5 Std.) – WICHTIG + +- Verinnerliche das Beispiel aus der Quelle: Ein Würfel braucht 24 Vertices (4 pro Fläche × 6 Flächen), nicht 8, wegen der Normalen. +- Berechne die Vertexgröße: + - Position (3 Floats) + Normale (3 Floats) + UV (2 Floats) = 8 Floats + - 8 Floats × 4 Byte = 32 Byte pro Vertex +- Gesamtgröße Vertexbuffer: 24 Vertices × 32 Byte = 768 Byte + +### 2. Indexbuffer berechnen (45 Min) + +- Verstehe die `Triangle List`: 6 Flächen × 2 Dreiecke × 3 Ecken = 36 Indices. +- Rechnung: 36 Indices × 2 Byte (Word) = 72 Byte + +### 3. Transformationen (30 Min) + +- Lerne die Reihenfolge der Spaces: Local Space → World → View → Projection +- Verstehe homogenisierte Koordinaten. + +--- + +## Tag 3: Shader, Licht & Texturen + +**Ziel:** Die programmierbare Pipeline und visuelle Details verstehen. + +### 1. Shader (1 Std.) + +- Lerne alle 6 Shadertypen und ihre Grundfunktion: Vertex, Hull, Domain, Geometry, Pixel, Compute. +- Was sind Shader Ressources (Vertex-, Index-, Constantbuffer)? +- Was ist HLSL und wozu dienen Semantiken? + +### 2. Lighting (1 Std.) + +- Kenne die Lichtquellen (Directional, Point, Spot) und Lichtbestandteile (Ambient, Diffuse, Specular, Emission). +- Unterschied: Vertex-Lighting vs. Pixel-Lighting + +### 3. Texturen (30 Min) + +- UV-Mapping und UV-Tiling (Address Modes) verstehen. +- Mipmapping: Stufen zählen können. + +--- + +## Tag 4: Wiederholung & Lücken füllen + +**Ziel:** Wissen festigen und Details prüfen. + +### 1. Datentypen-Check (1 Std.) + +- Gehe konkrete Datentypen aus dem Framework (D3D9/D3D11) durch. + +### 2. Simulation (1 Std.) + +- Rechne ein Beispiel für Vertex- und Indexbuffer mit anderen Werten durch (z.B. nur eine Fläche oder eine Pyramide), um sicherzugehen, dass du das Prinzip (Vertices pro Fläche zählen) verstanden hast. + +### 3. Review (30 Min) + +- Gehe die Liste in `Klausurthemen.md` noch einmal Punkt für Punkt durch. Alles abgehakt? \ No newline at end of file diff --git a/Grafik/Kalki/Entropiecodierung.pdf b/Grafik/Kalki/Entropiecodierung.pdf new file mode 100644 index 0000000..8059a7d Binary files /dev/null and b/Grafik/Kalki/Entropiecodierung.pdf differ diff --git a/Grafik/Kalki/Hausaufgabe 1.md b/Grafik/Kalki/Hausaufgabe 1.md new file mode 100644 index 0000000..5da95f9 --- /dev/null +++ b/Grafik/Kalki/Hausaufgabe 1.md @@ -0,0 +1,211 @@ +Name: Theo Leuthardt +Datum: 09.09.2025 + +--- +#### Aufgabe 1: +##### Definition und Grundverständnis: +**Multimedia** bezeichnet die Integration verschiedener Medientypen (Text, Grafik, Audio, Video, Animation) in einem System zur gemeinsamen Verarbeitung und Präsentation über die Wahrnehmung des Menschen mithilfe seiner sechs Sinne. +##### Verschiedene Sichtweisen und Aspekte: +**Technische Perspektive:** +- Verarbeitung verschiedenen Typen von Daten (Text, Bild, Audio, Video) +- Herausforderungen bei Speicherung und Übertragung (Höhere Qualität = größere Speichernutzung z.B.) +- _Problem:_ Hohe Hardwareanforderungen und Bandbreite + +**Benutzerperspektive:** +- Interaktive und ansprechende Benutzererfahrung bei einer Multimediaanwendung +- Verschiedene Lerntypen werden angesprochen: z.B. visuell oder hörender +- _Vorteil:_ Besseres Verständnis durch multiple Sinneskanäle und damit mehr Optionen zur Aufnahme von Informationen +- _Nachteil:_ Mögliche kognitive Überlastung + +**Historische Entwicklung:** +- Von statischen Medien zu interaktiven Systemen über die zeitliche Entwicklung von Multimedia +- Evolution von Medien auf CD-ROM zu Web-basierten Anwendungen für die Anzeige, Wiedergabe oder Spielbarkeit der Medien +##### Kritische Bewertung: +**Stärken:** +- Erhöhte Informationsdichte durch die Ansammlung an Informationen in oben genannten Datentypen +- Bessere Wissensvermittlung durch mehrere Möglichkeiten des Lernens für die verschiedenen Lerntypen +- Zugänglichkeit für verschiedene Nutzergruppen: z.B. Barrierefreiheit für behinderte Menschen +- Möglichkeit zum Erleben von Phantasiewelten in immer realer aussehenden Bewegbildproduktionen (Geschichten aus Büchern werden Realität in 4K/8K-Filmen mit Animationen oder Realverfilmungen) + +**Schwächen:** +- Ansteigende Komplexität in Entwicklung und Wartung multimedialer Anwendungen oder von Medien selber +- Hohe Kosten der Produktionen (egal ob multimediale Anwendungen oder Filmproduktionen) und technische Anforderungen bei der Entwicklung +- Abhängigkeit von technischer Infrastruktur je nach Typ des Mediums: z.B. Grafische Datenverarbeitung mithilfe der GPU bei der Erstellung eines Modells in Blender +##### Fazit: +Multimedia ist nicht nur eine technische Integration verschiedener Medientypen, sondern ein paradigmatischer Ansatz zur Informationsvermittlung, der sowohl große Chancen als auch erhebliche Herausforderungen mit sich bringt. + +--- +#### Aufgabe 2: +##### Entropiecodierung: +- Versucht die theoretische Grenze der verlustfreien Kompression zu erreichen (Entropie) +- Daten werden komprimiert durch Reduktion der Codierungsredundanz mithilfe der Symbolverteilung +- Häufige Symbole erhalten kürzere Codes +- Erhöhung der Informationsdichte für die effizientere Nutzung des Speicherplatzes +- Beispiele: Huffman-Codierung, Arithmetische Codierung +Quelle: https://link.springer.com/chapter/10.1007/978-3-322-92815-3_4 +##### Quellcodierung: +- Erstellt eine Zuordnung von Symbolen zu Codewörtern zur Umwandlung von Daten in eine für die Kompression optimierte Form, um Redundanzen zu reduzieren +- Nutzt Eigenschaften der menschlichen Wahrnehmung +- Findung effizienterer Darstelltungen z.B. eine Codetabelle +- Beispiele: DCT bei JPEG (Transformation), Prädiktive Codierung +- Oft höhere Kompressionsraten als reine Entropiecodierung + +--- +#### Aufgabe 3: +##### Unformatierter Text (Plain Text): +- Reine Zeichenketten ohne Formatierung +- ASCII, UTF-8, UTF-16 (zeichenkettenkodiert), Unicode +- Beispiel: .txt-Dateien +##### Formatierter Text: +- Enthält Formatierungsinformationen +- Schriftart, -größe, -farbe, Ausrichtung +- Beispiel: RTF (Rich Text Format) +##### Strukturierter Text (Tagged Text): +- Hierarchische oder logische Struktur zur Strukturierung des Textes +- Markup-Sprachen (XML, HTML) +- Metadaten und Tags +##### Hypertext: +- Verknüpfte Textdokumente +- Navigation durch Links +- Realisierungen: Webseiten, Wiki-Systeme + +--- +#### Aufgabe 4: + +##### Card Shark: +Card Shark ist **kartenbasiertes System**, worin jede "Karte" eine Informationseinheit enthält. Die Navigation erfolgt zwischen Karten über Links, was dem Hypercard-Konzept ähnelt. Hierbei handelt es sich im ein statisches Informationsmodell zur textbasierten Darstellung von Informationen. +##### Holly Scroller: +Holly Scroller sind ein **scrollbasiertes System**, worin ein kontinuierlicher Informationsfluss herrscht mit vertikaler oder horizontaler Navigation. Durch die vertikale oder horizontale Darstellung wird eine dynamische Anzeige von Inhalten ermöglicht. Da es keine Informationen zugewiesen zu einer "Karte" gibt aus den Card Sharks, ist die Navigation weniger strukturiert. + +--- +#### Aufgabe 5: + +##### Strukturelle Links (Navigational Links): +- Hierarchische Beziehungen (Parent-Child) +- Sequenzielle Navigation (Next-Previous) +##### Referentielle Links (Referential Links): +- Verweise auf verwandte Inhalte +- Querverweise, Zitate +##### Organisatorische Links (Document Structural Links): +- Gruppierung ähnlicher Inhalte +- Kategorisierung +##### Assoziative Links (Associative Links): +- Thematische Verbindungen +- Konzeptuelle Zusammenhänge +##### Annotative Links (Annotation Links): +- Kommentare und Ergänzungen +- Erklärungen zu Begriffen + +--- +#### Aufgabe 6: +##### JPEG-Quantisierung: DCT-Transformation (Diskrete Cosinus-Transformation) +Die DCT transformiert Bilddaten vom Ortsbereich in den Frequenzbereich und bildet den Mittelpunkt der JPEG-Kompression. Dabei wird das Bild in 8×8 Pixel-Blöcke aufgeteilt und jeder Block einzeln verarbeitet. +Die DCT nutzt Cosinus-Funktionen als Basisfunktionen und jede Funktion kann als Summe von Cosinus-Funktionen dargestellt werden. +Für eine N×N Matrix wird die DCT-Matrix wie folgt berechnet: +- Für m=0: DCT[m][n] = √(1/N) +- Für m>0: DCT[m][n] = √(2/N) × cos((2n+1)πm/(2N)) +###### Quantisierungsmatrix +JPEG teilt jeden DCT-Wert durch einen Quantisierungsfaktor, der dann zur nächsten ganzen Zahl gerundet wird. Die Quantisierungsmatrix ist eine 8×8-Tabelle mit spezifischen Koeffizienten für jeden Frequenzbereich. + +**Aufbau der Matrix:** +- Kleinere Werte in der oberen linken Ecke (niedrige Frequenzen) +- Größere Werte in der unteren rechten Ecke (hohe Frequenzen) +- Kleine Koeffizienten für niedrige Frequenzen und große Koeffizienten für hohe Frequenzen + +**Beispiel einer Standard-Quantisierungsmatrix:** + +``` +16 11 10 16 24 40 51 61 +12 12 14 19 26 58 60 55 +14 13 16 24 40 57 69 56 +14 17 22 29 51 87 80 62 +18 22 37 56 68 109 103 77 +24 35 55 64 81 104 113 92 +49 64 78 87 103 121 120 101 +72 92 95 98 112 100 103 99 +``` + +###### Rundung und Informationsverlust +Nach der Division durch die Quantisierungsmatrix werden die Ergebnisse zur nächsten ganzen Zahl gerundet. Dieser Schritt verursacht den charakteristischen Informationsverlust der JPEG-Kompression: +- Nachkommastellen gehen unwiderruflich verloren +- Kleinere DCT-Koeffizienten werden oft zu Null gerundet +- Je größer der Quantisierungsfaktor, desto mehr Informationen gehen verloren +###### Qualitätsfaktor +Der Qualitätsfaktor skaliert die gesamte Quantisierungsmatrix und bestimmt das Verhältnis zwischen Kompression und Bildqualität: + +**Funktionsweise:** +- Niedrigere Qualitätswerte = größere Quantisierungskoeffizienten = mehr Kompression, schlechtere Qualität +- Höhere Qualitätswerte = kleinere Quantisierungskoeffizienten = weniger Kompression, bessere Qualität +- In Bildbearbeitungsprogrammen entspricht die "Qualitäts"-Einstellung der Modifikation dieser Koeffizienten + +**Mathematische Beziehung:** +Quantisierte Matrix = round(DCT Koeffizienten / (Quantisierungsmatrix * Qualitätsfaktor)) + +**Quelle:** https://dev.to/marycheung021213/understanding-dct-and-quantization-in-jpeg-compression-1col + +--- +#### Aufgabe 7: +##### Geschlechtsspezifische Unterschiede: +- **Stimmfrequenzen**: Männer (85-180 Hz), Frauen (165-265 Hz) +- **Formanten**: Unterschiedliche Resonanzfrequenzen in der Stimme +##### Mögliche Optimierungen: +- Angepasste Frequenzbänder-Aufteilung +- Optimierte Bit-Allokation für relevante Frequenzbereiche +- Geschlechtsspezifische psychoakustische Modelle +- Adaptive Codierung basierend auf Sprecheridentifikation + +Anhand dieser Ansätze wäre ein solches MP3-Codierungsmodell denkbar, jedoch muss auch die reale Nutzbarkeit beachtet werden, da eine automatische Geschlechtserkennung fehleranfällig wäre und gemischte Inhalte wie z.B. Duette zu Schwierigkeiten führen können. Außerdem besteht abseits davon ein Diskrimierungspotential bei automatischer Klassifizierung für nur marginale Verbesserungen aus technischer Sicht. + +--- +#### Aufgabe 8: +##### Intraframe-Codierung (I-Frames): +- JPEG-ähnliche Kompression einzelner Bilder +- DCT, Quantisierung, Entropiecodierung +##### Interframe-Codierung (P-/B-Frames): +- **Motion Compensation**: Bewegungsschätzung zwischen Frames +- **Differenzcodierung**: Nur Unterschiede werden codiert +- **Predictive Coding**: Vorhersage basierend auf vorherigen Frames +##### Moderne Verfahren: +- **H.264/AVC**: Advanced Video Coding +- **H.265/HEVC**: High Efficiency Video Coding +- **AV1**: Open-Source-Codec von Alliance for Open Media +- **VP9**: Google-entwickelter Codec + +--- +#### Aufgabe 9: +##### Szenario A: MIT Beitragsservice (GEZ) +**Struktur:** +- ARD/ZDF bleiben zentrale öffentlich-rechtliche Anbieter +- Pflichtfinanzierung sichert Grundversorgung +- Private Streaming-Dienste als Ergänzung +**Vorteile:** +- Unabhängige, werbefreie Inhalte +- Bildungsauftrag und Informationsqualität +- Regionale/lokale Berichterstattung garantiert +**Herausforderungen:** +- Konkurrenzdruck durch Netflix, Amazon Prime +- Generationswechsel zu Streaming-Plattformen +- Legitimationsdruck bei jüngeren Zielgruppen +##### Szenario B: OHNE Beitragsservice +**Struktur:** +- Vollständig privatisierte/kommerzialisierte Medienlandschaft +- Abo-Modelle und werbefinanzierte Dienste +- Marktbasierte Inhaltsproduktion +**Vorteile:** +- Marktorientierte, nachfragebasierte Inhalte +- Keine Zwangsfinanzierung +- Höhere Innovationsrate +**Risiken:** +- Verlust der Meinungsvielfalt +- Kommerzialisierung aller Inhalte +- Benachteiligung einkommensschwacher Schichten +- Wegfall gesellschaftlich wichtiger, aber nicht profitabler Inhalte +##### Lösung: Hybridmodell +**Reformierter öffentlich-rechtlicher Bereich:** +- Reduzierte, zielgerichtete Finanzierung +- Fokus auf Nachrichten, Bildung, Kultur +- Stärkere digitale Präsenz durch Apps und Webseiten +**Ergänzung durch Privatanbieter:** +- Entertainment und spezialisierte Inhalte +- Innovative Distributionsformen +- Internationale Zusammenarbeit \ No newline at end of file diff --git a/Grafik/Kalki/White Lavender Review/Aufnahmen.md b/Grafik/Kalki/White Lavender Review/Aufnahmen.md new file mode 100644 index 0000000..39fc51c --- /dev/null +++ b/Grafik/Kalki/White Lavender Review/Aufnahmen.md @@ -0,0 +1,6 @@ +# Aufnahmen +- [x] Startsequenz ✅ 2025-11-28 +- [x] Walking Video ✅ 2025-11-28 +- [x] Dodge Roll ✅ 2025-11-28 +- [x] Fight ✅ 2025-11-28 +- [x] Look at Screen ✅ 2025-11-28 \ No newline at end of file diff --git a/Grafik/Kalki/White Lavender Review/Drehbuch.md b/Grafik/Kalki/White Lavender Review/Drehbuch.md new file mode 100644 index 0000000..9e8aac4 --- /dev/null +++ b/Grafik/Kalki/White Lavender Review/Drehbuch.md @@ -0,0 +1,68 @@ +--- +share_link: https://share.note.sx/70wu5aar#4yyPDdY8sVCpafWbQGK11IQo17686i7Qy9lQN8lPBiY +share_updated: 2025-11-29T18:09:53+01:00 +--- +# Drehbuch + +Review zum Spiel "White Lavender" + +### Anforderungen: + +###### 1. Was soll vermittelt werden: + +- Grundlagen und Struktur von Soulslikespielen in Action-RPGs +- Bewertung der Inhalte des Spiels "White Lavender" +- Bewertung der technischen Anforderungen des Spiels +- Fazit zum Spiel und Empfehlung +- Ziel: Comedyreview (Mischung aus ehrlicher Analyse und witzigen Elementen) + +###### 2. Zielgruppe: +- Gamer, Streamer + +### Styleguide/Design: +- Startszene von Reviewern +- Spiel im Full Screen +- Gameplay im Hintergrund +- Review in Audioformat + +### Technischer Entwurf: +- Videoformat: mkv, mov +- Editor: Davinci Resolve +- Audioaufnahme: Audacity +- Audioformat: 48kHz, FLAC-Format, Stereo, 24Bit (verlustfreie kompression) +- Geteilter Speicher für Audios/Videos: NAS-Speicher +- Geteiltes Skript schreiben: Google Docs + +### Skript: + +| Szenen-Nr. | Titel | Inhalte | Bild | Audio/Kommentar | Dauer | | +| ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | --- | +| 1 | INTRO | Energetischer Einstieg ins Review | Energetischer Einstieg | "Was passiert, wenn ihr Soulslikes nehmt, einen CRT-Filter drüberkippt und das Ganze aussehen lasst wie ein Fiebertraum aus den 90ern? Richtig – White Lavender! Heute schauen wir uns dieses bunte Indie-Soulslike an, das beweist, dass man nicht immer düster und ernst sein muss, um schwer zu sein. Spoiler: Es ist chaotisch, es ist bunt, und ja – es hat Bugs. Aber lohnt es sich trotzdem? Let's go!" | 0:00-0:20 | | +| 2 | SOULSLIKES | Theoretische Erklärung mit Inhalten was Soulslikes ausmacht | B-Roll: Ausschnitte aus Dark Souls, Elden Ring, etc. | "Für die, die noch nie ein Soulslike gespielt haben – hier ein Crash-Course: Soulslikes sind Action-RPGs, die für ihre knallharte Schwierigkeit berüchtigt sind. Ihr seid ein Kämpfer in einer Welt voller Monster und Gefahren – das Ziel? Überleben und stärker werden. Präzises Timing, Ausdauer-Management, Bosskämpfe die euch an den Rand des Wahnsinns treiben, und wenn ihr sterbt? Dann dürft ihr schön zurücklaufen und eure Seelen einsammeln... falls ihr es bis dahin schafft. Die bekanntesten Vertreter? Dark Souls, Elden Ring, Bloodborne – Spiele die legendär dafür sind, dass Gamer ihre Controller an die Wand werfen. White Lavender nimmt diese Formel und dreht den Weird-Regler auf Maximum." | 0:20-0:45 | | +| 3 | GRAFIK | Super einzigartiger retroartiger Grafikstil, sehr bunt, CRT-Filter, lustiges Charakterdesign, Rüstung sichtbar am Charakter | Gameplay von White Lavender mit Fokus auf Visuals, Heranzoomen an Charakter-Füße | "Optisch ist das Spiel einfach nicht so das, was man vom Genre kennt. Aber im guten Sinne! Der retro-artige Grafikstil mit dem CRT-Filter sieht aus, als würde man auf einem alten Röhrenfernseher zocken. Alles ist super bunt und poppig – das komplette Gegenteil von den düsteren Souls-Spielen, die am bekanntesten in dem Genre sind. Das Charakterdesign ist absolut goofy und liebenswert. Und das Beste: Eure Rüstung ist tatsächlich am Charakter sichtbar! Fashion Souls könnte man schon fast sagen. Aber schaut euch mal diese Füße an... die kleben förmlich am Boden. Das Movement ist ebenfalls... nun ja, auch echt speziell. Aber dazu kommen wir jetzt." | 0:45-1:15 | | +| 4 | MOVEMENT | Movement des Spiels vorstellen | Movement-Showcase, Movement und Fähigkeiten am Anfang des Spiels zeigen | "Also, sprechen wir über Movement. Am Anfang fühlt sich euer Charakter an wie... naja, wie jemand der in Honig watet. Ihr habt die Basic-Bewegungen: Laufen, Rollen, Springen – aber es fühlt sich etwas schwerfällig an. Die Füße haben wirklich diesen 'klebe-am-Boden-Effekt', was dem Ganzen einen ungewollt komischen Touch gibt. Aber hey, sobald ihr ein paar Fähigkeiten freischaltet und euch an die Physik gewöhnt habt, wird's besser. Es ist anders, aber man gewöhnt sich dran." | 1:15-1:35 | | +| 5 | ENEMIES | Combat gegen normale Gegner im Detail bewerten | Kampfszenen gegen normale Gegner, Hitbox-Problem zeigen, verschiedene Waffen zeigen | "Der Combat gegen normale Gegner macht grundsätzlich Spaß – aber er hat leider seine Macken. Timing-basiertes Angreifen, Ausweichen, Ausdauer-Management – das Soulslike-Package ist vollstens vorhanden. ABER: Gerade bei größeren Waffen merkt man den Animation Lock heftig. Einmal geschwungen, seid ihr committed – und dann kanns tödlich sein. Und dann die Hitboxen... besonders bei kleineren Gegnern gehen eure Angriffe manchmal einfach daneben. Das ist frustrierend, wenn ihr wisst, dass der Hit eigentlich sitzen sollte. Aber positiv ist: Das Spiel fördert echt das Waffenexperimentieren! Verschiedene Gebiete, verschiedene Gegnertypen – da lohnt es sich, mehrere Waffen auszuprobieren. Die Waffenvielfalt ist cool, von Standard bis komplett abgedreht." | 1:35-2:00 | | +| 6 | BOSSE | Bossdesign und Schwierigkeit des Spiels bewerten | Boss-Kampf-Footage, Endboss-Kampf, Kampfszenen gegen verschiedene Bosse | "Und dann kommen wir zum Herzstück eines jeden Soulslikes, den Bossen... ein zweischneidiges Schwert in diesem Spiel. Das Bossdesign ist kreativ und jeder Boss sieht unique aus. ABER: Die Patterns sind manchmal echt simpel und langweilig. Nach ein, zwei Versuchen habt ihr die meisten Bosse durchschaut. Der Endboss ist im Vergleich zu den anderen Bossen extrem schwach. Wir haben sogar diesen Bug gefunden: [PAUSE] Wenn man direkt unter ihm steht, kann er euch nicht treffen. Da steht man dann und wundert sich... [PAUSE] Die Schwierigkeit ist also sehr inkonsistent – manche Bosse machen euch das Leben zur Hölle und andere macht ihr im Schlaf." | 2:00-2:30 | | +| 7 | ERKUNDEN | Bewertung des Erlebnisses beim Erkunden des Spiels in der Open World | Open World Exploration, Portal-Reisen, Items aufheben zeigen, Traveling durch Portale (alle Gebiete zeigen), verschiedene Items auffindbar über die Map | "Die Open World zu erkunden macht echt Laune! Ihr reist durch verschiedene Gebiete via Portale – und jedes Gebiet hat seinen eigenen Vibe. Von bunten Wäldern, über dunkle Höhlen bis zu trippy Landschaften ist alles dabei. Überall findet ihr Items, Geheimnisse und versteckte Wege. Es lohnt sich also definitiv, jeden Winkel zu erkunden. [PAUSE] Aber das Gefühl, wenn man einen versteckten Schatz findet? _Chef's kiss_ Unbezahlbar" | 2:25-2:45 | | +| 8 | NPCs | NPC-Interaktionen bewerten und dessen Qualität/Tiefe, Questlines, Humorvoller Touch | NPC-Gespräche, Szenen beim Reden mit NPCs | "Die NPCs in White Lavender sind sogar überraschend charmant! Die Dialoge haben einen humorvollen Touch und die Questlines sind echt interessant. Klar, es ist jetzt keine narrative Meisterleistung wie man es von AAA-Titeln kennt, aber die NPCs haben Persönlichkeit und sorgen für ein paar Lacher während des Gameplays. Insgesamt fühlen sich die Interaktionen lebendiger an als man von einem Indie-Titel vielleicht erwarten würde." | 2:45-3:05 | | +| 9 | MUSIK | Kurze Erklärung was für Musik genutzt wird (Genre) und ob es zum Charakter des Spiels passt | Hintergrund-Gameplay mit Musik, Hintergrundgameplay von White Lavender | "Der Soundtrack passt perfekt zum psychedelischen Vibe des Spiels. Es ist oft diese Mischung aus ambient und retro-synth Sounds, die das Ganze zusammenhält. Zusätzlich sind auch wirklich häufig Banger dabei, die man jetzt nicht so erwartet hat. Die Musik untermalt so die sowohl entspannenden Momente wie das Erkunden in der Welt als auch die sehr aufregenden Momente des Spiel wie die Bosskämpfe." | 3:05-3:20 | | +| 10 | BUGS | Aktuelle Probleme des Spiels und Fehler bei unserem Run | Bug-Footage, spezifische Bug-Beispiele zeigen, Endboss-Bug nochmal zeigen, spezifische Ausschnitte der Bugs | "Okay, jetzt müssen wir noch über den Elefanten im Raum sprechen: nämlich die Bugs im Spiel. Und oh junge, die Liste ist lang. Wir hatten: Enemy Snapping-Probleme – Gegner teleportieren sich plötzlich, Clipping-Issues und Gegner die in Wänden stecken, Framerate-Drops, und der absolute Kracher: Am Ende unseres Runs ließen sich Gegner GAR NICHT MEHR anvisieren. Also so komplett. Das Target-Lock-System hat einfach aufgegeben. Und wie gesagt, der Endboss kann euch nicht treffen wenn ihr unter ihm steht. Das ist jetzt weniger ein Bug und mehr ein 'haben wir nicht gebalanced'-Problem. Für ein Indie-Spiel ist das nicht ungewöhnlich, aber aktuell müsst ihr mit diesen technischen Problemen leider leben. Die Devs patchen hoffentlich fleißig, [PAUSE, dann leise] Gott bewahre... " | 3:20-3:45 | | +| 11 | FAZIT | Scoring System und Bewertung zusammenfassen übers Video | Zusammenfassung mit Best-of Footage, Hintergrund: Gameplay (unscharf), Vordergrund: Grafiken der vergebenen Scorings pro Videosektion, Outro | "White Lavender ist ein ambitioniertes Indie-Soulslike mit einer richtig coolen Idee. Der einzigartige Artstyle und die bunte Welt sind erfrischend anders. Das Waffenexperimentieren macht Spaß und die notwendige Varietät ist da. ABER: Die technischen Probleme und Design-Schwächen ziehen das Erlebnis deutlich runter. Animation Lock, miese Hitboxen, simple Bosspatterns, ein viel zu schwacher Endboss, und Bugs die das Spiel teilweise unspielbar machen – das muss man als Spieler auch erstmal schlucken, wenn man das zu spät nach einem Kauf merkt. Es fühlt sich an wie ein Early Access-Titel der noch ein paar Monate Entwicklung braucht. Das Potential ist da, aber aktuell ist es eher was für die hardcore Indie-Fans, die über technische Probleme hinwegsehen können. Wenn die Devs weiter dran arbeiten sollten, könnte das wirklich eine gute Abwechslung zu den eher bekannten Soulslike-Titeln wie eben Dark Souls oder Elden Ring werden. Aber im aktuellen Zustand? Eher schwierig. Habt ihr White Lavender schon gespielt und was sind eure Erfahrungen mit Soulslike Spielen? Lasst es und gerne wissen und bis zum nächsten Mal! | 3:45-4:10 | | + +--- + +## NOTIZEN FÜR DIE BEARBEITUNG: + +- **Pacing:** Schnelle Cuts, dynamische Übergänge +- **B-Roll:** Viel Gameplay-Material, Bug-Highlights besonders wichtig +- **Kritische Momente betonen:** + - Animation Lock bei großen Waffen zeigen + - Hitbox-Fails bei kleinen Gegnern + - Enemy Snapping deutlich machen + - Target-Lock Bug am Ende des Videos + - Endboss-Schwäche (unter ihm stehen) + - Simple/langweilige Bosspatterns +- **Musik:** Energetische Hintergrundmusik, White Lavender OST wo passend +- **Text-Overlays:** Bei Bugs und kritischen Punkten +- **Balance:** Positive Aspekte zeigen, aber ehrlich bei Problemen sein +- **Länge:** ~4:00-4:15 Minuten final \ No newline at end of file diff --git a/Grafik/Kalki/White Lavender Review/Prod TODOs.md b/Grafik/Kalki/White Lavender Review/Prod TODOs.md new file mode 100644 index 0000000..96d0352 --- /dev/null +++ b/Grafik/Kalki/White Lavender Review/Prod TODOs.md @@ -0,0 +1,8 @@ +# TODOs + +- [x] Texte aufnehmen +- [x] Soulslike Gameplay aufnehmen (Khazan, Elden Ring, Dark Souls) +- [ ] Doku schreiben + + + diff --git a/Grafik/Kalki/White Lavender Review/Projektinformationen.md b/Grafik/Kalki/White Lavender Review/Projektinformationen.md new file mode 100644 index 0000000..ac9f452 --- /dev/null +++ b/Grafik/Kalki/White Lavender Review/Projektinformationen.md @@ -0,0 +1,22 @@ +# Projekt + +#### Randbedingungen +Partner: Domi +Rahmen: +- Medienkompetenz +- Praktische Anwendungen +- Praktisches Projekt + +**Ideen**: +1. Generell: Koop in Website Games Koop in Websites wie [Bruno Simon Portfolio](https://bruno-simon.com/) + - 2D/3D Mario Website Game (1 Welt, paar Level) + - Rythmusgame +2. Animation zu: + - Calisthenicsübung + - Schmetterlingseffekt-Video +3. **Reviews zu** **(Greenscreen + Cam + Mic, "very serious")**: + - lustiges, dummes Spiel (z.B. White Lavender) + - schäbiges Spiel + - Tierlist zu irgendwas unnötigem + - irgendwas im echten Leben (Calisthenics, Papier, Holzfeeling, Filme) + diff --git a/Grafik/White Lavender Review/Drehbuch(Projekt).md b/Grafik/White Lavender Review/Drehbuch(Projekt).md new file mode 100644 index 0000000..f35b341 --- /dev/null +++ b/Grafik/White Lavender Review/Drehbuch(Projekt).md @@ -0,0 +1,42 @@ +--- +share_link: https://share.note.sx/7nwowzi5#4yyPDdY8sVCpafWbQGK11IQo17686i7Qy9lQN8lPBiY +share_updated: 2025-10-18T17:09:11+02:00 +--- +# Drehbuch +Review zum Spiel "White Lavender" + +### Anforderungen: +###### 1. Was soll vermittelt werden: +- Grundlagen und Struktur von Soulslikespielen in Action-RPGs +- Bewertung der Inhalte des Spiels "White Lavender" +- Bewertung der technischen Anforderungen des Spiels +- Fazit zum Spiel und Empfehlung +- Ziel: Comedyreview (Mischung aus ehrlicher Analyse und witzigen Elementen) +###### 2. Zielgruppe: +- Gamer, Streamer + +### Styleguide/Design: +- Einblendung der Reviewer im Stehen mit Mikrofon und Greenscreen im Video unten rechts oder andere Ecken je nach aktuellem Inhalt +- Spiel im Full Screen +- Gameplay im Hintergrund +- Einblendung von Informationen in Textform zu gegebener Zeit +### Technischer Entwurf: +- Videoformat: mkv, mov +- Editor: Davinci Resolve +- Versionsverwaltung: NAS-Speicher + +### Skript: + +| Szenen-Nr. | Titel | Inhalte | Bild | Audio/Kommentar | Dauer | +| ---------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------- | ----- | +| 1 | Einführung ins Review | Story vorstellen | (Einblendung) Anfangsszene des Spiels zur Story vom Main Character und der kranken Schwester | | | +| 2 | Erklärung des Genres: Soulslike | Theoretische Erklärung mit Inhalten was Soulslikes ausmacht | Zusammenschnitt mehrerer Ausschnitte aus Soulslikes wie Dark Souls, Elden Ring und weiteren Beispielen | | | +| 3 | Grafikstil/Designbewertung | Super einzigartiger retroartiger Grafikstil, sehr bunt, CRT-Filter, lustiges Charakterdesign, Rüstung sichtbar am Charakter, Überleitung zu Movement mit goofy Füßeklebenbleiben | Gameplay mit Inhalten von lustigen Skins und Waffen, Heranzoomen an bestimmte Inhalte wie das Füßeklebenbleiben | | | +| 4 | Spielabläufe: Movement | Movement des Spiels vorstellen | Movement und Fähigkeiten am Anfang des Spiels zeigen | | | +| 5 | Spielabläufe: Combat gegen Enemies | Combat gegen normale Gegner im Detail bewerten | Kampfszenen gegen verschiedene Gegner | | | +| 6 | Spielabläufe: Combat gegen Bosse | Bossdesign und Schwierigkeit des Spiels bewerten | Kampfszenen gegen verschieden Bosse | | | +| 7 | Spielabläufe: Erkunden | Bewertung des Erlebnisses beim Erkunden des Spiels in der Open World | Traveling durch Portale (mal alle Gebiete zeigen), verschiedene Items auffindbar über die Map | | | +| 8 | Spielabläufe: NPC Interaktion | NPC-Interaktionen bewerten und dessen Qualität/Tiefe, Questlines, Humorvoller Touch | Szenen beim Reden mit NPCs | | | +| 9 | Musik | Kurze Erklärung was für Musik genutzt wird (Genre) und ob es zum Spielcharakter passt | ? | | | +| 10 | Bugs | Aktuelle Probleme des Spiels und Fehler bei unserem Run | Spezifische Ausschnitte der Bugs, was genau falsch ist | | | +| 11 | Fazit | Scoring System und Bewertung zusammenfassen übers Video | Hintergrund: Gameplay (unscharf) Vordergrund: Grafiken der vergebenen Scorings pro Videosektion | | | \ No newline at end of file diff --git a/Grafik/White Lavender Review/Projektinformationen.md b/Grafik/White Lavender Review/Projektinformationen.md new file mode 100644 index 0000000..cc04e28 --- /dev/null +++ b/Grafik/White Lavender Review/Projektinformationen.md @@ -0,0 +1,22 @@ +# Projekt + +#### Randbedingungen +Partner: Domi +Rahmen: +- Medienkompetenz +- Praktische Anwendungen +- Praktisches Projekt + +**Ideen**: +1. Generell: Koop in Website Games Koop in Websites wie [Bruno Simon Portfolio](https://bruno-simon.com/) + - 2D/3D Mario Website Game (1 Welt, paar Level) + - Rythmusgame +2. Animation zu: + - Calisthenicsübung + - Schmetterlingseffekt-Video +3. **Reviews zu** **(Greenscreen + Cam + Mic, "very serious", anschließendes Interview mit Alex)**: + - lustiges, dummes Spiel (z.B. White Lavender) + - schäbiges Spiel + - Tierlist zu irgendwas unnötigem + - irgendwas im echten Leben (Calisthenics, Papier, Holzfeeling, Filme) + diff --git a/Grafik:Multimedia/.DS_Store b/Grafik:Multimedia/.DS_Store new file mode 100644 index 0000000..d826199 Binary files /dev/null and b/Grafik:Multimedia/.DS_Store differ diff --git a/Grafik:Multimedia/Graphical Data Processing 2024.pdf b/Grafik:Multimedia/Graphical Data Processing 2024.pdf new file mode 100644 index 0000000..5364a0c Binary files /dev/null and b/Grafik:Multimedia/Graphical Data Processing 2024.pdf differ diff --git a/Grafik:Multimedia/HA 1.odt b/Grafik:Multimedia/HA 1.odt new file mode 100644 index 0000000..88ec710 Binary files /dev/null and b/Grafik:Multimedia/HA 1.odt differ diff --git a/Grafik:Multimedia/HA 1.pdf b/Grafik:Multimedia/HA 1.pdf new file mode 100644 index 0000000..d79ee69 Binary files /dev/null and b/Grafik:Multimedia/HA 1.pdf differ diff --git a/Grafik:Multimedia/HA1_Lösungen.pdf b/Grafik:Multimedia/HA1_Lösungen.pdf new file mode 100644 index 0000000..7d4c410 Binary files /dev/null and b/Grafik:Multimedia/HA1_Lösungen.pdf differ diff --git a/IT-Management/03_IT-Systeme als Unternehmensressource.pdf b/IT-Management/03_IT-Systeme als Unternehmensressource.pdf new file mode 100644 index 0000000..5febf4a Binary files /dev/null and b/IT-Management/03_IT-Systeme als Unternehmensressource.pdf differ diff --git a/IT-Management/04_IT-Strategieentwicklung.pdf b/IT-Management/04_IT-Strategieentwicklung.pdf new file mode 100644 index 0000000..29585d6 Binary files /dev/null and b/IT-Management/04_IT-Strategieentwicklung.pdf differ diff --git a/IT-Management/05_IT-Controlling^MIT-Governance.pdf b/IT-Management/05_IT-Controlling^MIT-Governance.pdf new file mode 100644 index 0000000..ff3c4ee Binary files /dev/null and b/IT-Management/05_IT-Controlling^MIT-Governance.pdf differ diff --git a/IT-Management/Vortrag/Informationen Domi.md b/IT-Management/Vortrag/Informationen Domi.md new file mode 100644 index 0000000..63ef0a5 --- /dev/null +++ b/IT-Management/Vortrag/Informationen Domi.md @@ -0,0 +1,364 @@ +# IT Management bei der REWE Group + +**Vortrag – 30 Minuten | Themen: REWE, Penny, REWE Digital, Schneider Electric** + + + +--- +## 1. Unternehmensüberblick *(Theo)* + + + + ### Grunddaten REWE Group + +- 1927 in Köln gegründet, genossenschaftlich organisiert – Zentrale noch heute in Köln + +- Gesamtaußenumsatz 2024: **96 Mrd. Euro** (+4,6 % zum Vorjahr), EBITA: 2 Mrd. Euro, Jahresüberschuss: 1 Mrd. Euro + +- Rund **380.000 Mitarbeitende** in **21 europäischen Ländern** + +- Im deutschen Lebensmittelhandel **Nummer zwei** hinter Edeka + + + +### Vertriebslinien + +- Supermärkte: REWE, REWE CENTER, nahkauf, BILLA, BILLA PLUS, ADEG + +- Discounter: PENNY, IKI + +- Drogerien: BIPA; Baumärkte: toom; Convenience: REWE To Go + +- E-Commerce: REWE Liefer- und Abholservice, ZooRoyal, Weinfreunde + +- Touristik: DERTOUR Group mit über 2.000 Reisebüros + + + +### Umsatz nach Geschäftsfeldern (2024) + +- Handel Deutschland (REWE + PENNY): **41,6 Mrd. Euro** (+3,2 %) + +- Handel International: **20,1 Mrd. Euro** (+4,6 %) + +- DERTOUR Touristik: **8,7 Mrd. Euro** (+21,7 %) + + + +### PENNY + +- Discount-Vertriebslinie der REWE Group in Deutschland und international (Österreich, CEE) + +- Ende 2024: neue digitale Vorteilsprogramme gestartet – datenbasiert und KI-gestützt; übertrafen in den ersten Wochen alle Erwartungen + +- Eigenmarken bei PENNY in Deutschland: +3,0 % Umsatzwachstum + + + +### Investitionen & Ausblick + +- Bis 2028: Investitionen von **16 Mrd. Euro** geplant – Schwerpunkte: Digitalisierung, Standorte, Infrastruktur + +- 2024 in Deutschland: 46.000 neue Mitarbeitende eingestellt, davon 5.000 Auszubildende + +- REWE gewann allein 2024 pro Monat 7 Mio. Kunden mehr als im Vorjahr + + + +### Quellen + +- [REWE Group Pressemitteilung GJ 2024](https://www.rewe-group.com/de/presse-und-medien/newsroom/pressemitteilungen/positive-umsatzentwicklung-ergebnis-weiter-auf-hohem-niveau-rewe-group-bietet-verhaltener-konsumlaune-und-schlechter-wirtschaftsprognose-im-geschaeftsjahr-2024-erfolgreich-die-stirn/) + +- [Retail-News – Umsatz und Gewinn 2024](https://retail-news.de/rewe-group-umsatz-gewinn-2024/) + + + +--- + + + +## 2. IT-Landschaft *(Domenik)* + + + +### REWE digital – Wer sind sie? + +- Größte IT-Einheit der REWE Group: über **2.500 Mitarbeitende**, **11 Standorte**, **5 Länder** + +- Standorte: Köln, Frankfurt, Kiel, Ilmenau, Sofia, Varna, Zielona Góra, Graz, Plovdiv, Málaga + +- Historisch: Zwei IT-Einheiten – **REWE Systems** (stationärer Handel) + **REWE digital** (2014 gegründet für Online/Omnichannel) → heute zu einer Einheit verschmolzen + + + +### Domänen-Modell + +- Organisation nach Domänen Modell (Business Capability Model) für maximale Transparenz, Effizienz und Synergien + +- Unternehmensstruktur nicht in klassischen Abteilungen sondern nach fachlichen Themenbereichen mit eigenen Teams (Entwicklung & Support -> Kundendaten & Einkauf) + +- Bereiche: + +- Stationary Retail: Prozesse bei Mitarbeitern und Kunden in den Märkten (Kassen, Inventuren, Retouren, digitale Touchpints) + +- Online & Mobile: Online Domains und Apps + +- Customer Relations & Sales: Kommunikation mit Kunden (digital und stationär) + +- Logistics, SCM and Production: IT von Supply Chain Management und Logistik + +- Procurement Solutions: Einkauf, Management (Online Pay, etc) + +- Corporate Functions: Finanz- und Rechnungswesen Steuerung + +- Foundation Layer: Aufsetzen und Verwalten von Big Data, Cloud, Office IT, etc + +- Übergeordnetes Ressort **„CAT"** (Customer, Analytics & Technology) verbindet REWE digital mit den Business-Bereichen der REWE Group + + + +### Architektur + +- Google Cloud Platform + +- Offiziell nicht direkt Preisgegeben (In Jobangeboten Gesucht) + +- Microservices-Architekturen + +- agile Teams mit Product Ownern + +- REWE digital betreibt eine interne **Application Platform** für Cloud-Native-Software + +- Einheitliche Plattform mit eigenen App Store + +- ermöglicht Entwicklern Umgebung selbst einzurichten + +- Bietet Automatisierung wie Deployments, Monitoring und Sicherheitsupdates direkt an + + + +### Projekt NEO + +- Transformationsprojekt **NEO**: REWE, Penny und Billa sollen **homogene IT-Systeme** bekommen + +- Laufzeit laut Branchenkennern: **5–10 Jahre** + + + +### Schneider Electric + +- digitaliesierten das Rechenzentrum der REWE International AG mit der **EcoStruxure-Architektur** von Schneider Electric + +- Eingesetzte Lösungen: + +- **EcoStruxure IT Expert** → Echtzeit-Monitoring & Alarming + +- **EcoStruxure Power Monitoring Expert** → Energiemanagement & Stromqualität + +- **EcoStruxure Building Operation** → Gebäudemanagementsystem + +- Ergebnisse: sinkende Energiekosten, verbesserte Stromqualität, kosteneffizienter Gebäudebetrieb – Infrastruktur intern auf „neues digitales Level" gehoben + + + +### Quellen + +- [REWE digital – Organisation](https://www.rewe-digital.com/de/ueber-uns/organisation) + +- [Lebensmittelzeitung – Projekt NEO (Apr. 2024)](https://www.lebensmittelzeitung.net/tech-logistik/nachrichten/grossprojekt-rewe-vereinheitlicht-die-it-landschaft-177030) + +- [Schneider Electric – Case Study REWE International AG](https://www.se.com/de/de/work/campaign/case-study/local/rewe.jsp) + + + +--- + + + +## 3. IT-Governance & Steuerung + + + +### Führungsstruktur & Gremien + +- Der Chief Digital and Technology Officere (CDTO) ist **Mitglied des REWE Group Vorstands** + +- **IT-Steeringboard** unter Leitung des CDTO: Teilnehmer sind IT-Leiter aller Konzerneinheiten – konzernweite Steuerung der IT-Strategie + +- Aktuelle Geschäftsführung REWE digital (seit Jan. 2025): Stefan Matzelle, Dr. André Marburger, Guido Hoepfner (COO), Dr. Robert Zores (CDIO), Martin Fluch (CIO REWE International AG) + + + +### Verantwortlichkeiten im Detail + +- **Guido Hoepfner** (COO): Domänen Customer Relations & Sales, Procurement Solutions, Corporate Functions + Bereiche **IT-Governance**, Transformation Solutions, Projects + +- **Robert Zores** (CDIO): Engineering, IT Security, Cloud Center of Excellence, Online & Mobile Engineering, Research & Innovation + +- **Martin Fluch** – Doppelrolle seit Jan. 2025: CIO REWE International AG + Geschäftsführer REWE digital → Ziel: stärkere länderübergreifende Zusammenarbeit + + + +### Governance-Modell & Prinzipien + +- Governance als Steuerungsfunktion für vier Bereiche: **Strategie, Innovation, Wandel und Daten** – kontextbasiert und ergebnisorientiert + +- Strategische IT-Schwerpunkte: + +- Transformation zur Produkt-Organisation + +- Crossfunktionale Zusammenarbeit mit dem Business + +- Omnichannel Retailing + +- Hybrid Cloud + +- Big Data Analytics & Data Governance + +- Informationssicherheit + +- Konzept der **„Analytics Factory"**: strukturierte Umgebung, in der Use Cases effizient entwickelt und skaliert werden – IT, Fachbereiche und Analytics arbeiten zusammen + + + +### Datenschutz & KI-Governance + +- KI-Governance erfordert crossfunktionale Zusammenarbeit: Fachabteilungen, Analytics, IT, Juristen, HR, Unternehmenskommunikation + +- Rechtliche Rahmenbedingungen: **EU AI Act** und **DSGVO** als zentrale Leitplanken + +- REWE veröffentlichte als eines der ersten Handelsunternehmen ein **„AI Manifesto"** mit Leitlinien für ethischen und verantwortungsvollen KI-Einsatz + +- Konzernweites **Compliance-Management-System (CMS)** für Datenschutz; Datenschutzbeauftragte berichten direkt an Geschäftsführung und Vorstand + + + +### Agile Steuerung & Methoden + +- Crossfunktionale, fachübergreifende Teams als Standard – IT- und Business-Wissen in denselben Teams vereint + +- Agile Methoden: Scrum, Kanban, Product Owner-Modell, kontinuierliche Qualitätssicherung durch Code-Reviews + + + +### Quellen + +- [CIO.de – IT-Fakten & IT-Strategie REWE](https://www.cio.de/article/3701244/rewe-group-it-fakten-und-it-strategie.html) + +- [CIO.de – Martin Fluch Doppelrolle](https://www.cio.de/article/3805102/cio-martin-fluch-leitet-nun-auch-it-tochter.html) + +- [REWE digital – Auftrag & Governance](https://www.rewe-digital.com/de/ueber-uns/auftrag) + +- [REWE Group – Digitale Verantwortung](https://www.rewe-group.com/de/unternehmen/unternehmenskultur/digitale-verantwortung/) + + + +--- + + + +## 4. IT-Strategie & Digitalisierung *(Schwerpunkt)* + + + +### Strategische Leitlinie + +- CDTO Christoph Eltze (TRANSFORM 2025): Digitalisierung ist **keine optionale Aufgabe für gute Zeiten**, sondern unternehmerische Notwendigkeit – auch in Krisen muss die digitale Agenda weiterverfolgt werden + +- REWE versteht sich zunehmend als **Technologie- und Serviceanbieter**, nicht nur als Händler – Kooperationen mit Startups und Ausgründungen (z.B. paymenttools) + +- Selbsteinschätzung: hat stärker auf Digitalisierung und KI gesetzt als jeder andere Wettbewerber im deutschen Lebensmitteleinzelhandel + + + +### Cloud-Transformation (2025) – größtes laufendes IT-Projekt + +- Seit Anfang 2025: schrittweise Migration von **73 SAP-Systemen** in die **Google Cloud** via **RISE with SAP** – Langfristvertrag mit SAP + +- Erster Schritt: Finanzen, Buchhaltung, Personalwesen; danach schrittweise weitere Bereiche + +- Ziele: höhere Skalierbarkeit, Flexibilität, bessere KI-Nutzung; REWE digital erwartet **signifikant sinkende Betriebskosten** + +- REWE digital hat bereits **über 25 Clean-Core-konforme Erweiterungen** für SAP S/4HANA entwickelt (via SAP BTP + ABAP) – SAP-Kern bleibt möglichst unverändert + + + +### Programm ReBe 4.0 + +- Großprogramm zur Standardisierung und Harmonisierung der **Finanzprozesse auf SAP S/4HANA** + +- Treiber: + +- Wachsende Abweichungen vom SAP-Standard + +- Herausforderungen durch Eigenentwicklungen + +- Bevorstehendes Wartungsende von SAP ECC + +- Ziel: einheitliche konzernweite Plattform für alle strategischen Einheiten + + + +### KI-Anwendungen im Einsatz + +- REWE nutzt seit 2002 systematisch Daten; ab 2021 KI fest im Konzern verankert – anonymisierte Verkaufs- und Verhaltensdaten als Basis + +- **Projekt HOLMES**: KI-Modell erkennt fehlende Artikel in Einkaufsmustern und schlägt Regaloptimierungen vor + +- **„Assistiertes Backen"**: KI-gestützte Backöfen mit Bilderkennung – aktuell (Mai 2025) **880 Märkte** mit **2.200 Backkammern** vernetzt; Ziel bis 2028: 90 % aller REWE-Backöfen vernetzt + +- **„Supermark"**: neuer KI-Agent (Prototyp 2025), der Marktmitarbeitende auf der Fläche unterstützen soll – entwickelt von REWE digital + +- KI-Funktionen in SAP BTP: unterstützen Entwickler bei Workflow-Automatisierung und KI-Modell-Integration in Apps + + + +### Digitale Vorteilsprogramme & Kundendaten + +- Start: 29. Dezember 2024 – neue **datenbasierte Loyalty-Programme** für REWE und PENNY + +- Ziel: personalisierte Angebote basierend auf individuellem Kundenverhalten + +- Anspruch: flexibler und effizienter steuerbar als jeder andere Wettbewerber im deutschen LEH + + + +### Omnichannel-Strategie + +- **REWE Lieferservice**: größter deutscher Lebensmittel-Lieferservice – 16 Food Fulfillment Center, 3.300+ Mitarbeitende, 90+ Städte + +- **REWE Abholservice** (Click & Collect): in jedem zweiten REWE-Markt (~2.000 Märkte) – Tendenz steigend + +- Weitere Innovationen: paymenttools, fulfillmenttools, **Pick & Go** (kassenloses Einkaufen via Computer Vision) + + + +### Ethik & verantwortungsvoller KI-Einsatz + +- REWE veröffentlichte als eines der ersten Handelsunternehmen ein **„AI Manifesto"** mit konkreten Handlungsempfehlungen für Entwickler + +- Grundprinzipien: + +- Kein blindes Vertrauen in KI-Ergebnisse – immer prüfen und in Kontext setzen + +- Bias, Erklärbarkeit und Zuverlässigkeit als technische und ethische Grenzen + +- Genossenschaftliche Werte fließen in die KI-Entwicklung ein + + + +### Quellen + +- [SAP News – RISE with SAP bei REWE (Apr. 2025)](https://news.sap.com/germany/2025/04/rewe-group-treibt-digitale-transformation-mit-rise-with-sap-voran/) + +- [CIO.de – REWE standardisiert IT mit SAP (Mai 2025)](https://www.cio.de/article/3974606/rewe-group-standardisiert-it-umgebung-mit-sap.html) + +- [TRANSFORM – Digitale Transformation REWE](https://transform.show/news/digitale-transformation-bei-der-rewe-group) + +- [REWE Group – Digitale Verantwortung & KI](https://www.rewe-group.com/de/unternehmen/unternehmenskultur/digitale-verantwortung/) + +- [Lebensmittelpraxis – Assistiertes Backen (Mai 2025)](https://lebensmittelpraxis.de/strategie-hersteller/44323-assistiertes-backen-bei-rewe-rechnen-sich-oefen-mit-kuenstlicher-intelligenz.html) + +- [Lebensmittelzeitung – KI-Agent Supermark (Okt. 2025)](https://www.lebensmittelzeitung.net/tech-logistik/nachrichten/ki-agent-rewe-baut-den-supermark-187386) + +- [REWE Group – Neue Vorteilsprogramme (Dez. 2024)](https://www.rewe-group.com/de/presse-und-medien/newsroom/pressemitteilungen/neue-vorteilsprogramme-sind-teil-der-digitalisierungsstrategie-der-rewe-group/) \ No newline at end of file diff --git a/IT-Management/Vortrag/Informationsrecherche.md b/IT-Management/Vortrag/Informationsrecherche.md new file mode 100644 index 0000000..1dfc8d5 --- /dev/null +++ b/IT-Management/Vortrag/Informationsrecherche.md @@ -0,0 +1,181 @@ +# Strategisches IT-Management und technologische Transformation der REWE Group: Eine Analyse der IT-Landschaft, Governance-Strukturen und Nachhaltigkeitsinitiativen + +Der europäische Lebensmitteleinzelhandel befindet sich in einer Phase tiefgreifender technologischer Disruption, die durch die Konvergenz von stationärem Handel, digitalem E-Commerce und datengesteuerter Prozessoptimierung gekennzeichnet ist. In diesem Kontext hat die REWE Group, eine genossenschaftlich organisierte Unternehmensgruppe mit einem Außenumsatz von rund 96,1 Milliarden Euro im Geschäftsjahr 2024, eine Vorreiterrolle eingenommen.[1] Die Transformation der Gruppe von einem traditionellen Händler zu einem technologiezentrierten Ökosystem wird primär durch die REWE digital GmbH gesteuert, die als zentrale IT-Einheit fungiert und die Digitalisierung für über 380.000 Mitarbeitende und Millionen wöchentlicher Kunden vorantreibt.[2, 3] Die strategische Ausrichtung umfasst dabei nicht nur die Modernisierung der IT-Landschaft durch Cloud-Migrationen und SAP-Transformationen, sondern auch eine hochspezialisierte Governance-Struktur und innovative Partnerschaften in den Bereichen Energiemanagement und Nachhaltigkeit, wie die Zusammenarbeit mit Schneider Electric verdeutlicht.[4, 5, 6] + +## Die Evolution der IT-Organisationsstruktur: Von REWE Systems zu REWE digital + +Die organisatorische Aufstellung der IT innerhalb der REWE Group hat in den letzten Jahren eine fundamentale Konsolidierung erfahren. Ursprünglich waren die technologischen Verantwortlichkeiten zwischen REWE Systems, die den Fokus auf den stationären Handel und die klassische Warenwirtschaft legte, und REWE digital, die 2014 zur Erschließung des Online-Geschäfts gegründet wurde, aufgeteilt.[4] Im Zuge einer gestrafften Digitalisierungsstrategie wurden diese beiden Einheiten im Jahr 2022 unter dem Dach der REWE digital GmbH verschmolzen.[7, 8] Diese Fusion markiert den Übergang zu einer integrierten Handels-IT, die keine künstliche Trennung mehr zwischen physischen Märkten und digitalen Kanälen vornimmt, sondern eine ganzheitliche Omnichannel-Erfahrung ermöglicht.[4] + +## Das CAT-Modell und die Führungsstruktur + +Die Steuerung des gesamten Bereichs „Digital und Technologie“ erfolgt über das sogenannte CAT-Modell, welches die Kompetenzfelder Customer, Analytics und Technology bündelt.[2] Während die Funktionen für Kundenstrategie und Analytics direkt in der REWE Group verankert sind, übernimmt REWE digital die technologische Umsetzung sowie die IT-Strategie und Governance.[2] Geleitet wird dieser Bereich durch das Dev Board, ein Gremium, das die strategische und operative Führung sicherstellt. + +|Rolle im Dev Board|Funktionsträger|Verantwortungsbereich| +|---|---|---| +|CDTO (Chief Digital & Technology Officer)|Christoph Eltze|Gesamtleitung Digital, Customer & Analytics; Konzernvorstand [2]| +|CCO (Chief Commercial Officer)|Stefan Matzelle|IT-Domänen Online, Mobile, Retail, Logistics, Procurement und UX [2]| +|CTO (Chief Technology Officer)|Dr. André Marburger|Engineering 2, Foundation Layer, Architektur und REWE digital Austria [2]| +|CDIO (Chief Digital Innovation Officer)|Dr. Robert Zores|Engineering 1, IT-Security, Cloud Center of Excellence und Innovation [2]| +|COO (Chief Operating Officer)|Guido Hoepfner|IT-Governance, Transformation Solutions und Corporate Functions [2]| +|CIO REWE International AG|Martin Fluch|IT-Service Management und Koordination REWE International [2]| + +Diese personelle und funktionale Verzahnung stellt sicher, dass technologische Entscheidungen unmittelbar mit den kommerziellen Zielen der verschiedenen Vertriebslinien wie REWE, PENNY, Billa und toom abgestimmt werden.[3] Mit über 2.500 Spezialisten an 11 internationalen Standorten, darunter Köln, Berlin, Sofia, Málaga und Graz, verfügt die Einheit über die notwendige Skalierbarkeit, um komplexe Softwarelösungen inhouse zu entwickeln.[2, 4, 9] + +## Das Domänen-Modell als operatives Framework + +Um die Komplexität der Systemlandschaft beherrschbar zu machen, nutzt REWE digital ein Domänen-Modell, das als fachliches Ordnungssystem fungiert.[2] Dieses Modell strukturiert Anwendungen und Produkte entlang der gesamten Wertschöpfungskette des Handels. Jede Domäne agiert dabei als spezialisierte Einheit mit hoher Autonomie, was die Entwicklungsgeschwindigkeit erhöht und die Abhängigkeiten zwischen den Systemen minimiert.[2, 10] + +|IT-Domäne|Kernaufgaben und Produkte|Technologischer Impact| +|---|---|---| +|Stationary Retail|Warenwirtschaft in den Märkten, Kassensysteme, Pick & Go [2]|Digitalisierung des Vor-Ort-Einkaufs für 6.000 Märkte [7]| +|Online & Mobile|REWE Lieferservice, Abholservice, Apps für REWE und PENNY [2]|Skalierung des E-Commerce-Umsatzes und Kundeninteraktion [7]| +|Logistics & SCM|Warenflusssteuerung, Intralogistik, Transport-IT [2]|Sicherstellung der Versorgung für 80 Millionen Menschen [2]| +|Procurement Solutions|Software für Einkauf, Category Management und Qualitätssicherung [2]|Effiziente Preisverhandlungen und Artikelstammdatenmanagement [2]| +|Customer Relations|Personalisierung, Bonusprogramme, Marketing-Steuerung [2]|Erhöhung der Kundenloyalität durch datengetriebene Angebote [11]| +|Foundation Layer|Cloud-Infrastruktur, Big Data, Security, agile Methoden [2]|Bereitstellung der technologischen Basis für alle Produkte [2]| + +## IT-Governance und strategische Steuerung: Agilität und Partnerschaft + +Die IT-Governance der REWE Group hat sich unter der Leitung von Stefan Matzelle von einem rein kontrollorientierten Ansatz zu einem partnerschaftlichen Steuerungsmodell entwickelt.[12] Das Ziel ist es, die IT als „Equal Partner“ auf Augenhöhe mit den Fachabteilungen zu positionieren.[12, 13] + +## Agile Transformation und die Symphony-Initiative + +Ein zentraler Bestandteil dieser Governance ist die konsequente Ausrichtung auf agile Arbeitsweisen. Agilität wird bei REWE digital nicht nur als Prozess, sondern als kulturelle Grundhaltung verstanden.[2] Die Teams sind crossfunktional aufgestellt und nutzen Methoden wie Scrum, Kanban und LeSS (Large Scale Scrum), um komplexe Projekte zu koordinieren.[2] Unterstützt werden sie dabei von Agile Team Coaches, die sicherstellen, dass die Methoden optimal auf das jeweilige Produkt zugeschnitten sind.[2] + +Im Rahmen des „Symphony“-Projekts wurden auch die regionalen IT-Strukturen in Deutschland an diese agilen Prinzipien angepasst.[12] Die regionalen IT-Mitarbeitenden fungieren als Schnittstelle zu den Märkten vor Ort und gewährleisten, dass neue Anwendungen reibungslos implementiert werden.[12] Diese lokale Verankerung ist entscheidend, um die technologische Akzeptanz in den rund 6.000 Märkten der Marken REWE und PENNY sicherzustellen.[7, 12] + +## Ethische Leitplanken: Das AI Manifesto + +Angesichts der wachsenden Bedeutung künstlicher Intelligenz (KI) hat die REWE Group bereits frühzeitig ein „AI Manifesto“ veröffentlicht.[14] Dieses Dokument dient als ethischer Kompass für die Entwicklung und Nutzung von KI-Anwendungen innerhalb des Konzerns.[14] Die Governance legt hierbei Wert auf Transparenz, Fairness und die menschliche Letztentscheidung. KI wird primär in zwei Bereichen eingesetzt: als analytische KI zur Optimierung von Lieferketten und Sortimenten sowie als generative KI zur Unterstützung von Mitarbeitenden in der Verwaltung und im Kundenservice.[14] Die Einbeziehung von Juristen, Corporate Governance und Human Resources in die KI-Projekte stellt sicher, dass ethische und regulatorische Standards gruppenweit eingehalten werden.[14] + +## Die IT-Landschaft: Modernisierung durch Cloud-Native-Architekturen + +Die technologische Infrastruktur der REWE Group durchläuft derzeit eine der massivsten Modernisierungsphasen ihrer Geschichte. Im Zentrum steht dabei die Migration der SAP-Kernsysteme auf die Google Cloud Platform (GCP) sowie die Ablösung von Legacy-Systemen durch Cloud-native Architekturen.[4, 15] + +## SAP S/4HANA Migration und Google Cloud Partnerschaft + +Seit Anfang 2025 überführt REWE digital schrittweise 73 SAP-Systeme in die Google Cloud.[4, 15] Diese Migration ist auf mehrere Jahre angelegt und nutzt das „RISE with SAP“-Modell, um bestehende On-Premises-Infrastrukturen in eine skalierbare Cloud-ERP-Umgebung zu transformieren.[4, 16] Die strategischen Ziele dieser Transformation sind vielfältig: + +1. **Skalierbarkeit und Flexibilität:** Die Cloud-Infrastruktur ermöglicht es, Ressourcen dynamisch an Geschäftsveränderungen anzupassen, was insbesondere für saisonale Spitzen im Handel kritisch ist.[4] +2. **Kosteneffizienz:** Durch die Standardisierung der technischen Betriebsmodelle und die Reduktion von Hardware-Investitionen erwartet REWE digital Einsparungen im zweistelligen Millionenbereich bei den Total Cost of Ownership (TCO).[4, 15] +3. **Innovationsbeschleunigung:** Die Cloud-Plattform bietet direkten Zugriff auf fortschrittliche Services in den Bereichen Analytics und KI, die nativ in die SAP-Prozesse integriert werden können.[4] + +|Kennzahl der SAP-Migration|Wert/Status| +|---|---| +|Anzahl der Systeme|73 neue SAP-Systeme [4, 15]| +|Cloud-Partner|Google Cloud Platform (GCP) [4]| +|Framework|RISE with SAP [4, 16]| +|Fokusbereiche|Finanzen, Rechnungswesen, HR [4]| +|Erwartete Ersparnis|Zweistelliger Millionenbetrag (Betriebskosten) [4, 15]| + +## Enterprise Automation und Dekommissionierung von Legacy-Systemen + +Parallel zur Cloud-Migration treibt REWE digital die Automatisierung ihrer IT-Workloads voran. Unter Einsatz der Control-M Plattform von BMC Software werden Anwendungsworkflows über Mainframes und offene Systeme hinweg orchestriert.[4] Ein signifikanter Teil dieser Bemühungen gilt der Ablösung veralteter Cobol-Applikationen durch moderne Java-basierte Microservices.[4] Der Konvertierungsprozess wurde zu 99 % automatisiert, was die Fehlerquote minimierte und die Abhängigkeit von teuren Mainframe-Ressourcen drastisch reduzierte.[4] Zukünftig soll Control-M auch zur Steuerung von Workflows in hybriden Cloud-Umgebungen und zur Integration von Tools wie Apache Airflow genutzt werden.[4] + +## IT-Strategie und Digitalisierung: Fokus auf Kundenbindung und Omnichannel + +Die Digitalisierungsstrategie der REWE Group zielt darauf ab, die physische und digitale Einkaufswelt nahtlos miteinander zu verknüpfen. Ein wesentlicher Heiler hierfür ist die Gewinnung der Datenhoheit über die Kundenbeziehung. + +## Eigenständige Vorteilsprogramme: REWE und PENNY Bonus + +Ein strategischer Meilenstein war die Beendigung der Zusammenarbeit mit Payback und der Start eigener Bonusprogramme für REWE und PENNY zum Jahreswechsel 2024/2025.[7, 17] Diese Entscheidung ermöglicht es dem Konzern, Kundendaten direkt zu analysieren und hochgradig personalisierte Angebote zu erstellen, die über die REWE- und PENNY-Apps ausgespielt werden.[11, 17] + +- **REWE Bonus:** Fokus auf das Sammeln von Guthaben, das direkt beim nächsten Einkauf verrechnet werden kann.[11] +- **PENNY Bonus:** Fokus auf Sofortvorteile und Direktabzüge an der Kasse, passend zum preisorientierten Discounter-Modell.[11, 17] + +Die Apps dienen dabei als zentraler Hub für Services wie den digitalen Kassenbon, personalisierte Coupons, Einkaufslisten und Rezeptideen.[17] Diese Integration fördert nicht nur die Kundenbindung, sondern trägt durch den Verzicht auf papierbasierte Coupons und Handzettel auch zur Nachhaltigkeitsstrategie bei.[17] + +## Innovative Marktkonzepte: Pick & Go und Computer Vision + +Unter Einsatz modernster Computer Vision Technologie testet REWE innovative Marktformate wie „Pick & Go“. Kunden können hierbei Artikel einfach aus dem Regal nehmen und den Markt verlassen, ohne einen klassischen Kassiervorgang zu durchlaufen.[2, 14] Die technologische Basis hierfür wurde in enger Zusammenarbeit mit Partnern wie Trigo Vision entwickelt.[2] Diese Projekte demonstrieren die Fähigkeit der REWE digital, komplexe IoT- und KI-Szenarien in den harten operativen Alltag des Lebensmitteleinzelhandels zu integrieren.[14] + +## Fulfillment-Lösungen als Geschäftsmodell: fulfillmenttools + +Ein Beispiel für die erfolgreiche Ausgründung interner technologischer Entwicklungen ist die OC Fulfillment GmbH mit ihrer Plattform „fulfillmenttools“.[7] Ursprünglich für den Eigenbedarf entwickelt, um den REWE Lieferservice und Abholservice effizient zu steuern, wird die Software nun als White-Label-Lösung an andere Händler vermarktet.[18] Die Plattform basiert auf einer flexiblen Google Cloud Architektur (Firebase) und ermöglicht es Händlern, ihre stationären Bestände für Online-Bestellungen nutzbar zu machen, was die Transformation zum Omnichannel-Händler beschleunigt.[18] + +## Nachhaltigkeit und Energiemanagement: Die Kooperation mit Schneider Electric + +Die REWE Group hat sich das ambitionierte Ziel gesetzt, bis 2040 klimaneutral zu werden und bis 2050 Netto-Null-Emissionen entlang der gesamten Wertschöpfungskette zu erreichen.[3, 19] In der Erreichung dieser Ziele spielt das technologische Energiemanagement eine zentrale Rolle, wobei die Expertise von Schneider Electric als strategischer Partner genutzt wird.[5, 6] + +## Implementierung der EcoStruxure-Plattform + +In den internationalen Märkten der REWE Group (insbesondere Billa, Penny Italien und CEE) wurde ein umfassendes Energiemanagementsystem auf Basis der Schneider Electric EcoStruxure-Architektur implementiert.[5, 6, 20] Dieses System fungiert als digitales Rückgrat für das Monitoring und die Steuerung der technischen Gebäudeausrüstung. + +Die technische Einbindung umfasst: + +- **IoT-Sensorik:** Einsatz von LoRaWAN-Sensoren zur drahtlosen Erfassung von Energieverbrauchsdaten (Strom, Gas, Wärme) in den Filialen.[6] +- **Edge Control:** Lokale Steuerungen optimieren den Betrieb von HVAC-Systemen (Heizung, Lüftung, Klima) und Kühlmöbeln in Echtzeit.[20, 21] +- **Analytics & Dashboards:** Ein zentrales Energiemanagement-Team kann über Dashboards die Performance von über 600 Standorten vergleichen und Anomalien sofort identifizieren.[5, 6] + +Durch diese Maßnahmen konnte die Energieeffizienz signifikant gesteigert werden. Vergleichbare Projekte von Schneider Electric im Handel (z. B. Carrefour) zeigen Einsparungen bei den Stromkosten von rund 7 %.[20, 22] Neben der reinen Kostenersparnis ermöglicht das System die Einhaltung der ISO 50001 Zertifizierung, was für das ESG-Reporting des Konzerns von hoher Relevanz ist.[5, 21] + +## EHA: Der zentrale Energiedienstleister des Konzerns + +Die Koordination aller Energieprojekte erfolgt über die Konzerntochter EHA Energie-Handels-Gesellschaft.[3] Die EHA fungiert als 360°-Dienstleister, der nicht nur den Einkauf von 100 % Grünstrom für die Märkte verantwortet, sondern auch den Ausbau eigener Erzeugungskapazitäten vorantreibt.[3, 23] + +|Projekt|Details|Impact| +|---|---|---| +|CPPA Borkum Riffgrund 3|10-jähriger Vertrag über 100 MW Leistung [24]|Deckung von 15 % des deutschen Strombedarfs (1.500 Märkte) [3, 24]| +|1.000 Dächer Programm|Ausbau von Photovoltaik auf Märkten und Lagern [24, 25]|Dezentrale Erzeugung für den Eigenverbrauch und Netzstabilität [19, 25]| +|Green Building|Nachhaltige Bauweise mit integrierter Gebäudeautomation [19]|Ökologisch und ökonomisch optimierte Handelsimmobilien [19]| +|E-Mobilität|Aufbau von Ladeinfrastruktur an den Märkten [19]|Investition von 5 Mio. Euro in die Elektrifizierung der Logistik [19]| + +In Zusammenarbeit mit Partnern wie Schneider Electric wird sichergestellt, dass die dezentralen PV-Anlagen und die wachsende Zahl an E-Ladesäulen intelligent in das Lastmanagement der Gebäude integriert werden, um teure Lastspitzen zu vermeiden und den Eigenverbrauchsanteil zu maximieren.[19, 22, 25] + +## Logistik-Innovationen und Start-up-Beteiligungen + +Ein wesentlicher Teil der IT-Strategie besteht darin, durch gezielte Beteiligungen und Pilotprojekte technologische Disruptionen frühzeitig zu evaluieren. REWE digital fungiert hierbei als Inkubator und technischer Partner.[2] + +## Automatisierte Lieferkonzepte und Quick-Commerce + +Die REWE Group investiert massiv in Lösungen für die „letzte Meile“ und die Optimierung der Intralogistik. + +- **Autonome Lieferbots:** In Kooperation mit Cartken und LOXO testet REWE den Einsatz autonomer Fahrzeuge für die Zustellung von Lebensmitteln.[2, 26] +- **Drohnen-Lieferung:** Das Projekt „LieferMichel“ nutzt Wingcopter-Technologie, um schwer erreichbare Gebiete im ländlichen Raum zu versorgen.[2] +- **Strategische Partnerschaft mit Flink:** REWE sichert nicht nur die exklusive Warenversorgung des Quick-Commerce-Anbieters, sondern bringt auch logistische und technologische Expertise ein.[2] + +## Intralogistik und Smart Maintenance + +In den Logistikzentren der REWE Group, wie dem Standort Voerde, kommen automatisierte Warenflusssteuerungen zum Einsatz, die eine effiziente Versorgung der Märkte sicherstellen.[2, 25] Durch den Einsatz von KI-gestützten Wartungssystemen (Smart Maintenance) können Ausfälle in den hochautomatisierten Lagern antizipiert und verhindert werden.[5] Dies ist besonders kritisch für die Frische-Logistik, wo jede Verzögerung direkte Auswirkungen auf die Warenqualität hat. + +## Fazit und Ausblick: Der Weg zum datengetriebenen Handelsökosystem + +Die Analyse des IT-Managements der REWE Group verdeutlicht eine konsequente Transformation weg von monolithischen Legacy-Strukturen hin zu einer agilen, Cloud-nativen und datenzentrierten Organisation. Die Verschmelzung von REWE Systems und REWE digital hat die notwendige Schlagkraft erzeugt, um die komplexen Herausforderungen der digitalen Transformation im Lebensmitteleinzelhandel zu bewältigen.[4, 7] + +Kernpfeiler dieses Erfolgs sind: + +1. **Technologische Modernisierung:** Die Partnerschaften mit SAP und Google Cloud schaffen die notwendige Skalierbarkeit und Innovationsfähigkeit für die kommenden Jahrzehnte.[4, 16] +2. **Datenhoheit und Kundenzentrierung:** Durch eigene Loyalitätsprogramme und hochintegrierte Apps gewinnt die REWE Group die Kontrolle über die Kundenbeziehung zurück und setzt Maßstäbe in der Personalisierung.[11, 17] +3. **Nachhaltigkeit durch Technologie:** Die strategische Nutzung von Gebäudeautomation und IoT-Systemen, unterstützt durch Partner wie Schneider Electric, ist der Schlüssel zur Erreichung der ehrgeizigen Klimaziele.[5, 6, 19] +4. **Agile Governance:** Ein flexibles Domänen-Modell und eine moderne Unternehmenskultur ermöglichen es, Innovationen wie Pick & Go oder autonome Lieferkonzepte schnell zur Marktreife zu bringen.[2, 12] + +In der Zukunft wird die Fähigkeit, riesige Datenmengen durch KI effizient zu nutzen und gleichzeitig ethische Standards zu wahren, über die Wettbewerbsfähigkeit entscheiden. Die REWE Group hat hierfür mit ihrem CAT-Modell und dem AI Manifesto ein robustes Fundament gelegt.[2, 14] Die kontinuierliche Investition in IT-Talente und die Offenheit für technologische Kooperationen werden sicherstellen, dass die REWE Group ihre Position als einer der innovativsten Akteure im europäischen Handel weiter festigen kann.[9, 13] Die Integration von Energiemanagement in die gesamte IT-Landschaft zeigt zudem, dass Digitalisierung und Nachhaltigkeit im Konzern untrennbar miteinander verbunden sind. + +-------------------------------------------------------------------------------- + +1. REWE Group auf einen Blick, [https://www.rewe-group.com/de/rewe-group-auf-einen-blick/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Frewe-group-auf-einen-blick%2F) +2. Wir sind die größte IT-Organisation der gesamten REWE Group, [https://www.rewe-digital.com/de/ueber-uns/organisation](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-digital.com%2Fde%2Fueber-uns%2Forganisation) +3. REWE Group and Ørsted sign long-term power purchase agreement for future German offshore wind farm, [https://orsted.com/en/media/news/2021/09/257993906688346](https://www.google.com/url?sa=E&q=https%3A%2F%2Forsted.com%2Fen%2Fmedia%2Fnews%2F2021%2F09%2F257993906688346) +4. Rewe packt seine SAP-Systeme in die Google-Cloud ..., [https://www.computerwoche.de/article/3977214/rewe-packt-seine-sap-systeme-in-die-google-cloud.html](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.computerwoche.de%2Farticle%2F3977214%2Frewe-packt-seine-sap-systeme-in-die-google-cloud.html) +5. Rewe: Der Weg zur energieeffizienten Filiale | stores+shops, [https://www.stores-shops.de/technology/energie/rewe-der-weg-zur-energieeffizienten-filiale/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.stores-shops.de%2Ftechnology%2Fenergie%2Frewe-der-weg-zur-energieeffizienten-filiale%2F) +6. Schneider Electric - Case Study - Three Group Solutions, [https://groupsolutions.three.com/insights/customer-stories/schneider-electric](https://www.google.com/url?sa=E&q=https%3A%2F%2Fgroupsolutions.three.com%2Finsights%2Fcustomer-stories%2Fschneider-electric) +7. Rewe Group - Wikipedia, [https://de.wikipedia.org/wiki/Rewe_Group](https://www.google.com/url?sa=E&q=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FRewe_Group) +8. REWE digital - REWE Group, [https://www.rewe-group.com/de/unternehmen/struktur-und-vertriebslinien/rewe-digital/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Funternehmen%2Fstruktur-und-vertriebslinien%2Frewe-digital%2F) +9. Dein Home of IT - REWE digital, [https://www.rewe-digital.com/de](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-digital.com%2Fde) +10. Rewe digital Case Study | Google Cloud, [https://cloud.google.com/customers/rewedigital](https://www.google.com/url?sa=E&q=https%3A%2F%2Fcloud.google.com%2Fcustomers%2Frewedigital) +11. Neue Vorteilsprogramme sind Teil der Digitalisierungsstrategie der REWE Group, [https://www.rewe-group.com/de/presse-und-medien/newsroom/pressemitteilungen/neue-vorteilsprogramme-sind-teil-der-digitalisierungsstrategie-der-rewe-group/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Fpresse-und-medien%2Fnewsroom%2Fpressemitteilungen%2Fneue-vorteilsprogramme-sind-teil-der-digitalisierungsstrategie-der-rewe-group%2F) +12. IT for store-based retail: An interview with REWE Systems CGO and ..., [https://www.rewe-group.com/en/press-and-media/newsroom/stories/it-for-store-based-retail-an-interview-with-rewe-systems-cgo-and-cco-stefan-matzelle/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fen%2Fpress-and-media%2Fnewsroom%2Fstories%2Fit-for-store-based-retail-an-interview-with-rewe-systems-cgo-and-cco-stefan-matzelle%2F) +13. As the largest digital unit within the REWE Group, we connect IT and retail, [https://www.rewe-digital.com/en/about-us/mission](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-digital.com%2Fen%2Fabout-us%2Fmission) +14. Digitale Verantwortung - REWE Group, [https://www.rewe-group.com/de/unternehmen/unternehmenskultur/digitale-verantwortung/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Funternehmen%2Funternehmenskultur%2Fdigitale-verantwortung%2F) +15. REWE Group treibt digitale Transformation voran - silicon.de, [https://www.silicon.de/41719227/rewe-group-treibt-digitale-transformation-voran](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.silicon.de%2F41719227%2Frewe-group-treibt-digitale-transformation-voran) +16. REWE Group verlagert 73 SAP-Systeme in die Cloud - it&t business, [https://www.ittbusiness.at/article/REWE-group-verlagert-79-SAP-systeme-in-die-cloud](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.ittbusiness.at%2Farticle%2FREWE-group-verlagert-79-SAP-systeme-in-die-cloud) +17. Neue Bonusprogramme von Rewe und Penny ab sofort - onlinemarktplatz.de, [https://onlinemarktplatz.de/251528/neue-bonusprogramme-rewe-penny/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fonlinemarktplatz.de%2F251528%2Fneue-bonusprogramme-rewe-penny%2F) +18. fulfillmenttools by REWE digital Case Study - Google Cloud, [https://cloud.google.com/customers/rewe-digital](https://www.google.com/url?sa=E&q=https%3A%2F%2Fcloud.google.com%2Fcustomers%2Frewe-digital) +19. Klimaschutz für unsere Zukunft - REWE Group, [https://www.rewe-group.com/de/nachhaltigkeit/engagements-und-projekte/klimaschutz/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Fnachhaltigkeit%2Fengagements-und-projekte%2Fklimaschutz%2F) +20. EcoStruxure: IoT – Internet of Things | Schneider Electric United States, [https://www.se.com/us/en/work/campaign/innovation/overview/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.se.com%2Fus%2Fen%2Fwork%2Fcampaign%2Finnovation%2Foverview%2F) +21. ISO 50001 Energy Management System – Case Study: Schneider Electric (France), [https://www.cleanenergyministerial.org/content/uploads/2022/09/cem-em-casestudy-schneiderelectric-france.pdf](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.cleanenergyministerial.org%2Fcontent%2Fuploads%2F2022%2F09%2Fcem-em-casestudy-schneiderelectric-france.pdf) +22. EcoStruxure: IoT – Internet of Things | Schneider Electric, [https://www.se.com/ww/en/work/campaign/innovation/overview/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.se.com%2Fww%2Fen%2Fwork%2Fcampaign%2Finnovation%2Foverview%2F) +23. EHA - REWE Group, [https://www.rewe-group.com/de/unternehmen/struktur-und-vertriebslinien/eha/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Funternehmen%2Fstruktur-und-vertriebslinien%2Feha%2F) +24. Corporate Power Purchase Agreement: Neuer Weg für REWE - EHA, [https://www.eha.net/blog/details/cppa-corporate-power-purchase-agreement-eha-rewe-oersted.html](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.eha.net%2Fblog%2Fdetails%2Fcppa-corporate-power-purchase-agreement-eha-rewe-oersted.html) +25. Erfolgreich im Team - Photovoltaikanlagen bei der REWE Group, [https://www.rewe-group.com/de/presse-und-medien/newsroom/stories/erfolgreich-im-team-photovoltaikanlagen-bei-der-rewe-group/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fde%2Fpresse-und-medien%2Fnewsroom%2Fstories%2Ferfolgreich-im-team-photovoltaikanlagen-bei-der-rewe-group%2F) +26. EHA - REWE Group, [https://www.rewe-group.com/en/company/structure-and-saleslines/eha/](https://www.google.com/url?sa=E&q=https%3A%2F%2Fwww.rewe-group.com%2Fen%2Fcompany%2Fstructure-and-saleslines%2Feha%2F) \ No newline at end of file diff --git a/IT-Management/Vortragsnotizen.md b/IT-Management/Vortragsnotizen.md new file mode 100644 index 0000000..aeaeb25 --- /dev/null +++ b/IT-Management/Vortragsnotizen.md @@ -0,0 +1,5 @@ +# IT-Management + +### Vortrag: +- Digitale Transformation betrachten wie Technologien die Entwicklung neuer Geschäftsmodelle beeinträchtigt +- Vision darlegen, wie ist die IT daran beteiligt \ No newline at end of file diff --git a/IT-Sicherheit/.DS_Store b/IT-Sicherheit/.DS_Store new file mode 100644 index 0000000..9e70f71 Binary files /dev/null and b/IT-Sicherheit/.DS_Store differ diff --git a/IT-Sicherheit/Folien/01-Einleitung.pdf b/IT-Sicherheit/Folien/01-Einleitung.pdf new file mode 100644 index 0000000..10754cd Binary files /dev/null and b/IT-Sicherheit/Folien/01-Einleitung.pdf differ diff --git a/IT-Sicherheit/Folien/02 Kryptographische Primitiven.pdf b/IT-Sicherheit/Folien/02 Kryptographische Primitiven.pdf new file mode 100644 index 0000000..2a6eb2a Binary files /dev/null and b/IT-Sicherheit/Folien/02 Kryptographische Primitiven.pdf differ diff --git a/IT-Sicherheit/Folien/03-Sicherheitsunterweisung-Jülich.pdf b/IT-Sicherheit/Folien/03-Sicherheitsunterweisung-Jülich.pdf new file mode 100644 index 0000000..a46f012 Binary files /dev/null and b/IT-Sicherheit/Folien/03-Sicherheitsunterweisung-Jülich.pdf differ diff --git a/IT-Sicherheit/Folien/04-Datenforensik.pdf b/IT-Sicherheit/Folien/04-Datenforensik.pdf new file mode 100644 index 0000000..c668e66 Binary files /dev/null and b/IT-Sicherheit/Folien/04-Datenforensik.pdf differ diff --git a/IT-Sicherheit/Folien/05-Kryptographie.pdf b/IT-Sicherheit/Folien/05-Kryptographie.pdf new file mode 100644 index 0000000..096c68f Binary files /dev/null and b/IT-Sicherheit/Folien/05-Kryptographie.pdf differ diff --git a/IT-Sicherheit/Folien/06-Hardware-Sicherheitsmodule.pdf b/IT-Sicherheit/Folien/06-Hardware-Sicherheitsmodule.pdf new file mode 100644 index 0000000..95f8020 Binary files /dev/null and b/IT-Sicherheit/Folien/06-Hardware-Sicherheitsmodule.pdf differ diff --git a/IT-Sicherheit/Folien/07-OpenSSL.pdf b/IT-Sicherheit/Folien/07-OpenSSL.pdf new file mode 100644 index 0000000..d0495a7 Binary files /dev/null and b/IT-Sicherheit/Folien/07-OpenSSL.pdf differ diff --git a/IT-Sicherheit/Folien/08 TLS-SSL.pdf b/IT-Sicherheit/Folien/08 TLS-SSL.pdf new file mode 100644 index 0000000..36064c9 Binary files /dev/null and b/IT-Sicherheit/Folien/08 TLS-SSL.pdf differ diff --git a/IT-Sicherheit/Folien/09-QUIC.pdf b/IT-Sicherheit/Folien/09-QUIC.pdf new file mode 100644 index 0000000..8057a00 Binary files /dev/null and b/IT-Sicherheit/Folien/09-QUIC.pdf differ diff --git a/IT-Sicherheit/Folien/10-Schlüsselmanagement.pdf b/IT-Sicherheit/Folien/10-Schlüsselmanagement.pdf new file mode 100644 index 0000000..6219a74 Binary files /dev/null and b/IT-Sicherheit/Folien/10-Schlüsselmanagement.pdf differ diff --git a/IT-Sicherheit/Folien/11-TPM.pdf b/IT-Sicherheit/Folien/11-TPM.pdf new file mode 100644 index 0000000..98c03e6 Binary files /dev/null and b/IT-Sicherheit/Folien/11-TPM.pdf differ diff --git a/IT-Sicherheit/Folien/itsec6-11 - folien.pdf b/IT-Sicherheit/Folien/itsec6-11 - folien.pdf new file mode 100644 index 0000000..29cc096 Binary files /dev/null and b/IT-Sicherheit/Folien/itsec6-11 - folien.pdf differ diff --git a/IT-Sicherheit/Hausaufgaben/Hausaufgabe 1.pdf b/IT-Sicherheit/Hausaufgaben/Hausaufgabe 1.pdf new file mode 100644 index 0000000..9cc439f Binary files /dev/null and b/IT-Sicherheit/Hausaufgaben/Hausaufgabe 1.pdf differ diff --git a/IT-Sicherheit/Hausaufgaben/me.txt b/IT-Sicherheit/Hausaufgaben/me.txt new file mode 100644 index 0000000..3744516 --- /dev/null +++ b/IT-Sicherheit/Hausaufgaben/me.txt @@ -0,0 +1,2 @@ +Theo Leuthardt +s_leuthardt23@stud.hwr-berlin.de diff --git a/IT-Sicherheit/Hausaufgaben/me.txt.enc b/IT-Sicherheit/Hausaufgaben/me.txt.enc new file mode 100644 index 0000000..d8c07ef --- /dev/null +++ b/IT-Sicherheit/Hausaufgaben/me.txt.enc @@ -0,0 +1 @@ +Salted__c V6iwsһV79ﲞt`ɏֽGRaE{k>ەUV \ No newline at end of file diff --git a/IT-Sicherheit/Hausaufgaben/me.txt.sig b/IT-Sicherheit/Hausaufgaben/me.txt.sig new file mode 100644 index 0000000..05c7d61 Binary files /dev/null and b/IT-Sicherheit/Hausaufgaben/me.txt.sig differ diff --git a/IT-Sicherheit/Hausaufgaben/private_key.pem b/IT-Sicherheit/Hausaufgaben/private_key.pem new file mode 100644 index 0000000..5d4cac6 --- /dev/null +++ b/IT-Sicherheit/Hausaufgaben/private_key.pem @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALlrdX/Aq9Rd0c9r +oKCGAYtt0bLHuzgWSorCRg+v5Zr0OQRBBO/yT4s00a1deoVH1UAg25GI5bhDPPzK +smmVTgA7eM6LN+u7trANIz0wbfuC8zfMc99d/id8EiZ8M5eTrpHEBAesKvOys5Ds +GoWby56jTsjXvU4qBwZ+shSZMIz/AgMBAAECgYBszoxi7XNn6a5HY8ccq8aYRVd6 +7A4HOb2Ac8SdTAEWzx3uSyFUlQLsk5A/hc1yDNctDJsMaiMz3/EX/vJ3VvAv3fUt +jaLuTIAgaR3gvaV6xlu/uX4bSm5NxK/M1nAuji4/+kbetgVtux38JqHkYFB0qxGE +fxj32ZbZvNq4yeq8cQJBAO6Nx2z40dRs74HLtdLccpp57xjeX/SVNNAduf4cTu4T +gl+1tI2GXxInEvCzJtFPv1u6Ho4M54LkaLIqID7RtAsCQQDG+uaCNldte4mbDLIy +gxZPFq+Js6I1fbcaC3IOTmuohBSYAkXhY0fmPtPf9wbNbxJWyH8YfKjURpR0fNcg +UI9dAkEAvgd261myXNOCXxTVfGlbaa7kRh0utvj8nyRu+vu17HTiEDgA4hQ+O4mg +ztkHfQlX2EwE9wdUjLJCrFpeYWxPTQJAK5fQZHqvUMcd8KApcjOR8aXQs2RthzaR +pN0ZEdVQdMzrDhqBYM21dNYS6SBflyZcaDLo1V6KRmdoItUu9F9x6QJBAId8yTCY +rOxCMhaGJZjdzhMJbmGuC6hFqlC276ibhuvdTsSFetegJdbQ+E1X6GqilEgTXQah +JzjzfdMHwWjDIw0= +-----END PRIVATE KEY----- diff --git a/IT-Sicherheit/Hausaufgaben/public_key.pem b/IT-Sicherheit/Hausaufgaben/public_key.pem new file mode 100644 index 0000000..c36d4a4 --- /dev/null +++ b/IT-Sicherheit/Hausaufgaben/public_key.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5a3V/wKvUXdHPa6CghgGLbdGy +x7s4FkqKwkYPr+Wa9DkEQQTv8k+LNNGtXXqFR9VAINuRiOW4Qzz8yrJplU4AO3jO +izfru7awDSM9MG37gvM3zHPfXf4nfBImfDOXk66RxAQHrCrzsrOQ7BqFm8ueo07I +171OKgcGfrIUmTCM/wIDAQAB +-----END PUBLIC KEY----- diff --git a/IT-Sicherheit/Hausaufgaben/solution.md b/IT-Sicherheit/Hausaufgaben/solution.md new file mode 100644 index 0000000..7ef9f19 --- /dev/null +++ b/IT-Sicherheit/Hausaufgaben/solution.md @@ -0,0 +1,172 @@ +# Lösung — Übung 1 IT-Sicherheit + +**Theo Leuthardt** | s_leuthardt23@stud.hwr-berlin.de + +--- + +## Aufgabe 2: Kryptographische Fingerabdrücke + +### Was wird gemacht? +Aus der Datei `me.txt` (enthält Name + Email) werden zwei Hashwerte berechnet: MD5 und SHA3-256. Ein Hash ist ein "digitaler Fingerabdruck" — eine feste kurze Zeichenkette, die sich komplett ändert, sobald auch nur ein Zeichen in der Datei verändert wird. + +### Befehle +```bash +openssl dgst -md5 me.txt +openssl dgst -sha3-256 me.txt +``` + +### Ergebnis +| Verfahren | Hashwert | +|-----------|----------| +| MD5 | `cf48c000237cbfc026fbc9002ab5d3f3` | +| SHA3-256 | `415e2e9a0fe8e140c0b7db92faa15586b2296520a6fd3cdd93f05bc74e574808` | + +### Erklärung +- `openssl dgst` berechnet kryptographische Hashwerte +- **MD5** erzeugt einen 128-Bit-Hash (32 Hex-Zeichen). MD5 gilt heute als unsicher (Kollisionen möglich), wird aber noch als Prüfsumme verwendet. +- **SHA3-256** erzeugt einen 256-Bit-Hash (64 Hex-Zeichen). SHA-3 ist der neueste Standard (Keccak-Algorithmus) und gilt als sicher. + +--- + +## Aufgabe 3: Verschlüsselung mit AES-256 + +### Was wird gemacht? +Die Datei `me.txt` wird symmetrisch mit AES-256 verschlüsselt. Als Schlüssel (Passwort) dient die eigene Email-Adresse. + +### Befehl +```bash +openssl enc -aes-256-cbc -salt -pbkdf2 -in me.txt -out me.txt.enc -pass pass:s_leuthardt23@stud.hwr-berlin.de +``` + +### Ergebnis +Verschlüsselte Datei: `me.txt.enc` + +### Erklärung +| Parameter | Bedeutung | +|-----------|-----------| +| `enc -aes-256-cbc` | Verschlüsselung mit AES-256 im CBC-Modus (Cipher Block Chaining) | +| `-salt` | Fügt Zufallsdaten hinzu, damit gleiche Eingaben unterschiedliche Chiffretexte erzeugen | +| `-pbkdf2` | Leitet aus dem Passwort einen sicheren Schlüssel ab (Password-Based Key Derivation Function 2) | +| `-pass pass:...` | Das Passwort (hier: die Email-Adresse) | + +Zum Entschlüsseln: `openssl enc -d -aes-256-cbc -pbkdf2 -in me.txt.enc -out me_decrypted.txt -pass pass:s_leuthardt23@stud.hwr-berlin.de` + +--- + +## Aufgabe 4: Krypto-Software für SHA, AES, RSA und TLS + +### Recherche-Ergebnis + +| Software | SHA | AES | RSA | TLS | Windows | MacOS | Linux | +|----------|-----|-----|-----|-----|---------|-------|-------| +| **OpenSSL** | ja | ja | ja | ja | ja | ja | ja | +| **GnuPG (GPG)** | ja | ja | ja | - | ja | ja | ja | +| **VeraCrypt** | ja (SHA-512) | ja (AES-256) | - | - | ja | ja | ja | +| **LibreSSL** | ja | ja | ja | ja | ja | ja | ja | +| **Bouncy Castle** | ja | ja | ja | ja | ja | ja | ja | +| **wolfSSL** | ja | ja | ja | ja | ja | ja | ja | +| **GnuTLS** | ja | ja | ja | ja | - | ja | ja | +| **CryptoSys PKI Pro** | ja | ja | ja | - | ja | - | ja | +| **mbed TLS** | ja | ja | ja | ja | ja | ja | ja | +| **Cryptomator** | ja | ja | - | - | ja | ja | ja | +| **IIS Crypto** | ja | ja | ja | ja | ja (nur) | - | - | +| **Linux Crypto API** | ja | ja | ja | - | - | - | ja (nur) | + +### Erklärung +- **OpenSSL** ist der De-facto-Standard und auf fast allen Systemen vorinstalliert (macOS, Linux). Unterstützt alle vier Algorithmenklassen. +- **GnuPG** ist die freie OpenPGP-Implementierung, primär für Verschlüsselung und Signaturen. +- **VeraCrypt** ist für Festplattenverschlüsselung gedacht (Nachfolger von TrueCrypt). +- **LibreSSL** ist ein OpenSSL-Fork von OpenBSD mit Fokus auf Sicherheit. +- **Bouncy Castle** ist eine Java/C#-Kryptographie-Bibliothek. +- **wolfSSL** und **mbed TLS** sind leichtgewichtige TLS-Bibliotheken, oft für Embedded-Systeme. + +--- + +## Aufgabe 5: RSA-1024 Schlüsselpaar + +### Was wird gemacht? +Ein RSA-Schlüsselpaar (1024 Bit) wird generiert: ein privater Schlüssel (geheim halten!) und ein öffentlicher Schlüssel (darf geteilt werden). + +### Befehle +```bash +# Privaten Schlüssel generieren +openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:1024 -out private_key.pem + +# Öffentlichen Schlüssel extrahieren +openssl pkey -in private_key.pem -pubout -out public_key.pem +``` + +### Ergebnis +**Öffentlicher Schlüssel** (`public_key.pem`): +``` +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5a3V/wKvUXdHPa6CghgGLbdGy +x7s4FkqKwkYPr+Wa9DkEQQTv8k+LNNGtXXqFR9VAINuRiOW4Qzz8yrJplU4AO3jO +izfru7awDSM9MG37gvM3zHPfXf4nfBImfDOXk66RxAQHrCrzsrOQ7BqFm8ueo07I +171OKgcGfrIUmTCM/wIDAQAB +-----END PUBLIC KEY----- +``` + +### Erklärung +- **RSA** ist ein asymmetrisches Verschlüsselungsverfahren mit zwei Schlüsseln. +- Der **private Schlüssel** wird zum Entschlüsseln und Signieren verwendet — darf niemals weitergegeben werden. +- Der **öffentliche Schlüssel** wird zum Verschlüsseln und Verifizieren verwendet — kann frei verteilt werden. +- **1024 Bit** gilt heute als unsicher für produktive Systeme (mindestens 2048 Bit empfohlen), reicht aber für diese Übung. + +--- + +## Aufgabe 6: Datei signieren + +### Was wird gemacht? +Die Datei `me.txt` wird mit dem privaten RSA-Schlüssel digital signiert. Damit kann jeder mit dem öffentlichen Schlüssel verifizieren, dass die Datei tatsächlich von dir stammt und nicht verändert wurde. + +### Befehl +```bash +openssl dgst -sha256 -sign private_key.pem -out me.txt.sig me.txt +``` + +### Ergebnis +Signatur-Datei: `me.txt.sig` + +Signatur (Base64): +``` +hHWGEu44cmgXi9YYGpLYEnuTg4LmArqMB5mCMs9wdVhBlIDPGa0AFVVnp52AD9pG +wAf/i57PwKeT/bCRXpFc+9lOapQFnL6jDWEX/CdNak3yXkLgzIIQVm4BVpKvOlsU +VnHT0cP73+SlT8pCjUq7Ub2bIGvmJVBMcfLrDiVLjXU= +``` + +### Erklärung +- `openssl dgst -sha256 -sign` erstellt zuerst einen SHA-256-Hash der Datei und verschlüsselt diesen dann mit dem privaten Schlüssel. +- Zur **Verifikation**: `openssl dgst -sha256 -verify public_key.pem -signature me.txt.sig me.txt` +- Eine digitale Signatur gewährleistet **Authentizität** (Absender ist echt) und **Integrität** (Datei wurde nicht verändert). + +--- + +## Aufgabe 7: Anbieter für kostenloses Public-Key-Hosting + +| Anbieter | Beschreibung | URL | +|----------|-------------|-----| +| **keys.openpgp.org** | Offizieller OpenPGP-Keyserver, verifiziert Email-Adressen | https://keys.openpgp.org | +| **keyserver.ubuntu.com** | Ubuntus öffentlicher PGP-Keyserver | https://keyserver.ubuntu.com | +| **GitHub** | SSH/GPG Public Keys können im Profil hinterlegt werden | https://github.com/settings/keys | +| **GitLab** | Wie GitHub, unterstützt GPG- und SSH-Keys | https://gitlab.com | +| **Keybase** | Verknüpft Public Keys mit Social-Media-Identitäten | https://keybase.io | +| **MIT PGP Keyserver** | Einer der ältesten öffentlichen Keyserver | https://pgp.mit.edu | + +### Erklärung +- **Keyserver** sind öffentliche Verzeichnisse, in denen jeder seinen öffentlichen Schlüssel hochladen kann. +- Andere können den Schlüssel dann herunterladen, um verschlüsselte Nachrichten zu senden oder Signaturen zu verifizieren. +- **keys.openpgp.org** ist der modernste Ansatz, da er Email-Verifizierung erfordert (kein Spam möglich). +- **GitHub/GitLab** sind praktisch für Entwickler, die ihre GPG-Keys für signierte Commits nutzen. + +--- + +## Zusammenfassung der erstellten Dateien + +| Datei | Beschreibung | +|-------|-------------| +| `me.txt` | Originaldatei mit Name und Email | +| `me.txt.enc` | AES-256 verschlüsselte Version | +| `private_key.pem` | Privater RSA-1024 Schlüssel (NICHT mitschicken!) | +| `public_key.pem` | Öffentlicher RSA-1024 Schlüssel | +| `me.txt.sig` | Digitale Signatur der Datei | diff --git a/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/.DS_Store b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/.DS_Store differ diff --git a/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Sicherheitsvorfall D-Trust 2025.pdf b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Sicherheitsvorfall D-Trust 2025.pdf new file mode 100644 index 0000000..0a60960 Binary files /dev/null and b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Sicherheitsvorfall D-Trust 2025.pdf differ diff --git a/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Vortrag Sicherheitsvorfall.md b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Vortrag Sicherheitsvorfall.md new file mode 100644 index 0000000..99e5332 --- /dev/null +++ b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/Vortrag Sicherheitsvorfall.md @@ -0,0 +1,124 @@ +# Kurzvortrag: Sicherheitsvorfall D-Trust +**Datum des Vorfalls:** 13. Januar 2025 +**Betroffenes Unternehmen:** D-Trust GmbH (Tochterunternehmen der Bundesdruckerei-Gruppe) + +--- +## 1. Was ist passiert? +### Hintergrund: Wer ist D-Trust? +Die D-Trust GmbH ist ein Tochterunternehmen der Bundesdruckerei-Gruppe und seit 2016 als qualifizierter Vertrauensdiensteanbieter gemäß der eIDAS-Verordnung bei der Bundesnetzagentur gelistet. Das Unternehmen stellt unter anderem digitale Zertifikate, elektronische Signaturen sowie elektronische Heilberufsausweise (eHBA) und Praxis- bzw. Institutionsausweise (SMC-B) her – Produkte also, die für den Zugriff auf die Telematikinfrastruktur und damit auch auf die elektronische Patientenakte (ePA) benötigt werden. + +### Der Vorfall +Am 13. Januar 2025 wurde festgestellt, dass das **Antragsportal für Signatur- und Siegelkarten** (portal.d-trust.net) Ziel eines Angriffs geworden war. Eine Schnittstelle (API) des Portals wurde gezielt manipuliert, wodurch Daten aus dem Antragsbearbeitungssystem ausgelesen werden konnten. + +### Wer steckte dahinter? +Es handelte sich **nicht** um einen kriminellen Angriff. Ein anonymer **Sicherheitsforscher (White-Hat-Hacker)** hatte Anfang Januar 2025 eine Schwachstelle in der API des Portals entdeckt. Er meldete das Datenleck unmittelbar an den **Chaos Computer Club (CCC)** und versicherte die restlose Löschung aller abgerufenen Daten. Der Forscher wandte sich bewusst nicht direkt an D-Trust, sondern an den CCC – aus Angst vor strafrechtlicher Verfolgung aufgrund des sogenannten „Hackerparagraphen" (§ 202a StGB). + +### Welche Daten waren betroffen? +Potenziell entwendet wurden personenbezogene Daten von Antragstellern, darunter: + +- Vor- und Nachname +- E-Mail-Adresse +- Telefonnummer +- Geburtsdatum +- Teilweise Adressdaten +- Teilweise Daten des Ausweisdokuments (Dokumentennummer, Gültigkeitsdatum, ausstellende Behörde) + +**Nicht betroffen** waren laut D-Trust: Login-Daten (Passwörter), PINs, Zahlungsinformationen und bereits ausgegebene Signatur- und Siegelkarten. + +### Wer war betroffen? +Da D-Trust als Dienstleister für zahlreiche Landesärztekammern, Kassenärztliche Vereinigungen und Apothekerkammern tätig ist, betraf der Vorfall potenziell Tausende Ärztinnen und Ärzte, Psychotherapeuten sowie Apothekerinnen und Apotheker in ganz Deutschland, die einen eHBA oder SMC-B-Ausweis beantragt hatten. + +--- + +## 2. Einschätzung der Situation + +### Schwere des Vorfalls +Der Vorfall ist als **gravierend** einzustufen – weniger wegen des unmittelbaren Schadens, sondern wegen der strukturellen und symbolischen Dimension: + +- **Vertrauensbruch:** Ein Unternehmen, das sich als „Vorreiter für sichere digitale Identitäten" positioniert und Vertrauensdienste nach höchsten Sicherheitsstandards verspricht, hat hochsensible personenbezogene Daten unzureichend geschützt. +- **Kritische Infrastruktur:** D-Trust ist Teil der Sicherheitsarchitektur des deutschen Gesundheitswesens (Telematikinfrastruktur, ePA). Ein Sicherheitsvorfall bei einem solchen Anbieter erschüttert das Vertrauen in die gesamte digitale Gesundheitsinfrastruktur. +- **Art der Schwachstelle:** Der CCC bezeichnete den Vorfall als Ergebnis einer „Kombination aus Versehen, Inkompetenz und mangelnder Sorgfalt". Es wurden nach CCC-Darstellung keine aufwändigen Schutzmaßnahmen umgangen – die Daten waren faktisch über eine ungesicherte Schnittstelle zugänglich. + +### Reaktion von D-Trust +D-Trust reagierte nach der Entdeckung mit folgenden Maßnahmen: + +- Sofortige Auswertung und Sicherung des Portals +- Benachrichtigung der Aufsichtsbehörden +- Zusammenarbeit mit einem spezialisierten IT-Sicherheitsteam und den Behörden +- Individuelle Information der Betroffenen +- **Strafanzeige gegen Unbekannt** + +### Kritik an der Reaktion +Die Strafanzeige gegen den Sicherheitsforscher stieß auf massive Kritik. Der CCC warf D-Trust vor, mit „bedeutungsschwangerer Cyber-Rhetorik" von der eigenen Verantwortung ablenken zu wollen. CCC-Sprecher Linus Neumann formulierte einen **5-Punkte-Plan** an D-Trust, der u.a. forderte: + +1. **Verantwortung übernehmen** für die Sicherheitslücke +2. **Förmliche Entschuldigung** gegenüber Strafverfolgungsbehörden, Aufsichtsbehörden und dem CCC +3. Erreichung von **Sicherheitsstandards des aktuellen Jahrhunderts** +4. **Abschaffung der Hackerparagraphen** (§ 202a StGB) +5. **Empfindliche Strafe** durch die Bundesdatenschutzbeauftragte + +--- + +## 3. Konsequenzen + +### Für die Betroffenen +- **Erhöhtes Risiko für Phishing und Identitätsdiebstahl:** Kombination aus Name, Geburtsdatum, E-Mail und teilweise Ausweisdaten bietet Angreifern eine breite Grundlage für gezielte Social-Engineering-Angriffe. +- **Langfristige Wachsamkeit nötig:** Betroffene wurden von D-Trust und den Kammern aufgefordert, in den kommenden Monaten besonders aufmerksam bei E-Mails und Telefonanrufen zu sein. +- **Möglichkeit zur Strafanzeige:** Betroffene können bei der Polizei Anzeige erstatten, insbesondere wenn ein Missbrauch ihrer Daten festgestellt wird. + +### Für D-Trust und die Bundesdruckerei + +- **Reputationsschaden:** Als Vertrauensdiensteanbieter wiegt ein solcher Vorfall besonders schwer und gefährdet das Geschäftsmodell. +- **Mögliche aufsichtsrechtliche Konsequenzen:** Die Bundesdatenschutzbeauftragte und die Bundesnetzagentur könnten Maßnahmen oder Bußgelder verhängen. +- **DSGVO-Relevanz:** Der Vorfall fällt unter die Meldepflicht gemäß Art. 33/34 DSGVO und könnte zu Schadensersatzansprüchen Betroffener führen. + +### Für das Gesundheitswesen +- **Vertrauensverlust in die Telematikinfrastruktur:** Der Vorfall kam zeitlich ungünstig kurz vor der breiten Einführung der elektronischen Patientenakte (ePA 3.0) und nährt bestehende Vorbehalte. +- **Grundsatzdebatte über Datensicherheit:** Der ehemalige Bundesdatenschutzbeauftragte Ulrich Kelber wies darauf hin, dass die ePA 3.0 in einigen Bereichen niedrigere Sicherheitsstandards als ihre Vorgängerversion aufweist. + +### Für die Sicherheitsforschung +- **Erneute Debatte über den Hackerparagraphen (§ 202a StGB):** Der Fall verdeutlicht das Dilemma von Sicherheitsforschern in Deutschland, die Schwachstellen entdecken, aber fürchten müssen, dafür strafrechtlich verfolgt zu werden. +- **Der CCC kritisierte, dass die Ampel-Koalition** es versäumt habe, die Hacker-Paragraphen abzuschaffen und Sicherheitsforschung zu entkriminalisieren. + +--- + +## 4. Was kann getan werden, um zukünftige Fälle zu vermeiden? + +### Technische Maßnahmen +- **API-Sicherheit:** Regelmäßige Sicherheitsaudits und Penetrationstests aller öffentlich erreichbaren Schnittstellen – insbesondere bei Systemen, die sensible personenbezogene Daten verarbeiten. +- **Zugriffskontrolle (Access Control):** Implementierung robuster Authentifizierungs- und Autorisierungsmechanismen auf API-Ebene (z.B. Rate Limiting, Token-basierte Zugriffskontrolle, Least-Privilege-Prinzip). +- **Datenminimierung:** Nur die für den jeweiligen Vorgang zwingend notwendigen Daten sollten im Portal vorgehalten und über APIs zugänglich sein. Sensible Daten wie Ausweisdaten sollten nicht dauerhaft online bereitgestellt werden. +- **Monitoring und Anomalie-Erkennung:** Echtzeit-Überwachung von API-Zugriffen, um ungewöhnliche Abfragemuster frühzeitig zu erkennen. +- **Security by Design:** Sicherheit muss von Anfang an in die Softwareentwicklung integriert werden, nicht erst nachträglich aufgesetzt werden. + +### Organisatorische Maßnahmen + +- **Responsible-Disclosure-Programm:** Einrichtung eines transparenten und rechtlich abgesicherten Meldeverfahrens für Sicherheitsforscher (Bug-Bounty-Programme), damit Schwachstellen ohne Angst vor Strafverfolgung gemeldet werden können. +- **Regelmäßige externe Sicherheitsaudits:** Unabhängige Überprüfung der gesamten Infrastruktur durch externe Experten. +- **Incident-Response-Plan:** Klare Prozesse für den Umgang mit Sicherheitsvorfällen, einschließlich einer transparenten und verhältnismäßigen Kommunikation. +- **Schulung und Sensibilisierung:** Regelmäßige Sicherheitsschulungen für alle Mitarbeitenden, die an der Entwicklung und dem Betrieb von Portalen beteiligt sind. + +### Regulatorische und politische Maßnahmen + +- **Reform des § 202a StGB (Hackerparagraph):** Die Kriminalisierung von gutgläubiger Sicherheitsforschung muss beendet werden. Sicherheitsforscher, die Schwachstellen verantwortungsvoll melden, brauchen Rechtssicherheit. Der Koalitionsvertrag der aktuellen Bundesregierung sollte hierzu klare Zusagen machen. +- **Stärkung der Aufsichtsbehörden:** Die Bundesdatenschutzbeauftragte und die Bundesnetzagentur müssen über ausreichende Ressourcen und Durchsetzungsinstrumente verfügen, um Vertrauensdiensteanbieter effektiv zu kontrollieren. +- **Verbindliche Sicherheitsstandards für kritische Infrastruktur:** Anbieter, die im Gesundheitswesen oder in der Sicherheitsinfrastruktur tätig sind, sollten verpflichtend regelmäßige Sicherheitszertifizierungen durchlaufen. +- **Transparenzpflichten:** Unternehmen wie D-Trust sollten verpflichtet werden, Sicherheitsvorfälle zeitnah und umfassend zu kommunizieren – ohne beschönigende Rhetorik. + +--- + +## Quellen + +|Quelle|Link| +|---|---| +|D-Trust GmbH – Offizielle Meldung|[d-trust.net](https://www.d-trust.net/de/newsroom/news/information-datenschutzvorfall-13-januar-2025)| +|Chaos Computer Club – Stellungnahme & 5-Punkte-Plan|[ccc.de](https://www.ccc.de/de/updates/2025/dont-trust)| +|Heise Online – CCC spricht von „Cyber-Augenwischerei"|[heise.de](https://www.heise.de/news/Nach-Sicherheitsluecke-bei-D-Trust-CCC-spricht-von-Cyber-Augenwischerei-10256537.html)| +|Security Insider – Cyberangriff auf D-Trust|[security-insider.de](https://www.security-insider.de/cyberangriff-d-trust-white-hat-hacker-datenklau-a-ef2fa8f79845393e1a8c45ef004043d1/)| +|Ärztekammer Niedersachsen – Information zum Vorfall|[aekn.de](https://www.aekn.de/detail/wichtige-information-zum-datenschutzvorfall-bei-d-trust)| +|Landesärztekammer Baden-Württemberg|[aerztekammer-bw.de](https://www.aerztekammer-bw.de/achtung-datenschutzvorfall-bei-d-trust-87b2c4d3f6918f21)| +|KV Sachsen – Datenschutzvorfall|[kvsachsen.de](https://www.kvsachsen.de/fuer-praxen/aktuelle-informationen/praxis-news/datenschutzvorfall-bei-der-bundesdruckerei-d-trust)| +|Apothekerkammer Nordrhein|[aknr.de](https://www.aknr.de/kammer/aktuelles/datenschutzvorfall-bei-der-bundesdruckerei-d-trust-gmbh)| +|Borns IT- und Windows-Blog|[borncity.com](https://www.borncity.com/blog/2025/01/17/datenschutzvorfall-bei-der-d-trust-gmbh-13-1-2025/)| +|Pharmazeutische Zeitung – CCC-Stellungnahme|[pharmazeutische-zeitung.de](https://www.pharmazeutische-zeitung.de/hackerangriff-war-laut-ccc-hausgemachtes-datenleck-152746/)| +|DSGVO-Portal – Sicherheitsvorfalls-Datenbank|[dsgvo-portal.de](https://www.dsgvo-portal.de/sicherheitsvorfaelle/sicherheitsvorfall-d-trustbundesdruckerei-DE-8107.php)| \ No newline at end of file diff --git a/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/skript.md b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/skript.md new file mode 100644 index 0000000..5faaf71 --- /dev/null +++ b/IT-Sicherheit/Vortrag Sicherheitsvorfall D-Trust 2025/skript.md @@ -0,0 +1,111 @@ +# Vortragsskript – D-Trust Sicherheitsvorfall 2025 +**Theo Leuthardt · Modul: IT-Sicherheit · ca. 5 Minuten** + +--- +## Folie 1 – Titel +Ich möchte euch heute einen realen Sicherheitsvorfall vorstellen, der Anfang 2025 für Aufsehen gesorgt hat: den Datenleck bei der D-Trust GmbH. + +> 📝 **Speaker Notes** +> - Kurz Pause lassen, Blickkontakt herstellen bevor es losgeht +> - „D-Trust" bewusst langsam aussprechen – viele kennen das Unternehmen nicht + +--- + +## Folie 2 / 3 – Wer ist die D-Trust? + +D-Trust ist eine Tochtergesellschaft der Bundesdruckerei-Gruppe – also einem Unternehmen, das direkt dem Bund gehört. D-Trust ist seit 2016 ein sogenannter **qualifizierter Vertrauensdiensteanbieter** nach der europäischen eIDAS-Verordnung. + +Was das bedeutet: D-Trust stellt digitale Zertifikate und Ausweise aus – unter anderem den **eHBA**, den elektronischen Heilberufsausweis, und die **SMC-B-Karte**, die Praxisausweis-Karte. Damit authentifizieren sich Ärzte und Apotheker in der Telematikinfrastruktur, also dem digitalen Gesundheitsnetz Deutschlands. D-Trust hat also eine zentrale Vertrauensrolle – und genau das macht den Vorfall besonders brisant. + +> 📝 **Speaker Notes** +> - Auf das Organigramm zeigen: D-Trust ist nur eine von mehreren Töchtern +> - Kernbotschaft: D-Trust ist kein kleines Startup – das ist ein staatlich geprägter Anbieter mit Vertrauensauftrag +> - eHBA & SMC-B kurz erklären falls Fragen kommen: „Das sind quasi digitale Ausweise für Arztpraxen" +> - „Telematikinfrastruktur" = das sichere Netz, das alle Arztpraxen, Apotheken und Krankenkassen verbindet + +--- + +## Folie 4 / 5 – Der Vorfall + +Am **13. Januar 2025** wurde ein schwerwiegender Datenschutzvorfall bekannt. Das Antragsportal von D-Trust hatte eine API-Schnittstelle, die **völlig ungeschützt** war – keine Authentifizierung, keine Zugangskontrolle. + +Ein White-Hat-Hacker, also ein gutgläubiger Sicherheitsforscher, entdeckte das Problem: Durch simples Durchnummerieren von Antrags-IDs – das nennt man **IDOR**, Insecure Direct Object Reference – konnte er alle Datensätze abrufen. Kein Exploit, kein Passwort. Die Tür stand offen. Der Forscher versicherte anschließend, alle abgerufenen Daten restlos gelöscht zu haben. + +Er wandte sich allerdings bewusst nicht direkt an D-Trust – aus Angst vor **§ 202a StGB**, dem Hackerparagraphen – sondern an den Chaos Computer Club. Der CCC fasste es treffend zusammen: „Kombination aus Versehen, Inkompetenz und mangelnder Sorgfalt." Es wurden keine aufwändigen Schutzmechanismen umgangen – die Daten waren faktisch ungeschützt. + +> 📝 **Speaker Notes** +> - IDOR kurz erklären: „Man hat einfach die Zahl in der URL hochgezählt – 1, 2, 3 – und jedes Mal kamen andere Nutzerdaten zurück" +> - Betonung: Das ist kein hochentwickelter Angriff, das ist Grundschulfehler in der Webentwicklung +> - § 202a Angst des Hackers ist wichtig für später (Prävention) – kurz im Hinterkopf behalten +> - CCC-Zitat langsam und pointiert vorlesen + +--- + +## Folie 6 / 7 – Betroffene Kunden & Daten + +Betroffen waren tausende Heilberufler in ganz Deutschland – Ärztinnen und Ärzte, Psychotherapeuten und Apotheker, die über ihre Kammern einen eHBA oder SMC-B beantragt hatten. + +Abgeflossen sind persönliche Daten wie Name, E-Mail, Telefonnummer, Geburtsdatum und teilweise sogar Ausweisdaten wie Dokumentennummer und Gültigkeitsdatum. Passwörter, PINs oder die ausgegebenen Karten selbst waren glücklicherweise nicht betroffen. + +> 📝 **Speaker Notes** +> - Auf die rote und grüne Karte zeigen: links was weg ist, rechts was verschont blieb +> - „Tausende" – genaue Zahl wurde nie offiziell kommuniziert, was selbst schon Kritikpunkt war +> - Die Datenkombination betonen: Name + Geburtsdatum + E-Mail + Ausweisdaten zusammen ist sehr gefährlich für Identitätsdiebstahl – auch wenn jedes Datum einzeln harmlos klingt + +--- + +## Folie 8 / 9 – Reaktion & Kritik + +D-Trust reagierte: Portal gesichert, Behörden informiert, Betroffene benachrichtigt. Allerdings stellten sie auch **Strafanzeige gegen Unbekannt** – also gegen den Hacker, der die Lücke überhaupt erst gemeldet hat. Das sorgte für erhebliche Kritik. + +CCC-Sprecher Linus Neumann veröffentlichte einen 5-Punkte-Plan: Verantwortung übernehmen, förmliche Entschuldigung, Sicherheitsstandards des aktuellen Jahrhunderts einhalten, den Hackerparagraphen abschaffen, und eine empfindliche Strafe durch die Bundesdatenschutzbeauftragte. D-Trust wurde vorgeworfen, mit „bedeutungsschwangerer Cyber-Rhetorik" von der eigenen Verantwortung ablenken zu wollen. + +> 📝 **Speaker Notes** +> - Strafanzeige gegen den Hacker kurz sacken lassen – das ist die absurde Pointe: derjenige, der das Problem gefunden hat, wird angezeigt +> - „Bedeutungsschwangere Cyber-Rhetorik" erklären falls gefragt: D-Trust sprach von „Cyberangriff" und „hochentwickelten Methoden" – obwohl es eine offene Tür war. Das klingt dramatisch, lenkt aber von der eigenen Schlamperei ab +> - Linus Neumann = bekanntes CCC-Gesicht, Podcast „Chaos Radio" + +--- + +## Folie 10 – Auswirkungen + +Die Folgen sind dreifach: Für die Betroffenen besteht erhöhtes Risiko für Phishing und Identitätsdiebstahl – die Kombination aus Name, Geburtsdatum, E-Mail und Ausweisdaten ist ideal für gezielte Social-Engineering-Angriffe. + +Für D-Trust ist es ein massiver Reputationsschaden – für einen Vertrauensdiensteanbieter besonders schwerwiegend – und es drohen DSGVO-Bußgelder nach Art. 33 und 34. + +Und fürs Gesundheitswesen: Der Vorfall kam zeitlich ungünstig kurz vor der breiten Einführung der elektronischen Patientenakte 3.0. Der ehemalige Bundesdatenschutzbeauftragte Ulrich Kelber wies in dem Zusammenhang darauf hin, dass die ePA 3.0 in einigen Bereichen sogar niedrigere Sicherheitsstandards als ihre Vorgängerversion aufweist. Das nährt bestehende Vorbehalte erheblich. + +> 📝 **Speaker Notes** +> - Die drei Spalten kurz abarbeiten, nicht zu lange bei jeder verweilen +> - Kelber-Zitat ist ein guter Aufhänger: zeigt, dass das Problem systemischer Natur ist, nicht nur ein D-Trust-Einzelfall +> - Art. 33/34 DSGVO falls gefragt: 33 = Meldepflicht an Behörde, 34 = Informationspflicht gegenüber Betroffenen – D-Trust hat das erfüllt, aber trotzdem drohen Bußgelder wenn die Sicherheit unzureichend war + +--- + +## Folie 11 / 12 – Präventionsmaßnahmen + +Was hätte verhindert werden können? Technisch: regelmäßige API-Audits und Pentests, Authentifizierung, Datenminimierung und Echtzeit-Monitoring. Organisatorisch: ein Responsible-Disclosure-Programm, damit Sicherheitsforscher Lücken sicher melden können, und ein klarer Incident-Response-Plan. + +Und regulatorisch – und das ist das eigentliche Kernproblem dieses Falls: **§ 202a StGB muss reformiert werden.** Der CCC kritisierte, dass die Ampel-Koalition es versäumt hatte, die Hackerparagraphen abzuschaffen und Sicherheitsforschung zu entkriminalisieren. Wer Lücken verantwortungsvoll meldet, darf nicht bestraft werden. Solange das so ist, werden Lücken lieber nicht gemeldet – und das ist letztlich gefährlicher als jeder Angriff. + +> 📝 **Speaker Notes** +> - Den Bogen zurück zu Folie 5 schlagen: genau weil § 202a existiert, ging der Hacker zum CCC statt direkt zu D-Trust +> - Responsible Disclosure erklären falls nötig: strukturierter Prozess, bei dem Forscher Lücken vertraulich melden können, ohne Strafverfolgung zu riskieren – viele große Firmen haben das (Google, Microsoft etc.) +> - Letzten Satz als Abschlussgedanken betonen und kurze Pause danach lassen + +--- + +## Folie 13 / 14 – Quellen & Ende + +Die Quellen findet ihr auf der Quellenfolie. Vielen Dank – ich bin gespannt auf eure Fragen. + +> 📝 **Speaker Notes** +> - Mögliche Fragen vorbereiten: +> - *„Wurde D-Trust bestraft?"* → Bis dato keine öffentlichen Bußgelder bekannt, Ermittlungen laufen +> - *„Wurde der Hacker angezeigt?"* → Strafanzeige wurde gestellt, Ausgang nicht öffentlich bekannt +> - *„Ist die ePA sicher?"* → Politisch umstritten, Kelber-Kritik als Aufhänger +> - *„Was ist IDOR genau?"* → URL-Parameter oder ID hochzählen, um auf fremde Datensätze zuzugreifen + +--- + +> **Zeithinweis:** ca. 20–25 Sek. pro Folie, Gesamtdauer ~5 Min. diff --git a/IT-Sicherheit/Zusammenfassungen/itsec1-3 - zusammenfassung.md b/IT-Sicherheit/Zusammenfassungen/itsec1-3 - zusammenfassung.md new file mode 100644 index 0000000..b8f5ee4 --- /dev/null +++ b/IT-Sicherheit/Zusammenfassungen/itsec1-3 - zusammenfassung.md @@ -0,0 +1,121 @@ +# IT-Sicherheit – Vorlesungszusammenfassung Foliensätze 1-3 +**Vorlesung von Gerrit Kalkbrenner | HWR Berlin | 2026** + +--- +## 1. Einleitung + +### Warum IT-Sicherheit wichtig ist + +IT-Sicherheit ist ein zentrales Thema der modernen Informationstechnologie. Fast täglich berichten Medien über Daten-Diebstahl, Spionage und Sabotage. Die Kernprobleme dabei: Ausgespähte Daten haben einen erheblichen finanziellen Wert, und viele Daten werden per Funk übertragen – und sind damit prinzipiell öffentlich zugänglich. + +### Warum IT-Sicherheit so schwierig ist + +IT-Sicherheit muss **vollständig** sein. Es gilt das Prinzip der Kette: Das schwächste Glied bestimmt die Gesamtsicherheit. Hinzu kommt das Problem fehlerhafter Software – die Zahl der veröffentlichten Sicherheitslücken ist von 4.383 im Jahr 2011 auf über 11.000 im Jahr 2017 gestiegen (Quelle: Hasso Plattner Institut). + +### Die 3 (+1) Ziele der Datensicherheit + +1. **Vertraulichkeit (Geheimhaltung)** – Nur Befugte dürfen Daten einsehen. +2. **Integrität (Unversehrtheit)** – Daten dürfen nicht unbefugt verändert werden. +3. **Verbindlichkeit (Nichtabstreitbarkeit)** – Vorgänge sind nachvollziehbar und verifizierbar. +4. **Verfügbarkeit** – Befugten ist der Zugriff jederzeit gewährleistet. + +### Angreifer und ihre Motivation + +Motivationen für Angriffe reichen von Spaß an der Technik, Neugierde und Herausforderung über Zerstörungswut und Geld bis hin zu nationaler Sicherheit. Zu den Angreifergruppen zählen Hacker, Unternehmens-Cracker, IT-Spione, IT-Terroristen, professionelle Kriminelle, Vandalen und sogar Behörden. + +### Telekommunikation und ihre Geschichte + +Kommunikation hat sich von Rauchzeichen, Signalfahnen und Lichtzeichen über die Telegraphie (das „viktorianische Internet") bis hin zu modernen Computernetzwerken entwickelt. Schon bei der Telegraphie war Abhörbarkeit ein Problem – sowohl auf Verbindungswegen als auch in Vermittlungsstationen. Als Gegenmaßnahmen wurden Beteiligte verbeamtet, Kabel regelmäßig geprüft und spezielle Projekte wie Polykom (verteiltes Regieren Berlin/Bonn mit evakuierten Glasfaserröhren) realisiert. + +### Standards und Schichtenmodell + +Wichtige Standards umfassen das ISO-OSI-7-Schichtenmodell, ITU-Standards (ehemals CCITT) sowie Internet-Standards (RFCs, Drafts, Internet Standards). Das OSI-Modell gliedert sich in sieben Schichten: Physical, Data Link, Network, Transport, Session, Presentation und Application. + +### Netzwerktypen + +Netzwerke werden nach Reichweite klassifiziert: von VLAN/PAN auf wenigen Metern über LAN (Raum/Gebäude/Campus) und MAN (Stadt) bis hin zu WAN (Land/Kontinent) und dem globalen Internet (GAN). + +--- +## 2. Kryptographische Primitiven + +### Grundprinzip + +Kryptographische Funktionen schaffen nicht per se Sicherheit – aber mit ihrer Hilfe kann ein sicheres System konstruiert werden. Sie bilden den „Baukasten" für alle Sicherheitsmechanismen. + +### Vertrauliche Nachrichten – Symmetrische Verschlüsselung + +Um Nachrichten vertraulich zu halten, wird ein **symmetrischer Verschlüsselungsalgorithmus (Chiffre)** verwendet. Dabei gibt es zwei zentrale Funktionen: **Encrypt** (Verschlüsseln) und **Decrypt** (Entschlüsseln). Beide Seiten verwenden denselben geheimen Schlüssel. + +### Authentische Nachrichten – MAC + +Ein **Message Authentication Code (MAC)** stellt sicher, dass eine Nachricht tatsächlich vom angegebenen Absender stammt. Dabei wird die Nachricht im Klartext zusammen mit einem chiffrierten Fingerabdruck übertragen. Der Empfänger kann mit dem gemeinsamen Schlüssel prüfen, ob die Nachricht authentisch ist. + +### Schlüsselaustausch – Diffie-Hellman + +Das zentrale Problem: Wie gelangen zwei Parteien zu einem gemeinsamen geheimen Schlüssel? Dieses Problem war lange ungelöst, bis in den 1970er Jahren die **asymmetrische Kryptografie** erfunden wurde. Beim **Diffie-Hellman-Verfahren** erzeugen Alice und Bob jeweils private Schlüssel, tauschen öffentliche Schlüssel aus und berechnen daraus ein gemeinsames Geheimnis – ohne dass ein Lauscher dieses rekonstruieren kann. + +### RSA – Asymmetrische Verschlüsselung + +Aufbauend auf Diffie-Hellman wurde **RSA** (Ron Rivest, Adi Shamir, Leonard Adelman) entwickelt. RSA arbeitet mit einem Schlüsselpaar und bietet zwei Funktionen: + +- **Verschlüsseln / Entschlüsseln** – Der Sender verschlüsselt mit dem öffentlichen Schlüssel des Empfängers; nur der Empfänger kann mit seinem privaten Schlüssel entschlüsseln. +- **Signieren / Signatur prüfen** – Der Sender signiert mit seinem privaten Schlüssel; jeder kann die Signatur mit dem öffentlichen Schlüssel des Senders verifizieren. + +### Kryptographische Hash-Funktionen + +Hash-Funktionen erzeugen einen digitalen „Fingerabdruck" einer Nachricht beliebiger Länge. Über eine **One-Way-Hashfunktion** wird eine kryptografische Prüfsumme berechnet, mit der die Integrität einer Nachricht überprüft werden kann. + +**Fazit:** Symmetrische Verschlüsselung, asymmetrische Verschlüsselung (RSA), MAC und Hash-Funktionen – mehr kryptographische Grundbausteine braucht man nicht. + +--- +## 3. Sicherheitsunterweisung – Praxisbeispiel Forschungszentrum Jülich + +### Motivation + +IT-Sicherheitsmaßnahmen werden oft als lästig und kontraproduktiv empfunden. Die Analogie zu Sicherheitsgurten im Auto zeigt jedoch: Auch wenn sie unbequem sind, schützen sie im Ernstfall. + +### Häufige Gegenargumente und Antworten + +- *„Ich surfe selten im Internet"* → Angriffe benötigen oft keine aktive Mitwirkung des Nutzers. +- *„Auf meinem Rechner ist kaum etwas drauf"* → Übernommene Systeme können als Sprungbrett für weitere Angriffe dienen. +- *„Meine Forschung wird ohnehin veröffentlicht"* → Unveröffentlichte Erkenntnisse, Forschungsmethoden und persönliche Daten sind dennoch schützenswert. + +### Grundwerte und Bedrohungen + +Die vier Grundwerte von IT-Ressourcen (Vertraulichkeit, Integrität, Verfügbarkeit, Verbindlichkeit) können durch verschiedene Bedrohungen gefährdet werden: vorsätzliche Manipulation, technisches Versagen, menschliches Fehlverhalten, personelle/organisatorische Mängel und Naturkatastrophen. + +### Risikobewertung + +Das Risiko R ergibt sich aus der Formel **R = S × W** (Schadenshöhe × Eintrittswahrscheinlichkeit). IT-Sicherheitsmaßnahmen zielen darauf ab, das Risiko auf ein tragbares Niveau zu reduzieren. Was als „tragbar" gilt, definiert der Eigentümer der Ressource. + +### BSI IT-Grundschutz + +Der IT-Grundschutzkatalog des BSI (Ausgabe 2011) umfasst 4.068 Seiten mit 583 Gefährdungen, 1.327 Maßnahmen und 85 Bausteinen. Die Kernidee: Standard-Sicherheitsmaßnahmen für standardisierte Systeme, wodurch für ca. 80 % der Systeme mit normalem Schutzbedarf keine aufwändige individuelle Risikoanalyse nötig ist. + +### Schutzklassen + +- **Sehr hoch:** Ausfallzeit unter 1 Stunde nicht tolerabel, finanzielle Schäden über 10 Mio. € +- **Hoch:** Erhebliche Beeinträchtigungen, Ausfallzeit 1–24 h, Schäden über 2 Mio. € +- **Normal:** Beeinträchtigungen tolerabel, Ausfallzeit über 24 h akzeptabel + +### IT-Grundschutzregeln im FZJ + +Das FZJ nutzt ein dreistufiges Konzept (IT-Sicherheitsrichtlinie → Grundschutzregeln → spezielle Regeln) mit 25 Regeln in sieben Kategorien: Infrastruktur, Organisation, Personal, Daten, Hardware/Software, Kommunikation und Notfallvorsorge. + +--- +## Themenübersicht der Veranstaltung + +Die Vorlesung behandelt insgesamt folgende Themen: Sichtweisen auf Cyber-Sicherheit, Kryptographie, Hardware- und Sicherheitsmodule, digitale Signaturen und Zertifikate, Identifikation und Authentifikation, Trusted Computing, Cyber-Sicherheit Frühwarnung, Firewall-Systeme, IPSec, TLS/SSL, DDoS-Angriffe, Email-Sicherheit, Blockchain, KI und Cyber-Sicherheit, Social Web Sicherheit sowie Wirtschaftlichkeit. + +## Bewertung + +- Klausur: 80 % +- Hausaufgaben: 10 % (z. B. Public-Private-Schlüsselpaar generieren) +- Kurzvortrag: 10 % (Bericht über einen Sicherheitsvorfall) + +## Literatur + +- David Wong: *Kryptografie in der Praxis* (dpunkt) +- Norbert Pohlmann: *Cyber-Sicherheit* (Springer) +- Claudia Eckert: *IT-Sicherheit* (De Gruyter) +- c't Magazin (regelmäßige Berichte, c't Security, c't DSGVO) diff --git a/IT-Sicherheit/Zusammenfassungen/itsec4 - zusammenfassung.md b/IT-Sicherheit/Zusammenfassungen/itsec4 - zusammenfassung.md new file mode 100644 index 0000000..1874eac --- /dev/null +++ b/IT-Sicherheit/Zusammenfassungen/itsec4 - zusammenfassung.md @@ -0,0 +1,319 @@ +# Datenforensik + +# 1. Grundlagen der Datenforensik + +## 1.1 Definition + +**Datenforensik** (auch IT-Forensik oder digitale Forensik) ist die systematische Untersuchung von IT-Systemen zur: + +- Feststellung eines Tatbestandes +- Identifizierung von Tätern +- Rekonstruktion eines Vorfalls +- gerichtsfesten Sicherung digitaler Beweise + +Sie ist ein interdisziplinäres Feld aus: + +- Informatik +- Netzwerktechnik +- Betriebssystemtechnik +- Recht +- Kriminalistik + +--- + +## 1.2 Zielsetzung + +Zentrale Ziele einer forensischen Untersuchung: + +- 🔎 **Rekonstruktion des Tathergangs** +- 👤 **Identifikation beteiligter Personen** +- ⏱ **Bestimmung des Tatzeitraums (Timeline)** +- 📦 **Ermittlung des Schadensumfangs** +- ⚖ **Gerichtsfeste Beweisführung** + +--- + +# 2. Arten von Computerkriminalität + +## 2.1 Klassische Delikte mit IT-Bezug + +- Betrug +- Erpressung +- Urheberrechtsverletzung +- Geheimnisverrat +- Verbreitung illegaler Inhalte + +## 2.2 Computerkriminalität im engeren Sinne + +- Ausspähen von Daten +- Abfangen von Daten +- Computerbetrug +- Datenveränderung +- Computersabotage +- Fälschung beweiserheblicher Daten + +--- + +# 3. Motivation von Tätern + +- 💰 finanzielle Interessen +- 🧠 technische Neugier +- 🧨 Rache oder Frustration +- 🏛 politische Motivation +- 🌍 staatlich organisierte Spionage + +--- + +# 4. Forensischer Untersuchungsprozess + +Die Untersuchung erfolgt strukturiert und nachvollziehbar. + +## 4.1 Standardprozess (SAP-Modell) + +1. **Identifizierung** +2. **Sicherstellung (Secure)** +3. **Analyse** +4. **Präsentation** + +--- + +# 5. Phase 1: Identifizierung + +Ziel: Feststellung, ob ein Sicherheitsvorfall vorliegt. + +### Aufgaben: + +- Dokumentation der vorgefundenen Situation +- Bestandsaufnahme betroffener Systeme +- Identifikation relevanter Datenquellen: + - Log-Dateien + - Server + - Endgeräte + - Netzwerkgeräte + - Cloud-Systeme + +### Leitfragen: + +- Wer hatte Zugriff? +- Wann trat der Vorfall auf? +- Welche Systeme sind betroffen? + +--- + +# 6. Phase 2: Sicherstellung von Beweisen + +## 6.1 Grundprinzipien + +- Minimale Veränderung der Originaldaten +- Lückenlose Dokumentation (Chain of Custody) +- Erstellung forensischer Kopien +- Sicherung der Integrität durch Hash-Werte + +## 6.2 Forensisches Duplikat + +- Bitweise 1:1-Kopie eines Datenträgers +- Keine logische Kopie! +- Einsatz von Write-Blockern +- Dokumentation von: + - Datum + - Uhrzeit + - beteiligte Personen + - verwendete Tools + +## 6.3 Integritätsnachweis + +- Bildung kryptographischer Hash-Werte (z. B. SHA-256) +- Vergleich vor und nach Analyse +- Sicherstellung der Unverändertheit + +--- + +# 7. Flüchtige vs. nicht-flüchtige Daten + +## 7.1 Flüchtige Daten (RAM) + +Vor Abschalten sichern: + +- angemeldete Benutzer +- laufende Prozesse +- Netzwerkverbindungen +- offene Dateien +- gespeicherte Schlüssel im Speicher + +Problem: +Ein einfaches Ausschalten zerstört diese Beweise. + +## 7.2 Nicht-flüchtige Daten + +- Festplatten +- SSD +- USB-Sticks +- Smartphones +- Cloud-Speicher + +--- + +# 8. Live-Response vs. Offline-Analyse + +## 8.1 Live-Response + +Analyse eines laufenden Systems. + +Vorteile: +- Sicherung flüchtiger Daten +- Erkennung von Rootkits + +Risiken: +- Veränderung des Systems +- Manipulation durch Schadsoftware + +## 8.2 Offline-Analyse + +- Untersuchung auf separatem Analyse-System +- Arbeit mit forensischem Image +- bevorzugte Methode bei gerichtlichen Verfahren + +--- + +# 9. Phase 3: Forensische Analyse + +## 9.1 Anforderungen an den Analysten + +- tiefgehende OS-Kenntnisse +- Verständnis von Dateisystemen +- Netzwerkforensik +- Kenntnisse aktueller Angriffstechniken +- Improvisationsfähigkeit + +## 9.2 Analysebereiche + +### Dateisystemanalyse +- gelöschte Dateien +- versteckte Dateien +- Zeitstempelanalyse (MAC-Times) + +### Log-Analyse +- Authentifizierungsversuche +- Administratorzugriffe +- ungewöhnliche Aktivitäten + +### Netzwerkforensik +- Analyse von Netzwerkverkehr +- Rekonstruktion von Datenströmen +- Identifikation externer Verbindungen + +### Malware-Analyse +- statische Analyse +- dynamische Analyse +- Reverse Engineering + +--- + +# 10. Timeline-Erstellung + +Erstellung einer chronologischen Ereigniskette: + +- Login-Zeiten +- Dateiänderungen +- Prozessstarts +- Netzwerkverbindungen + +Ziel: +Rekonstruktion des exakten Tathergangs. + +--- + +# 11. Phase 4: Aufbereitung und Präsentation + +## 11.1 Berichtserstellung + +Ein forensischer Bericht enthält: + +- Beschreibung des Vorfalls +- angewandte Methoden +- verwendete Werkzeuge +- Analyseergebnisse +- Schlussfolgerungen + +## 11.2 Gerichtsfeste Präsentation + +Erforderlich: + +- Nachvollziehbarkeit +- Reproduzierbarkeit +- Beweiskette +- Integritätsnachweise + +Beweise müssen: + +- unverändert +- dokumentiert +- überprüfbar sein + +--- + +# 12. Incident Response vs. Forensik + +## Incident Response + +- schnelle Wiederherstellung des Betriebs +- Schadensbegrenzung +- Schließen von Sicherheitslücken + +## Forensik + +- Täterermittlung +- gerichtliche Verwertung +- langfristige Ursachenanalyse + +--- + +# 13. Beweiskette (Chain of Custody) + +Dokumentiert: + +- Wer hatte wann Zugriff? +- Wo wurde das Beweismittel aufbewahrt? +- Welche Maßnahmen wurden durchgeführt? + +Fehlende Dokumentation kann Beweise unbrauchbar machen. + +--- + +# 14. Typische Fehler bei der Spurensicherung + +- vorschnelles Abschalten des Systems +- Arbeiten auf dem Originalsystem +- fehlende Hash-Werte +- unvollständige Dokumentation +- Vermischung von Incident Response und Forensik + +--- + +# 15. Moderne Herausforderungen + +- Verschlüsselte Datenträger +- Cloud-Umgebungen +- Container und virtuelle Maschinen +- Smartphones +- flüchtige Malware im RAM +- Anti-Forensik-Techniken + +--- + +# 16. Gesamtbedeutung + +Datenforensik ist: + +- technisch anspruchsvoll +- rechtlich sensibel +- organisatorisch komplex + +Sie bildet die Grundlage für: + +- Strafverfolgung +- interne Ermittlungen +- Compliance-Prüfungen +- IT-Sicherheitsverbesserungen + +In modernen IT-Infrastrukturen ist sie ein zentraler Bestandteil professioneller Sicherheitsarchitekturen. \ No newline at end of file diff --git a/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung extended.md b/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung extended.md new file mode 100644 index 0000000..c03f0e3 --- /dev/null +++ b/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung extended.md @@ -0,0 +1,577 @@ +# Zusammenfassung: Kryptographie + +**Vorlesung IT-Sicherheit – Gerrit Kalkbrenner, HWR Berlin, 2026** _Erweitert mit aktuellen Informationen und Diagrammen_ + +--- +## 1. Einführung + +Kryptographie ist eine moderne, mathematisch geprägte Wissenschaft mit einer Geschichte von über 3.000 Jahren. Bekannte historische Beispiele sind das Babington-Komplott (1586), das Zimmermann-Telegramm (Erster Weltkrieg) und die Enigma-Entschlüsselung im Zweiten Weltkrieg. Heute ist Kryptographie allgegenwärtig – in Mobilfunk, EC-Karten, SSL/TLS, Bitcoin, Wegfahrsperren und vielen weiteren Bereichen. + +> **Wichtig:** Kryptographie ≠ Sicherheit. Sie ist ein unverzichtbarer Baustein, aber kein vollständiger Ersatz für ein ganzheitliches Sicherheitskonzept. _(Quelle: Bart Preneel, „Cryptographic Algorithms and Protocols for Network Security", 2008)_ + +--- + +## 2. Grundlagen der Verschlüsselung + +### Begriffe + +|Begriff|Bedeutung| +|---|---| +|**Klartext** (Plaintext)|Die Originaldaten| +|**Schlüsseltext / Chiffrat** (Ciphertext)|Die transformierten, unlesbaren Daten| +|**Verschlüsselung**|Die mathematische Transformation| +|**Entschlüsselung**|Die Umkehrung der Transformation| +|**Kryptoanalyse**|Analyse eines Kryptosystems zur Bewertung seiner Stärke| +|**Steganographie**|Verbergen der _Existenz_ einer Information (z. B. digitale Wasserzeichen)| + +### Kryptographisches System (6-Tupel) + +Ein Kryptosystem wird formal als **(M, C, K_E, K_D, E, D)** beschrieben: + +``` +Klartext m ──► [ Verschlüsselung E(m, ke) ] ──► Chiffrat c + ▲ + Schlüssel ke + +Chiffrat c ──► [ Entschlüsselung D(c, kd) ] ──► Klartext m + ▲ + Schlüssel kd + +Bedingung: D( E(m, ke), kd ) = m +``` + +**Kerckhoffs-Prinzip:** Der Algorithmus darf öffentlich bekannt sein – die Sicherheit beruht allein auf der Geheimhaltung des Schlüssels. Ein Verschlüsselungsverfahren sollte mindestens **5 Jahre öffentlich diskutiert** werden, bevor es eingesetzt wird. + +### Kryptoanalyse-Strategien + +|Angriffsart|Was der Angreifer kennt|Stärke| +|---|---|---| +|**Ciphertext-only**|Nur den Schlüsseltext|Schwächster Angriff| +|**Known-plaintext**|Klartext-/Schlüsseltext-Paare|Mittel| +|**Chosen-plaintext**|Kann beliebige Klartexte verschlüsseln|Stärkster Angriff| +|**Brute Force**|Alle Schlüssel werden durchprobiert|Immer möglich| +|**Statistische Analyse**|Buchstaben-/Worthäufigkeiten im Chiffretext|Gegen schwache Verfahren| +|**Trial & Error**|Eingeschränkte Schlüsselräume (z. B. nur Wörter)|Gegen schlechte Schlüssel| + +> **Rainbow Tables** ermöglichen vorberechnete Brute-Force-Angriffe – Qualität der Schlüsselgenerierung ist entscheidend! + +### Sicherheitskategorien und Schlüssellängen + +- **Absolute Sicherheit:** Theoretisch unmöglich zu brechen (nur mit One-Time-Pad, OTP) +- **Praktische/Rechnerische Sicherheit:** Theoretisch brechbar, aber der Aufwand ist prohibitiv hoch + +**Brute-Force-Aufwand bei 10⁹ Versuchen/Sekunde:** + +``` +Schlüssellänge │ Mögliche Schlüssel │ Aufwand (Jahre) +───────────────┼────────────────────┼────────────────────── + 8 Bit │ 256 │ < 0,000001 + 40 Bit │ ~1,1 × 10¹² │ 0,00002 + 56 Bit │ ~7,2 × 10¹⁶ │ ~1,14 ← DES (veraltet!) + 64 Bit │ ~1,8 × 10¹⁹ │ ~292 + 128 Bit │ ~3,4 × 10³⁸ │ > 5 × 10²¹ ← AES-128 + 256 Bit │ ~1,2 × 10⁷⁷ │ > 10⁵⁹ ← AES-256 +``` + +> Aufgrund steigender Rechenleistung (und Quantencomputer) ist alle **10–15 Jahre** ein Algorithmenwechsel notwendig: DES 56 Bit (1977) → AES 128 Bit (2001) → AES 256 Bit (empfohlen für die nächsten ~20 Jahre) +> +> _Quelle: BSI TR-02102-1, Version 2026-01 – [bsi.bund.de](https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf)_ + +--- + +## 3. Elementarverschlüsselungen + +### Einmal-Schlüssel (One-Time-Pad, OTP) + +``` +Klartext: K R Y P T O L O G I E + ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ +Schlüssel: (zufällig, gleiche Länge, nur einmal verwenden!) + ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ XOR (mod 2) +Chiffrat: ? ? ? ? ? ? ? ? ? ? ? +``` + +- Das einzig **absolut sichere** Verfahren (mathematisch beweisbar – Shannon 1949) +- Schlüssel muss mindestens so lang wie die Nachricht sein +- Schlüssel darf **niemals wiederverwendet** werden +- Wurde für den „Heißen Draht" Washington–Moskau genutzt +- Im kommerziellen Einsatz unpraktisch (Schlüsselverteilungsproblem) + +### Monoalphabetische Substitution + +``` +Klartext: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z + ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ +Chiffre: G W X V L O A K U B C N D R M F H Y P Q T Z E I J S + +Beispiel: KRYPTOLOGIE → CYJFQMNMAUL +``` + +Jedes Zeichen wird durch ein **festes** anderes ersetzt. Leicht durch **Häufigkeitsanalyse** zu brechen: + +``` +Häufigkeit in Deutsch (Auszug): +E: 17,4% ████████████████████ +N: 9,8% ███████████ +I: 7,6% ████████ +S: 7,3% ████████ +R: 7,0% ███████ +A: 6,5% ███████ +... +``` + +### Polyalphabetische Substitution (Vigenère) + +``` +Klartext: K R Y P T O L O G I E +Schlüssel: 5 3 2 5 3 2 5 3 2 5 3 (wird wiederholt) + ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ +Chiffrat: O T Z T V P P Q H M G +``` + +Verwendet mehrere Alphabete (gesteuert durch einen Schlüssel). Verdeckt Häufigkeitsverteilungen besser als monoalphabetische Substitution, aber bei langen Texten durch Kasiski-Test und statistische Analyse brechbar. + +### Transpositionsverfahren + +``` +Zick-Zack (Tiefe 5), Klartext: L-A-B-O-R-F-Ü-R-V-E-R-T-E-I-L-T-E-S-Y-S-T-E-M-E + +L R L E + A Ü - I T T M + B F V E E S E + O - E T - Y + R R S + +→ Schlüsseltext: LRLE AÜ-IT TM BFVEESEД0-ET-Y-NRRSU +``` + +Die Zeichen werden **permutiert** (vertauscht), nicht ersetzt. Historisches Beispiel: Spartanische Skytale (~500 v. Chr.) + +--- + +## 4. Symmetrische Verschlüsselung (Private-Key) + +Sender und Empfänger verwenden **denselben geheimen Schlüssel**. + +``` + Geheimer Schlüssel K + │ │ + ▼ ▼ +Alice ──[m]──► [ E_K ] ──[c]──► [ D_K ] ──[m]──► Bob + Verschlüsseln Entschlüsseln +``` + +**Schlüsselverwaltungsproblem:** Bei _n_ Teilnehmern werden **n(n−1)/2** Schlüssel benötigt: + +- 12 Partner → 66 Schlüssel +- 100 Partner → 4.950 Schlüssel +- 1.000 Partner → 499.500 Schlüssel + +### Überblick: Symmetrische Algorithmen + +|Verfahren|Schlüssellänge|Blockgröße|Status| +|---|---|---|---| +|DES|56 Bit|64 Bit|❌ Veraltet (1998 in 22h gebrochen)| +|Triple-DES (2 Keys)|112 Bit|64 Bit|⚠️ Auslaufend| +|Triple-DES (3 Keys)|168 Bit|64 Bit|⚠️ Auslaufend| +|IDEA|128 Bit|64 Bit|✅ Als stark betrachtet| +|RC4|variabel|Strom|❌ Veraltet (gebrochen)| +|Blowfish|variabel|64 Bit|⚠️ Nicht mehr empfohlen| +|**AES-128**|**128 Bit**|**128 Bit**|✅ **Aktueller Standard**| +|**AES-256**|**256 Bit**|**128 Bit**|✅ **Empfohlen für Langzeitschutz**| + +### AES (Advanced Encryption Standard) – Aufbau einer Runde + +Entwickelt von Joan Daemen und Vincent Rijmen als „Rijndael", 2001 als FIPS 197 standardisiert. **Patentfrei**. + +**Rundenanzahl nach Schlüssel- und Blocklänge:** + +``` +Schlüssellänge │ 128 Bit │ 192 Bit │ 256 Bit +───────────────┼─────────┼─────────┼───────── + 128 Bit │ 10 │ 12 │ 14 + 192 Bit │ 12 │ 12 │ 14 + 256 Bit │ 14 │ 14 │ 14 +``` + +**Jede Runde in 4 Schritten (der interne Zustand ist eine 4×4-Byte-Matrix):** + +``` +┌──────────────────────────────────────────────────────────┐ +│ Runde i │ +│ │ +│ [4×4 Byte-Matrix] │ +│ │ │ +│ ▼ │ +│ 1. SubBytes – Jedes Byte durch S-Box ersetzen │ +│ (nichtlinear, basiert auf Galoisfeld GF(2⁸)) │ +│ │ │ +│ ▼ │ +│ 2. ShiftRows – Zeilen zyklisch verschieben │ +│ Zeile 0: keine Verschiebung │ +│ Zeile 1: 1 Byte nach links │ +│ Zeile 2: 2 Bytes nach links │ +│ Zeile 3: 3 Bytes nach links │ +│ │ │ +│ ▼ │ +│ 3. MixColumns – Spalten mit fester MDS-Matrix │ +│ multiplizieren (Diffusion, Galoisfeld GF(2⁸)) │ +│ [entfällt in der letzten Runde!] │ +│ │ │ +│ ▼ │ +│ 4. AddRoundKey – XOR mit Rundenschlüssel │ +│ (aus Key-Schedule erzeugt) │ +└──────────────────────────────────────────────────────────┘ +``` + +> **Warum ist AES sicher?** SubBytes + MixColumns liefern **Konfusion und Diffusion** (Shannon): Ein einzelnes geändertes Eingabebit beeinflusst nach 2 Runden statistisch alle 128 Ausgabebits (Lawineneffekt). _Quelle: NIST FIPS 197 – [csrc.nist.gov](https://csrc.nist.gov/pubs/fips/197/final)_ + +### AES-Betriebsmodi im Vergleich + +``` +ECB (Electronic Codebook) – NICHT empfohlen! +┌─────┐ ┌─────┐ ┌─────┐ +│ P₁ │ │ P₂ │ │ P₃ │ ← gleiche Blöcke +└──┬──┘ └──┬──┘ └──┬──┘ + │E(K) │E(K) │E(K) ← gleicher Schlüssel +└──┴──┘ └──┴──┘ └──┴──┘ +│ C₁ │ │ C₂ │ │ C₃ │ ← gleiche Chiffrate! Muster sichtbar +└─────┘ └─────┘ └─────┘ + +CBC (Cipher Block Chaining) – Verkettung +IV──►XOR◄────────────────────────────── + │P₁ ┌──►XOR◄────────────── + ▼ │ │P₂ ┌──►XOR + E(K)────►C₁┘ ▼ │ │P₃ + E(K)────►C₂──┘ ▼ + E(K)────►C₃ + +GCM (Galois/Counter Mode) – Authenticated Encryption +Counter: CTR₀ CTR₁ CTR₂ CTR₃ ← Zähler, eindeutig pro Nachricht + │E(K) │E(K) │E(K) │E(K) + ▼ ▼ ▼ ▼ + Auth XOR XOR XOR XOR + tag P₁►C₁ P₂►C₂ P₃►C₃ + └────GHASH────────► Auth-Tag + (Integrität + Vertraulichkeit in einem Schritt) +``` + +**Modus-Empfehlungen laut BSI TR-02102-1 (2026-01):** + +|Modus|Vertraulichkeit|Integrität|BSI-Status|Einsatz| +|---|---|---|---|---| +|ECB|⚠️ Schwach|❌|❌ Nicht empfohlen|–| +|CBC|✅|❌ nur mit MAC|⚠️ Mit HMAC|Ältere Systeme| +|CFB|✅|❌ nur mit MAC|⚠️ Mit HMAC|Zeichenorientiert| +|OFB|✅|❌ nur mit MAC|⚠️ Mit HMAC|Fehleranfällige Kanäle| +|CTR|✅|❌ nur mit MAC|⚠️ Mit HMAC|Massendaten, ZIP| +|**GCM**|✅|✅ **(AEAD)**|✅ **Bevorzugt**|TLS, IPSec, SSH| + +_Quelle: BSI TR-02102-1 – [bsi.bund.de](https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf)_ + +--- + +## 5. Asymmetrische Verschlüsselung (Public-Key) + +### Grundidee: Das Briefkasten-Prinzip + +``` + Öffentlicher Schlüssel (frei verfügbar) + │ + ▼ +Alice ──[m]──► [ E_pub(B) ] ──[c]──► Bob ──► [ D_priv(B) ] ──[m]► + ▲ + Nur Bob kennt seinen privaten Schlüssel! + +Schlüsselproblem: n Partner → nur n Schlüsselpaare (statt n(n-1)/2) +``` + +Der private Schlüssel ist aus dem öffentlichen **nicht in vertretbarer Zeit ableitbar** – basiert auf mathematisch schwer lösbaren Problemen (**One-Way-Trapdoor-Funktionen**). + +### Digitale Signatur + +``` +Signieren (Sender Alice): Verifizieren (Empfänger Bob): + +Dokument ──► Hash ──► h Dokument ──► Hash ──► h' + │ │ + priv(A) ▼ pub(A) ▼ + E(h) = Signatur ──────────► D(Sig) = h'' + + Gültig wenn: h' == h'' +``` + +- Entspricht einem digitalen Äquivalent zur handschriftlichen Unterschrift +- Setzt eine **Public-Key-Infrastruktur (PKI)** mit Zertifizierungsstellen (CA/Trustcenter) voraus + +### RSA (Rivest, Shamir, Adleman, 1978) + +**Schlüsselgenerierung:** + +``` +1. Wähle zwei große Primzahlen p und q +2. Berechne: n = p × q (Modulus) +3. Berechne: φ(n) = (p-1)(q-1) +4. Wähle e mit: ggT(e, φ(n)) = 1 (öffentlicher Exponent, oft 65537) +5. Berechne d mit: e × d ≡ 1 (mod φ(n)) (privater Exponent) + +Öffentlicher Schlüssel: (e, n) +Privater Schlüssel: (d, n) +``` + +**Ver- und Entschlüsselung:** + +``` +Verschlüsseln: c = mᵉ mod n +Entschlüsseln: m = cᵈ mod n + +Beispiel (vereinfacht, p=61, q=53, n=3233, e=17, d=2753): + m = 123 → c = 123¹⁷ mod 3233 = 855 + c = 855 → m = 855²⁷⁵³ mod 3233 = 123 ✓ +``` + +**Sicherheit basiert auf:** Schwierigkeit der Primfaktorzerlegung großer Zahlen. + +**Aktuelle Schlüssellängen-Empfehlungen (2024–2026):** + +``` +Schlüssellänge │ Symmetr. Äquivalenz │ BSI │ NIST +───────────────┼─────────────────────┼──────────────┼────────────── + 1024 Bit │ ~80 Bit │ ❌ Verboten │ ❌ Seit 2013 + 2048 Bit │ ~112 Bit │ ⚠️ bis 2026 │ ⚠️ bis 2030 + 3000 Bit │ ~128 Bit │ ✅ Minimum │ ✅ ab 2030 + 4096 Bit │ ~140 Bit │ ✅ Empfohlen │ ✅ Empfohlen +``` + +_Quelle: BSI TR-02102-1 (2026-01) – [bsi.bund.de](https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf)_ + +### Diffie-Hellman Schlüsselaustausch (1976) + +Ermöglicht zwei Parteien, über einen **unsicheren Kanal** ein gemeinsames Geheimnis zu vereinbaren – ohne es vorher ausgetauscht zu haben. + +``` +Öffentlich bekannt: Primzahl p, Generator g + +Alice Bob +───── ─── +Wählt geheimes a Wählt geheimes b +A = gᵃ mod p ────────────────────► + ◄─────────────────── B = gᵇ mod p +K = Bᵃ mod p = gᵃᵇ mod p K = Aᵇ mod p = gᵃᵇ mod p + └────── Gemeinsames Geheimnis K ──────┘ + +Lauscher sieht: g, p, A, B → kann K NICHT effizient berechnen +(Diskretes-Logarithmusproblem) +``` + +**ECDH (Elliptic Curve Diffie-Hellman):** Gleiches Prinzip auf elliptischen Kurven – gleiche Sicherheit bei **viel kleineren Schlüsseln** (256-Bit ECDH ≈ 3072-Bit klassisches DH). In TLS 1.3 ist **ECDHE** (ephemeral) der Standard für den Schlüsselaustausch – neue Schlüssel pro Sitzung garantieren **Perfect Forward Secrecy**. + +### Hybridverschlüsselung in der Praxis (TLS 1.3) + +In der Praxis werden symmetrische und asymmetrische Verfahren kombiniert: + +``` +TLS 1.3 Handshake (vereinfacht): + +Client Server +────── ────── +1. ClientHello ──────────────────► + (ECDHE Public Key, + unterstützte Cipher Suites) + +2. ◄─────────────── ServerHello + (ECDHE Public Key, + gewählte Cipher Suite, + Zertifikat + Signatur) + +3. Beide berechnen: gemeinsames Geheimnis via ECDHE + → Sitzungsschlüssel für AES-GCM (symmetrisch) + +4. Alle weiteren Daten: AES-256-GCM (schnell, AEAD) + +Asymmetrisch (langsam) → nur für Schlüsselaustausch + Authentifizierung +Symmetrisch (schnell) → für alle Nutzdaten +``` + +_Quelle: Cloudflare Blog zu RFC 8446 – [blog.cloudflare.com](https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/)_ + +--- + +## 6. One-Way-Hashfunktionen + +### Grundprinzip + +``` +Beliebig langer Input M Fester kurzer Output h +──────────────────────► H(M) ──────────────────────► +"Hamlet" (200.000 Zeichen) a89de23fede8... (256 Bit) +"Hamiet" (1 Buchstabe anders) 38fe38aa9c2d... (256 Bit, komplett anders!) + └── Lawineneffekt +``` + +**Drei Sicherheitseigenschaften:** + +1. **Einwegfunktion:** `h = H(M)` leicht berechnen; aus `h` das `M` finden – praktisch unmöglich +2. **Zweites Urbild:** Zu gegebenem `M` kein anderes `M'` finden mit `H(M) = H(M')` +3. **Kollisionsresistenz:** Kein beliebiges Paar `(M, M')` mit `H(M) = H(M')` finden + +### Das Geburtstagsparadox + +``` +Wie viele Menschen braucht man, damit 2 am gleichen Tag +Geburtstag haben (p > 50%)? +→ Nur 23 Menschen! (bei 365 Tagen) + +Übertragen auf Hashfunktionen: +Bei n-Bit-Hashwert genügen ~2^(n/2) Versuche für eine Kollision. + +Beispiel: 60-Bit-Hash → nur 2³⁰ ≈ 10⁹ Versuche! +→ Hashwerte müssen länger als symmetrische Schlüssel sein + (Faustregel: mindestens 2× die gewünschte Sicherheit in Bit) +``` + +### Wichtige Hashfunktionen + +|Algorithmus|Hashwert|Konstruktion|Status| +|---|---|---|---| +|MD5|128 Bit|Merkle-Damgård|❌ Gebrochen (Kollisionen in Sekunden)| +|SHA-1|160 Bit|Merkle-Damgård|❌ Gebrochen (SHAttered 2017, ~63 USD/GPU)| +|**SHA-256**|**256 Bit**|Merkle-Damgård|✅ **Standard**| +|**SHA-512**|**512 Bit**|Merkle-Damgård|✅ **Standard**| +|**SHA3-256**|**256 Bit**|Keccak/Sponge|✅ **Empfohlen (FIPS 202)**| +|RIPEMD-160|160 Bit|Merkle-Damgård|⚠️ Nur noch in Bitcoin| + +> **Warum SHA-1 gebrochen ist:** Google und CWI Amsterdam erzeugten 2017 zwei verschiedene PDF-Dateien mit **identischem SHA-1-Hash** (SHAttered-Angriff). SHA-1 ist für alle Sicherheitsanwendungen verboten. _Quelle: [shattered.io](https://shattered.io)_ + +> **SHA-256 vs. SHA3-256:** SHA-256 basiert auf der Merkle-Damgård-Konstruktion (anfällig für Length-Extension-Angriffe ohne HMAC); SHA-3/Keccak nutzt die **Sponge-Konstruktion** und ist immun dagegen. Beide sind aktuell sicher und vom BSI empfohlen. _Quelle: NIST FIPS 202 – [csrc.nist.gov](https://csrc.nist.gov/pubs/fips/202/final)_ + +### Message Authentication Code (MAC) + +``` +Normale Hashfunktion: MAC (Keyed Hash): +H(M) → jeder kann prüfen HMAC(K, M) → nur Schlüsselinhaber kann prüfen + +HMAC-Konstruktion (RFC 2104): +HMAC(K, M) = H( (K ⊕ opad) ‖ H( (K ⊕ ipad) ‖ M ) ) + +ipad = 0x36363636... (Schlüssellänge) +opad = 0x5C5C5C5C... (Schlüssellänge) +``` + +- **CBC-MAC:** Letzter Block einer CBC-Verschlüsselung als Prüfsumme – Standard im Bankwesen +- **HMAC:** Internet-Standard RFC 2104, z. B. in IPSec, TLS (für ältere Modi), SSH + +--- + +## 7. Aktueller Stand & Ausblick: Post-Quanten-Kryptographie + +> **Neu ab 2024 – nicht Teil der Vorlesung, aber prüfungsrelevant für die Praxis!** + +### Die Quantenbedrohung + +``` +Klassische Computer: + Brute Force RSA-2048 → ~300 Billionen Jahre + +Quantencomputer (Shors Algorithmus): + RSA-2048 brechen → Stunden bis Tage + (benötigt ~1 Mio. logische Qubits – noch nicht erreicht) + +Auswirkung: + RSA, ECDSA, ECDH, DH → VOLLSTÄNDIG GEBROCHEN durch Shor + AES-128 → ~64 Bit Sicherheit (Grover-Algorithmus) + AES-256 → ~128 Bit Sicherheit ✅ weiterhin sicher + SHA-256 → ~128 Bit Sicherheit ✅ weiterhin sicher +``` + +### NIST Post-Quanten-Standards (August 2024) + +Im **August 2024** veröffentlichte NIST die ersten drei finalisierten Post-Quanten-Standards: + +|Standard|Algorithmus|Typ|Mathematisches Problem| +|---|---|---|---| +|**FIPS 203**|ML-KEM (Kyber)|Schlüsselkapselung|Module-LWE (Gitter)| +|**FIPS 204**|ML-DSA (Dilithium)|Digitale Signatur|Module-LWE (Gitter)| +|**FIPS 205**|SLH-DSA (SPHINCS+)|Digitale Signatur|Hashfunktionen| + +_Quelle: NIST – [nist.gov](https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards)_ + +### BSI-Strategie: Hybrid ist Pflicht + +Das BSI verfolgt einen konservativeren Ansatz als NIST: **PQC-Verfahren müssen mit klassischen Verfahren kombiniert werden** (Hybridmodus), bis ausreichend Vertrauen aufgebaut ist. + +``` +Hybride Verschlüsselung (BSI-Empfehlung): + +Schlüsselkapselung: ECDH (P-256) + ML-KEM-768 + └────────────────────► kombiniertes Geheimnis + → AES-256-GCM + +Signatur: ECDSA (P-256) + ML-DSA-65 + (beide Signaturen werden erstellt und verifiziert) +``` + +**Migrationsfristen laut BSI TR-02102-1 (2026-01):** + +``` +Heute (2026) 2030 2032 2035 + │ │ │ │ + ▼ ▼ ▼ ▼ +───────────────────────────────────────────────────────────── + Klassische Verfahren ████████ + (RSA, ECDH) allein ████████████████████████ + + Hybride Verfahren ████████████████████ + (PQC + klassisch) ████████████████████████████████████ + + Reine PQC-Verfahren ████████████████████████ + +Kritische Infrastruktur muss bis 2030 migriert sein! +``` + +_Quelle: BSI TR-02102-1 Version 2026-01 – [bsi.bund.de](https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/TechGuidelines/TG02102/BSI-TR-02102-1.pdf)_ + +> **„Harvest Now, Decrypt Later" (HNDL):** Staatliche Akteure speichern heute bereits verschlüsselte Kommunikation, um sie nach Verfügbarkeit eines Quantencomputers zu entschlüsseln. Daten mit **langfristiger Vertraulichkeitsanforderung müssen JETZT** mit PQC geschützt werden! + +--- + +## 8. Zusammenfassung + +``` +Kryptographie-Überblick: + +ELEMENTAR SYMMETRISCH ASYMMETRISCH HASH +─────────── ─────────── ──────────── ──── +OTP (absolut AES-256-GCM ✅ RSA ≥ 3000 Bit ✅ SHA-256 ✅ +sicher, aber (BSI-Empfehlung) ECDH (P-256/ SHA3-256 ✅ +unpraktisch) X25519) ✅ + DES ❌ MD5 ❌ +Substitution RC4 ❌ RSA-1024 ❌ SHA-1 ❌ +(historisch) Triple-DES ⚠️ +Transposition ► Hybridverschlüsselung +(historisch) in TLS 1.3, IPSec, ... + + ZUKUNFT: Post-Quanten-Kryptographie + ML-KEM + ECDH (hybrid) ✅ (BSI ab 2026 empfohlen) +``` + +**Kernprinzipien der Vorlesung:** + +- Die Sicherheit hängt **niemals** von der Geheimhaltung des Algorithmus ab, sondern **ausschließlich** von der Geheimhaltung des privaten Schlüssels +- Kosten des Brechens müssen **höher** sein als der Wert der geschützten Information +- Zeitaufwand zum Knacken muss **länger** sein als das Interesse an der Information +- Empfehlungen nationaler Behörden beachten (BSI, NIST) – und alle **10–15 Jahre** Algorithmen überprüfen + +--- + +## Weiterführende Ressourcen + +|Ressource|Link| +|---|---| +|BSI Technische Richtlinien (TR-02102)|[bsi.bund.de](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/Technische-Richtlinien/TR-nach-Thema-sortiert/tr02102/tr02102_node.html)| +|NIST Kryptographie-Standards|[csrc.nist.gov](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines)| +|NIST Post-Quanten-Standards|[nist.gov/pqc](https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards)| +|CrypTool (interaktives Lerntool)|[cryptool.de](https://www.cryptool.de)| +|Bundesnetzagentur|[bundesnetzagentur.de](https://www.bundesnetzagentur.de)| +|SHAttered (SHA-1 gebrochen)|[shattered.io](https://shattered.io)| +|TLS 1.3 erklärt (Cloudflare)|[blog.cloudflare.com](https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/)| \ No newline at end of file diff --git a/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung.md b/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung.md new file mode 100644 index 0000000..4ca5570 --- /dev/null +++ b/IT-Sicherheit/Zusammenfassungen/itsec5 - zusammenfassung.md @@ -0,0 +1,202 @@ +# Zusammenfassung: Kryptographie + +**Vorlesung IT-Sicherheit – Gerrit Kalkbrenner, HWR Berlin, 2026** + +--- +## 1. Einführung + +Kryptographie ist eine moderne, mathematisch geprägte Wissenschaft mit einer Geschichte von über 3.000 Jahren. Bekannte historische Beispiele sind das Babington-Komplott (1586), das Zimmermann-Telegramm (Erster Weltkrieg) und die Enigma-Entschlüsselung im Zweiten Weltkrieg. Heute ist Kryptographie allgegenwärtig – in Mobilfunk, EC-Karten, SSL/TLS, Bitcoin, Wegfahrsperren und vielen weiteren Bereichen. + +> **Wichtig:** Kryptographie ≠ Sicherheit. Sie ist ein unverzichtbarer Baustein, aber kein vollständiger Ersatz für ein ganzheitliches Sicherheitskonzept. + +--- + +## 2. Grundlagen der Verschlüsselung + +### Begriffe + +- **Klartext (Plaintext):** Die Originaldaten +- **Schlüsseltext / Chiffrat (Ciphertext):** Die transformierten, unlesbaren Daten +- **Verschlüsselung / Entschlüsselung:** Die mathematische Transformation und ihre Umkehrung + +### Kryptographisches System (6-Tupel) + +Ein Kryptosystem wird formal als **(M, C, KE, KD, E, D)** beschrieben: + +- M = Klartextnachrichten, C = Kryptogramme +- KE / KD = Verschlüsselungs-/Entschlüsselungsschlüssel +- E / D = Ver-/Entschlüsselungsfunktion + +**Grundprinzip (Kerckhoffs-Prinzip):** Der Algorithmus darf öffentlich bekannt sein – die Sicherheit beruht allein auf der Geheimhaltung des Schlüssels. + +### Kryptoanalyse-Strategien + +|Angriffsart|Beschreibung| +|---|---| +|**Ciphertext-only**|Nur der Schlüsseltext ist bekannt| +|**Known-plaintext**|Klartext-/Schlüsseltext-Paare verfügbar| +|**Chosen-plaintext**|Angreifer kann beliebige Klartexte verschlüsseln| +|**Brute Force**|Vollständige Schlüsselsuche (alle möglichen Schlüssel)| +|**Statistische Methoden**|Häufigkeitsanalyse von Buchstaben/Wörtern| +|**Trial & Error**|Reduktion des Schlüsselraums durch Teiltreffer| + +### Sicherheitskategorien + +- **Absolute Sicherheit:** Theoretisch unmöglich zu brechen (nur mit Einmal-Schlüssel/OTP) +- **Praktische/Rechnerische Sicherheit:** Brechen ist theoretisch möglich, aber praktisch nicht durchführbar + +**Schlüssellängen und Brute-Force-Aufwand (Annahme: 10⁹ Versuche/s):** + +|Schlüssellänge (Bit)|Aufwand (Jahre)| +|---|---| +|56|~1,14| +|64|~292| +|128|> 5 × 10²¹| +|256|> 10⁵⁹| + +Aufgrund steigender Rechenleistung und Quantencomputer ist alle **10–15 Jahre** ein Wechsel der Algorithmen notwendig (64 Bit → 128 Bit AES → 256 Bit AES). + +--- + +## 3. Elementarverschlüsselungen + +### Einmal-Schlüssel (One-Time-Pad, OTP) + +- Absolut sicheres Verfahren +- Schlüssel muss mindestens so lang wie die Nachricht sein +- Klartext und Schlüssel werden bitweise XOR-verknüpft +- Unpraktisch für den kommerziellen Einsatz (Schlüsselverteilungsproblem) + +### Monoalphabetische Substitution + +- Jedes Klartextzeichen wird durch ein festes anderes Zeichen ersetzt +- Leicht durch **Häufigkeitsanalyse** zu brechen (z. B. E = 17,4 % in Deutsch) + +### Polyalphabetische Substitution (Vigenère) + +- Verwendet mehrere Alphabete, gesteuert durch einen Schlüssel +- Verdeckt Häufigkeiten besser, aber bei langen Texten durch statistische Analyse angreifbar + +### Transpositionsverfahren + +- Zeichen des Klartextes werden nach fester Regel permutiert (vertauscht), nicht ersetzt +- Beispiele: Zick-Zack-Verfahren, spartanische Skytale (500 v. Chr.) + +--- + +## 4. Symmetrische Verschlüsselung (Private-Key) + +Sender und Empfänger verwenden denselben geheimen Schlüssel. Nachteil: Bei _n_ Teilnehmern werden **n(n−1)/2** Schlüssel benötigt (z. B. 66 Schlüssel bei 12 Teilnehmern). + +### Wichtige Algorithmen + +|Verfahren|Schlüssellänge|Status| +|---|---|---| +|DES|56 Bit|Veraltet, nicht mehr sicher| +|Triple DES (3-Keys)|168 Bit|Übergangsverfahren| +|IDEA|128 Bit|Als stark betrachtet| +|RC2, RC4, RC5|variabel|Teils veraltet| +|**AES (Rijndael)**|128 / 192 / 256 Bit|Aktueller Standard| + +### AES (Advanced Encryption Standard) + +- Entwickelt von Joan Daemen und Vincent Rijmen (patentfrei) +- Blockgröße: 128, 192 oder 256 Bit; Schlüssellänge: 128, 192 oder 256 Bit +- Anzahl der Runden: 10, 12 oder 14 (je nach Block-/Schlüssellänge) +- Jede Runde besteht aus vier Transformationen: + 1. **ByteSub** – nichtlineare Byte-Substitution (S-Box) + 2. **ShiftRow** – zyklisches Verschieben der Zeilen + 3. **MixColumn** – Spaltenmultiplikation über einem Galoisfeld + 4. **AddRoundKey** – XOR-Verknüpfung mit dem Rundenschlüssel + +### Betriebsmodi + +|Modus|Merkmal|Einsatz| +|---|---|---| +|**ECB**|Jeder Block unabhängig; identischer Klartext = identischer Schlüsseltext|Nur für spezielle Anwendungen| +|**CBC**|Verkettung mit Vorgängerblock; benötigt Initialisierungsvektor|Allgemein| +|**CFB**|Stromchiffre aus Blockchiffre; begrenzte Fehlerfortpflanzung; selbstsynchronisierend|Zeichenorientierte Übertragung| +|**OFB**|Keine Fehlerfortpflanzung; nicht selbstsynchronisierend|Störungsanfällige Kanäle (z. B. Satellit)| +|**CTR**|Parallelisierbar; wahlfreier Zugriff|Massendaten (Festplatte, ZIP)| +|**GCM**|Authenticated Encryption (AEAD); hoher Durchsatz|TLS, IPSec, SSH, IEEE 802.11| + +--- + +## 5. Asymmetrische Verschlüsselung (Public-Key) + +### Grundidee + +Jeder Teilnehmer besitzt ein Schlüsselpaar: + +- **Öffentlicher Schlüssel (Public Key):** Frei zugänglich, zum Verschlüsseln +- **Privater Schlüssel (Private Key):** Geheim, zum Entschlüsseln + +Der private Schlüssel ist aus dem öffentlichen Schlüssel **nicht in vertretbarer Zeit ableitbar** (basiert auf mathematisch schwer lösbaren Problemen – sog. **One-Way-Trapdoor-Funktionen**). + +### RSA (Rivest, Shamir, Adleman, 1978) + +- Basiert auf der Schwierigkeit, das Produkt zweier großer Primzahlen zu faktorisieren +- Nutzbar für Verschlüsselung, digitale Signatur und Schlüsselmanagement +- Verschlüsselung: `c = m^e mod n` | Entschlüsselung: `m = c^d mod n` +- Empfohlene Schlüssellänge: ≥ 2048 Bit (1024 Bit gilt heute als unsicher) + +### Digitale Signatur + +- Mit dem **privaten Schlüssel** signiert → mit dem **öffentlichen Schlüssel** verifizierbar +- Entspricht einem digitalen Äquivalent zur handschriftlichen Unterschrift +- Setzt eine **Public-Key-Infrastruktur (PKI)** mit Zertifizierungsstellen (Trustcenter) voraus + +### Diffie-Hellman (1976) + +- Erster Public-Key-Algorithmus; dient **nur** dem gesicherten Schlüsselaustausch +- Keine direkte Verschlüsselung und keine Authentifizierung der Partner +- Grundlage für hybride Verschlüsselungsverfahren + +--- + +## 6. One-Way-Hashfunktionen + +### Grundlagen + +Eine Hashfunktion H bildet eine beliebig lange Nachricht M auf einen **Hashwert h fester Länge** ab: + +- `h = H(M)` – einfach zu berechnen +- Umkehrung: praktisch unmöglich (`M = f(h)` ist nicht berechenbar) +- **Kollisionsresistenz:** Es ist praktisch unmöglich, zwei verschiedene Nachrichten M und M' mit `H(M) = H(M')` zu finden + +### Geburtstagsproblem + +Durch das Geburtstagsparadox genügen statistisch ~2^(n/2) Versuche, um eine Kollision bei einer n-Bit-Hashfunktion zu finden → Hashwerte sollten deutlich länger als Schlüssellängen symmetrischer Verfahren sein (mind. 160 Bit). + +### Wichtige Hashfunktionen + +|Algorithmus|Hashwertlänge|Status| +|---|---|---| +|MD5|128 Bit|Veraltet – nicht mehr verwenden!| +|SHA-1|160 Bit|Veraltet| +|SHA-3 (Keccak)|224 / 256 / 384 / 512 Bit|Aktueller NIST-Standard (seit 2012)| +|RIPEMD|160 Bit|EU-Projekt RIPE (1992)| + +### Message Authentication Code (MAC) + +- Hashfunktion **mit geheimem Schlüssel** → nur der Schlüsselinhaber kann den Hashwert verifizieren +- Gewährleistet **Authentizität** (ohne Geheimhaltung des Inhalts) +- **CBC-MAC:** Basiert auf AES/DES im CBC-Modus; weit verbreitet im Bankwesen +- **HMAC:** Internet-Standard (RFC 2104), z. B. in IPSec; kombiniert Hashfunktion mit geheimem Schlüssel über XOR-Verknüpfungen mit ipad/opad + +--- + +## 7. Zusammenfassung + +- Kryptographische Verfahren sind die **Basis der meisten Sicherheitssysteme** +- Die Sicherheit hängt **niemals** von der Geheimhaltung des Algorithmus ab, sondern **ausschließlich** von der Geheimhaltung des privaten Schlüssels +- Algorithmen sollten so gewählt werden, dass: + - die **Kosten des Brechens** höher sind als der Wert der geschützten Informationen + - der **zeitliche Aufwand** länger ist als das Interesse an den Informationen +- Empfehlungen von Experten und Behörden beachten (in Deutschland: **BSI**, **Bundesnetzagentur**) + +**Weiterführende Ressourcen:** + +- [www.bsi.de](https://www.bsi.de) +- [www.bundesnetzagentur.de](https://www.bundesnetzagentur.de) +- [www.cryptool.de](https://www.cryptool.de) \ No newline at end of file diff --git a/IT-Sicherheit/Zusammenfassungen/itsec6-11 - zusammenfassung.md b/IT-Sicherheit/Zusammenfassungen/itsec6-11 - zusammenfassung.md new file mode 100644 index 0000000..ad065ed --- /dev/null +++ b/IT-Sicherheit/Zusammenfassungen/itsec6-11 - zusammenfassung.md @@ -0,0 +1,815 @@ +# IT-Sicherheit – Ausführliche Zusammenfassung (Vorlesungen 5–9) + +--- +## 1. Hardware-Sicherheitsmodule (HSM) +### 1.1 Grundidee +Ein Hardware-Sicherheitsmodul ist ein physisch geschützter Bereich (typischerweise ein Chip oder ein eigenständiges Gerät), dessen Aufgabe es ist, sicherheitsrelevante Informationen vor dem Auslesen und vor Manipulation zu schützen. Der entscheidende Vorteil gegenüber reiner Software: Die geheimen Daten verlassen die Hardware nie. Alle kryptographischen Operationen finden direkt innerhalb des Moduls statt. + +Zu den sicherheitsrelevanten Informationen gehören drei Kategorien: + +- **Geheime Schlüssel** – für Verschlüsselung, Authentisierung und digitale Signaturen +- **Programme** – die weder kopiert noch modifiziert werden dürfen +- **Daten** – etwa Transaktionsdaten, die einen monetären oder rechtlichen Wert repräsentieren + +In der Vorlesung werden drei Klassen von HSMs behandelt, die sich in Einsatzzweck, Sicherheitsniveau und Kosten unterscheiden: Smartcards, TPM und HLSM. + +--- + +### 1.2 Smartcards + +#### Aufbau + +Eine Smartcard ist ein vollständiges IT-System im Format einer EC-Karte (86 × 54 × 0,76 mm). Trotz dieser winzigen Abmessungen enthält sie alle wesentlichen Komponenten eines Computers: + +- **CPU** – führt Berechnungen und kryptographische Operationen aus +- **RAM und ROM** – flüchtiger Arbeitsspeicher bzw. permanenter Speicher mit dem Betriebssystem +- **EEPROM/Flash** – hier werden die geheimen Schlüssel (z. B. ein privater RSA-Schlüssel), Passwörter und persönliche Daten dauerhaft und sicher gespeichert +- **I/O-Schnittstelle** – die gesamte Kommunikation mit der Außenwelt läuft über einen einzigen Kanal (Kontaktflächen oder kontaktloses Interface) +- **Krypto-Prozessor** – ein optionaler, auf kryptographische Berechnungen spezialisierter Co-Prozessor + +#### Sicherheitsdienste + +Smartcards bieten dem Nutzer eine breite Palette an Sicherheitsdienstleistungen: + +- Laden und Entladen von Werteinheiten für elektronisches Bezahlen +- Kryptographische Anwendungen wie das Erstellen digitaler Signaturen +- Identifikation und Authentisierung des Nutzers (Aktivierung der Karte per PIN) +- Single-Sign-On-Anwendungen, bei denen die Karte Passwörter und PINs für verschiedene Dienste verwaltet +- Sicheres Speichern von Daten direkt auf der Karte +- Lesen von gespeicherten Servicedaten und Ausführung sonstiger Rechenoperationen + +#### Hardware-Sicherheitsmechanismen + +Die physische Sicherheit einer Smartcard wird durch eine Reihe von Hardware-Maßnahmen gewährleistet: + +- **Unter- und Überspannungsdetektion** – erkennt Versuche, den Chip durch manipulierte Stromversorgung in undefinierten Zuständen zu bringen +- **Erkennung niedriger Frequenzen** – verhindert, dass der Chip absichtlich langsam getaktet wird, um einzelne Operationen beobachtbar zu machen +- **Gescramblete Busse** – die internen Datenleitungen sind verwürfelt, so dass ein Angreifer selbst bei physischem Zugriff keine sinnvollen Daten auslesen kann +- **Sensoren** für Licht, Temperatur und andere Umgebungsparameter – erkennen, wenn jemand den Chip aufdeckt oder unter extremen Bedingungen betreibt +- **Passivierungs- und Metallisierungsschichten** über Bus- und Speicherstrukturen oder der gesamten CPU – physische Schutzschichten, die Mikroskopie und Probing erschweren +- **Hardware-Zufallszahlengenerator** – erzeugt echte Zufallszahlen statt nur pseudozufälliger Werte +- **Spezielle CPU-Befehle** für kryptographische Funktionen und Speicherschutzfunktionen + +#### Software-Sicherheitsmechanismen + +Auf der Softwareseite kommen hinzu: + +- Zugriffskontrolle auf gespeicherte Objekte +- Zustandsautomaten, die in Abhängigkeit von vorheriger Identifikation und Authentisierung bestimmte Befehle zulassen oder blockieren + +#### Sicherheitsprinzip und Vorteile + +Die Sicherheit einer Smartcard beruht auf dem **Zwei-Faktor-Prinzip**: Wissen (die PIN) und Besitz (die physische Karte). Geheime Schlüssel verlassen die Karte niemals – alle geheimen Operationen finden direkt auf dem Chip statt. Das bedeutet: Ein Schlüssel kann benutzt werden, ohne ihn jemals zu kennen. Die Daten sind manipulationssicher in der Karte gespeichert. Der geschätzte Aufwand für einen erfolgreichen Angriff liegt bei etwa **1 Million Euro**. + +#### Biometrische Smartcard + +Eine Erweiterung ist die biometrische Smartcard, die zusätzlich einen **MatchOnCard-Algorithmus** im Betriebssystem enthält. Auf dem EEPROM sind neben den RSA-Schlüsseln und Zertifikaten auch bis zu vier Fingerabdrücke gespeichert. Der biometrische Vergleich findet vollständig auf der Karte statt – die Fingerabdruckdaten verlassen sie nie. + +#### Alternative: YubiKey + +Als kompaktere Alternative zu klassischen Smartcards bietet Yubico USB-Sicherheitstoken mit FIPS-Zertifizierung, manipulationssicherem Gehäuse, Hardware-basierter Zwei-Faktor-Authentifizierung und AES-Verschlüsselung. Die Programmierung eigener Schlüssel ist dabei bewusst einfach gehalten. + +--- + +### 1.3 Trusted Platform Module (TPM) + +#### Idee + +Ein TPM ist ein kleines, kostengünstiges (unter 1 €!) Sicherheitsmodul, das in nahezu jedes Rechnersystem integriert werden kann – PCs, Notebooks, Smartphones, Drucker, Router und sogar IoT-Geräte wie Kühlschränke. Das Sicherheitsniveau gleicht dem einer Smartcard, allerdings ist ein TPM fest in die Plattform eingebaut und nicht tragbar. + +#### Organisation + +Das TPM wird durch die **Trusted Computing Group (TCG)** gesteuert, deren Hauptmitglieder Microsoft, Intel, HP, IBM, AMD, Sony, Oracle, Infineon, Utimaco und Lenovo sind. Die TCG definiert einheitliche Standards für die TPM-Software, auf deren Basis die einzelnen Unternehmen dann ihre eigenen Lösungen entwickeln. Microsofts Implementierung heißt beispielsweise **Next Generation Secure Computing Base (NGSCB)**. + +#### Sicherheitsfunktionen + +Die beiden zentralen Sicherheitsmechanismen eines TPM sind: + +- **Sealing** – Daten werden so verschlüsselt, dass sie nur entschlüsselt werden können, wenn sich das System in einem bestimmten, vordefinierten Zustand befindet (mehr dazu im Abschnitt Trusted Computing) +- **Attestation** – das TPM kann gegenüber einem Prüfer authentisch bestätigen, in welchem Zustand sich die Plattform befindet + +#### Vorteile und Nachteile + +Vorteile: Sehr hohe Sicherheit bei minimalen Kosten, Smartcard-vergleichbares Sicherheitsniveau, einfaches Sicherheitsmanagement durch Einbindung in bestehende PKI-Infrastrukturen, und in den meisten Fällen Microsoft-Readiness. + +Nachteile: Die TCG arbeitet teilweise intransparent, und physikalische Backdoors in der Hardware sind theoretisch möglich. + +--- + +### 1.4 High-Level Security Module (HLSM) + +#### Ziele + +HLSMs sind für Szenarien gedacht, in denen besonders sichere und wertvolle Informationen geschützt werden müssen (z. B. Master-Keys) und gleichzeitig sehr hohe Performance-Anforderungen bestehen. Ein zentrales Designprinzip: Wenn ein Angriff vom Sicherheitsmodul erkannt wird, werden die sicherheitsrelevanten Informationen **sofort aktiv gelöscht** – der Angreifer bekommt unter keinen Umständen Zugriff. + +#### Potentielle Angriffe + +HLSMs müssen gegen eine Vielzahl physischer Angriffe geschützt sein: Durchleuchten (z. B. Röntgen), Temperaturangriffe (Einfrieren oder Erhitzen), mechanische Attacken (Aufbohren, Aufschleifen), chemische Attacken (Ätzen von Schutzschichten) und Manipulationen über die Spannungsversorgung. + +#### Anforderungen + +Neben den Sicherheitsanforderungen müssen HLSMs auch hohe Performance, Skalierbarkeit und Verfügbarkeit bieten. Sie benötigen flexible Schnittstellen zu Host-Systemen (physikalisch über TCP/IP mit 100 Mbit, 1 Gbit oder FDDI; logisch durch Support bestehender Schnittstellen). Weitere Anforderungen sind die Möglichkeit zur Umstellung auf neue kryptographische Verfahren, der Übergang der kryptographischen Hoheit an den Betreiber und eine möglichst vertrauenswürdige Basis (wenige Lines of Code). + +#### Anwendungen + +Der geschätzte Aufwand für einen erfolgreichen Angriff auf ein HLSM liegt bei etwa **5 Millionen Euro**. Typische Einsatzgebiete sind: + +- **PKI**: Schlüsselgenerierung gemäß Signaturgesetz +- **Banken**: Autorisierungsstationen für Geldfreigabe, Sicherheit für Netzbetreiber (EC-Systeme, Mineralölunternehmen) +- **Industrie**: Schlüsselgenerierung für Auto-Schlüssel, Maut-Systeme, Authentifikation im Mobilfunknetz, digitale Signatur zentraler Geschäftsprozesse + +--- + +### 1.5 Rahmenbedingungen + +#### Evaluierung und Zertifizierung + +Die Sicherheit von HSMs muss durch unabhängige, qualifizierte Organisationen nachgewiesen werden. Relevante Standards sind FIPS 140-1, FIPS 140-2 und das CC-Schutzprofil CWA 14167-2. Typische Prüffragen betreffen z. B. die Gütekriterien eines Zufallszahlengenerators (Streuung, Periodizität, Gleichverteilung) oder die sichere Implementierung von Sicherheitsprotokollen. + +#### Key-Management + +Generelle Anforderungen: Niemand darf direkten Zugriff auf geheime Schlüssel haben. Die Nutzung kryptographischer Funktionen und die Definition oder Änderung von Funktionalitäten darf nur nach Autorisierung erfolgen. + +Für TPMs geschieht die Personalisierung durch einen einzigartigen **Endorsement Key (EK)**, der durch eine öffentliche PKI verwaltet und signiert wird. Für HLSMs gilt das **Vier-Augen-Prinzip**: Kritische Tätigkeiten dürfen nicht von einer einzelnen Person durchgeführt werden. Schlüssel werden stets unter Aufsicht zweier autorisierter Personen eingegeben. + +--- + +### 1.6 Zusammenfassung und Einordnung + +|Eigenschaft|Smartcard|TPM|HLSM| +|---|---|---|---| +|Einsatz|Personen|Kleine Rechner|Große Systeme| +|Kosten|Gering|Unter 1 €|Hoch| +|Angriffskosten|~1 Mio. €|≈ Smartcard|~5 Mio. €| +|Mobilität|Tragbar|Fest eingebaut|Stationär| +|Performance|Gering|Gering|Hoch| + +--- + +## 2. OpenSSL + +### 2.1 Was ist OpenSSL? + +OpenSSL ist eine robuste, vollständige und universelle Open-Source-Bibliothek für Kryptographie und sichere Kommunikation. Sie bietet sowohl eine Command-Line-Anwendung als auch Programmbibliotheken für die Integration in eigene Software. Ab Version 3.6 steht OpenSSL unter der Apache v2 License. + +OpenSSL deckt drei Hauptbereiche ab: + +- Kryptographische Funktionen (Hashing, Verschlüsselung, Signierung) +- Generierung von Schlüsseln und Zertifikaten +- Sichere Kommunikation via TLS/SSL + +### 2.2 Praktische Nutzung auf der Kommandozeile + +#### Hashing mit SHA-256 + +``` +openssl dgst -sha256 name.txt +``` + +Erzeugt den SHA-256-Hashwert einer Datei. Die Ausgabe ist ein 256-Bit-Wert als Hexadezimalstring, z. B. `99671587e0856ec3a860...`. + +#### Symmetrische Verschlüsselung mit AES-256 + +Verschlüsseln: + +``` +openssl enc -e -aes256 -in name.txt -out name.aes +``` + +Entschlüsseln: + +``` +openssl enc -d -aes256 -out name2.txt -in name.aes +``` + +OpenSSL unterstützt eine Vielzahl symmetrischer Verfahren, die mit `openssl enc -ciphers` aufgelistet werden können – darunter AES-128/192/256 in den Modi CBC, CFB, CTR, ECB und OFB. + +--- + +## 3. TLS/SSL – Transport Layer Security / Secure Socket Layer + +### 3.1 Einleitung und Motivation + +Da das Internet ein offenes Netz ist und die Angriffsmöglichkeiten sowie Angriffswahrscheinlichkeiten sehr groß sind, ist die Nutzung einer verschlüsselten und integritätsgesicherten Kommunikation zwischen Client und Server von besonderer Bedeutung. Passwörter, Kreditkartendaten und andere sensible Informationen werden ständig über das Internet übertragen – ohne TLS/SSL wären sie für jeden Angreifer lesbar. + +TLS/SSL ist ein **anwendungsunabhängiges Sicherheitsprotokoll**, das logisch auf einem Transportprotokoll (TCP) aufsetzt. Es bündelt drei zentrale Sicherheitsdienste: + +1. **Authentifikation** von Server und Client unter Verwendung asymmetrischer Verschlüsselung und elektronischer Zertifikate +2. **Vertraulichkeit** durch symmetrische Ende-zu-Ende-Verschlüsselung mit einem gemeinsamen Sitzungsschlüssel +3. **Integrität und Authentizität** der transportierten Daten unter Verwendung des HMAC-Verfahrens + +Zusätzlich bietet TLS/SSL optional die Komprimierung der Daten an. + +#### Geschichte + +Die Idee stammte von Netscape; die erste Version von SSL wurde 1994 veröffentlicht. 1999 übernahm die IETF den Standard und benannte ihn in **Transport Layer Security (TLS)** um. Da TLS/SSL in allen wichtigen Internet-Technologien (Browser, Web-Server, E-Mail-Server) eingebunden ist, ist es der De-facto-Standard für Transportverschlüsselung. + +--- + +### 3.2 Architektur und Protokolle + +#### Einordnung im Schichtenmodell + +TLS/SSL befindet sich zwischen der Transport- und der Anwendungsschicht. Es übernimmt zusätzlich die Aufgaben der Sitzungs- und Präsentationsschicht (Schichten 5 und 6 des ISO/OSI-Modells). Ein wesentlicher Vorteil: Zustandsinformationen können über einen längeren Zeitraum und über verschiedene Einzelverbindungen hinweg gespeichert werden. Für das zustandslose HTTP-Protokoll bedeutet das, dass mehrere TCP-Verbindungen zu einer TLS/SSL-Sitzung gebündelt werden können. + +TLS/SSL kann eine Vielzahl höherer Anwendungsprotokolle unterstützen – HTTP, SMTP, SIP, IMAP, FTP, Telnet und weitere. Der Client entscheidet durch die Wahl des Ports, ob die Kommunikation gesichert sein soll oder nicht. + +#### Port-Zuordnungen + +|Protokoll|Standard-Port|TLS/SSL-Port| +|---|---|---| +|HTTP|80|443| +|SMTP|25|465| +|IMAP|143|993| +|SIP|5060|5061| +|FTP|20, 21|989, 990| +|Telnet|23|992| + +#### Aufbau der TLS/SSL-Schicht + +Die TLS/SSL-Schicht besteht aus zwei Teilschichten: + +1. **Höhere Schicht** mit vier TLS/SSL-Teilprotokollen: ChangeCipherSpec (CCS), Alert, Handshake und Application Data +2. **Record-Schicht** mit dem Record Layer Protokoll + +Die Protokolle sind erweiterbar und flexibel gestaltet, um Zukunftssicherheit bei den Verschlüsselungsalgorithmen zu gewährleisten. TLS/SSL arbeitet transparent – es kann jedes Anwendungsprotokoll absichern, das keine eigenen Sicherheitsmechanismen mitbringt. + +--- + +### 3.3 Record Layer Protokoll + +#### Aufgaben + +Das Record Layer Protokoll ist das Arbeitspferd von TLS/SSL. Es nimmt die Klartext-Anwendungsdaten aus der Anwendungsschicht entgegen und leitet sie verschlüsselt an die Transportschicht weiter. Es bietet zwei Sicherheitsdienste, die zusammen oder einzeln genutzt werden können: Client-to-Server-Verschlüsselung und Sicherung der Nachrichten-Integrität und -Authentizität. + +#### Verarbeitungsschritte + +Die Record-Schicht führt folgende Schritte aus: + +1. **Fragmentierung** der Klartext-Anwendungsdaten in Records mit maximal 2¹⁴ Byte (16.384 Byte) +2. **Kompression** der Fragmente (optional, Verfahren wird beim Handshake ausgehandelt) +3. **HMAC-Berechnung** über die (komprimierten) Fragmente plus Sequenznummer +4. **Verschlüsselung** des komprimierten Fragments zusammen mit dem HMAC +5. **Record-Bildung** durch Voranstellen des Record-Headers + +#### Record-Header + +Der Record-Header ist 5 Byte groß und enthält: + +- **Type** (1 Byte): Nummer des höheren TLS/SSL-Protokolls (20 = CCS, 21 = Alert, 22 = Handshake, 23 = Application Data) +- **Version Major** (1 Byte): Hauptversionsnummer +- **Version Minor** (1 Byte): Unterversionsnummer +- **Length** (2 Byte): Länge der Nutzdaten (maximal 2¹⁴ + 2.048 Byte) + +Wichtig: Der gesamte Record-Layer-Header ist ungeschützt und somit für jeden Mitleser sichtbar. Nur die Nutzdaten sind verschlüsselt. + +#### HMAC-Berechnung + +Die HMAC-Berechnung bezieht bewusst nicht nur die Daten, sondern auch Metainformationen ein: + +``` +HMAC = KH(HMAC-Key, SeqNum || Compressed.type || Compressed.version || + Compressed.length || Compressed.fragment) +``` + +Durch die Einbeziehung der Sequenznummer wird Replay-Schutz erreicht, durch Type und Version wird sichergestellt, dass ein Angreifer den Record-Typ nicht unbemerkt ändern kann. + +--- + +### 3.4 Die vier Teilprotokolle + +#### Application Data Protokoll + +Dieses Protokoll reicht die eigentlichen Anwendungsdaten transparent – also ohne Betrachtung des Inhalts – durch. Die Daten werden gemäß den im Handshake ausgehandelten Sicherheitsparametern fragmentiert, komprimiert, gegen Verfälschung geschützt und verschlüsselt. + +#### ChangeCipherSpec (CCS) Protokoll + +Dieses minimale Protokoll wird bei Änderung des kryptographischen Algorithmus oder der Parameter genutzt. Es enthält nur eine einzige Meldung: ein Byte mit dem Wert 1. CCS bewirkt, dass der Empfänger die während des Handshakes ausgehandelten Parameter für die aktive Sitzung übernimmt. + +#### Alert Protokoll + +Das Alert-Protokoll dient der Signalisierung von Problemen wie Fehlern oder Verbindungsabbrüchen. Eine Alert-Nachricht besteht aus nur 2 Byte: dem Sicherheitslevel und dem Fehlercode. + +Das erste Byte kann zwei Werte annehmen: + +- **warning (1)** – die Verbindung kann fortgesetzt werden +- **fatal (2)** – TLS/SSL beendet die Verbindung sofort + +Fatale Alerts umfassen unter anderem: falscher HMAC (`bad_record_mac`), Record zu groß (`record_overflow`), Handshake-Fehler (`handshake_failure`), unbekannte CA (`unknown_ca`), Zugriff verweigert (`access_denied`), Protokollversion nicht unterstützt (`protocol_version`) und unzureichende Sicherheit (`insufficient_security`). + +Warnungs-Alerts betreffen typischerweise Zertifikatsprobleme: ungültiges Zertifikat (`bad_certificate`), gesperrtes Zertifikat (`certificate_revoked`), abgelaufenes Zertifikat (`certificate_expired`) und weitere. + +#### Handshake Protokoll + +Das Handshake-Protokoll ist das komplexeste der vier Teilprotokolle. Es ermöglicht den Aufbau einer TLS/SSL-Verbindung, indem es die Kommunikationspartner identifiziert und authentifiziert, kryptographische Algorithmen, Schlüssel und Parameter aushandelt und den Austausch geheimer Informationen durchführt. + +Eine Handshake-Nachricht besteht aus: Type (1 Byte), Length (3 Byte) und Content (variabel). + +--- + +### 3.5 Sitzungs- und Verbindungskonzepte + +TLS/SSL ist ein zustandsbehaftetes Protokoll mit zwei wichtigen Konzepten: Sessions und Connections. + +#### Session + +Eine TLS/SSL-Session ist eine "Security Association" zwischen Client und Server. Sie wird über das Handshake-Protokoll aufgebaut und definiert eine Menge kryptographischer Sicherheitsparameter, die über mehrere Verbindungen hinweg genutzt werden können. Der Sinn: Es muss nicht jedes Mal eine neue, zeitaufwendige Verhandlung der Sicherheitsparameter stattfinden. + +Session-Zustände umfassen: + +- **Session-Identifier**: Zufällige Bytesequenz vom Server zur Identifikation der Session +- **Peer-Certificate**: X.509v3-Zertifikat des Clients (falls vorhanden) +- **Compression-Method**: Vereinbarter Kompressionsalgorithmus +- **Cipher-Spec**: Verschlüsselungsalgorithmus, Hash-Funktion für HMAC und weitere Attribute +- **Master-Secret**: 48 Byte, aus denen Client und Server die geheimen Schlüssel ableiten +- **Is-Resumable**: Flag, das anzeigt, ob die Session wiederverwendet werden kann + +#### Connection + +Eine TLS/SSL-Connection ist ein logischer, temporärer Transportkanal zwischen Client und Server. Sie ist immer mit einer Session assoziiert, und aus einer Session können mehrere Connections parallel aufgebaut werden. + +Connection-Zustände umfassen unter anderem: + +- **Server-/Client-Random**: Zufallszahlen, die für jede Verbindung neu erzeugt werden +- **Server-/Client-Write-MAC-Secret**: Geheime Schlüssel für HMAC-Operationen in jeder Richtung +- **Server-/Client-Write-Key**: Symmetrische Schlüssel für Ver- und Entschlüsselung in jeder Richtung +- **Initialization Vectors**: Für Modi wie CBC, die einen IV benötigen +- **Sequence Numbers**: Für gesendete und empfangene Daten jeder Verbindung; werden bei CCS auf Null zurückgesetzt + +Entscheidend: Die Schlüssel gelten jeweils nur für eine Verbindung, aber die Verfahren werden pro Session ausgehandelt. Bei Wiederverwendung einer bestehenden Session entfällt die Neuverhandlung. + +--- + +### 3.6 Protokollablauf: Der Handshake im Detail + +Der Protokollablauf erfolgt in zwei Schritten: dem Verbindungsaufbau (vier Phasen) und dem Transfer-Mode. + +#### Phase 0: HelloRequest + +Der Server kann jederzeit ein HelloRequest an den Client senden, um ihn zu einem neuen ClientHello zu veranlassen. Diese Nachricht hat keine Parameter. Der Client antwortet nur, wenn er sich nicht bereits in einem Handshake befindet. Erhält der Server keine Antwort, kann er die Verbindung schließen. + +#### Phase 1: Aushandlung der Sicherheitsparameter + +**ClientHello**: Der Client startet den Verbindungsaufbau. Diese Klartextnachricht enthält: + +- **Random Client (RC)**: 4 Byte Zeitstempel + 28 Byte Zufallszahl +- **Sitzungs-ID**: Falls eine bestehende Sitzung wiederaufgenommen werden soll +- **Prioritätenliste der Cipher Suites**: Alle Kryptographie- und Kompressionsverfahren, die der Client unterstützt + +Der Client sollte nur Verfahren und Schlüssellängen anbieten, die sein gewünschtes Sicherheitsniveau erfüllen. + +**ServerHello**: Der Server antwortet mit den gleichen Parametertypen: + +- **Random Server (RS)**: 4 Byte Zeitstempel + 28 Byte Zufallszahl +- Die vom Server **ausgewählte Cipher Suite**, die nachfolgend verwendet wird +- Die Sitzungs-ID: Übernimmt der Server die vom Client vorgeschlagene ID, kann die Sitzung später wieder aufgenommen werden. Gibt er keine an, ist die Sitzung nicht wiederherstellbar. + +#### Cipher Suites + +Eine Cipher Suite ist eine Kombination aus drei Komponenten: + +1. **Schlüsselaustauschverfahren** (z. B. DHE_RSA) +2. **Verschlüsselungsalgorithmus** mit Schlüssellänge und Mode of Operation (z. B. AES_256_GCM) +3. **Hash-Funktion** für den HMAC (z. B. SHA384) + +Beispiel: `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256` bedeutet: Schlüsselaustausch über Elliptic-Curve Diffie-Hellman Ephemeral mit RSA-Signatur, Verschlüsselung mit AES-128 im GCM-Modus, HMAC mit SHA-256. + +#### Phase 2: Serverauthentifizierung und Schlüsselaustausch + +- **Certificate (11)**: Der Server sendet sein X.509v3-Zertifikat, das für eine Domäne von einer Zertifizierungsinstanz ausgestellt wurde. Das Zertifikat muss zur gewählten Cipher Suite passen. +- **ServerKeyExchange (12)**: Wird nur gesendet, wenn der Server kein Zertifikat mit festen DH-Parametern oder RSA-Schlüssel besitzt. Enthält einen temporären öffentlichen Schlüssel. +- **CertificateRequest (13)**: Optional – der Server fordert eine Client-Authentifikation per Zertifikat an. +- **ServerHelloDone (14)**: Signalisiert dem Client das Ende von Phase 2. Diese Nachricht ist nötig, weil die vorherigen drei Nachrichten optional sind. + +#### Phase 3: Clientauthentifizierung und Schlüsselaustausch + +- **Certificate (11)**: Wurde ein CertificateRequest gesendet, muss der Client nun sein Zertifikat übermitteln. +- **ClientKeyExchange (16)**: Der Client prüft zunächst die Gültigkeit des Server-Zertifikats. Dann übermittelt er das **Pre-Master-Secret (48 Byte)**: Bei RSA verschlüsselt der Client es mit dem öffentlichen Schlüssel des Servers. Bei Diffie-Hellman sendet er seinen öffentlichen DH-Schlüssel, und beide Seiten berechnen das Pre-Master-Secret dezentral. +- **CertificateVerify (15)**: Der Client beweist, dass er den zum Zertifikat gehörigen geheimen Schlüssel besitzt, indem er einen Hashwert über alle bisherigen Handshake-Nachrichten berechnet und mit seinem privaten Schlüssel signiert. Der Server verifiziert diese Signatur. + +#### Master Secret und Schlüsselerzeugung + +Das Pre-Master-Secret und die ausgetauschten Zufallszahlen werden verwendet, um das 48 Byte große **Master-Secret** zu berechnen: + +``` +Master-Secret = KH(Pre-Master-Secret, ClientHello.random || ServerHello.random) +``` + +Aus dem Master-Secret werden dann alle benötigten Schlüssel (Session Keys, HMAC-Schlüssel, IVs) abgeleitet: + +``` +Key-Block = KH(Master-Secret, ServerHello.random || ClientHello.random) +``` + +Der Key-Block wird so lange generiert, bis alle Schlüssel daraus konstruiert sind. Beide Seiten (Client und Server) führen diese Berechnung unabhängig voneinander durch und kommen zum gleichen Ergebnis. + +#### Phase 4: Beendigung des Handshakes + +Client und Server senden jeweils eine **ChangeCipherSpec**-Nachricht, die signalisiert, dass ab jetzt die ausgehandelten Verfahren und Parameter genutzt werden. Darauf folgt die **Finished (20)**-Nachricht, die bestätigt, dass der jeweilige Teil des Verbindungsaufbaus abgeschlossen ist. Die Finished-Nachricht ist die erste Nachricht, die bereits mit den neuen Sicherheitsparametern verschlüsselt und integritätsgesichert wird. + +--- + +### 3.7 Domänen-Zertifikate + +Domänen-Zertifikate ordnen einen öffentlichen Schlüssel eindeutig einer Organisation (Domäne) zu. Die Zertifizierungsstelle signiert das Zertifikat und verbürgt sich dafür, dass die Organisation, die den passenden geheimen Schlüssel besitzt, auch tatsächlich existiert. + +#### Vertrauensstufen + +Es gibt drei Stufen der Überprüfung: + +- **Domain Validated (DV)**: Die einfachste Stufe. Die Zertifizierungsstelle bestätigt lediglich, dass der Antragsteller die administrative Kontrolle über die Domain nachweisen kann. Das Zertifikat enthält keinerlei Unternehmensinformationen. +- **Organization Validated (OV)**: Enthält verifizierte Unternehmensinformationen, die aber nur in den Zertifikatdetails sichtbar sind. +- **Extended Validation (EV)**: Die strengste Stufe. Der Unternehmensname wird prominent in der grünen Adresszeile des Browsers angezeigt. Unternehmen müssen die strengsten Anforderungen erfüllen. + +#### Root-Zertifikate + +Das Root-Zertifikat ist das oberste Zertifikat im Verzeichnisbaum. Browser haben die Root-Zertifikate der wichtigsten Zertifizierungsstellen vorinstalliert. Ist ein Root-Zertifikat dem Browser unbekannt, erhält der Nutzer einen Warnhinweis mit der Möglichkeit, dem Zertifikat einmalig oder dauerhaft zu vertrauen. + +#### Bewertung der Authentikationsqualität + +Die Qualität hängt ab von: der Vertrauenswürdigkeit der Zertifizierungsinstanz, dem Level der Identitätsprüfung und der Bereitstellung einer Certificate Revocation List (CRL). Die Zertifikatsklassen reichen von Klasse 1 (nur Name und E-Mail nötig) über Klasse 2 (Kopie des Ausweises) bis zu höheren Klassen (persönliche Authentisierung bei einer Registration Authority). + +--- + +### 3.8 Authentifikationsmethoden + +TLS/SSL unterscheidet drei Verbindungsarten: + +**1. Server und Client ohne Authentifizierung**: Weder Server noch Client weisen sich per Zertifikat aus. Diese Variante ist **nicht sicher gegen Man-in-the-Middle-Angriffe** und sollte vermieden werden. + +**2. Server authentifiziert, Client anonym** (gängigste Art): Der Server übermittelt sein Zertifikat. Der Client kann nach Verifikation sicher sein, dass die Verbindung zum echten Server besteht. Ein MITM-Angreifer kann sich nicht als falscher Server ausgeben. Dies ist das Standardverfahren beim Aufruf von HTTPS-Webseiten. + +Ablauf im Detail: + +1. Client wählt Internetseite an +2. Server übermittelt sein Domänen-Zertifikat mit dem öffentlichen RSA-Schlüssel +3. Client prüft das Zertifikat auf Gültigkeit +4. Client generiert das Pre-Master-Secret und verschlüsselt es mit dem öffentlichen Schlüssel des Servers +5. Server entschlüsselt das Pre-Master-Secret, generiert die Session Keys +6. Verschlüsselter Datenaustausch beginnt + +**3. Server und Client authentifiziert**: Der Server fordert per CertificateRequest auch ein Client-Zertifikat an. Der Client beweist per CertificateVerify, dass er tatsächlich der Inhaber des Zertifikats ist. Falls der Client kein passendes Zertifikat besitzt, wird der Verbindungsaufbau abgebrochen. + +--- + +### 3.9 Anwendungsformen + +TLS/SSL sichert nicht nur Web-Kommunikation (HTTPS), sondern auch: + +- **Mail-Kommunikation**: SMTPS, IMAPS, POP3S +- **SIP-Kommunikation**: Für VoIP und Echtzeitkommunikation + +--- + +## 4. QUIC – Quick UDP Internet Connections + +### 4.1 Motivation + +Das klassische Verfahren zum Aufbau einer gesicherten Web-Verbindung erfordert drei aufeinanderfolgende Handshakes: den TCP-3-Wege-Handshake, den TLS-Handshake und den HTTP-Handshake. Bei einem Round-Trip von 200 ms summiert sich das auf bis zu 2 Sekunden allein für den Verbindungsaufbau – und das für jede einzelne Ressource einer Webseite, die aus Dutzenden oder Hunderten Teilen bestehen kann. + +Gleichzeitig haben sich die Internet-Geschwindigkeiten rasant gesteigert, selbst Privatanwender verfügen über Gigabit-Anschlüsse. TCP kann diese Bandbreite nicht vollständig ausschöpfen. + +### 4.2 Die QUIC-Lösung + +QUIC wurde 2012 bei Google begonnen und 2017 an die IETF übergeben. Der Kernansatz: Die drei sequentiellen Handshakes werden **verschachtelt** und in einem einzigen Schritt zusammengefasst. QUIC basiert auf UDP statt TCP und integriert TLS 1.3 direkt in das Transportprotokoll. Dafür wurde auch HTTP/3 als neues Anwendungsprotokoll entwickelt. + +Der Vergleich: Während TCP + TLS mehrere Round-Trips benötigt, kann QUIC den gesamten Verbindungsaufbau in einem einzigen Round-Trip erledigen – bei bekannten Servern sogar in null Round-Trips (0-RTT). + +### 4.3 Verbreitung und offene Fragen + +QUIC wird bereits für die Hälfte des Verkehrs zwischen Google-Servern und Chrome genutzt. Facebook setzt QUIC vollständig ein, und es befindet sich in den Beta-Stadien von Edge, Firefox und Safari. + +Offene Fragen und Bedenken: QUIC ist ein komplexes Protokoll, das drei Schritte auf einmal durchführt – was passiert, wenn ein Schritt scheitert? Außerdem bietet QUIC ausschließlich Verschlüsselung an, was von Rechenzentren und Nachrichtendiensten kritisch gesehen wird, da diese zur Netzwerkdiagnose oder Überwachung gerne den Klartext-Verkehr analysieren möchten. + +--- + +## 5. Digitale Signaturen, Zertifikate und PKI + +### 5.1 Eigenhändige Unterschrift als Ausgangspunkt + +Um digitale Signaturen zu verstehen, lohnt ein Blick auf die Funktionen der eigenhändigen Unterschrift, die die digitale Signatur elektronisch nachbilden soll: + +- **Abschlussfunktion**: Die Unterschrift vollendet eine Erklärung und hebt sie vom Entwurf ab +- **Identitätsfunktion**: Sie macht die Identität des Ausstellers kenntlich +- **Echtheitsfunktion**: Sie bestätigt, dass das Dokument vom Aussteller stammt +- **Warnfunktion**: Sie schützt den Unterzeichner vor Übereilung +- **Beweisfunktion**: Sie erleichtert die Beweisführung im Streitfall (Urkundenbeweis) + +### 5.2 Digitale Signatur + +#### Grundprinzip + +Die Signaturerstellung zu einer Nachricht m funktioniert mit einem asymmetrischen Verfahren: + +``` +s = S(m, GSₐ) +``` + +Dabei ist S die Signaturfunktion (z. B. RSA), m die zu signierende Nachricht, s die resultierende Signatur (z. B. eine 3.000-Bit-Zeichenkette) und GSₐ der geheime Schlüssel des Nutzers A. + +Die Verifikation erfolgt durch: + +``` +V(m, s, ÖSₐ) = true? +``` + +Hierbei ist V die Verifikationsfunktion und ÖSₐ der öffentliche Schlüssel des Nutzers A. + +#### Performance-Problem und Lösung + +Public-Key-Verfahren haben eine relativ hohe Verarbeitungszeit. Eine direkte Signatur einer großen Datei wäre unpraktikabel: 100 MB bei 2.048 Bit Schlüssellänge würden etwa 400.000 Operationen erfordern – bei 100 ms pro Operation wären das rund 11 Stunden. Zudem wäre die Zusammengehörigkeit der einzelnen Signaturblöcke nicht gegeben. + +Die Lösung ist die Verwendung einer **One-Way-Hashfunktion**: Statt die gesamte Nachricht zu signieren, wird zuerst ein kompakter Hashwert berechnet und nur dieser signiert: + +``` +AV(hm = H(m), s, ÖSₐ) = true +``` + +Vorteile: Beliebig lange Nachrichten können signiert werden, die Signaturerstellung ist schnell, und jedes einzelne Bit der Nachricht ist über den Hashwert in die Signatur eingeschlossen (Integritätsschutz). + +### 5.3 Digitale Zertifikate + +Ein digitales Zertifikat ermöglicht es, Attribute von Nutzern überprüfbar nachzuweisen und die Authentizität öffentlicher Schlüssel zu bestätigen. Ausgestellt werden Zertifikate durch Zertifizierungsinstanzen – das können spezialisierte Anbieter, Berufsverbände (Notare, Steuerberater, Ärzte), Personalabteilungen oder Behörden sein. + +Der Prozess zur Erstellung und Verifikation eines Zertifikats: Die Zertifizierungsinstanz prüft alle relevanten Daten (Identität, Ausweis, Urkunden, weitere Attribute), erstellt das Zertifikat mit dem öffentlichen Schlüssel des Nutzers und signiert es mit ihrem eigenen geheimen Schlüssel. Jeder Dritte kann das Zertifikat dann mit dem öffentlichen Schlüssel der Zertifizierungsinstanz verifizieren. + +--- + +### 5.4 Public-Key-Infrastrukturen (PKI) + +#### Definition und Aufgabe + +Eine PKI verwaltet Zertifikate mit öffentlichen Schlüsseln und weiteren Attributen über deren gesamten Lebenszyklus: Erstellung, Aufbewahrung, Verwendung und Löschung. Die Analogie aus der analogen Welt: Standesamt und Einwohnermeldeamt. + +Eine PKI besteht aus Hardware, Software und einem Regelwerk und deckt folgende Sicherheitsbedürfnisse ab: + +|Sicherheitsbedürfnis|Mechanismus| +|---|---| +|Authentizität|Signatur| +|Integrität|Signatur| +|Verbindlichkeit|Signatur| +|Einmaligkeit|Zeitstempel| +|Vertraulichkeit|Verschlüsselung| + +#### Bestandteile einer PKI + +- **Registration Authority (RA)**: Schnittstelle zwischen PKI-Nutzer und CA. Erfasst Anträge auf Zertifizierung und prüft die Identität der Antragsteller gemäß des Regelwerks. Kann eine private oder öffentliche Einrichtung sein. + +- **Certification Authority (CA)**: Vergibt eindeutige digitale Identitäten, erzeugt Zertifikate und verwaltet Schlüsselpaare pro Nutzer. + +- **Directory Service (DIR)**: Öffentlich zugreifbarer Verzeichnisdienst zur Verwaltung der Zertifikate. + +- **Certificate Revocation List (CRL)**: Sperrliste für zurückgezogene oder kompromittierte Schlüssel und Zertifikate. Vor jeder Verifikation sollte ein Abgleich mit der Sperrliste erfolgen. + +- **Time Stamping Service**: Erstellt gesicherte Zeitsignaturen gemäß des Regelwerks. + +- **Personal Security Environment (PSE)**: Sammlung aller sicherheitsrelevanten Daten eines Teilnehmers – geheimer Schlüssel, öffentlicher Schlüssel der CA, ggf. Zertifikate der Kommunikationspartner. Mögliche Formen: Software, Smartcards, USB-Token, HSMs, SIM-Karten, TPMs. + +- **PKI-enabled Application (PKA)**: Anwendungen, die auf den Sicherheitsmechanismen der PKI aufbauen (Dokumentenverschlüsselung, Zahlungssysteme, IPSec, ...). + + +#### Wirksamkeit und Lesegeräte-Kategorien + +Unsicher gespeicherte Schlüssel sind das größte Sicherheitsrisiko. Daher werden in der Regel Smartcards oder USB-Token verwendet. Es gibt drei Kategorien von Lesegeräten: + +1. **Basisleser**: Anzeige und Eingabe über dasselbe IT-System des Nutzers – hohes Restrisiko durch Malware +2. **Standardleser**: Anzeige und Eingabe über ein externes IT-System +3. **Komfortleser**: Ein zertifizierter Standardleser mit höchster Sicherheitsstufe + +#### PKI-Konzepte + +Es gibt drei grundlegende PKI-Architekturen: + +- **Geschlossene, dezentrale PKI**: Funktioniert nur innerhalb einer Organisation; keine Kommunikation nach außen möglich. Problem: In der Praxis existieren viele organisationsübergreifende Prozesse. + +- **Offene, dezentrale PKI**: Mehrere unabhängige CAs, die untereinander Zertifikate austauschen. Problem: Abgleich verschiedener Regelwerke nötig, um eine gemeinsame Vertrauensbasis zu schaffen. + +- **Offene, zentrale PKI**: Eine übergeordnete Wurzel-CA als gemeinsame Vertrauensbasis. Problem: Organisationen akzeptieren selten eine solche Unterordnung. + + +#### Vertrauensmodelle + +1. **Übergeordnete CA (Root CA)**: Hierarchisches Modell, in dem die Wurzel-CA die Zertifikate aller untergeordneten CAs signiert. Nur in großen, geschlossenen Systemen etabliert, da Organisationen selten eine Unterordnung akzeptieren. + +2. **n:n-Cross-Zertifizierung**: Jede CA tauscht ihre öffentlichen Schlüssel selbstständig mit jeder anderen CA aus. Sehr aufwendig bei vielen Teilnehmern, nur für kleine Gruppen geeignet. + +3. **1:n-Cross-Zertifizierung (Bridge CA)**: Eine zentrale Bridge CA fungiert als Vermittlungsinstanz. Jede CA hat nur einen Vertragspartner, der Verwaltungsaufwand ist gering. Die CAs übergeben ihre öffentlichen Schlüssel authentisch an die Bridge CA, die eine signierte Tabelle aller beteiligten öffentlichen Schlüssel erstellt. + + +#### Praxisprobleme + +- Unterschiedliche Verantwortlichkeiten für PKIs und PKAs in Unternehmen erschweren die Abstimmung +- Das Henne-Ei-Problem: PKIs benötigen konsequenten Einsatz, aber Organisationen können sich nur schwer auf gemeinsame Sicherheitskonzepte einigen +- Hoher personeller und organisatorischer Aufwand für Sensibilisierung, Schulung und Roll-Out +- Key-Recovery: Was passiert bei technischen Defekten, verlorenen PSEs oder ausscheidenden Mitarbeitern? + +--- + +### 5.5 Gesetzlicher Hintergrund: eIDAS + +#### Grundlagen + +Die EU-Verordnung 910/2014 (**eIDAS** – electronic Identification, Authentication and Trust Service) regelt die elektronische Identifizierung und Vertrauensdienste für elektronische Transaktionen im europäischen Binnenmarkt. Ziel: Gleichstellung, Interoperabilität und gegenseitige Anerkennung der Vertrauensdienste aller Mitgliedsstaaten. + +In Deutschland umgesetzt durch das Signaturgesetz (SigG) und die Signaturverordnung (SigV). eIDAS gilt für alle in der EU niedergelassenen Vertrauensdienstanbieter (VDA), ausgenommen sind interne Unternehmenslösungen. + +#### Kernregelungen + +- **Rechtssicherheit**: Ein elektronisches Dokument soll in der EU den gleichen Stellenwert haben wie ein analoges +- **Qualifizierte vs. nicht-qualifizierte VDA**: Freiwillige Akkreditierung alle drei Jahre möglich +- **EU-Vertrauenssiegel** (Art. 13): Zusätzliches Vertrauensmerkmal, analog zum "IT Security made in Germany"-Qualitätssiegel +- **Elektronische Siegel** (Art. 35-40): Pendant zu Signaturen – Signaturen gelten für natürliche Personen, Siegel für Organisationen +- **Elektronische Fernsignaturen**: Die sichere Signaturerstellungseinheit befindet sich beim VDA, nicht beim Nutzer +- **Haftung** (Art. 11, 13): Qualifizierte VDA sind in der Nachweispflicht, bei nicht-qualifizierten liegt die Beweislast beim Kunden +- **Elektronisches Einschreiben** (Art. 43-44): Identifizierung von Absender und Empfänger, Schutz durch fortgeschrittene Signatur oder Siegel, qualifizierte Zeitstempel +- **Sicherheitsanforderungen** (Art. 19): Alle VDA müssen Sicherheitsmaßnahmen gemäß dem Stand der Technik implementieren, Sicherheitsvorfälle innerhalb von 24 Stunden melden + +#### De-Mail und eIDAS + +De-Mail ist aktuell nicht vollständig eIDAS-konform: Der VDA selbst versieht Nachrichten mit qualifizierter Signatur (Fernsignatur), statt qualifizierter Zeitstempel werden Prüfsummen und qualifizierte Signaturen verwendet, und die sichere Dokumentenablage ist den Anbietern freigestellt. + +--- + +### 5.6 PKI-enabled Applications + +#### E-Mail-Sicherheit + +E-Mail-Sicherheit bedeutet, die gleiche Sicherheit bei elektronischen Nachrichten herzustellen, die bei Briefen selbstverständlich ist: der Briefumschlag (Vertraulichkeit), die Unterschrift (Authentizität und Integrität), der Poststempel (Zeitnachweis). + +Die digitale Signatur bietet nach erfolgreicher Verifikation folgende Garantien: Das Dokument wurde nicht manipuliert, die angegebene Zeit wurde nicht geändert, und nur der angegebene Absender konnte die Signatur erstellen. Als zusätzlicher Sicherheitsdienst steht die Verschlüsselung zur Verfügung. + +Der **digitale Zeitstempel** löst das Problem, dass Systemuhren leicht manipulierbar sind: Eine Zertifizierungsstelle bestätigt per digitaler Signatur, dass ein Dokument zum angegebenen Zeitpunkt vorgelegen hat. + +Für den Endnutzer werden die Sicherheitsfunktionen direkt in die Mailsoftware integriert und per Mausklick aufrufbar. E-Mail-Gateways können eingehende Mails zentral entschlüsseln und ausgehende Mails signieren. + +#### Lotto – Online-Glücksspiel + +Ein anschauliches Beispiel für den Einsatz digitaler Signaturen: Bei Online-Glücksspielen müssen Transaktionsdaten (Wetten) manipulationssicher gespeichert werden. Das alte Verfahren nutzte WORM-Speicher (Write Once, Read Many). Das neue Verfahren nutzt stattdessen einen Zeitstempeldienst: + +1. Es wird ein Hashwert über die Transaktion, das Datum und die Uhrzeit berechnet: `h = H(Transaction, Datum, Uhrzeit)` +2. Dieser Hashwert wird mit dem geheimen Schlüssel von Lotto signiert: `s = S(h, GSLotto)` +3. Nach der Ziehung kann jede Transaktion verifiziert werden: `V(H(Transaktion, Datum, Uhrzeit), s, ÖSLotto) = true?` + +--- + +## 6. Trusted Computing + +### 6.1 Herausforderung: Von reaktiv zu proaktiv + +Traditionelle IT-Sicherheitssysteme arbeiten reaktiv – wie ein Airbag, der erst bei einem Aufprall auslöst. Trusted Computing verfolgt einen proaktiven Ansatz: Das System soll vorausschauend sicherstellen, dass nur vertrauenswürdige Software in einer vertrauenswürdigen Umgebung ausgeführt wird. + +Das fundamentale Problem: Software allein kann keine verlässliche Vertrauensbasis sein, da sie manipuliert werden kann. Daher braucht man einen Hardware-Vertrauensanker. + +### 6.2 Sicherheitsprinzipien + +Trusted Computing basiert auf mehreren zusammenwirkenden Prinzipien: + +- **Robustheit und Modularität**: Das System wird in isolierte, kontrollierbare Module aufgeteilt (Virtualisierung, Mikrokernel) +- **Trusted Process**: Isolierte Prozesse, die sich nicht gegenseitig beeinflussen können +- **Integritätsprüfung**: Kontinuierliche Überprüfung der System- und Softwareintegrität +- **Trusted Platform**: Hardware-Vertrauensanker (TPM) als Basis + +Die Gesamtarchitektur besteht aus: Hardware mit Security Module → Security Kernel / Virtualization → Trusted Software Layer → Isolierte Virtual Domains mit Anwendungen. + +--- + +### 6.3 Kernelarchitekturen + +#### Monolithischer Kernel + +Beim monolithischen Kernel (z. B. Linux, Windows) laufen alle Treiber und Systemdienste im Kernel-Space. + +Vorteile: Lange etabliert, gute Performance. + +Nachteile: Alle Treiber sind im Kernel-Space vereint, was zu geringerer Flexibilität, höherer Komplexität, weniger Robustheit und schlechten Sicherheitsmechanismen führt. Ein fehlerhafter Treiber kann das gesamte System kompromittieren. + +#### Mikrokernel + +Beim Mikrokernel (z. B. L4, MINIX, QNX) laufen nur die absolut notwendigen Funktionen im Kernel – alles andere läuft als eigenständiger Prozess im User-Space. + +Vorteile: Höhere Robustheit, Modularität und Flexibilität, kontrollierbare Interprozesskommunikation und damit höhere IT-Sicherheit, weniger benötigter Speicherplatz. + +Nachteile: Geringere Performance, da die erhöhte Kommunikation zwischen den Prozessen Overhead verursacht. + +Für Trusted Computing ist der Mikrokernel die bevorzugte Architektur, da er eine bessere Isolation und Kontrolle der einzelnen Systemkomponenten ermöglicht. + +--- + +### 6.4 TPM-Schlüsselhierarchie und Identitäten + +#### Endorsement Key (EK) + +Der EK ist die eindeutige, nicht migrierbare Identität des TPM. Er wird als RSA-Schlüsselpaar während des Herstellungsprozesses erzeugt. Der geheime Schlüssel ist im TPM gespeichert, der öffentliche Schlüssel ist datenschutzsensibel (da er das TPM und damit potenziell den Nutzer eindeutig identifiziert). Die PKI wird vom TPM-Hersteller verwaltet. + +Das **Endorsement Credential (EC)** ist ein elektronisches Zertifikat vom Hersteller, das die ordnungsgemäße Erstellung und Einbettung des EK bestätigt. Es enthält: TPM-Herstellername, Modellnummer, Version und den öffentlichen EK-Schlüssel. + +#### Storage Root Key (SRK) + +Der SRK ist die Wurzel der gesamten Schlüsselhierarchie im TPM. Er wird während der Installation des TPM-Eigentümers generiert, steht im nicht-flüchtigen Speicher und ist nicht migrierbar. Die Löschung des TPM-Eigentümers löscht den SRK und damit den Zugriff auf die gesamte Schlüsselhierarchie. + +#### Attestation Identity Keys (AIK) + +AIKs werden für die Attestation-Funktion verwendet – also die authentische Bestätigung der Plattformintegrität. Sie sind nötig, weil der EK datenschutzsensibel ist und nicht direkt für Attestation verwendet werden sollte. AIKs werden vom TPM-Besitzer generiert, ein TPM kann mehrere AIKs besitzen (z. B. einen für Online-Banking, einen für E-Mail). Sie sind nicht migrierbar. + +#### Weitere Schlüsseltypen + +- **Storage Keys (StorK)**: Verschlüsseln weitere Schlüssel und Daten außerhalb des TPM. Werden für Sealing verwendet. RSA-Schlüsselpaare, im Allgemeinen migrierbar. +- **Binding Keys (BindK)**: Verschlüsseln beliebige Daten (asymmetrische Verschlüsselung). Migrierbar, können nur mit Binding-Befehlen verwendet werden. +- **Signing Keys (SigK)**: Nachweis der Authentizität und Integrität von Daten und Protokollnachrichten. RSA-Schlüsselpaare, migrierbar. + +Schlüssel sind entweder **migrierbar** (auf andere Plattformen übertragbar) oder **nicht migrierbar** (an die Plattform gebunden). EK, SRK und AIKs sind nicht migrierbar. + +--- + +### 6.5 Core Root of Trust for Measurement (CRTM) + +Der CRTM ist die Vertrauensbasis des gesamten Systems. Er führt Messungen über einzelne Systemzustände (Hardware und Software) durch und speichert die Ergebnisse in den **Platform Configuration Registers (PCRs)** des TPM. + +Es gibt zwei Boot-Varianten: + +- **Authenticated Boot**: Systemzustände werden gemessen und in den PCRs gespeichert, die Integrität wird überprüft – aber der Bootvorgang wird **nicht** gestoppt. Man hat einen nachprüfbaren Zustandsnachweis, aber kein erzwungenes Sicherheitsniveau. + +- **Secure Boot**: Systemzustände werden gemessen, die Integrität wird überprüft, und bei einer Abweichung wird der Bootvorgang **gestoppt**. Nur verifizierte Software kann starten. + + +Das Vertrauen ist **transitiv**: Der CRTM vertraut dem BIOS, das BIOS vertraut dem Bootloader, der Bootloader vertraut dem Betriebssystem, und so weiter. Jede Stufe misst die nächste, bevor sie ihr die Kontrolle übergibt. + +--- + +### 6.6 Die vier zentralen Trusted-Computing-Funktionen + +#### Sealing + +Sealing verschlüsselt Daten so, dass sie nur entschlüsselt werden können, wenn sich das System in einem bestimmten Zustand befindet. Der aktuelle Zustand der Plattform (gespeichert in den PCRs) wird Teil der Verschlüsselung. + +Ablauf des Sealings: + +1. Ein symmetrischer Schlüssel (`plainKEY`) wird erzeugt +2. Die Daten werden zusammen mit einem Hash über die Daten und die aktuellen PCR-Werte verschlüsselt: `cipher = encrypt(plainKEY, (daten || H(daten || PCR-0 || ... || PCR-x)))` +3. Der symmetrische Schlüssel wird mit dem SRK verschlüsselt: `cryptedKEY = encrypt(SRK, plainKEY || H(plainKEY))` + +Ablauf des Un-Sealings: + +1. Der symmetrische Schlüssel wird mit dem SRK entschlüsselt +2. Die Daten werden entschlüsselt +3. Die enthaltenen PCR-Werte werden mit den aktuellen PCR-Werten verglichen +4. Nur wenn die Werte übereinstimmen, werden die Daten freigegeben – andernfalls wird ein Fehler zurückgegeben + +Praktisches Beispiel: Festplattenverschlüsselung per BitLocker nutzt Sealing, damit die Festplatte nur in dem PC entschlüsselt werden kann, in dem sie verschlüsselt wurde, und nur wenn das Betriebssystem nicht manipuliert wurde. + +#### Binding + +Binding ist die einfachere Variante: Daten werden mit dem öffentlichen Schlüssel des TPM verschlüsselt und können nur auf dieser Plattform entschlüsselt werden. Im Gegensatz zu Sealing wird der Plattformzustand dabei nicht berücksichtigt. + +#### Attestation (Remote Attestation) + +Attestation ermöglicht es einem externen Prüfer, den Integritätszustand einer Plattform zu überprüfen. + +Signaturfunktion (auf der geprüften Plattform): + +1. Der Prüfer sendet eine Zufallszahl (`random`) +2. Das TPM berechnet: `σTPM = sign(GSAIK, H(random || PCR-0 || ... || PCR-x))` +3. Die Signatur und das AIK-Zertifikat werden zurückgesendet + +Verifikationsfunktion (beim Prüfer): + +1. Die Signatur wird mit dem öffentlichen AIK-Schlüssel verifiziert +2. Das AIK-Zertifikat wird auf Gültigkeit geprüft +3. Die PCR-Werte werden mit den erwarteten Werten verglichen +4. Nur wenn alle drei Prüfungen erfolgreich sind, gilt die Plattform als vertrauenswürdig + +#### Authenticated Boot + +Beim Authenticated Boot wird jede Komponente der Bootkette gemessen, bevor ihr die Kontrolle übergeben wird. Die Messungen werden in den PCRs des TPM gespeichert und können später für Attestation oder Sealing verwendet werden. + +--- + +### 6.7 Trusted Network Connect (TNC) + +#### Problemstellung + +In einem Netzwerk reicht es nicht, nur die Authentizität, Integrität und Vertraulichkeit der Kommunikation sicherzustellen – man muss auch sicherstellen, dass die **Endgeräte selbst** in einem vertrauenswürdigen Zustand sind. Ein PC mit veraltetem Virenscanner oder kompromittiertem Betriebssystem ist ein Sicherheitsrisiko für das gesamte Netzwerk. + +Lösungsansätze: Microsoft NAP, Cisco NAC und die TCG-Lösung **Trusted Network Connect (TNC)**. + +#### Prinzip + +TNC betrachtet die Vertrauenswürdigkeit in Abhängigkeit von der Integrität aller beteiligten Kommunikationspartner, IT-Systeme, Infrastrukturelemente und des Umfelds. Anforderungen werden in Policies definiert (erlaubte Konfigurationen, Betriebssysteme, Hard- und Software). Die Überprüfung erfolgt **vor** dem Zugriff auf das Netzwerk (Prävention), und die Kommunikationsrichtung wird getrennt betrachtet. + +TNC nutzt die Attestation-Funktion des TPM: Bevor ein Gerät Zugang zum Netzwerk erhält, muss es seinen aktuellen Zustand per Remote Attestation nachweisen. Entspricht der Zustand nicht der Policy, wird der Zugang verweigert oder eingeschränkt. + +--- + +### 6.8 Beispielanwendungen: Turaya + +Turaya ist eine Trusted-Computing-Plattform, die die Konzepte in der Praxis umsetzt: + +- **Turaya.Crypt**: Vertrauenswürdige Festplattenverschlüsselung mittels Sealing +- **Turaya.VPN**: Vertrauenswürdige VPN-Verbindungen, bei denen per Attestation sichergestellt wird, dass beide Endpunkte in einem sicheren Zustand sind +- **Turaya.FairDRM**: Vertrauenswürdiges Digital Rights Management, das die Rechte sowohl des Anbieters als auch des Nutzers schützt + +--- + +### 6.9 Zusammenfassung Trusted Computing + +Die Kernfunktionalitäten sind Robustheit/Modularität, Integritätsprüfung, Trusted Process und Trusted Platform. Der CRTM bildet die Vertrauensbasis, das Vertrauen ist transitiv. Die TPM-Schlüsselhierarchie ermöglicht sichere Speicherung auch auf externen Medien. Die vier zentralen Funktionen (Authenticated Boot, Binding, Sealing, Attestation) bilden zusammen ein umfassendes Sicherheitskonzept. Vertrauenswürdige Netzwerkverbindungen können durch TNC realisiert werden. Die Festlegung einer sicheren und vertrauenswürdigen Systemkonfiguration bleibt jedoch mit zahlreichen technischen und politischen Schwierigkeiten verbunden. \ No newline at end of file diff --git a/IT-Sicherheit/_Overview.md b/IT-Sicherheit/_Overview.md new file mode 100644 index 0000000..0402039 --- /dev/null +++ b/IT-Sicherheit/_Overview.md @@ -0,0 +1,41 @@ +# IT-Sicherheit + +> [[Dashboard|← Zurück zum Dashboard]] + +**Dozent:** Gerrit Kalkbrenner + +--- + +## Vorlesungen + +| # | Thema | Folien | Zusammenfassung | NotebookLM | Lernkarten | Status | +| --- | --------------------------- | ------ | ----------------------------------------------- | ---------- | ---------- | ------ | +| 01 | Einleitung | ✅ | ✅ [[itsec1-3 - zusammenfassung\|Link (VL 1–3)]] | ✅ | ✅ | 🟢 | +| 02 | Kryptographische Primitiven | ✅ | ✅ [[itsec1-3 - zusammenfassung\|Link (VL 1–3)]] | ✅ | ✅ | 🟢 | +| 03 | Sicherheitsunterweisung | ✅ | ✅ [[itsec1-3 - zusammenfassung\|Link (VL 1–3)]] | ✅ | ✅ | 🟡 | +| 04 | Datenforensik | ✅ | ✅ [[itsec4 - zusammenfassung\|Link]] | ✅ | ⬜ | 🟡 | +| 05 | Kryptographie | ✅ | ✅ [[itsec5 - zusammenfassung\|Link]] | ✅ | ⬜ | 🟡 | +| 06 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 07 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 08 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 09 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 10 | Klausurvorbereitung | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | + +**Legende:** ⬜ Offen · ✅ Erledigt · 🔴 Nicht begonnen · 🟡 In Arbeit · 🟢 Fertig + +--- + +## Zusätzliche Materialien + +- [[itsec5 - zusammenfassung extended|IT-Sec 5 – Erweiterte Zusammenfassung]] +- [[Vortrag Sicherheitsvorfall|Vortrag: Sicherheitsvorfall]] +- [[Hausaufgaben/|Hausaufgaben]] + +--- + +## Modul-Infos + +- **Dozent:** Gerrit Kalkbrenner +- **Prüfungsform:** +- **Prüfungstermin:** +- **Besonderheiten:** diff --git a/Komplexitätstheorie/.DS_Store b/Komplexitätstheorie/.DS_Store new file mode 100644 index 0000000..7d57cfc Binary files /dev/null and b/Komplexitätstheorie/.DS_Store differ diff --git a/Komplexitätstheorie/books/.DS_Store b/Komplexitätstheorie/books/.DS_Store new file mode 100644 index 0000000..ecd0b1d Binary files /dev/null and b/Komplexitätstheorie/books/.DS_Store differ diff --git a/Komplexitätstheorie/books/Theoretische Informatik Formale Sprachen, Berechenbarkeit - Juraj Hromkovič.pdf b/Komplexitätstheorie/books/Theoretische Informatik Formale Sprachen, Berechenbarkeit - Juraj Hromkovič.pdf new file mode 100644 index 0000000..2ccfec9 Binary files /dev/null and b/Komplexitätstheorie/books/Theoretische Informatik Formale Sprachen, Berechenbarkeit - Juraj Hromkovič.pdf differ diff --git a/Komplexitätstheorie/folien/ko1.pdf b/Komplexitätstheorie/folien/ko1.pdf new file mode 100644 index 0000000..d061873 Binary files /dev/null and b/Komplexitätstheorie/folien/ko1.pdf differ diff --git a/Komplexitätstheorie/folien/ko2 - ohne wiederholung.pdf b/Komplexitätstheorie/folien/ko2 - ohne wiederholung.pdf new file mode 100644 index 0000000..9dee1cc Binary files /dev/null and b/Komplexitätstheorie/folien/ko2 - ohne wiederholung.pdf differ diff --git a/Komplexitätstheorie/folien/ko2.pdf b/Komplexitätstheorie/folien/ko2.pdf new file mode 100644 index 0000000..273c626 Binary files /dev/null and b/Komplexitätstheorie/folien/ko2.pdf differ diff --git a/Komplexitätstheorie/folien/ko3.pdf b/Komplexitätstheorie/folien/ko3.pdf new file mode 100644 index 0000000..8583d1c Binary files /dev/null and b/Komplexitätstheorie/folien/ko3.pdf differ diff --git a/Komplexitätstheorie/folien/ko4.pdf b/Komplexitätstheorie/folien/ko4.pdf new file mode 100644 index 0000000..65a5413 Binary files /dev/null and b/Komplexitätstheorie/folien/ko4.pdf differ diff --git a/Komplexitätstheorie/vortrag/Learnings.html b/Komplexitätstheorie/vortrag/Learnings.html new file mode 100644 index 0000000..2704e78 --- /dev/null +++ b/Komplexitätstheorie/vortrag/Learnings.html @@ -0,0 +1,493 @@ + + + + + +SVP Lernzusammenfassung + + + + +

SVP — Lernzusammenfassung

+

Alle Erklärungen und Visualisierungen aus der Tutoring-Session. Zum Wiederholen vor dem Vortrag.

+ + +

1. Was ist ein Gitter?

+ +

Ein Gitter ist die Menge aller ganzzahligen Kombinationen von Basisvektoren. Stell dir schiefes Karopapier vor — die Ecken der Parallelogramme sind die Gitterpunkte, und die Seitenvektoren bilden die Basis.

+ +

Formal: L = { z₁b₁ + z₂b₂ + ... + zₙbₙ | zᵢ ∈ ℤ }

+ +

Der entscheidende Unterschied zur linearen Algebra: Bei Vektorräumen darfst du reelle Zahlen verwenden und erreichst jeden Punkt. Bei Gittern nur ganze Zahlen → du bekommst diskrete Punkte.

+ +
+
Merkregel
+ Mit einer Kombination aus den Basisvektoren (nur ganzzahlige Koeffizienten!) kann man das gesamte Gitter abbilden. Kein Punkt fehlt, keiner kommt dazu. Die Basis definiert das Gitter. +
+ +

Basen sind nicht eindeutig: Dasselbe Gitter kann durch komplett unterschiedliche Basisvektoren beschrieben werden. Manche Basen sind „gut" (kurze, fast senkrechte Vektoren → SVP leicht lösbar), manche „schlecht" (lange, fast parallele Vektoren → SVP schwer). Man kann nicht einfach orthonormalisieren, weil das reelle Koeffizienten bräuchte — erlaubt sind nur ganzzahlige unimodulare Transformationen (det = ±1).

+ +

Grundidee der Gitter-Krypto: Öffentlicher Schlüssel = schlechte Basis, privater Schlüssel = gute Basis desselben Gitters.

+ + +
+
+
+ +
+
+ + + + +

2. SVP, γ-SVP und CVP

+ +

Exaktes SVP

+

Gegeben eine Basis B, finde den kürzesten Nicht-Null-Vektor. Die Länge dieses Vektors heißt λ₁(L). Minkowski hat 1889 bewiesen, dass so ein Vektor immer existiert — aber ihn finden ist das Problem.

+ +

γ-SVP (Approximation)

+

Statt den exakt kürzesten Vektor zu finden, reicht einer, der höchstens γ-mal so lang ist. Drei Varianten:

+

Suchversion (SVP_γ): Finde einen Vektor v mit ‖v‖ ≤ γ · λ₁.

+

Schätzversion (EstSVP_γ): Gib die Länge λ₁ bis auf Faktor γ genau an.

+

Entscheidungsversion (GapSVP_γ): Gegeben Basis B und Wert d, unterscheide: Ist λ₁ ≤ d (YES) oder λ₁ > γ·d (NO)? Alles dazwischen ist Grauzone (Promise-Problem) — dort darf die Antwort beliebig sein. In der Visualisierung: blauer Kreis = YES-Grenze (d), oranger Kreis = NO-Grenze (γ·d), gelbe Zone dazwischen = der „verbotene" Bereich, den das Problem ignoriert.

+ +
+
Die Komplexitätslandschaft von γ
+ γ = 1 → NP-hart (Ajtai 1998)
+ γ = Konstante → NP-hart (Micciancio 2001)
+ γ ≈ √n → NP ∩ coNP (Aharonov & Regev 2005)
+ γ = 2^O(n) → in P (LLL löst das)
+ Dazwischen: Terra incognita — niemand weiß wo es kippt. +
+ +

CVP (Closest Vector Problem)

+

Gegeben ein Gitter und einen externen Punkt t (nicht im Gitter), finde den nächstgelegenen Gitterpunkt. In der Visualisierung: roter Punkt mit Kreuz = Zielpunkt t, grün umringter Punkt = nächster Gitterpunkt, gestrichelte Linie = minimale Distanz.

+

Verhältnis zu SVP: SVP ≤p CVP (Polynomialzeit-Reduktion: Man kann SVP auf CVP reduzieren, indem man Basis verdoppelt und t geschickt wählt). Die Umkehrung ist unbekannt — CVP gilt als das natürlich schwerere Problem. Typische Anwendung in der Kryptografie: t ist ein verrauschter Geheimtext, der nächste Gitterpunkt ist die eigentliche Nachricht.

+ + +

3. Komplexitätstheoretische Einordnung

+ +

Schnell-Glossar

+

P = effizient lösbar. NP = Lösung schnell überprüfbar. NP-hart = mindestens so schwer wie alles in NP. coNP = Ablehnung schnell verifizierbar. NP ∩ coNP = beides verifizierbar → vermutlich nicht NP-hart.

+ +

NP-Härte (Ajtai 1998)

+

Ajtai hat SAT auf SVP reduziert: Aus jeder SAT-Formel baut er ein Gitter, bei dem der kürzeste Vektor verrät, ob die Formel erfüllbar ist. Aber: Die Reduktion braucht Zufall (randomisiert). Ob es deterministisch geht, ist seit 26 Jahren offen.

+

Micciancio (2001) verschärft: Selbst Approximation bis auf jeden konstanten Faktor γ bleibt NP-hart.

+ +

GapSVP in NP ∩ coNP (Aharonov & Regev 2005)

+

Ab γ ≈ √n liegt GapSVP in NP ∩ coNP. Die NP-Seite ist trivial (kurzen Vektor vorzeigen). Die coNP-Seite ist der Durchbruch:

+ + +
+
+ +
+
+ + + +
+
Der coNP-Beweis in einem Satz
+ Du beweist Abwesenheit (kein kurzer Vektor im Gitter) durch Anwesenheit (kurze Vektoren im dualen Gitter). Wegen der Wippe (Transference-Theorem) schließt das eine das andere aus. +
+ +

Fun Fact: Aharonov & Regev haben das zuerst quantenmechanisch bewiesen (QMA) und dann "dequantisiert" — den Quantenbeweis in einen klassischen umgewandelt.

+ + +

4. Worst-Case-to-Average-Case-Reduktion

+ +

Das Problem mit RSA

+

RSA sagt: "Faktorisieren zufälliger Zahlen ist hoffentlich schwer." Aber es gibt keinen Beweis dafür. Vielleicht sind 99% der zufälligen Instanzen leicht — dann wäre RSA unsicher. Bogdanov & Trevisan haben gezeigt, dass so eine Worst-Case-to-Average-Case-Verbindung für allgemeine NP-Probleme vermutlich unmöglich ist.

+ +

Ajtais Durchbruch (1996)

+

Für Gitter ist es anders: Wenn du zufällige SIS-Instanzen lösen kannst, kannst du jede beliebige Worst-Case-SVP-Instanz lösen. Die Reduktion baut aus der schwierigsten SVP-Instanz zufällige SIS-Instanzen. Löst jemand die, kannst du die Lösung zurückübersetzen.

+ +

SIS (Short Integer Solution): Gegeben eine zufällige Matrix A, finde einen kurzen Vektor z mit Az = 0 mod q.

+ +
+
Warum das einzigartig ist
+ Bei Gittern gibt es keine "leichten zufälligen Instanzen". Entweder ALLE sind schwer, oder ALLE sind leicht. Es gibt kein Dazwischen. Das ist bei keinem anderen kryptografisch relevanten Problem der Fall. +
+ + +
+
+ +
+
+ + + + +

5. Algorithmen

+ +

LLL (Lenstra-Lenstra-Lovász, 1982)

+

Nimmt eine "schlechte" Basis und macht sie "besser". Zwei Bedingungen:

+

Größenreduktion: Gram-Schmidt-Koeffizienten |μ| ≤ ½ — jeder Vektor zeigt so wenig wie möglich in Richtung der vorherigen.

+

Lovász-Bedingung: Die Gram-Schmidt-Vektoren dürfen nicht zu schnell kürzer werden.

+

Funktioniert wie Bubble Sort — vergleiche Nachbarn, tausche wenn nötig. Polynomielle Laufzeit, aber exponentieller Approximationsfaktor 2^{(n-1)/2}.

+ + +
+
+ +
+
+ + + +

Exakte Algorithmen

+

Enumeration (Kannan 1983): Erst Basis reduzieren, dann systematisch alle Vektoren durchprobieren. Wie Baumsuche mit Pruning. Laufzeit n^{O(n)} (superexponentiell), aber nur poly(n) Speicher. Praxistauglich bis Dimension ~60-80.

+

Sieving (AKS 2001): Starte mit vielen zufälligen Gittervektoren, finde nahe Paare, ersetze durch ihre Differenz. Wie ein Sieb, das immer kürzere Vektoren erzeugt. Laufzeit 2^{n+o(n)} (besser), aber auch 2^{n+o(n)} Speicher (schlechter).

+ +

Übersichtstabelle

+ + + + + + + + + + + + + + + + + + + + + + +
AlgorithmusFaktor γLaufzeitSpeicher
LLL (1982)2^{(n-1)/2}poly(n)poly(n)
BKZ-k2^{O(n/k)}2^{O(k)}poly(n)
Enumeration (1983)1 (exakt)n^{O(n)}poly(n)
Sieving (2001)1 (exakt)2^{n+o(n)}2^{n+o(n)}
Voronoi (2010)1 (exakt)Õ(4^n)Õ(2^n)
+ +
+
Offene Frage (kann der Prof fragen)
+ Kann SVP in 2^{O(n)} Zeit mit 2^{o(n)} Speicher gelöst werden? Also das Beste aus Enumeration (wenig Speicher) und Sieving (wenig Zeit)? +
+ + +

6. Post-Quantum-Krypto (Kurzfassung für den Vortrag)

+ +

RSA und ECC werden durch Shors Algorithmus gebrochen. Die NIST-Standards seit August 2024 basieren auf Gitterproblemen:

+

ML-KEM (Kyber): Schlüsselaustausch, basiert auf Module-LWE.

+

ML-DSA (Dilithium): Digitale Signaturen, basiert auf Module-LWE + Module-SIS.

+

SLH-DSA (SPHINCS+): Hashbasiertes Backup, falls Gitter gebrochen werden.

+ +
+
Der Schlüsselsatz für deinen Vortrag
+ "Die Sicherheit von Kyber und Dilithium basiert nicht auf der Hoffnung, dass zufällige Instanzen schwer sind — sondern auf der beweisbaren Worst-Case-Härte von SVP. Das ist eine fundamental stärkere Aussage als alles, was RSA bieten kann." +
+ + +

7. Wahrscheinliche Prof-Fragen

+ +
+
1. Warum ist SVP für Post-Quantum-Krypto relevant?
+ Worst-Case-Härte überträgt sich auf Average-Case. Kein bekannter Quantenvorteil. NIST-Standards basieren darauf. +
+ +
+
2. Was leistet LLL, und wo sind seine Grenzen?
+ Polynomielle Laufzeit, aber Approximationsfaktor 2^{(n-1)/2} — exponentiell in der Dimension. Reicht für kleine Dimensionen, nicht für kryptografische Parameter (n ≈ 1000). +
+ +
+
3. Was ist der Unterschied zwischen SVP und CVP?
+ SVP: kürzester Nicht-Null-Vektor im Gitter (Länge = λ₁). CVP: nächster Gitterpunkt zu einem externen Punkt t ∉ L. SVP ≤p CVP — man kann SVP auf CVP reduzieren (Einbettungstrick: verdopple die Basis und wähle t so, dass der nächste Gitterpunkt dem kürzesten Vektor entspricht). Umkehrung unbekannt. GapCVP ist ebenfalls NP-hart und liegt für große γ in NP ∩ coNP. +
+ +
+
4. Was bedeutet die Worst-Case-to-Average-Case-Reduktion?
+ Ajtai 1996: Zufällige SIS-Instanzen lösen = Worst-Case-SVP lösen. Einzigartig — bei RSA/SAT gibt es das nicht. Bogdanov & Trevisan zeigten Barrieren für allgemeine NP-Probleme. +
+ +
+
5. Wie ordnet sich SVP in die Komplexitätslandschaft ein?
+ NP-hart für exakte Lösung (randomisierte Reduktion), für γ ≈ √n in NP ∩ coNP, für γ = 2^{O(n)} in P. Die genaue Grenze ist offen. +
+ +
+
6. Was ist LWE?
+ Gleichungssystem b = As + e mit kleinem Fehler e. Ohne Fehler trivial (Gauß-Elimination), mit Fehler schwer. Regev 2005: LWE lösen → GapSVP im Worst-Case lösen (braucht Quantenreduktion). Peikert 2009: klassisch, aber nur für große Moduli. +
+ +
+

Zuletzt aktualisiert: April 2026. Alle Visualisierungen sind interaktiv — klick dich durch die Tabs.

+ + + \ No newline at end of file diff --git a/Komplexitätstheorie/vortrag/Quellenverzeichnis.md b/Komplexitätstheorie/vortrag/Quellenverzeichnis.md new file mode 100644 index 0000000..73f08c7 --- /dev/null +++ b/Komplexitätstheorie/vortrag/Quellenverzeichnis.md @@ -0,0 +1,162 @@ +# Quellenverzeichnis: Shortest Vector Problem Präsentation +## Primärliteratur +### NP-Härte und Komplexität von SVP +1. **Ajtai, M.** (1996). "Generating hard instances of lattice problems (extended abstract)." _Proceedings of the 28th ACM Symposium on Theory of Computing (STOC)_, S. 99–108. ACM. + - _Worst-Case-to-Average-Case-Reduktion für Gitterprobleme; Einführung des SIS-Problems._ +2. **Ajtai, M.** (1998). "The shortest vector problem in ℓ₂ is NP-hard for randomized reductions (extended abstract)." _Proceedings of the 30th ACM Symposium on Theory of Computing (STOC)_, S. 10–19. ACM. + - _Erster Beweis der NP-Härte von SVP in der euklidischen Norm unter randomisierten Reduktionen._ +3. **Micciancio, D.** (2001). "The Shortest Vector in a Lattice is Hard to Approximate to within Some Constant." _SIAM Journal on Computing_, 30(6), S. 2008–2035. + - _NP-Härte der Approximation von SVP für jeden konstanten Faktor._ + - URL: https://cseweb.ucsd.edu/~daniele/papers/SVP.pdf +4. **Dinur, I.** (2002). "Approximating SVP∞ to within almost-polynomial factors is NP-hard." _Theoretical Computer Science_, 285(1), S. 55–71. + - _NP-Härte für fast-polynomielle Approximationsfaktoren._ +5. **Haviv, I. & Regev, O.** (2007). "Tensor-based hardness of the shortest vector problem to within almost polynomial factors." _Proceedings of the 39th ACM Symposium on Theory of Computing (STOC)_, S. 469–477. ACM. + - _Hardness Amplification durch Tensor-Produkte._ +6. **van Emde Boas, P.** (1981). "Another NP-Complete Problem and the Complexity of Computing Short Vectors in a Lattice." Technical Report, University of Amsterdam. + - _NP-Härte von SVP in der ℓ∞-Norm unter deterministischen Reduktionen._ +### GapSVP in NP ∩ coNP und verwandte Strukturresultate +7. **Lagarias, J. C., Lenstra, H. W. Jr. & Schnorr, C.-P.** (1990). "Korkin-Zolotarev bases and successive minima of a lattice and its reciprocal lattice." _Combinatorica_, 10(4), S. 333–348. + - _GapSVP_{n^{1.5}} ∈ coNP; Transference-Theoreme._ +8. **Banaszczyk, W.** (1993). "New bounds in some transference theorems in the geometry of numbers." _Mathematische Annalen_, 296, S. 625–635. + - _Verbesserte Transference-Bounds; GapSVP_n ∈ coNP._ +9. **Goldreich, O. & Goldwasser, S.** (2000). "On the limits of nonapproximability of lattice problems." _Journal of Computer and System Sciences_, 60(3), S. 540–563. Preliminary version in STOC 1998. + - _GapSVP_{O(√(n/log n))} ∈ coAM._ +10. **Aharonov, D. & Regev, O.** (2003). "A Lattice Problem in Quantum NP." _Proceedings of the 44th Annual IEEE Symposium on Foundations of Computer Science (FOCS)_, S. 210–219. IEEE. + - _coGapSVP_{√n} ∈ QMA; erster nicht-trivialer quantenmechanischer Oberschranken-Beweis für ein Gitterproblem._ + - URL: https://arxiv.org/abs/quant-ph/0307220 +11. **Aharonov, D. & Regev, O.** (2005). "Lattice problems in NP ∩ coNP." _Journal of the ACM_, 52(5), S. 749–765. Preliminary version in FOCS 2004. + - _GapSVP_{O(√n)} ∈ NP ∩ coNP; Dequantisierung des QMA-Resultats._ + - URL: https://dl.acm.org/doi/10.1145/1089023.1089025 + - PDF: https://cims.nyu.edu/~regev/papers/cvpconp.pdf +12. **Peikert, C.** (2008). "Limits on the Hardness of Lattice Problems in ℓp Norms." _Computational Complexity_, 17(2), S. 300–351. Preliminary version in CCC 2007. + - _Verallgemeinerung der coNP-Resultate auf alle ℓp-Normen._ + - URL: https://web.eecs.umich.edu/~cpeikert/pubs/lp_norms.pdf + +### Worst-Case-to-Average-Case-Reduktionen +13. **Ajtai, M.** (2004). "Generating hard instances of lattice problems." _Complexity of Computations and Proofs_, Quad. Mat. 13, Dept. Math., Seconda Univ. Napoli, Caserta, Italy, S. 1–32. + - _Erweiterte Version des STOC-1996-Papers._ +14. **Cai, J.-Y. & Nerurkar, A.** (1997). "An improved worst-case to average-case connection for lattice problems." _Proceedings of the 38th Annual IEEE Symposium on Foundations of Computer Science (FOCS)_, S. 468–477. + - _Verbesserung des Verbindungsfaktors auf n^{4+ε}._ +15. **Micciancio, D.** (2004). "Almost perfect lattices, the covering radius problem, and applications to Ajtai's connection factor." _SIAM Journal on Computing_, 34(1), S. 118–169. + - _Verbesserung des Verbindungsfaktors auf n³ · ω(√(log n · log log n))._ + - URL: https://cseweb.ucsd.edu/~daniele/papers/LatticeHash.html +16. **Micciancio, D. & Regev, O.** (2007). "Worst-case to average-case reductions based on Gaussian measures." _SIAM Journal on Computing_, 37(1), S. 267–302. Preliminary version in FOCS 2004. + - _Verbindungsfaktor Õ(n) für SVP, SIVP, CRP; Einführung der Gauß-Maß-Technik._ + - URL (Journal): https://epubs.siam.org/doi/10.1137/S0097539705447360 + - URL (Preprint): https://cims.nyu.edu/~regev/papers/average.pdf +17. **Langlois, A. & Stehlé, D.** (2015). "Worst-case to average-case reductions for module lattices." _Designs, Codes and Cryptography_, 75(3), S. 565–599. + - _Worst-Case-to-Average-Case-Reduktionen für Module-SIS und Module-LWE._ + - URL: https://eprint.iacr.org/2012/090.pdf +### Learning With Errors (LWE) +18. **Regev, O.** (2009). "On lattices, learning with errors, random linear codes, and cryptography." _Journal of the ACM_, 56(6), Artikel 34. Preliminary version in STOC 2005. + - _Einführung von LWE; quantenmechanische Reduktion von GapSVP/SIVP auf LWE._ + - URL (Journal): https://dl.acm.org/doi/10.1145/1568318.1568324 + - URL (Full paper): https://cims.nyu.edu/~regev/papers/qcrypto.pdf + - URL (arXiv, 2024 revision): https://arxiv.org/abs/2401.03703 +19. **Peikert, C.** (2009). "Public-key cryptosystems from the worst-case shortest vector problem." _Proceedings of the 41st ACM Symposium on Theory of Computing (STOC)_, S. 333–342. ACM. + - _Klassische Reduktion von GapSVP auf LWE (für große Moduli)._ + - URL: https://web.eecs.umich.edu/~cpeikert/pubs/svpcrypto.pdf +20. **Brakerski, Z., Langlois, A., Peikert, C., Regev, O. & Stehlé, D.** (2013). "Classical hardness of learning with errors." _Proceedings of the 45th ACM Symposium on Theory of Computing (STOC)_, S. 575–584. + - _Klassische Reduktion für polynomielle Moduli via Modulus-Reduktion._ + +### Algorithmen für SVP +21. **Lenstra, A. K., Lenstra, H. W. Jr. & Lovász, L.** (1982). "Factoring polynomials with rational coefficients." _Mathematische Annalen_, 261, S. 515–534. + - _Der LLL-Algorithmus; erster polynomialzeitlicher Gitterbasis-Reduktionsalgorithmus._ +22. **Schnorr, C.-P.** (1987). "A hierarchy of polynomial time lattice basis reduction algorithms." _Theoretical Computer Science_, 53(2–3), S. 201–224. + - _BKZ-Verallgemeinerung von LLL mit verbesserten Approximationsfaktoren._ +23. **Kannan, R.** (1983). "Improved algorithms for integer programming and related lattice problems." _Proceedings of the 15th ACM Symposium on Theory of Computing (STOC)_, S. 193–206. + - _Enumerationsalgorithmus für SVP/CVP mit Laufzeit n^{O(n)}._ +24. **Ajtai, M., Kumar, R. & Sivakumar, D.** (2001). "A sieve algorithm for the shortest lattice vector problem." _Proceedings of the 33rd ACM Symposium on Theory of Computing (STOC)_, S. 601–610. + - _Erster Sieving-Algorithmus; erste 2^{O(n)}-Lösung für SVP._ +25. **Micciancio, D. & Voulgaris, P.** (2010). "A deterministic single exponential time algorithm for most lattice problems based on Voronoi cell computations." _Proceedings of the 42nd ACM Symposium on Theory of Computing (STOC)_, S. 351–358. + - _Deterministischer Õ(4^n)-Algorithmus für SVP und CVP via Voronoi-Zellen._ +26. **Micciancio, D. & Voulgaris, P.** (2010). "Faster exponential time algorithms for the shortest vector problem." _Proceedings of the 21st ACM-SIAM Symposium on Discrete Algorithms (SODA)_, S. 1468–1480. + - _ListSieve und GaussSieve; praktischere Sieving-Varianten._ + - URL: https://cseweb.ucsd.edu/~daniele/papers/Sieve.pdf +27. **Nguyen, P. Q. & Vidick, T.** (2008). "Sieve algorithms for the shortest vector problem are practical." _Journal of Mathematical Cryptology_, 2(2), S. 181–207. + - _Heuristische Sieving-Variante mit Laufzeit (4/3+ε)^n; erste praktische Implementierung._ + - URL: https://people.csail.mit.edu/vidick/JoMC08.pdf +28. **Aggarwal, D., Dadush, D., Regev, O. & Stephens-Davidowitz, N.** (2015). "Solving the shortest vector problem in 2^n time via discrete Gaussian sampling." _Proceedings of the 47th ACM Symposium on Theory of Computing (STOC)_, S. 733–742. + - _Aktuell schnellster beweisbarer Algorithmus für SVP: 2^{n+o(n)}._ +29. **Aggarwal, D., Chen, Y., Kumar, R. & Shen, Y.** (2021). "Improved (Provable) Algorithms for the Shortest Vector Problem." _Proceedings of STACS 2021_, LIPIcs vol. 187, Artikel 4. + - _Time-Space Tradeoff: Laufzeit q^{O(n)}, Speicher q^{O(n/q²)}._ + - URL: https://drops.dagstuhl.de/storage/00lipics/lipics-vol187-stacs2021/LIPIcs.STACS.2021.4/LIPIcs.STACS.2021.4.pdf +## Surveys und Übersichtsartikel +30. **Peikert, C. & Stephens-Davidowitz, N.** (2023). "The Complexity of the Shortest Vector Problem." _ACM SIGACT News_, 54(1). + - _Umfassendster aktueller Survey zur Komplexität von SVP._ + - URL: https://www.cs.umd.edu/~gasarch/open/svp-color.pdf + - URL (ACM): https://dl.acm.org/doi/10.1145/3586165.3586172 +31. **Regev, O.** (2010). "The Learning with Errors Problem (Invited Survey)." _Proceedings of the 25th Annual IEEE Conference on Computational Complexity (CCC)_, S. 191–204. + - _Survey über LWE: Definition, Härte, kryptografische Anwendungen._ + - URL: https://cims.nyu.edu/~regev/papers/lwesurvey.pdf +32. **Micciancio, D. & Goldwasser, S.** (2002). _Complexity of Lattice Problems: A Cryptographic Perspective._ Kluwer Academic Publishers, Boston. + - _Standardwerk zur Komplexität von Gitterproblemen._ +33. **Micciancio, D. & Regev, O.** (2009). "Lattice-based cryptography." In: Bernstein, D. J., Buchmann, J. & Dahmen, E. (Hrsg.), _Post-Quantum Cryptography_, S. 147–191. Springer. + - _Übersichtskapitel zu gitterbasierter Kryptografie._ +34. **Cai, J.-Y.** (1999). "Some Recent Progress on the Complexity of Lattice Problems." _Electronic Colloquium on Computational Complexity (ECCC)_, Report No. 6. + - _Früher Survey über Ajtais Durchbrüche und Folgearbeiten._ + - URL: https://eccc.weizmann.ac.il/report/1999/006/download/ +35. **Micciancio, D.** (2005). "Shortest Vector Problem." In: _Encyclopedia of Cryptography and Security_. Springer. + - _Kompakter Enzyklopädie-Eintrag zu SVP._ + - URL: https://cseweb.ucsd.edu/~daniele/papers/CryptoEncyclopediaSVP.pdf +36. **Hanrot, G., Pujol, X. & Stehlé, D.** (2011). "Algorithms for the Shortest and Closest Lattice Vector Problems." In: _Coding and Cryptology_, IWCC 2011, LNCS vol. 6639, S. 159–190. Springer. + - _Survey über Algorithmen für SVP und CVP._ + - URL: https://link.springer.com/chapter/10.1007/978-3-642-20901-7_10 +37. **Balbás, D.** (2021). "The Hardness of LWE and Ring-LWE: A Survey." + - _Detaillierter Survey über LWE-Härteresultate und deren Beweise._ + - URL: https://eprint.iacr.org/2021/1358.pdf +38. **Bogdanov, A. & Trevisan, L.** (2006). "On Worst-Case to Average-Case Reductions for NP Problems." _SIAM Journal on Computing_, 36(4), S. 1119–1159. + - _Barrieren gegen allgemeine Worst-Case-to-Average-Case-Reduktionen für NP._ + - URL: https://lucatrevisan.github.io/pubs/redux-sicomp.pdf +39. **Regev, O.** (2004). "On the Complexity of Lattice Problems with Polynomial Approximation Factors." In: _The LLL Algorithm_, Information Security and Cryptography. Springer. + - _Übersicht über die Komplexität von Gitterproblemen mit polynomiellen Faktoren._ + - URL: https://cims.nyu.edu/~regev/papers/lll.pdf +## Vorlesungsskripte und Lecture Notes +40. **Regev, O.** (2004). "Lattices in Computer Science." Lecture Notes, Tel Aviv University / NYU. + - Lecture 7: "GapCVP in coNP" — https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/gg.pdf + - Lecture 12: "Average-case Hardness" — https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/averagecase.pdf + - Lecture: "The LLL Algorithm" — https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/lll.pdf +41. **Vaikuntanathan, V.** (2015). "6.876: Advanced Topics in Cryptography — Lattices." Lecture Notes, MIT. + - Lecture 2: "Lattices, Minkowski" — https://people.csail.mit.edu/vinodv/6876-Fall2015/L2.pdf + - Lecture 3: "SVP, CVP, Complexity" — https://people.csail.mit.edu/vinodv/6876-Fall2015/L3.pdf + - Lecture 7: "Sieving Algorithms" — https://people.csail.mit.edu/vinodv/6876-Fall2015/L7.pdf +42. **Vaikuntanathan, V.** (2020). "CS 294: Foundations of Lattice-based Cryptography." Lecture Notes, UC Berkeley. + - Lecture 4: "Worst-Case to Average-Case Reduction for LWE" — https://people.csail.mit.edu/vinodv/CS294/lecture4.pdf +43. **Peikert, C.** (2013–2015). "CSE 660 / CSE 840: Lattice-based Cryptography." Lecture Notes, University of Michigan. + - Lecture 2: "SVP, Gram-Schmidt, Minkowski" — https://web.eecs.umich.edu/~cpeikert/lic13/lec02.pdf + - Lecture 3: "The LLL Algorithm" — https://web.eecs.umich.edu/~cpeikert/lic15/lec03.pdf +44. **Micciancio, D.** (2012–2017). "CSE 206A: Lattice Algorithms and Applications." Lecture Notes, UC San Diego. + - Lecture 2: "Minkowski's theorem" — https://cseweb.ucsd.edu/classes/wi16/cse206A-a/lec2.pdf + - Lecture 3: "The LLL Algorithm" — https://cseweb.ucsd.edu/classes/wi12/cse206A-a/lec3.pdf +45. **MIT OpenCourseWare** (2009). "18.409: Topics in Theoretical Computer Science — An Algorithmist's Toolkit." Scribe Notes, MIT. + - Lecture 19: "Minkowski's theorem, SVP, CVP" — https://ocw.mit.edu/courses/18-409-topics-in-theoretical-computer-science-an-algorithmists-toolkit-fall-2009/08cea721b6c9e44aedcefa080de2ff6e_MIT18_409F09_scribe19.pdf + - Lecture 20: "LLL algorithm" — https://ocw.mit.edu/courses/18-409-topics-in-theoretical-computer-science-an-algorithmists-toolkit-fall-2009/eaa6bc3cd49d94630490cfe3227fa5dc_MIT18_409F09_scribe20.pdf +## NIST-Standards und Post-Quantum-Kryptografie +46. **NIST** (2024). "NIST Releases First 3 Finalized Post-Quantum Encryption Standards." Pressemitteilung, 13. August 2024. + - URL: https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards +47. **NIST** (2024). "Post-Quantum Cryptography FIPS Approved." CSRC, 13. August 2024. + - URL: https://csrc.nist.gov/news/2024/postquantum-cryptography-fips-approved +48. **NIST** (laufend). "PQC Standardization Process." Computer Security Resource Center. + - URL: https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization +49. **NIST** (laufend). "Post-Quantum Cryptography — Übersichtsseite." CSRC. + - URL: https://csrc.nist.gov/projects/post-quantum-cryptography +50. **Federal Register** (2024). "Announcing Issuance of FIPS 203, FIPS 204, and FIPS 205." Vol. 89, No. 157, 14. August 2024. + - URL: https://www.federalregister.gov/documents/2024/08/14/2024-17956/announcing-issuance-of-federal-information-processing-standards-fips-fips-203-module-lattice-based +51. **Wikipedia** (laufend). "NIST Post-Quantum Cryptography Standardization." + - URL: https://en.wikipedia.org/wiki/NIST_Post-Quantum_Cryptography_Standardization +## Weitere Referenzen +52. **Dietzfelbinger, M. et al.** (2020). "Formalizing the LLL Basis Reduction Algorithm and the LLL Factorization Algorithm in Isabelle/HOL." _Journal of Automated Reasoning_, 64, S. 1–47. Springer. + - URL: https://link.springer.com/article/10.1007/s10817-020-09552-1 +53. **Voulgaris, P.** (2013). "Algorithms for the Closest and Shortest Vector Problems on General Lattices." Dissertation, UC San Diego. + - URL: https://escholarship.org/uc/item/4zt7x45z +54. **Jagielski, M.** (2016). "Sieving Algorithms for Lattice Problems." Undergraduate Report, University of Oregon. + - URL: https://www.cs.uoregon.edu/Reports/UG-201606-Jagielski.pdf +55. **Aggarwal, D., Mukhopadhyay, P. & Stephens-Davidowitz, N.** (2019). "Faster Provable Sieving Algorithms for the Shortest Vector Problem and the Closest Vector Problem." arXiv:1907.04406. + - URL: https://arxiv.org/pdf/1907.04406 +56. **Stephens-Davidowitz, N.** (2018). "Introduction and Minkowski's Theorem." Lecture Notes, Mini-course on Lattices. + - URL: http://www.noahsd.com/mini_lattices/01__intro_and_Minkowski.pdf +57. **Nguyen, P. Q. & Stehlé, D.** (2014). "Structural Lattice Reduction: Generalized Worst-Case to Average-Case Reductions and Homomorphic Cryptosystems." ePrint 2014/283. + - URL: https://eprint.iacr.org/2014/283.pdf +58. **Peikert, C., Regev, O. & Stephens-Davidowitz, N.** (2017). "Pseudorandomness of Ring-LWE for Any Ring and Modulus." _Proceedings of the 49th ACM Symposium on Theory of Computing (STOC)_, S. 461–473. +59. **Lyubashevsky, V., Peikert, C. & Regev, O.** (2013). "On ideal lattices and learning with errors over rings." _Journal of the ACM_, 60(6), Artikel 43. +60. **Peikert, C.** (2016). "A Decade of Lattice Cryptography." _Foundations and Trends in Theoretical Computer Science_, 10(4), S. 283–424. \ No newline at end of file diff --git a/Komplexitätstheorie/vortrag/Randbedingungen_Struktur.md b/Komplexitätstheorie/vortrag/Randbedingungen_Struktur.md new file mode 100644 index 0000000..87cc8ad --- /dev/null +++ b/Komplexitätstheorie/vortrag/Randbedingungen_Struktur.md @@ -0,0 +1,42 @@ +# Vortrag +### Randbedingungen +**Thema**: Shortest Vector Problem +**Dauer**: 10-15min +**Präsi-Software**: RevealJS +### Gliederung +**1. Einleitung & Motivation (~1–2 min)** +- Warum Gitterprobleme? Kurzer Kontext: Post-Quantum-Kryptografie baut auf der _Härte_ von Gitterproblemen auf — SVP ist das zentrale davon. +- Ziel des Vortrags: SVP als Problem der Komplexitätstheorie verstehen. + +**2. Grundlagen: Was ist ein Gitter? (~2 min)** +- Mathematische Definition (Linearkombinationen über ℤ einer Basis B ∈ ℝⁿˣⁿ) +- Anschauliches 2D-Beispiel (Visualisierung Gitterpunkte + Basisvektoren) +- Begriffe: Basis, Dimension, kürzester Vektor (Minimum λ₁) + +**3. Problemdefinition: SVP und Varianten (~2 min)** +- **Exact SVP**: Finde einen Gittervektor mit Norm = λ₁ +- **Entscheidungsvariante (GapSVP_γ)**: Gegeben Gitter L und Schwelle d — ist λ₁(L) ≤ d oder λ₁(L) > γ·d? (Promise-Problem!) +- Warum die Gap-Variante? → Approximationsfaktor γ ist der Schlüssel zur Komplexitätsanalyse. +- Kurzer Hinweis auf verwandte Probleme (CVP — Closest Vector Problem) + +**4. Komplexitätstheoretische Einordnung (~4–5 min)** ← Herzstück +- **NP-Härte**: Ajtai (1998) — SVP ist NP-hart unter randomisierten Reduktionen. Micciancio (2001) verschärft das auf bestimmte Approximationsfaktoren. +- **GapSVP_γ ∈ NP ∩ coNP** für γ ≥ √n — was bedeutet das? (Zertifikate für JA- und NEIN-Instanzen) +- **Nicht bekannt ob NP-vollständig** — warum? (Promise-Problem, keine bekannte deterministische Reduktion) +- **Worst-Case zu Average-Case Reduktion** (Ajtai 1996): Einzigartig in der Komplexitätstheorie — wenn man _zufällige_ Instanzen lösen kann, kann man auch _alle_ lösen. Bedeutung für Kryptografie. +- Optional: Bezug zur Polynomiellen Hierarchie / Vermutung SVP ∉ P + +**5. Algorithmen & bekannte Schranken (~2 min)** +- **LLL-Algorithmus** (Lenstra, Lenstra, Lovász 1982): Polynomialzeit, aber nur Approximation mit exponentiell großem γ = 2^(n/2) +- **Exakte Algorithmen**: Enumeration (superexponentiell), Sieving (2^O(n)) — kein bekannter Polynomialzeit-Algorithmus +- Einordnung: Die Lücke zwischen „effizient approximierbar" und „exakt hart" spiegelt die Komplexitätslandschaft wider. + +**6. Bedeutung für Post-Quantum-Kryptografie (~1–2 min)** +- NIST-Standards (Kyber/ML-KEM, Dilithium/ML-DSA) basieren auf Gitterproblemen (LWE → verwandt mit GapSVP) +- Sicherheitsannahme: GapSVP ist für kleine γ auch für Quantencomputer hart +- Verbindung zurück zur Komplexitätstheorie: Worst-Case-Härte als Fundament kryptografischer Sicherheit + +**7. Zusammenfassung & offene Fragen (~1 min)** +- SVP: eines der seltenen Probleme mit Worst-Case-to-Average-Case-Reduktion +- Offene Fragen: Exakte Komplexität von SVP? Optimale Approximationsgrenzen? Quantenalgorithmen? + diff --git a/Komplexitätstheorie/vortrag/Recherche.md b/Komplexitätstheorie/vortrag/Recherche.md new file mode 100644 index 0000000..11026ce --- /dev/null +++ b/Komplexitätstheorie/vortrag/Recherche.md @@ -0,0 +1,512 @@ +# Das Shortest Vector Problem (SVP) — Ausführliche Recherche für den Komplexitätstheorie-Vortrag + +--- +## 1. Einleitung & Motivation + +### Warum Gitterprobleme? + +Gitter (Lattices) sind geometrische Objekte, die als die Menge aller Schnittpunkte eines unendlichen, regelmäßigen (aber nicht notwendigerweise orthogonalen) n-dimensionalen Gitters beschrieben werden können. Sie spielen eine zentrale Rolle in zahlreichen Bereichen der Informatik und Mathematik: ganzzahlige Programmierung, Codierungstheorie, Kryptoanalyse und insbesondere der Entwurf sicherer Kryptosysteme. Historisch reicht die Beschäftigung mit Gittern bis ins 19. Jahrhundert zurück — Gauß gab bereits einen Algorithmus an, um den kürzesten Vektor in einem zweidimensionalen Gitter zu finden. + +Das **Shortest Vector Problem (SVP)** ist das wichtigste und am intensivsten untersuchte Berechnungsproblem auf Gittern. Es fragt: Gegeben eine Basis eines Gitters, finde den kürzesten Nicht-Null-Vektor. Diese scheinbar einfache geometrische Frage entpuppt sich als eines der reichhaltigsten Probleme der Komplexitätstheorie — mit Verbindungen zu NP-Härte, interaktiven Beweisen, Quanteninformatik und kryptografischer Sicherheit. + +### Warum SVP in der Komplexitätstheorie besonders ist + +SVP nimmt eine **einzigartige Stellung** in der Komplexitätstheorie ein: + +**1. Worst-Case-to-Average-Case-Reduktion:** Im Gegensatz zu fast allen anderen NP-harten Problemen (SAT, Graph Coloring, Traveling Salesman) gibt es für Gitterprobleme eine beweisbare Reduktion von der Worst-Case-Härte auf die Average-Case-Härte. Das bedeutet: Wenn man _zufällige_ Instanzen lösen kann, kann man _jede_ Instanz lösen. Für SAT zum Beispiel sind zufällige Instanzen oft leicht lösbar, obwohl das Worst-Case-Problem NP-vollständig ist. Bogdanov und Trevisan haben sogar gezeigt, dass unter bestimmten Annahmen eine solche Verbindung für allgemeine NP-Probleme relativ zu einem Orakel unmöglich ist. Gitterprobleme sind daher in dieser Hinsicht wirklich einzigartig. + +**2. Feine Komplexitätsstruktur:** Die Komplexität von SVP variiert stark mit dem Approximationsfaktor γ. Für kleine γ ist das Problem NP-hart, für große γ liegt es in NP ∩ coNP — und dazwischen liegt eine noch nicht vollständig verstandene Übergangszone. Diese „Komplexitätslandschaft" ist deutlich reicher als bei typischen NP-vollständigen Problemen. + +**3. Post-Quantum-Kryptografie:** Die Sicherheit der neuen NIST-Standards (ML-KEM/Kyber, ML-DSA/Dilithium), die im August 2024 veröffentlicht wurden, basiert letztlich auf der Annahme, dass bestimmte Gitterprobleme auch für Quantencomputer schwer bleiben. Im Gegensatz zu RSA und elliptischen Kurven, die durch Shors Algorithmus gebrochen werden können, gibt es keinen bekannten Quantenvorteil für SVP. + +**Quellen:** + +- Micciancio: "The Shortest Vector in a Lattice is Hard to Approximate" — https://cseweb.ucsd.edu/~daniele/papers/SVP.pdf +- Peikert/Stephens-Davidowitz: "The Complexity of the Shortest Vector Problem" — https://www.cs.umd.edu/~gasarch/open/svp-color.pdf +- Cai: "Some Recent Progress on the Complexity of Lattice Problems" — https://eccc.weizmann.ac.il/report/1999/006/download/ +- Bogdanov & Trevisan: "On Worst-Case to Average-Case Reductions for NP Problems" — https://lucatrevisan.github.io/pubs/redux-sicomp.pdf +- NIST: Post-Quantum Encryption Standards — https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards + +--- + +## 2. Grundlagen: Was ist ein Gitter? + +### 2.1 Mathematische Definition + +Ein **Gitter** L ist eine diskrete additive Untergruppe von ℝⁿ. Äquivalent dazu kann man ein Gitter als die Menge aller ganzzahligen Linearkombinationen von n linear unabhängigen Vektoren b₁, ..., bₙ ∈ ℝⁿ definieren: + +L = L(B) = { Σᵢ zᵢbᵢ | zᵢ ∈ ℤ } = { Bx | x ∈ ℤⁿ } + +Die Matrix B := (b₁, ..., bₙ) ∈ ℝⁿˣⁿ heißt **Basis** von L. Der Wert n ist die **Dimension** des Gitters. + +**Anschaulich in 2D:** Man stelle sich ein Blatt kariertes Papier vor, das schief gedruckt ist — die Gitterpunkte sind die Ecken der verzerrten „Kästchen". Die zwei Seitenvektoren eines Kästchens bilden eine Basis. Ein Standard-Koordinatensystem mit Achsen im rechten Winkel ist das einfachste Gitter (ℤ²), aber im Allgemeinen stehen die Basisvektoren nicht senkrecht aufeinander. + +### 2.2 Basen sind nicht eindeutig + +Ein fundamentaler Unterschied zur linearen Algebra über Körpern: Ein Gitter hat **viele verschiedene Basen**. Zwei Basen B und B' erzeugen genau dann dasselbe Gitter, wenn eine unimodulare Matrix U (ganzzahlige Matrix mit det(U) = ±1) existiert, sodass B' = BU. Da die Ganzzahligkeitsbedingung erhalten bleiben muss, ist der Basiswechsel bei Gittern deutlich rigider als bei Vektorräumen — man kann im Allgemeinen **keine orthonormale Basis** finden. + +Diese Nicht-Eindeutigkeit ist sowohl Segen als auch Fluch: Eine „gute" (kurze, fast orthogonale) Basis kann Probleme leicht lösbar machen, während eine „schlechte" (lange, fast parallele Vektoren) Basis das Problem extrem schwer erscheinen lässt. Dies ist genau die Grundidee der gitterbasierten Kryptografie — der öffentliche Schlüssel ist eine „schlechte" Basis, der private Schlüssel eine „gute" Basis desselben Gitters. + +### 2.3 Determinante und Fundamentalparallelotop + +Das **Fundamentalparallelotop** einer Basis B ist definiert als P(B) = { Bx | x ∈ [0,1)ⁿ }. Es ist die fundamentale Wiederholungseinheit, die den gesamten Raum durch Verschiebung um Gittervektoren parkettiert — ähnlich wie ein einzelnes Kästchen das karierte Papier erzeugt. + +Die **Determinante** (oder das **Kovolumen**) des Gitters ist det(L) = |det(B)| = Vol(P(B)). Eine entscheidende Eigenschaft: Die Determinante ist **basisunabhängig** — verschiedene Basen desselben Gitters liefern stets denselben Wert. Intuitiv misst die Determinante die „Dichte" des Gitters: Je kleiner det(L), desto dichter liegen die Gitterpunkte, und desto kürzer muss der kürzeste Vektor sein. Je größer det(L), desto „dünner" ist das Gitter und desto weiter können die Punkte auseinander liegen. + +### 2.4 Kürzester Vektor und sukzessive Minima + +Die Länge des kürzesten Nicht-Null-Vektors im Gitter wird als **erstes Minimum** λ₁(L) bezeichnet: + +λ₁(L) = min { ‖v‖ : v ∈ L, v ≠ 0 } + +Allgemeiner definiert man die **sukzessiven Minima** λ₁(L) ≤ λ₂(L) ≤ ... ≤ λₙ(L), wobei λᵢ die kleinste Zahl r ist, sodass die abgeschlossene Kugel B(0,r) mindestens i linear unabhängige Gittervektoren enthält. Die sukzessiven Minima liefern detaillierte Informationen über die geometrische Struktur des Gitters. + +**Beispiel:** Für das Gitter erzeugt von (1,0) und (0,3) in ℝ² ist λ₁ = 1 (der Vektor (1,0)) und λ₂ = 3 (der Vektor (0,3)). Beachte, dass der Vektor (2,0), obwohl er kürzer als (0,3) ist, nicht zählt, da er linear abhängig von (1,0) ist. + +### 2.5 Minkowskis erster Satz + +Ein Eckpfeiler der Geometrie der Zahlen ist **Minkowskis Konvexkörper-Theorem** (1889), das eine obere Schranke für den kürzesten Vektor liefert: + +> **Minkowskis Konvexkörper-Satz:** Sei L ein n-dimensionales Vollrang-Gitter und S ⊂ ℝⁿ ein konvexer, bezüglich des Ursprungs symmetrischer Körper mit Vol(S) > 2ⁿ · det(L). Dann enthält S einen Nicht-Null-Gitterpunkt. + +**Beweisskizze (über Blichfeldts Lemma):** + +1. Betrachte die Menge S/2 = {x : 2x ∈ S}. Da Vol(S/2) = 2⁻ⁿ Vol(S) > det(L), folgt aus dem Satz von Blichfeldt (jede Menge mit Volumen > det(L) enthält zwei Punkte, deren Differenz ein Gittervektor ist): Es existieren z₁, z₂ ∈ S/2 mit z₁ ≠ z₂ und z₁ − z₂ ∈ L \ {0}. +2. Da 2z₁, 2z₂ ∈ S und S symmetrisch ist, gilt auch −2z₂ ∈ S. +3. Wegen Konvexität: z₁ − z₂ = (2z₁ + (−2z₂))/2 ∈ S. +4. Also ist z₁ − z₂ ein Nicht-Null-Gittervektor in S. + +**Korollar — Schranke für den kürzesten Vektor:** Wendet man den Satz auf die euklidische Kugel B(0, r) an und wählt r so, dass Vol(B(0,r)) = 2ⁿ · det(L), erhält man: + +λ₁(L) ≤ √n · det(L)^{1/n} + +Diese Schranke garantiert die **Existenz** kurzer Vektoren — sie sagt, dass in jedem n-dimensionalen Gitter mindestens ein Nicht-Null-Vektor existiert, der kürzer als √n · det(L)^{1/n} ist. Aber sie sagt nichts darüber aus, wie man diesen Vektor **findet** — und genau diese algorithmische Frage führt zum SVP. Das Finden des durch Minkowski garantierten Vektors wird manchmal als Minkowski's Vector Problem (MVP) bezeichnet und ist eng mit SVP verwandt. + +### 2.6 Gram-Schmidt-Orthogonalisierung als untere Schranke + +Die Gram-Schmidt-Orthogonalisierung b̃₁, ..., b̃ₙ einer Basis B liefert eine wichtige **untere Schranke** für die Minimum-Distanz: + +λ₁(L) ≥ minᵢ ‖b̃ᵢ‖ + +**Beweis (Intuition für 2D):** Man kann die Gitterpunkte v = Bz in „Schichten" gemäß dem Koeffizienten z₂ von b₂ einteilen. Wenn z₂ = 0, dann ist v ein Vielfaches von b₁, also ‖v‖ ≥ ‖b₁‖ = ‖b̃₁‖. Wenn z₂ ≠ 0, hat v eine Komponente in Richtung b̃₂ (orthogonal zu b₁), und diese Komponente hat Länge mindestens |z₂| · ‖b̃₂‖ ≥ ‖b̃₂‖. Also ist ‖v‖ ≥ min(‖b̃₁‖, ‖b̃₂‖). Per Induktion über die Dimension folgt die allgemeine Aussage. + +Diese Schranke ist effizient berechenbar und bildet den konzeptuellen Ausgangspunkt des LLL-Algorithmus: Die Idee ist, eine Basis zu finden, deren Gram-Schmidt-Vektoren möglichst lang und „ausgeglichen" sind — denn dann ist die untere Schranke möglichst nah am tatsächlichen λ₁. + +**Quellen:** + +- Peikert: Lecture Notes "SVP" (U. Michigan) — https://web.eecs.umich.edu/~cpeikert/lic13/lec02.pdf +- MIT OCW: "Minkowski's theorem, shortest/closest vector problem" — https://ocw.mit.edu/courses/18-409-topics-in-theoretical-computer-science-an-algorithmists-toolkit-fall-2009/08cea721b6c9e44aedcefa080de2ff6e_MIT18_409F09_scribe19.pdf +- Micciancio: CSE 206A Lecture 2 — https://cseweb.ucsd.edu/classes/wi16/cse206A-a/lec2.pdf +- Vaikuntanathan: Lecture 2, 6.876 (MIT, 2015) — https://people.csail.mit.edu/vinodv/6876-Fall2015/L2.pdf +- Stephens-Davidowitz: "Introduction and Minkowski's Theorem" — http://www.noahsd.com/mini_lattices/01__intro_and_Minkowski.pdf +- Wikipedia: Minkowski's theorem — https://en.wikipedia.org/wiki/Minkowski's_theorem + +--- + +## 3. Problemdefinition: SVP und Varianten + +### 3.1 Exaktes SVP (Search-Version) + +Gegeben eine Basis B ∈ ℚⁿˣⁿ eines Gitters L, finde einen Nicht-Null-Vektor v ∈ L mit ‖v‖ = λ₁(L). + +Das Problem kann bezüglich jeder Norm definiert werden, aber die **euklidische Norm** (ℓ₂) ist die gebräuchlichste. Die Wahl der Norm hat allerdings signifikante Auswirkungen auf die Komplexität: Für die Uniform-Norm (ℓ∞) ist SVP seit van Emde Boas (1981) als NP-hart bekannt, während die NP-Härte für ℓ₂ erst 1998 durch Ajtai bewiesen wurde und zudem nur unter randomisierten Reduktionen gilt. + +Eine **Besonderheit** des SVP ist, dass sogar die Berechnung der _Länge_ des kürzesten Vektors (ohne den Vektor selbst zu finden) als schwer gilt. In der Komplexitätstheorie wird oft diese reine Längenberechnung studiert, da die Entscheidungsversion für formale Komplexitätsaussagen besser geeignet ist. + +### 3.2 γ-Approximate SVP und GapSVP + +Da das exakte SVP vermutlich sehr schwer ist, untersucht man Approximationsversionen. Für einen Approximationsfaktor γ = γ(n) ≥ 1 (typischerweise eine monoton wachsende Funktion der Dimension) gibt es drei Varianten: + +**1. Entscheidungsversion (GapSVP_γ) — „Gap"-Version:** Gegeben eine Gitterbasis B und ein positives d, unterscheide: + +- **YES-Instanz:** λ₁(L(B)) ≤ d (der kürzeste Vektor ist kurz) +- **NO-Instanz:** λ₁(L(B)) > γ · d (der kürzeste Vektor ist lang) + +Dies ist ein **Promise-Problem**: Für Instanzen, bei denen d < λ₁(L(B)) ≤ γ·d, ist jede Antwort akzeptabel. Der Algorithmus muss also nur „klare" Fälle korrekt entscheiden — die Grauzone dazwischen darf beliebig beantwortet werden. Diese Promise-Struktur hat wichtige technische Konsequenzen: GapSVP ist kein gewöhnliches Entscheidungsproblem im Sinne einer Sprache L ⊆ {0,1}*, und die üblichen Definitionen von NP-Vollständigkeit und Reduktionen müssen sorgfältig angepasst werden. + +**2. Schätzversion (EstSVP_γ):** Gegeben eine Gitterbasis B, berechne λ₁(L(B)) bis auf einen Faktor γ, d.h. gib einen Wert r aus mit λ₁ ≤ r ≤ γ · λ₁. + +**3. Suchversion (SVP_γ):** Gegeben eine Gitterbasis B, finde einen Nicht-Null-Vektor v ∈ L(B) mit ‖v‖ ≤ γ · λ₁(L(B)). + +**Wichtige Beobachtungen:** + +- Für γ = 1 ergeben sich die exakten Versionen. +- Die Probleme werden **strikt leichter** mit wachsendem γ: GapSVP_{γ'} ≤ GapSVP_γ für γ' ≥ γ (die bessere Approximation reduziert sich auf die schlechtere — nicht umgekehrt!). +- Es ist ein **wichtiges offenes Problem**, ob SVP_γ auf GapSVP_γ reduzierbar ist für nicht-triviales γ > 1. Für den exakten Fall (γ = 1) existiert eine einfache Reduktion über Binärsuche, aber die Verallgemeinerung auf approximative Versionen ist offen. + +### 3.3 Verwandtes Problem: CVP (Closest Vector Problem) + +Das **Closest Vector Problem (CVP)** fragt: Gegeben eine Gitterbasis B und einen Zielvektor t ∈ ℚⁿ, finde den nächsten Gittervektor zu t. + +CVP gilt als mindestens so schwer wie SVP — es gibt eine einfache, approximationsfaktor-erhaltende Reduktion von SVP auf CVP: Für eine Gitterbasis B = [b₁,...,bₙ] definiere für jedes i das modifizierte Gitter Lᵢ = L(b₁,...,bᵢ₋₁, 2bᵢ, bᵢ₊₁,...,bₙ). Dann gilt: Wenn v = Σ cⱼbⱼ der kürzeste Vektor in L ist, muss mindestens ein cⱼ ungerade sein (sonst wäre v/2 ein kürzerer Gittervektor). Für dieses j ist v + bⱼ der nächste Vektor zu bⱼ im Gitter Lⱼ, und ‖(v + bⱼ) − bⱼ‖ = ‖v‖ = λ₁. Also findet man den kürzesten Vektor, indem man n CVP-Instanzen löst und die kürzeste Differenz nimmt. + +Diese Reduktion zeigt: CVP ist mindestens so schwer wie SVP. Umgekehrt ist nicht bekannt, ob SVP mindestens so schwer wie CVP ist — tatsächlich ist CVP in gewissem Sinne das „natürlich schwerere" Problem. + +**Quellen:** + +- Wikipedia: Lattice problem — https://en.wikipedia.org/wiki/Lattice_problem +- Peikert: Lecture Notes — https://web.eecs.umich.edu/~cpeikert/lic13/lec02.pdf +- Micciancio: CSE 206A Lecture 2 (2014) — https://cseweb.ucsd.edu/classes/sp14/cse206A-a/lec2.pdf +- Vaikuntanathan: Lecture 3, 6.876 (MIT, 2015) — https://people.csail.mit.edu/vinodv/6876-Fall2015/L3.pdf + +--- + +## 4. Komplexitätstheoretische Einordnung ★ + +Dies ist das Herzstück des Vortrags. + +### 4.1 NP-Härte von SVP + +#### Frühe Ergebnisse: ℓ∞-Norm + +Die erste NP-Härte für SVP wurde von **van Emde Boas (1981)** für die Uniform-Norm (ℓ∞) gezeigt, wobei ‖x‖∞ = maxᵢ |xᵢ|. Dieses Ergebnis nutzt eine direkte Reduktion und gilt unter deterministischen Reduktionen. + +#### Ajtais Durchbruch (1998): ℓ₂-Norm + +Für die kryptografisch relevantere **euklidische Norm** (ℓ₂) blieb die NP-Härte über 15 Jahre lang offen. **Ajtai (1998)** bewies schließlich, dass das exakte SVP in ℓ₂ NP-hart ist, aber mit einem entscheidenden Caveat: Die Reduktion ist **randomisiert**. + +Die Randomisierung ist hier kein technisches Artefakt. In Ajtais Beweis wird eine SAT-Instanz in eine Gitterinstanz transformiert, wobei die Konstruktion zufällige Wahlen trifft, um ein Gitter mit bestimmten geometrischen Eigenschaften zu erzeugen. Die Konstruktion funktioniert mit hoher Wahrscheinlichkeit (über die Zufallswahlen), aber nicht deterministisch. Es bleibt eine **offene Frage** (seit über 25 Jahren!), ob SVP in ℓ₂ unter deterministischen Reduktionen NP-hart ist. + +#### Härte der Approximation: Micciancio (2001) + +**Micciancio (2001)** verschärfte Ajtais Ergebnis erheblich: Die Approximation von SVP bis auf jeden **konstanten Faktor** γ ist NP-hart unter randomisierten Reduktionen. Genauer: γ-SVP liegt nicht in RP, es sei denn NP = RP. + +Die zentrale Technik ist eine alternative Konstruktion von Ajtais Variante des Sauer-Lemmas, die den Originalbeweis stark vereinfacht. Der Beweis konstruiert ein „lokal dichtes" Gitter — ein Gitter, das in einer bestimmten Region viel dichter ist als die globale Dichte vermuten lässt. Die NP-harte Eigenschaft ist dann, diese lokal dichte Region zu finden. + +Unter einer zusätzlichen zahlentheoretischen Vermutung (über die Verteilung quadratfreier glatter Zahlen) konnte Micciancio sogar eine echte NP-Härte unter deterministischen Many-One-Reduktionen zeigen. + +#### Weitere Verbesserungen + +- **Haviv & Regev (2007):** Nutzten Tensor-Produkte zur „Verstärkung" der Härte (Hardness Amplification). Tensor-Produkte erlauben es, die Approximationslücke zu vergrößern. +- **Dinur (2002):** Zeigte NP-Härte für fast-polynomielle Faktoren γ = n^{c/log log n} unter der Annahme NP ⊄ RSUBEXP. + +**Zusammenfassung:** + +|Faktor γ|Ergebnis|Annahme|Referenz| +|---|---|---|---| +|1 (exakt)|NP-hart|Randomisierte Reduktion|Ajtai 1998| +|Jede Konstante|NP-hart|NP ≠ RP|Micciancio 2001| +|2^{(log n)^{1-ε}}|NP-hart|NP ⊄ RTIME(2^{poly(log n)})|Khot 2005| +|n^{c/log log n}|NP-hart|NP ⊄ RSUBEXP|Haviv/Regev 2007| + +### 4.2 GapSVP in NP ∩ coNP: Obere Schranken + +Die vielleicht überraschendste Facette der SVP-Komplexität: Für hinreichend große Approximationsfaktoren liegt GapSVP in erstaunlich niedrigen Komplexitätsklassen. + +#### Die NP-Seite (trivial) + +Dass GapSVP_γ ∈ NP liegt, ist für jedes γ ≥ 1 einfach: Ein kurzer Gittervektor v mit ‖v‖ ≤ d dient als polynomiell verifizierbar Zeuge für eine YES-Instanz. Der Verifizierer prüft: (a) v ≠ 0, (b) v ∈ L(B) (durch Lösen von Bx = v über ℤ), (c) ‖v‖ ≤ d. Da ‖v‖ ≤ d, ist die Bitlänge von v polynomiell beschränkt. + +#### Die coNP-Seite (schwierig und überraschend) + +Die Frage „Wie beweist man, dass ein Gitter **keinen** kurzen Vektor hat?" ist viel subtiler. Schließlich gibt es exponentiell viele Gittervektoren, die potenziell kurz sein könnten — wie kann man alle gleichzeitig ausschließen? Man braucht einen einzelnen, polynomiell langen Zeugen, der den Verifizierer davon überzeugt, dass kein kurzer Vektor existiert. + +**Historische Entwicklung:** + +**Lagarias, Lenstra & Schnorr (1990):** GapSVP_{n^{1.5}} ∈ coNP. Die Technik nutzt das **duale Gitter** L* = {u ∈ ℝⁿ : ⟨u,v⟩ ∈ ℤ für alle v ∈ L}. Sogenannte Transference-Theoreme verbinden die Minimum-Distanz eines Gitters mit der seines Duals: Wenn das duale Gitter viele kurze Vektoren hat, dann hat das ursprüngliche Gitter keinen kurzen Vektor. + +**Banaszczyk (1993):** Verbesserung auf GapSVP_n ∈ coNP durch schärfere Transference-Bounds. Banaszcyks Resultate nutzen tiefe Ergebnisse aus der Geometrie der Zahlen. + +**Goldreich & Goldwasser (2000):** Ein anderer Ansatz — GapSVP_{O(√(n/log n))} ∈ **coAM** (Komplement von Arthur-Merlin). Hierbei wird ein interaktives Protokoll verwendet: Der allmächtige Beweiser (Prover) überzeugt den computatorisch beschränkten Verifizierer (Arthur) davon, dass ein Punkt weit vom Gitter entfernt ist. Der Verifizierer wirft eine Münze und stellt dem Beweiser eine Aufgabe, die nur lösbar ist, wenn der kürzeste Vektor tatsächlich lang ist. Die coAM-Containment hat die Implikation, dass GapSVP für diesen Faktor vermutlich nicht NP-hart ist (da NP ⊆ coAM den Kollaps der polynomiellen Hierarchie implizieren würde). + +**Aharonov & Regev (2005) — Der entscheidende Durchbruch:** + +> **Theorem:** GapSVP_{c√n} ∈ NP ∩ coNP für eine Konstante c > 0. + +Dieses Ergebnis verdient besondere Aufmerksamkeit: + +**Der coNP-Zeuge** besteht aus einer Liste von N = n^{4ℓ} Vektoren w₁, ..., wₙ aus dem dualen Gitter (ℓ ist ein Polynomialzeit-berechenbarer Parameter). Diese Vektoren definieren eine Funktion f_W : ℝⁿ → [0,1], die als „Periodizitätsdetektor" fungiert — sie misst, wie „periodisch" ein Punkt bezüglich des Gitters ist. Der Verifizierer führt drei Tests durch: + +- **Periodizitätstest:** f_W muss periodisch über L sein (d.h. f_W(x) = f_W(x + v) für alle v ∈ L). +- **Glatttest:** f_W darf nur wenig um ihren Mittelwert schwanken. +- **Punkttest:** f_W muss am Ursprung einen hohen Wert haben. + +Für NO-Instanzen (kürzester Vektor ist lang ≥ γd) kann ein Zeuge konstruiert werden, der alle drei Tests besteht. Für YES-Instanzen (kurzer Vektor existiert) schlägt mindestens ein Test fehl, weil ein kurzer Gittervektor die Periodizitätsstruktur stört. + +**Historischer Kontext — von Quanten zu Klassisch:** Dieses Ergebnis entstand auf einem ungewöhnlichen Weg. Aharonov und Regev zeigten zunächst **2003**, dass coGapSVP_{√n} ∈ **QMA** liegt (QMA = Quantum Merlin-Arthur, die Quantenversion von NP). Der Quantenzeuge bestand aus einer Überlagerung von Zuständen, die Informationen über die Gitterstruktur kodieren. Erst danach fanden die Autoren den Weg, den Quantenzeugen durch einen rein klassischen Zeugen zu ersetzen — ein Prozess, den sie als „Dequantisierung" bezeichneten. Dieser ungewöhnliche Weg „von quantenmechanisch zu klassisch" ist selbst ein methodisch interessantes Ergebnis. Die Technik basiert auf einer **Fourier-Approximation** von Funktionen über das Gitter — Funktionen auf ℝⁿ, die über L periodisch sind, können durch ihre Fourier-Koeffizienten (die auf dem dualen Gitter leben) sukzessiv approximiert werden. + +### 4.3 Implikationen für die Polynomielle Hierarchie + +Da GapSVP_{O(√n)} in NP ∩ coNP liegt, hat dies weitreichende Konsequenzen: + +> **Theorem:** Wenn GapSVP_γ für γ ≥ c·√n NP-hart ist (selbst unter Cook-Reduktionen), dann kollabiert die polynomielle Hierarchie: NP ⊆ coNP. + +Der Beweis erfordert Sorgfalt, da GapSVP ein Promise-Problem ist. Für „totale" Probleme (gewöhnliche Sprachen) ist die Argumentation „Problem in NP ∩ coNP und NP-hart ⟹ NP = coNP" Standard. Für Promise-Probleme müssen zusätzliche Argumente gemacht werden — Aharonov und Regev zeigten, wie man die MAYBE-Instanzen (die weder YES noch NO sind) sorgfältig behandelt. + +**Was das praktisch bedeutet — die Komplexitätslücke:** + +``` +γ = 1 γ ≈ n^{c/lll} γ ≈ √n γ ≈ 2^{O(n)} + | | | | + NP-hart NP-hart NP ∩ coNP in P (LLL) + |←——————————————————→|←———— ??? ————→|←—————————————————→| + bekannt schwer Terra incognita vermutlich nicht leicht + NP-hart +``` + +Die genaue Grenze, an der die Härte „kippt", ist eine der großen offenen Fragen. Liegt sie bei γ = n^ε? Bei γ = √n / polylog(n)? Niemand weiß es. + +### 4.4 Worst-Case zu Average-Case Reduktion + +Dies ist das vielleicht bemerkenswerteste Strukturergebnis und ein Alleinstellungsmerkmal von Gitterproblemen. + +#### Ajtais Entdeckung (1996) + +**Ajtai** entdeckte 1996 eine erstaunliche Verbindung: + +> **Ajtais Theorem (informell):** Wenn es einen effizienten Algorithmus gibt, der das **Short Integer Solution (SIS)** Problem für zufällig gewählte Instanzen mit nicht-vernachlässigbarer Wahrscheinlichkeit löst, dann gibt es einen effizienten Algorithmus, der _jede beliebige_ Instanz des approximativen SVP (und verwandter Probleme) löst. + +Das **SIS-Problem:** Gegeben eine zufällig gewählte Matrix A ∈ ℤ_q^{n×m}, finde einen kurzen Nicht-Null-Vektor z ∈ ℤ^m mit Az = 0 mod q. Dieses Problem kann auch als „Finden von Kollisionen in einer generalized Subset-Sum-Funktion" interpretiert werden. + +#### Warum ist das so spektakulär? + +Für die meisten NP-harten Probleme gibt es **keine** solche Verbindung und es wird allgemein angenommen, dass es keine geben kann: + +- **SAT:** NP-vollständig im Worst-Case, aber zufällige SAT-Instanzen sind (für geeignete Klausel-zu-Variablen-Verhältnisse) oft leicht. Bogdanov und Trevisan zeigten starke Barrieren gegen generelle Worst-Case-to-Average-Case-Reduktionen für NP-Probleme. +- **Faktorisierung:** RSA-Sicherheit basiert auf der _Average-Case_-Annahme „Faktorisieren zufällig gewählter Zahlen ist schwer", aber es gibt keine bekannte Reduktion vom Worst-Case. +- **Permanent:** Hier gibt es eine Worst-Case-to-Average-Case-Verbindung (Lipton 1991), aber der Permanent ist vermutlich nicht in NP. + +Für Gitterprobleme ist die Situation fundamental anders: Wenn jemand einen Algorithmus findet, der SIS für zufällige Instanzen effizient löst, dann kann man damit _jede beliebige_ Worst-Case-Instanz des approximativen SVP lösen. Für die Kryptografie bedeutet das: Die Sicherheit basiert nicht auf einer „hoffentlich schwierigen" Annahme über typische Instanzen, sondern auf der **Worst-Case-Schwierigkeit** eines gut untersuchten mathematischen Problems. + +#### Verbesserungen des Verbindungsfaktors + +Der „Verbindungsfaktor" γ wurde über die Jahre schrittweise verbessert: + +|Referenz|Verbindungsfaktor γ| +|---|---| +|Ajtai (1996)|> n⁸ (von Cai geschätzt)| +|Cai & Nerurkar (1997)|n^{4+ε}| +|Micciancio (2004)|n³ · ω(√(log n · log log n))| +|**Micciancio & Regev (2007)**|**Õ(n)** — fast linear!| + +Das Ergebnis von **Micciancio und Regev** ist besonders bedeutsam: Der Verbindungsfaktor Õ(n) gilt für SVP, SIVP, CRP und BDD gleichzeitig. Die Hauptwerkzeuge sind **Gauß-Verteilungen über Gittern** und die hochdimensionale **Fourier-Transformation**. Sie definieren einen neuen Gitterparameter (den „Smoothing-Parameter"), der bestimmt, wie viel Gaußsches Rauschen man einem Gitter hinzufügen muss, um eine nahezu gleichmäßige Verteilung zu erhalten. Dieser Parameter ermöglicht eine elegante und einheitliche Behandlung aller vier Probleme. + +**Grenze der Technik:** Der Verbindungsfaktor Õ(n) liegt nahe an der Grenze √n, ab der GapSVP in NP ∩ coNP liegt. Eine weitere Verbesserung auf o(√n) würde die Worst-Case-Annahme in eine Region bringen, die möglicherweise „zu leicht" für kryptografische Zwecke ist. + +### 4.5 Die Reduktionskette zur Kryptografie: LWE + +**Regev (2005)** führte das **Learning With Errors (LWE)** Problem ein, das die Brücke zwischen Gitterproblemen und moderner Kryptografie schlägt. + +#### Das LWE-Problem + +LWE-Instanz: Gegeben sind m Paare (aᵢ, bᵢ) ∈ ℤ_q^n × ℤ_q, wobei bᵢ = ⟨aᵢ, s⟩ + eᵢ mod q. Hier ist s ∈ ℤ_q^n ein geheimer Vektor, die aᵢ sind zufällig und uniform gewählt, und die eᵢ sind kleine Fehlerterme (aus einer diskreten Gauß-Verteilung mit Parameter α·q). + +- **Search-LWE:** Finde s. +- **Decision-LWE:** Unterscheide (aᵢ, ⟨aᵢ, s⟩ + eᵢ) von uniform zufälligen Paaren (aᵢ, uᵢ). + +Ohne die Fehler eᵢ wäre dies trivial (Gauß-Elimination). Die kleinen Fehler machen das Problem drastisch schwerer — sie „verwischen" die lineare Struktur gerade genug. Die kryptografische Idee: (A, b = As + e) ist der öffentliche Schlüssel, s der private Schlüssel. Ein Bit wird verschlüsselt, indem mehrere Gleichungen addiert und das Bit im Ergebnis versteckt wird. + +#### Regevs Reduktion + +> **Regevs Hauptresultat (2005):** Wenn es einen effizienten Algorithmus für LWE gibt, dann gibt es einen effizienten **Quanten**algorithmus für GapSVP und SIVP mit Approximationsfaktor Õ(n/α). + +Die Reduktion ist quantenmechanisch — sie nutzt Quantenüberlagerungen, um aus einem LWE-Orakel Samples von einer diskreten Gauß-Verteilung über das Gitter zu erzeugen. Ob die Quantenmechanik hier notwendig ist, war eine zentrale offene Frage. + +**Peikert (2009)** beantwortete diese teilweise: Er zeigte eine **klassische** Reduktion von GapSVP auf LWE, allerdings nur für große Moduli q ≥ 2^{n/2}. Für polynomielle Moduli nutzt Peikert eine neue Variante ζ-to-γ-GapSVP, die möglicherweise leichter ist, aber basierend auf dem Stand der Algorithmen immer noch exponentiell schwer erscheint. + +**Brakerski et al. (2013)** gaben eine Modulus-Reduktion: LWE mit exponentiellem Modulus in Dimension n reduziert sich auf LWE mit polynomiellem Modulus in Dimension n² — klassisch, ohne Quantenmechanik. + +#### Die vollständige Reduktionskette + +``` +Worst-Case GapSVP/SIVP (n-dim, Faktor Õ(n/α)) + ↓ Ajtai 1996, Micciancio-Regev 2007 +Average-Case SIS (schwer für zufällige Instanzen) + ↓ Regev 2005, Peikert 2009 +Average-Case LWE (schwer für zufällige Instanzen) + ↓ kryptografische Konstruktionen +ML-KEM (FIPS 203), ML-DSA (FIPS 204), FHE, ... +``` + +**Quellen:** + +- Micciancio: "SVP Hard to Approximate" — https://cseweb.ucsd.edu/~daniele/papers/SVP.pdf +- Peikert/Stephens-Davidowitz: "Complexity of SVP" — https://www.cs.umd.edu/~gasarch/open/svp-color.pdf +- Regev: Lecture Notes "Average-case Hardness" — https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/averagecase.pdf +- Micciancio & Regev: "Worst-case to Average-case Reductions based on Gaussian Measures" — https://cims.nyu.edu/~regev/papers/average.pdf +- Aharonov & Regev: "Lattice Problems in NP ∩ coNP" (J. ACM, 2005) — https://dl.acm.org/doi/10.1145/1089023.1089025 +- Aharonov & Regev: "A Lattice Problem in Quantum NP" — https://arxiv.org/abs/quant-ph/0307220 +- Regev: "On Lattices, Learning with Errors..." — https://cims.nyu.edu/~regev/papers/qcrypto.pdf +- Regev: "The Learning with Errors Problem" (Survey) — https://cims.nyu.edu/~regev/papers/lwesurvey.pdf +- Peikert: "Public-Key Cryptosystems from the Worst-Case SVP" — https://web.eecs.umich.edu/~cpeikert/pubs/svpcrypto.pdf +- Regev: Lecture Notes "GapCVP in coNP" — https://cims.nyu.edu/~regev/teaching/lattices_fall_2004/ln/gg.pdf +- Peikert: "Limits on Hardness in ℓp Norms" — https://web.eecs.umich.edu/~cpeikert/pubs/lp_norms.pdf + +--- + +## 5. Algorithmen & bekannte Schranken + +### 5.1 Der LLL-Algorithmus (1982) + +Der **Lenstra-Lenstra-Lovász (LLL)** Algorithmus ist einer der einflussreichsten Algorithmen der theoretischen Informatik und berechnet eine „reduzierte" Gitterbasis in **polynomieller Zeit**. + +#### Was ist eine LLL-reduzierte Basis? + +Eine Basis B = {b₁, ..., bₙ} heißt δ-LLL-reduziert (typischerweise δ = 3/4), wenn zwei Bedingungen erfüllt sind: + +1. **Größenreduktion:** |μᵢ,ⱼ| ≤ 1/2 für alle i > j. Die Gram-Schmidt-Koeffizienten μᵢ,ⱼ = ⟨bᵢ, b̃ⱼ⟩/⟨b̃ⱼ, b̃ⱼ⟩ messen, wie viel jeder Basisvektor in Richtung der vorherigen Gram-Schmidt-Vektoren zeigt. Die Bedingung |μᵢ,ⱼ| ≤ 1/2 bedeutet, dass man die ganzzahligen Vielfachen der vorherigen Vektoren so weit wie möglich subtrahiert hat — analog zur Größenreduktion bei der Gram-Schmidt-Orthogonalisierung, aber unter Beibehaltung der Ganzzahligkeit. + +2. **Lovász-Bedingung:** ‖b̃ᵢ₊₁‖² ≥ (δ − μ²ᵢ₊₁,ᵢ) · ‖b̃ᵢ‖² für alle i. Diese Bedingung stellt sicher, dass die Gram-Schmidt-Vektoren nicht „zu schnell" kürzer werden. Für n = 2 entspricht sie der Bedingung, dass die Basisvektoren in der richtigen Reihenfolge stehen (der kürzere zuerst). In höheren Dimensionen verallgemeinert sie diese Ordnungsbedingung. + + +#### Der Algorithmus + +LLL arbeitet iterativ und ist konzeptuell einfach: + +1. Berechne die Gram-Schmidt-Orthogonalisierung. +2. Für k = 2, ..., n: Führe Größenreduktion durch (subtrahiere ganzzahlige Vielfache vorheriger Vektoren). +3. Prüfe die Lovász-Bedingung für k und k−1. +4. Falls verletzt: Tausche b_k und b_{k-1} und gehe zurück zu k−1. +5. Falls erfüllt: Gehe weiter zu k+1. + +**Terminierung:** Die Potentialfunktion D = Π_{i=1}^n det(L(b₁,...,bᵢ))² ist eine positive ganze Zahl, die bei jedem Swap um mindestens den Faktor 1/δ < 1 abnimmt. Da D ≥ 1 (weil die Determinanten ganzzahliger Gitter ganzzahlig sind), terminiert der Algorithmus nach höchstens O(n² log(max ‖bᵢ‖)) Swaps. Jeder Swap und jede Größenreduktion erfordern polynomiell viele Operationen, also ist die **Gesamtlaufzeit polynomiell**. + +#### Approximationsgarantie + +Der erste Vektor b₁ einer LLL-reduzierten Basis erfüllt: + +‖b₁‖ ≤ 2^{(n-1)/2} · λ₁(L) + +Also liefert LLL eine **2^{(n-1)/2}-Approximation** des kürzesten Vektors — exponentiell im schlimmsten Fall. Durch Schnorrs **BKZ-Verallgemeinerung** (die die Lovász-Bedingung auf Blöcke von k Vektoren erweitert und intern exaktes SVP in Dimension k löst) erreicht man bessere Faktoren von 2^{O(n(log log n)²/log n)} in Polynomialzeit. + +#### Anwendungen + +Trotz des exponentiellen Worst-Case-Faktors ist LLL extrem nützlich: Brechen von Knapsack-Kryptosystemen, Faktorisierung von Polynomen über ℤ, ganzzahlige Programmierung in fester Dimension, Finden algebraischer Relationen, und viele Anwendungen in der Kryptoanalyse. + +### 5.2 Exakte Algorithmen + +#### Enumeration (Kannan, 1983) + +Kombiniert Basisreduktion mit erschöpfender Aufzählung. Grundidee: Nach einer guten Basisreduktion als Preprocessing werden systematisch alle Gittervektoren v = Σ zᵢbᵢ aufgezählt, deren projizierte Längen innerhalb bestimmter Schranken liegen. Die Schranken ergeben sich aus der reduzierten Basis und der Gram-Schmidt-Orthogonalisierung. + +- **Laufzeit:** n^{O(n)} — superexponentiell +- **Speicher:** poly(n) — der große Vorteil gegenüber Sieving! +- In der Praxis (bis Dimension ≈60-80) oft schneller als Sieving, da die Worst-Case-Analyse sehr pessimistisch ist + +#### Sieving (AKS, 2001) + +Die konzeptionell eleganteste Methode. **Grundidee:** Man startet mit exponentiell vielen (~2^{10n}) zufälligen Gittervektoren in einer großen Kugel. Dann werden iterativ Paare naher Vektoren durch ihre Differenz ersetzt — ein „Sieb", das immer kürzere Vektoren erzeugt. Nach genügend Runden enthält die Menge den kürzesten Vektor. + +**Warum funktioniert das?** Statt an „Vektoren" zu denken, betrachte man Gitterpunkte modulo dem kürzesten Vektor. Wenn zwei Punkte nahe am gleichen Gitterpunkt liegen, ist ihre Differenz kurz. Durch ein Packing-Argument (Kugeln vom Radius λ₁/2 um verschiedene Gitterpunkte sind disjoint) kann man zeigen, dass genügend solche Paare gefunden werden. + +**Laufzeit-Entwicklung:** + +- AKS (2001): 2^{O(n)} (erste einfach-exponentielle Lösung) +- Nguyen-Vidick (2008, heuristisch): (4/3+ε)^n ≈ 2^{0.415n} — zeigte, dass Sieving praktisch ist +- Best provable (Aggarwal et al.): 2^{n+o(n)} — optimal up to lower-order terms + +**GaussSieve (Micciancio-Voulgaris, 2010):** Eine praktischere Variante, die statt einer Batch-Verarbeitung inkrementell arbeitet — neue Vektoren werden einzeln eingefügt und gegen die bestehende Liste reduziert. In Experimenten deutlich effizienter als die theoretisch analysierten Varianten. + +#### Voronoi-Zellen (Micciancio & Voulgaris, 2010) + +Ein fundamentaler anderer Ansatz: Berechne die Voronoi-Zelle des Gitters (die Menge aller Punkte, die näher am Ursprung sind als an jedem anderen Gitterpunkt). Aus der Voronoi-Zelle kann man CVP, SVP und die meisten anderen Gitterprobleme in NP lösen. + +- **Deterministisch** (kein Zufall nötig) +- **Laufzeit:** Õ(4^n), **Speicher:** Õ(2^n) +- Löst nicht nur SVP, sondern auch CVP — der erste deterministische 2^{O(n)}-Algorithmus für CVP + +### 5.3 Übersichtstabelle + +|Ansatz|γ|Laufzeit|Speicher| +|---|---|---|---| +|LLL (1982)|2^{(n-1)/2}|poly(n)|poly(n)| +|BKZ-k (Schnorr)|2^{O(n/k)}|2^{O(k)}|poly(n)| +|Enumeration (Kannan)|1 (exakt)|n^{O(n)}|poly(n)| +|Sieving (best provable)|1 (exakt)|2^{n+o(n)}|2^{n+o(n)}| +|Voronoi (MV 2010)|1 (exakt)|Õ(4^n)|Õ(2^n)| + +**Offene Frage:** Kann SVP in 2^{O(n)} Zeit mit 2^{o(n)} Speicher gelöst werden? + +**Quellen:** + +- Wikipedia: LLL Algorithm — https://en.wikipedia.org/wiki/Lenstra%E2%80%93Lenstra%E2%80%93Lov%C3%A1sz_lattice_basis_reduction_algorithm +- Micciancio: CSE 206A Lecture 3 — https://cseweb.ucsd.edu/classes/wi12/cse206A-a/lec3.pdf +- MIT OCW: "LLL algorithm" — https://ocw.mit.edu/courses/18-409-topics-in-theoretical-computer-science-an-algorithmists-toolkit-fall-2009/ +- Nguyen & Vidick: "Sieve Algorithms for SVP are Practical" — https://people.csail.mit.edu/vidick/JoMC08.pdf +- Voulgaris: "Algorithms for closest and shortest vector problems" — https://escholarship.org/uc/item/4zt7x45z +- Aggarwal et al.: "Faster Provable Sieving" — https://arxiv.org/pdf/1907.04406 +- Aggarwal et al.: "Improved Algorithms for SVP" (STACS 2021) — https://drops.dagstuhl.de/storage/00lipics/lipics-vol187-stacs2021/LIPIcs.STACS.2021.4/LIPIcs.STACS.2021.4.pdf + +--- + +## 6. Bedeutung für Post-Quantum-Kryptografie + +### 6.1 Das Problem mit RSA und ECC + +RSA und ECC (elliptische Kurven) können durch **Shors Algorithmus** effizient gebrochen werden. Die Gefahr des „Harvest now, decrypt later"-Angriffs: Verschlüsselte Daten werden heute abgefangen und in Zukunft entschlüsselt. + +### 6.2 NIST-Standards (August 2024) + +Am 13. August 2024 veröffentlichte NIST die ersten drei Post-Quantum-Standards: + +**FIPS 203 — ML-KEM:** Basierend auf Kyber. Primärer Standard für Schlüsselaustausch. Sicherheit basiert auf Module-LWE. Drei Stufen: ML-KEM-512 (~128-bit), ML-KEM-768 (~192-bit, empfohlen), ML-KEM-1024 (~256-bit). Schlüsselgrößen ~1.5 KB, sub-Millisekunden Handshakes. + +**FIPS 204 — ML-DSA:** Basierend auf Dilithium. Primärer Standard für digitale Signaturen. Basiert auf Module-LWE und Module-SIS. Signaturen 2-5 KB, schnelle Verifikation, seitenkanalresistent. + +**FIPS 205 — SLH-DSA:** Basierend auf SPHINCS+. Hashbasiert, als Backup falls Gitter gebrochen werden. + +Weitere: FALCON (FIPS 206, noch in Arbeit) für kleine Signaturen; HQC (März 2025) als codebasiertes Backup für ML-KEM. + +### 6.3 Die Sicherheitsargumentation + +Die vollständige Kette: + +1. **Worst-Case-Härte:** GapSVP/SIVP gelten als schwer — kein bekannter Quanten- oder klassischer Algorithmus besser als 2^{Ω(n)}. +2. **Worst-Case → Average-Case:** Ajtai/Regev/Peikert: Wenn GapSVP im Worst-Case schwer ist, ist LWE als Average-Case-Problem schwer. +3. **LWE → Kryptografie:** ML-KEM/ML-DSA basieren auf Module-LWE/Module-SIS. Langlois & Stehlé (2015) zeigten Worst-Case-to-Average-Case-Reduktionen für Module-Varianten. + +**Einzigartigkeit:** Während RSA/ECC auf Average-Case-Annahmen beruhen, bieten gitterbasierte Systeme Worst-Case-Sicherheit. + +**Quellen:** + +- NIST Post-Quantum Standards — https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards +- NIST PQC Standardization — https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization +- Wikipedia: NIST PQC — https://en.wikipedia.org/wiki/NIST_Post-Quantum_Cryptography_Standardization +- Langlois & Stehlé: "Module Lattice Reductions" — https://eprint.iacr.org/2012/090.pdf + +--- + +## 7. Zusammenfassung & offene Fragen + +### Zusammenfassung + +|Eigenschaft|Status| +|---|---| +|SVP exakt (ℓ₂): NP-hart?|Ja, randomisierte Reduktion (Ajtai 1998)| +|SVP exakt (ℓ∞): NP-hart?|Ja, deterministisch (van Emde Boas 1981)| +|Konstante Approximation: NP-hart?|Ja, randomisiert (Micciancio 2001)| +|GapSVP_{O(√(n/log n))} ∈ coAM?|Ja (Goldreich & Goldwasser 2000)| +|GapSVP_{O(√n)} ∈ NP ∩ coNP?|Ja (Aharonov & Regev 2005)| +|Worst-Case = Average-Case?|Ja, Faktor Õ(n) (Micciancio-Regev 2007)| +|Bester exakter Algorithmus|2^{n+o(n)} (Sieving)| +|Beste Poly-Zeit-Approximation|2^{O(n)} (LLL)| +|Quantenvorteil bekannt?|Nein| + +### Zentrale offene Fragen + +1. **Deterministische NP-Härte** von SVP in ℓ₂? (Offen seit 1998) +2. **Wo kippt die Härte?** Zwischen n^{c/log log n} und √n liegt eine unverstandene Zone. +3. **Ist GapSVP_{n^{2+ε}} NP-hart?** Falls ja → LWE-Kryptografie sicher allein aus P ≠ NP. +4. **Quantenalgorithmen für SVP?** Keine bekannt — eine der wichtigsten offenen Fragen. +5. **SVP in 2^{O(n)} Zeit, 2^{o(n)} Speicher?** +6. **Vollständige Dequantisierung** der LWE-Reduktion für polynomielle Moduli? + +--- + +## Literaturverzeichnis + +|Kürzel|Referenz| +|---|---| +|[Ajt96]|Ajtai. "Generating hard instances of lattice problems." STOC 1996.| +|[Ajt98]|Ajtai. "SVP in ℓ₂ is NP-hard for randomized reductions." STOC 1998.| +|[AKS01]|Ajtai, Kumar, Sivakumar. "A sieve algorithm for SVP." STOC 2001.| +|[AR05]|Aharonov, Regev. "Lattice problems in NP ∩ coNP." J. ACM 2005.| +|[GG00]|Goldreich, Goldwasser. "Limits of nonapproximability of lattice problems." JCSS 2000.| +|[Kan83]|Kannan. "Improved algorithms for integer programming." STOC 1983.| +|[LLL82]|Lenstra, Lenstra, Lovász. "Factoring polynomials." Math. Annalen 1982.| +|[Mic01]|Micciancio. "SVP hard to approximate to within some constant." SICOMP 2001.| +|[MR07]|Micciancio, Regev. "Worst-case to average-case via Gaussian measures." SICOMP 2007.| +|[MV10]|Micciancio, Voulgaris. "Deterministic 2^{O(n)} for lattice problems." STOC 2010.| +|[Pei09]|Peikert. "Public-key cryptosystems from worst-case SVP." STOC 2009.| +|[PS23]|Peikert, Stephens-Davidowitz. "Complexity of SVP." SIGACT News 2023.| +|[Reg05]|Regev. "On lattices, learning with errors..." STOC 2005 / J. ACM 2009.| \ No newline at end of file diff --git a/Komplexitätstheorie/vortrag/Zeitplan.md b/Komplexitätstheorie/vortrag/Zeitplan.md new file mode 100644 index 0000000..bcdc183 --- /dev/null +++ b/Komplexitätstheorie/vortrag/Zeitplan.md @@ -0,0 +1,75 @@ +# SVP-Vortrag Vorbereitung — Zeitplan +## Tag 1 — Inhalt & Folien (4–5h) +### Block 1: Tiefgang ins Thema (4 Pomodoros · ~2h) + +| # | Dauer | Fokus | +| --- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| 🍅1 | 25min | **Problemverständnis vertiefen:** SVP formal definieren, Approximationsfaktoren (γ-SVP) verstehen, Abgrenzung zu CVP | +| ☕ | 5min | Pause | +| 🍅2 | 25min | **Härte & Reduktionen:** NP-Härte von SVP, Worst-Case-to-Average-Case-Reduktion (Ajtai), warum das für Krypto so besonders ist | +| ☕ | 5min | Pause | +| 🍅3 | 25min | **Algorithmen:** LLL-Algorithmus einordnen (polynomiell, aber nur exponentielle Approximation), Schnorr-Euchner, warum exakte Lösung so schwer bleibt | +| ☕ | 5min | Pause | +| 🍅4 | 25min | **Krypto-Verbindung:** Lattice-based Crypto (NTRU, LWE/SIS als verwandte Probleme), Relevanz für Post-Quantum-Kryptografie, NIST-Standardisierung | +| ☕ | 15min | **Lange Pause** — aufstehen, Wasser, kurz raus | + +### Block 2: Folien anpassen (3 Pomodoros · ~1,5h) + +|# |Dauer|Fokus | +|--|-----|-----------------------------------------------------------------------------------------------------------------------| +|🍅5|25min|**Folien durchgehen:** Reveal.js öffnen, Lücken identifizieren, neue Erkenntnisse aus Block 1 einarbeiten | +|☕ |5min |Pause | +|🍅6|25min|**Folien fertigstellen:** Visualisierungen prüfen, Übergänge zwischen Folien glätten, Speaker-Notes ergänzen | +|☕ |5min |Pause | +|🍅7|25min|**Erster Trockenlauf:** Einmal komplett durchsprechen (gerne mit Stoppuhr), Timing notieren, holprige Stellen markieren| +|☕ |15min|**Lange Pause** | + +### Block 3: Nachschliff (1–2 Pomodoros · ~0,5–1h) + +|# |Dauer|Fokus | +|--|-----|----------------------------------------------------------------------------------------------------------------------| +|🍅8|25min|**Zweiter Trockenlauf:** Holprige Stellen gezielt verbessern, nochmal komplett durchsprechen | +|☕ |5min |Pause | +|🍅9|25min|*(Optional)* **Prof-Fragen vorbereiten:** 3–4 wahrscheinliche Fragen aufschreiben + Stichpunkt-Antworten (siehe unten)| + +----- + +## Tag 2 — Feinschliff & Üben (1–2h) + +> Heute hast du auch deinen anderen Vortrag — danach nur noch SVP polieren, keine neuen Inhalte! + +### Block 1: Generalprobe (2–3 Pomodoros · ~1–1,5h) + +|# |Dauer|Fokus | +|--|-----|----------------------------------------------------------------------------------------------------------| +|🍅1|25min|**Dritter Trockenlauf:** Komplett durchsprechen, Timing prüfen (Ziel: 10–15min), letzte Folien-Tweaks | +|☕ |5min |Pause | +|🍅2|25min|**Prof-Fragen durchgehen:** Antworten laut durchsprechen, nicht nur lesen — das macht den Unterschied | +|☕ |5min |Pause | +|🍅3|25min|*(Falls Zeit)* **Letzter Durchlauf:** Einmal sauber von vorne bis hinten, dann Laptop zuklappen und fertig| + +----- + +## Wahrscheinliche Prof-Fragen + +Bereite dir auf jede Frage 3–4 Sätze als Antwort vor: + +1. **Warum ist SVP für Post-Quantum-Krypto relevant?** + → Worst-Case-Härte überträgt sich auf Average-Case → Kryptosysteme basieren auf der Annahme, dass SVP schwer bleibt, auch für Quantencomputer +2. **Was leistet der LLL-Algorithmus, und wo sind seine Grenzen?** + → Polynomielle Laufzeit, aber Approximationsfaktor exponentiell in der Dimension → reicht für kleine Dimensionen, nicht für kryptografische Parameter +3. **Was ist der Unterschied zwischen SVP und CVP?** + → SVP: kürzester Vektor im Gitter, CVP: nächster Gitterpunkt zu einem beliebigen Punkt → CVP ist mindestens so schwer wie SVP +4. **Was bedeutet die Worst-Case-to-Average-Case-Reduktion?** + → Ajtai 1996: Wenn man zufällige Instanzen von SIS lösen kann, kann man auch Worst-Case-SVP lösen → einzigartig in der Kryptografie, bei den meisten Problemen (RSA, DLP) basiert Sicherheit nur auf Average-Case-Annahmen +5. **Wie ordnet sich SVP in die Komplexitätslandschaft ein?** + → NP-hart für exakte Lösung (Ajtai, 1998), für bestimmte Approximationsfaktoren in NP ∩ coNP → nicht NP-vollständig unter üblichen Annahmen + +----- + +## Regeln für dich selbst + +- Handy in einen anderen Raum während Pomodoros +- Nach Tag 1 keine neuen Quellen mehr lesen +- Lieber einmal mehr üben als eine Folie perfektionieren +- Du musst nicht alles wissen — du musst zeigen, dass du es verstanden hast \ No newline at end of file diff --git a/Komplexitätstheorie/zusammenfassungen/Grundlagen.md b/Komplexitätstheorie/zusammenfassungen/Grundlagen.md new file mode 100644 index 0000000..2e73bef --- /dev/null +++ b/Komplexitätstheorie/zusammenfassungen/Grundlagen.md @@ -0,0 +1,397 @@ +# Komplexitätstheorie – Grundlagen, Entscheidbarkeit & Probleme + +**Basierend auf:** KO1 & KO2 (Prof. Dr. Björn Grohmann, HWR Berlin) + +----- + +## 1. Die Turing-Maschine + +### Was ist eine Turing-Maschine? + +Eine Turing-Maschine (TM) ist ein abstraktes Berechnungsmodell – im Grunde der einfachste denkbare „Computer”. Sie besteht aus drei Teilen: + +- **Ein unendlich langes Band**, unterteilt in Zellen. Jede Zelle enthält genau ein Symbol. +- **Ein Lese-/Schreibkopf**, der sich auf dem Band nach links oder rechts bewegen kann, Symbole lesen und schreiben kann. +- **Eine endliche Steuerung**, die anhand des aktuellen Zustands und des gelesenen Symbols entscheidet, was als nächstes passiert. + +### Formale Definition + +Eine TM ist ein 7-Tupel $(Q, \Sigma, \Gamma, \delta, q_0, q_{\text{accept}}, q_{\text{reject}})$: + +|Bestandteil |Bedeutung | +|-------------------|------------------------------------------------------------------------------| +|$Q$ |Endliche Zustandsmenge | +|$\Sigma$ |Eingabealphabet (ohne Blanksymbol $\sqcup$) | +|$\Gamma$ |Bandalphabet ($\sqcup \in \Gamma$, $\Sigma \subseteq \Gamma$) | +|$\delta$ |Übergangsfunktion: $Q \times \Gamma \rightarrow Q \times \Gamma \times {L, R}$| +|$q_0$ |Startzustand | +|$q_{\text{accept}}$|Akzeptierzustand – die Maschine sagt „Ja” | +|$q_{\text{reject}}$|Ablehnungszustand – die Maschine sagt „Nein” | + +Die Übergangsfunktion $\delta$ ist das Herzstück: Sie sagt „Wenn du im Zustand $q$ bist und Symbol $a$ liest, dann schreibe Symbol $b$, wechsle in Zustand $q’$ und bewege den Kopf nach links oder rechts.” + +### Konfiguration + +Eine Konfiguration ist eine Momentaufnahme der TM zu einem bestimmten Zeitpunkt. Sie umfasst den aktuellen Zustand, den Bandinhalt und die Kopfposition. + +Beispiel: $1011q_701111$ bedeutet, dass auf dem Band „101101111” steht, die Maschine im Zustand $q_7$ ist und der Kopf auf dem Zeichen direkt rechts von $q_7$ steht (also auf der „0”). + +### Was bedeutet „halten”? + +Eine Turing-Maschine **hält**, wenn sie irgendwann in den Akzeptier- oder Ablehnungszustand gelangt und damit ihre Berechnung beendet. Wenn sie das nie tut, läuft sie endlos weiter – sie „hält nicht”. Das ist so, als würde ein Programm in einer Endlosschleife stecken und nie ein Ergebnis liefern. + +----- + +## 2. Varianten von Turing-Maschinen + +### Mehrband-TM (Multitape TM) + +Eine TM mit $k$ separaten Bändern und $k$ unabhängigen Köpfen. Die Übergangsfunktion hat die Form: + +$$\delta: Q \times \Gamma^k \rightarrow Q \times \Gamma^k \times {L, R, S}^k$$ + +Jede Mehrband-TM kann durch eine Einband-TM simuliert werden (alle Bänder werden hintereinander auf ein Band geschrieben, getrennt durch #-Symbole). Die Simulation kostet quadratischen Zeitoverhead: $O(T(n)^2)$. + +### Nichtdeterministische TM (NTM) + +Die Übergangsfunktion liefert statt eines einzigen Nachfolgezustands eine **Menge** von möglichen Übergängen: + +$$\delta: Q \times \Gamma \rightarrow \mathcal{P}(Q \times \Gamma \times {L, R})$$ + +Man kann sich das so vorstellen: An jedem Schritt „verzweigt” sich die Berechnung in mehrere parallele Pfade. Die NTM akzeptiert, wenn **mindestens ein** Pfad akzeptiert. Sie lehnt ab, wenn **alle** Pfade ablehnen. + +Jede NTM kann durch eine deterministische TM simuliert werden, allerdings mit exponentiellem Zeitverlust: Eine $t(n)$-Zeit-NTM wird zu einer $2^{O(t(n))}$-Zeit-DTM. + +### Universelle Turing-Maschine (UTM) + +Eine UTM $\mathcal{U}$ kann jede andere TM simulieren. Sie bekommt als Eingabe die Beschreibung einer TM $M$ (kodiert als Bitfolge, die sogenannte **Gödelnummer**) und eine Eingabe $x$ und berechnet dann $M(x)$. + +Die UTM ist im Grunde der theoretische Vorläufer des modernen Computers: Ein Gerät, das beliebige Programme ausführen kann. + +----- + +## 3. Äquivalente Berechnungsmodelle + +Mehrere andere Berechnungsmodelle sind **genauso mächtig** wie die Turing-Maschine. Das stützt die Church-Turing-These. + +|Modell |Kernidee | +|-------------------|---------------------------------------------------------------------------------------| +|**WHILE-Programme**|Schleifen mit Inkrement/Dekrement auf Variablen | +|**GOTO-Programme** |Nummerierte Anweisungen mit Sprungbefehlen | +|**Lambda-Kalkül** |Funktionsdefinition und -anwendung (Grundlage funktionaler Programmierung) | +|**Rule 110** |Eindimensionaler Zellularautomat – selbst dieses einfache System ist Turing-vollständig| + +### Church-Turing-These + +> „Jede effektiv berechenbare Funktion kann durch eine Turing-Maschine berechnet werden.” + +Das ist keine bewiesene Aussage, sondern eine These. Sie besagt: Es gibt kein Berechnungsmodell, das mehr berechnen kann als eine TM. Bisher wurde kein Gegenbeispiel gefunden. + +----- + +## 4. Entscheidbarkeit + +### Turing-erkennbar (semi-entscheidbar) + +Eine Sprache $L$ ist **Turing-erkennbar**, wenn es eine TM gibt, die so arbeitet: + +- Eingabe $w \in L$: Die TM akzeptiert (hält und sagt „Ja”). +- Eingabe $w \notin L$: Die TM lehnt ab **oder läuft endlos weiter**. + +Das Problem: Man weiß nie, ob die Maschine noch rechnet oder ob sie in einer Endlosschleife steckt. + +### Turing-entscheidbar (entscheidbar) + +Eine Sprache $L$ ist **Turing-entscheidbar**, wenn es eine TM gibt, die so arbeitet: + +- Eingabe $w \in L$: Die TM akzeptiert. +- Eingabe $w \notin L$: Die TM lehnt ab. +- **Die TM hält immer** – sie liefert auf jeder Eingabe eine definitive Antwort. + +### Der Zusammenhang + +Eine Sprache ist entscheidbar **genau dann, wenn** sie sowohl Turing-erkennbar als auch co-Turing-erkennbar ist. Die Idee: Man lässt zwei Maschinen parallel laufen – eine für $L$, eine für das Komplement $\overline{L}$. Eine von beiden wird irgendwann akzeptieren, und dann hat man die Antwort. + +### Hierarchie der Berechenbarkeit + +``` +Entscheidbar ⊂ Semi-entscheidbar ⊂ Alle Sprachen +(TM hält immer) (TM hält für w ∈ L) (manche sind gar nicht berechenbar) +``` + +----- + +## 5. Unentscheidbare Probleme + +### Das Halteproblem ($HALT_{\text{TM}}$) + +$$HALT_{\text{TM}} = {\langle M, w \rangle \mid M \text{ ist eine TM und } M \text{ hält auf Eingabe } w}$$ + +**Frage:** Kann man im Voraus entscheiden, ob ein beliebiges Programm auf einer beliebigen Eingabe irgendwann anhält oder ewig weiterläuft? + +**Antwort:** Nein – das Halteproblem ist unentscheidbar. + +### Die Akzeptanzsprache ($A_{\text{TM}}$) + +$$A_{\text{TM}} = {\langle M, w \rangle \mid M \text{ ist eine TM und } M \text{ akzeptiert } w}$$ + +$A_{\text{TM}}$ ist semi-entscheidbar (man kann $M$ auf $w$ simulieren), aber **nicht entscheidbar**. + +### Beweis durch Diagonalisierung + +Der Beweis nutzt dieselbe Idee wie Cantors Diagonalisierung: + +1. **Annahme:** Es gibt einen Entscheider $H$, der für jede TM $M$ und jede Eingabe $w$ korrekt entscheidet, ob $M$ die Eingabe $w$ akzeptiert. +2. **Konstruktion:** Baue eine „teuflische” Maschine $D$, die bei Eingabe $\langle M \rangle$ den Entscheider $H$ auf $\langle M, \langle M \rangle \rangle$ aufruft – also fragt „akzeptiert $M$ sich selbst?” – und dann **das Gegenteil tut**. +3. **Widerspruch:** Was passiert bei $D(\langle D \rangle)$? +- Falls $H$ sagt „$D$ akzeptiert sich selbst” → $D$ lehnt ab. Aber dann akzeptiert $D$ sich selbst nicht – Widerspruch zu dem, was $H$ gesagt hat. +- Falls $H$ sagt „$D$ akzeptiert sich selbst nicht” → $D$ akzeptiert. Aber dann akzeptiert $D$ sich selbst doch – wieder Widerspruch. +1. **Schlussfolgerung:** $H$ kann nicht existieren. + +Man kann sich das auch als Tabelle vorstellen: Zeilen sind TMs, Spalten sind Eingaben, Einträge sind 0 (lehnt ab) oder 1 (akzeptiert). $D$ nimmt die Diagonale und invertiert sie – und kann daher in keiner Zeile der Tabelle vorkommen, obwohl $D$ selbst eine TM ist. + +### Postsches Korrespondenzproblem (PCP) + +**Gegeben:** Wortpaare $(x_1, y_1), \ldots, (x_k, y_k)$, dargestellt als Dominosteine mit Ober- und Unterseite. + +**Gefragt:** Kann man eine Folge von Dominosteinen (mit Wiederholung) so aneinanderlegen, dass die obere und die untere Zeichenkette identisch sind? + +Das PCP ist unentscheidbar, aber semi-entscheidbar (man kann systematisch alle Kombinationen durchprobieren). + +### Hilberts 10. Problem + +**Frage (1900):** Gibt es ein Verfahren, das für jede Polynomgleichung mit ganzzahligen Koeffizienten entscheidet, ob sie eine ganzzahlige Lösung hat? + +**Antwort (Matijassewitsch, 1970):** Nein – unentscheidbar. + +### Weitere unentscheidbare Probleme + +|Problem |Frage |Semi-entscheidbar? | +|-----------------------------------|-----------------------------------------------|------------------------------| +|$E_{\text{TM}}$: Leerheitsproblem |Ist $L(M) = \emptyset$? |Nein (co-Turing-erkennbar) | +|$EQ_{\text{TM}}$: Äquivalenzproblem|Gilt $L(M_1) = L(M_2)$? |Nein | +|$REGULAR_{\text{TM}}$ |Ist $L(M)$ regulär? |Nein | +|$MIN_{\text{TM}}$ |Ist $M$ eine minimale TM? |Nicht einmal semi-entscheidbar| +|Erfüllbarkeit (Prädikatenlogik) |Ist ein prädikatenlogischer Ausdruck erfüllbar?|Ja, aber unentscheidbar | +|Gültigkeit (Prädikatenlogik) |Ist ein Ausdruck allgemeingültig? |Ja, aber unentscheidbar | + +----- + +## 6. Zeitkomplexität + +### Laufzeit + +Die Laufzeit (Running Time) einer deterministischen TM $M$ ist die Funktion $f(n)$, die angibt, wie viele Schritte $M$ **im schlimmsten Fall** auf einer Eingabe der Länge $n$ benötigt. + +Bei einer nichtdeterministischen TM zählt man die maximale Schrittzahl über **alle Berechnungspfade** (auch die nicht-akzeptierenden). + +### Zeitkonstruierbarkeit + +Eine Funktion $t(n)$ heißt zeitkonstruierbar, wenn man den Wert $t(n)$ selbst in $O(t(n))$ Schritten berechnen kann. Beispiele: $n$, $n \log n$, $n^2$, $2^n$. + +### Simulationskosten + +|Transformation |Zeitoverhead | +|-----------------------------------------------------|----------------------------| +|Alphabetreduktion (auf ${0,1,\sqcup,\triangleright}$)|$O(\log | +|$k$ Bänder → 1 Band |$O(k \cdot T(n)^2)$ | +|NTM → DTM |$2^{O(T(n))}$ (exponentiell)| +|Bidirektional → Unidirektional |$O(T(n))$ | + +----- + +## 7. Komplexitätsklassen + +### Die wichtigsten Klassen im Überblick + +|Klasse |Definition |Intuition |Beispiele | +|-----------|--------------------------------|------------------------------------|--------------------------------------------| +|**P** |$\bigcup_k \text{TIME}(n^k)$ |Effizient lösbar |Sortieren, kürzeste Wege, Primzahltest (AKS)| +|**NP** |$\bigcup_k \text{NTIME}(n^k)$ |Lösung effizient überprüfbar |SAT, Hamiltonkreis, TSP, Knapsack | +|**co-NP** |Komplemente der NP-Sprachen |„Nein”-Antwort effizient überprüfbar|UNSAT, Tautologie | +|**PSPACE** |$\bigcup_k \text{SPACE}(n^k)$ |Polynomieller Speicher reicht |TQBF | +|**EXPTIME**|$\bigcup_k \text{TIME}(2^{n^k})$|Exponentielle Zeit |Generalisiertes Schach | + +### Die Inklusionskette + +$$P \subseteq NP \subseteq PSPACE = NPSPACE \subseteq EXPTIME$$ + +Die Gleichheit $PSPACE = NPSPACE$ folgt aus Savitch’s Theorem. + +### P vs. NP – Die zentrale offene Frage + +**P** = Probleme, die ein Computer effizient **lösen** kann. +**NP** = Probleme, deren Lösung ein Computer effizient **überprüfen** kann. + +Die Frage „Ist P = NP?” fragt im Kern: Ist jedes Problem, dessen Lösung leicht zu überprüfen ist, auch leicht zu finden? Die meisten Informatiker vermuten Nein. Das Problem ist eines der sieben Millennium-Probleme (Preisgeld: 1 Million Dollar). + +### Speicherkomplexität + +$$\text{SPACE}(f(n)) = {L \mid L \text{ wird von einer det. TM in } O(f(n)) \text{ Speicher entschieden}}$$ + +$$\text{NSPACE}(f(n)) = {L \mid L \text{ wird von einer nichtdet. TM in } O(f(n)) \text{ Speicher entschieden}}$$ + +### Savitch’s Theorem + +$$\text{NSPACE}(f(n)) \subseteq \text{SPACE}(f^2(n))$$ + +Nichtdeterministischer Speicher lässt sich deterministisch mit nur quadratischem Mehraufwand simulieren. Die Kernidee ist die CANYIELD-Prozedur: Um zu prüfen, ob Konfiguration $c_2$ von $c_1$ in $t$ Schritten erreichbar ist, probiert man alle möglichen Zwischenkonfigurationen $c_m$ und prüft rekursiv, ob $c_1 \to c_m$ in $t/2$ Schritten und $c_m \to c_2$ in $t/2$ Schritten möglich ist. Die Rekursionstiefe ist $O(\log t)$, jede Ebene braucht $O(f(n))$ Speicher, also insgesamt $O(f(n)^2)$. + +----- + +## 8. NP-Vollständigkeit + +### Polynomialzeit-Reduktion + +Eine Sprache $A$ ist polynomialzeit-reduzierbar auf $B$ (geschrieben $A \leq_P B$), wenn es eine in Polynomialzeit berechenbare Funktion $f$ gibt mit: + +$$w \in A \iff f(w) \in B$$ + +Intuition: Wenn man $B$ lösen kann, kann man auch $A$ lösen – man wandelt einfach jede $A$-Instanz mittels $f$ in eine $B$-Instanz um. $B$ ist also **mindestens so schwer** wie $A$. + +### Definition: NP-vollständig + +Eine Sprache $B$ ist NP-vollständig, wenn: + +1. $B \in NP$ (die Lösung ist effizient überprüfbar), **und** +2. $A \leq_P B$ für **jedes** $A \in NP$ (jedes NP-Problem lässt sich auf $B$ reduzieren). + +Erfüllt $B$ nur Bedingung 2, heißt $B$ **NP-hard** (NP-schwer). NP-harte Probleme müssen nicht selbst in NP liegen. + +$$\text{NP-vollständig} = NP \cap \text{NP-hard}$$ + +### Cook-Levin-Theorem (1971/1973) + +**SAT ist NP-vollständig.** Das war der erste Beweis, dass überhaupt ein NP-vollständiges Problem existiert. Daraus folgt: Könnte man SAT in Polynomialzeit lösen, wäre $P = NP$. + +### PSPACE-Vollständigkeit + +Eine Sprache $B$ ist PSPACE-vollständig, wenn $B \in PSPACE$ und jedes $A \in PSPACE$ polynomiell auf $B$ reduzierbar ist. + +**TQBF** (True Quantified Boolean Formula) ist PSPACE-vollständig. TQBF fragt, ob eine voll quantifizierte Boolesche Formel (mit $\forall$ und $\exists$) wahr ist. TQBF verallgemeinert SAT: Während SAT nur fragt „Gibt es eine erfüllende Belegung?” ($\exists$), erlaubt TQBF auch Allquantoren ($\forall$), was das Problem härter macht. + +----- + +## 9. Die wichtigsten NP-vollständigen Probleme + +### SAT (Erfüllbarkeitsproblem) + +**Eingabe:** Eine Boolesche Formel $\phi$ (z.B. $(x \lor \bar{y}) \land (\bar{x} \lor z)$). +**Frage:** Gibt es eine Belegung der Variablen mit wahr/falsch, sodass die Formel wahr wird? +**Zertifikat:** Die erfüllende Belegung selbst – man setzt die Werte ein und prüft. + +### Hamiltonkreis + +**Eingabe:** Ein ungerichteter Graph. +**Frage:** Gibt es einen Rundweg, der **jeden Knoten genau einmal** besucht und zum Startknoten zurückkehrt? +**Zertifikat:** Der Rundweg selbst – man prüft, ob er jeden Knoten genau einmal enthält. + +Die NP-Vollständigkeit wird durch Reduktion von SAT bewiesen, wobei eine Formel in einen Graphen mit speziellen Gadgets übersetzt wird (Variablenpfade, XOR-Gadgets, OR-Gadgets, Kreuzungs-Gadgets). + +### Traveling Salesman Problem (TSP) + +**Eingabe:** Städte mit Entfernungen und ein Budget $k$. +**Frage:** Gibt es eine Rundreise durch alle Städte mit Gesamtlänge $\leq k$? +**Zertifikat:** Die Rundreise selbst. + +### Knapsack (Rucksackproblem) + +**Eingabe:** Gegenstände mit Gewichten und Werten, ein Rucksack mit Kapazität $W$ und ein Zielwert $V$. +**Frage:** Kann man Gegenstände so auswählen, dass das Gesamtgewicht $\leq W$ ist und der Gesamtwert $\geq V$? +**Zertifikat:** Die Auswahl der Gegenstände. + +### Minesweeper + +**Eingabe:** Ein teilweise aufgedecktes Minesweeper-Feld. +**Frage:** Gibt es eine konsistente Minenbelegung für die verdeckten Felder? + +Die NP-Vollständigkeit wird gezeigt, indem man logische Schaltkreise (Drähte, NOT-Gates, AND-Gates) innerhalb eines Minesweeper-Spielfelds simuliert. Damit lässt sich jede SAT-Instanz als Minesweeper-Konfiguration kodieren. + +### Karp’s Liste (1972) + +Richard Karp bewies 1972, dass 21 Probleme NP-vollständig sind, alle durch Reduktionen ausgehend von SAT. Dazu gehören unter anderem Clique, Node Cover, Chromatic Number, Set Covering, Exact Cover, 3D-Matching, Partition und Max Cut. + +----- + +## 10. NP-Härte von Videospielen + +Viele Videospiele sind NP-hard. Dafür gibt es allgemeine Metatheorems: + +### Metatheorem 1: Location Traversal + Single-Use Paths + +Wenn ein Spiel bestimmte Punkte vorschreibt, die besucht werden müssen, und Wege nur einmal benutzbar sind, ist es NP-hard (Reduktion vom Hamiltonkreisproblem). + +### Metatheorem 2: Tokens, Toll Roads, Location Traversal + +Ein Spiel ist NP-hard, wenn es sammelbare Tokens, kostenpflichtige Wege und zu besuchende Orte hat. Beispiel: In Pac-Man sind Power Pills die Tokens und Geisterkorridore die Toll Roads. + +### Metatheorem 3: Keys, Doors, One-Way Paths + +Wie Metatheorem 2, aber mit Schlüsseln statt Tokens und Türen statt Toll Roads. + +### Metatheorem 4: Doors + Pressure Plates + +Türen und Druckplatten (die Türen öffnen/schließen) machen ein Spiel NP-hard, selbst wenn keine zwei Druckplatten dieselbe Tür steuern. + +### Metatheorem 5: Doors + k-Buttons + +Buttons, bei denen der Spieler entscheiden kann, ob er sie drückt, und die $k$ Türen gleichzeitig beeinflussen, machen ein Spiel NP-hard für $k \geq 2$. + +----- + +## 11. Zusammenfassung: Was ist wo? + +### Entscheidbarkeit + +|Problem |Entscheidbar?|Semi-entscheidbar? | +|------------------------------------------|-------------|--------------------------| +|$A_{\text{TM}}$ (akzeptiert M w?) |Nein |Ja | +|$HALT_{\text{TM}}$ (hält M auf w?) |Nein |Ja | +|PCP |Nein |Ja | +|Hilberts 10. Problem |Nein |Ja | +|$E_{\text{TM}}$ (ist $L(M)$ leer?) |Nein |Nein (co-Turing-erkennbar)| +|$EQ_{\text{TM}}$ (sind $L(M_1) = L(M_2)$?)|Nein |Nein | +|$MIN_{\text{TM}}$ (ist M minimal?) |Nein |Nein | + +### Komplexität + +|Problem |Klasse | +|------------------------|------------------| +|Sortieren, kürzeste Wege|P | +|Primzahltest (AKS) |P | +|SAT |NP-vollständig | +|Hamiltonkreis |NP-vollständig | +|TSP |NP-vollständig | +|Knapsack |NP-vollständig | +|Minesweeper |NP-vollständig | +|TQBF |PSPACE-vollständig| +|Generalisiertes Schach |EXPTIME | + +### Beziehungen zwischen den Klassen + +``` +Entscheidbar: P ⊆ NP ⊆ PSPACE = NPSPACE ⊆ EXPTIME + +Unentscheidbar: Halteproblem, A_TM, PCP, Hilberts 10. Problem, ... +``` + +----- + +## 12. Glossar + +| Begriff | Bedeutung | +| ---------------------------- | ------------------------------------------------------------ | +| **Turing-Maschine** | Abstraktes Berechnungsmodell mit Band, Kopf und Steuerung | +| **Konfiguration** | Momentaufnahme: Zustand + Band + Kopfposition | +| **Gödelnummer** | Binäre Kodierung einer TM | +| **Church-Turing-These** | Alles Berechenbare ist Turing-berechenbar | +| **Turing-erkennbar** | TM akzeptiert $w \in L$, kann auf $w \notin L$ endlos laufen | +| **Turing-entscheidbar** | TM hält immer und gibt korrekte Antwort | +| **Diagonalisierung** | Beweistechnik: Widerspruch durch Selbstreferenz + Negation | +| **Zeitkomplexität** | Maximale Schrittzahl einer TM bei Eingabelänge $n$ | +| **Speicherkomplexität** | Maximale Zahl besuchter Bandzellen bei Eingabelänge $n$ | +| **Verifier** | Algorithmus der $(w, c)$ prüft – $c$ ist das Zertifikat | +| **Polynomialzeit-Reduktion** | $A \leq_P B$: Umwandlung von $A$ in $B$ in Polynomialzeit | +| **NP-vollständig** | In NP + jedes NP-Problem reduzierbar darauf | +| **NP-hard** | Jedes NP-Problem reduzierbar darauf (muss nicht in NP sein) | +| **PSPACE-vollständig** | In PSPACE + jedes PSPACE-Problem reduzierbar darauf | diff --git a/Komplexitätstheorie/zusammenfassungen/ko1 - themenliste.md b/Komplexitätstheorie/zusammenfassungen/ko1 - themenliste.md new file mode 100644 index 0000000..77d76bb --- /dev/null +++ b/Komplexitätstheorie/zusammenfassungen/ko1 - themenliste.md @@ -0,0 +1,73 @@ +# Komplexitätstheorie – Vorlesung 1: Themenliste +**Prof. Dr. Björn Grohmann | HWR Berlin | 18.02.2026** + +--- +## 1. Turing-Maschinen + +- Historischer Hintergrund (Alan Turing, Princeton) +- Formale Definition als 7-Tupel (Q, Σ, Γ, δ, q₀, q_accept, q_reject) +- Konfigurationen einer Turing-Maschine +- Beispiel: Sprache B = {w#w | w ∈ {0,1}*} – Zustandsdiagramm +- **Church-Turing-These**: Jede effektiv berechenbare Funktion ist Turing-berechenbar + +## 2. Varianten von Turing-Maschinen + +- **Multitape Turing Machine** – Äquivalenz zur Single-Tape TM +- **Universelle Turing-Maschine** – Gödelnummer, Simulation mit O(CT log T) Schritten +- **Nichtdeterministische Turing-Maschine (NTM)** – Übergangsfunktion δ: Q × Γ → P(Q × Γ × {L,R}) +- Äquivalenz NTM ↔ DTM mit exponentiellem Zeitverlust (2^O(t(n))) + +## 3. Laufzeit & Zeitkomplexität + +- Running Time / Time Complexity einer deterministischen TM +- Running Time einer nichtdeterministischen TM (maximale Tiefe aller Zweige) +- **Time Constructibility** – Definition und Bedeutung +- Overhead-Resultate: Alphabetreduktion (4 log|Γ| · T(n)), Tape-Reduktion (5kT(n)²), Bidirektionale TM (4T(n)) + +## 4. Entscheidbarkeit + +- **Turing-erkennbar** (rekursiv aufzählbar / semi-entscheidbar) +- **Turing-entscheidbar** (rekursiv / entscheidbar) +- Satz: Eine Sprache ist entscheidbar ⟺ sie ist Turing-erkennbar und co-Turing-erkennbar + +## 5. Das Halteproblem + +- Sprache A_TM = {⟨M, w⟩ | M ist TM und M akzeptiert w} – semi-entscheidbar, aber unentscheidbar +- HALT_TM = {⟨M, w⟩ | M ist TM und M hält auf w} – unentscheidbar +- Beweis per Diagonalisierung (Widerspruchsargument) + +## 6. Weitere unentscheidbare Probleme + +- **Postsches Korrespondenzproblem (PCP)** – semi-entscheidbar +- **Hilberts 10. Problem** – Diophantische Gleichungen +- **Erfüllbarkeitsproblem** und **Gültigkeitsproblem** der Prädikatenlogik (semi-entscheidbar) +- **Unerfüllbarkeitsproblem** der Prädikatenlogik +- E_TM (leere Sprache), EQ_TM (Sprachäquivalenz), REGULAR_TM (reguläre Sprache) +- MIN_TM (minimale TM) – nicht einmal semi-entscheidbar + +## 7. Die Klasse P + +- Definition: P = ⋃_k TIME(n^k) – in Polynomialzeit entscheidbare Sprachen +- Beispielmengen: ℕ, 2ℕ, Primzahlen ℙ, Summen/Produkte von Primzahlen + +## 8. Die Klasse NP + +- Verifier-basierte Definition: polynomieller Verifier, polynomiell verifizierbar +- NP = Klasse der Sprachen mit polynomiellen Verifizierern +- Äquivalente Definition: NP = ⋃_k NTIME(n^k) +- P: schnell _entscheidbar_ vs. NP: schnell _verifizierbar_ +- Beispielmengen: Summen/Produkte von Primzahlen, Primzahlen (n ≠ p·q), SAT, UNSAT + +## 9. P vs. NP + +- Offene Frage: P ⊂ NP oder P = NP? +- Millennium-Problem (Clay Mathematics Institute, 1 Mio. Dollar Preisgeld) + +## 10. NP-Vollständigkeit & Reduktionen + +- **Polynomialzeit-berechenbare Funktion** +- **Polynomialzeit-Reduktion** (A ≤_P B) +- Definition NP-vollständig: (1) B ∈ NP, (2) jedes A ∈ NP ist polynomiell auf B reduzierbar +- **NP-hard**: nur Bedingung (2) +- Venn-Diagramm: P ⊆ NP ⊆ NP-hard, NP-complete = NP ∩ NP-hard +- **Cook-Levin Theorem**: SAT ist NP-vollständig (SAT ∈ P ⟺ P = NP) \ No newline at end of file diff --git a/Komplexitätstheorie/zusammenfassungen/ko1 - zusammenfassung.md b/Komplexitätstheorie/zusammenfassungen/ko1 - zusammenfassung.md new file mode 100644 index 0000000..8c6451c --- /dev/null +++ b/Komplexitätstheorie/zusammenfassungen/ko1 - zusammenfassung.md @@ -0,0 +1,403 @@ +# Komplexitätstheorie – Vorlesung 1: Zusammenfassung +**Prof. Dr. Björn Grohmann | HWR Berlin | 18.02.2026** + +--- +## 1. Turing-Maschinen + +### Historischer Hintergrund + +Alan Turing (geboren 23. Juni 1912 in London, gestorben 8. Juni 1954) studierte Mathematik in Cambridge (B.A. 1934) und promovierte an der Princeton University (Ph.D. 1938) mit der Dissertation „Systems of Logic Based on Ordinals". Er entwickelte das Konzept der Turing-Maschine als abstraktes Berechnungsmodell, das bis heute die Grundlage der theoretischen Informatik bildet. + +### Formale Definition + +Eine **Turing-Maschine** ist ein 7-Tupel $(Q, \Sigma, \Gamma, \delta, q_0, q_{\text{accept}}, q_{\text{reject}})$, wobei $Q$, $\Sigma$ und $\Gamma$ endliche Mengen sind: + +1. $Q$ ist die **Zustandsmenge** (set of states). +2. $\Sigma$ ist das **Eingabealphabet**, das das Blanksymbol $\sqcup$ nicht enthält. +3. $\Gamma$ ist das **Bandalphabet**, wobei $\sqcup \in \Gamma$ und $\Sigma \subseteq \Gamma$. +4. $\delta: Q \times \Gamma \rightarrow Q \times \Gamma \times \{L, R\}$ ist die **Übergangsfunktion** (transition function). +5. $q_0 \in Q$ ist der **Startzustand** (start state). +6. $q_{\text{accept}} \in Q$ ist der **Akzeptierzustand** (accept state). +7. $q_{\text{reject}} \in Q$ ist der **Ablehnungszustand** (reject state), wobei $q_{\text{reject}} \neq q_{\text{accept}}$. + +Die Turing-Maschine besteht aus einer endlichen Steuerung (control) und einem **unendlich langen Band**, auf dem Symbole gelesen und geschrieben werden. + +### Konfiguration + +Eine **Konfiguration** beschreibt den vollständigen Zustand einer TM zu einem Zeitpunkt: Sie umfasst den aktuellen Zustand, den Bandinhalt und die Position des Lese-/Schreibkopfes. Beispiel: Die Konfiguration $1011q_701111$ bedeutet, dass sich die Maschine im Zustand $q_7$ befindet und der Kopf auf dem Zeichen unmittelbar rechts von $q_7$ steht. + +### Beispiel: Sprache $B = \{w\#w \mid w \in \{0,1\}^*\}$ + +Diese Sprache besteht aus allen Wörtern, die aus zwei identischen Hälften bestehen, getrennt durch ein #-Zeichen. Die TM arbeitet wie folgt: + +- Das erste Zeichen der linken Hälfte wird gelesen, durch $x$ ersetzt und gemerkt (Zustand $q_1$). +- Der Kopf wandert nach rechts über das #-Zeichen zum entsprechenden Zeichen der rechten Hälfte. +- Stimmt das Zeichen überein, wird es ebenfalls durch $x$ ersetzt; der Kopf wandert zurück zum nächsten unmarkierten Zeichen links. +- Dieser Prozess wiederholt sich, bis alle Zeichen abgeglichen sind. +- Wenn am Ende nur $x$-Symbole und ein # auf dem Band stehen und ein Blank erreicht wird → **accept**. +- Bei jedem Mismatch → **reject**. + +Das Zustandsdiagramm umfasst die Zustände $q_1$ bis $q_8$ sowie $q_{\text{accept}}$ (und implizite reject-Pfade, die im Diagramm der Vorlesung weggelassen wurden). + +### Church-Turing-These + +> „Jede effektiv berechenbare Funktion kann durch eine Turing-Maschine berechnet werden." + +Dies ist keine mathematisch beweisbare Aussage, sondern eine **These** (Hypothese). Sie wird gestützt durch die Tatsache, dass alle bekannten Berechnungsmodelle (WHILE-Programme, GOTO-Programme, Lambda-Kalkül, Rule 110 Zellularautomaten etc.) äquivalent zur Turing-Maschine sind. + +--- + +## 2. Äquivalente Berechnungsmodelle + +### WHILE-Programme + +WHILE-Programme sind ein einfaches Berechnungsmodell mit folgender Syntax: + +- $P \rightarrow X := X + C$ (Inkrement) +- $\mid\quad X := X - C$ (Dekrement, wobei das Ergebnis nicht negativ wird) +- $\mid\quad P;\; P$ (Sequenz) +- $\mid\quad \text{WHILE } X \neq 0 \text{ DO } P \text{ END}$ (Schleife) + +WHILE-Programme sind **Turing-vollständig**, d.h. sie können genau die gleichen Funktionen berechnen wie eine Turing-Maschine. + +### GOTO-Programme + +GOTO-Programme bestehen aus nummerierten Anweisungen $M_1: A_1;\; M_2: A_2;\; \ldots;\; M_k: A_k$ mit den Operationen: + +- $x_i := x_j + n$ (Addition einer Konstante) +- $x_i := x_j - n$ (Subtraktion einer Konstante) +- $\text{GOTO } M_i$ (unbedingter Sprung) +- $\text{IF } x_i = n \text{ GOTO } M_j$ (bedingter Sprung) +- $\text{HALT}$ (Programmende) + +Auch GOTO-Programme sind äquivalent zu Turing-Maschinen. + +### Rule 110 (Zellularautomat) + +Rule 110 ist ein eindimensionaler Zellularautomat, dessen Übergangsregel durch die Binärdarstellung der Zahl 110 (01101110) definiert wird. Jede Zelle wird basierend auf ihrem eigenen Zustand und den Zuständen ihrer beiden Nachbarn aktualisiert. Es wurde bewiesen, dass Rule 110 **Turing-vollständig** ist – ein einfacher Zellularautomat kann also universelle Berechnungen durchführen. + +--- + +## 3. Varianten von Turing-Maschinen + +### Multitape Turing Machine (Mehrband-TM) + +Die Übergangsfunktion einer $k$-Band-TM hat die Form: + +$$\delta: Q \times \Gamma^k \rightarrow Q \times \Gamma^k \times \{L, R, S\}^k$$ + +Die Maschine verfügt über $k$ separate Bänder mit eigenen Köpfen (Input-Tape mit Read-Only-Head, Work-Tape und Output-Tape mit Read/Write-Heads). + +**Theorem:** Jede Multitape-TM hat eine äquivalente Single-Tape-TM. Die Simulation erfolgt, indem alle Bänder auf einem einzigen Band kodiert werden (getrennt durch #-Symbole), wobei die Kopfpositionen durch markierte Symbole (z.B. Punkte über den Zeichen) dargestellt werden. + +### Universelle Turing-Maschine (UTM) + +Es existiert eine TM $\mathcal{U}$, die für jede Eingabe $x, \alpha \in \{0,1\}^*$ das Ergebnis $\mathcal{U}(x, \alpha) = M_\alpha(x)$ berechnet, wobei $M_\alpha$ die durch die **Gödelnummer** $\alpha$ kodierte Turing-Maschine ist. + +Die UTM nutzt mehrere Arbeitsbänder: ein Input-Tape, Work-Tapes (Simulation des Arbeitsbandes von $M$, Beschreibung von $M$, aktueller Zustand von $M$) und ein Output-Tape. + +**Simulationsoverhead:** Wenn $M_\alpha$ in $T$ Schritten hält, so hält $\mathcal{U}(x, \alpha)$ in $O(CT \log T)$ Schritten, wobei $C$ eine Konstante ist, die nur von der Alphabetgröße, Bandanzahl und Zustandsanzahl von $M_\alpha$ abhängt. + +### Nichtdeterministische Turing-Maschine (NTM) + +Die Übergangsfunktion einer NTM hat die Form: + +$$\delta: Q \times \Gamma \rightarrow \mathcal{P}(Q \times \Gamma \times \{L, R\})$$ + +Statt eines einzigen Nachfolgezustands gibt es eine **Menge** möglicher Übergänge. Die NTM kann als Maschine mit drei Bändern simuliert werden: Input-Tape, Simulation-Tape und Address-Tape (das die nichtdeterministischen Entscheidungen kodiert). + +**Theorem:** Jede NTM hat eine äquivalente DTM. Jede $t(n)$-Zeit-NTM (mit $t(n) \geq n$) kann durch eine deterministische TM in Zeit $2^{O(t(n))}$ simuliert werden — also mit **exponentiellem Zeitverlust**. + +**Akzeptanzkriterium:** Eine NTM akzeptiert eine Eingabe, wenn **mindestens ein** Berechnungspfad akzeptiert. Sie lehnt ab, wenn **alle** Pfade ablehnen. + +--- + +## 4. Laufzeit und Zeitkomplexität + +### Running Time (deterministisch) + +Sei $M$ eine deterministische TM, die auf allen Eingaben hält. Die **Laufzeit** (running time / time complexity) von $M$ ist die Funktion $f: \mathbb{N} \rightarrow \mathbb{N}$, wobei $f(n)$ die **maximale Anzahl von Schritten** ist, die $M$ auf einer Eingabe der Länge $n$ benötigt. Man sagt: „$M$ läuft in Zeit $f(n)$" oder „$M$ ist eine $f(n)$-Zeit-Turing-Maschine." + +### Running Time (nichtdeterministisch) + +Sei $N$ eine nichtdeterministische TM, die ein Entscheider ist. Die **Laufzeit** von $N$ ist die Funktion $f: \mathbb{N} \rightarrow \mathbb{N}$, wobei $f(n)$ die **maximale Anzahl von Schritten** ist, die $N$ auf **irgendeinem Zweig** ihrer Berechnung bei einer Eingabe der Länge $n$ benötigt. + +### Time Constructibility + +Eine Funktion $t: \mathbb{N} \rightarrow \mathbb{N}$ mit $t(n) \geq O(n \log n)$ heißt **zeitkonstruierbar** (time constructible), wenn die Funktion, die den String $1^n$ auf die Binärdarstellung von $t(n)$ abbildet, in Zeit $O(t(n))$ berechenbar ist. + +Es gibt auch eine alternative Definition, bei der lediglich $t(n) \geq n$ gefordert wird. + +Typische zeitkonstruierbare Funktionen sind z.B. $n$, $n \log n$, $n^2$, $2^n$. + +### Overhead-Resultate (Simulationskosten) + +| Transformation | Zeitoverhead | +|---|---| +| **Alphabetreduktion** (beliebiges Alphabet → $\{0,1,\sqcup,\triangleright\}$) | $4 \log |\Gamma| \cdot T(n)$ | +| **Tape-Reduktion** ($k$ Bänder → 1 Band) | $5k \cdot T(n)^2$ | +| **Bidirektionale TM → Unidirektionale TM** | $4 \cdot T(n)$ | + +### Zeitkomplexitätsklasse TIME + +Sei $t: \mathbb{N} \rightarrow \mathbb{R}^+$ eine Funktion. Die **Zeitkomplexitätsklasse** $\text{TIME}(t(n))$ ist die Menge aller Sprachen, die von einer $O(t(n))$-Zeit-Turing-Maschine entschieden werden können. + +--- + +## 5. Entscheidbarkeit + +### Turing-erkennbar (rekursiv aufzählbar / semi-entscheidbar) + +Eine Sprache heißt **Turing-erkennbar** (Turing-recognizable), wenn es eine TM gibt, die sie erkennt. Das bedeutet: + +- Für $w \in L$: Die TM akzeptiert. +- Für $w \notin L$: Die TM lehnt ab **oder hält nicht** (läuft unendlich lange). + +### Turing-entscheidbar (rekursiv / entscheidbar) + +Eine Sprache heißt **Turing-entscheidbar** (Turing-decidable), wenn es eine TM gibt, die sie entscheidet. Das bedeutet: + +- Für $w \in L$: Die TM akzeptiert. +- Für $w \notin L$: Die TM lehnt ab. +- Die TM **hält immer** (auf jeder Eingabe). + +### Zusammenhang + +**Theorem:** Eine Sprache ist entscheidbar **genau dann, wenn** sie sowohl Turing-erkennbar als auch co-Turing-erkennbar ist. + +Beweisskizze: Man lässt die TM $M_1$ (für $L$) und $M_2$ (für $\overline{L}$) parallel auf der Eingabe $w$ laufen. Wenn $M_1$ akzeptiert → accept; wenn $M_2$ akzeptiert → reject. Da eine der beiden Maschinen für jede Eingabe irgendwann akzeptiert, hält das Verfahren immer. + +--- + +## 6. Das Halteproblem + +### $A_{\text{TM}}$ – Die Akzeptanzsprache + +$$A_{\text{TM}} = \{\langle M, w \rangle \mid M \text{ ist eine TM und } M \text{ akzeptiert } w\}$$ + +$A_{\text{TM}}$ ist **semi-entscheidbar** (Turing-erkennbar): Man simuliert $M$ auf $w$. Wenn $M$ akzeptiert → accept; wenn $M$ ablehnt → reject. Problem: Wenn $M$ nicht hält, hält auch der Simulator nicht. + +**Theorem:** $A_{\text{TM}}$ ist **unentscheidbar**. + +### $HALT_{\text{TM}}$ – Das Halteproblem + +$$HALT_{\text{TM}} = \{\langle M, w \rangle \mid M \text{ ist eine TM und } M \text{ hält auf Eingabe } w\}$$ + +**Theorem:** $HALT_{\text{TM}}$ ist **unentscheidbar**. + +### Beweis per Diagonalisierung + +Der Beweis der Unentscheidbarkeit von $A_{\text{TM}}$ verwendet ein **Diagonalisierungsargument** (Widerspruchsbeweis): + +1. Angenommen, es gibt einen Entscheider $H$ für $A_{\text{TM}}$. +2. Konstruiere daraus eine Maschine $D$, die bei Eingabe $\langle M \rangle$ die Maschine $H$ auf $\langle M, \langle M \rangle \rangle$ simuliert und das Ergebnis **invertiert**. +3. Was passiert bei $D(\langle D \rangle)$? + - Falls $D$ akzeptiert → $H$ sagt "$D$ akzeptiert $\langle D \rangle$" → $D$ sollte ablehnen. **Widerspruch!** + - Falls $D$ ablehnt → $H$ sagt "$D$ akzeptiert $\langle D \rangle$ nicht" → $D$ sollte akzeptieren. **Widerspruch!** +4. Also kann $H$ nicht existieren. + +Das Diagonalisierungsargument funktioniert über eine Matrix: Die Zeilen sind Turing-Maschinen $T_1, T_2, T_3, \ldots$, die Spalten sind Eingaben $i_1, i_2, i_3, \ldots$, und die Einträge (0 oder 1) zeigen, ob $T_i$ die Eingabe $i_j$ akzeptiert. Die Maschine $D$ invertiert die Diagonale — und erzeugt so den Widerspruch, da $D$ als Zeile in der Matrix selbst vorkommen müsste. + +--- + +## 7. Weitere unentscheidbare Probleme + +### Postsches Korrespondenzproblem (PCP) + +**Gegeben:** Eine endliche Folge von Wortpaaren $(x_1, y_1), \ldots, (x_k, y_k)$ mit $x_i, y_i \in \{0,1\}^+$ (dargestellt als Dominos mit oberer und unterer Hälfte). + +**Gefragt:** Gibt es eine endliche Folge von Indizes $i_1, \ldots, i_n \in \{1, \ldots, k\}$, sodass $x_{i_1} \ldots x_{i_n} = y_{i_1} \ldots y_{i_n}$? (Können Kopien der Dominos so aneinandergelegt werden, dass oben und unten das gleiche Wort steht?) + +Das PCP ist **unentscheidbar**, aber immerhin **semi-entscheidbar** (man kann systematisch alle Kombinationen durchprobieren). + +Benannt nach **Emil Leon Post** (1897–1957). + +### Hilberts 10. Problem + +David Hilbert formulierte 1900 die Frage: Gibt es ein Verfahren, mit dem man für eine beliebige diophantische Gleichung (Polynomgleichung mit ganzzahligen Koeffizienten) entscheiden kann, ob sie eine ganzzahlige Lösung hat? + +**Antwort (1970, Matijassewitsch):** Nein — dieses Problem ist **unentscheidbar**. + +### Probleme der Prädikatenlogik + +| Problem | Frage | Status | +|---|---|---| +| **Erfüllbarkeitsproblem** | Ist ein prädikatenlogischer Ausdruck $A$ über Signatur $S$ erfüllbar? | semi-entscheidbar, unentscheidbar | +| **Gültigkeitsproblem** | Ist $A$ allgemeingültig? | semi-entscheidbar, unentscheidbar | +| **Unerfüllbarkeitsproblem** | Ist $A$ unerfüllbar? | semi-entscheidbar, unentscheidbar | + +Das Erfüllbarkeitsproblem und das Gültigkeitsproblem sind jeweils **semi-entscheidbar**. Das Unerfüllbarkeitsproblem ist ebenfalls semi-entscheidbar (da es das Komplement des Gültigkeitsproblems ist). + +### Weitere unentscheidbare Sprachen über TMs + +| Sprache | Definition | Semi-entscheidbar? | +|---|---|---| +| $E_{\text{TM}}$ | $\{\langle M \rangle \mid M \text{ ist TM und } L(M) = \emptyset\}$ | Nein (co-Turing-erkennbar) | +| $EQ_{\text{TM}}$ | $\{\langle M_1, M_2 \rangle \mid L(M_1) = L(M_2)\}$ | Nein | +| $REGULAR_{\text{TM}}$ | $\{\langle M \rangle \mid L(M) \text{ ist regulär}\}$ | Nein | +| $MIN_{\text{TM}}$ | $\{\langle M \rangle \mid M \text{ ist eine minimale TM}\}$ | **Nicht einmal semi-entscheidbar** | + +$MIN_{\text{TM}}$ enthält die Beschreibungen aller TMs, für die es keine kürzere äquivalente TM gibt. + +--- + +## 8. Die Klasse P + +### Definition + +$$\text{P} = \bigcup_k \text{TIME}(n^k)$$ + +**P** ist die Klasse aller Sprachen, die in **polynomieller Zeit** auf einer **deterministischen** Single-Tape-Turing-Maschine entscheidbar sind. + +### Beispiele: Welche Mengen liegen in P? + +| Menge | In P? | Begründung | +|---|---|---| +| $\mathbb{N} = \{1, 2, 3, \ldots\}$ | Ja | Trivial entscheidbar (jede natürliche Zahl akzeptieren) | +| $2\mathbb{N} = \{2, 4, 6, \ldots\}$ | Ja | Letztes Bit prüfen (gerade Zahl) | +| $\mathbb{P}$ (Primzahlen) | Ja | AKS-Algorithmus (2002) läuft in Polynomialzeit | +| $\{p + q \mid p, q \in \mathbb{P}\}$ (Summen von Primzahlen) | Ja | Alle Zerlegungen $p + q = n$ durchprobieren, jeweils Primzahltest | +| $\{p \cdot q \mid p, q \in \mathbb{P}\}$ (Produkte von Primzahlen) | Ja | Faktorisierung in Polynomialzeit prüfbar (Probedivision genügt, da nur Zerlegung in zwei Primfaktoren gefragt) | + +--- + +## 9. Die Klasse NP + +### Verifier-basierte Definition + +Ein **Verifier** für eine Sprache $A$ ist ein Algorithmus $V$, sodass: + +$$A = \{w \mid V \text{ akzeptiert } \langle w, c \rangle \text{ für ein Zertifikat } c\}$$ + +Ein **polynomieller Verifier** läuft in polynomieller Zeit **bezogen auf die Länge von $w$** (nicht von $c$). + +Eine Sprache $A$ ist **polynomiell verifizierbar**, wenn sie einen polynomiellen Verifier hat. + +### Definition von NP + +$$\text{NP} = \text{die Klasse aller Sprachen mit polynomiellen Verifizierern}$$ + +**Äquivalente Definition über NTMs:** + +**Theorem:** Eine Sprache ist in NP genau dann, wenn sie von einer **nichtdeterministischen polynomialzeit-TM** entschieden wird. + +$$\text{NP} = \bigcup_k \text{NTIME}(n^k)$$ + +### Kernunterschied P vs. NP + +- **P** = Klasse der Sprachen, deren Mitgliedschaft schnell **entschieden** werden kann. +- **NP** = Klasse der Sprachen, deren Mitgliedschaft schnell **verifiziert** werden kann (gegeben ein passendes Zertifikat). + +### Beispiele: Welche Mengen liegen in NP? + +| Menge | In NP? | Begründung | +|---|---|---| +| $\{p + q \mid p, q \in \mathbb{P}\}$ | Ja | Zertifikat: die beiden Primzahlen $p, q$; Verifikation: Summe prüfen + Primzahltests | +| $\{p \cdot q \mid p, q \in \mathbb{P}\}$ | Ja | Zertifikat: die beiden Primfaktoren; Verifikation: Produkt prüfen + Primzahltests | +| $\{n \in \mathbb{N} \mid n \neq p \cdot q, \; p,q \in \mathbb{P}\}$ (Primzahlen) | Ja | Zertifikat: $n$ selbst (bzw. AKS-Test); da $\mathbb{P} \in \text{P} \subseteq \text{NP}$ | +| $\text{SAT}$ (erfüllbare Boolesche Formeln) | Ja | Zertifikat: eine erfüllende Belegung; Verifikation: Formel auswerten | +| $\text{UNSAT}$ (unerfüllbare Boolesche Formeln) | Unklar | Kein offensichtliches kurzes Zertifikat; vermutlich nicht in NP (liegt in co-NP) | + +--- + +## 10. P vs. NP + +### Die offene Frage + +Es ist unbekannt, ob $\text{P} = \text{NP}$ oder $\text{P} \subsetneq \text{NP}$ gilt. + +- Falls $\text{P} = \text{NP}$: Jedes Problem, dessen Lösung effizient überprüfbar ist, wäre auch effizient lösbar. +- Falls $\text{P} \neq \text{NP}$: Es gibt Probleme, die effizient überprüfbar, aber nicht effizient lösbar sind. + +Die meisten Informatiker vermuten $\text{P} \neq \text{NP}$. + +### Millennium-Problem + +Das P-vs-NP-Problem ist eines der sieben **Millennium-Probleme** des Clay Mathematics Institute, ausgelobt im Jahr 2000, mit einem Preisgeld von **1 Million US-Dollar** für eine Lösung. Von den sieben Problemen wurde bisher nur die **Poincaré-Vermutung** gelöst (Perelman, 2003). + +--- + +## 11. NP-Vollständigkeit und Reduktionen + +### Polynomialzeit-berechenbare Funktion + +Eine Funktion $f: \Sigma^* \rightarrow \Sigma^*$ heißt **polynomialzeit-berechenbar** (polynomial time computable function), wenn eine polynomialzeit-TM $M$ existiert, die bei Eingabe $w$ mit $f(w)$ auf dem Band hält. + +### Polynomialzeit-Reduktion + +Eine Sprache $A$ ist **polynomialzeit-reduzierbar** auf Sprache $B$ (geschrieben $A \leq_P B$), wenn eine polynomialzeit-berechenbare Funktion $f: \Sigma^* \rightarrow \Sigma^*$ existiert, sodass für alle $w$ gilt: + +$$w \in A \iff f(w) \in B$$ + +Die Funktion $f$ heißt **Polynomialzeit-Reduktion** von $A$ auf $B$. + +Intuition: Wenn $A \leq_P B$, dann ist $B$ **mindestens so schwer** wie $A$. Wenn ich $B$ lösen kann, kann ich auch $A$ lösen (indem ich erst $f$ anwende und dann den Algorithmus für $B$ benutze). + +### NP-Vollständigkeit (NP-completeness) + +Eine Sprache $B$ ist **NP-vollständig**, wenn zwei Bedingungen erfüllt sind: + +1. $B \in \text{NP}$ (das Problem liegt in NP), **und** +2. Jede Sprache $A \in \text{NP}$ ist polynomialzeit-reduzierbar auf $B$ (d.h. $A \leq_P B$ für alle $A \in \text{NP}$). + +### NP-hard (NP-schwer) + +Wenn $B$ nur die **zweite Bedingung** erfüllt (jedes Problem aus NP ist auf $B$ reduzierbar), aber $B$ nicht notwendigerweise selbst in NP liegt, heißt $B$ **NP-hard**. + +### Beziehung im Venn-Diagramm + +- $\text{P} \subseteq \text{NP} \subseteq \text{NP-hard}$ (als Inklusionskette) +- $\text{NP-complete} = \text{NP} \cap \text{NP-hard}$ (die Schnittmenge) + +Wenn man ein NP-hardes Problem effizient lösen könnte, könnte man damit **jedes** Problem in NP effizient lösen. + +### Cook-Levin-Theorem + +**Theorem (Cook 1971, Levin 1973):** $\text{SAT}$ ist **NP-vollständig**. + +$$\text{SAT} = \{\langle \phi \rangle \mid \phi \text{ ist eine erfüllbare Boolesche Formel}\}$$ + +**Konsequenz:** $\text{SAT} \in \text{P} \iff \text{P} = \text{NP}$. + +Das Cook-Levin-Theorem war das erste Resultat, das die Existenz NP-vollständiger Probleme nachwies. Es zeigt: SAT ist das „universelle" Problem in NP — wenn man SAT in Polynomialzeit lösen könnte, wären alle NP-Probleme in Polynomialzeit lösbar. + +--- + +## 12. Die Landschaft der Komplexitätsklassen (Überblick) + +Die Vorlesung zeigte das „Landscape of Computational Complexity" (University at Buffalo, 2008), das die Hierarchie der Komplexitätsklassen visualisiert: + +- **REG** ⊂ **L** ⊂ **NL** ⊂ **P** ⊂ **NP** ⊂ **PSPACE** ⊂ **EXP** ⊂ **NEXP** ⊂ **EXPSPACE** +- Auf der anderen Seite die **Arithmetische Hierarchie**: REC ⊂ RE, co-RE, und darüber TOT und höhere Stufen +- **Complexity Zoo**: Eine Sammlung von über 545 Komplexitätsklassen (gepflegt von Scott Aaronson u.a.) + +Wichtige offene Fragen umfassen unter anderem: P ≠ NP, L ≠ NL, NP ≠ co-NP, P ≠ PSPACE, und viele weitere Separierungen. + +--- + +## Glossar der wichtigsten Begriffe + +| Begriff | Definition | +|---|---| +| **Turing-Maschine (TM)** | Abstraktes Berechnungsmodell mit unendlichem Band, endlicher Steuerung und Lese-/Schreibkopf | +| **Konfiguration** | Momentaufnahme einer TM: Zustand + Bandinhalt + Kopfposition | +| **Church-Turing-These** | Jede effektiv berechenbare Funktion ist Turing-berechenbar | +| **Multitape TM** | TM mit mehreren Bändern; äquivalent zur Single-Tape TM | +| **Universelle TM** | TM, die jede andere TM simulieren kann (über deren Gödelnummer) | +| **Gödelnummer** | Binäre Kodierung einer Turing-Maschine | +| **NTM** | Nichtdeterministische TM; Übergangsfunktion liefert Menge von Möglichkeiten | +| **Zeitkomplexität** | Maximale Schrittzahl einer TM auf Eingaben der Länge $n$ | +| **Time constructible** | Funktion $t(n)$, deren Wert in $O(t(n))$ Schritten berechnet werden kann | +| **Turing-erkennbar** | TM akzeptiert alle $w \in L$, kann aber auf $w \notin L$ endlos laufen | +| **Turing-entscheidbar** | TM akzeptiert alle $w \in L$ und lehnt alle $w \notin L$ ab (hält immer) | +| **Halteproblem** | Frage, ob eine TM auf einer Eingabe hält; unentscheidbar | +| **Diagonalisierung** | Beweistechnik: Konstruktion eines Widerspruchs durch Selbstreferenz | +| **PCP** | Postsches Korrespondenzproblem; unentscheidbar, aber semi-entscheidbar | +| **P** | Klasse der in Polynomialzeit deterministisch entscheidbaren Sprachen | +| **NP** | Klasse der in Polynomialzeit verifizierbaren Sprachen | +| **Verifier** | Algorithmus, der bei Eingabe $(w, c)$ die Mitgliedschaft von $w$ in $L$ prüft | +| **Polynomialzeit-Reduktion** | Transformation $A \leq_P B$: $w \in A \iff f(w) \in B$ mit $f$ in Polynomialzeit | +| **NP-vollständig** | In NP + jedes NP-Problem ist darauf reduzierbar | +| **NP-hard** | Jedes NP-Problem ist darauf reduzierbar (muss nicht selbst in NP sein) | +| **SAT** | Erfüllbarkeitsproblem für Boolesche Formeln; erstes nachgewiesenes NP-vollständiges Problem | +| **Cook-Levin-Theorem** | SAT ist NP-vollständig; SAT ∈ P ⟺ P = NP | diff --git a/Komplexitätstheorie/zusammenfassungen/ko2 - zusammenfassung.md b/Komplexitätstheorie/zusammenfassungen/ko2 - zusammenfassung.md new file mode 100644 index 0000000..baf6591 --- /dev/null +++ b/Komplexitätstheorie/zusammenfassungen/ko2 - zusammenfassung.md @@ -0,0 +1,227 @@ +# KO2 – NP-Vollständigkeit, Space Complexity & PSPACE +**Vorlesung:** Prof. Dr. Björn Grohmann, HWR Berlin +**Datum:** 25.02.2026 +**Folien:** 72–106 + +--- +## 1. Hamiltonian Circuit Problem + +Das **Hamiltonian Circuit Problem** fragt für einen ungerichteten Graphen, ob ein Rundweg (Hamiltonkreis) existiert, der **jeden Knoten genau einmal** besucht und zum Ausgangspunkt zurückkehrt. + +Das Problem ist **NP-vollständig**, und zwar bereits dann, wenn der Graph **planar** (d.h. in der Ebene darstellbar ohne Kantenkreuzungen) und **3-regulär** (jeder Knoten hat genau 3 Nachbarn) ist. + +### Reduktion von SAT auf Hamiltonian Circuit + +Die NP-Vollständigkeit wird durch eine Konstruktion gezeigt, die eine aussagenlogische Formel in einen Graphen übersetzt. Der konstruierte Graph besitzt genau dann einen Hamiltonkreis, wenn die zugehörige Formel erfüllbar ist. + +**Beispielformel:** +$$F = (x \lor y \lor z) \land (\bar{x} \lor \bar{y} \lor w) \land (y \lor \bar{z} \lor \bar{w})$$ + +**Konstruktionselemente:** + +- **Variablenpfade:** Der linke Weg steht für „wahr", der rechte Weg für „falsch". Ein XOR-Gadget stellt sicher, dass genau einer der beiden Wege zum Pfad gehört. +- **Klausel-Gadgets (OR):** Mindestens eines der drei Literale muss „wahr" sein. +- **Kreuzungs-Gadgets:** Sorgen dafür, dass sich Kanten des Graphen nicht kreuzen (Planarität). + +--- +## 2. Graph-Gadgets im Detail + +### Tutte Fragment + +Ein spezielles planares Graphfragment mit drei Anschlüssen. Es hat die Eigenschaft, dass ein Hamiltonpfad durch das Fragment stets durch **genau einen** der drei Anschlüsse ein- und austritt. Es wird als Symbol mit einem Pfeil in einem Kreis dargestellt. Es gibt genau **6 mögliche Wege** durch das Fragment. + +### Exclusive-OR (XOR) Gadget + +Wird aus zwei Tutte-Fragmenten konstruiert. Verbindet zwei Pfade (v→v' und u→u') so, dass ein Hamiltonpfad **genau einen** der beiden Wege nutzen kann, nicht beide. Die zwei möglichen Wege entsprechen den zwei Wahrheitswerten einer Variable. + +### Kreuzungs-Gadget (Crossing) + +Ermöglicht es, zwei sich kreuzende Kanten planar darzustellen. Wird aus mehreren XOR-Gadgets zusammengesetzt. Hat vier Anschlüsse und erlaubt vier mögliche Wegkombinationen, die den beiden unabhängigen Durchquerungsrichtungen entsprechen. + +### OR-Gadget + +Verbindet zwei Pfade (v→v' und u→u') so, dass **mindestens einer** der beiden Wege durchlaufen werden muss. Es gibt insgesamt 5 mögliche Wege (alle Kombinationen außer „keiner"). + +### Triple-OR-Gadget + +Erweitert das OR-Gadget auf drei Eingänge (u→u', v→v', w→w'). Mindestens einer der drei Wege muss durchlaufen werden. Wird für 3-SAT-Klauseln mit drei Literalen benötigt. + +--- +## 3. MINESWEEPER ist NP-vollständig + +Die NP-Vollständigkeit von Minesweeper wird gezeigt, indem man logische Schaltkreise innerhalb eines Minesweeper-Spielfelds simuliert. + +### Grundidee + +In einem Minesweeper-Feld können Zellen entweder Minen enthalten oder nicht. Die Zahlen in aufgedeckten Zellen geben an, wie viele Minen sich in den benachbarten Zellen befinden. Man nutzt Variablen x und x' (Komplement), wobei x=Mine und x'=keine Mine (oder umgekehrt) einer Wahrheitsbelegung entspricht. + +### Bausteine der Reduktion + +- **Wire (Draht):** Ein horizontales Muster aus 5 Zeilen, in dem sich x und x' abwechseln. Die Randbedingungen (Zahlen 0 und 1) erzwingen, dass der Wahrheitswert konsistent entlang des Drahtes weitergeleitet wird. +- **NOT-Gate:** Invertiert den Wahrheitswert eines Drahtes. Nutzt ein Muster mit Zahlen 2, 3 und Pflichtminen (*), sodass aus x am Eingang x' am Ausgang wird. +- **Phase-Changer:** Besteht aus zwei NOT-Gates hintereinander. Verschiebt die Phase des Signals, ohne den Wahrheitswert zu ändern. +- **Wire Crossing:** Ermöglicht es, zwei Drähte zu kreuzen, ohne dass ihre Signale interferieren. Wird mit drei XOR-Gates realisiert. +- **XOR-Gate:** Kann aus AND- und NOT-Gates zusammengebaut werden (Standardkonstruktion: $A \oplus B = (A \land \lnot B) \lor (\lnot A \land B)$, äquivalent mittels NAND-Darstellung). +- **AND-Gate:** Ein komplexes Muster (Figure 13), das zwei Eingangsdrähte U und V mit einem Ausgangsdraht T verbindet. Enthält feste Minen (*) und variable Zellen, deren Belegung durch die Zahlenbedingungen erzwungen wird. + +### Gesamtargumentation + +Da man mit Wires, NOT, AND (und daraus abgeleitet OR, XOR) beliebige Boolesche Schaltkreise bauen kann, lässt sich jede SAT-Instanz als Minesweeper-Konfiguration kodieren. Die Frage „Gibt es eine konsistente Minenbelegung?" entspricht der Frage „Ist die Formel erfüllbar?". Da SAT NP-vollständig ist, ist auch Minesweeper NP-vollständig. + +--- + +## 4. „Gaming is Hard" – NP-Härte von Videospielen + +### Metatheorem 1: Location Traversal + Single-Use Paths + +Jedes Spiel, das **Location Traversal** (bestimmte Punkte müssen erreicht werden) und **Single-Use Paths** (Wege können nur einmal benutzt werden) aufweist, ist **NP-hard**. + +**Beweisskizze:** Man baut einen Level, der einen planaren, 3-regulären Graphen darstellt. Die Knoten sind die Punkte, die besucht werden müssen. Jede Kante ist ein Single-Use Path. Ein zusätzlicher Endpunkt wird mit dem Startknoten verbunden. Der Level ist genau dann lösbar, wenn ein Hamiltonkreis existiert. + +### Metatheorem 2: Tokens, Toll Roads, Location Traversal + +Ein Spiel ist **NP-hard**, wenn eine der folgenden Bedingungen gilt: + +- **(a)** Das Spiel hat **collectible tokens**, toll roads und location traversal. +- **(b)** Das Spiel hat **cumulative tokens**, toll roads und location traversal. (Spieler startet mit n+1 tokens.) +- **(c)** Das Spiel hat collectible cumulative tokens, **toll roads**, und der Avatar muss einen Ausgang erreichen. (2 tokens pro Punkt, jede Kante ist eine toll road, die Kante zwischen Start und Ende ist eine Sequenz von n toll roads.) + +**Beispiel:** Pac-Man – Power Pills sind tokens, Geisterkorridore sind toll roads. + +### Metatheorem 3: Keys, Doors, One-Way Paths + +Ein Spiel ist **NP-hard**, wenn es **doors** und **one-way paths** enthält und eine der folgenden Bedingungen gilt: + +- **(a)** Collectible keys und location traversal. +- **(b)** Cumulative keys und location traversal. +- **(c)** Collectible cumulative keys und der Avatar muss einen Ausgang erreichen. + +Funktioniert genau wie Metatheorem 2, wobei keys = tokens und doors = toll roads. + +### Metatheorem 4: Doors + Pressure Plates + +Wenn ein Spiel **doors** und **pressure plates** (Druckplatten, die Türen öffnen oder schließen) enthält und der Avatar einen Ausgang erreichen muss, dann ist das Spiel **NP-hard** – selbst wenn keine zwei Druckplatten dieselbe Tür steuern. + +**Konstruktion:** Wie bei MT 1, aber vor dem Ausgang befinden sich n Türen, die jeweils durch eine Druckplatte bei einem der Punkte geöffnet werden müssen. Single-Use Paths werden durch Druckplatten realisiert, die beim zweiten Durchgang den Weg versperren. + +### Metatheorem 5: Doors + k-Buttons + +Buttons sind wie Druckplatten, aber der Spieler kann **entscheiden**, ob er den Button drückt. Ein k-Button beeinflusst k Türen gleichzeitig. + +Wenn ein Spiel **doors** und **k-buttons** enthält und der Avatar einen Ausgang erreichen muss, dann ist das Spiel **NP-hard** für $k \geq 2$. + +--- +## 5. Übersicht NP-vollständiger Probleme + +Alle folgenden Probleme sind NP-vollständig und liegen damit in der Schnittmenge von NP und NP-hard: + +- **SAT** (Erfüllbarkeitsproblem aussagenlogischer Formeln) +- **Hamiltonkreis** +- **Traveling Salesman Problem (TSP)** +- **Knapsack** (Rucksackproblem) +- **MINESWEEPER** +- und viele weitere (Karp's Liste mit 21 Problemen) + +### Karp's Liste (1972) + +Richard Karp bewies 1972, dass 21 Probleme NP-vollständig sind, ausgehend von SAT. Die Reduktionskette verläuft u.a.: + +SATISFIABILITY → CLIQUE → NODE COVER → {FEEDBACK NODE SET, FEEDBACK ARC SET, DIRECTED HAMILTON CIRCUIT → UNDIRECTED HAMILTON CIRCUIT} + +SATISFIABILITY → 0-1 INTEGER PROGRAMMING → SET PACKING → SET COVERING + +SATISFIABILITY WITH AT MOST 3 LITERALS PER CLAUSE → CHROMATIC NUMBER → {EXACT COVER → {3-DIMENSIONAL MATCHING, KNAPSACK → {SEQUENCING, PARTITION → MAX CUT}}, HITTING SET, STEINER TREE, CLIQUE COVER} + +--- +## 6. Space Complexity + +### Definition + +Die **Speicherkomplexität (Space Complexity)** einer deterministischen Turingmaschine M ist die Funktion $f: \mathbb{N} \to \mathbb{N}$, wobei $f(n)$ die **maximale Anzahl an Bandzellen** ist, die M auf irgendeiner Eingabe der Länge n besucht. + +Für eine **nichtdeterministische** Turingmaschine ist $f(n)$ die maximale Anzahl an Bandzellen, die M auf **irgendeinem Berechnungspfad** für eine Eingabe der Länge n besucht. + +**Anmerkung:** In der Literatur wird manchmal angenommen, dass die TM ein separates Eingabe- und Arbeitsband besitzt und nur die Zellen auf dem Arbeitsband gezählt werden. + +### Speicherkomplexitätsklassen + +$$\text{SPACE}(f(n)) = {L \mid L \text{ wird von einer det. TM in } O(f(n)) \text{ Speicher entschieden}}$$ + +$$\text{NSPACE}(f(n)) = {L \mid L \text{ wird von einer nichtdet. TM in } O(f(n)) \text{ Speicher entschieden}}$$ + +--- +## 7. Savitch's Theorem + +**Satz (Savitch):** Für jede Funktion $f: \mathbb{N} \to \mathbb{R}^+$ mit $f(n) \geq n$ gilt: + +$$\text{NSPACE}(f(n)) \subseteq \text{SPACE}(f^2(n))$$ + +Der Satz gilt auch für $f(n) \geq \log(n)$. + +### Beweisskizze + +Gegeben eine nichtdeterministische TM N, die Sprache A mit Speicher $f(n)$ entscheidet, konstruieren wir eine deterministische TM M, die A in $O(f(n)^2)$ Speicher entscheidet: + +**Kernidee – CANYIELD-Prozedur:** +CANYIELD$(c_1, c_2, t)$ entscheidet, ob Konfiguration $c_2$ von Konfiguration $c_1$ in $t$ Schritten erreicht werden kann. + +- **Basisfall** ($t=1$): Prüfe direkt, ob $c_1 = c_2$ oder ob $c_1$ in einem Schritt zu $c_2$ führt. +- **Rekursion** ($t > 1$): Für jede mögliche Zwischenkonfiguration $c_m$: Prüfe CANYIELD$(c_1, c_m, t/2)$ und CANYIELD$(c_m, c_2, t/2)$. + +**Speicheranalyse:** + +- Jede Rekursionsebene benötigt $O(f(n))$ Speicher (für die Zwischenkonfiguration). +- Die Rekursionstiefe beträgt $O(\log t)$, wobei $t \leq 2^{d \cdot f(n)}$ für eine Konstante d. +- Gesamtspeicher: $O(f(n)) \cdot O(\log t) = O(f(n)) \cdot O(f(n)) = O(f(n)^2)$. + +Da $f(n)$ zu Beginn nicht bekannt ist, testet M nacheinander $f(n) = 1, 2, 3, \ldots$ + +--- +## 8. PSPACE + +### Definition + +**PSPACE** ist die Klasse aller Sprachen, die von einer deterministischen Turingmaschine in **polynomiellem Speicher** entschieden werden können: + +$$\text{PSPACE} = \bigcup_k \text{SPACE}(n^k)$$ + +### Beziehung zwischen Zeit- und Speicherkomplexität + +$$P \subseteq NP \subseteq PSPACE = NPSPACE \subseteq EXPTIME = \bigcup_k \text{TIME}(2^{n^k})$$ + +Die Gleichheit $\text{PSPACE} = \text{NPSPACE}$ folgt aus Savitch's Theorem (quadratischer Blow-up bei der Speicherkomplexität ist polynomiell). + +--- +## 9. PSPACE-Vollständigkeit + +### Definition + +Eine Sprache B ist **PSPACE-complete**, wenn: + +1. $B \in \text{PSPACE}$ +2. Jedes $A \in \text{PSPACE}$ ist in polynomieller Zeit auf B reduzierbar. + +Erfüllt B nur Bedingung 2, heißt B **PSPACE-hard**. + +### TQBF ist PSPACE-vollständig + +$$TQBF = {\langle \phi \rangle \mid \phi \text{ ist eine wahre, voll quantifizierte Boolesche Formel}}$$ + +**Theorem:** TQBF ist PSPACE-complete. + +Eine voll quantifizierte Boolesche Formel hat die Form $\forall x_1 \exists x_2 \forall x_3 \ldots \phi(x_1, x_2, x_3, \ldots)$, wobei alle Variablen gebunden sind. TQBF fragt, ob eine solche Formel wahr ist. + +TQBF verallgemeinert SAT: Während SAT nur Existenzquantoren hat ($\exists x_1 \exists x_2 \ldots$: „Gibt es eine erfüllende Belegung?"), erlaubt TQBF auch Allquantoren. Diese Erweiterung macht das Problem härter – von NP-vollständig zu PSPACE-vollständig. + +--- +## Zusammenfassung der Komplexitätsklassen + +|Klasse|Beschreibung|Beispiel| +|---|---|---| +|**P**|Deterministisch in polynomieller Zeit lösbar|Sortieren, kürzeste Wege| +|**NP**|Nichtdeterministisch in polynomieller Zeit lösbar (Lösung in Polynomialzeit verifizierbar)|SAT, Hamiltonkreis, TSP, Knapsack, Minesweeper| +|**PSPACE**|Deterministisch in polynomiellem Speicher lösbar|TQBF| +|**EXPTIME**|Deterministisch in exponentieller Zeit lösbar|Generalisiertes Schach| +|**NP-hard**|Mindestens so schwer wie jedes Problem in NP|Alle NP-vollständigen Probleme + weitere| +|**NP-vollständig**|In NP und NP-hard|SAT, Hamiltonkreis, TSP, Knapsack, Minesweeper| +|**PSPACE-vollständig**|In PSPACE und PSPACE-hard|TQBF| \ No newline at end of file diff --git a/Komplexitätstheorie/zusammenfassungen/ko3 - zusammenfassung.md b/Komplexitätstheorie/zusammenfassungen/ko3 - zusammenfassung.md new file mode 100644 index 0000000..79a161a --- /dev/null +++ b/Komplexitätstheorie/zusammenfassungen/ko3 - zusammenfassung.md @@ -0,0 +1,381 @@ +# Komplexitätstheorie – Zusammenfassung + +**Prof. Dr. Björn Grohmann – Hochschule für Wirtschaft und Recht Berlin** + +----- + +## 1. True Quantified Boolean Formulas (TQBF) + +### 1.1 Definition + +Eine **True Quantified Boolean Formula (TQBF)** ist eine vollständig quantifizierte Boolesche Formel, d.h. eine Boolesche Formel, in der **jede Variable** durch einen Existenz- ($\exists$) oder Allquantor ($\forall$) gebunden ist. Die Formel hat keinen freien Variablen und evaluiert daher zu einem festen Wahrheitswert (wahr oder falsch). + +**Beispiel:** + +$$\forall x , \exists y , (x \lor y) \land (\neg x \lor \neg y)$$ + +Das Entscheidungsproblem TQBF fragt: *Ist eine gegebene vollständig quantifizierte Boolesche Formel wahr?* + +### 1.2 TQBF ist PSPACE-vollständig + +Die Vorlesung zeigt zwei zentrale Aussagen: + +**1) TQBF ist in PSPACE:** +TQBF kann mit polynomiellem Speicher entschieden werden. Die Idee ist, die Formel rekursiv auszuwerten: Für jeden Quantor wird die entsprechende Variable nacheinander auf *wahr* und *falsch* gesetzt und rekursiv weitergerechnet. Da die Rekursionstiefe linear in der Anzahl der Variablen ist und jeder Rekursionslevel nur konstanten Zusatzspeicher benötigt, liegt der Gesamtverbrauch in $O(n)$ Speicher. + +**2) Jede Sprache in PSPACE ist auf TQBF reduzierbar (PSPACE-Härte):** +Für ein Wort $w$ und eine Sprache $A \in \text{PSPACE}$ wird eine QBF konstruiert, die genau dann wahr ist, wenn $w \in A$. + +### 1.3 Die Reduktion im Detail + +#### Grundidee + +Man konstruiert eine Formel $\phi_{c_1, c_2, t}$, die genau dann wahr ist, wenn die Turing-Maschine von der Konfiguration $c_1$ zur Konfiguration $c_2$ in höchstens $t$ Schritten gelangen kann. Die gesuchte Formel ist dann $\phi_{c_{\text{start}}, c_{\text{accept}}, h}$ mit $h = 2^{O(n^k)}$. + +#### Naiver (erster) Ansatz + +$$\phi_{c_1, c_2, t} = \exists m_1 \left[\phi_{c_1, m_1, t/2} \land \phi_{m_1, c_2, t/2}\right]$$ + +Hierbei wird eine Zwischenkonfiguration $m_1$ geraten (existenzquantifiziert), über die der Pfad von $c_1$ nach $c_2$ in zwei Hälften aufgeteilt wird. Das Problem: Durch die doppelte Rekursion **verdoppelt** sich die Formelgröße bei jedem Schritt. Da die Rekursionstiefe $O(n^k)$ beträgt, wird die Formel **exponentiell groß** – zu groß für einen polynomiellen Speicherverbrauch. + +#### Verbesserter Ansatz (Savitch-ähnlicher Trick) + +$$\phi_{c_1, c_2, t} = \exists m_1 ; \forall (c_3, c_4) \in {(c_1, m_1), (m_1, c_2)} ; \left[\phi_{c_3, c_4, t/2}\right]$$ + +Der entscheidende Unterschied: Anstatt die Formel $\phi$ zweimal hinzuschreiben (einmal für $(c_1, m_1)$ und einmal für $(m_1, c_2)$), wird ein **Allquantor** verwendet, der über die **beiden möglichen Paare** $(c_3, c_4)$ iteriert. Damit wird die Formel nur **einmal** aufgeschrieben. + +**Technisches Detail:** Die Notation $\forall x \in {y, z} [\ldots]$ steht eigentlich für $\forall x \left[(x = y \lor x = z) \rightarrow \ldots\right]$. In der tatsächlichen Formel muss die Mengenzugehörigkeit durch eine **Äquivalenzrelation** in Boolescher Logik ausgedrückt werden. + +#### Größenanalyse + +- Jeder Rekursionslevel vergrößert die Formel um $O(n^k)$ (Kodierung der Konfigurationen). +- Die Rekursionstiefe beträgt $O(n^k)$ (da $\log h = O(n^k)$). +- Gesamtgröße der Formel: $O(n^{2k})$ – **polynomiell!** + +> **Ergänzung:** Dies ist die Kernidee des Beweises von Savitch’s Theorem angewandt auf die PSPACE-Vollständigkeit von TQBF. Der Allquantor erlaubt es, die exponentielle Aufblähung zu vermeiden, indem dieselbe Teilformel für beide Hälften wiederverwendet wird. + +----- + +## 2. „Gaming is Hard”, Part II – PSPACE-Härte von Spielen + +### 2.1 Metatheorem 4 (Pressure Plates) + +> **Metatheorem 4:** Wenn ein Spiel Türen und Druckplatten enthält und der Avatar einen Ausgang erreichen muss, dann gilt: Wenn jede Tür durch **zwei Druckplatten** gesteuert werden kann, ist das Spiel **PSPACE-hard**. + +### 2.2 Level-Aufbau als TQBF-Simulation + +Ein Level wird konstruiert, der eine TQBF direkt simuliert: + +- **Obere Reihe (Quantoren-Gadgets):** Abwechselnd $\exists x$, $\forall y$, $\exists z$, $\forall w$, … + - Der Spieler traversiert diese Gadgets vom Start zum Ende. + - **Existenzquantoren** ($\exists$): Der Spieler wählt einen Pfad (oben = true, unten = false). Die Wahl setzt Druckplatten, die Variablenwerte kodieren. + - **Allquantoren** ($\forall$): Der Spieler muss **beide** Pfade durchlaufen – d.h., das Spiel erzwingt, dass beide Belegungen getestet werden. +- **Untere Reihe (Klausel-Gadgets):** Eine Reihe von Klauseln, die mit Türen realisiert werden. + - Jede Klausel prüft, ob die aktuelle Variablenbelegung die Klausel erfüllt. + - Die Türen sind durch Druckplatten gesteuert, die von den Quantor-Gadgets gesetzt werden. + +Die Gadgets für die einzelnen Komponenten nutzen Druckplatten zur Kodierung von Variablen an bestimmten Positionen. Die Variable $x$ an der Stelle $i$ wird durch die Position des Spielers und der dadurch aktivierten Druckplatten repräsentiert. + +### 2.3 Metatheorem 5 (k-Buttons) + +> **Metatheorem 5:** Wenn ein Spiel Türen und $k$-Buttons enthält und der Avatar einen Ausgang erreichen muss, dann gilt: Wenn $k \geq 3$, ist das Spiel **PSPACE-hard**. + +### 2.4 Simulation von Druckplatten durch 3-Buttons + +Die Vorlesung zeigt, wie eine Druckplatte mit Hilfe von **3-Buttons** simuliert werden kann. Das Gadget besteht aus vier Zuständen (Startkonfiguration und drei Folgezustände), die durch die Interaktion des Spielers mit den Buttons $a$, $b$, $c$, $d$ durchlaufen werden. Die Buttons steuern die Türen über $\pm x$, $\pm a$, $\pm b$, etc., wobei $+$ für „öffnen” und $-$ für „schließen” steht. + +> **Ergänzung:** Die Ergebnisse stammen aus dem Bereich der **computational complexity of games**. Die Arbeit von Viglietta (2014) und Aloupis et al. formalisiert, welche Spielmechaniken welche Komplexitätsklassen induzieren. Viele klassische Videospiele (z.B. generalisierte Versionen von Sokoban, Zelda, Pokemon) sind nachweislich PSPACE-hard. + +----- + +## 3. Hierarchy Theorems + +### 3.1 Time- und Space-Constructibility + +**Time-constructible:** +Eine Funktion $t: \mathbb{N} \to \mathbb{N}$ mit $t(n) \geq O(n \log n)$ heißt **time-constructible**, wenn die Funktion, die den String $1^n$ auf die Binärdarstellung von $t(n)$ abbildet, in Zeit $O(t(n))$ berechenbar ist. + +**Space-constructible:** +Eine Funktion $f: \mathbb{N} \to \mathbb{N}$ mit $f(n) \geq O(\log n)$ heißt **space-constructible**, wenn die Funktion, die den String $1^n$ auf die Binärdarstellung von $f(n)$ abbildet, in Platz $O(f(n))$ berechenbar ist. + +> **Ergänzung:** Die meisten „natürlichen” Funktionen wie $n$, $n^2$, $n \log n$, $2^n$ sind sowohl time- als auch space-constructible. Diese Bedingung ist nötig, damit die Maschine „weiß”, wie viel Ressourcen sie zur Verfügung hat, und einen Zähler korrekt setzen kann. + +### 3.2 Space Hierarchy Theorem + +> **Theorem (Space Hierarchy):** Für jede space-constructible Funktion $f: \mathbb{N} \to \mathbb{N}$ existiert eine Sprache $A$, die in $O(f(n))$ Speicher entscheidbar ist, aber **nicht** in $o(f(n))$ Speicher. + +#### Beweis (Skizze) + +Der Algorithmus $D$ entscheidet eine Sprache $A$ wie folgt: + +1. Sei $n$ die Länge der Eingabe $w$. +2. Berechne $f(n)$ mittels Space-Constructibility und markiere genau so viel Band. Falls spätere Stufen mehr Platz benötigen, **reject**. +3. Falls $w$ nicht die Form $\langle M \rangle 10^*$ hat (für eine TM $M$), **reject**. +4. Simuliere $M$ auf $w$ und zähle die Schritte. Falls der Zähler $2^{f(n)}$ überschreitet, **reject**. +5. Falls $M$ akzeptiert, **reject**. Falls $M$ ablehnt, **accept** (Diagonalisierung!). + +**Warum funktioniert das?** Angenommen, eine Maschine $M$ entscheidet $A$ mit $g(n)$ Speicher, wobei $g(n) \in o(f(n))$. Dann gibt es ein $n$, ab dem $D$ die Maschine $M$ korrekt simulieren kann (der Platz reicht aus). Aber $D$ tut dann das Gegenteil von $M$ – **Widerspruch**. + +#### Korollare + +- Für beliebige reelle Zahlen $0 \leq \epsilon_1 < \epsilon_2$: $\text{SPACE}(n^{\epsilon_1}) \subsetneq \text{SPACE}(n^{\epsilon_2})$. +- $\text{PSPACE} \subsetneq \text{EXPSPACE} = \bigcup_k \text{SPACE}(2^{n^k})$. + +> **Ergänzung:** Das Space Hierarchy Theorem zeigt, dass mehr Speicher echt mehr Sprachen entscheidbar macht. Die Lücke ist dabei schärfer als beim Time Hierarchy Theorem, da kein logarithmischer Faktor benötigt wird. Dies liegt daran, dass die Simulation einer TM bezüglich des Platzes effizienter ist als bezüglich der Zeit. + +### 3.3 Time Hierarchy Theorem + +> **Theorem (Time Hierarchy):** Für jede time-constructible Funktion $t: \mathbb{N} \to \mathbb{N}$ existiert eine Sprache $A$, die in $O(t(n))$ Zeit entscheidbar ist, aber **nicht** in Zeit $o(t(n) / \log t(n))$. + +#### Beweis (Skizze) + +Der Algorithmus $D$ ist analog zum Space Hierarchy Theorem aufgebaut: + +1. Sei $n$ die Länge der Eingabe $w$. +2. Berechne $t(n)$ mittels Time-Constructibility und speichere den Wert $\lfloor t(n) / \log t(n) \rfloor$ in einem Binärzähler. Dekrementiere diesen Zähler vor jedem Schritt der Stufen 3, 4 und 5. Falls der Zähler 0 erreicht, **reject**. +3. Falls $w$ nicht die Form $\langle M \rangle 10^*$ hat, **reject**. +4. Simuliere $M$ auf $w$. +5. Falls $M$ akzeptiert, **reject**. Falls $M$ ablehnt, **accept**. + +**Warum der log-Faktor?** Das Counter-Update kostet pro Simulationsschritt jeweils $O(\log t(n))$, da der Binärzähler $\log t(n)$ Bits hat. Die Gesamtlaufzeit von $D$ beträgt also $\lfloor t(n) / \log t(n) \rfloor \cdot O(\log t(n)) = O(t(n))$. + +#### Korollare + +- Für beliebige reelle Zahlen $1 \leq \epsilon_1 < \epsilon_2$: $\text{TIME}(n^{\epsilon_1}) \subsetneq \text{TIME}(n^{\epsilon_2})$. +- $\text{P} \subsetneq \text{EXPTIME}$. + +> **Ergänzung:** Die strenge Inklusion $\text{P} \subsetneq \text{EXPTIME}$ ist eines der wenigen **bewiesenen** Separationsresultate in der Komplexitätstheorie. Im Gegensatz dazu ist die Frage $\text{P} \stackrel{?}{=} \text{NP}$ nach wie vor offen. + +### 3.4 Warum ist Time-Constructibility notwendig? + +Die Voraussetzung der Time-Constructibility ist **essentiell**, wie das folgende Gap Theorem zeigt. Ohne diese Voraussetzung gibt es „pathologische” Funktionen, für die die Hierarchie zusammenbricht. + +----- + +## 4. Gap Theorem (Trakhtenbrot, Borodin) + +> **Theorem (Gap Theorem):** Es existiert eine berechenbare Funktion $f$, sodass $\text{TIME}(f(n)) = \text{TIME}(2^{f(n)})$. + +Das bedeutet: Es gibt eine Funktion $f$, bei der eine **exponentielle Erhöhung** der Zeitschranke **keine zusätzlichen Sprachen** entscheidbar macht! + +### Beweis (Skizze) + +Sei ${M_e}$ eine Aufzählung aller deterministischen TMs. Wir konstruieren $f$ schrittweise, sodass $f$ in jedem Schritt $e$ folgende Bedingung erfüllt: + +$$\forall x \left(|x| = n \land M_e(x) \downarrow \text{ in } t \text{ Schritten} \implies t \notin (f(n), 2^{f(n)}]\right)$$ + +**Konstruktion von $f(n)$:** + +Betrachte die Sequenz $k_0 = 0$, $k_{l+1} = 2^{k_l}$. Für alle Berechnungen $M_e(x)$ mit $e \leq n$ (wobei $n = |x|$), die in $t_{e,x}$ Schritten halten, wähle das kleinste $k_l$, sodass **keines** der $t_{e,x}$ im Intervall $(k_l, 2^{k_l}]$ liegt. Setze $f(n) = k_l$. + +**Warum existiert ein solches $k_l$?** Da es nur endlich viele Paare $(e, x)$ mit $e \leq n$ und $|x| = n$ gibt, gibt es auch nur endlich viele Haltezeiten $t_{e,x}$. Die Intervalle $(k_l, 2^{k_l}]$ wachsen schnell genug, um immer eine „Lücke” (gap) zu finden. + +**Konsequenz:** Jede Sprache, die in $\text{TIME}(2^{f(n)})$ liegt, wird von einer TM entschieden, deren Haltezeit **unterhalb** von $f(n)$ liegt (nicht im Intervall dazwischen), also liegt sie automatisch auch in $\text{TIME}(f(n))$. + +> **Ergänzung:** Das Gap Theorem zeigt, dass die Hierarchie-Theoreme die Bedingung der Konstruierbarkeit **wirklich** benötigen. Die Funktion $f$ aus dem Gap Theorem ist typischerweise **nicht** time-constructible. Es handelt sich um ein fundamentales Resultat der abstrakten Komplexitätstheorie (Blum-Axiome). + +----- + +## 5. Speed-Up Theorem (Blum) + +> **Theorem (Speed-Up Theorem, M. Blum):** Es existiert eine berechenbare Menge $A$, sodass es für jeden Index $e$ (d.h. jede TM $M_e$) für $A$ einen anderen Index $i$ für $A$ gibt, sodass: +> $$\forall^\infty x ; \left(\Phi_i(x) \leq \log \Phi_e(x)\right)$$ + +Dabei ist $\Phi_e(x)$ die Anzahl der Berechnungsschritte von $M_e(x)$ (falls $M_e$ auf $x$ hält), und $\forall^\infty x$ bedeutet „für fast alle $x$” (alle bis auf endlich viele). + +**Bedeutung:** Egal welche TM $M_e$ die Sprache $A$ berechnet – es gibt immer eine **exponentiell schnellere** TM $M_i$, die dasselbe tut. Die Sprache $A$ hat also **keine optimale Berechnung**. + +### Beweis (Skizze) + +#### Hilfsfolge + +Definiere $g(x) = 2^x$, $g^{(1)}(x) = g(x)$, und $g^{(n+1)}(x) = g(g^{(n)}(x))$ (iterierte Exponentiation). Für $x > e + 1$ ist dann $h_e(x) = g^{(x-e)}(0)$ eine **abnehmende Familie** von Funktionen, d.h. $g(h_{e+1}(x)) = h_e(x)$. + +#### Diagonalisierung + +Für jedes $x$ wird $A(x)$ bestimmt, indem für alle $e \leq x$ geprüft wird: + +- Ist $e$ noch nicht markiert („cancelled”)? +- Gilt $\Phi_e(x) < h_e(x)$? + +Für das **kleinste** solche $e$ definiere $A(x) = 1 - M_e(x)$ und markiere $e$. (Das ist der Diagonalisierungsschritt: $A$ tut das Gegenteil von $M_e$.) + +#### Konsequenzen + +Damit gilt für jedes $e$: Falls für unendlich viele $x$ gilt $\Phi_e(x) < h_e(x)$, folgt $M_e \neq A$. Anders geschrieben: + +$$\forall e \left(M_e = A \implies \forall^\infty x ; h_e(x) \leq \Phi_e(x)\right)$$ + +#### Speed-Up-Eigenschaft + +Um $A(x)$ zu berechnen, lässt man für jedes $e \leq x$ die Maschine $M_e(x)$ für $h_e(x)$ Schritte laufen. Mit Hilfe der endlichen Menge $F_u = {(e, x, A(x)) : e < u \land e \text{ cancelled at stage } x}$ genügt es, dies nur für $u \leq e \leq x$ zu tun. + +Die Berechnung dauert $h_u(x) + \ldots + h_x(x)$ Schritte. Die Laufzeit für die ersten $x$ Stufen ist von oben beschränkt durch $x \cdot (h_u(x) + \ldots + h_x(x)) \leq h_{u-1}(x)$ (für fast alle $x$). + +Da $u$ beliebig groß gewählt werden kann, gilt: +$$\forall e ; \exists i \left(M_i = A \land \forall^\infty x ; \Phi_i(x) \leq h_{e+1}(x)\right)$$ + +Und damit insgesamt: +$$\Phi_i(x) \leq h_{e+1}(x) \leq \log h_e(x) \leq \log \Phi_e(x)$$ + +> **Ergänzung:** Das Speed-Up Theorem ist ein tiefliegendes Resultat, das zeigt, dass nicht jede berechenbare Sprache eine „schnellste” Berechnung besitzt. Es steht im Kontext der **Blum-Axiome** der abstrakten Komplexitätstheorie. Die Funktion $h_e$ wächst dabei so schnell (iterierte Exponentiation), dass der Logarithmus von $h_e$ immer noch zu $h_{e+1}$ wird – genau das ermöglicht den exponentiellen Speed-Up. + +----- + +## 6. Orakel-Turingmaschinen + +### Definition + +Ein **Orakel** für eine Sprache $A$ ist ein Gerät, das für jeden String $w$ in **einem einzigen Schritt** berichten kann, ob $w \in A$. + +Eine **Orakel-Turingmaschine** $M^A$ ist eine modifizierte TM mit einem speziellen **Orakelband**: Wann immer $M^A$ einen String auf dieses Band schreibt, erhält sie sofort die Antwort, ob der String in $A$ liegt. + +### Komplexitätsklassen mit Orakeln + +- $\text{P}^A$: Klasse der Sprachen, die von einer **polynomialzeit**-beschränkten Orakel-TM mit Orakel $A$ entschieden werden können. +- $\text{NP}^A$: Analog für **nichtdeterministische** polynomialzeit-beschränkte Orakel-TMs. + +> **Ergänzung:** Orakel-TMs sind ein mächtiges Konzept, um die relative Stärke von Komplexitätsklassen zu untersuchen. Intuitiv simuliert das Orakel ein „Unterprogramm” mit beliebiger Mächtigkeit – die Anfrage kostet nur einen einzigen Schritt, unabhängig davon, wie schwer das Orakel-Problem eigentlich ist. + +----- + +## 7. Relativierung + +### Kernfrage + +Kann die Technik der **Relativierung** (Diagonalisierung über Orakel-TMs) dabei helfen, Komplexitätsklassen zu separieren? + +### Theorem (Baker, Gill, Solovay, 1975) + +> 1. Es existiert ein Orakel $A$, sodass $\text{P}^A \neq \text{NP}^A$. +> 2. Es existiert ein Orakel $B$, sodass $\text{P}^B = \text{NP}^B$. + +### Beweis von Teil 2 + +Wähle $B = \text{TQBF}$. Dann gilt: +$$\text{NP}^{\text{TQBF}} \subseteq \text{NPSPACE} \subseteq \text{PSPACE} \subseteq \text{P}^{\text{TQBF}}$$ + +Die letzte Inklusion gilt, weil TQBF PSPACE-vollständig ist – eine polynomialzeit Orakel-TM kann jedes PSPACE-Problem lösen, indem sie das Orakel befragt. + +### Beweis von Teil 1 (Diagonalisierung) + +Wir konstruieren ein Orakel $A$, sodass die Sprache +$$L_A = {w \mid \exists x \in A \text{ mit } |x| = |w|}$$ +**nicht** in $\text{P}^A$ liegt (aber offensichtlich in $\text{NP}^A$, da man $x$ raten und das Orakel fragen kann). + +**Konstruktion von $A$ in Schritten:** + +Sei $M_1, M_2, M_3, \ldots$ die Aufzählung aller polynomialzeit Orakel-TMs. + +- **Schritt 1:** Wähle endlich viele beliebige Strings und füge sie zu $A$ hinzu. +- **Schritt $i$:** Wähle $n$ so groß, dass $2^n > p_i(n)$ (Laufzeitschranke von $M_i$) und $n$ größer als alle bisherigen String-Längen in $A$. + - Simuliere $M_i$ auf Eingabe $1^n$. + - Falls $M_i$ das Orakel nach $y$ fragt und der Status von $y$ feststeht → antworte gemäß Status. + - Falls der Status nicht feststeht → antworte „Nein” und setze $y \notin A$. + - Falls $M_i$ **akzeptiert** → alle verbleibenden Strings der Länge $n$ erhalten den Status „nicht in $A$” (Diagonalisierung: $1^n \in L_A$, aber $M_i$ akzeptiert – Widerspruch zur korrekten Entscheidung). + - Falls $M_i$ **nicht akzeptiert** → wähle einen String der Länge $n$, nach dem $M_i$ das Orakel nicht gefragt hat, und füge ihn zu $A$ hinzu (das geht, weil $2^n > p_i(n)$, also hat $M_i$ weniger Strings abgefragt, als es gibt). + +### Konsequenz + +Da sowohl $\text{P}^A \neq \text{NP}^A$ als auch $\text{P}^B = \text{NP}^B$ möglich ist, kann **keine relativierende Beweistechnik** die P-vs-NP-Frage klären. Jeder Beweis, der für beliebige Orakel funktioniert, würde zu einem Widerspruch führen. + +> **Ergänzung:** Dies war ein bahnbrechendes Ergebnis von Baker, Gill und Solovay (1975), das zeigte, dass Diagonalisierung allein nicht ausreicht, um P ≠ NP zu beweisen. Spätere Arbeiten (Razborov, Rudich: „Natural Proofs”, 1997) zeigten weitere fundamentale Schranken für Beweistechniken. + +----- + +## 8. Polynomiale Hierarchie (PH) + +### 8.1 Definition über Quantoren + +Für eine Komplexitätsklasse $\mathcal{C}$ definieren wir: + +$$\exists \mathcal{C} = \left{x : \exists^{p(|x|)} y ; \langle x, y \rangle \in B \right}$$ + +wobei $B \in \mathcal{C}$ und „$\exists^{p(|x|)} y$” bedeutet: es existiert ein String $y$ der Länge $\leq p(|x|)$. + +Analog für den Allquantor: $\forall \mathcal{C}$. + +**Beobachtungen:** + +- $\exists \text{P} = \text{NP}$ (die existenzielle Quantifizierung über P ergibt NP) +- $\forall \text{P} = \text{co-NP}$ (die universelle Quantifizierung über P ergibt co-NP) + +### 8.2 Die Stufen der Hierarchie + +Die polynomiale Hierarchie wird induktiv definiert: + +|Stufe|$\Sigma^p$ |$\Pi^p$ |$\Delta^p$ | +|-----|--------------------------------------------------------|----------------------------------|---------------------------------------| +|0 |$\Sigma^p_0 = \text{P}$ |$\Pi^p_0 = \text{P}$ | | +|1 |$\Sigma^p_1 = \text{NP}$ |$\Pi^p_1 = \text{co-NP}$ |$\Delta^p_1 = \text{P}$ | +|2 |$\Sigma^p_2 = \exists \Pi^p_1 = \text{NP}(\text{co-NP})$|$\Pi^p_2 = \forall \Sigma^p_1$ |$\Delta^p_2 = \text{P}(\text{NP})$ | +|$n+1$|$\Sigma^p_{n+1} = \exists \Pi^p_n$ |$\Pi^p_{n+1} = \forall \Sigma^p_n$|$\Delta^p_{n+1} = \text{P}(\Sigma^p_n)$| + +Die **polynomiale Hierarchie** ist dann: +$$\text{PH} = \bigcup_{n \geq 0} \Sigma^p_n$$ + +### 8.3 Äquivalente Charakterisierung + +Eine Sprache $L$ ist in $\Sigma^p_i$ genau dann, wenn es eine polynomialzeit-TM $M$ und ein Polynom $q$ gibt, sodass: + +$$x \in L \iff \exists u_1 \in {0,1}^{q(|x|)} ; \forall u_2 \in {0,1}^{q(|x|)} ; \cdots ; Q_i u_i \in {0,1}^{q(|x|)} ; M(x, u_1, \ldots, u_i) = 1$$ + +wobei die Quantoren **alternieren** ($\exists, \forall, \exists, \forall, \ldots$) und $Q_i = \forall$ falls $i$ gerade, $Q_i = \exists$ falls $i$ ungerade. + +Analog für $\Pi^p_i$ mit umgekehrter Quantorenreihenfolge ($\forall, \exists, \forall, \exists, \ldots$). + +### 8.4 Zusammenhang mit Orakel-Klassen + +> $\Sigma^p_{n+1} = \text{NP}(\Sigma^p_n)$ + +**Beweis (Skizze):** + +- **Richtung $\Sigma^p_{n+1} \subseteq \text{NP}(\Sigma^p_n)$:** Per Definition ist jedes $S \in \Sigma^p_{n+1} = \exists \Pi^p_n$. Es gibt also ein $S’ \in \Pi^p_n$ mit $S = {x : \exists y \text{ mit } (x,y) \in S’}$. Da $\Pi^p_n \subseteq \text{NP}(\Sigma^p_n)$ (und auch $= \text{co-}\Sigma^p_{n+1}$), liegt $S$ in $\text{NP}(\Sigma^p_n)$. +- **Richtung $\text{NP}(\Sigma^p_n) \subseteq \Sigma^p_{n+1}$:** Eine NP-Maschine mit Orakel $S’ \in \Sigma^p_n$ rät zunächst ein Zertifikat $y$ und stellt dann adaptive Orakel-Anfragen. Man kann die Orakel-Antworten **mitraten** und die Korrektheit der geratenen Antworten durch die Quantorenstruktur von $\Sigma^p_n$ verifizieren. + +### 8.5 Vollständige Probleme + +Für jede Stufe $i$ der Hierarchie ist $\Sigma_i\text{SAT}$ ein vollständiges Problem: + +$$\Sigma_i\text{SAT} = \exists u_1 ; \forall u_2 ; \exists \cdots ; Q_i u_i ; \varphi(u_1, u_2, \ldots, u_i) = 1$$ + +### 8.6 Kollaps der Hierarchie + +- $\text{PH} \subseteq \text{PSPACE}$ (leicht einzusehen, da jede Stufe in PSPACE simulierbar ist). +- Falls $\text{PH} = \text{PSPACE}$, so **kollabiert** PH (auf eine endliche Stufe). +- Falls es ein **vollständiges Problem für PH** gibt, so kollabiert PH ebenfalls. + +> **Ergänzung:** Die Vermutung, dass PH **nicht** kollabiert, ist eines der zentralen offenen Probleme der Komplexitätstheorie. Ein Kollaps auf Stufe 0 würde $\text{P} = \text{NP}$ bedeuten, ein Kollaps auf Stufe 1 würde $\text{NP} = \text{co-NP}$ implizieren. Die meisten Forscher vermuten, dass die Hierarchie unendlich ist – aber ein Beweis fehlt. + +----- + +## Zusammenfassung der wichtigsten Beziehungen + +$$\text{P} \subseteq \text{NP} \subseteq \Sigma^p_2 \subseteq \cdots \subseteq \text{PH} \subseteq \text{PSPACE} \subseteq \text{EXPTIME} \subseteq \text{EXPSPACE}$$ + +**Bekannte strikte Inklusionen:** + +- $\text{P} \subsetneq \text{EXPTIME}$ (Time Hierarchy Theorem) +- $\text{PSPACE} \subsetneq \text{EXPSPACE}$ (Space Hierarchy Theorem) +- $\text{NL} \subsetneq \text{PSPACE}$ (Space Hierarchy Theorem) + +**Offene Fragen:** + +- $\text{P} \stackrel{?}{=} \text{NP}$ +- $\text{NP} \stackrel{?}{=} \text{co-NP}$ +- $\text{P} \stackrel{?}{=} \text{PSPACE}$ +- Kollabiert PH? + +----- + +## Übersicht der Schlüsselresultate + +|Resultat |Aussage |Technik | +|---------------------------|----------------------------------------------------------|----------------------------------------------| +|TQBF ist PSPACE-vollständig|Jedes PSPACE-Problem lässt sich als QBF kodieren |Formelkonstruktion mit Allquantor-Trick | +|Space Hierarchy Theorem |Mehr Platz → echt mehr Sprachen |Diagonalisierung | +|Time Hierarchy Theorem |Mehr Zeit → echt mehr Sprachen (mit log-Lücke) |Diagonalisierung + Zähler | +|Gap Theorem |$\exists f$: $\text{TIME}(f(n)) = \text{TIME}(2^{f(n)})$ |Konstruktion von Lücken in Haltezeiten | +|Speed-Up Theorem |$\exists A$: jede TM kann exponentiell beschleunigt werden|Diagonalisierung + abnehmende Funktionsfamilie| +|Baker-Gill-Solovay |Relativierung kann P vs NP nicht klären |Orakel-Konstruktion | +|PH-Definition |$\Sigma^p_{n+1} = \text{NP}(\Sigma^p_n)$ |Quantoren-Alternierung | diff --git a/Kryptografie/.DS_Store b/Kryptografie/.DS_Store new file mode 100644 index 0000000..11b5543 Binary files /dev/null and b/Kryptografie/.DS_Store differ diff --git a/Kryptografie/_Overview.md b/Kryptografie/_Overview.md new file mode 100644 index 0000000..217da93 --- /dev/null +++ b/Kryptografie/_Overview.md @@ -0,0 +1,37 @@ +# Kryptografie + +> [[Dashboard|← Zurück zum Dashboard]] + +**Dozent:** Prof. Dr. Björn Grohmann + +--- + +## Vorlesungen + +| # | Thema | Folien | Zusammenfassung | NotebookLM | Lernkarten | Status | +| --- | ------------------------------------------ | ------ | --------------------------------- | ---------- | ---------- | ------ | +| 01 | Historische Chiffren & Grundlagen | ✅ | ✅ [[kr1 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 02 | MAC & AEAD | ✅ | ✅ [[kr2 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 03 | Signaturen & Zertifikate | ✅ | ✅ [[kr3 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 04 | Komplexitätsklassen & Public Key | ✅ | ✅ [[kr4 - zusammenfassung\|Link]] | ✅ | ⬜ | 🟡 | +| 05 | MPC, Zero Knowledge & Differential Privacy | ✅ | ✅ [[kr5 - zusammenfassung\|Link]] | ✅ | ⬜ | 🟡 | +| 06 | Klausurvorbereitung | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | + +**Legende:** ⬜ Offen · ✅ Erledigt · 🔴 Nicht begonnen · 🟡 In Arbeit · 🟢 Fertig + +--- + +## Zusätzliche Materialien + +- [[02 - Areas/bdr - duales studium/hwr/Kryptografie/klausur/themenliste|Themenliste (alle Prüfungsthemen)]] +- [[kr2 - additional notes|KR2 – Zusätzliche Notizen]] +- [[kr3 - notes|KR3 – Notizen]] + +--- + +## Modul-Infos + +- **Dozent:** Prof. Dr. Björn Grohmann +- **Prüfungsform:** +- **Prüfungstermin:** +- **Besonderheiten:** diff --git a/Kryptografie/books/Grundlagen_der_Kryptographie_ Einführung_Duncan Buell_2024_Springer.pdf b/Kryptografie/books/Grundlagen_der_Kryptographie_ Einführung_Duncan Buell_2024_Springer.pdf new file mode 100644 index 0000000..ba80440 Binary files /dev/null and b/Kryptografie/books/Grundlagen_der_Kryptographie_ Einführung_Duncan Buell_2024_Springer.pdf differ diff --git a/Kryptografie/books/Kryptographie_Grundlagen, Algorithmen, Protokolle_Dietmar_Wätjen_Springer.pdf b/Kryptografie/books/Kryptographie_Grundlagen, Algorithmen, Protokolle_Dietmar_Wätjen_Springer.pdf new file mode 100644 index 0000000..83fff05 Binary files /dev/null and b/Kryptografie/books/Kryptographie_Grundlagen, Algorithmen, Protokolle_Dietmar_Wätjen_Springer.pdf differ diff --git a/Kryptografie/folien/kr1.pdf b/Kryptografie/folien/kr1.pdf new file mode 100644 index 0000000..9a32a0a Binary files /dev/null and b/Kryptografie/folien/kr1.pdf differ diff --git a/Kryptografie/folien/kr2 - ohne recap.pdf b/Kryptografie/folien/kr2 - ohne recap.pdf new file mode 100644 index 0000000..b7652e9 Binary files /dev/null and b/Kryptografie/folien/kr2 - ohne recap.pdf differ diff --git a/Kryptografie/folien/kr3 - ohne recap.pdf b/Kryptografie/folien/kr3 - ohne recap.pdf new file mode 100644 index 0000000..9aa8fb2 Binary files /dev/null and b/Kryptografie/folien/kr3 - ohne recap.pdf differ diff --git a/Kryptografie/folien/kr4 - ohne recap.pdf b/Kryptografie/folien/kr4 - ohne recap.pdf new file mode 100644 index 0000000..db447bc Binary files /dev/null and b/Kryptografie/folien/kr4 - ohne recap.pdf differ diff --git a/Kryptografie/folien/kr5 - ohne recap.pdf b/Kryptografie/folien/kr5 - ohne recap.pdf new file mode 100644 index 0000000..478bdbe Binary files /dev/null and b/Kryptografie/folien/kr5 - ohne recap.pdf differ diff --git a/Kryptografie/klausur/gesamtzusammenfassung.md b/Kryptografie/klausur/gesamtzusammenfassung.md new file mode 100644 index 0000000..bf3b936 --- /dev/null +++ b/Kryptografie/klausur/gesamtzusammenfassung.md @@ -0,0 +1,1556 @@ +# Kryptographie – Gesamtzusammenfassung zur Klausurvorbereitung + +**HWR Berlin | Prof. Dr. Björn Grohmann | Stand: 31.03.2026** + +--- +## Inhaltsverzeichnis +1. [IT-Sicherheitsbegriffe (Schutzziele)](#1-it-sicherheitsbegriffe) +2. [Klassische Kryptographie](#2-klassische-kryptographie) +3. [Informationstheoretische Sicherheit](#3-informationstheoretische-sicherheit) +4. [Kryptographische Primitive](#4-kryptographische-primitive) +5. [Bit Commitment](#5-bit-commitment) +6. [Symmetrische Verschlüsselung](#6-symmetrische-verschlüsselung) +7. [AES – Advanced Encryption Standard](#7-aes) +8. [Betriebsmodi (Modes of Operation)](#8-betriebsmodi) +9. [Angriffsmodelle & IND-CPA-Sicherheit](#9-angriffsmodelle--ind-cpa) +10. [MAC, HMAC & AEAD](#10-mac-hmac--aead) +11. [Public-Key-Kryptographie – Grundlagen](#11-public-key-kryptographie) +12. [RSA-Kryptosystem](#12-rsa) +13. [ElGamal-Verschlüsselung](#13-elgamal) +14. [IND-CCA, IND-CCA2 & Padding](#14-ind-cca-ind-cca2--padding) +15. [Digitale Signaturen](#15-digitale-signaturen) +16. [Zertifikate & PKI](#16-zertifikate--pki) +17. [TLS (Transport Layer Security)](#17-tls) +18. [IPSec](#18-ipsec) +19. [Quantencomputer & Kryptographie](#19-quantencomputer) +20. [Post-Quantum Kryptographie (PQC)](#20-post-quantum-kryptographie) +21. [Homomorphe Verschlüsselung](#21-homomorphe-verschlüsselung) +22. [Multi-Party Computation (MPC)](#22-multi-party-computation-mpc) +23. [Zero Knowledge Proofs (ZKP)](#23-zero-knowledge-proofs) +24. [Differential Privacy](#24-differential-privacy) +25. [Trusted Execution Environments (TEE)](#25-trusted-execution-environments) +26. [Privacy-Schutzziele & Technologien](#26-privacy-schutzziele--technologien) +--- +## 1. IT-Sicherheitsbegriffe +### Die 4 Sicherheitsziele (VIVA) +In der Kryptographie und IT-Sicherheit werden vier grundlegende Schutzziele unterschieden: + +| Schutzziel | Englisch | Bedeutung | +|---|---|---| +| **Vertraulichkeit** | Confidentiality | Nur berechtigte Personen können auf Daten zugreifen. Schutz vor unbefugtem Mitlesen. | +| **Integrität** | Integrity | Daten wurden nicht unbemerkt verändert. Manipulationen werden erkannt. | +| **Verfügbarkeit** | Availability | Daten und Systeme sind für Berechtigte zugänglich, wenn sie benötigt werden. | +| **Authentizität** | Authenticity | Der Absender ist zweifelsfrei identifizierbar. Die Herkunft von Daten ist verifizierbar. | + +**Zusätzlich:** **Verbindlichkeit (Non-Repudiation)** – ein Absender kann das Senden einer Nachricht nicht abstreiten. Oft als 5. Schutzziel oder als Teil der Authentizität betrachtet. + +**Historisches Beispiel:** Beim Babington-Plot (1586) fehlten alle vier Schutzziele: Maria Stuarts Chiffre bot keine echte Vertraulichkeit (Häufigkeitsanalyse), keine Integrität (Nachrichten wurden manipuliert), der Bote war ein Doppelagent (keine Authentizität), und die Existenz der Kommunikation war bekannt. + +--- + +## 2. Klassische Kryptographie +### 2.1 Häufigkeitsanalyse + +Einfache Substitutionschiffren lassen sich durch **Häufigkeitsanalyse** brechen: Man zählt die Häufigkeit von Symbolen im Geheimtext und vergleicht sie mit der bekannten Buchstabenhäufigkeit der Sprache. + +- Im Englischen ist **E** der häufigste Buchstabe (~11,16 %), gefolgt von A, R, I, O +- Samuel Morse nutzte dasselbe Prinzip für sein Morsealphabet + +### 2.2 Caesar-Chiffre + +**Definition:** Jeder Buchstabe wird um eine feste Zahl *n* im Alphabet verschoben. + +- **Verschlüsselung:** `E_n(x) = (x + n) mod 26` +- **Entschlüsselung:** `D_n(x) = (x - n) mod 26` + +**Beispiel (n = 3):** A → D, B → E, Z → C + +**Schwäche:** Nur 25 mögliche Schlüssel → trivial per Brute-Force brechbar. + +### 2.3 Vigenère-Chiffre + +**Definition:** Polyalphabetische Substitution. Ein Schlüsselwort wird wiederholt über den Klartext gelegt. Jeder Buchstabe bekommt einen anderen Caesar-Shift. + +- **Verschlüsselung:** `C_i = (M_i + K_i) mod 26` +- **Entschlüsselung:** `M_i = (C_i - K_i) mod 26` + +**Beispiel:** Klartext „attackatdawn" + Schlüssel „LEMON" (wiederholt: „LEMONLEMONLE") → Geheimtext „LXFOPVEFRNHR" + +**Schwäche:** Der **Kasiski-Test** ermittelt die Schlüssellänge. Wiederholen sich Muster im Klartext an Positionen, die ein Vielfaches der Schlüssellänge auseinanderliegen, entstehen identische Muster im Geheimtext. Der ggT der Abstände dieser Muster ist oft die Schlüssellänge. + +### 2.4 Homophone Chiffren + +Jedem Buchstaben werden mehrere Symbole zugeordnet (proportional zur Häufigkeit), um die Häufigkeitsverteilung zu glätten. Bieten keinen vollständigen Schutz. + +--- + +## 3. Informationstheoretische Sicherheit + +### 3.1 Informationsgehalt und Entropie + +**Informationsgehalt** eines Zeichens x mit Wahrscheinlichkeit p_x: +``` +I(x) = -log₂(p_x) = log₂(1/p_x) +``` +Je seltener ein Zeichen, desto größer sein Informationsgehalt (in Bit). + +**Entropie H(X)** – mittlerer Informationsgehalt einer Zufallsvariable: +``` +H(X) = -∑_x p_x · log₂(p_x) +``` +Die Entropie ist maximal, wenn alle Zeichen gleich wahrscheinlich sind. + +**Bedingte Entropie:** `H(X|Y) = H(X,Y) - H(Y)` + +### 3.2 Perfekte Sicherheit (Shannon Perfect Secrecy) + +**Definition (Claude Shannon, 1949):** Ein Verschlüsselungssystem hat **perfekte Sicherheit**, wenn gilt: +``` +H(M|E) = H(M) +``` +Das bedeutet: Die bedingte Entropie der Nachricht M gegeben den Geheimtext E ist gleich der Entropie von M. Der Geheimtext verrät **keinerlei Information** über den Klartext. M und E sind stochastisch unabhängig. + +**Äquivalente Formulierung:** Jeder Geheimtext ist unabhängig vom Klartext gleich wahrscheinlich. + +**Konsequenz:** Für perfekte Sicherheit muss der Schlüssel **mindestens so lang wie die Nachricht** sein. + +### 3.3 One-Time Pad (OTP) + +**Definition:** Das einzige Verfahren, das perfekte Sicherheit erreicht. + +- **Verschlüsselung:** `E = P ⊕ K` (bitweise XOR von Klartext und Schlüssel) +- **Entschlüsselung:** `P = E ⊕ K` + +**Bedingungen für perfekte Sicherheit:** +1. Der Schlüssel muss **echt zufällig** erzeugt werden +2. Der Schlüssel muss **mindestens so lang** sein wie die Nachricht +3. Der Schlüssel darf **nur einmal** verwendet werden (daher „One-Time") + +**Problem in der Praxis:** Der Schlüssel muss genauso lang sein wie die Nachricht und über einen sicheren Kanal übertragen werden – unpraktisch. + +**Was passiert bei zweifacher Verwendung desselben OTP-Schlüssels?** +``` +C₁ = M₁ ⊕ K und C₂ = M₂ ⊕ K +→ C₁ ⊕ C₂ = M₁ ⊕ M₂ +``` +Ein Angreifer erhält XOR der beiden Klartexte – mit Häufigkeitsanalyse oft lösbar. + +--- + +## 4. Kryptographische Primitive + +### 4.1 Einwegfunktionen (One-Way Functions, OWF) + +**Definition:** Eine Funktion `f: {0,1}* → {0,1}*` ist eine Einwegfunktion, wenn: +1. **Leicht zu berechnen:** Es gibt einen Polynomialzeit-Algorithmus, der f(x) berechnet. +2. **Schwer umzukehren:** Für jeden effizienten Algorithmus A' und alle hinreichend großen n gilt: + ``` + Pr[A'(f(x)) = x'] < 1/p(n) + ``` + mit beliebigem Polynom p(n). Das heißt, die Umkehrung gelingt nur mit vernachlässigbarer Wahrscheinlichkeit. + +**Anschaulich:** x → f(x) ist schnell und einfach. f(x) → x ist praktisch unmöglich. + +**Beispiele:** Multiplikation zweier Primzahlen (leicht), Faktorisierung des Produkts (schwer). + +### 4.2 Pseudo-Zufallszahlengeneratoren (PRG/PRNG) + +**Definition:** Eine Funktion `G: {0,1}^n → {0,1}^{l(n)}` ist ein PRG, wenn: +1. G ist in Polynomialzeit berechenbar. +2. Die Ausgabe ist **länger** als die Eingabe: `l(n) > n` (Streckung). +3. Die Verteilungen `{G(U_n)}` (Ausgabe auf zufälligem Seed) und `{U_{l(n)}}` (echte Zufallsbits) sind **berechnungsmäßig ununterscheidbar**. + +**Amplifikation:** Hat man einen PRG mit Streckung n+1, kann man für jedes Polynom l(n) einen PRG mit Streckung l(n) konstruieren, indem man G iteriert anwendet. + +### 4.3 Berechnungsmäßige Ununterscheidbarkeit (Computational Indistinguishability) + +**Definition:** Zwei Wahrscheinlichkeitsensembles {X_n} und {Y_n} sind **berechnungsmäßig ununterscheidbar**, wenn für jeden probabilistischen Polynomialzeit-Algorithmus D (Distinguisher) und jedes Polynom p(·) ab einem N gilt: +``` +|Pr[D(X_n) = 1] - Pr[D(Y_n) = 1]| < 1/p(n) +``` + +**Umgangssprachlich:** Kein effizienter Algorithmus kann mit nicht-vernachlässigbarem Vorteil entscheiden, ob er eine Ausgabe von G oder echte Zufallsbits sieht. + +### 4.4 Zusammenhang OWF ↔ PRG + +> **Theorem:** Pseudo-Zufallszahlengeneratoren existieren **genau dann**, wenn Einwegfunktionen existieren. + +- **PRG → OWF:** Aus einem PRG `G: {0,1}^n → {0,1}^{2n}` konstruiert man eine OWF: `f(x||y) = G(x)` wobei |x| = |y| = n. Die Funktion „vergisst" die Hälfte der Eingabe. +- **OWF → PRG:** Über ein **Hardcore-Prädikat (HCP)**. Ein HCP ist leicht zu berechnen, aber aus f(x) allein nicht vorhersagbar. + +--- + +## 5. Bit Commitment + +**Definition:** Ein Zwei-Phasen-Protokoll, bei dem sich Alice auf einen Wert (z.B. ein Bit b) festlegt (**Commit**), ohne dass Bob ihn kennt. Später enthüllt Alice den Wert (**Reveal**). + +**Eigenschaften:** +- **Hiding:** Bob kann b vor der Reveal-Phase nicht bestimmen. +- **Binding:** Alice kann b nach dem Commit nicht mehr ändern. + +**Naiver Ansatz (mit PRG) – funktioniert NICHT:** +- Alice wählt Seed s, sendet `G_m(s)` und `B_{m+1}(s) ⊕ b` +- **Problem:** Alice könnte zwei Seeds s, s' finden, die in den ersten m Bits übereinstimmen, aber im (m+1)-ten Bit differieren → Betrug möglich. + +**Verbessertes Protokoll – funktioniert:** +1. Bob sendet zufälligen Vektor `R = (r₁, ..., r_{3n})` +2. Alice wählt Seed s und sendet: + - `d_i = B_i(s)` falls `r_i = 0` + - `d_i = B_i(s) ⊕ b` falls `r_i = 1` +3. Reveal: Alice sendet s und b, Bob verifiziert. + +**Warum sicher?** Die Wahrscheinlichkeit, dass Alice betrügen kann (zwei Seeds finden, die dieselben d_i erzeugen, aber verschiedenes b liefern), ist höchstens `2^{-n}`. + +--- + +## 6. Symmetrische Verschlüsselung + +**Definition:** Sender und Empfänger verwenden **denselben geheimen Schlüssel** zum Ver- und Entschlüsseln. + +### 6.1 Stromchiffren + +**Prinzip:** Ein kurzer Schlüssel (Seed) wird durch einen PRNG zu einem langen Schlüsselstrom gestreckt. Dieser wird per XOR mit dem Klartext verknüpft. + +``` +Schlüsselstrom = PRNG(Seed) +Geheimtext = Klartext ⊕ Schlüsselstrom +``` + +### 6.2 ChaCha20 – Parameter und Funktionsweise + +**ChaCha20** ist eine moderne, weit verbreitete Stromchiffre (z.B. in TLS 1.3, WireGuard). + +**Parameter:** +| Parameter | Größe | Bedeutung | +|---|---|---| +| **Schlüssel** | 256 Bit | Geheimer Schlüssel | +| **Zähler** | 32 Bit | Block-Zähler (verhindert Wiederholung) | +| **Nonce** | 96 Bit | Number-used-once (verhindert IV-Wiederverwendung) | +| **Klartext** | beliebig | Zu verschlüsselnde Daten | + +**Kernoperation – Quarter Round** (arbeitet auf 4 Wörtern a, b, c, d je 32 Bit): +``` +a += b; d ^= a; d <<<= 16 +c += d; b ^= c; b <<<= 12 +a += b; d ^= a; d <<<= 8 +c += d; b ^= c; b <<<= 7 +``` + +**Inner Block:** 8 Quarter Rounds (4 Spalten + 4 Diagonalen) + +**Block-Erzeugung:** 4×4-Matrix aus [Konstanten | Key | Zähler | Nonce] wird 10× durch inner_block gejagt, dann zum Ausgangszustand addiert. + +### 6.3 Blockchiffren + +**Definition:** Verschlüsselt einen Klartextblock **fester Größe** (z.B. 128 Bit) in einen Geheimtextblock gleicher Größe. Für längere Nachrichten werden **Betriebsmodi** benötigt. + +### 6.4 Feistel-Netzwerk (Feistel Cipher) + +**Grundprinzip:** Der Block wird in zwei gleiche Hälften L, R aufgeteilt. Pro Runde gilt: +``` +L_{i+1} = R_i +R_{i+1} = L_i ⊕ F(R_i, K_i) +``` +Die Funktion F muss **nicht invertierbar** sein, weil die Entschlüsselung durch Anwenden der Rundenschlüssel in umgekehrter Reihenfolge funktioniert. + +**Beispiel:** DES (Data Encryption Standard, 1977) ist ein 16-Runden-Feistel-Netzwerk. +- Blockgröße: 64 Bit, Schlüssellänge: 56 Bit (effektiv) → **heute unsicher** + +--- + +## 7. AES – Advanced Encryption Standard + +**Definition:** Symmetrische Blockchiffre, seit 2001 Standard (NIST). +- **Blockgröße:** 128 Bit +- **Schlüssellängen:** 128 Bit (10 Runden), 192 Bit (12 Runden), 256 Bit (14 Runden) +- **Gilt als sicher** + +### 7.1 Die 4 Phasen von AES-128 + +Der Zustand ist eine 4×4-Matrix von Bytes (128 Bit). + +**Algorithmus:** +1. Schlüsselexpansion: Aus dem Hauptschlüssel werden 11 Rundenschlüssel K₀, ..., K₁₀ abgeleitet. +2. Initiales XOR: `s ← M ⊕ K₀` +3. Für jede Runde r = 1 bis 10: + 1. **SubBytes** – nichtlineare Byte-Substitution (S-Box) + 2. **ShiftRows** – zeilenweises Verschieben + 3. **MixColumns** – spaltenweise Mischung (nicht in Runde 10) + 4. **AddRoundKey** – XOR mit Rundenschlüssel K_r + +**Die vier Transformationen im Detail:** + +| Phase | Beschreibung | Zweck | +|---|---|---| +| **SubBytes** | Jedes Byte wird durch sein mult. Inverses in GF(2⁸) ersetzt + affine Transformation | Konfusion (non-linearity) | +| **ShiftRows** | Zeile 0: kein Shift; Zeile 1: 1 Byte; Zeile 2: 2 Bytes; Zeile 3: 3 Bytes zyklisch links | Diffusion (Bytes werden „gemischt") | +| **MixColumns** | Jede Spalte wird als Polynom über GF(2⁸) mit einem festen Polynom multipliziert | Diffusion (algebraische Mischung) | +| **AddRoundKey** | XOR des aktuellen Zustands mit dem Rundenschlüssel | Schlüsseleinbindung | + +### 7.2 AES S-Box – Mathematik in GF(2⁸) + +AES arbeitet im endlichen Körper **GF(2⁸)** (Galois-Körper mit 256 Elementen) mit dem **irreduziblen Polynom:** +``` +m(x) = x⁸ + x⁴ + x³ + x + 1 +``` + +**Operationen in GF(2⁸):** +- **Addition:** XOR der Koeffizienten (entspricht XOR der Byte-Werte) +- **Multiplikation:** Polynommultiplikation **modulo m(x)** +- **Multiplikatives Inverses:** Berechnung mit dem **erweiterten euklidischen Algorithmus**: Finde `a(x)`, `c(x)` sodass `b(x)·a(x) + m(x)·c(x) = 1` + +**S-Box-Konstruktion (zweistufig):** +1. Berechne das multiplikative Inverse von b in GF(2⁸): `b⁻¹` +2. Affine Transformation: `s = A · b⁻¹ + c` (Matrixmultiplikation über GF(2) + Konstantenvektor) + +**Beispiel:** Um zwei Bytes zu multiplizieren, werden sie als Polynome behandelt (Bit 0 = Koeffizient von x⁰, Bit 7 = Koeffizient von x⁷), multipliziert und modulo m(x) reduziert. + +--- + +## 8. Betriebsmodi (Modes of Operation) + +Betriebsmodi bestimmen, wie eine Blockchiffre auf lange Nachrichten angewendet wird. + +### 8.1 ECB (Electronic Codebook Mode) + +**Funktionsweise:** Jeder Block wird **unabhängig** mit demselben Schlüssel verschlüsselt. + +``` +C_i = Enc(K, M_i) +``` + +**Problem:** Identische Klartextblöcke → identische Geheimtextblöcke. Muster bleiben sichtbar (bekanntes „ECB-Pinguin-Bild"). **ECB ist NICHT IND-CPA-sicher.** + +### 8.2 CBC (Cipher Block Chaining) + +**Funktionsweise:** Jeder Klartextblock wird **vor** der Verschlüsselung mit dem vorherigen Geheimtextblock XOR-verknüpft. Der erste Block wird mit einem **Initialization Vector (IV)** verknüpft. + +``` +C_0 = IV +C_i = Enc(K, M_i ⊕ C_{i-1}) +Entschlüsselung: M_i = Dec(K, C_i) ⊕ C_{i-1} +``` + +**Vorteil:** Gleiche Klartextblöcke ergeben unterschiedliche Geheimtextblöcke (bei verschiedenem IV). +**Nachteil:** Sequenziell (nicht parallelisierbar). Anfällig für **Padding Oracle Attack**. + +### 8.3 CTR (Counter Mode) + +**Funktionsweise:** Wandelt eine Blockchiffre in eine Stromchiffre um. Nonce + fortlaufender Zähler werden verschlüsselt und per XOR mit dem Klartext verknüpft. + +``` +C_i = M_i ⊕ Enc(K, Nonce || Counter_i) +``` + +**Vorteile:** Parallelisierbar, kein Padding nötig, wahlfreier Zugriff möglich. + +### 8.4 OFB (Output Feedback) + +``` +O_0 = IV, O_i = Enc(K, O_{i-1}) +C_i = M_i ⊕ O_i +``` +Der Schlüsselstrom ist **unabhängig vom Klartext**. + +### 8.5 CFB (Cipher Feedback) + +``` +C_i = M_i ⊕ Enc(K, C_{i-1}) +``` +Ähnlich wie OFB, aber der **Geheimtext** (statt des Verschlüsselungsoutputs) wird als nächster Eingabeblock verwendet. + +### 8.6 Cipher Text Stealing (CTS) + +**Problem:** Blockchiffren benötigen Padding, wenn die Nachricht kein Vielfaches der Blockgröße ist. + +**CTS-Lösung:** Kein Padding nötig. Die letzten beiden Blöcke werden geschickt kombiniert: +- Der vorletzte (vollständige) und der letzte (unvollständige) Block werden vertauscht und kombiniert. +- Die Gesamtlänge des Geheimtexts entspricht exakt der Klartextlänge. + +### 8.7 Padding Oracle Attack + +**Kontext:** CBC-Modus mit PKCS#7-Padding. + +**PKCS#7-Padding:** Fehlen zum letzten Block n Bytes, werden n Bytes mit dem Wert n angehängt (z.B. 3 fehlende Bytes → `03 03 03`). + +**Angriff:** Ein Angreifer kann den Klartext rekonstruieren, **ohne den Schlüssel zu kennen**, wenn: +1. Er beliebige Geheimtexte zur Entschlüsselung einreichen kann +2. Das System **unterschiedliche Fehlermeldungen** für Padding-Fehler vs. andere Fehler zurückgibt (das „Oracle") + +**Ablauf (vereinfacht für einen Block):** +- Der Angreifer modifiziert Bytes des vorherigen Geheimtextblocks und beobachtet, ob das Padding korrekt ist. +- Durch systematisches Ausprobieren kann er Byte für Byte den Klartext ermitteln. + +**Gegenmaßnahmen:** Einheitliche Fehlermeldungen, Encrypt-then-MAC (AEAD), TLS 1.3 (verwendet kein CBC mehr). + +--- + +## 9. Angriffsmodelle & IND-CPA + +### 9.1 Angriffstypen (aufsteigend nach Stärke) + +| Angriffstyp | Fähigkeit des Angreifers | +|---|---| +| **Ciphertext-only** | Kennt nur den Geheimtext | +| **Known Plaintext (KPA)** | Kennt Paare von Klartext und Geheimtext | +| **Chosen Plaintext (CPA)** | Kann beliebige Klartexte verschlüsseln lassen | +| **Adaptive Chosen Plaintext** | Wie CPA, aber Anfragen können adaptiv gestellt werden | +| **Chosen Ciphertext (CCA)** | Kann beliebige Geheimtexte entschlüsseln lassen | +| **Adaptive Chosen Ciphertext (CCA2)** | Wie CCA, adaptiv (stärkstes Modell) | + +### 9.2 IND-CPA-Sicherheit + +**Definition:** Ein Verschlüsselungsschema ist **IND-CPA-sicher** (Indistinguishability under Chosen Plaintext Attack), wenn kein effizienter Angreifer mit nicht-vernachlässigbarem Vorteil entscheiden kann, welche von zwei Nachrichten verschlüsselt wurde. + +**Das „Find-then-Guess"-Spiel:** +1. Challenger erzeugt Schlüssel k und Bit b ∈ {0,1} +2. Angreifer A darf beliebig viele Klartexte verschlüsseln lassen (Orakelzugriff) +3. A wählt zwei Nachrichten M₀, M₁ gleicher Länge +4. Challenger verschlüsselt M_b und gibt Geheimtext c zurück +5. A muss b erraten + +**Sicher, wenn:** `Adv(A) = |Pr[b = b'] - 1/2| ≤ negl(n)` (vernachlässigbar) + +**Warum ECB nicht IND-CPA-sicher ist:** A wählt M₀ = „AA...A" und M₁ = „AA...AB". Im ECB-Modus sind gleiche Blöcke im Klartext auch gleiche Blöcke im Geheimtext → A kann erkennen, welche Nachricht verschlüsselt wurde. + +**Warum Determinismus IND-CPA bricht:** Bei deterministischer Verschlüsselung kann A M₀ selbst verschlüsseln und mit c vergleichen → sofort erkennbar, ob b=0. + +--- + +## 10. MAC, HMAC & AEAD + +### 10.1 Message Authentication Code (MAC) + +**Definition:** Ein MAC (Message Authentication Code) ist ein kurzer **Tag** t, der mit einem symmetrischen Schlüssel k aus einer Nachricht m berechnet wird: +``` +t = MAC(k, m) +``` + +**Bietet:** Integrität und Authentizität – aber **keine Vertraulichkeit**. + +### 10.2 Angriffsvektoren auf MACs + +| Stärke | Angriff | Beschreibung | +|---|---|---| +| Stärkster | **Total Break** | Angreifer rekonstruiert den Schlüssel oder kann beliebige MACs erzeugen | +| Mittel | **Selective Forgery** | MAC für eine Nachricht, die **vor** dem Angriff gewählt wurde | +| Schwächster | **Existential Forgery** | MAC für **irgendeine** Nachricht erzeugbar (auch sinnlos) | + +### 10.3 Warum naive MAC-Konstruktionen unsicher sind + +1. **Kein Schlüssel:** Angreifer kann eigene Blöcke einfügen +2. **Jeder Block unabhängig MACen** `t_i = MAC(k, m_i)`: Reihenfolge der Blöcke vertauschbar +3. **Mit Blocknummer** `t_i = MAC(k, i || m_i)`: Blöcke aus verschiedenen Nachrichten mischbar +4. **Mit Nachrichten-ID** `t_i = MAC(k, id || i || m_i)`: Letzter Block weglassbar (Truncation) +5. **Länge im letzten Block kodiert:** Dann erst sicher (CBC-MAC-Variante) + +### 10.4 Eigenschaften kryptographischer Hashfunktionen + +1. **Effizienz:** Schnell berechenbar +2. **Einwegfunktion:** Schwer zu invertieren +3. **Kollisionsresistenz:** Schwer, zwei verschiedene Eingaben mit gleichem Hash zu finden +4. **Lawineneffekt:** Kleine Eingabeänderung → große Ausgabeänderung + +### 10.5 HMAC (Hash-MAC) + +**Definition:** HMAC kombiniert eine Hashfunktion mit einem Schlüssel in einer doppelt-genesteten Konstruktion. + +``` +HMAC(k, m) = H( (k ⊕ opad) || H( (k ⊕ ipad) || m ) ) +``` + +- `H` = kryptographische Hashfunktion (z.B. SHA-256) +- `opad` = Outer Padding (0x5c 5c 5c ...) +- `ipad` = Inner Padding (0x36 36 36 ...) + +**Sicherheit:** Durch die Verschachtelung ist HMAC widerstandsfähig gegen Length-Extension-Angriffe. + +### 10.6 Kombination Verschlüsselung + MAC + +| Variante | Schema | Empfehlung | +|---|---|---| +| **Encrypt-then-MAC** | c = Enc(k₁, m); t = MAC(k₂, c) | ✅ Empfohlen (TLS 1.3) | +| **MAC-then-Encrypt** | t = MAC(k₂, m); c = Enc(k₁, m\|t) | ⚠️ Problematisch (Padding Oracle in altem TLS) | +| **Encrypt-and-MAC** | c = Enc(k₁, m); t = MAC(k₂, m) | ⚠️ MAC kann Klartextinfo leaken | + +**Warum Encrypt-then-MAC sicher ist:** Der MAC schützt den Geheimtext – manipulierte Ciphertexte werden **vor** der Entschlüsselung erkannt. + +### 10.7 AEAD (Authenticated Encryption with Associated Data) + +**Definition:** AEAD kombiniert Verschlüsselung und Authentifizierung in **einem einzigen Algorithmus**. + +``` +(c, t) = AEAD_Enc(k, nonce, m, aad) +m = AEAD_Dec(k, nonce, c, t, aad) (gibt ⊥ bei Authentifizierungsfehler) +``` + +- `m` = Plaintext (wird verschlüsselt **und** authentifiziert) +- `aad` = Associated Authenticated Data (z.B. IP-/MAC-Adressen, Header – wird **nur authentifiziert**, nicht verschlüsselt) + +**Beispiele:** +- **ChaCha20-Poly1305:** ChaCha20 (Stromchiffre) + Poly1305 (MAC) – Standard in TLS 1.3, WireGuard +- **AES-GCM:** AES im CTR-Mode + GHASH (MAC über GF(2¹²⁸)) – Standard für AES in TLS 1.3 + +**AEAD ist in TLS 1.3 der einzige Standard für Datenintegrität.** + +--- + +## 11. Public-Key-Kryptographie + +### 11.1 Das Schlüsselaustauschproblem + +Bei symmetrischer Kryptographie brauchen beide Parteien denselben geheimen Schlüssel. Das Problem: Wie überträgt man diesen sicher über einen unsicheren Kanal? + +**Merkle Puzzle (1974):** Alice erzeugt n verschlüsselte Rätsel; Bob löst zufällig eines (O(n) Aufwand). Angreifer muss alle n/2 lösen (O(n)). Praktisch ineffizient. + +### 11.2 Diffie-Hellman-Schlüsselaustausch + +**Definition:** Ermöglicht zwei Parteien, über einen **öffentlichen Kanal** ein gemeinsames Geheimnis zu vereinbaren, ohne dieses direkt zu übertragen. + +**Protokoll:** +``` +Öffentlich: Primzahl p, Generator g (Basis) + +Alice wählt a (geheim) → sendet A = g^a mod p +Bob wählt b (geheim) → sendet B = g^b mod p + +Gemeinsames Geheimnis: K = g^(ab) mod p + Alice berechnet: K = B^a mod p = (g^b)^a mod p = g^(ab) mod p + Bob berechnet: K = A^b mod p = (g^a)^b mod p = g^(ab) mod p +``` + +**Sicherheit:** Basiert auf dem **Diskreten-Logarithmus-Problem (DLP)**: Aus g^a mod p ist es schwer, a zu berechnen. + +### 11.3 Diskretes-Logarithmus-Problem (DLP) + +**Definition:** Gegeben Gruppe G, Generator g, Element y = g^x: Bestimme x = log_g(y). + +- **Berechnung von g^x:** effizient – O(log x) Multiplikationen (schnelle Exponentiation) +- **Umkehrung (diskreter Logarithmus):** für große Gruppen **schwer** (kein effizienter klassischer Algorithmus bekannt) + +### 11.4 ModP-Gruppe (Einheitengruppe) + +**Definition:** Die Menge `ℤ_p* = {1, 2, ..., p-1}` mit Multiplikation modulo p (p prim) bildet eine **zyklische Gruppe** der Ordnung p-1. + +- Es gibt einen **Generator g**, sodass `{g⁰, g¹, ..., g^(p-2)} = ℤ_p*` +- **Fermat'scher kleiner Satz:** `a^(p-1) ≡ 1 (mod p)` für alle a mit ggT(a,p) = 1 +- Für Diffie-Hellman braucht man p mit mindestens **2048 Bit** (heutige Empfehlung) + +### 11.5 Elliptische Kurven (EC) + +Elliptische Kurven bieten dieselbe Sicherheit wie ModP-Gruppen, aber mit **viel kleineren Schlüsseln** (256 Bit ECDH ≈ 3072 Bit DH in klassischer Sicherheit). + +**Kurvendefinition (Weierstraß-Form):** +``` +y² = x³ + ax + b mit 4a³ + 27b² ≠ 0 (keine Singularitäten) +``` + +**Gruppengesetz:** Punkte auf der Kurve bilden eine abelsche Gruppe: +- **Neutrales Element:** Punkt im Unendlichen O +- **Addition P + Q:** Schneide Gerade durch P, Q mit der Kurve; reflektiere dritten Schnittpunkt +- **Verdoppelung 2P:** Tangente an P; reflektiere zweiten Schnittpunkt + +**ECDLP:** Gegeben P und Q = k·P, finde k. Gilt als schwerer als DLP in ModP → kleinere Schlüssel. + +**ECDH:** Wie DH, aber mit Punktmultiplikation statt Exponentiation. + +--- + +## 12. RSA-Kryptosystem + +### 12.1 Schlüsselgenerierung + +``` +1. Wähle zwei große Primzahlen p, q (je 1024–2048 Bit) +2. n = p · q (öffentlicher Modulus) +3. φ(n) = (p-1) · (q-1) (Eulersche Phi-Funktion, geheim!) +4. Wähle e mit ggT(e, φ(n)) = 1 (öffentlicher Exponent, oft e = 65537) +5. Berechne d = e⁻¹ mod φ(n) (privater Exponent) + +Öffentlicher Schlüssel: (n, e) +Privater Schlüssel: (n, d) +``` + +### 12.2 Ver- und Entschlüsselung + +``` +Verschlüsselung: c = m^e mod n +Entschlüsselung: m = c^d mod n +``` + +**Korrektheit:** Folgt aus dem **Satz von Euler**: `m^φ(n) ≡ 1 (mod n)`, daher `m^(e·d) = m^(1 mod φ(n)) ≡ m (mod n)`. + +### 12.3 Beispielrechnung + +**Gegeben:** p = 11, q = 13 + +``` +n = 11 · 13 = 143 +φ(n) = 10 · 12 = 120 +Wähle e = 7 (ggT(7, 120) = 1 ✓) +d = 7⁻¹ mod 120 = 103 (denn 7 · 103 = 721 = 6·120 + 1 ✓) + +Öffentlicher Schlüssel: (143, 7) +Privater Schlüssel: (143, 103) + +Verschlüsseln von m = 5: +c = 5^7 mod 143 = 78125 mod 143 = 47 + +Entschlüsseln von c = 47: +m = 47^103 mod 143 = 5 ✓ +``` + +### 12.4 Faktorisierungsproblem + +**Definition:** Gegeben n = p · q (p, q prim), finde p und q. + +- **Multiplikation** p · q → n: effizient, O(log²n) +- **Faktorisierung** n → p, q: schwer (bester klassischer Algorithmus: **Zahlkörpersieb**, subexponentiell, aber nicht polynomial) + +**Wichtig:** Die Sicherheit von RSA basiert auf der Annahme, dass Faktorisierung schwer ist. Es ist jedoch **nicht bewiesen**, dass RSA-Brechen äquivalent zur Faktorisierung ist. + +--- + +## 13. ElGamal-Verschlüsselung + +**Definition:** Auf Diffie-Hellman basierendes Public-Key-Verfahren (Taher Elgamal, 1985). Der Sender macht einen einmaligen DH-Austausch mit dem öffentlichen Schlüssel des Empfängers. + +### Schlüsselgenerierung + +``` +Öffentliche Parameter: zyklische Gruppe G der Ordnung n, Generator α +Privater Schlüssel: a (zufällig, 1 ≤ a ≤ n-1) +Öffentlicher Schlüssel: (α, α^a) +``` + +### Verschlüsselung (probabilistisch) + +``` +Wähle zufälliges k (1 ≤ k ≤ n-1) ← jedes Mal neu! +γ = α^k ← "einmaliger DH-Anteil" des Senders +δ = m · (α^a)^k ← Nachricht maskiert mit DH-Geheimnis +Ciphertext: (γ, δ) +``` + +### Entschlüsselung + +``` +Berechne γ^a = (α^k)^a = α^(ka) ← gemeinsames DH-Geheimnis +m = δ · (γ^a)^(-1) = δ · γ^(-a) +``` + +**Korrektheit:** `δ · γ^(-a) = m · α^(ak) · α^(-ak) = m ✓` + +**Sicherheit:** Basiert auf der **DDH-Annahme** (Decisional Diffie-Hellman). ElGamal ist IND-CPA-sicher, aber **NICHT IND-CCA-sicher** (Malleability: Aus (γ, δ) kann man (γ, δ·m') erzeugen, das m·m' verschlüsselt). + +**Nachteil:** Ciphertext (γ, δ) ist **doppelt so lang** wie die Nachricht. + +--- + +## 14. IND-CCA, IND-CCA2 & Padding + +### 14.1 IND-CCA-Sicherheit + +**Definition:** **Indistinguishability under Chosen Ciphertext Attack** – das stärkste gängige Sicherheitsmodell für Public-Key-Verschlüsselung. + +Erweiterung des IND-CPA-Spiels: Der Angreifer erhält zusätzlich ein **Entschlüsselungsorakel**. + +``` +Phase 1: Angreifer sendet beliebige Ciphertexte und bekommt Klartexte zurück +Challenge: Challenger verschlüsselt M_b → Angreifer bekommt c +Phase 2: Angreifer darf weiter entschlüsseln – ABER nicht c selbst! +``` + +**IND-CCA** (nicht-adaptiv): Entschlüsselungsanfragen nur in Phase 1. +**IND-CCA2** (adaptiv): Entschlüsselungsanfragen in Phase 1 **und** Phase 2 (außer c selbst). + +**Textbook RSA ist NICHT IND-CPA-sicher** (deterministisch!). Mit Padding-Schemata wird IND-CCA2 erreicht. + +### 14.2 OAEP (Optimal Asymmetric Encryption Padding) + +**Definition:** OAEP macht RSA probabilistisch und erreicht IND-CCA2-Sicherheit im Random-Oracle-Modell. + +``` +Eingabe: Nachricht m, zufälliger Seed r + +X = (m || 0...0) ⊕ G(r) (G = Pseudozufallsfunktion / Mask Generation Function) +Y = r ⊕ H(X) (H = Hashfunktion) + +RSA-Input: (X || Y) +Verschlüsselung: c = (X||Y)^e mod n +``` + +In der Praxis: **RSA-OAEP** aus PKCS#1 v2.x. + +### 14.3 RSA-PSS (Probabilistic Signature Scheme) + +**Warum RSA-PSS nötig ist:** Rohes RSA ohne Padding ist anfällig für **Existential Forgery**: Ein Angreifer wählt eine beliebige Signatur s und berechnet „die Nachricht" x = s^e mod n. Das Paar (x, s) ist eine gültige Signatur! + +**RSA-PSS verhindert das durch Padding vor der Signatur:** +1. `mHash = H(M)` +2. `M' = [8×0x00 | mHash | salt]` → nochmals gehasht → `H` +3. `DB = [PS | 0x01 | salt]` +4. `maskedDB = DB ⊕ MGF(H)` (Mask Generation Function) +5. `EM = [maskedDB | H | 0xbc]` +6. Signatur: `s = EM^d mod n` + +--- + +## 15. Digitale Signaturen + +### 15.1 Grundprinzip + +**Definition:** Eine digitale Signatur ermöglicht **Integrität**, **Authentizität** und **Non-Repudiation** (Nicht-Abstreitbarkeit). + +**Ablauf:** +- **Signieren:** `σ = sign(m, sk)` – mit privatem Schlüssel signieren +- **Verifizieren:** `verify(σ, m, pk) → {true, false}` – mit öffentlichem Schlüssel prüfen + +**Formale Algorithmen:** +``` +keygen(1^k) → (sk, pk) Schlüsselpaar erzeugen +sign(m, sk) → σ Signatur erzeugen +verify(σ, m, pk) → d Signatur verifizieren +``` + +**Wichtig:** Private Key ≠ Public Key! Der Sender signiert mit dem **privaten Schlüssel**, der Empfänger verifiziert mit dem **öffentlichen Schlüssel**. (Umgekehrt zur Verschlüsselung!) + +### 15.2 Angriffsvektoren auf Signaturen + +| Angriff | Beschreibung | +|---|---| +| **Total Break** | Angreifer leitet den privaten Schlüssel ab → kann beliebige Signaturen erzeugen | +| **Selective Forgery** | Gültige Signatur für eine Nachricht, die **vor** dem Angriff gewählt wurde | +| **Existential Forgery** | Gültige Signatur für **irgendeine** Nachricht (auch sinnlose) | + +### 15.3 RSA-Signatur + +``` +Signatur: s = m^d mod n (mit privatem Schlüssel d) +Verifikation: m' = s^e mod n (mit öffentlichem Schlüssel e) +Gültig wenn: m' = m +``` + +**Existential Forgery gegen Textbook RSA:** +Oscar wählt s → berechnet x = s^e mod n → präsentiert (x, s) als gültige Signatur. Alice verifiziert: s^e ≡ x ✓. **Deshalb ist RSA-PSS notwendig.** + +### 15.4 ECDSA (Elliptic Curve Digital Signature Algorithm) + +**Signieren** (Nachricht m, privater Schlüssel d_A, Basispunkt G, Gruppenordnung n): +``` +1. e = H(m) (Hash der Nachricht) +2. z = linkste L_n Bits von e +3. Wähle zufälliges k ∈ [1, n-1] +4. (x₁, y₁) = k × G (Skalarmultiplikation auf EC) +5. r = x₁ mod n +6. s = k⁻¹ · (z + r · d_A) mod n +Signatur: (r, s) +``` + +**Verifizieren** (mit öffentlichem Schlüssel Q_A = d_A · G): +``` +1. e = H(m), z = linkste L_n Bits +2. u₁ = z · s⁻¹ mod n +3. u₂ = r · s⁻¹ mod n +4. (x₁, y₁) = u₁ × G + u₂ × Q_A +5. Gültig wenn r ≡ x₁ (mod n) +``` + +### 15.5 Fiat-Shamir Transformation + +**Definition:** Die Fiat-Shamir-Transformation (Fiat & Shamir, 1986) wandelt ein **interaktives Zero-Knowledge-Protokoll** in einen **nicht-interaktiven Beweis** (oder eine digitale Signatur) um. + +**Grundidee:** Die zufällige Challenge des Verifiers wird durch den Output einer **kryptographischen Hashfunktion** ersetzt: +``` +Challenge = H(Commitment, public_data) [bei ZK-Proof] +Challenge = H(Commitment, Nachricht) [bei Signatur] +``` + +**Interaktives Protokoll → Nicht-interaktiv:** + +*Original (interaktiv, 3 Schritte):* +1. Prover sendet Commitment C +2. Verifier sendet zufällige Challenge ch +3. Prover sendet Response r + +*Fiat-Shamir (nicht-interaktiv):* +1. Prover berechnet Commitment C +2. Prover berechnet: `ch = H(C, öffentliche_Parameter)` +3. Prover berechnet Response r +4. Beweis: `(C, ch, r)` – kein Verifier nötig! + +**Signaturschema aus ZK-Proof:** +- Die Nachricht wird in den Hash eingebaut: `ch = H(C, m)` +- Die Signatur ist das Tripel `(C, r)` (ch kann rekonstruiert werden) +- Sicherheit hängt von der Random-Oracle-Annahme ab (H verhält sich wie eine ideale Zufallsfunktion) + +**Beispiel – Schnorr-Signatur (aus DLP-ZK-Proof):** +``` +Schlüsselpaar: sk = x, pk = g^x mod p +Signieren von m: + r = g^k mod p (zufälliges k) + e = H(r, m) + s = k - x·e mod (p-1) +Signatur: (s, e) + +Verifizieren: + r' = g^s · (g^x)^e mod p + Gültig wenn H(r', m) = e +``` + +--- + +## 16. Zertifikate & PKI + +### 16.1 Das Kernproblem + +> Wie kann Bob sicher sein, dass ein Public Key wirklich zu Alice gehört und nicht zu einem Angreifer? + +**Man-in-the-Middle-Angriff:** Oscar gibt sich sowohl gegenüber Alice als auch Bob als der jeweils andere aus und führt zwei separate DH-Austausche durch. Ohne Authentifizierung ist dies undetektierbar. + +### 16.2 Certificate Authority (CA) und Zertifikate + +**Lösung:** Eine **vertrauenswürdige Zertifizierungsstelle (CA)** bestätigt die Identität und signiert den Public Key. + +**Inhalt eines X.509-Zertifikats:** +- Name, Organisation, Land +- Gültigkeitszeitraum (von/bis) +- Public Key des Inhabers +- Algorithmus und Parameter +- **Digitale Signatur der CA** + +**Funktionsweise:** +1. Alice generiert Schlüsselpaar (sk, pk) +2. Alice gibt pk an die CA, beweist ihre Identität +3. CA erzeugt Zertifikat: `Cert = Sign(sk_CA, ID_Alice || pk_Alice || Gültigkeit)` +4. Jeder, der CA's Public Key kennt und ihr vertraut, kann das Zertifikat verifizieren + +### 16.3 Zertifikatskette (Chain of Trust) + +``` +Endnutzer-Zertifikat (z.B. google.com) + ↑ signiert von +Intermediate CA (z.B. Google Trust Services) + ↑ signiert von +Root CA (z.B. GlobalSign, DigiCert) + ↑ selbst-signiert (Vertrauensanker, im Browser vorinstalliert) +``` + +**Root CAs** sind die letzte Vertrauensbasis. Ihre öffentlichen Schlüssel sind in Betriebssystemen und Browsern vorinstalliert. + +### 16.4 Zertifikatswiderruf + +**CRL (Certificate Revocation List):** +- Liste aller zurückgezogenen Zertifikate, periodisch von der CA veröffentlicht +- Nachteil: Kein Echtzeit-Update, kann veraltet sein + +**OCSP (Online Certificate Status Protocol):** +- Echtzeitabfrage des Zertifikatstatus bei einem **OCSP-Responder** (Server der CA) +- Vorteil: Aktuell; Nachteil: Datenschutz (CA erfährt, welche Sites besucht werden) +- **OCSP Stapling:** Server fragt selbst den Status ab und hängt die Antwort an den TLS-Handshake + +--- + +## 17. TLS (Transport Layer Security) + +### 17.1 Einordnung im OSI-Modell + +TLS liegt zwischen **Anwendungsschicht** und **Transportschicht** (OSI Layer 4/5): +``` +Anwendung (Layer 7) → TLS → TCP (Layer 4) → IP (Layer 3) → ... +``` +TLS läuft **über TCP**, nicht im Kernel/Netzwerkstack. + +### 17.2 TLS-Ziele (RFC 8446, TLS 1.3) + +- **Authentifizierung:** Server wird immer authentifiziert, Client optional +- **Vertraulichkeit:** Daten nur für Endpunkte sichtbar +- **Integrität:** Manipulationen werden erkannt + +### 17.3 TLS-Komponenten + +| Komponente | Aufgabe | +|---|---| +| **Record Layer** | Fragmentierung, Authentifizierung, Verschlüsselung der Nutzdaten | +| **Handshake Protocol** | Aushandeln von Algorithmen, Zertifikatsaustausch, Key Exchange | +| **Alert Protocol** | Fehlermeldungen und Verbindungsabschluss | +| **Change Cipher Spec** | (nur Kompatibilität in TLS 1.3) | + +### 17.4 TLS 1.3 Handshake (vereinfacht) + +``` +Client Server + ClientHello (supported ciphers, + key_share, random) → + ← ServerHello (chosen cipher, key_share) + ← {EncryptedExtensions} + ← {Certificate} + ← {CertificateVerify} + ← {Finished} + {Finished} → + [Application Data] ↔ [Application Data] +``` + +Key Exchange erfolgt mit **(EC)DHE** – Forward Secrecy ist damit garantiert. + +### 17.5 TLS 1.3 Sicherheitsmerkmale + +- Nur **AEAD-Cipher** erlaubt: AES-GCM, AES-CCM, ChaCha20-Poly1305 +- Kein CBC, kein RC4, kein 3DES +- **Perfect Forward Secrecy (PFS)** durch ephemere DH-Schlüssel +- Reduzierte RTT (Round-Trip-Time) durch 0-RTT oder 1-RTT + +### 17.6 TLS-Versionshistorie + +| Version | Jahr | Status | +|---|---|---| +| SSL 2.0 | 1995 | Veraltet (2011) | +| SSL 3.0 | 1996 | Veraltet (2015) | +| TLS 1.0 | 1999 | Veraltet (2021) | +| TLS 1.1 | 2006 | Veraltet (2021) | +| TLS 1.2 | 2008 | Noch genutzt | +| **TLS 1.3** | **2018** | **Aktuell** | + +--- + +## 18. IPSec + +**Einordnung im OSI-Modell:** IPSec arbeitet auf **Layer 3 (Netzwerkschicht)** – direkt im IP-Stack. + +**Vergleich mit TLS:** TLS schützt Anwendungsdaten (Layer 7), IPSec schützt IP-Pakete (Layer 3). + +### Betriebsmodi + +| Modus | Beschreibung | +|---|---| +| **Transportmodus** | Nur der Payload des IP-Pakets wird geschützt; IP-Header bleibt sichtbar | +| **Tunnelmodus** | Das gesamte ursprüngliche IP-Paket wird verschlüsselt und in ein neues IP-Paket eingebettet (Gateway-zu-Gateway, VPN) | + +### Protokolle + +| Protokoll | Bietet | Schützt | +|---|---|---| +| **AH (Authentication Header)** | Integrität + Authentizität | Header + Daten (kein Payload-Encrypt) | +| **ESP (Encapsulating Security Payload)** | Verschlüsselung + Authentifizierung | Nur Payload-Daten | + +--- + +## 19. Quantencomputer & Kryptographie + +### 19.1 Quantenmechanische Grundlagen + +| Phänomen | Bedeutung für Krypto | +|---|---| +| **Superposition** | Qubit = gleichzeitig 0 und 1 → parallele Berechnungen | +| **Verschränkung (Entanglement)** | Qubits sind korreliert, unabhängig von Distanz | +| **Nondeterminismus** | Messung ergibt zufälliges Ergebnis → Echte Zufallszahlengeneratoren (QRNG) | +| **No-Cloning-Theorem** | Quantenzustände können nicht kopiert werden → Sicherheit von QKD | + +### 19.2 BB84-Protokoll (Quantum Key Distribution) + +**Erfinder:** Charles Bennett & Gilles Brassard (1984) + +**Ablauf:** +1. **Alice** wählt zufällige Bits und kodiert sie in Photonen mit zufällig gewählten Basen (+, ×) +2. **Bob** misst die Photonen mit zufällig gewählten Basen +3. **Öffentlicher Abgleich:** Alice und Bob vergleichen ihre Basen (nicht die Bits!) +4. Bits mit **übereinstimmenden Basen** ergeben den **Sifted Key** (ca. 50% der Bits) +5. Stichproben prüfen Abhören: Eve-Messung stört den Quantenzustand + +**Sicherheit:** Jede Messung durch Eve verändert den Quantenzustand (Messprinzip). Bei ~25% der Bits führt Eves Abhören zu einem Fehler → Eve ist **nachweisbar**. + +**No-Cloning-Theorem:** Quantenzustände können nicht kopiert werden → klassische Repeater funktionieren nicht. + +### 19.3 Shors Algorithmus + +**Peter Shor (1994):** Löst **ganzzahlige Faktorisierung** und das **Diskrete-Logarithmus-Problem** in **polynomialer Zeit** auf einem Quantencomputer. + +**Konsequenz für klassische Kryptographie:** + +| Algorithmus | Klassische Sicherheit | Sicherheit mit Quantencomputer | +|---|---|---| +| RSA-3072 | 128 Bit | **gebrochen (0 Bit)** | +| DH-3072 | 128 Bit | **gebrochen (0 Bit)** | +| ECDH-256 | 128 Bit | **gebrochen (0 Bit)** | +| ECDSA-256 | 128 Bit | **gebrochen (0 Bit)** | + +**Alle auf DLP oder Faktorisierung basierenden Verfahren werden durch Shor wertlos.** + +### 19.4 Grovers Algorithmus + +**Lov Grover:** Findet ein Element in einer Datenbank der Größe N in **O(√N)** Schritten (statt O(N) klassisch). + +**Konsequenz für symmetrische Kryptographie:** Effektive Schlüssellänge wird **halbiert**. + +| Algorithmus | Klassische Sicherheit | Mit Grover | +|---|---|---| +| AES-128 | 128 Bit | **64 Bit** (unsicher!) | +| AES-256 | 256 Bit | 128 Bit ✓ (noch sicher) | +| SHA-256 | 256 Bit* | 128 Bit* ✓ | + +**Gegenmaßnahme:** Schlüssellängen **verdoppeln** (AES-256 statt AES-128). + +### 19.5 Simons Algorithmus + +**Simons Problem:** Gegeben eine Funktion f mit einer verborgenen Periode s, finde s. +- Klassisch: **Ω(2^(n/2))** Anfragen nötig +- Quantenalgorithmus: **O(n)** Anfragen (exponentiell schneller) + +**Konsequenz:** Viele klassische kryptographische Konstruktionen werden durch Simons Algorithmus gebrochen (selbst wenn Grover/Shor nicht anwendbar sind): + +Durch quantenbasierte Angriffe sind gebrochen: Even-Mansour, 3-Runden-Feistel, LRW, CBC-MAC, GMAC, PMAC, GCM, OCB und viele weitere symmetrische Konstruktionen. + +--- + +## 20. Post-Quantum Kryptographie (PQC) + +### 20.1 Warum PQC? – Moscas Theorem + +Drei Zeitparameter: +- **x** = Wie lange müssen heutige Daten sicher bleiben? +- **y** = Wie lange dauert die Migration auf quantensichere Lösungen? +- **z** = Wann gibt es kryptographisch relevante Quantencomputer? + +> **Moscas Theorem:** Falls **x + y > z**, muss **jetzt** gehandelt werden. + +**„Harvest now, decrypt later":** Angreifer sammeln heute verschlüsselte Daten und entschlüsseln sie, sobald Quantencomputer verfügbar sind. + +### 20.2 PQC-Strategien + +| Ansatz | Basis | Vorteil | Nachteil | +|---|---|---|---| +| **Hash-based** | Nur kryptographische Hashfunktionen | Sehr gut verstanden, konservative Sicherheit | Signaturen sind groß, Schlüsselpaare oft einmalig | +| **Lattice-based (Gitter)** | Schwere Gitterprobleme (LWE, SIS) | Beste Performanz, stärkstes theoretisches Fundament | Komplex | +| **Code-based** | Schweres Dekodierungsproblem | Bewährt seit 1978 (McEliece) | Große Schlüssel | +| **Multivariate** | Unlösbarkeit quadratischer Gleichungssysteme (MQ-Problem) | Sehr schnelle Signaturen | Große Schlüssel, mehrere gebrochen | +| **Isogenien** | Schwierigkeit von Isogenieberechnungen | Kleine Schlüssel | SIKE 2022 gebrochen! | +| **MPC in the Head** | Sicherheit von ZK-Proofs | Minimale Annahmen | Größere Signaturen | + +### 20.3 Hash-basierte Signaturen + +**Grundprinzip:** Öffentlicher Schlüssel = Hash-Werte h(x)||h(y); Privater Schlüssel = (x, y). + +**Lamport-OTS (One-Time Signature):** Einmalsignatur nur auf Basis von OWFs. Schlüssel darf nur **einmal** verwendet werden. + +**Merkle-Baum:** Viele OTS-Schlüssel werden in einem binären Hash-Baum organisiert. Die Wurzel ist der öffentliche Schlüssel. Ein **Authentifizierungspfad** ermöglicht die Verifikation einzelner Blätter. + +**XMSS/SPHINCS+:** Hierarchische Baumstrukturen für mehrfache Signaturen. **SPHINCS+** ist NIST-standardisiert. + +### 20.4 Gitter-basierte Kryptographie (Lattice-based) + +**Grundidee:** Gitter sind regelmäßige Punktgitter im n-dimensionalen Raum, aufgespannt durch Basisvektoren. + +**Schwere Gitterprobleme:** +- **SVP (Shortest Vector Problem):** Finde den kürzesten Nicht-Null-Vektor im Gitter +- **CVP (Closest Vector Problem):** Finde den nächsten Gitterpunkt zu einem gegebenen Punkt +- **GapSVP_γ:** Entscheidungsversion von SVP mit Approximationsfaktor γ + +**LWE (Learning With Errors):** Gegeben verrauschte Skalarprodukte `bᵢ ≈ ⟨aᵢ, s⟩ mod q`, finde s. Gilt als quantenresistentes schweres Problem. + +**Worst-Case-zu-Average-Case-Reduktion:** Der entscheidende Vorteil: Wenn LWE im Durchschnitt leicht wäre, wäre GapSVP im schlimmsten Fall leicht. Das LWE-Problem ist daher so schwer wie das schlimmste Gitterproblem. + +**Regev's Public-Key-Kryptosystem (LWE-Beispiel):** +``` +Privater Schlüssel: s ∈ ℤ_q^n (zufällig) +Öffentlicher Schlüssel: m Paare (aᵢ, bᵢ) mit bᵢ = ⟨aᵢ, s⟩/q + eᵢ + (eᵢ = kleiner Fehler aus Fehlerverteilung χ) + +Verschlüsselung von Bit x: + Wähle zufällige Teilmenge S ⊆ [m] + Enc(x) = (Σᵢ∈S aᵢ, x/2 + Σᵢ∈S bᵢ) + +Entschlüsselung: + Prüfe ob b - ⟨a, s⟩/q näher an 0 (→ x=0) oder an 1/2 (→ x=1) +``` + +### 20.5 Isogenien-basierte Kryptographie + +**Isogenie:** Ein Gruppenhomomorphismus `φ: E → E'` zwischen elliptischen Kurven, dargestellt durch rationale Funktionen. + +**SIDH-Schlüsselaustausch (analog zu DH):** +- Alice berechnet Isogenie Φ_A(E) und sendet sie an Bob +- Bob berechnet Isogenie Φ_B(E) und sendet sie an Alice +- Gemeinsames Geheimnis: j-Invariante von Φ'_A(Φ_B(E)) = Φ'_B(Φ_A(E)) + +⚠️ **SIKE (konkrete Instanz) wurde im Juli 2022 vollständig gebrochen** – alle Isogenien-basierten Verfahren müssen neu bewertet werden. + +### 20.6 Code-basierte Kryptographie + +**Grundidee:** Sicherheit beruht auf der Schwierigkeit des **Syndrome-Decoding-Problems** (allgemeine Fehlerkorrektur ist NP-hart). + +**McEliece-Kryptosystem (1978):** +- Öffentlicher Schlüssel: `H* = P · H · S` (permutierte und transformierte Prüfmatrix) +- Verschlüsselung: `c = m · H*` + absichtliche Fehler +- Entschlüsselung: Nur Besitzer von P, H, S kann effizient dekodieren + +### 20.7 NIST PQC-Standardisierung + +**Timeline:** +- 2017: Ausschreibung mit **69 Kandidaten** (1. Runde) +- 2022: Auswahl der ersten Standards + +**Ausgewählte Algorithmen:** +| Algorithmus | Typ | Basis | +|---|---|---| +| **CRYSTALS-Kyber** (ML-KEM) | Key Encapsulation Mechanism | Gitter (Module-LWE) | +| **CRYSTALS-Dilithium** (ML-DSA) | Digitale Signatur | Gitter (Module-LWE) | +| **Falcon** | Digitale Signatur | Gitter (NTRU) | +| **SPHINCS+** (SLH-DSA) | Digitale Signatur | Hash-basiert | + +--- + +## 21. Homomorphe Verschlüsselung + +### 21.1 Grundidee + +**Definition:** Homomorphe Verschlüsselung ermöglicht Berechnungen auf **verschlüsselten Daten**, ohne diese zu entschlüsseln. + +``` +Enc(m₁) ⋆ Enc(m₂) = Enc(m₁ ∘ m₂) +``` +(⋆ = Operation auf Chiffretexten; ∘ = entsprechende Operation auf Klartexten) + +**Kerngleichung:** Der Verarbeitende erhält `Enc(f(m))`, ohne m jemals zu sehen. + +**Anwendung:** Cloud Computing – Daten bleiben beim Cloud-Anbieter verschlüsselt, werden aber trotzdem verarbeitet. + +### 21.2 Klassifizierung + +| Typ | Abk. | Fähigkeit | Performance | +|---|---|---|---| +| **Partially Homomorphic Encryption** | PHE | Eine Operation unbeschränkt oft | Hoch | +| **Somewhat Homomorphic Encryption** | SWHE | Zwei Operationen, mindestens eine beschränkt | Mittel | +| **Fully Homomorphic Encryption** | FHE | Beliebige Berechnungen, unbeschränkt | Niedrig | + +### 21.3 RSA als Beispiel für PHE (multiplikativ homomorph) + +``` +E(M₁) · E(M₂) = M₁^e · M₂^e mod n = (M₁·M₂)^e mod n = E(M₁·M₂) +``` +RSA ist **multiplikativ homomorph** – beliebig viele Multiplikationen auf Chiffretexten möglich. + +### 21.4 Paillier-Kryptosystem (additiv homomorph, fast wie RSA) + +**Definition:** Paillier (1999) ist ähnlich wie RSA aufgebaut, aber **additiv homomorph** statt multiplikativ. + +**Schlüsselerzeugung:** +``` +n = p · q (zwei große Primzahlen) +g = n + 1 (öffentlicher Parameter) +λ = φ(n) = (p-1)(q-1) +μ = φ(n)⁻¹ mod n (privater Schlüssel) + +Öffentlicher Schlüssel: (n, g) +Privater Schlüssel: (n, λ, μ) +``` + +**Verschlüsselung:** +``` +c = g^m · r^n mod n² (r zufällig, ggT(r,n) = 1) +``` + +**Entschlüsselung:** +``` +m = L(c^λ mod n²) · μ mod n mit L(x) = (x-1)/n +``` + +**Homomorphe Addition:** +``` +D( E(m₁, r₁) · E(m₂, r₂) mod n² ) = m₁ + m₂ mod n +``` +Das **Produkt zweier Chiffretexte** entspricht der **Summe der Klartexte**. + +**Vergleich Paillier vs. RSA:** +- Beide basieren auf Faktorisierungsproblem +- Paillier: additiv homomorph; RSA: multiplikativ homomorph +- Paillier: probabilistisch; RSA (ohne Padding): deterministisch +- Paillier: Chiffretexte liegen in ℤ_{n²} statt ℤ_n + +--- + +## 22. Multi-Party Computation (MPC) + +### 22.1 Ziel und Motivation + +**Definition:** MPC ermöglicht mehreren Parteien, gemeinsam eine Funktion **f(x₁, x₂, ..., x_n)** zu berechnen, ohne dass irgendeine Partei die Eingaben der anderen erfährt. + +**Yao's Millionärsproblem (1982):** Zwei Millionäre wollen herausfinden, wer reicher ist, ohne ihr Vermögen preiszugeben. + +**Ideales Modell:** Alle Parteien senden ihre Eingaben an eine vertrauenswürdige dritte Partei (Trusted Third Party), die f berechnet und das Ergebnis zurückgibt. **Ziel von MPC:** Das gleiche Ergebnis ohne vertrauenswürdige dritte Partei erreichen. + +### 22.2 Oblivious Transfer (OT) + +**Definition:** Ein Protokoll, bei dem der **Sender nicht weiß, welche** seiner Nachrichten der Empfänger erhalten hat. + +**Drei Varianten:** + +| Variante | Beschreibung | +|---|---| +| **OT (Rabin, 1981)** | Alice hat Bit b. Bob erhält b mit Prob. 1/2. Alice weiß nicht, ob Bob b erhalten hat. | +| **1-out-of-2 OT** | Alice hat b₀, b₁. Bob erhält genau eines (b_k). Alice weiß nicht, welches. | +| **p-OT** | Wie OT, aber Empfang mit beliebiger Wahrscheinlichkeit p. | + +**Wofür ist OT gut?** +- Fundamentaler Baustein für MPC-Protokolle +- Ermöglicht es Parteien, Informationen auszutauschen, ohne vollständigen Einblick zu geben +- Garbled Circuits benötigen OT für Bobs Eingaben + +**DH-basiertes 1-out-of-2 OT-Protokoll:** +``` +Sender hat (M₀, M₁), Empfänger hat Auswahlbit c + +Sender wählt a, sendet A = g^a +Empfänger wählt b: + Falls c=0: sendet B = g^b + Falls c=1: sendet B = A · g^b = g^(a+b) + +Sender berechnet: + k₀ = H(B^a) k₁ = H((B/A)^a) + Sendet: E(k₀, M₀), E(k₁, M₁) + +Empfänger berechnet: + k_R = H(A^b) + Falls c=0: k_R = H(g^(ab)) = k₀ → entschlüsselt M₀ + Falls c=1: k_R = H(g^(ab)) = k₁ → entschlüsselt M₁ +``` + +### 22.3 Garbled Circuits + +**Definition:** Garbled Circuits (Yao, 1986) ermöglichen es, eine beliebige Boolesche Funktion als verschlüsselten Schaltkreis zwischen zwei Parteien sicher auszuwerten. + +**Ablauf:** + +1. **Alice (Garbler) erstellt den verschlüsselten Schaltkreis:** + - Für jeden Draht werden zwei zufällige Labels erzeugt: L^0_i (für Bit 0) und L^1_i (für Bit 1) + - Für jedes Gatter (AND, OR, XOR): Die Wahrheitstabelle wird mit den Input-Labels verschlüsselt + - Die Zeilen der Wahrheitstabelle werden **zufällig permutiert** (kein Bit-Leak) + +2. **Bob (Evaluator) wertet aus:** + - Empfängt den „garbled circuit" + - Kann pro Gatter genau **eine** Zeile entschlüsseln (die passende zu seinen Labels) + - Lernt nur das Endergebnis, nicht die Zwischenwerte + +3. **Eingaben:** + - **Alice** gibt ihre Labels direkt weiter + - **Bob** erhält seine Eingabe-Labels via **Oblivious Transfer** (Alice erfährt nicht, welche Bits Bob hat) + +**Sicherheit:** +- Alice lernt nichts über Bobs Eingabe (durch OT) +- Bob lernt nichts über Alices Eingabe (Labels verraten keine Bits) +- Beide lernen nur f(A, B) + +**Beispiel:** Boole'sche Funktion `f = AND(a, b)` als Garbled Circuit: +- Drähte erhalten Labels: Wire_a: (L^0_a, L^1_a); Wire_b: (L^0_b, L^1_b) +- Ausgabe-Labels: (L^0_out, L^1_out) +- Verschlüsselte Wahrheitstabelle (permutiert): + - `Enc(L^1_a, L^1_b, L^1_out)` (1 AND 1 = 1) + - `Enc(L^0_a, L^1_b, L^0_out)` (0 AND 1 = 0) + - usw. + +### 22.4 Additive Secret Sharing + +**Definition:** Ein Geheimnis x wird so in n Anteile (Shares) aufgeteilt, dass jede echte Teilmenge der Shares **keine Information** über x verrät. + +**Aufteilen (n Parteien):** +``` +Wähle x₁, x₂, ..., x_{n-1} zufällig +Setze x_n = x - (x₁ + ... + x_{n-1}) mod q +Verteile [x] = (x₁, ..., x_n) +``` + +**Rekonstruktion:** `x = x₁ + x₂ + ... + x_n mod q` + +**Sicherheit:** Informationstheoretisch – auch mit unbegrenzter Rechenleistung lässt sich aus n-1 Shares nichts ableiten. + +**Addition trivial möglich:** +``` +[x + y] = ([x] + [y]) = (x₁+y₁, ..., x_n+y_n) ← jede Partei addiert lokal +[x + c] = (x₁+c, x₂, ..., x_n) ← nur der erste Share wird angepasst +``` + +**Multiplikation NICHT trivial:** Das Produkt zweier Shares ergibt kein Share des Produkts. Lösung: **Beaver Triples**. + +### 22.5 Beaver Triples + +**Definition:** Ein Beaver Triple ist ein vorberechnetes Tripel `([a], [b], [c])` mit `c = a · b`, wobei a und b zufällig sind. + +**Multiplikationsprotokoll für [x · y]:** +1. Parteien öffnen (veröffentlichen): `d = x - a` und `e = y - b` + (Da a und b zufällig sind, verraten d und e nichts über x und y) +2. Berechne: + ``` + x · y = d·e + d·[b] + e·[a] + [c] + ``` + - `d·e`: öffentliche Konstante + - `d·[b]` und `e·[a]`: Multiplikation mit öffentlicher Konstante (einfach) + - `[c]`: bereits als Share vorhanden + +**Vorteil:** Die aufwändige Erzeugung der Triples kann in einer **Offline-Phase** vor der eigentlichen Berechnung stattfinden (z.B. mit Homomorpher Verschlüsselung oder OT). + +**SPDZ-Protokoll (2012):** Kombiniert Additive Secret Sharing, Beaver Triples und MACs auf den Shares. Sicher gegen aktive Angreifer, die bis zu n-1 Parteien kontrollieren. + +--- + +## 23. Zero Knowledge Proofs (ZKP) + +### 23.1 Was ist Zero Knowledge? + +**Definition:** Ein Zero-Knowledge-Beweis ermöglicht es einem **Prover**, einem **Verifier** zu beweisen, dass eine Aussage wahr ist, ohne **irgendwelche weiteren Informationen** preiszugeben – insbesondere nicht das Geheimnis, das die Wahrheit belegt. + +**Motivationsbeispiele:** +- „Ich bin älter als 18" beweisen, ohne das Geburtsdatum preiszugeben +- „Ich kenne die Lösung dieses Rätsels" beweisen, ohne die Lösung zu zeigen +- „Ich habe die Signatur der Nachricht" beweisen, ohne den privaten Schlüssel zu zeigen + +### 23.2 Drei Eigenschaften + +| Eigenschaft | Bedeutung | Beschreibung | +|---|---|---| +| **Completeness (Vollständigkeit)** | Wenn die Aussage wahr ist, überzeugt der Prover den Verifier | Ein ehrlicher Prover mit dem Geheimnis wird immer akzeptiert | +| **Soundness (Korrektheit)** | Wenn die Aussage falsch ist, kann kein Prover den Verifier überzeugen | Ein betrügender Prover wird höchstens mit vernachlässigbarer Wahrscheinlichkeit akzeptiert | +| **Zero Knowledge** | Der Verifier lernt nichts außer der Tatsache, dass die Aussage wahr ist | Das Transkript des Protokolls kann vom Verifier selbst simuliert werden | + +### 23.3 Beispiel: Graph-Isomorphismus + +**Problem:** Prover kennt einen Isomorphismus π zwischen zwei Graphen G₀ und G₁ (d.h. G₁ = π(G₀)) und möchte das beweisen, ohne π preiszugeben. + +**Protokoll (eine Runde):** +1. **Prover** wählt zufällige Permutation σ; berechnet H = σ(G_b) für zufälliges b ∈ {0,1}; sendet H +2. **Verifier** sendet Challenge-Bit c ∈ {0,1} +3. **Prover** antwortet: + - Falls c = b: sendet σ (H = σ(G_b)) + - Falls c ≠ b: sendet σ ∘ π (bzw. σ ∘ π⁻¹) +4. **Verifier** prüft: Bildet die Antwort H korrekt auf G_c ab? + +**Zero Knowledge?** Ja – der Prover wählt b zufällig. Der Verifier sieht immer nur eine zufällige Permutation eines der Graphen, was er selbst hätte erzeugen können. + +**Soundness?** Ja – wenn G₀ und G₁ nicht isomorph sind, kann der Prover für genau eines von b=c und b≠c antworten. In 50% der Fälle wird er erwischt. Nach k Runden: Betrugswahrscheinlichkeit = (1/2)^k. + +### 23.4 Diskreter Logarithmus als ZK-Proof (Schnorr-Protokoll) + +**Problem:** Prover kennt x mit g^x = h mod p (diskreter Logarithmus). + +**Protokoll:** +``` +1. Prover wählt zufälliges r, berechnet Commitment: a = g^r mod p → sendet a +2. Verifier sendet zufällige Challenge c +3. Prover antwortet: z = r + c·x mod (p-1) +4. Verifier prüft: g^z ≡ a · h^c (mod p) +``` + +**Korrektheit:** `g^z = g^(r + cx) = g^r · (g^x)^c = a · h^c ✓` + +**Zero Knowledge:** Simulierbar ohne x (Simulator wählt z und c zufällig, berechnet a = g^z / h^c rückwärts). + +### 23.5 ZK-Proof für weitere Probleme + +| Problem | Öffentlich | Geheim | +|---|---|---| +| Graph-Isomorphismus | G₀, G₁ | Isomorphismus π | +| Diskreter Logarithmus | g, h = g^x | x | +| Quadratischer Rest | n, y | x mit x² ≡ y mod n | +| Signatur-Schema | Public Key | Secret Key | + +### 23.6 Fiat-Shamir Transformation (→ Signaturschema) + +*(Vollständig beschrieben in Abschnitt 15.5)* + +**Kernidee:** Challenge = H(Commitment, Nachricht). Macht interaktive ZK-Proofs nicht-interaktiv und ermöglicht digitale Signaturen aus ZK-Proofs. + +### 23.7 MPC in the Head + +**Definition:** Eine Technik, um Zero-Knowledge-Beweise aus MPC-Protokollen zu konstruieren. + +**Idee:** +1. Prover **simuliert** ein MPC-Protokoll im Kopf (spielt alle Parteien selbst) +2. Teilt sein Geheimnis in Shares auf und führt das Protokoll virtuell durch +3. **Committet** auf alle Transkripte der virtuellen Parteien +4. Verifier wählt eine Teilmenge der Parteien aus → Prover öffnet deren Transkripte +5. **Zero Knowledge:** Verifier sieht nur einen Teil → kann Geheimnis nicht rekonstruieren +6. **Soundness:** Prover hat sich durch Commitments festgelegt → kein Betrug möglich + +**Vorteil:** Jedes MPC-Protokoll kann automatisch in einen ZK-Proof umgewandelt werden. Grundlage für PICNIC (Post-Quantum-Signaturschema). + +--- + +## 24. Differential Privacy + +### 24.1 Motivation und Kernproblem + +**Problem:** Wie kann man statistische Analysen auf sensiblen Daten veröffentlichen, ohne Individuen zu identifizieren? + +**Naives Beispiel:** In einer Umfrage „Haben Sie schon einmal gestohlen?" lügen Befragte aus Angst vor Konsequenzen. + +### 24.2 Randomized Response + +**Lösung:** **Münzwurf-Technik** für plausible Abstreitbarkeit. + +**Protokoll:** +1. Befragter wirft eine Münze (privat) +2. **Kopf** → Wahrheit sagen +3. **Zahl** → Lügen (entgegengesetzte Antwort) + +**Analyse:** In 3/4 der Fälle steht die richtige Antwort (Kopf+Ja oder Zahl+Nein für einen Nein-Sager). + +**Rückrechnung** des echten „Ja"-Anteils: +``` +Echter "Ja"-Anteil = 2 × (Gemessener "Ja"-Anteil - 0,25) +``` + +**Beispiel:** 37,5% gemessene „Ja"-Antworten → echter Anteil = 2 × (0,375 - 0,25) = **25%** + +**Vorteil:** Jede individuelle Antwort ist **plausibel abstreitbar** – niemand kann beweisen, ob eine Person die Wahrheit sagte. + +### 24.3 Formale Definition (ε-Differential Privacy) + +**Definition:** Ein Mechanismus M erfüllt **ε-Differential Privacy**, wenn für alle benachbarten Datensätze D, D' (die sich in genau einem Eintrag unterscheiden) und alle möglichen Ausgaben S gilt: +``` +Pr[M(D) ∈ S] ≤ e^ε · Pr[M(D') ∈ S] +``` + +**Parameter ε (Privacy Budget):** +- **Kleines ε** → mehr Privatsphäre, weniger Genauigkeit +- **Großes ε** → weniger Privatsphäre, mehr Genauigkeit +- Typisch: ε ≤ 1 für starke Privacy + +**Sensitivität** einer Funktion f: Wie stark ändert sich f, wenn ein einzelner Datensatz entfernt wird? +``` +Δf = max_{D,D' benachbart} ||f(D) - f(D')|| +``` +Bestimmt die Stärke des Rauschens. + +### 24.4 Mechanismen + +| Mechanismus | Beschreibung | Anwendung | +|---|---|---| +| **Laplace-Mechanismus** | Addiert Rauschen ~ Laplace(0, Δf/ε) | Numerische Abfragen | +| **Gaußscher Mechanismus** | Addiert Gaußsches Rauschen; benötigt (ε, δ)-DP | Wenn etwas Lockerung akzeptabel | +| **Exponentieller Mechanismus** | Wählt Ergebnis mit exp-gewichteter Wahrscheinlichkeit | Nicht-numerische Ausgaben | + +--- + +## 25. Trusted Execution Environments (TEE) + +### 25.1 Motivation + +**Virtual Black Box Obfuscator (Ideallösung):** Ein Programm so verschleiern, dass man es ausführen, aber nicht verstehen kann. **Problem:** Unmöglich zu konstruieren (Barak et al., 2001). + +**TEE als praktischer Kompromiss:** Statt Software-Obfuskation nutzt man Hardware-Isolation. + +### 25.2 TEE-Architektur (Enklave) + +**Definition:** Ein **Trusted Execution Environment** ist ein hardware-geschützter Bereich (Enklave) auf einem Prozessor, in dem Code und Daten sicher verarbeitet werden. + +**Schlüsseleigenschaften:** +- **Hardware-Isolation:** Selbst ein kompromittiertes Betriebssystem hat keinen Zugriff auf Enklaven-Daten +- **Verschlüsselter Speicher:** Alle Daten werden beim Verlassen der Enklave verschlüsselt +- **Attestierung:** Die Hardware kann kryptographisch beweisen, welcher Code in der Enklave läuft + +**Ablauf:** +``` +Externe Partei → Verschlüsselte Daten → Enklave + ↓ (nur hier entschlüsselt) + Attestierter Code + ↓ + Verschlüsselte Ergebnisse → Externe Partei +``` + +**Beispiele:** Intel SGX, ARM TrustZone, AMD SEV + +**Attestierung:** Externe Parteien können prüfen, dass tatsächlich der korrekte Code in der Enklave läuft (kryptographische Signatur der Hardware). Verhindert, dass der Betreiber manipulierten Code einschleust. + +**Einschränkungen:** Side-Channel-Angriffe (z.B. SGX wurde mehrfach durch Spectre-ähnliche Angriffe kompromittiert), TEE vertraut der Hardware des Herstellers. + +--- + +## 26. Privacy-Schutzziele & Technologien + +### 26.1 Drei Dimensionen von Datenschutz + +| Zustand | Schutzziel | Beispiel | +|---|---|---| +| **Data at Rest** | Vertraulichkeit, Integrität | Verschlüsselte Festplatte | +| **Data in Transit** | Vertraulichkeit, Integrität, Authentizität | TLS | +| **Data in Use** | Vertraulichkeit während Verarbeitung | HE, MPC, TEE | + +### 26.2 Erweiterte Privacy-Ziele + +| Ziel | Bedeutung | +|---|---| +| **Input Privacy** | Eingabedaten der Datenlieferanten werden geschützt | +| **Output Privacy** | Ergebnisse schützen Informationen über Individuen | +| **Policy Enforcement** | Nutzungsregeln werden technisch/rechtlich durchgesetzt | + +### 26.3 Privacy Enhancing Technologies (PET) – Gesamtübersicht + +| Technologie | Input Privacy | Output Privacy | Policy Enforcement | +|---|---|---|---| +| **MPC** | ✅ | — | — | +| **TEE** | ✅ | — | — | +| **Homomorphe Verschlüsselung (HE/FHE)** | ✅ | — | — | +| **Zero Knowledge Proofs** | ✅ | — | — | +| **Differential Privacy** | — | ✅ | — | +| **Aggregation** | — | ✅ | — | +| **Non-Disclosure Agreements (NDA)** | — | — | ✅ | + +--- + +## Schnellreferenz: Wichtige Formeln + +| Konzept | Formel | +|---|---| +| Caesar | E(x) = (x+n) mod 26 | +| Vigenère | C_i = (M_i + K_i) mod 26 | +| OTP | E = P ⊕ K | +| Shannon Perfect Secrecy | H(M\|E) = H(M) | +| Entropie | H(X) = -Σ p_x · log₂(p_x) | +| RSA Verschlüsselung | c = m^e mod n | +| RSA Entschlüsselung | m = c^d mod n | +| RSA Signatur | s = m^d mod n | +| DH gemeinsames Geheimnis | K = g^(ab) mod p | +| HMAC | H((k⊕opad) \|\| H((k⊕ipad)\|\|m)) | +| Beaver Triple Multiplikation | xy = de + d[b] + e[a] + [c] | +| Fiat-Shamir Challenge | ch = H(Commitment, Nachricht) | +| DP Formel | Pr[M(D)∈S] ≤ e^ε · Pr[M(D')∈S] | +| DP Rückrechnung | Echter Anteil = 2×(gemessen - 0,25) | +| AES irreduzibles Polynom | m(x) = x⁸ + x⁴ + x³ + x + 1 | +| Paillier Verschlüsselung | c = g^m · r^n mod n² | +| Paillier Homomorphie | D(E(m₁)·E(m₂)) = m₁+m₂ mod n | + +--- + +## Schnellreferenz: Wichtige Definitionen + +| Begriff | Kurzdefinition | +|---|---| +| **Perfect Secrecy** | Geheimtext verrät keinerlei Information über Klartext (H(M\|E) = H(M)) | +| **OWF** | Leicht zu berechnen, praktisch unmöglich umzukehren | +| **PRG** | Streckt kurzen Seed zu ununterscheidbarem langen Pseudozufallsstring | +| **Comp. Indistinguishability** | Kein effizienter Algorithmus kann zwei Verteilungen mit messbarem Vorteil unterscheiden | +| **IND-CPA** | Angreifer kann bei Zugriff auf Verschlüsselungsorakel nicht unterscheiden, welche Nachricht verschlüsselt wurde | +| **IND-CCA2** | Wie IND-CPA + adaptiver Zugriff auf Entschlüsselungsorakel (außer Challenge-CT) | +| **MAC** | Kurzer Tag, der Integrität und Authentizität (nicht Vertraulichkeit) sichert | +| **AEAD** | Kombiniert Verschlüsselung + Authentifizierung in einem Algorithmus | +| **Feistel-Netzwerk** | Blockchiffre-Struktur: L_{i+1}=R_i, R_{i+1}=L_i⊕F(R_i,K_i); F muss nicht invertierbar sein | +| **Padding Oracle Attack** | Angriff auf CBC: nutzt Unterscheidung zwischen Padding-Fehlern aus | +| **Cipher Text Stealing** | Vermeidet Padding, indem letzter vollständiger + unvollständiger Block kombiniert werden | +| **Shors Algorithmus** | Löst Faktorisierung und DLP in polynomialer Zeit → bricht RSA, DH, ECDH | +| **Grovers Algorithmus** | Suche in O(√N) → halbiert effektive Schlüssellänge symmetrischer Verfahren | +| **LWE** | Learning With Errors: schweres Gitterproblem, Basis für PQC | +| **Oblivious Transfer** | Sender weiß nicht, welche seiner Nachrichten der Empfänger erhalten hat | +| **Garbled Circuit** | Verschlüsselter Boole'scher Schaltkreis; ermöglicht sichere Zweikparteienberechnung | +| **Beaver Triple** | Vorberechnetes (a, b, c=ab)-Tripel für effiziente MPC-Multiplikation | +| **ZK-Proof (Zero Knowledge)** | Beweis der Wahrheit einer Aussage ohne Preisgabe weiterer Informationen | +| **Fiat-Shamir** | Macht interaktive ZK-Proofs nicht-interaktiv durch H(Commitment, Nachricht) als Challenge | +| **Differential Privacy** | Statistischer Datenschutz: Pr[M(D)∈S] ≤ e^ε·Pr[M(D')∈S] für benachbarte D, D' | +| **TEE/Enklave** | Hardware-geschützter Ausführungsbereich; auch kompromittiertes OS hat keinen Zugriff | +| **Zertifikat (X.509)** | Digitale Bestätigung einer CA: bindet Public Key an Identität | +| **Chain of Trust** | Hierarchische Vertrauenskette: Endnutzer-Zertifikat ← CA ← Root CA | +| **CRL** | Liste widerrufener Zertifikate, periodisch veröffentlicht | +| **OCSP** | Echtzeitabfrage des Zertifikatstatus bei einem Responder-Server | +| **BB84** | Quantenschlüsselaustausch; sicher durch No-Cloning-Theorem; Eve-Abhören detektierbar | +| **MPC in the Head** | ZK-Proofs durch Simulation eines MPC-Protokolls im Kopf des Provers | + +--- + +*Tags: #Kryptographie #HWR #Klausur #Zusammenfassung #Kryptografische_Primitive #Symmetrisch #Asymmetrisch #AES #RSA #TLS #PostQuantum #MPC #ZeroKnowledge #DifferentialPrivacy #TEE* diff --git a/Kryptografie/klausur/klausurthemen.md b/Kryptografie/klausur/klausurthemen.md new file mode 100644 index 0000000..ab92fa3 --- /dev/null +++ b/Kryptografie/klausur/klausurthemen.md @@ -0,0 +1,76 @@ +# Klausurvorbereitung + +Erwartungen und Themen: +- Keine Hilfsmittel erlaubt in der Klausur +- Definitionen lernen, grundlegende Sachen +- Abkürzungen entziffern +- Grundlegende Verfahren erklären können +- Aufgabentypen: "**Beschreiben** Sie Verfahren X, **Definieren** Sie Konzept Y" +- 4 Sicherheitsbegriffe +- Symmetrische Verschlüsselung: + - Caesar + - Vigenere + - Shanon Perfect Secrecy + - OTP +- Pseudozufallszahlengenerator: Computational Indistinguishibility erklären können +- Formale Definition super, aber umgangssprachlich okay, kann aber falsch werden +- Umgangssprachliche Erklärungen von Formeln okay +- Bit Commitment, warum eine Variante funktioniert, warum die andere nicht +- Grobe Vorstellung von Parametern, z.B. bei ChaCha20 +- Blockmodi kennen, was ist ECB +- Was ist IND-CPA sicher? +- Chaining Modes +- Padding Orakel +- Cipher Text Stealing +- Kein DES Aufbau, wissen was eine Phaestel Ciffre ist +- Grundlegendes Prinzip von AES, 4 Phasen kennen +- AES S-Box Modulo Polynomrechnung +- MAC + - Angriffsvektoren + - HMAC + - Eigenschaften Kryptografischer Hashfunktion + - Varianten + - AEAD (in TLS 1.3 Standard genutzt) +- Public Key Kryto System +- Diffie Hellman Key Exchange +- ModP +- RSA Kryptosystem wissen und anwenden können (Beispielrechnung) +- Faktorisierungsproblem +- IND-CCA und IND-CCA2 erklären können +- Padding kennen, warum man RSA-PSS braucht +- Elgamal kennen +- Signaturen, Angriffsvektoren +- Publik Key Methode zur Signaturmethode +- ECDSA kennen nur +- Zertifikat, Aufgaben, PKI, Zertifikatskette, Root-CA, +- CRL, OCSP-Responder +- TLS einordnen können (OSI-Layer, Handshake, Record, Komponenten) +- IPSec kleine Wissenfrage auf welchem OSI-Layer +- BB84-Protocol +- Peter Shor, SHor-Algorithmen +- Grover-Algorithmus +- Simons Problem +- PQC-Strategien benennen können + - Hash-based Kryptografie kennen + - Isogenien und was man damit machen kann: Diffie Hellmann Key Exchange + - Code-base + - Lattice-based: Beispiel kennen und halbwegs erklären können Regev Beispiel +- PQC Standartisierung und Competition +- Privacy Definitionen Schutzziele +- Homomorphe Encryption: Grundlagen & Ansätze +- Pailler verstehen (fast wie RSA) +- MPC: Erkläurung, Ziel + - Oblivious Transfer: + - Definitionen, Arten, Unterschiede + - Wofür ist das gut? + - Garbled Circuits: erstellen können und auswerten + - Additive Secret Sharing + - Beaver Triples +- Zero Knowledge: Was ist das und was bedeutet es? Beispiele und Verständnis + - Graph-Isomorphie + - Diskreter Algorithmus + - Flat Shamir Transformation + - Signature Schema +- MPC in the Head +- Differential Privacy: Definition und Beispiel +- Trusted Execution Environment: Enklave und grundlegendes Prinzip \ No newline at end of file diff --git a/Kryptografie/klausur/themenliste.md b/Kryptografie/klausur/themenliste.md new file mode 100644 index 0000000..4bbf036 --- /dev/null +++ b/Kryptografie/klausur/themenliste.md @@ -0,0 +1,113 @@ +# Kryptographie - Themenliste + +## KR1 – Grundlagen +- Häufigkeitsanalyse +- Caesar-Chiffre +- Vigenère-Chiffre (inkl. Kasiski-Test) +- Homophone Chiffren +- Beale-Chiffren +- Informationsgehalt & Entropie +- Bemessbarkeit von Sicherheit (Claude Shannon) / Perfekte Sicherheit +- One Time Pad +- Einwegfunktionen (OWF) +- Pseudozufallsgeneratoren (PRG) & Zusammenhang OWF ↔ PRG +- Hardcore-Prädikat (HCP) +- Strom-Chiffre +- CHACHA20 (Stromchiffre) +- Block-Chiffre +- Betriebsmodi: + - ECB (Electronic Codebook) + - CBC (Cipher Block Chaining) inkl. Padding Oracle Attack + - CTR (Counter Mode) + - OFB (Output Feedback Mode) + - CFB (Cipher Feedback Mode) + - Cipher Text Stealing +- Kryptoanalyse & Angriffsmodelle (Ciphertext-only, Known Plaintext, CPA, CCA) +- IND-CPA Game +- DES (Data Encryption Standard) – Feistel-Netzwerk +- AES (Advanced Encryption Standard) – SubBytes, ShiftRows, MixColumns, AddRoundKey +- AES S-Box & Arithmetik in GF(2⁸) +- Lamport's One-Time-Signature +- Bit Commitment Protokoll + +## KR2 – MAC, AEAD & Public Key Cryptography +- MAC (Message Authentication Code) – Funktionsweise & Angriffsvektoren +- How to NOT MAC a Long Message (6 fehlerhafte Ansätze) +- HMAC (Hash-based MAC) +- MAC-Kompositionsmethoden (Encrypt-then-MAC, MAC-then-Encrypt, Encrypt-and-MAC) +- AEAD (Authenticated Encryption with Associated Data) + - ChaCha20-Poly1305 + - Galois Counter Mode (GCM) +- Symmetric Search over Encrypted Data +- Public Key Cryptography: + - Merkle Puzzle + - Virtual Black Box Obfuscator (existiert nicht) + - Diffie-Hellman Key Exchange + - Problem des diskreten Logarithmus + - MODP (Einheitengruppe eines endlichen Körpers) – RFC 3526 + - Gruppe auf einem Kreis + - Elliptische Kurven (Punktaddition, Formale Definition, Sicherheitsbewertung) + - RSA (Key Generation, Encryption, Decryption) + - Faktorisierungsproblem & General Number Field Sieve (GNFS) + - IND-CCA2 Game + - OAEP (Optimal Asymmetric Encryption Padding) + - ElGamal (inkl. Generalized ElGamal) + +## KR3 – Signaturen, Zertifikate, TLS & Quantenkryptographie +- Digitale Signaturen (Grundprinzip, Angriffsziele) +- RSA-Signatur (inkl. Existential Forgery Attack) +- RSA-PSS (Probabilistic Signature Scheme) +- ECDSA (Elliptic Curve Digital Signature Algorithm) +- Zertifikate (X.509, Chain of Trust, CRL, OCSP) +- Identity-Based Encryption (IBE) – Boneh & Franklin +- Babington Plot – Schichtenmodell der Kommunikationssicherheit +- TLS (Transport Layer Security) – TLS 1.3, Handshake, Key Exchange Modi +- SSL/TLS Versionshistorie & bekannte Angriffe +- QUIC +- IPSec (Tunnel Mode, AH, ESP) +- Quantenmechanik-Grundlagen (Superposition, Verschränkung, Unschärfe) +- BB84 Protokoll (Quantum Key Distribution) +- No-Cloning-Theorem +- Shors Algorithmus (bricht RSA, DH, ECDH, ECDSA) +- Grovers Algorithmus (halbiert symmetrische Schlüssellänge) +- Simons Algorithmus + +## KR4 – Post-Quantum Kryptographie & Homomorphe Verschlüsselung +- Komplexitätsklassen (P, NP, Co-NP, BQP, PSPACE) +- PQC-Strategien (Überblick) +- PQ-RSA („Trotziges Kind") +- Hash-basierte Kryptographie (Merkle-Baum, XMSS, SPHINCS) +- Isogenien-basierte Kryptographie (SIDH) +- Multivariate Polynome (MQ-Problem, Oil-and-Vinegar) +- Code-basierte Kryptographie (McEliece, Syndrome-Decoding) +- Gitter-basierte Kryptographie (CVP, SVP, GapSVP, LWE, SIS) +- Worst-Case zu Average-Case Reduktion +- Regev's Public-Key-Kryptosystem +- Moscas Theorem (x + y > z) +- NIST PQC-Standardisierung (Kyber, Dilithium, Falcon, SPHINCS+) +- Drei Dimensionen des Datenschutzes (at rest, in transit, in use) +- Input Privacy, Output Privacy, Policy Enforcement +- Homomorphe Verschlüsselung (PHE, SWHE, FHE) + - RSA als PHE (multiplikativ homomorph) + - Paillier als PHE (additiv homomorph) + - SWHE-Beispiel +- Multi-Party Computation (MPC) – Millionärsproblem, Ideales/Reales Modell +- Oblivious Transfer (OT) – Varianten, DH-basiertes Protokoll + +## KR5 – MPC-Protokolle, Zero Knowledge Proofs & Differential Privacy +- Yao's Millionärsproblem +- Garbled Circuits (Garbler/Evaluator, Eingaben via OT) +- Arithmetic Circuits +- Additive Secret Sharing (Addition, Multiplikationsproblem) +- Beaver Triples (Multiplikationsprotokoll) +- SPDZ-Protokoll +- Zero Knowledge Proofs (Completeness, Soundness, Zero Knowledge) + - Beispiel: Graph-Isomorphismus + - Quadratic Residues, Diskreter Logarithmus, Signatur-Schema +- MPC in the Head +- Differential Privacy + - Randomized Response + - Epsilon (Privacy Budget) & Sensitivität + - Laplace-, Gauß- und Exponentieller Mechanismus +- Trusted Execution Environments (TEE) – Intel SGX, ARM TrustZone, AMD SEV +- Privacy Enhancing Technologies – Gesamtübersicht \ No newline at end of file diff --git a/Kryptografie/zusammenfassungen/kr1 - zusammenfassung.md b/Kryptografie/zusammenfassungen/kr1 - zusammenfassung.md new file mode 100644 index 0000000..2b2b3cd --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr1 - zusammenfassung.md @@ -0,0 +1,302 @@ +# Kryptographie – Zusammenfassung Vorlesung 1 + +**Prof. Dr. Björn Grohmann | HWR Berlin | 16.02.2026** + +--- + +## 1. Einführung: Die Geschichte von Maria Stuart + +Die Vorlesung beginnt mit einem historischen Beispiel: Maria Stuart (1542–1587), Königin von Schottland, wurde durch das Scheitern ihrer verschlüsselten Kommunikation zum Tode verurteilt. Im sogenannten **Babington-Plot (1586)** kommunizierte sie über geheime Briefe mit Anthony Babington, die in Bierfässern geschmuggelt wurden. Sir Francis Walsingham (Geheimdienstchef von Elizabeth I.) und sein Kryptoanalyst Thomas Phelippes fingen die Briefe ab und entschlüsselten sie. Maria Stuarts Chiffre – eine einfache monoalphabetische Substitution mit Symbolen für Buchstaben und häufige Wörter – bot keinen ausreichenden Schutz. + +**Was fehlte für sichere Kommunikation?** + +- **Vertraulichkeit (Confidentiality):** Nur berechtigte Empfänger sollen den Inhalt lesen können. +- **Integrität (Integrity):** Die Nachricht darf nicht unbemerkt verändert werden. +- **Authentizität (Authenticity):** Der Absender muss zweifelsfrei identifizierbar sein. + +--- + +## 2. Häufigkeitsanalyse + +Einfache Substitutionschiffren lassen sich durch **Häufigkeitsanalyse** brechen: Man zählt, wie oft jedes Symbol im Geheimtext vorkommt, und vergleicht die Verteilung mit der bekannten Buchstabenhäufigkeit der Sprache. + +Im Englischen ist z. B. **E** mit ca. 11,16 % der häufigste Buchstabe, gefolgt von A (8,50 %), R (7,58 %), I (7,54 %), O (7,16 %) usw. Samuel Morse nutzte diese Erkenntnis bereits für sein Morsealphabet – häufige Buchstaben bekamen kurze Codes. + +--- + +## 3. Klassische Chiffren + +### 3.1 Caesar-Chiffre + +Jeder Buchstabe wird um eine feste Anzahl *n* im Alphabet verschoben: + +- **Verschlüsselung:** E_n(x) = x + n mod 26 +- **Entschlüsselung:** D_n(x) = x − n mod 26 + +Beispiel (n = 3): A → X, B → Y, E → B. Der Schlüsselraum ist mit nur 25 möglichen Verschiebungen trivial klein und per Brute-Force sofort zu brechen. + +### 3.2 Vigenère-Chiffre + +Eine polyalphabetische Substitution: Ein Schlüsselwort wird wiederholt über den Klartext gelegt. Jeder Buchstabe wird mit einem anderen Caesar-Shift verschlüsselt. + +- **Verschlüsselung:** C_i = M_i + K_i mod 26 +- **Entschlüsselung:** M_i = C_i − K_i mod 26 + +Beispiel: Plaintext „attackatdawn" + Key „LEMONLEMONLE" → Ciphertext „LXFOPVEFRNHR" + +**Schwäche:** Durch den **Kasiski-Test** lässt sich die Schlüssellänge ermitteln. Wiederholt sich ein Muster im Klartext und fällt es auf dieselbe Schlüsselposition, entsteht ein identisches Muster im Geheimtext. Der Abstand solcher Wiederholungen ist ein Vielfaches der Schlüssellänge. + +### 3.3 Homophone Chiffren + +Versuch, die Häufigkeitsanalyse zu erschweren: Jedem Buchstaben werden mehrere Symbole zugeordnet, proportional zu seiner Häufigkeit. Trotzdem bieten sie keinen vollständigen Schutz. + +### 3.4 Beale-Chiffren + +Ein berühmtes ungelöstes Kryptorätsel: Drei Chiffretexte (Zahlenfolgen) sollen den Standort eines vergrabenen Schatzes beschreiben. Chiffretext 2 wurde mithilfe der US-Unabhängigkeitserklärung als Schlüsseltext entschlüsselt (jede Zahl verweist auf das Anfangswort im Dokument). Chiffretexte 1 und 3 sind bis heute ungeknackt. + +--- + +## 4. Informationstheoretische Sicherheit + +### 4.1 Informationsgehalt und Entropie + +**Informationsgehalt** eines Zeichens x mit Wahrscheinlichkeit p_x: + +> I_x = log(1/p_x) = −log(p_x) + +Je seltener ein Zeichen, desto größer sein Informationsgehalt. + +**Entropie** H(X) – der mittlere Informationsgehalt einer Zufallsvariable: + +> H(X) = −∑_x p_x · log(p_x) + +**Bedingte Entropie:** + +> H(X|Y) = H(X, Y) − H(Y) +> +> H(X, Y) ≤ H(X) + H(Y) + +### 4.2 Perfekte Sicherheit (Shannon) + +Claude Shannon (1916–2001) definierte: Ein Verschlüsselungssystem hat **perfekte Sicherheit (Perfect Secrecy)**, genau dann wenn: + +> **H(M|E) = H(M)** + +Das bedeutet: Die bedingte Entropie der Nachricht M gegeben den Geheimtext E ist gleich der Entropie von M allein. Anders formuliert: **M und E sind stochastisch unabhängig** – der Geheimtext verrät keinerlei Information über den Klartext. Jeder Chiffretext ist unabhängig vom Klartext gleich wahrscheinlich. + +### 4.3 One-Time Pad (OTP) + +Das einzige Verfahren, das perfekte Sicherheit erreicht: + +- Der Schlüssel wird per **XOR** mit dem Klartext verknüpft: E = P ⊕ K +- Der Schlüssel muss **echt zufällig** sein +- Der Schlüssel muss **mindestens so lang wie die Nachricht** sein +- Der Schlüssel darf **nur einmal** verwendet werden + +**Problem:** Der Schlüssel muss genauso lang sein wie die Nachricht und sicher übertragen werden – in der Praxis meist nicht handhabbar. + +--- + +## 5. Kryptographische Primitive + +### 5.1 Einwegfunktionen (One-Way Functions – OWF) + +Eine Funktion f : {0,1}* → {0,1}* mit |f(x)| = |x| ist eine Einwegfunktion, wenn: + +1. **Leicht zu berechnen:** Es existiert ein Polynomialzeit-Algorithmus A mit A(x) = f(x) für alle x. +2. **Schwer umzukehren:** Für jeden probabilistischen Polynomialzeit-Algorithmus A', jedes Polynom p(.) und alle hinreichend großen n gilt: Pr[A'(f(U_n)) = f⁻¹ ∘ f(U_n)] < 1/p(n) + +Anschaulich: x → f(x) ist einfach und schnell, f(x) → x erfordert exponentiellen Aufwand. + +### 5.2 Pseudo-Zufallszahlengeneratoren (PRG/PRNG) + +Eine Funktion G : {0,1}* → {0,1}* mit Streckungsfunktion l(n) ist ein PRG, wenn: + +1. G ist ein **Polynomialzeit-Algorithmus** +2. Für jedes x gilt: |G(x)| = l(|x|) > |x| (Ausgabe ist länger als Eingabe) +3. Die Verteilungen {G(U_n)} und {U_l(n)} sind **berechnungsmäßig ununterscheidbar** (computational indistinguishability) + +**Berechnungsmäßige Ununterscheidbarkeit** (Definition 13.4): Zwei Wahrscheinlichkeitsensembles {X_n} und {Y_n} sind berechnungsmäßig ununterscheidbar, wenn für jeden probabilistischen Polynomialzeit-Algorithmus A und jedes Polynom p(.) ab einem N gilt: + +> |Pr(A(X_n) = 1) − Pr(A(Y_n) = 1)| < 1/p(n) + +**Amplifikation der Streckungsfunktion** (Theorem 13.10): Hat man einen PRG mit Streckungsfunktion n + 1, dann existiert für jedes Polynom l(n) ein PRG mit Streckungsfunktion l(n). Dies geschieht durch iteriertes Anwenden von G₁. + +### 5.3 Zusammenhang OWF ↔ PRG + +> **Theorem: Pseudo-Zufallszahlengeneratoren existieren genau dann, wenn Einwegfunktionen existieren.** + +**PRG → OWF:** Aus einem PRG G : {0,1}^n → {0,1}^{2n} kann man eine OWF konstruieren: f(xy) = G(x) wobei |x| = |y| = n. Die Funktion „vergisst" die Hälfte der Eingabe. + +**OWF → PRG:** Über den Umweg eines **Hardcore-Prädikats (HCP)**. Sei f eine OWF, dann ist b(x, r) = Skalarprodukt von x und r mod 2 ein Hardcore-Prädikat von f'(x,r) = (f(x), r). Der PRG ergibt sich als G(s) = f'(s) ∘ b(s). Ein HCP ist leicht zu berechnen, aber aus f(x) allein nicht vorhersagbar (Wahrscheinlichkeit < 1/2 + 1/p(n)). + +--- + +## 6. Symmetrische Verschlüsselung + +Eine Chiffre heißt **symmetrisch**, wenn für Ver- und Entschlüsselung dasselbe Schlüsselmaterial verwendet wird. + +### 6.1 Strom-Chiffren + +Prinzip: Ein kurzer Schlüssel (Seed) wird durch einen PRNG zu einem langen Schlüsselstrom gestreckt, der per XOR mit dem Klartext verknüpft wird. + +**ChaCha20** – eine moderne Strom-Chiffre: + +- **Eingaben:** 256-Bit Schlüssel, 32-Bit Zähler, 96-Bit Nonce, beliebig langer Klartext +- **Ausgabe:** Geheimtext gleicher Länge +- **Kernoperation – Quarter Round:** Arbeitet auf vier 32-Bit-Werten (a, b, c, d) mit Addition, XOR und Rotation: + 1. a += b; d ^= a; d <<<= 16 + 2. c += d; b ^= c; b <<<= 12 + 3. a += b; d ^= a; d <<<= 8 + 4. c += d; b ^= c; b <<<= 7 +- Ein **inner_block** besteht aus 8 Quarter Rounds (4 Spalten + 4 Diagonalen) +- **chacha20_block:** Zustand = Konstanten | Key | Counter | Nonce → 10× inner_block → Zustand addieren → serialisieren +- Verschlüsselung: Für jeden 64-Byte-Block wird ein Schlüsselstrom erzeugt und per XOR verknüpft + +### 6.2 Block-Chiffren + +Ein Klartextblock fester Größe wird mit einem Schlüssel in einen Geheimtextblock gleicher Größe transformiert. Die zentrale Frage: Wie verschlüsselt man Daten, die länger als ein Block sind? → **Betriebsmodi** + +--- + +## 7. Betriebsmodi (Modes of Operation) + +### 7.1 ECB (Electronic Codebook) + +Jeder Block wird unabhängig verschlüsselt. **Problem:** Identische Klartextblöcke ergeben identische Geheimtextblöcke → Muster bleiben sichtbar. Nicht IND-CPA-sicher. + +### 7.2 CBC (Cipher Block Chaining) + +Jeder Klartextblock wird vor der Verschlüsselung mit dem vorherigen Geheimtextblock XOR-verknüpft. Der erste Block wird mit einem **Initialization Vector (IV)** verknüpft. **Achtung:** Anfällig für **Padding Oracle Attacks** – wenn das System bei der Entschlüsselung zwischen Padding-Fehlern und anderen Fehlern unterscheidet, kann der Klartext ohne Schlüsselkenntnis rekonstruiert werden. + +### 7.3 CTR (Counter Mode) + +Wandelt eine Block-Chiffre in eine Strom-Chiffre um: Nonce + fortlaufender Zähler werden verschlüsselt und per XOR mit dem Klartext verknüpft. Vorteil: Parallelisierbar, kein Padding nötig. + +### 7.4 OFB (Output Feedback) + +Der IV wird verschlüsselt, das Ergebnis als nächster Eingabeblock verwendet. Der Schlüsselstrom ist unabhängig vom Klartext. + +### 7.5 CFB (Cipher Feedback) + +Ähnlich wie OFB, aber der Geheimtext (statt des Verschlüsselungsoutputs) wird als nächster Eingabeblock verwendet. + +### 7.6 Cipher Text Stealing + +Ein Verfahren, das Padding vermeidet, indem der letzte vollständige und der letzte unvollständige Block geschickt vertauscht und kombiniert werden. + +--- + +## 8. Kryptoanalyse und Angriffsmodelle + +Die Angriffstypen sind nach aufsteigender Stärke des Angreifers geordnet: + +| Angriffstyp | Fähigkeit des Angreifers | +|---|---| +| **Ciphertext-only** | Kennt nur den Geheimtext | +| **Known Plaintext** | Kennt Paare von Klartext und Geheimtext | +| **Chosen Plaintext (CPA)** | Kann beliebige Klartexte verschlüsseln lassen | +| **Adaptive Chosen Plaintext** | Wie CPA, kann aber Anfragen adaptiv stellen | +| **Chosen Ciphertext (CCA)** | Kann beliebige Geheimtexte entschlüsseln lassen | +| **Adaptive Chosen Ciphertext** | Wie CCA, adaptiv | + +### IND-CPA-Sicherheit + +Das „Find-then-Guess"-Spiel: Ein Angreifer A interagiert mit einem Challenger C. C erzeugt einen Schlüssel k und ein Bit b ∈ {0,1}. A darf beliebig viele Klartexte verschlüsseln lassen, wählt dann zwei Nachrichten M₁, M₂ gleicher Länge. C verschlüsselt M_b und gibt den Geheimtext zurück. A muss b erraten. Die Chiffre ist IND-CPA-sicher, wenn der Vorteil von A vernachlässigbar ist: Adv(A) = |Pr[b = b'] − 1/2| ≈ 0. + +--- + +## 9. DES und AES + +### 9.1 Data Encryption Standard (DES, 1977) + +- **Blockgröße:** 64 Bit +- **Schlüssellänge:** 56 Bit (effektiv) +- **Struktur:** Feistel-Netzwerk mit 16 Runden +- **Feistel-Netzwerk:** Der Block wird in zwei Hälften (L, R) geteilt. Pro Runde: L_{i+1} = R_i und R_{i+1} = L_i ⊕ F(R_i, K_i). Die Entschlüsselung funktioniert durch Anwenden der Rundenschlüssel in umgekehrter Reihenfolge. +- **Kritik (Diffie & Hellman):** Die 56-Bit-Schlüssellänge ist zu kurz für exhaustive Suche. Empfehlung: mindestens 128 Bit. +- **Heute als unsicher eingestuft.** + +### 9.2 Advanced Encryption Standard (AES, 2001) + +- **Blockgröße:** 128 Bit +- **Schlüssellängen:** 128, 192 oder 256 Bit +- **Runden:** 10 (AES-128), 12 (AES-192) oder 14 (AES-256) +- **Gilt als sicher** + +**AES-128 Algorithmus** (Pseudocode): + +1. Schlüsselexpansion: K → (K₀, ..., K₁₀) +2. s ← M ⊕ K₀ +3. Für r = 1 bis 10: + - s ← SubBytes(s) + - s ← ShiftRows(s) + - Falls r ≤ 9: s ← MixColumns(s) + - s ← s ⊕ K_r + +**Die vier Transformationen:** + +- **SubBytes:** Nichtlineare Byte-Substitution über eine S-Box. Jedes Byte wird durch sein multiplikatives Inverses in GF(2⁸) ersetzt und anschließend affin transformiert. +- **ShiftRows:** Zeilenweises zyklisches Verschieben (Zeile 0: kein Shift, Zeile 1: 1 Byte, Zeile 2: 2 Bytes, Zeile 3: 3 Bytes). +- **MixColumns:** Spaltenweise Multiplikation mit einem festen Polynom c(x) über GF(2⁸). Sorgt für Diffusion. +- **AddRoundKey:** XOR des Zustands mit dem Rundenschlüssel. + +### Mathematik hinter der AES-S-Box + +AES arbeitet im endlichen Körper **GF(2⁸)** mit dem irreduziblen Polynom: + +> m(x) = x⁸ + x⁴ + x³ + x + 1 + +- **Addition:** XOR der Koeffizienten (entspricht XOR der Bytes) +- **Multiplikation:** Polynommultiplikation modulo m(x) +- **Multiplikatives Inverses:** Berechnung mittels des **erweiterten euklidischen Algorithmus**: Finde a(x), c(x) sodass b(x)·a(x) + m(x)·c(x) = 1 + +Die S-Box-Konstruktion ist zweistufig: (1) Multiplikatives Inverses in GF(2⁸), dann (2) affine Transformation über GF(2), dargestellt als Matrixmultiplikation plus Konstantenvektor. + +--- + +## 10. Anwendungen kryptographischer Primitive + +### 10.1 Lamport's One-Time-Signature + +Ein digitales Signaturverfahren, das nur auf Einwegfunktionen basiert: + +- **Schlüsselerzeugung:** Generiere 2 × 256 Zufallswerte r_i^0 und r_i^1 (geheimer Schlüssel sk). Der öffentliche Schlüssel pk besteht aus den Bildern unter einer OWF h: y_i^b = h(r_i^b). +- **Signatur:** Für jedes Bit b_i der Nachricht (als 256-Bit-Hash) wird r_i^{b_i} veröffentlicht. +- **Verifikation:** Berechne h auf die Signaturwerte und vergleiche mit den passenden Werten im öffentlichen Schlüssel. +- **Einmal-Eigenschaft:** Jeder Schlüssel darf nur für eine Signatur verwendet werden. + +### 10.2 Bit Commitment Protokoll + +Ein Zweiphasen-Verfahren, bei dem Alice sich auf ein Bit b festlegt (Commit), ohne dass Bob es kennt, und es später enthüllt (Reveal). + +**Naiver Ansatz (mit PRG):** + +- Commit: Alice wählt Seed s, sendet G_m(s) und B_{m+1}(s) ⊕ b +- Reveal: Alice sendet s, Bob verifiziert + +**Problem:** Alice könnte zwei Seeds finden, die in den ersten m Bits übereinstimmen, aber im (m+1)-ten Bit differieren → Betrug möglich. + +**Verbessertes Protokoll:** + +- Bob sendet einen zufälligen Vektor R = (r₁, ..., r_{3n}) +- Alice wählt Seed s und sendet d_i = B_i(s) wenn r_i = 0, bzw. d_i = B_i(s) ⊕ b wenn r_i = 1 +- Die Wahrscheinlichkeit, dass Alice betrügen kann, ist höchstens 2^{−n} + +--- + +## Zusammenfassung der Kernkonzepte + +| Konzept | Kernaussage | +|---|---| +| Perfect Secrecy | H(M\|E) = H(M), erfordert Schlüssel ≥ Nachrichtenlänge | +| One-Time Pad | Einziges perfekt sicheres Verfahren, aber unpraktisch | +| Einwegfunktion | Leicht zu berechnen, schwer umzukehren | +| PRG | Streckt kurzen Seed zu pseudo-zufälligem, langem Output | +| OWF ↔ PRG | Existieren genau dann, wenn das jeweils andere existiert | +| Symmetrische Chiffre | Gleicher Schlüssel für Ver- und Entschlüsselung | +| Strom-Chiffre | PRNG + XOR (z. B. ChaCha20) | +| Block-Chiffre | Feste Blockgröße, verschiedene Betriebsmodi | +| DES | 56-Bit Schlüssel, heute unsicher | +| AES | 128/192/256-Bit Schlüssel, Arithmetik in GF(2⁸), sicher | +| IND-CPA | Standardsicherheitsbegriff für symmetrische Verschlüsselung | diff --git a/Kryptografie/zusammenfassungen/kr2 - additional notes.md b/Kryptografie/zusammenfassungen/kr2 - additional notes.md new file mode 100644 index 0000000..4af9dbc --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr2 - additional notes.md @@ -0,0 +1,4 @@ +# Vorlesung 2 + +## AEAD +Additional Data können z.B. Metadaten sein wie die MAC-/IP-Adresse des Absenders/Empfängers sein. \ No newline at end of file diff --git a/Kryptografie/zusammenfassungen/kr2 - zusammenfassung.md b/Kryptografie/zusammenfassungen/kr2 - zusammenfassung.md new file mode 100644 index 0000000..10dadb0 --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr2 - zusammenfassung.md @@ -0,0 +1,366 @@ +# Kryptographie – Zusammenfassung Vorlesung 2 +_Prof. Dr. Björn Grohmann · HWR Berlin_ _Nur neuer Inhalt (ab Folie 73) – Wiederholungen aus Vorlesung 1 ausgelassen_ + +--- + +## Message Authentication Code (MAC) + +Ein **MAC** (Message Authentication Code) ist ein kurzer Tag `t`, der mit einem symmetrischen Schlüssel `k` aus einer Nachricht `m` berechnet wird: + +``` +t = MAC(k, m) +``` + +MAC bietet **Integrität** und **Authentizität**, aber keine Vertraulichkeit. Sender und Empfänger teilen denselben Schlüssel. + +### Angriffsvektoren auf MACs (von stark → schwach) + +|Stärke|Angriff|Beschreibung| +|---|---|---| +|Stärkster|**Total Break**|Alle Systemparameter sind gebrochen; Angreifer kann für beliebige Nachricht einen MAC erzeugen| +||**Selective Forgery**|MAC für eine Nachricht erzeugbar, die _vor_ dem Angriff vom Angreifer gewählt wurde| +|Schwächster|**Existential Forgery**|MAC für _irgendeine_ Nachricht erzeugbar (auch sinnlose)| + +--- + +## Wie man lange Nachrichten NICHT mit einem MAC versehen sollte + +Mehrere naive Konstruktionen sind unsicher: + +1. **Kein Schlüssel im MAC**: Angreifer kann eigene Blöcke einfügen. +2. **Alle Blöcke mit demselben Schlüssel unabhängig MACen** (`t_i = MAC(k, m_i)`): Reihenfolge der Blöcke kann vertauscht werden (Reordering-Angriff). +3. **Mit laufender Blocknummer** (`t_i = MAC(k, i || m_i)`): Blöcke aus verschiedenen Nachrichten können gemischt werden. +4. **Nachrichten-ID hinzufügen** (`t_i = MAC(k, id || i || m_i)`): Letzter Block kann weggelassen werden (Truncation-Angriff). +5. **Länge im letzten Block kodieren**: Erst dann ist die Konstruktion sicher (CBC-MAC-Variante). + +--- + +## HMAC (Hash-MAC) + +``` +HMAC(k, m) = H( (k XOR opad) || H( (k XOR ipad) || m ) ) +``` + +**H** ist eine kryptographische Hash-Funktion mit den Eigenschaften: + +- Effizient zu berechnen +- Schwer zu invertieren (Einwegfunktion) +- Kollisionsresistenz: schwer, zwei Eingaben mit gleichem Hash zu finden +- Kleine Eingabeänderungen → große Ausgabeänderungen (Diffusion / Lawineneffekt) + +`opad` und `ipad` sind feste Konstanten (Byte-Padding). + +--- + +## Kombinationen von Verschlüsselung und MAC + +Es gibt drei Möglichkeiten, Verschlüsselung (Enc) und MAC zu kombinieren: + +|Variante|Schema|Empfehlung| +|---|---|---| +|**Encrypt-then-MAC**|`c = Enc(k₁, m)` → `t = MAC(k₂, c)`|✅ Empfohlen (z. B. TLS 1.3)| +|**MAC-then-Encrypt**|`t = MAC(k₂, m)` → `c = Enc(k₁, m \| t)`|⚠️ Problematisch (z. B. Padding-Oracle-Angriff in TLS < 1.3)| +|**Encrypt-and-MAC**|`c = Enc(k₁, m)` und `t = MAC(k₂, m)` parallel|⚠️ MAC kann Klartextinfo leaken| + +**Encrypt-then-MAC** ist die sichere Variante: Der MAC schützt den Chiffretext, sodass manipulierte Ciphertexte sofort erkannt werden, bevor sie entschlüsselt werden. + +--- + +## Authenticated Encryption with Associated Data (AEAD) + +**AEAD** kombiniert Verschlüsselung und Authentifizierung in einem einzigen Algorithmus: + +``` +(c, t) = AEAD_Enc(k, nonce, m, aad) +m = AEAD_Dec(k, nonce, c, t, aad) +``` + +- `m` = Plaintext (wird verschlüsselt **und** authentifiziert) +- `aad` = _Associated Authenticated Data_ (wird nur authentifiziert, nicht verschlüsselt, z. B. Header) +- Gibt `⊥` zurück, wenn die Authentifizierung fehlschlägt + +### Beispiel: ChaCha20-Poly1305 + +- **ChaCha20**: Stromchiffre (Verschlüsselung) +- **Poly1305**: MAC über den Ciphertext +- Eingaben: 256-bit Key, 96-bit Nonce, Plaintext +- Weit verbreitet in TLS 1.3, SSH, WireGuard + +### Beispiel: Galois Counter Mode (GCM) + +- Kombiniert **CTR-Mode** (Verschlüsselung mit AES) und **GHASH** (MAC über das Galois-Feld GF(2¹²⁸)) +- Standard für AES-GCM in TLS 1.3 + +--- + +## Symmetric Search over Encrypted Data + +Problem: Wie kann man auf verschlüsselten Daten (z. B. in der Cloud) suchen, ohne den Schlüssel preiszugeben? + +|Ansatz|Idee|Problem| +|---|---|---| +|**1. Idee**|Alice gibt Bob Wort `W` + Schlüssel `k`|Bob kennt den Schlüssel → kein Datenschutz| +|**2. Idee**|Alice gibt Bob `Enc(W)` + zugehörigen Schlüssel|Deterministisches Enc → gleiche Wörter → gleiche Ciphertexte → Häufigkeitsanalyse möglich| +|**3. Idee**|Pseudorandom Function (PRF)-basierter Index: Alice erstellt eine verschlüsselte Lookup-Tabelle. Für jedes Wort `w` wird ein Token `T = PRF(k, w)` erzeugt und der zugehörige Index verschlüsselt gespeichert.|Leakt _access pattern_ (welche Dokumente abgerufen werden)| + +Die dritte Idee ist die Grundlage von **Searchable Symmetric Encryption (SSE)**. Sie erlaubt Bob, anhand eines Tokens zu suchen, ohne `k` oder `w` zu kennen. + +--- + +## Public-Key-Kryptographie + +### Das Schlüsselaustauschproblem + +Bei symmetrischer Kryptographie müssen beide Parteien denselben geheimen Schlüssel kennen – aber wie tauscht man ihn sicher aus, wenn nur ein unsicherer Kanal verfügbar ist? + +### Merkle Puzzle (1974) + +Alice erzeugt `n` verschlüsselte Rätsel mit je einer ID und einem Schlüssel. Bob löst zufällig eines davon (brute force, O(n)). Ein Angreifer muss im Durchschnitt `n/2` Rätsel lösen (O(n)). Vorteil ist quadratisch: O(n) Aufwand für Alice/Bob, O(n²) für Angreifer. Praktisch zu ineffizient. + +### Idee: Virtual Black Box (VBB) Obfuscator + +Idee: Ein Programm so verschleiern, dass man es zwar ausführen, aber nicht "verstehen" kann. Ein VBB-Obfuscator würde Public-Key-Kryptographie aus einer OWF ermöglichen. **Leider existiert kein allgemeiner VBB-Obfuscator** (Barak et al. 2001 bewiesen Unmöglichkeit). Schwächere Varianten (_Indistinguishability Obfuscation_, iO) sind noch Forschungsthema. + +--- + +## Diffie-Hellman-Schlüsselaustausch + +Ermöglicht zwei Parteien, über einen öffentlichen Kanal einen gemeinsamen geheimen Schlüssel zu vereinbaren. + +``` +Öffentlich bekannt: Primzahl q, Generator α + +Alice wählt Xₐ (geheim), sendet Yₐ = α^Xₐ mod q +Bob wählt X_b (geheim), sendet Y_b = α^X_b mod q + +Gemeinsames Geheimnis: K = α^(Xₐ·X_b) mod q +``` + +Sicherheit basiert auf dem **Diskreten-Logarithmus-Problem (DLP)**: Gegeben `g`, `p` und `g^a mod p`, ist es schwer, `a` zu berechnen. + +--- + +## Das Diskrete-Logarithmus-Problem (DLP) + +**Definition:** + +- Gegeben: Gruppe `G`, Generator `g`, Element `y = g^x` +- Gesucht: `x = log_g(y)` + +Das Berechnen von `g^x` ist effizient (schnelle Exponentiation: O(log x) Multiplikationen). Die Umkehrung (diskreter Logarithmus) ist für große Gruppen rechnerisch schwer (kein effizienter Algorithmus bekannt für klassische Computer). + +--- + +## Einheitengruppe eines endlichen Körpers: ModP + +Die Menge `ℤ_p* = {1, 2, ..., p-1}` mit Multiplikation modulo `p` (p prim) bildet eine **zyklische Gruppe** der Ordnung `p-1`. + +- Es gibt einen **Generator** `g`, sodass `{g^0, g^1, ..., g^(p-2)} = ℤ_p*` +- Für Diffie-Hellman wählt man `p` und `g` so, dass die Gruppe groß genug ist (heute ≥ 2048 Bit) + +**Fermat'scher kleiner Satz:** +`a^(p-1) ≡ 1 (mod p)` für alle `a` mit `ggT(a,p) = 1` + +--- + +## Elliptische Kurven + +Elliptische Kurven bieten dieselbe Sicherheit wie ModP-Gruppen, aber mit **viel kleineren Schlüsseln**. + +**Kurvendefinition** (Weierstraß-Form): + +``` +y² = x³ + ax + b (über einem Körper K) +``` + +mit Bedingung `4a³ + 27b² ≠ 0` (keine Singularitäten). + +### Gruppengesetz auf elliptischen Kurven + +Punkte auf der Kurve bilden eine abelsche Gruppe mit: + +- **Neutrales Element**: Punkt im Unendlichen `O` +- **Addition** `P + Q`: Schneide die Linie durch `P` und `Q` mit der Kurve; reflektiere den dritten Schnittpunkt an der x-Achse +- **Verdoppelung** `2P`: Tangente an `P`; reflektiere zweiten Schnittpunkt + +### ECDLP (Elliptic Curve Discrete Logarithm Problem) +Gegeben Punkte P und Q = k·P, finde k. Gilt als schwerer als DLP in ModP → kleinere Schlüssel möglich. + +Schlüssel und Verschlüsselung mit elliptischen Kurven + +Öffentliche Parameter (für alle gleich): + - Kurve (a, b, Körper) + - Basispunkt P auf der Kurve (= Generator) + - Ordnung n von P + +Schlüsselerzeugung: + Privater Schlüssel: d (zufällig, 1 ≤ d ≤ n-1) + Öffentlicher Schlüssel: Q = d·P (d-mal Punktaddition) + +ECDH (Diffie-Hellman auf elliptischen Kurven): + Alice wählt a (geheim), veröffentlicht A = a·P + Bob wählt b (geheim), veröffentlicht B = b·P + Gemeinsames Geheimnis: K = a·B = b·A = (ab)·P + + → Funktioniert, weil Punktmultiplikation kommutativ ist: + a·(b·P) = b·(a·P) + + → Angreifer sieht P, A, B, müsste aber a oder b berechnen = ECDLP + +--- + +## RSA (Rivest–Shamir–Adleman, 1977) + +### Schlüsselgenerierung + +``` +1. Wähle zwei große Primzahlen p, q +2. n = p · q (öffentlich, RSA-Modulus) +3. φ(n) = (p-1)(q-1) (Eulersche Phi-Funktion, geheim) +4. Wähle e mit ggT(e, φ(n)) = 1 (öffentlicher Exponent, oft e = 65537) +5. Berechne d = e⁻¹ mod φ(n) (privater Exponent) + +Öffentlicher Schlüssel: (n, e) +Privater Schlüssel: (n, d) +``` + +### Ver- und Entschlüsselung + +``` +Verschlüsselung: c = m^e mod n +Entschlüsselung: m = c^d mod n +``` + +Korrektheit folgt aus dem **Satz von Euler**: `m^(φ(n)) ≡ 1 (mod n)`, daher `m^(e·d) ≡ m (mod n)`. + +--- + +## Das Faktorisierungsproblem + +Sicherheit von RSA basiert auf der Annahme, dass es schwer ist, `n = p · q` in seine Primfaktoren zu zerlegen. + +- Multiplikation `p · q → n`: effizient (O(log²n)) +- Faktorisierung `n → p, q`: schwer (bester klassischer Algorithmus: Zahlkörpersieb, subexponentiell aber nicht polynomial) + +**Wichtig**: Faktorisierungsproblem ≠ RSA-Sicherheit direkt. Es ist nicht bewiesen, dass Faktorisierung äquivalent zu RSA-Brechen ist, aber kein besserer Angriff ist bekannt. + +--- + +## Wie misst man Sicherheit? (3. Ansatz: IND-CCA) + +**IND-CCA** (_Indistinguishability under Chosen Ciphertext Attack_) ist das stärkste gängige Sicherheitsmodell für Public-Key-Verschlüsselung. + +Erweiterung des IND-CPA-Spiels: Der Angreifer darf zusätzlich ein **Decryption Oracle** befragen (außer für den Challenge-Ciphertext). + +Setup: + Challenger erzeugt Schlüsselpaar (k_e, k_d) + Challenger schickt öffentlichen Schlüssel k_e an Angreifer + Challenger wählt zufälliges Bit b ∈ {0,1} + +Phase 1 (vor der Challenge): + Angreifer darf beliebige Ciphertexte c₁, c₂, ... an den + Challenger schicken und bekommt die Entschlüsselung zurück. + → Er hat also ein Entschlüsselungsorakel! + +Challenge: + Angreifer schickt zwei Nachrichten (M₀, M₁) an den Challenger + Challenger verschlüsselt M_b (je nach seinem geheimen Bit) + Angreifer bekommt den Ciphertext c zurück + +Phase 2 (nach der Challenge): + Angreifer darf weiterhin Ciphertexte entschlüsseln lassen + ABER: er darf nicht c selbst zum Entschlüsseln schicken! + +Ergebnis: + Angreifer gibt sein Rateversuch b' aus + Er gewinnt, wenn b' = b + +Ein Schema ist **IND-CCA-sicher**, wenn kein effizienter Angreifer einen Vorteil `> negl(n)` hat. + +**Naives RSA (textbook RSA) ist NICHT IND-CPA-sicher**, da es deterministisch ist. Lösung: Padding-Schemata. + +--- + +## OAEP (Optimal Asymmetric Encryption Padding) + +**OAEP** macht RSA probabilistisch und erreicht IND-CCA2-Sicherheit im Random-Oracle-Modell. + +``` +Eingabe: Nachricht m, zufällige Seed r + +X = (m || 0...0) XOR G(r) (G = Pseudozufallsfunktion) +Y = r XOR H(X) (H = Hashfunktion) + +RSA-Input: (X || Y) +``` + +**Entschlüsselung**: RSA anwenden, dann OAEP umkehren. In der Praxis: **RSA-OAEP** aus PKCS#1 v2.x. + +--- + +### ElGamal-Verschlüsselung +Auf Diffie-Hellman basierendes Public-Key-Verfahren (Taher Elgamal, 1985). + +#### Grundidee: + Bei DH einigen sich beide Seiten auf ein gemeinsames Geheimnis. + ElGamal nutzt das aus: Der Sender macht quasi einen "einmaligen DH" + mit dem öffentlichen Schlüssel des Empfängers und maskiert damit + die Nachricht. + +#### Schlüsselgenerierung + Wähle zyklische Gruppe G der Ordnung n mit Generator α + Privater Schlüssel: a (zufällig, 1 ≤ a ≤ n-1) + Öffentlicher Schlüssel: (α, α^a) + → α^a ist wie der öffentliche DH-Anteil des Empfängers + +#### Verschlüsselung (probabilistisch) + Sender will Nachricht m an Empfänger schicken: + + Wähle zufälliges k (1 ≤ k ≤ n-1) ← jedes Mal ein neues! + γ = α^k ← "einmaliger DH-Anteil" des Senders + δ = m · (α^a)^k ← Nachricht maskiert mit dem + gemeinsamen DH-Geheimnis + Ciphertext: (γ, δ) + + Wichtig: Durch das zufällige k ergibt dieselbe Nachricht jedes Mal + einen anderen Ciphertext → probabilistisch, nicht deterministisch + wie rohes RSA. + +#### Entschlüsselung + Empfänger kennt privaten Schlüssel a: + + Berechne γ^a = (α^k)^a = α^(ka) ← gemeinsames DH-Geheimnis + Berechne γ^(-a) ← Inverses davon + m = δ · γ^(-a) ← Maskierung aufheben + +#### Korrektheit: + δ · γ^(-a) = m · (α^a)^k · (α^k)^(-a) + = m · α^(ak) · α^(-ak) + = m + +#### Sicherheit: + - Basiert auf der DDH-Annahme (Decisional Diffie-Hellman): + Es ist nicht unterscheidbar, ob ein Tupel (α, α^a, α^k, α^(ak)) + oder (α, α^a, α^k, zufällig) vorliegt. + - ElGamal ist IND-CPA-sicher unter DDH. + - Aber NICHT IND-CCA-sicher: Ein Angreifer kann aus einem + gültigen Ciphertext (γ, δ) einen neuen gültigen Ciphertext + (γ, δ·m') erzeugen, der m·m' verschlüsselt (Malleability). + +#### Nachteil: + Ciphertext (γ, δ) ist doppelt so lang wie die Nachricht m, + weil zwei Gruppenelemente übertragen werden müssen. + +--- + +## Übersicht: Symmetrische vs. Asymmetrische Kryptographie + +|Eigenschaft|Symmetrisch (z. B. AES, ChaCha20)|Asymmetrisch (z. B. RSA, ElGamal)| +|---|---|---| +|Schlüssel|Ein gemeinsamer geheimer Schlüssel|Schlüsselpaar (öffentlich/privat)| +|Geschwindigkeit|Schnell|Langsam (10–1000× langsamer)| +|Schlüsselaustausch|Problem (sicherer Kanal nötig)|Kein sicherer Kanal nötig| +|Anwendung|Bulk-Datenverschlüsselung|Schlüsselaustausch, Signaturen| +|Praxis|Beide kombiniert in **Hybrid-Kryptographie**|| + +In der Praxis: Asymmetrische Kryptographie tauscht einen Session-Key aus, der dann für symmetrische Verschlüsselung verwendet wird (z. B. TLS Handshake). \ No newline at end of file diff --git a/Kryptografie/zusammenfassungen/kr3 - zusammenfassung.md b/Kryptografie/zusammenfassungen/kr3 - zusammenfassung.md new file mode 100644 index 0000000..3c6df0f --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr3 - zusammenfassung.md @@ -0,0 +1,411 @@ +# KR3 – Zusammenfassung +**Vorlesung:** Kryptographie & Rechnernetze 3 +**Dozent:** Prof. Dr. Björn Grohmann +**Datum:** 02.03.2026 + +--- +## 1. Digitale Signaturen +### Grundprinzip + +Eine digitale Signatur ermöglicht es, die **Integrität**, **Authentizität** und **Non-Repudiation** (Nicht-Abstreitbarkeit) einer Nachricht zu gewährleisten. + +**Ablauf:** + +- **Sender:** Nachricht `M` + `PrivateKey` → Secure Signature Algorithm → `Sign` +- **Empfänger:** Verifiziert mit `PublicKey`, berechnet `Sign'` und prüft `Sign == Sign'` + +### Formale Algorithmen + +|Algorithmus|Funktion| +|---|---| +|`keygen(1^k) → (sk, pk)`|Schlüsselpaar generieren| +|`sign(m, sk) → σ`|Nachricht signieren| +|`verify(σ, m, pk) → d`|Signatur verifizieren| + +### Mögliche Angriffsziele (Adversarial Goals) + +- **Total Break:** Angreifer Oscar kann Alices privaten Signieralgorithmus vollständig ableiten. +- **Selective Forgery:** Oscar kann eine gültige Signatur für eine von jemand anderem gewählte Nachricht erstellen (mit nicht-vernachlässigbarer Wahrscheinlichkeit). +- **Existential Forgery** _(relevant für Praxis)_: Oscar kann eine gültige Signatur für mindestens eine beliebige Nachricht erstellen. + +--- + +## 2. Beispiel: RSA-Signatur + +### Signaturformel + +$$s = m^d \pmod{n}$$ + +- `s` = Signatur +- `m` = zu signierende Nachricht +- `d` = privater Exponent +- `n` = öffentlicher Modulus + +### Existential Forgery Attack gegen RSA + +Oscar kennt Bobs öffentlichen Schlüssel `k_pub = (n, e)`. Er: + +1. Wählt eine beliebige Signatur `s ∈ ℤ_n` +2. Berechnet die „Nachricht": `x ≡ s^e mod n` +3. Präsentiert Alice das Paar `(x, s)` + +Alice verifiziert: `s^e ≡ x' mod n` → da `x' = x` → **gültige Signatur!** + +> ⚠️ RSA ohne Padding ist anfällig für Existential Forgery! + +--- + +## 3. RSA-PSS (Probabilistic Signature Scheme) + +RSA-PSS verhindert die oben genannte Attacke durch gezieltes **Padding** vor der Signatur: + +**Prozess:** + +1. Nachricht `M` wird gehasht → `mHash` +2. `M' = [8 × 0x00 Bytes | mHash | salt]` wird erneut gehasht → `H` +3. `DB = [PS | 0x01 | salt]` +4. `maskedDB = DB ⊕ MGF(H)` (Mask Generation Function) +5. Encoded Message: `EM = [maskedDB | H | TF]` + +--- + +## 4. ECDSA – Elliptic Curve Digital Signature Algorithm + +### Signieren (Alice, Nachricht `m`) + +1. `e = HASH(m)` (z.B. SHA-2) +2. `z` = die `L_n` linksten Bits von `e` +3. Wähle zufälliges `k ∈ [1, n-1]` +4. Berechne Kurvenpunkt: `(x₁, y₁) = k × G` _(G = Generator der EC-Gruppe)_ +5. `r = x₁ mod n` +6. `s = k⁻¹(z + r·d_A) mod n` _(d_A = geheimer Schlüssel von Alice)_ +7. Signatur: `(r, s)` + +### Verifizieren (Bob) + +1. Überprüfe, dass `Q_A` (Alices öffentlicher Schlüssel) ein gültiger Kurvenpunkt ist +2. Berechne `e = HASH(m)`, `z` = linkste `L_n` Bits +3. `u₁ = zs⁻¹ mod n`, `u₂ = rs⁻¹ mod n` +4. `(x₁, y₁) = u₁ × G + u₂ × Q_A` +5. Signatur gültig wenn `r ≡ x₁ (mod n)` + +--- + +## 5. Zertifikate (Certificates) + +### Kernproblem + +> _Wie kann Alice sicher sein, dass ein Public Key wirklich zu Bob gehört?_ + +### Lösung: Certificate Authority (CA) + +Eine vertrauenswürdige Instanz (CA) bestätigt die Identität einer Person und signiert deren Public Key mit ihrem eigenen Private Key. + +**Inhalt eines Zertifikats (X.509):** + +- Name, Organisation, Adresse, Land +- Gültigkeitszeitraum +- Public Key des Inhabers +- Digitale Signatur der CA + +### Zertifikatskette (Chain of Trust) + +``` +Endnutzer-Zertifikat + ← signiert von CA + CA-Zertifikat + ← signiert von Root CA + Root CA (selbstsigniert, vertrauensanker) +``` + +### X.509-Struktur (RFC 5280) + +``` +Certificate ::= SEQUENCE { + tbsCertificate TBSCertificate, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING +} +``` + +### Zertifikatswiderruf + +**CRL (Certificate Revocation List):** Wird periodisch heruntergeladen. +**OCSP (Online Certificate Status Protocol):** Status wird bei Bedarf online abgefragt. + +**Widerrufsgründe (RFC 5280):** `unspecified`, `keyCompromise`, `cACompromise`, `affiliationChanged`, `superseded`, `cessationOfOperation`, `certificateHold`, `removeFromCRL`, `privilegeWithdrawn`, `aACompromise` + +--- + +## 6. Identity-Based Encryption (IBE) + +**Grundidee (Boneh & Franklin, 2001):** Der öffentliche Schlüssel ist die **Identität** (z.B. eine E-Mail-Adresse), kein separater Schlüssel wird benötigt. + +### Beteiligte Instanz: PKG (Private Key Generator) + +- Kennt den Master-Key `sk_PKG` +- Gibt nach Authentifizierung den privaten Schlüssel `sk_ID_Bob` heraus + +### Mathematische Grundlage: Bilineare Abbildung + +Eine bilineare Abbildung `ê: G₁ × G₁ → G₂` mit den Eigenschaften: + +1. **Bilinear:** `ê(aP, bQ) = ê(P, Q)^ab` +2. **Nicht-degeneriert** +3. **Effizient berechenbar** + +### IBE-Algorithmen (Boneh-Franklin) + +- **Setup:** Generiert Parameter `(q, G₁, G₂, ê, n, P, P_pub, H₁, H₂)`, Master-Key `s ∈ ℤ_q*` +- **Extract:** `d_ID = s · Q_ID` wobei `Q_ID = H₁(ID)` +- **Encrypt:** `C = ⟨rP, M ⊕ H₂(g_ID^r)⟩` mit `g_ID = ê(Q_ID, P_pub)` +- **Decrypt:** `V ⊕ H₂(ê(d_ID, U)) = M` + +Das funktioniert, da: `e(d, U) = e(sQ, rP) = e(Q, sP)^r` + +--- + +## 7. Historisches Beispiel: The Babington Plot (1586) + +### Schichtenmodell der Kommunikationssicherheit + +Das historische Beispiel mit Maria Stuart und Anthony Babington illustriert ein **dreischichtiges Sicherheitsmodell**: + +|Schicht|Beschreibung|Akteure| +|---|---|---| +|**Conspiracy Layer**|Inhalt der geheimen Kommunikation|Maria Stuart ↔ Babington| +|**Carrier Layer**|Übertragungsweg|Gilbert Gifford als Bote| +|**Beer Barrel Layer**|Physisches Medium|Bierfass als Versteck| + +### Security der einzelnen Schichten + +**Beer Barrel Layer:** Walsingham kompromittierte das physische Medium (fing die Nachrichten ab). + +**Carrier Layer:** Gilbert Gifford arbeitete als Doppelagent für Walsingham. + +**Conspiracy Layer:** + +- **Verschlüsselung:** Substitutionschiffre (angreifbar durch Frequenzanalyse) +- **Authenticated Encryption:** AES-CTR-Mode + GMAC +- **Schlüsselaustausch:** Diffie-Hellman (`a^x mod p` ↔ `a^y mod p`) +- **Problem:** Man-in-the-Middle-Angriff möglich ohne Authentifizierung +- **Lösung:** Public Key + digitale Signatur `Sign(sk_A, M)` + Zertifikate (PKI) + +--- + +## 8. Transport Layer Security (TLS) + +### Ziel (RFC 8446, TLS 1.3) + +Sicherer Kanal zwischen zwei kommunizierenden Parteien mit: + +- **Authentication:** Server wird immer, Client optional authentifiziert +- **Confidentiality:** Daten nur für Endpunkte sichtbar +- **Integrity:** Manipulationen werden erkannt + +### Einordnung im OSI-Modell + +TLS liegt zwischen **Session/Presentation Layer** (OSI 5/6) und **Transport Layer** (OSI 4): + +``` +Application → TLS/SSL → TCP/UDP → Network → Data Link → Physical +``` + +### TLS-Komponenten + +- **Handshake Layer:** Handshake, Alert, Change Cipher Spec (nur für Kompatibilität in v1.3) +- **Record Layer:** Fragmentierung, Kompression (entfernt in v1.3), Authentifizierung, Verschlüsselung + +### TLS Handshake (vereinfacht) + +``` +Client Server + ClientHello (key_share, etc.) → + ← ServerHello, {EncryptedExtensions}, + {Certificate}, {CertificateVerify}, {Finished} + {Certificate}, {CertificateVerify}, {Finished} → + [Application Data] ↔ [Application Data] +``` + +### TLS Key Exchange Modi + +- **(EC)DHE** – Diffie-Hellman über finite Felder oder elliptische Kurven +- **PSK-only** – Pre-Shared Key +- **PSK mit (EC)DHE** + +### SSL/TLS Versionshistorie + +|Version|Jahr|Status| +|---|---|---| +|SSL 1.0|–|Unveröffentlicht| +|SSL 2.0|1995|Deprecated 2011| +|SSL 3.0|1996|Deprecated 2015| +|TLS 1.0|1999|Deprecated 2021| +|TLS 1.1|2006|Deprecated 2021| +|TLS 1.2|2008|Noch in Nutzung| +|**TLS 1.3**|**2018**|**Aktuell**| + +### Bekannte TLS-Angriffe + +> _"Attacks always get better; they never get worse"_ + +BEAST, POODLE, LOGJAM, RC4 (Harmful?), Heartbleed, LUCKY 13, Raccoon Attack, ALPACA Attack, TLS-RENEGOTIATION, u.v.m. + +### Cipher-Sicherheit (Auswahl) + +- **Sicher in TLS 1.3:** AES-GCM, AES-CCM, ChaCha20-Poly1305 +- **Unsicher/Entfernt:** AES-CBC (abhängig von Mitigations), 3DES, RC4 (verboten in TLS 1.1+) +- **Datenintegrität in TLS 1.3:** Nur AEAD + +### TLS-Anwendungsprotokolle + +|Protokoll|Beschreibung| +|---|---| +|HTTPS|HTTP über TLS/TCP| +|SMTPS|Sicheres Mail-Transfer-Protokoll| +|POP3S|Post-Office-Protokoll (sicher)| +|IMAPS|Internet Message Access (sicher)| +|FTPS|File Transfer (sicher)| +|SIPS|Session Initiation (sicher)| + +--- + +## 9. QUIC + +QUIC kombiniert TLS-Sicherheit mit UDP-basiertem Transport und ersetzt den TCP+TLS-Stack: + +``` +Traditionell: HTTP/2 | TLS | TCP | IP +QUIC: HTTP/2 | QUIC (Multistream, Encryption, Congestion, Reliability) | UDP | IP +``` + +**QUIC-Vorteile:** Eingebettete Verschlüsselung, Multistream, schnellerer Handshake (0-RTT möglich), bessere Performance bei Paketverlusten. + +--- + +## 10. IPSec + +IPSec arbeitet auf **Layer 3 (Network Layer)** des OSI-Modells. + +### Modi + +**Tunnel Mode:** Das gesamte ursprüngliche IP-Paket wird verschlüsselt und in ein neues IP-Paket eingebettet (Gateway zu Gateway). + +### Protokolle + +|Header|Bietet| +|---|---| +|**AH (Authentication Header)**|Authentifizierung des gesamten Pakets (kein Verschlüsseln)| +|**ESP (Encapsulating Security Payload)**|Verschlüsselung + Authentifizierung der Daten| + +--- + +## 11. Quantenmechanik – Grundlagen + +### Relevante Phänomene + +- **Nondeterminismus:** Messung eines Quantenzustands ergibt zufälliges, nicht vorhersagbares Ergebnis → echte Zufallszahlengeneratoren (QRNG) +- **Superposition:** Ein Qubit kann gleichzeitig `|0⟩` und `|1⟩` sein: `1/√2 |alive⟩ + 1/√2 |dead⟩` +- **Verschränkung (Entanglement):** Zwei Qubits sind korreliert, auch über Distanz: `|↑⟩|↑⟩ + |↓⟩|↓⟩` +- **Unschärfe (Uncertainty):** Heisenbergsche Unschärferelation – Ort und Impuls nicht gleichzeitig exakt messbar + +--- + +## 12. Quantum Key Distribution – BB84 Protokoll + +**Erfinder:** Charles Bennett & Gilles Brassard (1984) + +### Ablauf + +1. Alice wählt zufällige Bits und kodiert sie in Photonen (mit zufällig gewählten Basen) +2. Bob misst die Photonen mit zufällig gewählten Basen +3. Alice und Bob vergleichen ihre Basen (öffentlich) +4. Bits mit übereinstimmenden Basen ergeben den **Sifted Key** + +**Sicherheit:** Jede Messung durch Eve verändert den Quantenzustand (Messung = Störung). In 25 % der Fälle führt Eves Abhören zu einem Bitfehler → Eve ist **nachweisbar**. + +### No-Cloning-Theorem + +Quantenzustände können **nicht kopiert** werden → klassische Repeater funktionieren nicht → Lösung: **Quantum Repeater** + +### Satellite-QKD + +BB84 über Satelliten ermöglicht Quantenkommunikation über >1000 km (z.B. Micius-Satellit). + +--- + +## 13. Quantencomputer & Auswirkungen auf Kryptographie + +### Shors Algorithmus + +Peter Shor (1994): Kann **ganzzahlige Faktorisierung** und **diskrete Logarithmen** in **polynomialer Zeit** lösen. + +**Konsequenz:** + +|Algorithmus|Verwendung|Pre-Shor-Sicherheit|Post-Shor-Sicherheit| +|---|---|---|---| +|RSA-3072|Verschlüsselung/Signatur|128 Bit|**keine**| +|DH-3072|Schlüsselaustausch|128 Bit|**keine**| +|DSA-3072|Signatur|128 Bit|**keine**| +|256-bit ECDH/ECDSA|Schlüsselaustausch/Signatur|128 Bit|**keine**| + +### Grovers Algorithmus + +Lov Grover: Findet eine Nadel im Heuhaufen der Größe N in **O(√N)** Schritten. + +**Konsequenz:** Halbierung der effektiven Schlüssellänge symmetrischer Verfahren. + +|Algorithmus|Pre-Grover-Sicherheit|Post-Grover-Sicherheit| +|---|---|---| +|AES-128|128 Bit|**64 Bit**| +|AES-256|256 Bit|128 Bit ✓| +|SHA-256|256 Bit*|128 Bit* ✓| +|SHA-3|256 Bit*|128 Bit* ✓| + +### Simons Algorithmus + +Löst Simons Problem exponentiell schneller als klassische Algorithmen: + +- Klassisch: `Ω(2^(n/2))` Anfragen +- Quantum: `O(n)` Anfragen + +### Im Quantenzeitalter gebrochene Konstruktionen + +Durch quantenbasierte Angriffe (insbesondere via Simons Algorithmus) sind viele klassische Konstruktionen **gebrochen**: + +- Even-Mansour +- 3-Runden-Feistel +- LRW +- CBC-MAC +- GMAC +- PMAC +- GCM +- OCB +- … (und viele weitere) + +> ⚠️ Dies motiviert die Notwendigkeit von **Post-Quantum Cryptography (PQC)**. + +--- + +## Überblick: Key Takeaways + +|Thema|Kernaussage| +|---|---| +|Digitale Signaturen|Bieten Integrität, Authentizität, Non-Repudiation| +|RSA-Signatur|Ohne Padding anfällig für Existential Forgery| +|RSA-PSS|Sicheres Padding schützt vor Forgery-Angriffen| +|ECDSA|Effizientere Alternative zu RSA auf Basis elliptischer Kurven| +|Zertifikate (X.509)|PKI löst das Problem der Public-Key-Authentizität| +|IBE|Identität als öffentlicher Schlüssel, PKG verteilt private Schlüssel| +|TLS 1.3|Modernes Protokoll: AEAD, keine Kompression, PFS durch (EC)DHE| +|QUIC|TLS-Sicherheit direkt in UDP eingebettet, schnellerer Verbindungsaufbau| +|IPSec|Sicherheit auf Netzwerkschicht, Tunnel- und Transportmodus| +|Quantenmechanik|Nondeterminismus, Superposition, Verschränkung als Grundlage für QKD| +|BB84|Quantenschlüsselaustausch, sicher durch No-Cloning-Theorem| +|Shors Algorithmus|Bricht RSA, DH, ECDH, ECDSA vollständig| +|Grovers Algorithmus|Halbiert effektive Schlüssellänge symmetrischer Verfahren| +|Post-Quantum-Krypto|Notwendigkeit neuer quantenresistenter Verfahren| + +--- + +_Tags: #Kryptographie #TLS #Signaturen #RSA #ECDSA #Zertifikate #IBE #QuantumCryptography #BB84 #PostQuantum #HWR_ \ No newline at end of file diff --git a/Kryptografie/zusammenfassungen/kr4 - zusammenfassung.md b/Kryptografie/zusammenfassungen/kr4 - zusammenfassung.md new file mode 100644 index 0000000..7e01661 --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr4 - zusammenfassung.md @@ -0,0 +1,338 @@ +# Zusammenfassung Vorlesung 4 +**Hochschule für Wirtschaft und Recht Berlin – 09.03.2026** **Folien 79–139 (61 Folien)** + +--- +## 1. Komplexitätsklassen-Übersicht (Folien 79, 101) +Die Vorlesung beginnt mit einem Venn-Diagramm der wichtigsten Komplexitätsklassen und ordnet kryptographische Probleme darin ein: + +- **P** liegt im Zentrum als Klasse der effizient lösbaren Probleme. +- **NP** und **Co-NP** umschließen P und überlappen sich teilweise. +- **PP** enthält NP und beherbergt MAJSAT. +- **PSPACE** ist die äußerste dargestellte Klasse und umfasst alle anderen, inklusive LEMMINGS. +- **BQP** (Bounded-Error Quantum Polynomial Time) erstreckt sich als grüne Fläche über mehrere Klassen hinweg – es überlappt mit NP, Co-NP und ragt teils über P hinaus. +- **Co-AM** umfasst große Teile von Co-NP und BQP. + +**Einordnung kryptographischer Probleme:** +- **DLOG** (Diskreter Logarithmus) und **RSA** liegen in der Schnittmenge von NP ∩ Co-NP, nahe an P. +- **SAT** liegt in NP (aber außerhalb von P, sofern P ≠ NP). +- **Co-SAT** liegt in Co-NP. +- **GI** (Graph-Isomorphismus) liegt in NP ∩ Co-AM ∩ BQP. +- **MAJSAT** liegt in PP. +- **LEMMINGS** liegt in PSPACE, aber außerhalb von NP und Co-NP. + +Auf Folie 101 wird das gleiche Diagramm erneut gezeigt, nun ergänzt um **GapSVP_γ** (das zentrale Gitterproblem). Je nach Approximationsfaktor γ wandert GapSVP_γ zwischen verschiedenen Komplexitätsklassen: Bei γ ~ 1 liegt es nahe an NP-hart, bei γ ~ √n oder größer nähert es sich P an. Die dargestellten Werte sind γ ~ 1, 2^{(log n)^{1-ε}}, √(n/log n), √n und 2^{n(log log n)²/log n}. + +--- +## 2. PQC-Strategien – Überblick (Folie 80) +Post-Quantum Cryptography (PQC) verfolgt verschiedene Ansätze, um Kryptographie gegen Quantencomputer abzusichern: + +- **Lattice-based** (Gitter-basiert) +- **Code-based** (Code-basiert) +- **Multivariate polynomials** (Multivariate Polynome) +- **Isogenies** (Isogenien) +- **Hash-based** (Hash-basiert) +- **Trotziges Kind** (humorvolle Bezeichnung für den „PQ-RSA"-Ansatz) +- **MPC in the Head** +- und weitere + +--- + +## 3. „Trotziges Kind" – PQ-RSA (Folie 81) +Der Ansatz „Trotziges Kind" beschreibt die Idee, RSA einfach mit extrem großen Parametern weiterzuverwenden, anstatt auf neue Algorithmen umzusteigen: + +- **PQ-RSA**: RSA mit einem Modulus von ca. **1 Terabyte**, zusammengesetzt als Produkt von **4096-Bit-Primzahlen**. +- **Kosten für einen Quantenangreifer**: ca. **2^100** Operationen. +- **Kosten für den Besitzer des geheimen Schlüssels**: ca. **2^50** Operationen. + +Dieser Ansatz ist zwar theoretisch sicher, aber aufgrund der enormen Schlüsselgrößen praktisch kaum umsetzbar. + +--- +## 4. Hash-basierte Kryptographie (Folien 82–85) + +### Grundprinzip (Folie 82) +Bei hash-basierten Signaturen besteht das Schlüsselpaar aus: +- **Öffentlicher Schlüssel**: Paar von Hash-Werten h(x) || h(y) +- **Privater Schlüssel**: Das Paar (x, y) selbst + +### Merkle-Baum (Folie 83) +Ein binärer Hash-Baum wird dargestellt mit Ebenen j = 0 (Blätter) bis j = h (Wurzel). Die Blätter enthalten Einmal-Signaturen (z. B. Lamport- oder Winternitz-Signaturen). Die inneren Knoten werden durch Hashing ihrer Kindknoten berechnet. Ein Authentifizierungspfad (grau markierte Knoten) ermöglicht die Verifikation. + +### XMSS-Konstruktion (Folie 84) +Die erweiterte Darstellung zeigt die Konstruktion des Knotens N_{i,j}: +- Zwei Kindknoten N_{2i,j-1} und N_{2i+1,j-1} werden zusammen mit einer Bitmaske Q_j per XOR verknüpft. +- Das Ergebnis wird gehasht (H), um den Elternknoten zu erzeugen. + +### SPHINCS-Hypertree (Folie 85) +SPHINCS verwendet eine hierarchische Baumstruktur: +- Mehrere TREE-Ebenen (TREE_{d-1}, TREE_{d-2}, ..., TREE_0) mit jeweils Höhe h/d. +- Jede Ebene signiert die nächste mit einer Winternitz-Signatur (σ_{W,i}). +- Am Ende steht ein HORST-Baum (Höhe log t) mit der eigentlichen Nachrichtensignatur σ_H. + +--- + +## 5. Isogenien-basierte Kryptographie (Folien 86–89) + +### Elliptische Kurven (Folie 86) +Grundlage ist die Punktaddition auf elliptischen Kurven: Gegeben zwei Punkte P und Q auf einer Kurve, ergibt die geometrische Konstruktion (Gerade durch P und Q, Schnittpunkt mit der Kurve, Spiegelung) den Punkt R = P + Q. + +### Skalare Multiplikation (Folie 87) +Die Abbildung [n]: E → E multipliziert einen Punkt n-mal mit sich selbst: [n]P = P + P + ... + P (n-mal). Als Beispiel wird die Kurve E: y² = x³ + x gezeigt, für die die Verdopplungsabbildung [2] durch eine explizite rationale Funktion gegeben ist. + +### Isogenien (Folie 88) +Eine Isogenie φ: E → E' ist ein Gruppenhomomorphismus zwischen elliptischen Kurven, gegeben durch rationale Funktionen: φ(x,y) = (f₁(x,y)/g₁(x,y), f₂(x,y)/g₂(x,y)). + +### SIDH-Schlüsselaustausch (Folie 89) +Das Protokoll funktioniert analog zu Diffie-Hellman, aber mit Isogenien statt Exponentialfunktionen: + +- Alice sendet (Φ_A(E), Δ_A) an Bob. +- Bob sendet (Φ_B(E), Δ_B) an Alice. +- Beide berechnen denselben j-Invarianten als gemeinsames Geheimnis: j(Φ'_A(Φ_B(E))) = k = j(Φ'_B(Φ_A(E))). + +--- + +## 6. Multivariate Polynome (Folien 90–92) + +### Hilberts 10. Problem (Folie 90) +Die Folie zeigt ein Porträt von Hilbert und zitiert sein 10. Problem (auf Deutsch): Gegeben eine diophantische Gleichung, soll ein Verfahren angegeben werden, das in endlich vielen Schritten entscheidet, ob sie ganzzahlig lösbar ist. (Dieses Problem ist bekanntlich unentscheidbar – Matijasevic, 1970.) + +### MQ-Problem (Folie 91) + +Das System besteht aus m quadratischen Polynomen in n Variablen über einem endlichen Körper 𝔽_q: + +p^(k)(x₁,...,xₙ) = Σ γ_{ij}^(k) xᵢxⱼ + Σ β_i^(k) xᵢ + α^(k) + +Das **MQ-Problem** (Multivariate Quadratic): Gegeben eine quadratische Polynomabbildung 𝒫: 𝔽_q^n → 𝔽_q^m, finde x ∈ 𝔽_q^n mit 𝒫(x) = 0. Dieses Problem ist NP-hart. + +### Oil-and-Vinegar-Konstruktion (Folie 92) +Die Signatur basiert auf einer Trapdoor-Struktur: + +- **Öffentlicher Schlüssel**: Die zusammengesetzte Abbildung 𝒫(x) = h(m), wobei 𝒫 = T ∘ 𝒬 ∘ S. +- T und S sind geheime affine Transformationen (invertierbar). +- 𝒬 ist ein System mit spezieller Struktur, das effizient invertierbar ist. +- Die „Oil-and-Vinegar"-Variablen (symbolisiert durch Öl- und Essigflaschen) erzeugen die Trapdoor. + +--- + +## 7. Code-basierte Kryptographie (Folien 93–95) + +### Binary Symmetric Channel (Folie 93) +Die Folie zeigt ein Porträt von Claude Shannon und das Modell eines binären symmetrischen Kanals: Bits werden mit Wahrscheinlichkeit (1-p) korrekt übertragen und mit Wahrscheinlichkeit p verfälscht. + +### Syndrome-Decoding / Coset Weights (Folie 94) + +Grundlegende Konstruktion: +- Ein Codewort c gehört zum Code 𝒞 ⊆ 𝔽₂ⁿ genau dann, wenn cH = 0 (H ist die Prüfmatrix). +- Ein empfangenes Wort (c + e) hat das Syndrom s = eH. +- **Coset-Weights-Problem**: Gegeben s und H, finde x mit Gewicht ν(x) ≤ t und xH = s. + +### McEliece-Kryptosystem (Folie 95) +- **Öffentlicher Schlüssel**: H* = PHS, wobei P eine Permutationsmatrix und S eine invertierbare Matrix ist. +- **Verschlüsselung**: c = mH* +- **Entschlüsselung**: m = δ_H(cS⁻¹)P⁻¹, wobei δ_H der effiziente Dekodieralgorithmus für den geheimen Code ist. + +Die Sicherheit beruht darauf, dass das allgemeine Dekodierungsproblem NP-hart ist, während der Besitzer von P, H und S effizient dekodieren kann. + +--- +## 8. Gitter-basierte Kryptographie (Folien 96–103) + +### Gitter-Grundlagen (Folien 96–99) +Ein Gitter wird durch Basisvektoren b₁ und b₂ aufgespannt. Die Punkte bilden ein regelmäßiges Muster im Raum. + +- **Folie 97**: Das Closest Vector Problem (CVP) wird illustriert – ein Punkt (rot markiert) nahe einem Gitterpunkt soll dem nächsten Gitterpunkt zugeordnet werden. +- **Folie 98**: Basisreduktion wird gezeigt – der Vektor b₁ - b₂ (rot) ist kürzer als b₁ und liefert eine „bessere" Basis. +- **Folie 99**: Das Shortest Vector Problem (SVP) wird visualisiert – der kürzeste Nicht-Null-Vektor im Gitter liegt in einem Ring (Donut-förmige Region) um den Ursprung. + +### GapSVP_γ (Folie 100) +Das Entscheidungsproblem GapSVP_γ ist formal definiert: + +- **Eingabe**: Basis **B**, Distanz d. +- **Ausgabe**: „Yes", falls λ(**B**) ≤ d; „No", falls λ(**B**) > γd; sonst beliebig. + +### Worst-Case zu Average-Case Reduktion (Folie 102) +Ein zentraler Vorteil gitter-basierter Kryptographie: Es existieren **Worst-Case-zu-Average-Case-Reduktionen** von GapSVP_γ zu den Problemen **LWE** (Learning With Errors) und **SIS** (Short Integer Solution) für γ = poly(n). Das bedeutet: Wenn LWE/SIS im Durchschnitt leicht wäre, wäre GapSVP im schlimmsten Fall leicht – was als unwahrscheinlich gilt. + +### Regev's Public-Key-Kryptosystem (Folie 103) +Ein konkretes Beispiel basierend auf LWE: + +- **Privater Schlüssel**: s ∈ ℤ_q^n, zufällig gewählt. +- **Öffentlicher Schlüssel**: m Paare (aᵢ, bᵢ) mit bᵢ = ⟨aᵢ, s⟩/q + eᵢ, wobei eᵢ aus einer Fehlerverteilung χ stammt und 𝕋 = ℝ/ℤ. +- **Verschlüsselung** eines Bits x: Wähle eine zufällige Teilmenge S ⊂ [m], berechne Enc(x) = (Σᵢ∈S aᵢ, x/2 + Σᵢ∈S bᵢ). +- **Entschlüsselung**: Prüfe, ob b - ⟨a, s⟩/q näher an 0 oder an 1/2 liegt. + +Das LWE-Problem besteht darin, s aus den verrauschten Skalarprodukt-Samples zu bestimmen. + +--- + +## 9. Wie dringend ist die Quantenbedrohung? (Folien 104–107) +### Moscas Theorem (Folie 105) +Drei Zeitparameter werden definiert: + +- **x**: Wie lange muss die Verschlüsselung sicher bleiben? +- **y**: Wie lange dauert die Umstellung bestehender Infrastruktur auf quantensichere Lösungen? +- **z**: Wie lange dauert es, bis ein großskaliger Quantencomputer gebaut wird? + +**Moscas Theorem**: Falls **x + y > z**, dann sollte man sich **jetzt** Sorgen machen. Denn wenn die Umstellungszeit plus die Geheimhaltungsdauer die Zeit bis zum Quantencomputer übersteigt, sind heutige Daten bereits gefährdet („Harvest now, decrypt later"). + +### Gartner Hype Cycles (Folien 106–107) +- **2017**: Quantum Computing befindet sich am Anfang des „Innovation Trigger", mit einer geschätzten Reife von „mehr als 10 Jahren". +- **2018**: Quantum Computing ist weiter aufgestiegen (Richtung „Peak of Inflated Expectations"), die Reifeschätzung bleibt bei „5–10 Jahren". + +--- + +## 10. NIST PQC-Standardisierung (Folie 108) +- **1. Runde** startete im November 2017 mit **69 Kandidaten**. +- **Ausgewählte Algorithmen** (2022): + - **CRYSTALS-Kyber** – Key Encapsulation Mechanism (KEM) + - **CRYSTALS-Dilithium** – Digitale Signatur (DSA) + - **Falcon** – Digitale Signatur (DSA) + - **SPHINCS+** – Digitale Signatur (DSA) +- **2022–2024**: Entwürfe der Standards wurden veröffentlicht. + +--- + +## 11. Drei Dimensionen des Datenschutzes (Folie 109) +Daten existieren in drei Zuständen, die jeweils unterschiedliche Schutzziele erfordern: + +- **Data at rest** (Daten in Ruhe): Vertraulichkeit, Integrität, ... +- **Data in transit** (Daten in Übertragung): Vertraulichkeit, Integrität, Authentizität, ... +- **Data in use** (Daten in Verarbeitung): Vertraulichkeit, ... + +Das Modell zeigt den Datenfluss: Quelldaten (Input Parties) → Statistische Analyse (Computing Parties) → Statistische Produkte (Result Parties). + +--- + +## 12. Weitere Schutzziele (Folien 110–111) +Über die klassischen Schutzziele hinaus gibt es: + +- **Input Privacy**: Schutz der Eingabedaten der Datenlieferanten. +- **Output Privacy**: Schutz der Ergebnisse vor unberechtigtem Zugriff. +- **Policy Enforcement**: Durchsetzung von Nutzungsregeln. + +Das Diagramm auf Folie 111 zeigt diese drei Ziele im Kontext des Datenflusses: Input Privacy umschließt die Quelldaten, Output Privacy die statistischen Produkte, und Policy Enforcement umrahmt das Gesamtsystem. + +--- + +## 13. Privacy Goals and Technologies (Folie 112) +Ein Venn-Diagramm zeigt die Beziehung zwischen den drei Privacy-Zielen und Technologien: + +- **Policy Enforcement** wird durch _Non-Disclosure Agreements_ (NDAs) und ähnliche vertragliche Maßnahmen adressiert. +- **Input Privacy** und **Output Privacy** überlappen sich im Bereich der _Aggregation_ (statistische Zusammenfassung als Datenschutzmaßnahme). + +--- + +## 14. Homomorphe Verschlüsselung (Folien 113–125) +### Grundidee (Folien 113–117) +Die zentrale Frage: „Kann man nicht auch auf verschlüsselten Daten rechnen?" + +Homomorphe Verschlüsselung ermöglicht es, eine Funktion f auf verschlüsselten Daten auszuführen, ohne die Daten zu entschlüsseln: + +- Aus **Enc(m)** wird direkt **Enc(f(m))** berechnet. +- Die Kerngleichung: **Enc(m₁) ⋆ Enc(m₂) = Enc(m₁ ∘ m₂)**, wobei ⋆ eine Operation auf Chiffretexten und ∘ die entsprechende Operation auf Klartexten ist. + +### Klassifizierung (Folie 118) +Es gibt drei Stufen homomorpher Verschlüsselung, dargestellt als Trade-off zwischen Performance und Funktionalität: + +- **PHE** (Partially Homomorphic Encryption): Unterstützt **eine Operation** (z. B. nur Addition oder nur Multiplikation), diese aber beliebig oft. Höchste Performance. +- **SWHE** (Somewhat Homomorphic Encryption): Unterstützt **zwei Operationen**, mindestens eine davon ist in der Anzahl beschränkt. +- **FHE** (Fully Homomorphic Encryption): Volle, unbeschränkte Funktionalität für beliebige Berechnungen. Niedrigste Performance. + +### Beispiel: RSA als PHE (Folie 119) +RSA ist multiplikativ homomorph: + +- E(M₁) · E(M₂) = E(M₁ · M₂) +- Das Produkt zweier Chiffretexte entspricht dem Chiffretext des Produkts der Klartexte. +- RSA unterstützt also beliebig viele Multiplikationen auf Chiffretexten. + +### Beispiel: Paillier als PHE (Folien 120–121) +Paillier ist **additiv homomorph**: + +- Schlüsselerzeugung: n = p·q, g = n+1, λ = φ(n), μ = φ(n)⁻¹ mod n. +- Verschlüsselung: c = g^m · r^n mod n². +- Entschlüsselung: m = L(c^λ mod n²) · μ mod n, mit L(x) = (x-1)/n. +- **Homomorphe Eigenschaft**: D(E(m₁,r₁) · E(m₂,r₂) mod n²) = m₁ + m₂ mod n. +- Das Produkt zweier Chiffretexte entspricht der **Summe** der Klartexte. + +### Beispiel: SWHE (Folien 122–123) +Ein einfaches SWHE-Schema wird vorgestellt: + +- **Verschlüsselung** eines Bits b: c₁ = b₁ + 2r₁ + r₂p, wobei b das Nachrichtenbit, r₁ und r₂ zufällige Werte und p eine geheime Primzahl sind. +- **Entschlüsselung**: Erst modulo p (entfernt r₂p), dann modulo 2 (entfernt 2r₁), ergibt b. +- **Addition**: c₁ + c₂ = b₁ + b₂ + 2(r₁ + s₁) + p(r₂ + s₂) → Berechnung in GF(2), also XOR der Klartextbits. +- **Multiplikation**: c₁ · c₂ = b₁b₂ + 2(…) + p(…) → AND der Klartextbits. +- **Einschränkung**: Die Fehlerwerte wachsen bei Multiplikation, daher ist die Tiefe der Berechnungen beschränkt (Anforderungen an die Intervalle der r's und s's). + +### HE vs. Klassischer Ansatz (Folien 124–125) +**Klassisch** (Folie 124): Daten werden verschlüsselt übertragen, aber für die Verarbeitung entschlüsselt. Der Server sieht die Klartextdaten. + +**Homomorphe Verschlüsselung** (Folie 125): Daten bleiben durchgehend verschlüsselt. Der Evaluationsalgorithmus arbeitet auf verschlüsselten Daten und liefert verschlüsselte Ergebnisse zurück. Nur der Datenbesitzer kann mit seinem privaten Schlüssel entschlüsseln. Mehrere verschlüsselte Datensätze können kombiniert werden, ohne dass der Verarbeiter die Rohdaten sieht. + +--- + +## 15. Multi-Party Computation – MPC (Folien 126–132) +### Millionärsproblem (Folie 126) + +Die Motivationsfrage (in Anlehnung an Yaos Millionärsproblem): „Wie können Lucy und Linus herausfinden, wer von beiden mehr Bonbons besitzt, ohne die Anzahl ihrer Bonbons preiszugeben?" + +### Grundmodell (Folien 127–129) +- **Ideales Modell** (Folie 128): Beide Parteien senden ihre geheimen Eingaben A und B an eine vertrauenswürdige dritte Partei, die f(A, B) berechnet und das Ergebnis zurückgibt. +- **Reales Modell** (Folie 129): Die zentrale Frage: „Geht das auch ohne vertrauenswürdige dritte Partei?" – Ja, durch kryptographische Protokolle können die Parteien gemeinsam f(A, B) berechnen, ohne ihre Eingaben preiszugeben. + +### Dating-Problem (Folien 130–132) + +Ein weiteres anschauliches Beispiel: „Wie können Lucy und Linus herausfinden, ob beide zusammen zum Fasching gehen wollen, ohne sich ‚einen Korb' zu holen?" + +**Lösung mit Spielkarten** (Folien 131–132): +- Lucy und Linus kodieren ihre Antwort (Ja/Nein) durch die Reihenfolge zweier Karten (Linus-Karte und Lucy-Karte): + - „Ja, ich will" → Linus-Karte links, Lucy-Karte rechts. + - „Auf keinen Fall" → Lucy-Karte links, Linus-Karte rechts. +- Die Karten werden verdeckt gelegt und dann aufgedeckt: + - Wenn beide „Ja" gewählt haben, ergibt sich ein bestimmtes Muster → „Lass uns zusammen gehen". + - In allen anderen Fällen kann keiner ableiten, was der andere gewählt hat → „Danke, und nichts für ungut". + +--- + +## 16. Oblivious Transfer – OT (Folien 133–139) + +### Definition nach Rabin (Folie 133) +Rabin definierte 1981 den „Oblivious Transfer": Eine Informationsübertragung, bei der der Sender nicht weiß, ob der Empfänger die Information tatsächlich erhalten hat. + +### Drei Varianten (Folien 134–135) +- **Definition 1 (O.T.)**: Alice kennt ein Bit b. Bob erhält b mit Wahrscheinlichkeit 1/2. Bob weiß, ob er b erhalten hat. Alice weiß nicht, ob Bob b erhalten hat. +- **Definition 2 (1-out-of-2 O.T.)**: Alice kennt zwei Bits b₀ und b₁. Bob erhält genau eines davon (b_k), jeweils mit Wahrscheinlichkeit 1/2 für k=0 oder k=1. Bob weiß, welches er erhalten hat. Alice weiß nicht, welches Bob erhalten hat. +- **Definition 3 (p-O.T.)**: Wie Definition 1, aber Bob erhält b mit beliebiger Wahrscheinlichkeit p. + +### Protokoll für 1-out-of-2 O.T. (Folie 136) +Ein konkretes Protokoll wird beschrieben: Alice und Bob einigen sich auf einen Sicherheitsparameter s. Alice nutzt wiederholte p-O.T.-Aufrufe, Bob teilt die Indizes in zwei Mengen U und V und sendet eine (möglicherweise vertauschte) Version an Alice. Alice berechnet daraus maskierte Versionen beider Bits, von denen Bob genau eines entschlüsseln kann. + +### DH-basiertes O.T.-Protokoll (Folie 137) +Ein elegantes Protokoll auf Basis des Diffie-Hellman-Problems: + +- Der Sender hat Eingabe (M₀, M₁), der Empfänger hat Auswahlbit c. +- Der Sender wählt a, sendet A = g^a. +- Der Empfänger wählt b und setzt B = g^b (falls c=0) oder B = Ag^b (falls c=1). +- Beide berechnen Schlüssel: Der Sender k₀ = H(B^a) und k₁ = H((B/A)^a); der Empfänger k_R = H(A^b). +- Der Empfänger kann genau M_c entschlüsseln, da k_R = k_c. + +### Alternatives O.T.-Protokoll (Folie 138) +Ein weiteres Protokoll basierend auf Public-Key-Verschlüsselung, bei dem die Sicherheit darauf beruht, dass ein Chiffretext nicht von einem Nicht-Chiffretext unterschieden werden kann. + +### Abschluss (Folie 139) +Die Vorlesung endet mit einem Zitat von Benjamin Franklin (1783): „À quoi bon l'enfant qui vient de naître?" – „Was nutzt das Kind, das gerade geboren wird?" – als philosophische Reflexion über den Nutzen neuer kryptographischer Primitive. + +--- + +## Zusammenfassung der Kernthemen + +|Thema|Kernaussage| +|---|---| +|Komplexitätsklassen|Kryptographische Sicherheit basiert auf der vermuteten Schwierigkeit bestimmter Probleme in NP| +|PQ-RSA|Theoretisch möglich, aber unpraktisch wegen Terabyte-großer Schlüssel| +|Hash-basiert|Sicherheit basiert nur auf Hashfunktionen; SPHINCS+ ist NIST-standardisiert| +|Isogenien|Eleganter Ansatz analog zu Diffie-Hellman, aber SIKE wurde 2022 gebrochen| +|Multivariate Polynome|MQ-Problem ist NP-hart; Oil-and-Vinegar als Trapdoor-Konstruktion| +|Code-basiert|McEliece-Kryptosystem seit 1978; basiert auf Syndrome-Decoding| +|Gitter-basiert|Stärkstes theoretisches Fundament durch Worst-Case-Reduktionen; CRYSTALS-Kyber/Dilithium standardisiert| +|Mosca-Theorem|x + y > z → jetzt handeln| +|Homomorphe Verschlüsselung|Rechnen auf verschlüsselten Daten; PHE → SWHE → FHE| +|Multi-Party Computation|Gemeinsame Berechnung ohne Preisgabe der Eingaben| +|Oblivious Transfer|Fundamentaler Baustein für MPC-Protokolle| \ No newline at end of file diff --git a/Kryptografie/zusammenfassungen/kr5 - zusammenfassung.md b/Kryptografie/zusammenfassungen/kr5 - zusammenfassung.md new file mode 100644 index 0000000..a62a960 --- /dev/null +++ b/Kryptografie/zusammenfassungen/kr5 - zusammenfassung.md @@ -0,0 +1,291 @@ +# Zusammenfassung Vorlesung 5 +**Hochschule für Wirtschaft und Recht Berlin – 16.03.2026** **Folien 65–105 (41 Folien)** + +--- +## 1. Yao's Millionärsproblem (Folie 65) + +Das **Yao's Millionaires Problem** (Andrew Yao, 1982) ist das klassische Motivationsbeispiel für Secure Multi-Party Computation: Zwei Millionäre möchten herausfinden, wer reicher ist, ohne ihre jeweiligen Vermögen preiszugeben. Die Lösung dieses Problems führte zur Entwicklung von **Garbled Circuits**. + +--- + +## 2. Garbled Circuits (Folien 66–70) + +### Grundprinzip (Folien 66–68) + +Garbled Circuits (auch „Yao's Garbled Circuits") sind ein Verfahren, um beliebige Funktionen als Boolesche Schaltkreise sicher zwischen zwei Parteien auszuwerten: + +1. **Alice (Garbler)** erstellt den Schaltkreis: + - Für jedes Gate im Schaltkreis wird eine **verschlüsselte Wahrheitstabelle** erzeugt. + - Jeder Draht erhält zwei zufällige Labels (eines für 0, eines für 1). + - Die Zeilen der Wahrheitstabelle werden mit den Input-Labels verschlüsselt und dann **zufällig permutiert** (damit die Reihenfolge keine Information verrät). + +2. **Bob (Evaluator)** wertet den Schaltkreis aus: + - Er erhält den „garbled circuit" und kann genau eine Zeile pro Gate entschlüsseln. + - Er lernt nur das Ergebnis, nicht die Zwischenwerte. + +### Eingaben (Folie 69) + +- **Alice** codiert ihre eigenen Eingaben, indem sie die entsprechenden Labels direkt einsetzt. +- **Bob wählt seine Eingaben via Oblivious Transfer (OT)**: Er erhält genau die Labels für seine Eingabebits, ohne dass Alice erfährt, welche Bits Bob gewählt hat. Alice wiederum kennt nicht die Labels, die Bob erhalten hat. + +### Sicherheit (Folie 70) + +- **Alice** lernt nichts über Bobs Eingabe (durch OT geschützt). +- **Bob** lernt nichts über Alices Eingabe (durch die Garbled-Tabellen geschützt). +- Beide lernen nur das Ergebnis der Funktion f(A, B). + +--- + +## 3. Arithmetic Circuits (Folie 71) + +Während Garbled Circuits auf **Booleschen Schaltkreisen** (AND, OR, XOR Gates) arbeiten, nutzen **Arithmetic Circuits** arithmetische Operationen: + +- Operationen über einem endlichen Körper (oder Ring): **Addition (+)** und **Multiplikation (×)**. +- Arithmetic Circuits sind besonders effizient für Berechnungen, die natürlicherweise arithmetisch formuliert sind (z. B. Summen, Durchschnitte, Polynomauswertungen). +- Sie bilden die Grundlage für MPC-Protokolle auf Basis von **Secret Sharing**. + +--- + +## 4. Additive Secret Sharing (Folien 72–73) + +### Grundprinzip (Folie 72) + +Beim **Additive Secret Sharing** wird ein Geheimnis x in n Anteile (Shares) aufgeteilt: + +- **Aufteilen**: Wähle zufällige Werte x₁, x₂, ..., x_{n-1} und setze x_n = x - (x₁ + x₂ + ... + x_{n-1}). +- **Rekonstruktion**: x = x₁ + x₂ + ... + x_n (alle Shares zusammen ergeben das Geheimnis). +- **Sicherheit**: Jede echte Teilmenge der Shares verrät **keinerlei Information** über x (informationstheoretische Sicherheit). + +### Addition mit Shares (Folie 73) + +Addition ist trivial möglich: +- Gegeben Shares [x] = (x₁, ..., x_n) und [y] = (y₁, ..., y_n). +- [x + y] = (x₁ + y₁, ..., x_n + y_n) – jede Partei addiert lokal ihre Shares. +- **Addition mit einer Konstanten c**: Nur der **erste** Share wird angepasst: (x₁ + c, x₂, ..., x_n). + +**Problem**: Multiplikation ist nicht trivial, da das Produkt zweier Shares nicht direkt das Share des Produkts ergibt. + +--- + +## 5. Beaver Triples (Folien 74–75) + +### Idee (Folie 74) + +**Beaver Triples** (Donald Beaver, 1991) lösen das Multiplikationsproblem im Secret Sharing: + +Ein **Beaver Triple** ist ein vorberechnetes Tripel ([a], [b], [c]) mit c = a · b, wobei a und b zufällig sind. + +### Multiplikationsprotokoll (Folie 75) + +Um [x · y] zu berechnen: + +1. Die Parteien öffnen (offenbaren) **d = x - a** und **e = y - b** (da a und b zufällig sind, verraten d und e nichts über x und y). +2. Berechne: **x · y = d · e + d · [b] + e · [a] + [c]** + - d · e ist eine öffentliche Konstante. + - d · [b] und e · [a] sind Multiplikationen mit öffentlichen Konstanten (einfach). + - [c] ist bereits als Share vorhanden. + +**Formaler Zusammenhang**: Falls w = x · y + r₁ und c = a · b + r₂, dann ist h = r · r₁ - r₂ (die Korrektur zwischen den Fehlertermen). + +**Vorteil**: Die aufwändige Erzeugung der Triples kann in einer **Offline-Phase** (vor der eigentlichen Berechnung) stattfinden, z. B. mittels Homomorpher Verschlüsselung oder Oblivious Transfer. + +--- + +## 6. SPDZ-Protokoll (Folie 76) + +**SPDZ** (ausgesprochen „Speedz") wurde 2012 von Ivan Damgård, Valerio Pastro, Nigel P. Smart und Sarah Zakarias vorgestellt. + +Es ist eines der wichtigsten praktischen MPC-Protokolle und kombiniert: + +- **Additive Secret Sharing** für die Online-Phase. +- **Beaver Triples** für Multiplikationen. +- **MACs** (Message Authentication Codes) auf den Shares zur Sicherstellung von **Integrität** (Schutz gegen aktive/malicious Angreifer). +- Eine **Offline-Phase** zur Erzeugung der vorberechneten Materialien (Triples, MACs), z. B. mittels Somewhat Homomorphic Encryption. + +**Eigenschaften**: +- Unterstützt **beliebig viele Parteien** (n ≥ 2). +- Sicher gegen **aktive Angreifer**, die bis zu n-1 Parteien korrumpieren. +- Effiziente Online-Phase, da nur einfache Additionen und vorberechnete Multiplikationen nötig sind. + +--- + +## 7. Zero Knowledge Proofs (Folien 77–91) + +### Motivation (Folie 78) + +Zero Knowledge Proofs beantworten fundamentale Fragen: +- „Kann man beweisen, dass man **älter als 18** ist, ohne sein Geburtsdatum preiszugeben?" +- „Kann man beweisen, dass man **kreditwürdig** ist, ohne seinen Kontostand preiszugeben?" +- „Kann man beweisen, dass man die **Lösung** für ein Problem hat, ohne die Lösung preiszugeben?" + +### Drei Eigenschaften (Folie 79) + +Ein Zero Knowledge Proof muss drei Eigenschaften erfüllen: + +| Eigenschaft | Bedeutung | +|---|---| +| **Completeness** (Vollständigkeit) | Wenn die Aussage wahr ist, wird der Verifier überzeugt | +| **Soundness** (Korrektheit) | Wenn die Aussage falsch ist, kann der Prover den Verifier nicht überzeugen | +| **Zero Knowledge** | Der Verifier lernt **nichts anderes** außer der Tatsache, dass die Aussage wahr ist | + +### Interaktives Protokoll (Folie 80) + +Ein Zero Knowledge Proof ist ein interaktives Protokoll zwischen: +- **Prover (P)**: Besitzt das Geheimnis und möchte die Wahrheit einer Aussage beweisen. +- **Verifier (V)**: Möchte sich von der Wahrheit überzeugen, ohne das Geheimnis zu erfahren. + +Das Protokoll besteht aus mehreren Runden von Challenges und Responses. + +### Beispiel: Graph-Isomorphismus (Folien 81–85) + +**Problem**: Der Prover kennt einen Isomorphismus π zwischen zwei Graphen G₀ und G₁ (d. h. G₁ = π(G₀)) und möchte dies beweisen, ohne π preiszugeben. + +**Protokoll**: +1. **Prover** wählt eine zufällige Permutation σ und berechnet H = σ(G_b) für ein zufällig gewähltes b ∈ {0, 1}. +2. **Prover** sendet H an den Verifier. +3. **Verifier** sendet ein Challenge-Bit c ∈ {0, 1}. +4. **Prover** antwortet mit dem passenden Isomorphismus: + - Falls c = b: sendet σ. + - Falls c ≠ b: sendet σ ∘ π (oder σ ∘ π⁻¹). +5. **Verifier** prüft, ob die Antwort H korrekt auf G_c abbildet. + +**Warum Zero Knowledge?** Der Prover kann sich in jeder Runde neu aussuchen, welchen Graphen er als Basis wählt. Falls die Graphen **nicht** isomorph wären, würde der Prover schnell erwischt werden (Soundness). Nach vielen Runden ist die Wahrscheinlichkeit eines Betrugs exponentiell klein: (1/2)^n. + +### Weitere ZK-Protokolle (Folien 86–89) + +Auf den folgenden Folien werden Zero Knowledge Proofs für verschiedene Probleme skizziert: + +| Problem | Public | Secret | +|---|---|---| +| **Graph-Isomorphismus** (Folie 85) | Die beiden Graphen G₀, G₁ | Der Isomorphismus π | +| **Quadratic Residues** (Folie 86) | n, y | x mit x² ≡ y mod n | +| **Diskreter Logarithmus** (Folie 87) | g, h = g^x | x (der diskrete Logarithmus) | +| **Signatur-Schema** (Folie 89) | Public Key | Secret Key | + +Die Struktur ist stets ähnlich: Der Prover demonstriert Kenntnis des Geheimnisses durch ein Challenge-Response-Protokoll, ohne das Geheimnis selbst zu offenbaren. + +### MPC in the Head (Folien 90–91) + +**MPC in the Head** ist eine Technik, um Zero Knowledge Proofs aus MPC-Protokollen zu konstruieren: + +1. Der Prover **simuliert** ein MPC-Protokoll im Kopf (d. h. er spielt alle Parteien selbst). +2. Er teilt sein Geheimnis in Shares auf und führt das Protokoll virtuell durch. +3. Der Verifier wählt eine Teilmenge der virtuellen Parteien aus und überprüft deren Transkripte. +4. Da der Verifier nicht alle Parteien sieht, kann er das Geheimnis nicht rekonstruieren (Zero Knowledge). +5. Da der Prover sich auf die Transkripte festgelegt hat (Commitment), kann er nicht betrügen (Soundness). + +**Vorteil**: Jedes MPC-Protokoll kann automatisch in einen ZK-Proof umgewandelt werden. + +--- + +## 8. Differential Privacy (Folien 92–101) + +### Motivation (Folien 92–93) + +Die zentrale Frage: „Wie bringt man Marcie dazu, eine **Tabu-Frage** wahrheitsgemäß zu beantworten?" + +Das Problem: Bei sensiblen Umfragen (z. B. „Haben Sie schon einmal gestohlen?") lügen Befragte häufig, weil sie negative Konsequenzen fürchten. + +### Randomized Response (Folien 93–96) + +Eine elegante Lösung mittels **Münzwurf-Technik**: + +1. **Marcie wirft eine Münze** (für sich, unsichtbar). +2. **Kopf** → Marcie sagt die **Wahrheit**. +3. **Zahl** → Marcie **lügt** (gibt die entgegengesetzte Antwort). + +**Analyse** (Folie 96): +- In **3/4 der Fälle** steht bei Marcie die richtige Antwort (sie sagt die Wahrheit, oder sie lügt, hat aber ohnehin „Nein" als wahre Antwort). +- In **1/4 der Fälle** steht die falsche Antwort. + +**Rückrechnung**: Der tatsächliche Anteil der „Ja"-Antworten lässt sich statistisch rekonstruieren: + +``` +Prozent tatsächliche "Ja" = 2 × (Prozent gemessene "Ja" - 0,25) +``` + +**Beispiel**: Bei 37,5% gemessenen „Ja"-Antworten: +- 3/4 × 25% = 18,75% +- 1/4 × 75% = 18,75% +- 2 × (0,375 - 0,25) = **0,25 = 25%** tatsächliche „Ja"-Antworten. + +**Vorteil**: Jede einzelne Antwort ist **plausibel abstreitbar** (Plausible Deniability), da sie auf den Münzwurf zurückgeführt werden könnte. + +### Formale Definition (Folien 97–99) + +**Epsilon (ε) – Privacy Budget** (Folie 98): + +Der Parameter ε bestimmt, wie viel Privatsphäre „geopfert" wird: + +- **Kleines ε** → mehr Privatsphäre, weniger Genauigkeit. +- **Großes ε** → weniger Privatsphäre, mehr Genauigkeit. + +**Sensitivität** (Folie 99): + +Die **Sensitivität** einer Funktion gibt an, wie stark sich der Funktionswert ändert, wenn **ein einzelner Datensatz** hinzugefügt oder entfernt wird (Erhöhung der Eingabe um 1). Sie bestimmt, wie viel Rauschen hinzugefügt werden muss. + +### Mechanismen (Folien 100–101) + +Drei potentielle Möglichkeiten, **Noise (Rauschen)** hinzuzufügen: + +| Mechanismus | Beschreibung | +|---|---| +| **Laplace-Mechanismus** | Addiert Rauschen aus der Laplace-Verteilung, skaliert mit Sensitivität/ε | +| **Gaußscher Mechanismus** | Addiert Gaußsches Rauschen, benötigt (ε, δ)-Differential Privacy | +| **Exponentieller Mechanismus** | Für nicht-numerische Ausgaben; wählt Ergebnisse mit exponentiell gewichteter Wahrscheinlichkeit | + +--- + +## 9. Trusted Execution Environments – TEE (Folien 102–104) + +### Virtual Black Box Obfuscator (Folie 103) + +Der ideale Ansatz wäre ein **Virtual Black Box Obfuscator**: Ein Programm so verschleiern, dass man es ausführen, aber nicht verstehen kann. **Problem**: Es wurde bewiesen, dass ein solcher Obfuscator **nicht existieren kann** (Barak et al., 2001). + +### TEE-Architektur (Folie 104) + +**Trusted Execution Environments** bieten einen praktischen Kompromiss: + +- Eine hardware-geschützte **Enclave**, in der **attestierter Code** läuft. +- **Daten-I/O findet ausschließlich verschlüsselt statt** – alle Daten werden beim Eintritt in die Enclave entschlüsselt und beim Verlassen wieder verschlüsselt. +- Selbst ein **kompromittiertes Betriebssystem** hat keinen Zugriff auf die Daten der Enclave. +- Beispiele: Intel SGX, ARM TrustZone, AMD SEV. + +**Attestierung**: Die Hardware kann kryptographisch beweisen, welcher Code in der Enclave läuft, sodass externe Parteien überprüfen können, dass der korrekte Code ausgeführt wird. + +--- + +## 10. Privacy Enhancing Technologies – Gesamtübersicht (Folie 105) + +Die Vorlesung schließt mit einer Übersicht aller behandelten Technologien im Kontext der drei Privacy-Ziele: + +| Technologie | Input Privacy | Output Privacy | Policy Enforcement | +|---|---|---|---| +| **MPC** | ✅ | — | — | +| **TEE** | ✅ | — | — | +| **HE/FHE** | ✅ | — | — | +| **ZK Proofs** | ✅ | — | — | +| **Differential Privacy** | — | ✅ | — | +| **Aggregation** | — | ✅ | — | +| **Non-Disclosure Agreements** | — | — | ✅ | + +**Einordnung**: +- **Input Privacy** (links): MPC, TEE, HE/FHE und ZK Proofs schützen die Eingabedaten. +- **Output Privacy** (rechts): Differential Privacy und Aggregation schützen die Ergebnisse. +- **Policy Enforcement** (oben): Non-Disclosure Agreements und vertragliche Regelungen erzwingen Richtlinien. + +--- + +## Zusammenfassung der Kernthemen + +| Thema | Kernaussage | +|---|---| +| Garbled Circuits | Beliebige Funktionen als verschlüsselte Boolesche Schaltkreise auswerten; Eingaben via OT | +| Additive Secret Sharing | Geheimnis in Shares aufteilen; Addition trivial, Multiplikation erfordert Beaver Triples | +| Beaver Triples | Vorberechnete (a, b, c=ab)-Tripel ermöglichen effiziente Multiplikation auf Shares | +| SPDZ | Praktisches MPC-Protokoll mit Shares + MACs; sicher gegen aktive Angreifer | +| Zero Knowledge Proofs | Beweisen, dass eine Aussage wahr ist, ohne etwas anderes preiszugeben | +| MPC in the Head | ZK-Proofs aus simulierten MPC-Protokollen konstruieren | +| Differential Privacy | Rauschen hinzufügen, um statistische Ergebnisse zu veröffentlichen, ohne Individuen zu identifizieren | +| TEE | Hardware-Enclaven für sichere Berechnung; selbst kompromittiertes OS hat keinen Zugriff | +| PET-Übersicht | Input Privacy (MPC, TEE, HE, ZK) vs. Output Privacy (DP, Aggregation) vs. Policy Enforcement (NDA) | diff --git a/Latex Projekte/Overleaf Projects (6 items).zip b/Latex Projekte/Overleaf Projects (6 items).zip new file mode 100644 index 0000000..c4898cb Binary files /dev/null and b/Latex Projekte/Overleaf Projects (6 items).zip differ diff --git a/Netzwerke/.DS_Store b/Netzwerke/.DS_Store new file mode 100644 index 0000000..3951004 Binary files /dev/null and b/Netzwerke/.DS_Store differ diff --git a/Netzwerke/_Overview.md b/Netzwerke/_Overview.md new file mode 100644 index 0000000..7406a3f --- /dev/null +++ b/Netzwerke/_Overview.md @@ -0,0 +1,41 @@ +# Netzwerke + +> [[Dashboard|← Zurück zum Dashboard]] + +**Dozentin:** Gabriele Schrenk + +--- + +## Vorlesungen + +| # | Thema | Folien | Zusammenfassung | NotebookLM | Lernkarten | Status | +| --- | -------------------------------- | ------ | --------------------------------- | ---------- | ---------- | ------ | +| 01 | Netzwerkgrundlagen & Komponenten | ✅ | ✅ [[nw1 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 02 | Topologien & OSI-Modell | ✅ | ✅ [[nw2 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 03 | Layer 2/3, IPv4 & Routing | ✅ | ✅ [[nw3 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 04 | IPv6, DHCP & WAN | ✅ | ✅ [[nw4 - zusammenfassung\|Link]] | ✅ | ✅ | 🟢 | +| 05 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 06 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 07 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 08 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 09 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 10 | — | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | +| 11 | Klausurvorbereitung | ⬜ | ⬜ | ⬜ | ⬜ | 🔴 | + +**Legende:** ⬜ Offen · ✅ Erledigt · 🔴 Nicht begonnen · 🟡 In Arbeit · 🟢 Fertig + +--- + +## Zusätzliche Materialien + +- [[nw3 - labor|NW3 – Laborübung]] +- [[nw4 - labor|NW4 – Laborübung]] + +--- + +## Modul-Infos + +- **Dozentin:** Gabriele Schrenk +- **Prüfungsform:** +- **Prüfungstermin:** +- **Besonderheiten:** diff --git a/Netzwerke/folien/nw1 - folien.pdf b/Netzwerke/folien/nw1 - folien.pdf new file mode 100644 index 0000000..3e3467c Binary files /dev/null and b/Netzwerke/folien/nw1 - folien.pdf differ diff --git a/Netzwerke/folien/nw2 - folien.pdf b/Netzwerke/folien/nw2 - folien.pdf new file mode 100644 index 0000000..c9ab42f Binary files /dev/null and b/Netzwerke/folien/nw2 - folien.pdf differ diff --git a/Netzwerke/folien/nw3 - folien.pdf b/Netzwerke/folien/nw3 - folien.pdf new file mode 100644 index 0000000..64e92a2 Binary files /dev/null and b/Netzwerke/folien/nw3 - folien.pdf differ diff --git a/Netzwerke/folien/nw4 - folien.pdf b/Netzwerke/folien/nw4 - folien.pdf new file mode 100644 index 0000000..042b91b Binary files /dev/null and b/Netzwerke/folien/nw4 - folien.pdf differ diff --git a/Netzwerke/folien/nw5 - folien.pdf b/Netzwerke/folien/nw5 - folien.pdf new file mode 100644 index 0000000..835678c Binary files /dev/null and b/Netzwerke/folien/nw5 - folien.pdf differ diff --git a/Netzwerke/folien/nw6 - folien.pdf b/Netzwerke/folien/nw6 - folien.pdf new file mode 100644 index 0000000..6155734 Binary files /dev/null and b/Netzwerke/folien/nw6 - folien.pdf differ diff --git a/Netzwerke/folien/nw7 - folien.pdf b/Netzwerke/folien/nw7 - folien.pdf new file mode 100644 index 0000000..699db67 Binary files /dev/null and b/Netzwerke/folien/nw7 - folien.pdf differ diff --git a/Netzwerke/klausur/ipv4-zusammenfassen.md b/Netzwerke/klausur/ipv4-zusammenfassen.md new file mode 100644 index 0000000..7426218 --- /dev/null +++ b/Netzwerke/klausur/ipv4-zusammenfassen.md @@ -0,0 +1,265 @@ +# IPv4-Netzadressen zusammenfassen (Route Summarization) +> **Kommt sicher in der Klausur!** Verschiedene IPv4-Netze in CIDR-Schreibweise → zusammenfassen + begründen. + +--- + +## Das Prinzip + +Mehrere spezifische Routen werden zu **einer einzigen summarischen Route** zusammengefasst. +Das reduziert Routing-Tabellen und macht das Netz effizienter. + +**Bedingung:** Alle zusammenzufassenden Netze müssen zum **gleichen Next Hop / gleichen Interface** führen – sonst ergibt die Zusammenfassung keinen Sinn (man würde Datenverkehr falsch weiterleiten). + +--- + +## Algorithmus (Schritt für Schritt) + +1. Alle Netzadressen in **Binär** umschreiben (nur die relevanten Oktette) +2. Von links nach rechts die **identischen Bits zählen** → das wird die neue Präfixlänge +3. Die ersten n identischen Bits nehmen, Rest auf **0 setzen** → neue Netzadresse +4. **Prüfen**: Deckt die Zusammenfassung nur die gewünschten Netze ab, oder fallen unerwünschte Netze mit rein? +5. Falls unerwünschte Netze dabei sind: **Präfix vergrößern** (mehr Bits = kleineres Netz) und Restnetze separat behandeln + +--- + +## Wann kann man NICHT zusammenfassen? + +- Die Netze liegen **nicht lückenlos beieinander** im Adressraum → unerwünschte Netze würden mit eingeschlossen +- Die Netze führen zu **unterschiedlichen Next Hops** → falsche Weiterleitung +- Ein Netz liegt **außerhalb** der möglichen Zusammenfassung → dann zwei getrennte Zusammenfassungen + +**Argumentation in der Klausur:** +„Netz X kann nicht mit Netz Y zusammengefasst werden, weil eine gemeinsame Zusammenfassung auch die Netze A, B, C einschließen würde, die einen anderen Next Hop haben / nicht existieren." + +--- + +## Hilfstabelle: Bit-Wertigkeiten + +| 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ | +|----|----|----|----|----|----|----|-----| +| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | + +--- + +## Beispiel 1 – Einfache Zusammenfassung (aus VL4) + +**Gegeben:** 172.16.0.0/24, 172.16.1.0/24, 172.16.2.0/24, 172.16.3.0/24 + +**Schritt 1 – Binär (3. Oktett entscheidend):** +``` +172.16.0.0 → 0000 00|00 +172.16.1.0 → 0000 00|01 +172.16.2.0 → 0000 00|10 +172.16.3.0 → 0000 00|11 + ↑ + 22 Bits identisch +``` + +**Schritt 2 – Neue Präfixlänge:** /22 (22 identische Bits von links) + +**Schritt 3 – Neue Netzadresse:** 172.16.0.0 (Bits ab Position 23 auf 0) + +**Ergebnis:** `172.16.0.0/22` + +**Prüfung:** /22 deckt 172.16.0.0 bis 172.16.3.255 → genau die 4 Netze, keine unerwünschten ✓ + +--- + +## Beispiel 2 – Nicht-triviale Zusammenfassung (aus VL4) + +**Gegeben:** 192.168.0.0/24 bis 192.168.9.0/24 + +**Problem:** Eine einzige Zusammenfassung würde auch 192.168.10.0 bis 192.168.15.0 einschließen. + +**Binär (3. Oktett):** +``` +192.168.0.0: 0000 0|000 ─┐ +192.168.1.0: 0000 0|001 │ +192.168.2.0: 0000 0|010 ├─ 21 Bits identisch → /21 +192.168.3.0: 0000 0|011 │ deckt .0 bis .7 +192.168.4.0: 0000 0|100 │ +192.168.5.0: 0000 0|101 │ +192.168.6.0: 0000 0|110 │ +192.168.7.0: 0000 0|111 ─┘ + +192.168.8.0: 0000 100|0 ─┐ 23 Bits identisch → /23 +192.168.9.0: 0000 100|1 ─┘ deckt .8 und .9 +``` + +**Ergebnis:** Zwei Zusammenfassungen nötig: +- `192.168.0.0/21` (deckt .0 bis .7) +- `192.168.8.0/23` (deckt .8 und .9) + +**Argumentation:** Eine einzige /21 ab .8 würde .8 bis .15 abdecken – aber .10 bis .15 existieren nicht / haben anderen Next Hop → nicht erlaubt. + +--- + +## Beispiel 3 – Aus VL4 Vorlesungsaufgabe + +**Gegeben:** +- 192.168.160.0/24 +- 192.168.161.0/24 +- 192.168.162.0/23 +- 192.168.164.0/22 + +**Binär (3. Oktett):** +``` +192.168.160.0: 1010 0|000 +192.168.161.0: 1010 0|001 +192.168.162.0: 1010 0|010 (→ deckt .162 und .163 wegen /23) +192.168.164.0: 1010 0|100 (→ deckt .164 bis .167 wegen /22) + ↑ + 21 Bits identisch +``` + +**Ergebnis:** `192.168.160.0/21` +(deckt 160–167, alle 4 Netze liegen darin, keine unerwünschten Netze dabei ✓) + +--- + +## Beispiel 4 – Gruppenaufgabe VL4 (ein Netz passt nicht rein) + +**Gegeben:** +- 172.30.31.0/24 +- 172.30.32.0/24 +- 172.30.33.0/24 +- 172.30.34.0/23 +- 172.30.36.0/23 +- 172.30.38.0/24 + +**Binär (3. Oktett):** +``` +172.30.31.0: 0001 1111 ← passt NICHT zu den anderen (andere Bitfolge) +172.30.32.0: 0010 00|00 ─┐ +172.30.33.0: 0010 00|01 ├─ 22 Bits → /22 (deckt .32–.35) +172.30.34.0: 0010 00|10 ─┘ +172.30.36.0: 0010 01|00 → /23 (deckt .36–.37) +172.30.38.0: 0010 01|10 → /24 (einzeln) +``` + +**Warum .31 nicht zusammenfassen?** +Würde man .31 mit .32–.38 zusammenfassen, bräuchte man /21, das würde .24–.31 UND .32–.39 abdecken. Damit kämen .24–.30 dazu – die existieren nicht / haben anderen Next Hop. → Nicht erlaubt. + +**Ergebnis:** 4 Einträge: +- `172.30.31.0/24` (allein, passt nicht in Gruppe) +- `172.30.32.0/22` (deckt .32–.35) +- `172.30.36.0/23` (deckt .36–.37) +- `172.30.38.0/24` (allein) + +--- + +## Schnell-Lookup: Welche CIDR-Größen gibt es? + +| Präfix | Maske | Adressen | 3. Oktett Schrittweite | +|--------|-------|----------|------------------------| +| /24 | 255.255.255.0 | 256 | 1 | +| /23 | 255.255.254.0 | 512 | 2 | +| /22 | 255.255.252.0 | 1024 | 4 | +| /21 | 255.255.248.0 | 2048 | 8 | +| /20 | 255.255.240.0 | 4096 | 16 | +| /19 | 255.255.224.0 | 8192 | 32 | +| /18 | 255.255.192.0 | 16384 | 64 | +| /17 | 255.255.128.0 | 32768 | 128 | +| /16 | 255.255.0.0 | 65536 | — (ganzes 2. Oktett) | + +**Schrittweite** = wie weit auseinander die Netzadressen liegen dürfen (z.B. bei /22 immer Vielfache von 4 im 3. Oktett: .0, .4, .8, .12, ...) + +--- + +## Übungsaufgaben (selbst lösen) + +### Aufgabe 1 +Gegeben (alle /24, gleicher Next Hop): +- 10.0.0.0/24 +- 10.0.1.0/24 +- 10.0.2.0/24 +- 10.0.3.0/24 + +
+Lösung + +3. Oktett: 0, 1, 2, 3 → binär: 0000 00|00 bis 0000 00|11 → 22 identische Bits +**Ergebnis: 10.0.0.0/22** + +
+ +--- + +### Aufgabe 2 +Gegeben (alle /24, gleicher Next Hop): +- 192.168.4.0/24 +- 192.168.5.0/24 +- 192.168.6.0/24 +- 192.168.7.0/24 + +
+Lösung + +3. Oktett: 4, 5, 6, 7 → binär: 0000 01|00 bis 0000 01|11 → 22 identische Bits +**Ergebnis: 192.168.4.0/22** + +
+ +--- + +### Aufgabe 3 +Gegeben (alle /24, gleicher Next Hop): +- 172.16.8.0/24 +- 172.16.9.0/24 +- 172.16.10.0/24 +- 172.16.11.0/24 +- 172.16.12.0/24 +- 172.16.13.0/24 + +
+Lösung + +3. Oktett binär: +- 8 = 0000 1000 +- 9 = 0000 1001 +- 10 = 0000 1010 +- 11 = 0000 1011 +- 12 = 0000 1100 ← hier weicht Bit 5 ab! +- 13 = 0000 1101 + +Eine einzige Zusammenfassung würde 8–15 umfassen (/21), aber .14 und .15 sind nicht dabei → prüfen ob das ok ist (fehlen die im Next Hop?). +Falls .14 und .15 nicht existieren / anderen Next Hop haben → zwei Zusammenfassungen: +- `172.16.8.0/22` (deckt .8–.11) +- `172.16.12.0/23` (deckt .12–.13) + +Falls .14 und .15 denselben Next Hop haben → **172.16.8.0/21** (deckt .8–.15) + +**Argumentation zählt hier!** + +
+ +--- + +### Aufgabe 4 – Mit unterschiedlichen Präfixen +Gegeben (gleicher Next Hop): +- 10.1.0.0/24 +- 10.1.1.0/24 +- 10.1.2.0/23 + +
+Lösung + +10.1.2.0/23 deckt bereits .2 und .3. +Also sind insgesamt .0, .1, .2, .3 abgedeckt → 4 aufeinanderfolgende /24-Äquivalente. +3. Oktett: 0–3 → 22 identische Bits +**Ergebnis: 10.1.0.0/22** + +
+ +--- + +## Argumentation-Template für die Klausur + +**Wenn zusammenfassbar:** +> „Die Netze X, Y, Z können zu [Zusammenfassung]/[Präfix] zusammengefasst werden, da die ersten [n] Bits der Netzadressen identisch sind. Die Zusammenfassung deckt genau diese Netze ab und schließt keine unerwünschten Netze ein." + +**Wenn NICHT zusammenfassbar (als eine Zusammenfassung):** +> „Eine gemeinsame Zusammenfassung von X und Y würde das Netz [unerwünschtes Netz] einschließen, das einen anderen Next Hop hat / nicht existiert. Daher sind zwei separate Zusammenfassungen nötig: [A]/[n] und [B]/[m]." + +**Wenn ein Netz einzeln bleiben muss:** +> „Netz X kann nicht mit den übrigen Netzen zusammengefasst werden, da eine gemeinsame Zusammenfassung die Netze [A bis B] einschließen würde, die nicht zum selben Next Hop gehören." diff --git a/Netzwerke/klausur/nw6 - klausurstuff.md b/Netzwerke/klausur/nw6 - klausurstuff.md new file mode 100644 index 0000000..fd296a4 --- /dev/null +++ b/Netzwerke/klausur/nw6 - klausurstuff.md @@ -0,0 +1,496 @@ +# IT2221 – Prüfungsvorbereitung: Kernthemen mit Erklärungen & Beispielen + +--- + +## 1. Troubleshooting + +### Die 7-Schritte-Methodik + +| Schritt | Was tun? | +|---------|----------| +| 1 | **Problem definieren** – Was genau geht nicht? Seit wann? Wer ist betroffen? | +| 2 | **Informationen sammeln** – Show-Befehle, Logs, Topology prüfen | +| 3 | **Daten analysieren** – Routingtabellen, Nachbarzustände vergleichen | +| 4 | **Hypothese formulieren** – Welche OSI-Schicht ist schuld? | +| 5 | **Hypothese testen** – PCAPs, Ping, Traceroute | +| 6 | **Korrektur implementieren** | +| 7 | **Verifizieren & dokumentieren** | + +--- + +### Vorgehensstrategien + +**Bottom-Up** – Fange bei Layer 1 an, arbeite dich hoch: +> Kabel ok? → Link up? → IP ok? → Routing ok? → App ok? +> Gut wenn: Das Problem unbekannt ist und man systematisch vorgehen will. + +**Top-Down** – Fange bei Layer 7 an, arbeite dich runter: +> App geht nicht? → DNS ok? → TCP-Verbindung ok? → Route ok? → Link ok? +> Gut wenn: Der User ein konkretes App-Problem meldet. + +**Divide & Conquer** – Fang in der Mitte an (z.B. Layer 3) und entscheide dann ob du rauf oder runter gehst: +> Ping zum nächsten Router ok? → Problem ist oben (L4–L7). Ping nicht ok? → Problem ist unten (L1–L2). +> Gut wenn: Das Netz groß ist und du Zeit sparen willst. + +--- + +### Wichtigste Show-Befehle je Schicht + +| OSI-Schicht | Befehl | Was zeigt er? | +|-------------|--------|---------------| +| L1 (Physical) | `show interfaces` | Link up/down, Fehler, Kabelfehler | +| L2 (Data Link) | `show mac address-table` | MAC-Tabelle des Switches | +| L2 (Data Link) | `show spanning-tree` | STP-Zustand | +| L3 (Network) | `show ip route` | Routingtabelle | +| L3 (Network) | `show ip ospf neighbor` | OSPF-Nachbarn und deren Zustand | +| L3 (Network) | `show bgp summary` | BGP-Nachbarn, Status, Routen | +| L3 MPLS | `show mpls forwarding-table` | MPLS Label-Tabelle (FIB) | +| L3 MPLS | `show mpls ldp neighbor` | LDP-Nachbarn | +| L4 (Transport) | `show ip sockets` | Offene TCP/UDP-Verbindungen | + +**Beispiel-Szenario:** PC bekommt keine IP-Adresse. + +``` +Schritt 1: Problem klar → DHCP funktioniert nicht +Schritt 2: show ip interface brief → Interface up? + show ip dhcp pool → DHCP-Pool konfiguriert? + show ip dhcp binding → Gibt es Zuweisungen? +Schritt 3: Kein Pool vorhanden → Hypothese: DHCP falsch konfiguriert +Schritt 4: ip dhcp pool MEIN_POOL konfiguriert? Nein! +Schritt 5: Pool anlegen, PC neu verbinden → IP erhalten ✓ +Schritt 7: Dokumentieren +``` + +--- + +## 2. BGP – Border Gateway Protocol + +### Grundidee: Path-Vector + +BGP ist ein **Path-Vector-Protokoll**. Das bedeutet: BGP teilt nicht nur mit „ich kann Netz X erreichen", sondern auch **über welchen Weg** (AS-Pfad). So können Schleifen erkannt werden – wenn meine eigene AS-Nummer im Pfad steht, nehme ich die Route nicht an. + +**Verbindung:** BGP läuft über **TCP Port 179** (zuverlässige Übertragung, kein eigenes Reliability-Protokoll nötig). + +--- + +### Die 4 Nachrichtentypen + +| Typ | Wann? | Was macht er? | +|-----|-------|---------------| +| **OPEN** | Beim Verbindungsaufbau | Stellt sich vor: AS-Nummer, BGP-Version, Router-ID, Hold-Time | +| **UPDATE** | Wenn sich Routen ändern | Teilt neue Routen mit oder zieht alte zurück | +| **KEEPALIVE** | Alle ~60 Sekunden | „Ich lebe noch" – verhindert Timeout | +| **NOTIFICATION** | Bei Fehlern | Meldet Fehler und bricht die Session ab | + +**Beispiel OPEN:** +``` +Router A öffnet TCP-Verbindung zu Router B auf Port 179. +Schickt OPEN: „Ich bin AS 65000, meine Router-ID ist 1.1.1.1, Hold-Time 90s" +Router B antwortet mit eigenem OPEN + KEEPALIVE → Session steht. +``` + +--- + +### 9-stufige Wegewahl (vereinfacht auf die wichtigsten) + +Wenn BGP mehrere Routen zum gleichen Ziel kennt, wählt er nach dieser Reihenfolge: + +| Priorität | Attribut | Merkhilfe | +|-----------|----------|-----------| +| 1 | **LOCAL_PREF** (höher = besser) | „Welchen Ausgang bevorzuge ich?" | +| 2 | **AS_PATH** (kürzer = besser) | „Welcher Weg hat weniger Hops?" | +| 3 | **MED** (niedriger = besser) | „Welchen Eingang bevorzugt mein Nachbar?" | +| ... | weitere Kriterien | Router-ID, Neighbor-IP, etc. | + +**Beispiel:** +``` +Router A kennt zwei Wege zu 8.8.8.0/24: + +Weg 1: LOCAL_PREF=200, AS_PATH: 65001 65002 +Weg 2: LOCAL_PREF=100, AS_PATH: 65003 + +→ Weg 1 gewinnt, weil LOCAL_PREF höher (200 > 100). + AS_PATH wird gar nicht mehr verglichen. +``` + +--- + +### Transit vs. Peering + +**Peering:** Zwei Provider tauschen gegenseitig ihre eigenen Routen aus – kostenlos, aber nur das eigene Netz, keine Weiterleitung fremder Pakete. + +``` +Telekom ←→ Vodafone: „Ich leite deine Kunden-Pakete weiter, du meine." +Aber: Telekom leitet keine Pakete von Vodafone an einen dritten Provider weiter. +``` + +**Transit:** Ein Provider kauft beim anderen die Weiterleitung aller Pakete – auch zu Dritten. Kostet Geld. + +``` +Kleiner ISP → bezahlt Telekom → Telekom leitet Pakete ans gesamte Internet weiter. +``` + +--- + +### Tier 1 / Tier 2 / Tier 3 + +| Tier | Wer? | Beispiel | +|------|------|---------| +| **Tier 1** | Große Provider, die das Internet-Backbone bilden. Haben Peering mit allen anderen Tier-1. Kaufen keinen Transit. | Deutsche Telekom, AT&T, Level3 | +| **Tier 2** | Mittelgroße Provider. Haben Peering mit manchen, kaufen Transit von Tier-1. | Regionaler ISP | +| **Tier 3** | Kleine Provider, kaufen Transit von Tier-2. Kein eigenes Peering. | Dein lokaler Kabel-Anbieter | + +--- + +### iBGP vs. eBGP + +| | iBGP | eBGP | +|--|------|------| +| **Wo?** | Innerhalb eines AS | Zwischen verschiedenen AS | +| **TTL** | 255 (muss nicht direkt verbunden sein) | 1 (muss direkt verbunden sein) | +| **Routen weitergeben?** | iBGP-Routen werden **nicht** an andere iBGP-Nachbarn weitergegeben | eBGP-Routen werden weitergegeben | +| **Problem iBGP** | Alle iBGP-Router müssen sich kennen (Full Mesh) → bei n Routern: n*(n-1)/2 Sessions | + +**Warum darf iBGP keine Routen an iBGP-Nachbarn weitergeben?** +→ Schleifenvermeidung! iBGP hat kein AS_PATH innerhalb eines AS, daher könnte eine Route endlos weitergegeben werden. + +--- + +### Route Reflector + +**Problem:** Bei 10 iBGP-Routern braucht man 45 Sessions. Bei 100 Routern: 4950. Nicht skalierbar. + +**Lösung:** Ein Router wird zum **Route Reflector (RR)**. Er darf iBGP-Routen an andere iBGP-Nachbarn weitergeben – aber nur, wenn er als RR konfiguriert ist. + +``` +Ohne RR (Full Mesh, 4 Router): +A ←→ B, A ←→ C, A ←→ D, B ←→ C, B ←→ D, C ←→ D → 6 Sessions + +Mit RR (A ist Route Reflector): +B → A → C +B → A → D +C → A → D → nur 3 Sessions nötig +``` + +--- + +### Administrative Distanz (AD) + +Wenn eine Route sowohl von BGP als auch von z.B. OSPF gelernt wird, entscheidet die AD welche genommen wird (niedrigere AD = bevorzugt): + +| Protokoll | AD | +|-----------|----| +| Connected | 0 | +| Static | 1 | +| OSPF | 110 | +| iBGP | 200 | +| eBGP | 20 | + +> eBGP (AD 20) wird fast immer gegenüber anderen Protokollen bevorzugt. iBGP (AD 200) fast nie. + +--- + +## 3. MPLS – Label-Format und Forwarding + +### Das Label-Format (32 Bit) + +``` + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Label (20 Bit) | TC |S| TTL | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +``` + +| Feld | Bits | Bedeutung | +|------|------|-----------| +| **Label** | 20 | Der eigentliche Label-Wert (0 – 1.048.575) | +| **TC** | 3 | Traffic Class – früher „EXP", für QoS/Priorisierung | +| **S** | 1 | Bottom-of-Stack – ist dies das unterste Label im Stack? | +| **TTL** | 8 | Time to Live – verhindert Schleifen | + +--- + +### Reservierte Labels (0–15) + +| Label | Name | Bedeutung | +|-------|------|-----------| +| **0** | IPv4 Explicit Null | Pop Label, dann normales IPv4-Forwarding | +| **1** | Router Alert | Paket soll speziell behandelt werden | +| **2** | IPv6 Explicit Null | Pop Label, dann normales IPv6-Forwarding | +| **3** | Implicit Null | PHP – vorletzter Router soll Label entfernen | +| 4–15 | Reserviert | Noch nicht vergeben | + +--- + +### Push / Swap / Pop + +| Operation | Wer macht es? | Was passiert? | +|-----------|--------------|---------------| +| **PUSH** | Ingress-Router (erster LER) | Label wird auf das Paket gedrückt | +| **SWAP** | Transit-Router (LSR) | Altes Label wird durch neues ersetzt | +| **POP** | Egress-Router (letzter LER) oder vorletzter (PHP) | Label wird entfernt | + +**Beispiel:** + +``` +Paket kommt an Router A (IP: 10.2.0.1): + +Router A (PUSH): [IP-Paket] → [Label 200][IP-Paket] +Router B (SWAP): [Label 200] → [Label 350] (tauscht aus, leitet weiter) +Router C (POP): [Label 350] → [IP-Paket] (entfernt, liefert aus) +``` + +--- + +### FEC – Forwarding Equivalence Class + +Eine FEC ist eine **Gruppe von Paketen, die gleich behandelt werden** – gleicher Label, gleicher Weg, gleiche Behandlung. + +**Beispiel:** +``` +Alle Pakete mit Ziel 192.168.10.0/24 → FEC „Richtung Standort Berlin" +→ alle bekommen Label 200, alle gehen über den gleichen Pfad +``` + +Pakete werden am Ingress-Router in FECs eingeteilt – danach nur noch Label-Switching, keine IP-Entscheidungen mehr. + +--- + +### LSP – Label Switched Path + +Der vorher festgelegte **Pfad durch das MPLS-Netz** von Ingress bis Egress. Wie eine Schiene. + +``` +CE1 → [PE1: Label 200 PUSH] → [P1: Label SWAP] → [P2: Label SWAP] → [PE2: POP] → CE2 + ←————————————————— LSP ————————————————————→ +``` + +--- + +### Label Stack und S-Bit + +Labels können gestapelt werden (z.B. VPN-Label + Transport-Label). Das **S-Bit** zeigt an, ob ein Label das unterste im Stack ist: + +``` +[ Transport-Label S=0 ] ← nicht unterstes Label +[ VPN-Label S=1 ] ← unterstes Label (Bottom of Stack) +[ IP-Paket ] +``` + +Router schauen immer nur auf das **oberste Label**. Erst wenn S=1 ist wissen sie: nach dem Pop kommt direkt das IP-Paket. + +--- + +### Forwarding Matrix (LFIB) + +Die Tabelle, die jeder MPLS-Router führt: + +``` +Eingehendes Label | Operation | Ausgehendes Label | Next Hop +------------------|-----------|--------------------|---------- +200 | SWAP | 350 | 10.0.0.2 +350 | POP | - | 10.0.0.5 +- | PUSH 200 | 200 | 10.0.0.1 (für FEC 192.168.10.0/24) +``` + +--- + +## 4. MPLS-Signalisierung + +Drei Protokolle verteilen die Labels – je nach Anwendungsfall: + +### LDP – Label Distribution Protocol + +- **Port:** TCP 646 +- **Schicht:** L7 (Application) +- **Zweck:** Automatische Label-Verteilung für normales MPLS-Forwarding + +**Wie funktioniert es?** + +``` +Router C sagt zu B (via LDP): „Für FEC 10.2.0.0/24 → gib mir Label 42" +Router B sagt zu A (via LDP): „Für FEC 10.2.0.0/24 → gib mir Label 17" +→ LSP ist aufgebaut, Pakete können fließen. +``` + +**Link-LDP vs. Targeted-LDP:** + +| | Link-LDP | Targeted-LDP | +|--|---------|--------------| +| **Nachbarn** | Nur direkt verbundene Router | Auch nicht-direkt verbundene Router | +| **Einsatz** | Normales MPLS | Pseudowires (VPWS, VPLS) | +| **Discovery** | Multicast Hello | Unicast Hello | + +--- + +### RSVP-TE – Resource Reservation Protocol – Traffic Engineering + +- **Protokoll:** IP Protokoll 46 +- **Schicht:** L3 (Network) +- **Zweck:** LSPs mit Bandbreitenreservierung und expliziten Pfaden (Traffic Engineering) + +**Zwei Nachrichten:** + +| Nachricht | Richtung | Zweck | +|-----------|----------|-------| +| **PATH** | Ingress → Egress | „Ich will einen LSP aufbauen, reserviere Ressourcen" | +| **RESV** | Egress → Ingress | „Ok, Ressourcen reserviert, hier ist dein Label" | + +**Beispiel:** + +``` +PE1 schickt PATH-Nachricht: „Ich will 100 Mbit/s von PE1 nach PE2, über P1 und P2" +PATH wandert: PE1 → P1 → P2 → PE2 +PE2 antwortet mit RESV: „Ok, Label 500 zugeteilt" +RESV wandert zurück: PE2 → P2 → P1 → PE1 +→ LSP steht, Bandbreite ist reserviert. +``` + +> **Unterschied zu LDP:** LDP nimmt den kürzesten IGP-Pfad. RSVP-TE kann **explizite Pfade** erzwingen und **Bandbreite reservieren** – daher für Traffic Engineering geeignet. + +--- + +### MP-BGP – Multiprotocol BGP + +- **Port:** TCP 179 +- **Schicht:** L7 (Application) +- **Zweck:** Labels und VPN-Routen verteilen (für L3 VPNs, VPLS Auto-Discovery) + +**Erweiterungen gegenüber normalem BGP:** + +| Feld | Bedeutung | +|------|-----------| +| **AFI** (Address Family Identifier) | Welche Adressfamilie? (IPv4=1, IPv6=2, L2VPN=25) | +| **SAFI** (Subsequent AFI) | Welcher Subtyp? (Unicast=1, VPN=128, EVPN=70) | +| **RD** (Route Distinguisher) | Macht VPN-Routen global eindeutig (8 Byte Präfix) | + +**Beispiel:** + +``` +Normale BGP-Route: 192.168.1.0/24 +MP-BGP VPNv4-Route: 65000:1:192.168.1.0/24 + ←RD→ ←————IP————→ +``` + +→ Gleiche IP-Adresse kann bei verschiedenen Kunden existieren, weil der RD sie unterscheidbar macht. + +--- + +## 5. Ausfallsicherheit: BFD und FRR + +### BFD – Bidirectional Forwarding Detection + +- **Port:** UDP 3784 +- **Zweck:** Sehr schnelle Erkennung von Link-/Nachbar-Ausfällen (viel schneller als BGP/OSPF-Timer) + +**Die 3 Zustände:** + +``` +DOWN ──────→ INIT ──────→ UP + (Hello (Antwort + gesendet) erhalten) +``` + +| Zustand | Bedeutung | +|---------|-----------| +| **Down** | Keine Verbindung, oder gerade gestartet | +| **Init** | Ich sende Hellos, habe aber noch keine Antwort | +| **Up** | Beidseitige Verbindung bestätigt, alles ok | + +**Heartbeat:** BFD schickt alle **50ms** ein Hello-Paket. Kommen 3 aus, gilt der Nachbar als ausgefallen → **150ms** bis zur Fehlererkennung. + +> **Zum Vergleich:** OSPF-Dead-Interval ist standardmäßig 40 Sekunden. BFD ist also ~267x schneller. + +**Beispiel:** + +``` +Router A und B laufen, BFD-Session ist im Zustand UP. +Link zwischen A und B fällt aus. +Nach 150ms: Kein BFD-Hello mehr empfangen → BFD meldet „Nachbar down" +→ OSPF/BGP bekommt sofort Bescheid → Router wechselt auf Backup-Route. +Ohne BFD: OSPF würde erst nach 40 Sekunden reagieren. +``` + +--- + +### FRR – Fast ReRoute + +- **Ziel:** Umschaltung auf Backup-Pfad in **unter 50ms** (nicht wahrnehmbar für Telefonie/Video) +- **Funktioniert mit:** RSVP-TE, Segment Routing + +**Zwei Backup-Strategien:** + +#### One-to-One Backup + +Für jeden primären LSP wird ein **eigener Backup-LSP** vorbereitet. + +``` +Primär-LSP: PE1 → P1 → P2 → PE2 +Backup-LSP: PE1 → P3 → P4 → PE2 (vorbereitet, aber inaktiv) + +P1 fällt aus → sofort auf Backup-LSP umschalten +``` + +- **Vorteil:** Sehr schnell, dedizierter Pfad +- **Nachteil:** Viele Ressourcen (für jeden LSP ein Backup) + +#### Facility Backup (auch: Bypass Tunnel) + +Ein einziger Bypass-Tunnel schützt **viele LSPs gleichzeitig**. + +``` +Primär-LSPs: LSP1, LSP2, LSP3 laufen alle über Link P1→P2 +Bypass: Ein Tunnel P1 → P3 → P2 schützt alle drei auf einmal + +P1→P2 fällt aus → alle drei LSPs werden automatisch in den Bypass umgeleitet +``` + +- **Vorteil:** Effizient, ein Bypass für viele LSPs +- **Nachteil:** Weniger präzise Kontrolle + +--- + +### Link Protection vs. Node Protection + +| | Link Protection | Node Protection | +|--|-----------------|-----------------| +| **Schützt gegen** | Ausfall eines Links | Ausfall eines ganzen Routers | +| **Bypass geht** | Um den ausgefallenen Link herum | Um den ausgefallenen Knoten herum | +| **Beispiel** | P1 → P2 fällt aus → Bypass P1 → P3 → P2 | P2 fällt komplett aus → Bypass P1 → P3 → PE2 | + +``` +Link Protection: +PE1 → P1 → [X] → P2 → PE2 + ↓ +PE1 → P1 → P3 → P2 → PE2 (umgeht nur den ausgefallenen Link) + +Node Protection: +PE1 → P1 → [P2 komplett ausgefallen] → PE2 + ↓ +PE1 → P1 → P3 → PE2 (umgeht den ganzen Router P2) +``` + +--- + +### Local Repair vs. Global Repair + +| | Local Repair | Global Repair | +|--|-------------|---------------| +| **Wer handelt?** | Der Router direkt am Ausfall | Der Ingress-Router (PE1) | +| **Wie schnell?** | Sofort (< 50ms) – Bypass bereits vorbereitet | Langsamer – neuer LSP muss erst berechnet werden | +| **Qualität** | Suboptimaler Pfad möglich | Optimaler neuer Pfad | +| **Typischer Ablauf** | Zuerst Local Repair → Verkehr fließt wieder | Dann Global Repair → Pfad wird optimiert | + +**Beispiel:** + +``` +1. Link P1→P2 fällt aus. +2. P1 erkennt Ausfall sofort (via BFD, 150ms). +3. LOCAL REPAIR: P1 leitet Pakete sofort über vorbereiteten Bypass (< 50ms). + → Verkehr fließt wieder, User merkt (fast) nichts. +4. GLOBAL REPAIR: PE1 berechnet neuen optimalen LSP via RSVP-TE. + → Neuer LSP wird aufgebaut, Bypass wird freigegeben. +``` + +> **Zusammenspiel BFD + FRR:** BFD erkennt den Ausfall in ~150ms. FRR schaltet in <50ms um (Bypass war bereits vorbereitet). Zusammen ist die Unterbrechung für den Nutzer minimal. \ No newline at end of file diff --git a/Netzwerke/klausur/themenliste.md b/Netzwerke/klausur/themenliste.md new file mode 100644 index 0000000..bd611bc --- /dev/null +++ b/Netzwerke/klausur/themenliste.md @@ -0,0 +1,271 @@ +# Themenliste – Klausurvorbereitung Netzwerktechnik IT2221 +**Klausur:** Mo., 4. Mai 2026 | 14:00–16:00 Uhr | Räume 6B.369 / 6B.371 + +> Fokus auf NW1–NW4. Themen ab NW5 sind ergänzend aufgeführt. + +--- + +## NW1 – Grundlagen, Layer 2 & 3 Basics + +### Netzwerkgrundlagen +- [ ] Definition Netzwerk & Netzwerkknoten +- [ ] Netzwerk-Komponenten: Repeater, Hub, Bridge, Switch, Router, Gateway – Funktion & Unterschied +- [ ] Adressierungsarten: **Unicast, Broadcast, Multicast, Anycast** (Merkmale, Richtung, Punkt-zu-Punkt vs. Mehrpunkt) + +### Netzwerk-Topologien +- [ ] Physikalische vs. logische Topologie +- [ ] **Bus-Topologie** – Vor-/Nachteile, Abschlusswiderstand +- [ ] **Stern-Topologie** – Vor-/Nachteile, zentraler Switch +- [ ] **Baum-Topologie** – Hierarchie, Engpass an Wurzel +- [ ] **Maschen-Topologie (Mesh)** – Vollvermascht vs. teilvermascht, Redundanz +- [ ] **Zell-Topologie (WLAN)** – Funkverbindung, Sicherheitsrisiken +- [ ] **Leaf-Spine-Architektur** – Rechenzentrum, zwei Ebenen, Skalierbarkeit + +### Layer 2 – Sicherungsschicht (Data Link Layer) +- [ ] **Switch-Funktionsweise**: Lernen, Unicast, Broadcast, Flooding +- [ ] **CAM-Tabelle / MAC-Adresstabelle** – wie ein Switch MAC-Adressen lernt +- [ ] **Ethernet-Rahmenformat**: Preamble, Dst/Src MAC, Type/Length, Data, CRC – Feldgrößen +- [ ] **MAC-Adresse**: 48 Bit, OUI + Gerätenummer, Broadcast FF:FF:FF:FF:FF:FF + +### Layer 3 – Grundlagen IP +- [ ] **IPv4-Adresse**: 32 Bit, 4 Oktette, Netzanteil + Hostanteil +- [ ] Darstellung: punktgetrennte Dezimalzahlen, Binärdarstellung + +### ARP – Address Resolution Protocol +- [ ] Funktion: IP → MAC Auflösung (Layer 2 ↔ Layer 3) +- [ ] Lokales Subnetz: ARP-Broadcast; fremdes Subnetz: MAC des Gateways +- [ ] **ARP-Ablauf**: Request (Broadcast) → Reply (Unicast) → Eintrag in ARP-Tabelle +- [ ] Vollständiges Paket: 4 Adressen (Quell-/Ziel-MAC + Quell-/Ziel-IP) +- [ ] **ARP-Spoofing** – Sicherheitsrisiko: Antworten nicht authentifiziert + +### ICMP – Internet Control Message Protocol +- [ ] Zweck: Fehlermeldungen & Statusinformationen (kein Datentransport!) +- [ ] Verbindungslos, kein automatischer Neuversand +- [ ] **ICMP-Header**: Typ (8 Bit), Code (8 Bit), Checksumme (16 Bit) +- [ ] **Ping** (Echo Request Typ 8 / Echo Reply Typ 0) +- [ ] **ICMP Timestamp** – Laufzeitprüfung zwischen zwei Systemen + +--- + +## NW2 – OSI-Modell, Layer 1 & 2, IPv4-Klassen + +### Entfernungsklassen +- [ ] **PAN** (~1–10 m, Bluetooth), **LAN** (bis ~1 km), **MAN** (bis 100 km), **WAN** (Länder), **GAN** (weltweit) + +### OSI-Referenzmodell +- [ ] **7 Schichten**: Physikalisch → Sicherung → Vermittlung → Transport → Sitzung → Darstellung → Anwendung +- [ ] Zugehörige **PDUs**: Bits, Frames, Pakete, Segmente, Daten +- [ ] Hardware-Zuordnung: Hub/Repeater (L1), Switch/Ethernet (L2), Router/IP (L3), TCP/UDP (L4) +- [ ] **Datenkapselung**: SDU + Header = PDU beim Senden; Dekapsulation beim Empfang +- [ ] **TCP/IP-Modell**: 4 Schichten (Network Access, Internet, Transport, Application) + +### Layer 1 – Übertragungsmedien +- [ ] **Kupferkabel (Twisted-Pair)**: Differenzsignale, Wellenwiderstand 50 Ohm, EMV-Unterdrückung +- [ ] **Glasfaser – Singlemode (OS1/OS2)**: Kern ~9 µm, Laser, bis 10 km+, hohe Bandbreite +- [ ] **Glasfaser – Multimode (OM1–OM5)**: Kern 50/62,5 µm, LED/VCSEL, bis ~550 m + +### Layer 2 – Switching & Protokolle +- [ ] **Switching-Methoden**: Store-and-Forward (vollständig prüfen) vs. Cut-Through (schnell, kein CRC) +- [ ] **STP – Spanning Tree Protocol (802.1D)**: Verhindert Broadcast-Stürme, Root-Bridge-Wahl (Bridge ID = Priorität + MAC), Blocking-Zustand +- [ ] **VLANs (802.1Q)**: Logische Netztrennung, statisch (Port) vs. dynamisch (MAC), max. 4095 VLANs + +### WLAN (802.11) +- [ ] Shared Medium, Frequenzen 2,4 GHz vs. 5 GHz (Reichweite vs. Datenrate) +- [ ] Verbindungsaufbau: **Scanning/Probing → Authentifizierung → Assoziation** + +### IPv4-Adressklassen +- [ ] **Klasse A**: 1–126, /8, bis 16,7 Mio. Hosts +- [ ] **Klasse B**: 128–191, /16, bis 65.534 Hosts +- [ ] **Klasse C**: 192–223, /24, bis 254 Hosts +- [ ] **Klasse D**: 224–239 (Multicast), **Klasse E**: 240–255 (Reserviert) +- [ ] **Loopback**: 127.0.0.1 +- [ ] **Binärumrechnung**: Bit-Wertigkeiten 128|64|32|16|8|4|2|1, Umrechnung Dezimal ↔ Binär + +### MAC vs. IP +- [ ] MAC = Hardware-Identität (fest, 48 Bit, L2), IP = logische Anschrift (veränderlich, L3) + +--- + +## NW3 – VLAN, IPv4-Header, Subnetting, ICMP-Details, Routing + +### Layer 2 – VLAN & QoS +- [ ] **IEEE 802.1Q** – Frame-Struktur mit VLAN-Tag: TPID (0x8100) + TCI (PCP 3 Bit + DEI 1 Bit + VID 12 Bit) +- [ ] Trunk-Port (getaggt zwischen Switches) vs. Access-Port (ungetaggt zum Endgerät) +- [ ] Inter-VLAN-Routing nur über Router möglich +- [ ] **IEEE 802.1p** – QoS Layer 2: 8 PCP-Prioritätsstufen (0 = Best Effort, 7 = Network Control) + +### IPv4-Header (alle Felder kennen!) +- [ ] Version, HLEN, TOS, Total Length +- [ ] Datagram ID, Flags (Don't Fragment), Fragment Offset → Fragmentierung +- [ ] **TTL** (Time to Live) – Hop-Counter, wird bei jedem Router um 1 dekrementiert +- [ ] Protocol (1=ICMP, 6=TCP, 17=UDP), Header Checksum +- [ ] Source/Destination IP (je 32 Bit) + +### Subnetting & CIDR +- [ ] Netzadresse (alle Host-Bits = 0) & Broadcastadresse (alle Host-Bits = 1) +- [ ] **Nutzbare Hosts = 2^n − 2** (n = Anzahl Host-Bits) +- [ ] **AND-Funktion**: IP AND Subnetzmaske = Netzadresse +- [ ] **Dezimaldarstellung der Masken**: 128, 192, 224, 240, 248, 252, 254, 255 +- [ ] **CIDR-Notation** (/0 bis /32): Bedeutung und Umrechnung +- [ ] Wichtige CIDR-Werte: /30 = 4 Adr. (2 nutzb.), /28 = 16 Adr., /24 = 256 Adr. +- [ ] Subnetting-Merkregeln: Netzadressen gerade, Broadcastadressen ungerade +- [ ] **Subnetting-Berechnungsaufgaben** üben! (Gegeben IP+Maske → Netz, Broadcast, erste/letzte IP, Anzahl Hosts) +- [ ] **Private Adressbereiche (RFC 1918)**: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 + +### ICMP – Details (NW3-Vertiefung) +- [ ] **Destination Unreachable (Typ 3)**: Code 0 = Network, 1 = Host, 2 = Protocol, 3 = Port Unreachable +- [ ] **Time Exceeded (Typ 11)**: TTL auf 0 → Paket wird verworfen +- [ ] **Traceroute**: TTL=1,2,3,... → Time-Exceeded-Antworten → Weg zum Ziel verfolgen + +### Routing-Grundlagen +- [ ] **Statisches Routing** (manuell) vs. **Dynamisches Routing** (automatisch) +- [ ] **Metrik**: Hop Count, Kosten, Bandbreite, Latenz, Fehlerrate, Auslastung +- [ ] **Distance Vector** (Straßenschild – nur Richtung & Entfernung) vs. **Link State** (Straßenkarte – gesamte Topologie) +- [ ] **IGP** (innerhalb AS: RIP, OSPF) vs. **EGP** (zwischen AS: BGP) +- [ ] **Autonomes System (AS)** – AS-Nummern von IANA, private AS: 64512–65534 +- [ ] Routing-Protokoll-Übersicht: RIP, IGRP/EIGRP, OSPF, IS-IS, BGP – Typ & Metrik + +### OSPF – Open Shortest Path First +- [ ] **SPF-Algorithmus (Dijkstra)**: LSDB → SPF-Baum → Routing-Tabelle +- [ ] Metrik = Kosten (= Bandbreite, höhere BW = kleinere Kosten) +- [ ] **LSDB**: alle Router in einer Area haben identische Datenbank +- [ ] **DR / BDR** (Designated Router / Backup): Wahl über Priorität + Router-ID; DROther nur mit DR/BDR +- [ ] **OSPF-Nachbarschaftszustände**: Init/Two-Way → Exstart → Exchange → Loading → **Full** +- [ ] Hello-Pakete alle 10–30 s; Multicast 224.0.0.5 (alle OSPF) / 224.0.0.6 (DR); Protokoll 89 +- [ ] **OSPF Areas**: Area 0 = Backbone, ABR (Area Border Router), ASBR (AS Border Router) +- [ ] **LSA-Typen**: Router-LSA (alle Router), Network-LSA (DR), Summary-LSA (ABR) +- [ ] Virtual Links: Area 0 kann indirekt verbunden werden + +--- + +## NW4 – Route Summarization, IPv6, DHCP, WAN + +### Route Summarization (IPv4) +- [ ] **Algorithmus**: Binärdarstellung → identische Bits zählen → neues Präfix +- [ ] Nur möglich, wenn Netze zum gleichen Next Hop führen +- [ ] Beispiel: 172.16.0.0/24 bis 172.16.3.0/24 → 172.16.0.0/22 +- [ ] Ggf. mehrere Zusammenfassungen nötig (nicht-triviale Fälle) + +### IPv6 – Grundlagen & Motivation +- [ ] IPv4-Adressknappheit: 2³² ≈ 4,3 Mrd. Adressen; IPv6: 2¹²⁸ ≈ 3,4×10³⁸ +- [ ] RFC 1883 / RFC 8200, IETF 1995 +- [ ] Verbesserungen: vereinfachter Header, kein Broadcast mehr, IPSec, QoS (Flow Label), SLAAC + +### IPv6-Header +- [ ] **Feste Headerlänge: 40 Byte** (vs. mind. 20 Byte IPv4) +- [ ] Felder: Version (4 Bit), Traffic Class (8 Bit, DSCP+ECN), **Flow Label** (20 Bit), Payload Length, **Next Header**, **Hop Limit** (= TTL) +- [ ] **Extension Headers**: Hop-by-Hop, Routing (43), Fragment (44), AH (51), ESP (50), Destination Options (60) +- [ ] EtherType IPv6: **0x86DD**; IPv4: **0x0800** + +### IPv6-Adressierung +- [ ] 128 Bit, 8 Blöcke à 16 Bit, hexadezimal, getrennt durch `:` +- [ ] Führende Nullen weglassen, aufeinanderfolgende Nullblöcke → `::` (nur 1× pro Adresse!) +- [ ] Struktur: **64 Bit Netz-Präfix + 64 Bit Interface ID** +- [ ] CIDR-Notation wie IPv4 (z.B. `2001:db8::/32`) + +### IPv6-Adresstypen +- [ ] **Loopback**: `::1` (= 127.0.0.1) +- [ ] **Unspecified**: `::` (vor Adresszuweisung) +- [ ] **Default Route**: `::/0` +- [ ] **Global Unicast (2000::/3)**: weltweit routbar, vom ISP zugewiesen +- [ ] **Link-Local Unicast (FE80::/10)**: nur lokales Segment, nicht geroutet, jedes Interface hat eine +- [ ] **Multicast (FF00::/8)**: ersetzt Broadcast; Scope-Feld (Link, Site, Global, ...) +- [ ] **Anycast**: syntaktisch Global Unicast, mehrfach vergeben, nächster Knoten antwortet +- [ ] **Kein Broadcast in IPv6** + +### EUI-64 & Privacy Extension +- [ ] **EUI-64**: MAC (48 Bit) → zwei 3-Byte-Blöcke + FFFE einsetzen + U/L-Bit invertieren → 64-Bit Interface ID +- [ ] **Privacy Extension**: zufällige Interface ID statt EUI-64 (verhindert Tracking) + +### ICMPv6 & Neighbor Discovery Protocol (NDP) +- [ ] ICMPv6 übernimmt mehr Aufgaben als ICMPv4 (ARP-Ersatz, Router Discovery, SLAAC) +- [ ] **RS (133)**: Host → alle Router (ff02::2) – Router anfordern +- [ ] **RA (134)**: Router → alle Hosts (ff02::1) – Präfix, Default-GW, Flags (A-Flag, M-Flag) +- [ ] **NS (135)**: ARP-Ersatz – Solicited-Node-Multicast +- [ ] **NA (136)**: Antwort auf NS mit eigener MAC +- [ ] **Redirect (137)** + +### SLAAC & DAD +- [ ] **SLAAC**: Host generiert Adresse aus Präfix (RA) + Interface ID (EUI-64/zufällig), ohne DHCP +- [ ] **DAD (Duplicate Address Detection)**: NS an eigene Solicited-Node-Multicast-Adresse → kein NA → Adresse eindeutig + +### IPv4 → IPv6 Migration +- [ ] **Dual Stack**: IPv4 und IPv6 parallel, bevorzugte Methode +- [ ] **Tunneling**: 6in4 (manuell, empfohlen), 6-to-4, 6rd, Teredo (hinter NAT) + +### DHCP (Dynamic Host Configuration Protocol) +- [ ] **DORA-Prozess**: Discover → Offer → Request → Acknowledge +- [ ] DHCP arbeitet per Broadcast → Limited Broadcast 255.255.255.255 +- [ ] **DHCP Relay**: Router leitet DHCP-Broadcast in andere Subnetze (Option 82) +- [ ] Lease-Erneuerung: nach 50% (Unicast), nach 7/8 (Broadcast), nach 100% (Discover) +- [ ] Fehlernachrichten: DHCP-Decline, DHCP-NACK, DHCP-Release, DHCP-Inform + +### WAN & PPPoE +- [ ] WAN verbindet LANs über große Entfernungen (Layer 1–3) +- [ ] Verbindungsarten: Dediziert (Mietleitungen) vs. Switching (Leitungs- vs. Paketvermittelt) +- [ ] Aktuelle Technologien: FTTH, DSL, DOCSIS, LTE/5G, Satellit +- [ ] **PPPoE** (RFC 2516): IP über Modem/DSL, Authentifizierung via LCP +- [ ] PPPoE-Discovery: PADI → PADO → PADR → PADS (Session-ID) + +--- + +## NW5–NW7 – Ergänzende Themen + +### Layer 4 – Transport (NW5) +- [ ] **TCP**: verbindungsorientiert, 3-Way-Handshake (SYN, SYN-ACK, ACK), 4-Way-Handshake (FIN) +- [ ] TCP-Header-Felder: Ports, Sequenznummer, Acknowledgement-Nummer, Flags, Window-Größe +- [ ] **Sliding Window**: Flusskontrolle, Window-Größe steuert Datenmenge ohne ACK +- [ ] **Staukontrolle (CWND)**: Slow Start, Congestion Avoidance +- [ ] **UDP**: verbindungslos, kein Handshake, kein Retransmit, minimal-Header (8 Byte) +- [ ] Wichtige Ports: HTTP=80, HTTPS=443, DNS=53, DHCP=67/68, SSH=22 + +### NAT – Network Address Translation (NW5) +- [ ] Zweck: private IPs → öffentliche IP (RFC 1918) +- [ ] **PAT / NAT Overload**: Port-basierte Unterscheidung (viele Clients → 1 öffentliche IP) +- [ ] **NAT64**: IPv6-Clients → IPv4-Server + +### DNS – Domain Name Service (NW5) +- [ ] Auflösung: Domainname → IP-Adresse +- [ ] Hierarchie: Root → TLD → Second Level Domain +- [ ] **Record-Typen**: A (IPv4), AAAA (IPv6), CNAME (Alias), MX (Mail), NS (Nameserver), PTR (Reverse), SOA +- [ ] **Rekursive vs. iterative Anfrage** +- [ ] DNS-Sicherheit: DNS Spoofing/Cache Poisoning, DDoS, DNS-Tunneling + +### BGP – Border Gateway Protocol (NW6) +- [ ] **Path-Vector-Protokoll**, EGP, zwischen autonomen Systemen +- [ ] BGP-Nachrichtentypen: OPEN, UPDATE, NOTIFICATION, KEEPALIVE +- [ ] Pfadattribute: AS-Path, Next Hop, Local Pref, MED, Origin +- [ ] **iBGP vs. eBGP** (intern vs. extern), Route Reflector +- [ ] Transit vs. Peering (ISP-Hierarchie: Tier 1/2/3) + +### MPLS – Multiprotocol Label Switching (NW6/NW7) +- [ ] Labels statt IP-Lookup → schnelleres Forwarding +- [ ] Terminologie: LSR, LER, FEC, LSP +- [ ] **Label-Operationen**: Push, Pop, Swap +- [ ] Signalisierung: LDP, RSVP-TE, MP-BGP +- [ ] **MPLS VPNs** (NW7): L2 (VPWS, VPLS, H-VPLS), L3 (BGP/MPLS IP VPN, VRF, RD, RT, PHP) + +### Ausfallsicherheit (NW6/NW7) +- [ ] **BFD (Bidirectional Forwarding Detection)**: schnelle Link-Failure-Erkennung +- [ ] **MPLS Fast Reroute (FRR)**: One-to-One Backup, Facility Backup + +### Segment Routing (NW7) +- [ ] Ingress-Router legt gesamten Pfad als Segmentliste fest +- [ ] **Node/Prefix SID** (global, kürzester Pfad) vs. **Adjacency SID** (lokal, expliziter Link) +- [ ] SR-MPLS und SRv6; vereinfacht Control Plane gegenüber klassischem MPLS + +### Troubleshooting (NW6/NW7) +- [ ] **7-Schritt-Methodik**: Problem definieren → Informationen sammeln → Analysieren → Hypothese → Testen → Korrigieren → Verifizieren +- [ ] Typische Fehlerquellen: OSPF-Nachbarschaft, BGP-Redistribution, MTU/Adressen, DHCP + +--- + +## Klausur-Checkliste: Rechenaufgaben üben + +- [ ] **Binärumrechnung** Dezimal ↔ Binär (einzelne Oktette) +- [ ] **Subnetting**: Netzadresse, Broadcastadresse, erste/letzte nutzbare IP, Anzahl Hosts +- [ ] **CIDR-Notation** lesen und umrechnen +- [ ] **Route Summarization**: mehrere Netze binär aufschreiben, gemeinsame Bits finden +- [ ] **IPv6-Adressen** kürzen und entfalten (`::` Notation) +- [ ] **EUI-64**: MAC-Adresse → IPv6 Interface ID berechnen +- [ ] **OSPF-Kosten** aus Bandbreite berechnen (Referenzbandbreite / Schnittstellenbandbreite) diff --git a/Netzwerke/labor/Configuration commands.pdf b/Netzwerke/labor/Configuration commands.pdf new file mode 100644 index 0000000..1e87dba Binary files /dev/null and b/Netzwerke/labor/Configuration commands.pdf differ diff --git a/Netzwerke/labor/Lab Support Document.md b/Netzwerke/labor/Lab Support Document.md new file mode 100644 index 0000000..3708a5e --- /dev/null +++ b/Netzwerke/labor/Lab Support Document.md @@ -0,0 +1,517 @@ +# OSPF-BGP Lab – Komplette Referenz + +## Inhaltsverzeichnis + +1. [Lab-Übersicht & Ziel](#1-lab-%C3%BCbersicht--ziel) +2. [Netzwerktopologie](#2-netzwerktopologie) +3. [Konfigurationen der Geräte](#3-konfigurationen-der-ger%C3%A4te) + - [München (Edge-Router, ABR)](#31-m%C3%BCnchen-edge-router-abr) + - [Nürnberg (ABR)](#32-n%C3%BCrnberg-abr) + - [Berlin (ASBR, NAT-Gateway, Core-Router)](#33-berlin-asbr-nat-gateway-core-router) + - [DHCP-Server](#34-dhcp-server) + - [ISP-Telekom (AS 65001)](#35-isp-telekom-as-65001) +4. [NAT-Konfiguration – Erklärung](#4-nat-konfiguration--erkl%C3%A4rung) +5. [Troubleshooting – Befehle & Methoden](#5-troubleshooting--befehle--methoden) + - [Endgeräte (Windows / Linux)](#51-endger%C3%A4te-windows--linux) + - [Interfaces & Layer 1/2](#52-interfaces--layer-12) + - [Switching & Layer 2](#53-switching--layer-2) + - [Routing, DHCP & NAT (Layer 3)](#54-routing-dhcp--nat-layer-3) + - [OSPF Troubleshooting](#55-ospf-troubleshooting) + - [BGP Troubleshooting](#56-bgp-troubleshooting) + - [Troubleshooting-Methoden](#57-troubleshooting-methoden) + +--- + +## 1. Lab-Übersicht & Ziel + +Das Lab simuliert ein **großes Unternehmensnetzwerk (AS 65000)**, das über einen Internet Service Provider (**ISP-Telekom, AS 65001**) mit dem echten, physischen Internet (France-Orange / Google) verbunden ist. + +### Was passiert bei `ping google.com` vom PC in München? + +|Schritt|Layer|Was passiert| +|---|---|---| +|1|L7 (DNS/DHCP)|PC bekommt IP per DHCP (via `ip helper-address`). DNS löst `google.com` → 8.8.8.8 auf.| +|2|L3 (OSPF)|München nutzt OSPF → Route über Nürnberg zum Core-Router Berlin. Area 0 (Backbone), Area 100/200 (Edge).| +|3|L2|LLDP (`lldp run`) erkennt Nachbarn auf MAC-Ebene und verhindert Schleifen.| +|4|L3 (NAT 1)|Berlin übersetzt private IP (`192.168.12.x`) → eigene externe IP (`88.1.1.1`).| +|5|L3 (BGP)|Berlin schickt Paket per eBGP an ISP-Telekom.| +|6|L3 (NAT 2)|ISP-Telekom übersetzt `88.1.1.1` → IP des Heimnetzwerks (France-Orange) → Double NAT.| +|7|—|Paket erreicht Google. Rückweg läuft über NAT und OSPF/BGP wieder rückwärts.| + +**Schlüsselkombination für Internet-Erreichbarkeit:** + +- ISP sendet Default-Route via BGP: `neighbor 88.1.1.1 default-originate` +- Berlin verteilt sie ins OSPF: `default-information originate` + +--- + +## 2. Netzwerktopologie + +``` + ┌─────────────────────────────┐ + │ Area 0 (Backbone) │ + Area 100 │ │ Area 200 +┌──────────────┐ │ Nürnberg ──── Berlin ──── Magdeburg ┌──────────────┐ +│ München │ │ (ABR) (ASBR) (ABR) │ Düsseldorf │ +│ 192.168.12 │ │ │ │ 192.168.1 │ +└──────────────┘ │ DHCP-Server └──────────────┘ + └─────────────────────────────┘ + │ + ISP-Telekom + (AS 65001) + │ + France-Orange + (echtes Internet) +``` + +**Wichtige Netze:** + +|Segment|Netz|Bereich| +|---|---|---| +|München–Nürnberg|`192.168.100.0/30`|Area 100| +|Nürnberg–Berlin|`100.0.10.0/30`|Area 0| +|Berlin–Magdeburg|`100.0.20.0/30`|Area 0| +|Nürnberg–Magdeburg|`100.0.255.0/30`|Area 0| +|Berlin–DHCP-Server|`192.168.10.0/30`|Area 0| +|Berlin–ISP (BGP)|`88.1.1.0/30`|extern| +|LAN München|`192.168.12.0/24`|Area 100| +|LAN Düsseldorf|`192.168.1.0/24`|Area 200| + +--- + +## 3. Konfigurationen der Geräte + +### 3.1 München (Edge-Router, ABR) + +> **Rolle:** Randrouter in Area 100. DHCP-Relay für das lokale LAN. Kein direkter Internet-Zugang – nutzt Default-Route via OSPF. + +```cisco +ip name-server 8.8.8.8 8.8.4.4 + +interface Loopback0 + ip address 217.217.217.217 255.255.255.255 + +interface Ethernet0/0 + description ##to-Nuernberg## + ip address 192.168.100.2 255.255.255.252 + +interface Ethernet0/1 + description ##LAN-MUENCHEN## + ip address 192.168.12.254 255.255.255.0 + ip helper-address 192.168.10.2 ! DHCP-Relay → zentraler DHCP-Server + +interface Ethernet0/2 + no ip address + shutdown + +interface Ethernet0/3 + no ip address + shutdown + +router ospf 217 + passive-interface Ethernet0/1 ! Kein OSPF-Hello ins LAN (Sicherheit) + passive-interface Loopback0 + network 192.168.12.0 0.0.0.255 area 100 + network 192.168.100.0 0.0.0.3 area 100 + network 217.217.217.217 0.0.0.0 area 100 + +ip route 0.0.0.0 0.0.0.0 192.168.100.1 ! Statische Default-Route → Nürnberg +``` + +--- + +### 3.2 Nürnberg (ABR) + +> **Rolle:** Area Border Router zwischen Area 100 (München) und Area 0 (Backbone). Verbindet auch Magdeburg (via `100.0.255.0/30`). + +```cisco +ip name-server 8.8.8.8 8.8.4.4 + +interface Loopback0 + ip address 219.219.219.219 255.255.255.255 + +interface Ethernet0/0 + description ##to-Muenchen## + ip address 192.168.100.1 255.255.255.252 + +interface Ethernet0/1 + description ##to-Berlin## + ip address 100.0.10.2 255.255.255.252 + +interface Ethernet0/2 + description ##to-Magdeburg## + ip address 100.0.255.1 255.255.255.252 + +interface Ethernet0/3 + no ip address + shutdown + +router ospf 12 + network 100.0.10.0 0.0.0.3 area 0 + network 192.168.100.0 0.0.0.255 area 100 ! Inkludiert den /30-Link zu München + network 219.219.219.219 0.0.0.0 area 0 + +ip route 0.0.0.0 0.0.0.0 100.0.10.1 ! Default-Route → Berlin +``` + +> ⚠️ **Hinweis:** `network 192.168.100.0 0.0.0.255 area 100` (Wildcard `/24`) deckt die `192.168.100.0/30`-Verbindung zu München ab. Das ABR-Verhalten macht Nürnberg zum Übergang zwischen Area 100 und Area 0. + +--- + +### 3.3 Berlin (ASBR, NAT-Gateway, Core-Router) + +> **Rolle:** Herzstück des Netzes. Verbindet OSPF (intern) mit BGP (extern), macht NAT für das gesamte `192.168.0.0/16`- und `100.0.0.0/16`-Netz. + +```cisco +ip name-server 8.8.8.8 8.8.4.4 + +interface Loopback0 + ip address 220.220.220.220 255.255.255.255 + +interface Ethernet0/0 + description ##to-Nuernberg## + ip address 100.0.10.1 255.255.255.252 + ip nat inside + +interface Ethernet0/1 + description ##to-Magdeburg## + ip address 100.0.20.1 255.255.255.252 + ip nat inside + +interface Ethernet0/2 + description ##Internet## + ip address dhcp ! Bekommt externe IP von ISP/France-Orange + ip nat outside + +interface Ethernet0/3 + description ##to-DHCP-SERVER## + ip address 192.168.10.1 255.255.255.252 + ip nat inside + +! --- OSPF --- +router ospf 220 + router-id 220.220.220.220 + passive-interface Ethernet0/2 ! Kein OSPF ins Internet + network 100.0.10.0 0.0.0.3 area 0 + network 100.0.20.0 0.0.0.3 area 0 + network 192.168.10.0 0.0.0.3 area 0 + network 220.220.220.220 0.0.0.0 area 0 + redistribute bgp 65000 metric 10 metric-type 1 ! BGP-Routen ins OSPF einbringen + default-information originate ! Default-Route (0.0.0.0) ins OSPF verteilen + +! --- BGP --- +router bgp 65000 + network 192.168.0.0 mask 255.255.0.0 ! Eigenes Netz dem ISP ankündigen + neighbor 88.1.1.2 remote-as 65001 ! eBGP-Nachbarschaft zum ISP + +! --- NAT --- +ip access-list standard 1 + 10 permit 192.168.0.0 0.0.255.255 ! Alle privaten 192.168.x.x-Netze + 20 permit 100.0.0.0 0.0.255.255 ! Interne 100.0.x.x-Netze + +ip nat inside source list 1 interface Ethernet0/2 overload ! PAT auf externe IP + +ip route 0.0.0.0 0.0.0.0 dhcp ! Default-Route von DHCP (ISP) +``` + +--- + +### 3.4 DHCP-Server + +> **Rolle:** Zentraler DHCP-Dienst für München und Düsseldorf. Erreichbar über `ip helper-address` auf den jeweiligen Edge-Routern. + +```cisco +hostname DHCP-SERVER + +! --- Ausschluss statischer IPs (werden nicht per DHCP vergeben) --- +ip dhcp excluded-address 192.168.12.254 ! Gateway München +ip dhcp excluded-address 192.168.12.1 192.168.12.10 +ip dhcp excluded-address 192.168.1.1 192.168.1.10 +ip dhcp excluded-address 192.168.1.254 ! Gateway Düsseldorf + +! --- DHCP-Pool München --- +ip dhcp pool Muenchen + network 192.168.12.0 255.255.255.0 + default-router 192.168.12.254 + dns-server 8.8.8.8 8.8.4.4 + lease 7 ! Lease-Zeit: 7 Tage + +! --- DHCP-Pool Düsseldorf --- +ip dhcp pool Duesseldorf + network 192.168.1.0 255.255.255.0 + default-router 192.168.1.254 + dns-server 8.8.8.8 8.8.4.4 + lease 7 + +! --- Interface & Default-Route --- +interface Ethernet0/0 + description ##to-BERLIN## + ip address 192.168.10.2 255.255.255.252 + +ip route 0.0.0.0 0.0.0.0 192.168.10.1 ! Default-Route → Berlin +``` + +--- + +### 3.5 ISP-Telekom (AS 65001) + +> **Rolle:** Simuliert den Internet Service Provider. Baut eBGP-Nachbarschaft zu Berlin auf, verteilt Default-Route und macht Double NAT zum echten Heimnetzwerk (France-Orange). + +```cisco +! --- Interface zum echten Internet (France-Orange) --- +interface Ethernet0/1 + ip address dhcp ! Echte IP vom Heimrouter + ip nat outside + +interface Ethernet0/0 + ip nat inside + +! --- NAT (Double NAT für das Lab) --- +ip access-list standard 10 + 10 permit 88.1.1.0 0.0.0.3 ! Transfernetz Berlin↔ISP + +ip nat inside source list 10 interface Ethernet0/1 overload + +! --- BGP --- +router bgp 65001 + neighbor 88.1.1.1 remote-as 65000 ! eBGP-Nachbarschaft zu Berlin + neighbor 88.1.1.1 default-originate ! Gibt Berlin eine Default-Route (→ Internet) + +! --- Default-Route ins echte Internet --- +ip route 0.0.0.0 0.0.0.0 dhcp +``` + +--- + +## 4. NAT-Konfiguration – Erklärung + +### Schritt 1: Access-List definieren – wer darf NAT nutzen? + +```cisco +ip access-list standard 1 + 10 permit 192.168.0.0 0.0.255.255 +``` + +> Die Wildcard `0.0.255.255` bedeutet: Erste zwei Oktette (`192.168`) müssen exakt passen, die letzten zwei sind beliebig → alle IPs von `192.168.0.0` bis `192.168.255.255` sind erlaubt. + +--- + +### Schritt 2: NAT Overload (PAT) aktivieren + +```cisco +ip nat inside source list 1 interface Ethernet0/2 overload +``` + +> `overload` = **PAT (Port Address Translation)**. Mehrere interne Hosts teilen sich eine öffentliche IP – die Unterscheidung erfolgt über unterschiedliche Portnummern. Ohne `overload` könnte nur ein Host gleichzeitig die externe IP nutzen. + +--- + +### Schritt 3: NAT-Rollen der Interfaces festlegen + +```cisco +interface Ethernet0/0 + ip nat inside ! Interne Seite (Richtung Nürnberg / LAN) + +interface Ethernet0/2 + ip nat outside ! Externe Seite (Richtung ISP / Internet) +``` + +--- + +## 5. Troubleshooting – Befehle & Methoden + +> 💡 **Goldene Regel:** Immer nach dem **OSI-Modell von unten nach oben** arbeiten (Bottom-Up): Kabel → Interfaces → Nachbarschaften → Routing-Tabelle → Anwendung. + +--- + +### 5.1 Endgeräte (Windows / Linux) + +#### Windows + +```cmd +ipconfig /all # IP, Subnetzmaske, Gateway, DNS – prüft ob DHCP funktioniert hat +ping # Erreichbarkeit testen +tracert # Jeden Hop (Router) auf dem Weg anzeigen – wo bleibt das Paket? +arp -a # ARP-Cache – welche MAC-Adresse gehört zum Default-Gateway? +route print # Lokale Routing-Tabelle des Windows-PCs +nslookup google.com # DNS-Auflösung testen (Layer 7) +``` + +#### Linux / Mac + +```bash +ip a # (oder ifconfig) – IP-Adressen & Interface-Status +ping # Erreichbarkeit testen +traceroute # Pfad des Pakets verfolgen +mtr # Live-Traceroute (empfohlen!) +ip neigh # (oder arp -n) – ARP-Tabelle anzeigen +ip route # Default-Gateway & Routing-Tabelle +dig google.com # Detailreiche DNS-Abfrage (Layer 7) +``` + +--- + +### 5.2 Interfaces & Layer 1/2 + +```cisco +show ip interface brief +! Der wichtigste Befehl! Zeigt IP und Status aller Interfaces (muss "Up/Up" sein) + +show interfaces +! z.B.: show interfaces e0/0 +! Zeigt CRC-Errors, Drops, Duplex-Mismatches, MTU-Probleme + +show interfaces description +! Zeigt konfigurierte Beschreibungen (z.B. "##to-Nuernberg##") +! Extrem hilfreich in großen Netzen +``` + +--- + +### 5.3 Switching & Layer 2 + +```cisco +show lldp neighbors +show lldp neighbors detail ! IP des Nachbarn ebenfalls anzeigen +show cdp neighbors ! Alternativ (Cisco-proprietär) + +show mac address-table ! Welche MAC-Adresse wurde an welchem Port gelernt? + +show spanning-tree ! Ist ein Port blockiert (Loop-Prevention)? +show spanning-tree vlan ! Root-Bridge-Status für ein bestimmtes VLAN +``` + +--- + +### 5.4 Routing, DHCP & NAT (Layer 3) + +```cisco +show ip route +! Komplette Routing-Tabelle. Achte auf: +! O = OSPF +! B = BGP +! C = Connected (direkt verbunden) +! S* = Default-Route (statisch) + +show ip route +! z.B.: show ip route 8.8.8.8 +! Sagt exakt, welches Interface für dieses Ziel genutzt wird + +ping source +! Extrem wichtig! Simuliert Traffic aus dem LAN heraus +! Beispiel: ping 8.8.8.8 source 192.168.12.254 + +show ip arp ! IPs → MAC-Adressen auf dem Router + +show ip dhcp binding ! Welchen PCs hat der DHCP-Server eine IP gegeben? + +show ip nat translations ! Aktive NAT-Tabelle – werden interne IPs übersetzt? +``` + +--- + +### 5.5 OSPF Troubleshooting + +> **Häufige Fehlerursachen:** Falsche Timer, unterschiedliche Areas, fehlende `network`-Statements, passive-interface auf falschem Interface. + +```cisco +show ip ospf neighbor +! Zeigt Nachbarn. Status MUSS sein: +! FULL → alles OK +! 2WAY → OK in Broadcast-Netzen +! EXSTART / INIT / DOWN → Problem! + +show ip ospf interface brief +! Zeigt auf einen Blick: +! - Auf welchen Interfaces OSPF läuft +! - In welcher Area sie sind +! - Ob sie auf "Passive" stehen + +show ip route ospf +! Nur OSPF-gelernte Routen anzeigen (gefilterte Sicht) + +show ip ospf database +! Fortgeschritten: Rohe LSAs (Link-State Advertisements) anzeigen + +clear ip ospf process +! OSPF-Prozess hart neu starten → Nachbarschaften werden neu aufgebaut +! ⚠️ Achtung: Unterbricht kurzzeitig den Traffic! +``` + +--- + +### 5.6 BGP Troubleshooting + +> **Häufige Fehlerursachen:** Falsche AS-Nummern, Next-Hop nicht erreichbar, fehlende `network`-Statements, keine Route im BGP mit `>` (Best-Flag). + +```cisco +show ip bgp summary +! Wichtigster BGP-Befehl! Spalte "State/PfxRcd" ganz rechts: +! Zahl (0, 3, 10, ...) → BGP ist UP +! "Idle" oder "Active" → BGP ist KAPUTT + +show ip bgp +! BGP-Tabelle anzeigen. Achte auf: +! *> = Valid & Best → wird ins OSPF weitergegeben +! Fehlt das ">" → Route wird NICHT weitergegeben! +! Next-Hop muss erreichbar sein! + +show ip bgp neighbors advertised-routes +! Welche Netze schickt dein Router an den Nachbarn? + +show ip bgp neighbors received-routes +! Was schickt der Nachbar dir? +! ⚠️ Erfordert "soft-reconfiguration inbound" in der Config + +clear ip bgp * soft +! "Route Refresh" ohne BGP-Session zu trennen +! Zwingt Router, sich Routen neu zu schicken +! Sehr nützlich nach Config-Änderungen +``` + +--- + +### 5.7 Troubleshooting-Methoden + +#### 1. Bottom-Up (Layer 1 → Layer 7) ⬆️ + +**Wann nutzen:** Netzwerk komplett neu aufgebaut, totaler Ausfall (Link Down), keine Anhaltspunkte vorhanden. + +**Logik:** Bevor ich frage warum OSPF kaputt ist, prüfe ich ob das Interface überhaupt UP ist. + +``` +L1: Kabel / Port up? +L2: Nachbarn per LLDP/CDP sichtbar? +L3: Direkte Nachbarn pingbar? Routing-Protokoll-Nachbarschaften (OSPF/BGP) stehen? +L3: Routen bekannt (Routing-Tabelle)? +L4-L7: Dienst / Applikation erreichbar? +``` + +--- + +#### 2. Top-Down (Layer 7 → Layer 1) ⬇️ + +**Wann nutzen:** User sagt "Webseite geht nicht", aber Teams-Call läuft problemlos → L1–L3 funktioniert bereits. + +**Logik:** Oben anfangen (Browser-Cache, DNS, Firewall Port 443?) und sich nach unten vorarbeiten. Oft muss man gar nicht bis zu Switches hinabsteigen. + +``` +L7: Browser-Cache leer? DNS-Auflösung ok? +L4: Firewall blockiert Port 443? +L3: Routing stimmt? +L2/L1: (oft gar nicht nötig) +``` + +--- + +#### 3. Divide and Conquer (Teile & Herrsche) ↕️ + +**Wann nutzen:** Der absolute Favorit erfahrener Admins im Alltag. Direkt in die Mitte des OSI-Modells springen (Layer 3: Ping / Traceroute). + +``` +Ping geht durch? + → Fehler liegt OBEN (L4–L7): Port geblockt, Applikation abgestürzt, DNS kaputt + +Ping schlägt fehl? + → Fehler liegt UNTEN (L1–L2): falsches VLAN, fehlende Route, kaputtes Kabel +``` diff --git a/Netzwerke/labor/OSPF-BGP LAB.pdf b/Netzwerke/labor/OSPF-BGP LAB.pdf new file mode 100644 index 0000000..998e7bc Binary files /dev/null and b/Netzwerke/labor/OSPF-BGP LAB.pdf differ diff --git a/Netzwerke/labor/Troubleshooting.pdf b/Netzwerke/labor/Troubleshooting.pdf new file mode 100644 index 0000000..1bda667 Binary files /dev/null and b/Netzwerke/labor/Troubleshooting.pdf differ diff --git a/Netzwerke/labor/nw3 - labor.md b/Netzwerke/labor/nw3 - labor.md new file mode 100644 index 0000000..358d520 --- /dev/null +++ b/Netzwerke/labor/nw3 - labor.md @@ -0,0 +1,16 @@ +# Themen aus NW3 Labor (05.03.26) + +- Redundanz -> Broadcast Storm +- Spanning Tree Protocol (STP) +- BPDU für Bestimmung von RouteBridge und Portarten nach Prioritäten, Mac-Adressen und Kosten je Bandbreite +- Portarten in Netzwerk: + - Disabled + - Designated + - Blocked + - Root +- Portkosten und Priorität +- VLAN + - Konzept + - Konfiguration in Cisco Switch +- Link Aggregation +- SpanningTree Portfast \ No newline at end of file diff --git a/Netzwerke/labor/nw4 - labor.md b/Netzwerke/labor/nw4 - labor.md new file mode 100644 index 0000000..34d2791 --- /dev/null +++ b/Netzwerke/labor/nw4 - labor.md @@ -0,0 +1,6 @@ +# Themen aus NW4 Labor (19.03.26) + +- Zusammenfassung von IPv4-Adressen (**Supernetting**) + - IP-Adressen zusammenfassen, dass die Netze actually kleiner werden + - Größtmögliches Bit im Oktett zusammenfassen (siehe Vorlesung Beispiel) +- OSPF \ No newline at end of file diff --git a/Netzwerke/labor/nw6 - labor.md b/Netzwerke/labor/nw6 - labor.md new file mode 100644 index 0000000..36a8956 --- /dev/null +++ b/Netzwerke/labor/nw6 - labor.md @@ -0,0 +1 @@ +# NW6 Labor diff --git a/Netzwerke/zusammenfassungen/Troubleshooting_Netz.png b/Netzwerke/zusammenfassungen/Troubleshooting_Netz.png new file mode 100644 index 0000000..a9d74ac Binary files /dev/null and b/Netzwerke/zusammenfassungen/Troubleshooting_Netz.png differ diff --git a/Netzwerke/zusammenfassungen/nw1 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw1 - zusammenfassung.md new file mode 100644 index 0000000..960460f --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw1 - zusammenfassung.md @@ -0,0 +1,203 @@ +# IT2222 – Netzwerktechnik +**Dozentin:** Gabriele Schrenk | HWR Berlin | 17. & 19.02.2026 + +--- + +## 1. Netzwerkgrundlagen + +Ein **Netzwerk** ist ein Verbund zur Datenkommunikation, der den Datenaustausch zwischen Knoten (Stationen) ermöglicht. + +--- + +## 2. Netzwerk-Komponenten + +| Komponente | Funktion | +|---|---| +| **Repeater** | Verstärkt und überträgt Signale zwischen zwei Netzsegmenten | +| **Hub** | Verbindet mehrere Geräte (physikalischer Ring, virtueller Bus) – **veraltet** | +| **Bridge** | Verbindet zwei Netzwerke – **veraltet** | +| **Switch** | Verbindet mehrere Netzsegmente kollisionsfrei | +| **Router** | Verbindet mehrere Netze miteinander | +| **Gateway** | Wandelt Protokolle um | + +--- + +## 3. Adressierungsarten + +- **Unicast** – Adressierung an genau einen Empfänger; bidirektionale Kommunikation; Punkt-zu-Punkt +- **Broadcast** – Sendet an alle Systeme eines Netzabschnitts; Punkt-zu-Mehrpunkt +- **Multicast** – Sendet an eine definierte Gruppe mit verschiedenen Adressen; unidirektional, Punkt-zu-Mehrpunkt +- **Anycast** – Eine einzelne IP-Adresse wird von mehreren Servern geteilt; unidirektional, Punkt-zu-Punkt (nächster verfügbarer Server antwortet) + +--- + +## 4. Netzwerk-Topologien + +### Physikalische vs. Logische Topologie +- **Physikalisch:** Wie Geräte physisch über ein Medium verbunden sind +- **Logisch:** Wie Komponenten miteinander kommunizieren + +### 4.1 Bus-Topologie +- Einsatz: industrielles Umfeld (z. B. Automotive) +- Punkt-zu-Mehrpunkt-Verbindung; Abschlusswiderstand an Kabelenden erforderlich + +**Vorteile:** Knotenausfall beeinflusst das Netz nicht · geringe Kosten · einfache Verkabelung · keine aktiven Netzkomponenten + +**Nachteile:** Leicht abhörbar (Verschlüsselung nötig) · defektes Kabel blockiert den gesamten Netzstrang · Datenstau möglich + +### 4.2 Stern-Topologie +- Punkt-zu-Punkt-Verbindung mit zentralem Knoten (Switch/Hub) + +**Vorteile:** Knotenausfall beeinflusst das Netz nicht · hohe Übertragungsraten (mit Switch) · leicht erweiterbar · leicht verständlich + +**Nachteile:** Ausfall des zentralen Verteilers legt das gesamte Netz lahm · niedrige Übertragungsraten wenn Hub statt Switch verwendet wird + +### 4.3 Baum-Topologie +- Punkt-zu-Punkt-Verbindung, hierarchisch gegliedert (Wurzel → Äste → Blätter) + +**Vorteile:** Knotenausfall beeinflusst das Netz nicht · strukturell erweiterbar · große Entfernungen realisierbar + +**Nachteile:** Ausfall eines Verteilers legt den gesamten „Ast" lahm · Engpässe an der Wurzel · Latenzprobleme + +### 4.4 Leaf-Spine-Architektur (Data Center) +- Modernes Rechenzentrum-Design mit zwei Ebenen: Spine-Switches (Kern) und Leaf-Switches (Zugang) + +**Vorteile:** Sehr leistungsfähig · hohe Skalierbarkeit · komplett redundant + +**Nachteile:** Hoher Verkabelungsaufwand · hohe Anzahl an Switches · komplexe Auslastungsberechnung bei mehreren Herstellern + +### 4.5 Maschen-Topologie (Mesh) +- Jeder Knoten hat mindestens einen Link zu anderen Knoten; vollvermaschtes Netz ermöglicht Umleitung bei Knotenausfall + +**Vorteile:** Sehr sicher · sehr leistungsfähig · keine Streckenführung nötig (vollvermascht) + +**Nachteile:** Hoher Verkabelungsaufwand · hoher Energieverbrauch · komplexe Streckenführung (teilvermascht) + +### 4.6 Zell-Topologie (z. B. WLAN) +- Punkt-zu-Mehrpunkt-Verbindung; drahtloses Netz + +**Vorteile:** Knotenausfall beeinflusst das Netz nicht · kabellos + +**Nachteile:** Unsicher (Verschlüsselung erforderlich) · störanfällig · begrenzte Reichweite + +--- + +## 5. Layer 2 – Data Link Layer (Sicherungsschicht) + +### 5.1 Funktionsweise eines Switches +Ein Switch nutzt einen internen Speicher (Memory/CAM-Tabelle), um Datenpakete gezielt weiterzuleiten – ähnlich einem Kreisverkehr, der Fahrzeuge in die richtige Richtung schickt. + +### 5.2 Switch-Funktionalität +- **Lernen:** Pflegt eine Adresstabelle pro Interface; merkt sich MAC-Quelladressen +- **Unicast:** Weiterleitung an das Interface, dessen Zieladresse in der Tabelle steht +- **Broadcast:** Weiterleitung an alle Interfaces +- **Flooding:** Weiterleitung an alle Interfaces, wenn die Zieladresse noch nicht in der Tabelle ist + +### 5.3 Ethernet-Rahmenformat +Ein Ethernet-Frame besteht aus folgenden Feldern: + +| Feld | Größe | Bedeutung | +|---|---|---| +| Preamble | 8 Byte | Bitmaske (010101...) zur Synchronisierung | +| Destination Address | 6 Byte | Ziel-MAC-Adresse | +| Source Address | 6 Byte | Quell-MAC-Adresse | +| Type/Length | 2 Byte | DIX Typfeld oder IEEE 802.2 Länge | +| DATA | 46–1500 Byte | Nutzdaten | +| CRC | 4 Byte | 32-Bit-Prüfsumme über Header und Daten | + +### 5.4 Ethernet-Adressierung (MAC-Adresse) +- Jedes Ethernet-Interface hat eine **eindeutige 48-Bit-Adresse** (MAC-Adresse) +- Darstellung: hexadezimal, z. B. `00:80:48:E8:71:47` +- Aufbau: **OUI** (Organizationally Unique Identifier, 24 Bit, vom Hersteller) + **OUI-owner assigned number** (24 Bit, Gerätenummer) +- **Broadcast-Adresse:** `FF:FF:FF:FF:FF:FF` → jedes Interface verarbeitet diesen Frame + +--- + +## 6. IP-Adressierung (Layer 3) + +- IP-Adressen sind **32 Bit** lang (4 Byte) +- Darstellung: punktgetrennte Dezimalzahlen (z. B. `131.108.122.204`) +- Bestehen aus **Netzanteil** und **Hostanteil** +- Ergänzt durch symbolische Namen (DNS) + +**Beispiel:** +``` +Binär: 10000011 01101100 01111010 11001100 +Dezimal: 131 . 108 . 122 . 204 +``` + +--- + +## 7. ARP – Address Resolution Protocol + +- Verbindet **Layer-2-Adressen (MAC)** mit **Layer-3-Adressen (IP)** +- Wird für IP-Adressen im **gleichen Subnetz** per Broadcast verwendet +- Für IP-Adressen in **anderen Subnetzen** wird die MAC-Adresse des Gateways verwendet + +### ARP-Ablauf +1. **ARP-Request** (Broadcast): „Welche MAC-Adresse hat IP 172.16.3.2?" +2. Zielhost erkennt seine IP-Adresse und antwortet +3. **ARP-Reply** (Unicast): „Meine MAC-Adresse ist 0800.0020.1111" +4. Sender trägt die Zuordnung in seine **ARP-Tabelle** ein + +### Sicherheitshinweis +- ARP-Antworten werden **nicht überprüft** → Angriff durch **ARP-Spoofing** möglich! + +### Vollständiges Paket benötigt 4 Adressen: +- Quell-MAC-Adresse +- Ziel-MAC-Adresse +- Quell-IP-Adresse +- Ziel-IP-Adresse + +--- + +## 8. ICMP – Internet Control Message Protocol + +- **Zweck:** Informiert über Fehlerzustände im Netz und liefert rudimentäre Statusinformationen +- ICMP ist ein **Kontrollprotokoll**, nicht für Datentransport gedacht +- Bei Verlust von ICMP-Paketen erfolgt **kein automatischer Neuversand** + +### Beispiele für ICMP-Einsatz +- Datagramm erreicht sein Ziel nicht +- Router kann ein Paket nicht weiterleiten +- Router kennt einen kürzeren Weg (Redirect) + +### ICMPv4 (RFC 792) +- Layer-3-Protokoll; verbindungslos +- Verwendet IP für die Kommunikation + +**ICMP-Header (32 Bit):** +| Feld | Größe | +|---|---| +| Typ-Feld | 8 Bit | +| Code-Feld | 8 Bit | +| Checksumme | 16 Bit | + +### ICMP Echo Request / Reply (Ping) +- **Sender** schickt einen ICMP Echo-Request +- **Empfänger** sendet die Daten identisch zurück (Echo-Reply) +- Einfachste Methode zur **Verbindungsprüfung** +- Im Fehlerfall werden ICMP-Fehlerpakete gesendet + +### ICMP Timestamp +- Dient der **Laufzeitprüfung** zwischen zwei Systemen +- Sender überträgt die Absendezeit in Millisekunden nach Mitternacht +- Empfänger trägt Empfangszeit und Absendezeit für den Rückweg ein (eliminiert interne Verarbeitungsverzögerung) + +--- + +## Schnellreferenz: Schlüsselbegriffe + +| Begriff | Bedeutung | +|---|---| +| MAC-Adresse | Eindeutige 48-Bit-Hardware-Adresse (Layer 2) | +| IP-Adresse | 32-Bit-logische Adresse (Layer 3) | +| ARP | Auflösung von IP → MAC im lokalen Netz | +| ICMP | Kontrollprotokoll für Fehler und Diagnosemeldungen | +| Switch | Layer-2-Gerät zur kollisionsfreien Segmentierung | +| Router | Layer-3-Gerät zur Verbindung verschiedener Netze | +| Broadcast | Nachricht an alle Teilnehmer im Netzabschnitt | +| Flooding | Switch leitet weiter, wenn Ziel-MAC unbekannt | +| OUI | Herstellerkennung in der MAC-Adresse | +| CRC | Prüfsumme zur Fehlererkennung im Ethernet-Frame | +| TTL | Time to Live – begrenzt Lebensdauer von IP-Paketen | diff --git a/Netzwerke/zusammenfassungen/nw2 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw2 - zusammenfassung.md new file mode 100644 index 0000000..cbc651e --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw2 - zusammenfassung.md @@ -0,0 +1,157 @@ +# nw2 - Zusammenfassung + +## 1. Grundlagen der Netzwerkkommunikation +Ein Netzwerk ist ein Zusammenschluss verschiedener IT-Systeme zum Zweck des Datenaustausches. + +### Grundlegende Komponenten +* **Endsysteme (Hosts):** Start- und Endpunkte der Datenübertragung (PCs, Server, Smartphones). +* **Kopplungselemente:** Verbinden Netzabschnitte oder ganze Netze (Hubs, Switche, Router). +* **Übertragungsmedien:** Kabel (Kupfer, Glasfaser) oder Funkwellen (WLAN). + +### Kommunikationsarten +1. **Unicast (Punkt-zu-Punkt):** Gezielte Verbindung zwischen einem Sender und einem Empfänger. +2. **Multicast (Punkt-zu-Mehrpunkt):** Nachricht an eine bestimmte Gruppe von Teilnehmern. +3. **Broadcast (Punkt-zu-Mehrpunkt):** Nachricht an alle Teilnehmer in einem Netzsegment. + +--- + +## 2. Netzwerktopologien und Klassifizierung +Man unterscheidet zwischen der **physikalischen Topologie** (tatsächliche Verkabelung) und der **logischen Topologie** (tatsächlicher Datenfluss). + +### Topologien im Überblick +* **Bus-Topologie:** Alle Teilnehmer hängen an einem Hauptkabel. Günstig, aber bei Kabelbruch fällt das gesamte Netz aus. +* **Stern-Topologie:** Alle Teilnehmer sind mit einem zentralen Switch verbunden. Höchste Flexibilität; fällt ein Kabel aus, betrifft es nur einen Teilnehmer. +* **Ring-Topologie:** Daten wandern von Rechner zu Rechner. Ausfall eines Geräts kann den Ring unterbrechen. +* **Vermaschtes Netz (Mesh):** Jeder mit jedem (vollvermascht) oder teils vermascht. Höchste Ausfallsicherheit, aber teuer in der Verkabelung. + +### Entfernungsklassen +* **PAN (Personal Area Network):** Bluetooth, ca. 1-10 m. +* **LAN (Local Area Network):** Gebäude/Campus, 10 m bis ca. 1 km. +* **MAN (Metropolitan Area Network):** Stadtnetz, bis 100 km. +* **WAN (Wide Area Network):** Länder/Kontinente. +* **GAN (Global Area Network):** Weltweit (Internet). + +--- + +## 3. Das OSI-Referenzmodell +Das OSI-Modell (Open Systems Interconnection) dient der Standardisierung der Kommunikation über sieben Schichten. + +### Visuelle Darstellung + +| Schicht | Ebene | Funktion | PDU (Einheit) | Hardware / Beispiel | +| :------ | :------------- | :----------------------------- | :------------ | :--------------------------- | +| **7** | Anwendung | Schnittstelle für Software | Daten | HTTP, FTP, Browser | +| **6** | Darstellung | Datenformate, Kompression | Daten | JPEG, ASCII, Verschlüsselung | +| **5** | Sitzung | Dialogsteuerung, Checkpoints | Daten | RPC, NetBIOS | +| **4** | Transport | End-zu-End Fehlersicherung | Segmente | TCP, UDP | +| **3** | Vermittlung | Routing, logische Adressierung | Pakete | Router, IP, ICMP | +| **2** | Sicherung | Physische Adressierung (MAC) | Frames | Switch, Ethernet | +| **1** | Bitübertragung | Physikalische Signale, Kabel | Bits | Hub, Repeater, Kabel | + +**Datenkapselung:** Beim Senden wird eine **SDU** (Service Data Unit) von der höheren Schicht übernommen und durch Hinzufügen eines Protokoll-Headers zur **PDU** (Protocol Data Unit) der aktuellen Schicht. Beim Empfänger findet der umgekehrte Prozess statt (**Decapsulation**). + +--- + +## 4. Layer 1 – Übertragungsmedien (Physical Layer) +Diese Schicht legt mechanische und elektrische Eigenschaften fest. + +* **Kupferkabel (Twisted-Pair):** * Nutzt Differenzsignale auf verdrillten Adernpaaren, um elektromagnetische Störungen zu neutralisieren. + * Wellenwiderstand in der Netzwerktechnik meist 50 Ohm (im Vergleich zu 75 Ohm bei TV-Kabeln). +* **Lichtwellenleiter (LWL):** + * **Singlemode (OS1/OS2):** Kern ca. 9 µm. Nutzt Laser. Sehr hohe Reichweite (bis 10 km+) und Bandbreite, da kaum Signalstreuung (Modendispersion). + * **Multimode (OM1-OM5):** Kern 50 oder 62,5 µm. Nutzt LED/VCSEL. Günstiger, aber auf kürzere Distanzen begrenzt (bis ca. 550 m), da die Lichtstrahlen unterschiedlich reflektiert werden. + +--- + +## 5. Layer 2 – Sicherungsschicht (Data Link Layer) +Hier geht es um den fehlerfreien Transport innerhalb eines Netzsegments. + +### Ethernet & Switching +* **MAC-Adresse:** 48 Bit lange, eindeutige Hardwareadresse (z. B. `00-80-41-ae-fd-7e`). +* **Switching-Methoden:** + 1. **Store-and-forward:** Der Frame wird komplett eingelesen, auf Fehler (CRC) geprüft und dann weitergeleitet (Sicher, aber langsamer). + 2. **Cut-through:** Weiterleitung beginnt, sobald die Ziel-MAC gelesen wurde (Schnell, leitet aber auch defekte Frames weiter). + +### Spanning Tree Protocol (STP - 802.1D) +Verhindert redundante Schleifen in Netzen, die zu "Broadcast-Stürmen" führen würden. +1. **Wahl der Root-Bridge:** Switch mit der niedrigsten Bridge ID (Priorität + MAC) wird Chef. +2. **Pfadauswahl:** Redundante Wege werden logisch in den Zustand "Blocking" versetzt. + +### VLANs (802.1Q) +Ermöglichen die logische Trennung von Netzen auf demselben physikalischen Switch. +* **Statische VLANs:** Port-basiert. +* **Dynamische VLANs:** Zuordnung basierend auf der MAC-Adresse des Endgeräts. + +--- + +## 6. WLAN (Wireless LAN - 802.11) +WLAN ist ein "Shared Medium" – alle Geräte teilen sich die Funkfrequenz. + +* **Frequenzen:** * 2,4 GHz (Gute Reichweite, aber überlaufen durch Bluetooth/Mikrowellen). + * 5 GHz (Höhere Datenraten, weniger Reichweite). +* **Prozess beim Verbindungsaufbau:** + 1. **Scanning/Probing:** Suchen nach verfügbaren Netzen (SSID). + 2. **Authentifizierung:** Prüfung der Zugriffsberechtigung. + 3. **Assoziation:** Der Client meldet sich am Access Point an und bekommt eine Port-ID (ähnlich wie beim Switch). + + + +--- + +## 7. Layer 3 – Vermittlungsschicht (IPv4 Adressierung) +Layer 3 verbindet unterschiedliche Netzwerke durch Routing. + +### IPv4-Adressstruktur +Eine Adresse hat 32 Bit (4 Oktette à 8 Bit). +* **Klasse A:** 1 – 126 (Große Netze) +* **Klasse B:** 128 – 191 (Mittlere Netze) +* **Klasse C:** 192 – 223 (Kleine Netze) +* **Klasse D:** 224 – 239 (Multicast) +* **Klasse E:** 240 – 255 (Forschung/Reserviert) + +**Spezialfall:** `127.0.0.1` ist die Loopback-Adresse (Localhost), um die eigene Netzwerkkarte zu testen. + +### Binäre Umrechnung (Wichtig!) +Computer denken in Binärzahlen. Ein Oktett hat die Wertigkeiten: +`128 | 64 | 32 | 16 | 8 | 4 | 2 | 1` + +**Beispiel Umrechnung der Zahl 144:** +1. Passt 128 in 144? **JA** (Bit = 1), Rest 16. +2. Passt 64 in 16? **NEIN** (Bit = 0). +3. Passt 32 in 16? **NEIN** (Bit = 0). +4. Passt 16 in 16? **JA** (Bit = 1), Rest 0. +5. Alle weiteren (8, 4, 2, 1) sind **0**. +**Binärergebnis: 10010000** + +--- + +## 8. TCP/IP-Referenzmodell +Im Gegensatz zum OSI-Modell hat das praxisnahe TCP/IP-Modell meist nur 4 Schichten: +1. **Application:** (OSI 5-7) – HTTP, DNS, SMTP. +2. **Transport:** (OSI 4) – TCP (verbindungsorientiert) und UDP (verbindungslos). +3. **Internet:** (OSI 3) – IPv4, IPv6, ICMP. +4. **Network Access:** (OSI 1-2) – Ethernet, WLAN, ARP. + +## 9. Definitionen +### MAC-Adresse (Media Access Control) + +Die MAC-Adresse ist die **physische Identität** deines Geräts. Sie wird vom Hersteller direkt in den Netzwerkchip (z. B. WLAN-Modul oder Ethernet-Karte) "eingebrannt". + +- **Eigenschaft:** Weltweit einzigartig und (normalerweise) unveränderlich. +- **Vergleich:** Wie die **Fahrgestellnummer** eines Autos. Egal wo das Auto hinfährt, die Nummer bleibt gleich. +- **Format:** Besteht meist aus sechs Paaren von Hexadezimalzahlen, z. B. `00:1A:2B:3C:4D:5E`. +### IP-Adresse (Internet Protocol) +Die IP-Adresse ist die **logische Anschrift** deines Geräts in einem Netzwerk. Sie wird dir zugewiesen, damit Datenpakete wissen, wohin sie geliefert werden müssen. + +- **Eigenschaft:** Veränderlich. Sie hängt davon ab, mit welchem Netzwerk du gerade verbunden bist. +- **Vergleich:** Wie eine **Postanschrift**. Wenn du umziehst (oder dich in ein anderes WLAN einwählst), ändert sich deine Adresse, damit die Post dich finden kann. +- **Formate:** + - **IPv4:** Vier Zahlenblöcke (z. B. `192.168.178.1`). + - **IPv6:** Ein längeres Format für mehr verfügbare Adressen (z. B. `2001:0db8:85a3...`). +#### Der entscheidende Unterschied + +|**Merkmal**|**MAC-Adresse**|**IP-Adresse**| +|---|---|---| +|**Was ist es?**|Hardware-Identität|Netzwerk-Standort| +|**Wer vergibt sie?**|Der Hersteller|Der Router / Provider| +|**Sichtbarkeit**|Lokal im eigenen Netzwerk|Weltweit (bei öffentlichen IPs)| diff --git a/Netzwerke/zusammenfassungen/nw3 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw3 - zusammenfassung.md new file mode 100644 index 0000000..a432c5e --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw3 - zusammenfassung.md @@ -0,0 +1,711 @@ +# IT2221 – Netzwerktechnik: Themenliste & Zusammenfassung +**Dozentin:** Gabriele Schrenk +**Datum:** 06.03.2026 +**Umfang:** 92 Folien + +--- +## Themenliste (Inhaltsverzeichnis) + +1. **Organisatorisches** (Folie 1–2) +2. **Layer 2 – Data Link Layer / Sicherungsschicht** (Folie 3–9) + - OSI-Modell Kommunikation + - VLAN: Realisierung + - VLAN: IEEE 802.1q (Tagging, Frame-Struktur) + - Priorisierung nach IEEE 802.1p (QoS auf Layer 2) +3. **Layer 3 – Network Layer / Netzwerkschicht** (Folie 10–52) + - IPv4 – Grundlagen und Header + - Komponenten einer IP-Adresse + - IP-Adressklassen (A, B, C) + - Unterteilung der IP-Adressen (Netz- und Broadcastadresse) + - Subnetze und Subnetzmasken (Classless) + - CIDR (Classless Inter-Domain Routing) + - Beispielaufgabe Subnetting (IP 220.8.7.100 / Maske 255.255.255.240) + - Gruppenaufgabe Subnetting (IP 142.63.12.70 / Maske 255.255.254.0) +4. **Layer 2/3 – Address Resolution Protocol (ARP)** (Folie 53–58) +5. **Layer 3 – Internet Control Message Protocol (ICMP)** (Folie 59–73) + - ICMPv4 Meldungen und Protokollstruktur + - ICMP Echo Request/Reply (ping) + - ICMP Fehler: Network Unreachable, Destination Unreachable, Port Unreachable, Time Exceeded + - ICMP Timestamp + - ICMP in der Praxis: Traceroute +6. **Layer 3 – Routing-Protokolle** (Folie 74–92) + - Statisches vs. dynamisches Routing + - Private und reservierte Adressräume (RFC 1918, RFC 5735) + - Anforderungen an Routing-Protokolle + - Metrik + - Distance Vector vs. Link State + - Autonome Systeme (IGP vs. EGP) + - Routing-Protokoll-Beispiele (RIP, IGRP, OSPF, IS-IS, BGP) + - OSPF im Detail: SPF-Algorithmus, Designated Router, Nachbarschaften, Areas, Virtual Links, LSA-Klassen + +--- + +## 1. Organisatorisches (Folien 1–2) + +Die Vorlesung IT2221 – Netzwerktechnik umfasst insgesamt **10 Online-Vorlesungen** über BigBlueButton (BBB). Der Kursplan ist wie folgt aufgebaut: + +1. Grundlagen, IP-Adressierung, OSI-Modell, Ethernet (Labor) +2. Layer 1 und 2 an den Beispielen Ethernet und WLAN +3. Layer 3 am Beispiel von IPv4 und Routing-Protokolle +4. Layer 3 Routing-Protokolle, Layer 4 am Beispiel von TCP und UDP +5. Layer 3 am Beispiel von IPv6 +6. Layer 7 am Beispiel von DNS und DHCP, Weitverkehrsnetze +7. Weitverkehrsnetze, ausfallsichere Netze +8. Netzwerksicherheit +9. Netzwerksicherheit (Fortsetzung) +10. Prüfungsvorbereitung + +Die vorliegenden Folien decken primär die **Vorlesungen 2, 3 und Teile von 4** ab – also Layer 2 (VLAN, QoS), Layer 3 (IPv4, Subnetting, ARP, ICMP) und Routing-Protokolle (insbesondere OSPF). + +--- + +## 2. Layer 2 – Data Link Layer / Sicherungsschicht (Folien 3–9) + +### 2.1 Kommunikation nach dem OSI-Modell (Folie 4) + +Das OSI-Referenzmodell (Open Systems Interconnection) besteht aus **7 Schichten**, die in **obere Schichten** (Layer 5–7: Session, Darstellung, Anwendung) und **untere Schichten** (Layer 1–4: Physikalisch, Data Link, Netzwerk, Transport) unterteilt werden. + +Jede Schicht kommuniziert logisch mit ihrer Peer-Schicht auf der Gegenseite (**Peer-to-Peer Communication**), während die tatsächliche physische Kommunikation über den **Physical Link** auf Layer 1 stattfindet. Daten wandern beim Sender von oben nach unten durch den Stack, über das physische Medium zum Empfänger, und dort wieder von unten nach oben. Router arbeiten dabei auf Layer 3 und leiten Pakete zwischen verschiedenen Netzen weiter. + +### 2.2 VLAN: Realisierung (Folie 5) + +Ein **VLAN (Virtual Local Area Network)** ermöglicht die logische Segmentierung eines physischen Netzwerks. Im gezeigten Beispiel verbinden zwei Switches (Switch A und Switch B) jeweils drei VLANs: Blue VLAN (VLAN 1), Black VLAN (VLAN 2) und Green VLAN (VLAN 3). + +Die Switches sind über einen **Trunk-Port** via Fast Ethernet verbunden. Über diesen Trunk werden Frames aller VLANs übertragen, wobei jeder Frame mit einer VLAN-ID getaggt wird. Endgeräte sind jeweils einem bestimmten VLAN zugeordnet und können nur innerhalb ihres VLANs direkt kommunizieren. Die Kommunikation zwischen verschiedenen VLANs erfordert einen Router (Inter-VLAN-Routing). + +### 2.3 VLAN: IEEE 802.1q (Folien 6–7) + +Der Standard **IEEE 802.1q** definiert das VLAN-Tagging auf Layer 2. Die wichtigsten Merkmale sind: + +- Jedem **Switchport** wird ein VLAN zugeordnet (Access Port). +- Zwischen Switches wird jeder Frame mit einer **VLAN-ID markiert** (Tagged/Trunk Port). +- **Verbindungen zwischen VLANs** erfolgen ausschließlich über Router. +- **VLAN-Informationen** müssen auf allen beteiligten Switches identisch konfiguriert sein. +- VLANs sind ein Mittel zur **Strukturierung des Netzes**. +- Es sind bis zu **4095 VLANs** pro Node möglich (12-Bit VLAN-ID). +- Der Standard unterstützt VLAN-Typen 1, 2 und 3. +- Sowohl geswitchte als auch Shared-Media-LANs werden unterstützt. +- IEEE 802.1q führt neue **Priorisierungen** ein (siehe IEEE 802.1p). + +**Frame-Struktur mit 802.1q-Tag:** + +Der 802.1q-Header wird zwischen Source-MAC-Adresse und dem ursprünglichen EtherType/Length-Feld eingefügt. Er besteht aus: + +- **TPID (Tag Protocol Identifier):** In der Regel 0x8100 – zeigt an, dass der Frame nach 802.1q getaggt ist. +- **TCI (Tag Control Information):** Enthält: + - **User Priority / PCP (Priority Code Point):** 3 Bit für die Priorisierung. + - **CFI (Canonical Format Indicator):** Heute als **DEI (Drop Eligible Indicator)** verwendet – 0 = drop-berechtigt, 1 = darf verworfen werden. + - **VID (VLAN ID):** 12 Bit, erlaubt Werte von 0 bis 4095. + +Der gesamte getaggte Frame besteht aus: Preamble (7 Byte) → SFD (1 Byte) → Destination MAC (6 Byte) → Source MAC (6 Byte) → **802.1Q Header (4 Byte)** → EtherType/Size (2 Byte) → Payload (variabel) → CRC/FCS (4 Byte). + +### 2.4 Priorisierung nach IEEE 802.1p – QoS auf Layer 2 (Folien 8–9) + +**IEEE 802.1p** ist kein eigenes Tag-Format, sondern ein Standard für die **Layer-2-Priorisierung** im Rahmen von **Quality of Service (QoS)**. Die Priorisierung wird durch die **3 PCP-Bits** (Priority Code Point) im 802.1q-Header realisiert. Switches können anhand dieser PCP-Bits Queues, Scheduling und Traffic-Klassen steuern. + +**Zusammengefasst:** + +- **802.1Q:** Markiert den Frame mit einem VLAN-Tag. +- **802.1p:** Interpretiert die 3 PCP-Bits als unterschiedliche Service-Klassen/Prioritäten. + +**Die 8 Prioritätsstufen nach 802.1p (herstellerspezifisch):** + +|PCP-Wert|Bedeutung| +|---|---| +|0|Best Effort| +|1|Background| +|2|Spare| +|3|Excellent Effort| +|4|Controlled Load| +|5|Video| +|6|Voice| +|7|Network Control| + +Wichtig: Switches können intern auch **ohne VLAN-Tag priorisieren**, z. B. nach eingehendem Port, MAC-Adresse, EtherType oder ACL. Dies ist jedoch **herstellerspezifische QoS-Logik** und nicht Teil des IEEE 802.1p Standards. + +--- + +## 3. Layer 3 – Network Layer / Netzwerkschicht (Folien 10–52) + +### 3.1 Internet Protocol Version 4 – IPv4 (Folien 11–13) + +IPv4 arbeitet auf **Layer 3** (Network Layer / Vermittlungsschicht) und ist das zentrale Protokoll für die Adressierung und Weiterleitung von Datenpaketen im Internet. + +**Komponenten einer IPv4-Adresse (Folie 12):** + +Eine IPv4-Adresse ist **32 Bit** lang und wird in **4 Oktette** (je 8 Bit = 1 Byte) unterteilt, die in der dezimalen Punkt-Notation dargestellt werden. Beispiel: 131.108.122.204 entspricht in Binär: 10000011.01101100.01111010.11001100. + +Jede IP-Adresse besteht aus einem **Netz-Anteil** und einem **Host-Anteil**. Welche Bits zum Netz und welche zum Host gehören, wird durch die Subnetzmaske bestimmt. + +**IPv4-Header (Folie 13):** + +Der IPv4-Header hat eine Mindestlänge von 20 Byte (ohne Optionen) und enthält die folgenden wichtigen Felder: + +|Feld|Beschreibung| +|---|---| +|**Version**|Immer 4 (für IPv4)| +|**HLEN**|Header Length (in 32-Bit-Worten)| +|**TOS (Type of Service)**|3 Bits – enthält Flags für „minimize delay", „maximize throughput", „maximize reliability", „minimize cost"| +|**Total Length**|Gesamtlänge des IP-Datagramms (Header + Daten)| +|**Datagram ID / Identifier**|Eindeutige ID eines Datagramms (für Fragmentierung)| +|**Flags**|Steuerung der Fragmentierung (z. B. „Don't Fragment")| +|**Fragment Offset**|Position des Fragments im ursprünglichen Datagramm| +|**TTL (Time to Live)**|Maximale Anzahl an Hops, wird bei jedem Router um 1 reduziert| +|**Protocol**|Identifiziert das enkapsulierte Protokoll (z. B. 6 = TCP, 17 = UDP, 1 = ICMP)| +|**Header-Prüfsumme (Checksum)**|Prüfsumme nur über den Header| +|**Quell-IP-Adresse**|IP-Adresse des Absenders (32 Bit)| +|**Ziel-IP-Adresse**|IP-Adresse des Empfängers (32 Bit)| +|**IP-Optionen + Padding**|Optional, variable Länge| + +### 3.2 IP-Adressklassen (Folie 14) + +Im klassischen (classful) IP-Adressierungsschema gibt es drei Hauptklassen: + +**Klasse A:** + +- Erstes Bit: 0 +- Netz-Adresse: 7 Bit → 128 Netze +- Host-Adresse: 24 Bit → 2²⁴ − 2 = **16.777.214 Hosts** pro Netz +- Adressbereich: 1.0.0.0 bis 126.0.0.0 + +**Klasse B:** + +- Erste Bits: 10 +- Netz-Adresse: 14 Bit → 16.384 Netze +- Host-Adresse: 16 Bit → 2¹⁶ − 2 = **65.534 Hosts** pro Netz +- Adressbereich: 128.0.0.0 bis 191.255.0.0 + +**Klasse C:** + +- Erste Bits: 110 +- Netz-Adresse: 21 Bit → über 2 Millionen Netze +- Host-Adresse: 8 Bit → 2⁸ − 2 = **254 Hosts** pro Netz +- Adressbereich: 192.0.0.0 bis 223.255.255.0 + +**Wichtige Regeln:** + +- Die **niedrigste Adresse** eines Netzes ist die **Netzadresse** (alle Host-Bits = 0). +- Die **höchste Adresse** eines Netzes ist die **Broadcastadresse** (alle Host-Bits = 1). +- Daher werden immer **2 Adressen** vom nutzbaren Adressraum abgezogen. + +### 3.3 Unterteilung der IP-Adressen (Folie 15) + +- **Netzadresse:** Host-Anteil enthält nur Nullen. Beispiel: 134.30.0.0 mit Maske 255.255.0.0 (/16). +- **Broadcastadresse:** Host-Anteil enthält nur Einsen. Beispiel: 134.30.255.255/16 – erreicht alle Hosts im Netz. +- **Limited Broadcast:** 255.255.255.255 – wird bei **DHCP** verwendet, wenn das konkrete Netz noch nicht bekannt ist. Erreicht alle Hosts im lokalen IP-Segment. + +### 3.4 Subnetze – „Classless" (Folien 16–23) + +**Warum Subnetting? (Folie 18):** + +- **Verringert die Größe einer Broadcast-Domäne** – weniger Broadcast-Traffic. +- Ermöglicht die **Realisierung von Abteilungen** – logische Trennung innerhalb einer Organisation. +- Verhindert Probleme, wenn **zu viel Bandbreite** belegt wird – hohes Verkehrsaufkommen führt zu Verzögerungsanstieg (Latenzen). + +**Prinzip des Subnettings (Folie 16–17):** + +Beim classless Routing sieht die Außenwelt nur ein einziges Netz, kennt keine Details oder Struktur des internen Aufbaus. Routing-Tabellen bleiben dadurch überschaubar und die Außenwelt braucht nur eine Netzadresse für die Erreichbarkeit. + +Beim Subnetting werden **Bits aus dem Host-Feld entlehnt** (mindestens 2 Bits), um ein neues **Subnetz-Feld** zu bilden. Die IP-Adresse setzt sich dann zusammen aus: Netz-Teil + Subnetz-Feld + (neues, kleineres) Host-Feld. + +**Subnetzmaske (Folie 19):** + +Die Subnetzmaske ist 32 Bit lang und in vier Oktette unterteilt. Im Netz- und Subnetzabschnitt stehen **Einsen**, im Host-Abschnitt stehen **Nullen**. + +Beispiel: /20 = 255.255.240.0 = 11111111.11111111.11110000.00000000 → 20 Bits für das Netzwerk, 12 Bits für den Host. + +**Die AND-Funktion (Folie 20):** + +Um die Netzadresse zu ermitteln, wird ein **logisches UND (AND)** zwischen der Ziel-IP-Adresse und der Subnetzmaske ausgeführt. Das Ergebnis ist die Netzwerk- bzw. Subnetzadresse. + +Beispiel: + +- IP-Adresse: 195.013.132.163 (binär: 11000011.00001101.10000100.10100011) +- Netzmaske: 255.255.255.224 (binär: 11111111.11111111.11111111.11100000) +- AND-Ergebnis: 195.013.132.160 (binär: 11000011.00001101.10000100.10100000) → Netzadresse +- Hostnummer: IP AND (NOT Maske) = 3 + +**Subnetz-Bits und Anzahl der Subnetze (Folie 22):** + +|Entlehnte Bits|Mögliche Subnetze| +|---|---| +|2 Bits|2² = 4| +|3 Bits|2³ = 8| +|4 Bits|2⁴ = 16| + +Beispiel: Bei einem Klasse-C-Netz mit Subnetzmaske 255.255.255.240 → 240 = 11110000 binär → 4 Bits für das Subnetzfeld. + +**Dezimaldarstellung gängiger Masken (Folie 23):** + +|Binär|Dezimal| +|---|---| +|10000000|128| +|11000000|192| +|11100000|224| +|11110000|240| +|11111000|248| +|11111100|252| +|11111110|254| +|11111111|255| + +### 3.5 Classless Inter-Domain Routing – CIDR (Folie 24) + +Die CIDR-Notation (/n) gibt die Anzahl der Netz-Bits direkt an. Die Folie zeigt eine vollständige Tabelle aller CIDR-Präfixe von /0 bis /32 mit den zugehörigen Subnetzmasken, Binärdarstellungen und der Anzahl verfügbarer Adressen pro Subnetz. + +Besondere Adressen: + +- **DHCP-Client** nutzt Source 0.0.0.0 → Destination 255.255.255.255 (da er seine eigene Adresse noch nicht kennt). +- **/0** (0.0.0.0) wird als **Default Route** in Routing-Tabellen verwendet. + +Wichtige CIDR-Werte: + +|CIDR|Maske|Adressen| +|---|---|---| +|/32|255.255.255.255|1| +|/30|255.255.255.252|4| +|/28|255.255.255.240|16| +|/24|255.255.255.0|256| +|/16|255.255.0.0|65.536| +|/8|255.0.0.0|16.777.216| + +### 3.6 Beispielaufgabe – Subnetting (Folien 25–38) + +**Gegeben:** IP-Adresse 220.8.7.100, Netzmaske 255.255.255.240 + +**1. Nutzbare IP-Adressen pro Subnetz:** + +- Maske: 255.255.255.240 = 11111111.11111111.11111111.1111**0000** = **/28** +- Es verbleiben 4 Bit für den Host-Anteil. +- Nutzbare Adressen = 2⁴ − 2 = **14** + +**2. Zahl der möglichen Subnetze:** + +- Bei /28 verbleiben 4 Bit für Hosts. Davon können noch 2 Bits für weitere Subnetze entlehnt werden (bis maximal /30). +- 2² = **4 weitere Subnetze** möglich. + +**3. Netzadresse:** + +- IP: 11011100.00001000.00000111.0110**0100** +- Maske: 11111111.11111111.11111111.1111**0000** +- AND: 11011100.00001000.00000111.0110**0000** +- Netzadresse = **220.8.7.96** +- Merke: **Netzwerkadressen sind immer gerade Zahlen!** + +**4. Broadcastadresse:** + +- Netzadresse nehmen, alle Host-Bits (die Nullen in der Maske) auf 1 setzen. +- 11011100.00001000.00000111.0110**1111** +- Broadcastadresse = **220.8.7.111** +- Merke: **Broadcastadressen sind immer ungerade Zahlen!** + +**5. Erste nutzbare IP-Adresse:** + +- Netzadresse + 1 im Host-Teil. +- 11011100.00001000.00000111.0110**0001** +- Erste IP-Adresse = **220.8.7.97** +- Merke: **Die erste freie IP-Adresse ist immer eine ungerade Zahl!** + +**6. Letzte nutzbare IP-Adresse:** + +- Broadcastadresse − 1. +- 11011100.00001000.00000111.0110**1110** +- Letzte IP-Adresse = **220.8.7.110** +- Merke: **Die letzte freie IP-Adresse ist immer eine gerade Zahl!** + +**Zusammenfassung der Beispielaufgabe:** + +|Gesucht|Ergebnis| +|---|---| +|Nutzbare IPs/Subnetz|14| +|Mögliche Subnetze|4| +|Netzadresse|220.8.7.96| +|Broadcastadresse|220.8.7.111| +|Erste IP|220.8.7.97| +|Letzte IP|220.8.7.110| + +### 3.7 Gruppenaufgabe – Subnetting (Folien 39–52) + +**Gegeben:** IP-Adresse 142.63.12.70, Netzmaske 255.255.254.0 + +**1. Nutzbare IP-Adressen pro Subnetz:** + +- Maske: 255.255.254.0 = 11111111.11111111.1111111**0.00000000** = **/23** +- Es verbleiben 9 Bit für den Host-Anteil. +- Nutzbare Adressen = 2⁹ − 2 = **510** + +**2. Zahl der möglichen Subnetze:** + +- Von den 9 Host-Bits können bis zu 7 Bits für Subnetze entlehnt werden (bis /30). +- 2⁷ = **128 weitere Subnetze** möglich. + +**3. Netzadresse:** + +- IP: 10001110.00111111.0000110**0.01000110** +- Maske: 11111111.11111111.1111111**0.00000000** +- AND: 10001110.00111111.0000110**0.00000000** +- Netzadresse = **142.63.12.0** + +**4. Broadcastadresse:** + +- Host-Bits auf 1 setzen: 10001110.00111111.0000110**1.11111111** +- Broadcastadresse = **142.63.13.255** + +**5. Erste nutzbare IP-Adresse:** + +- Netzadresse + 1: 10001110.00111111.00001100.0000000**1** +- Erste IP-Adresse = **142.63.12.1** + +**6. Letzte nutzbare IP-Adresse:** + +- Broadcastadresse − 1: 10001110.00111111.00001101.1111111**0** +- Letzte IP-Adresse = **142.63.13.254** + +**Zusammenfassung der Gruppenaufgabe:** + +|Gesucht|Ergebnis| +|---|---| +|Nutzbare IPs/Subnetz|510| +|Mögliche Subnetze|128| +|Netzadresse|142.63.12.0| +|Broadcastadresse|142.63.13.255| +|Erste IP|142.63.12.1| +|Letzte IP|142.63.13.254| + +Hinweis: Auf Folie 44 wird die Maske fälschlicherweise als 255.255.250.0 angegeben – korrekt ist durchgängig **255.255.254.0**. Ebenso wird auf Folie 47 die Maske als 255.255.255.240 beschrieben, obwohl 255.255.254.0 gemeint ist. Die Berechnungen in den Lösungen sind aber konsistent mit /23 (255.255.254.0). + +--- + +## 4. Layer 2/3 – Address Resolution Protocol (ARP) (Folien 53–58) + +### 4.1 Grundlagen (Folie 54–55) + +Ein vollständiges Netzwerkpaket benötigt **vier Adressen**: Quell-IP, Ziel-IP (Layer 3), Quell-MAC und Ziel-MAC (Layer 2). ARP stellt die **Verbindung zwischen Layer 2 (MAC) und Layer 3 (IP) Adressen** her. + +**Kernmerkmale von ARP:** + +- ARP löst eine bekannte IP-Adresse in die zugehörige MAC-Adresse auf. +- Für IP-Adressen **im gleichen Subnetz**: ARP sendet einen **Broadcast** ins lokale Netz. +- Für IP-Adressen **in einem anderen Subnetz**: Es wird die **MAC-Adresse des Gateways (Routers)** verwendet. +- **ARP-Request = Broadcast**, **ARP-Reply = Unicast**. +- Jeder Host führt eine **ARP-Tabelle** mit den zugeordneten MAC/IP-Paaren. +- Die ARP-Antwort wird **nicht authentifiziert oder geprüft** – dies ermöglicht **ARP-Spoofing** als Sicherheitsrisiko! + +### 4.2 ARP-Ablauf im Detail (Folien 56–58) + +**Schritt 1 – ARP-Request (Broadcast):** Host 172.16.3.1 möchte mit Host 172.16.3.2 kommunizieren, kennt aber dessen MAC-Adresse nicht. Er sendet einen ARP-Request als Broadcast an alle Geräte im Netz: „Welche MAC-Adresse hat 172.16.3.2?" + +**Schritt 2 – Empfang und Erkennung:** Alle Hosts im Segment empfangen den Broadcast. Host 172.16.3.2 erkennt, dass seine eigene IP-Adresse angefragt wird und weiß: „Diese Nachricht ist für mich." + +**Schritt 3 – ARP-Reply (Unicast):** Host 172.16.3.2 antwortet direkt (Unicast) an den Absender mit seiner MAC-Adresse: „IP: 172.16.3.2, Ethernet: 0800.0020.1111." Der anfragende Host trägt das Ergebnis in seine ARP-Tabelle ein. + +--- + +## 5. Layer 3 – Internet Control Message Protocol (ICMP) (Folien 59–73) + +### 5.1 Grundlagen ICMP (Folien 60–63) + +ICMP (Internet Control Message Protocol) ist ein **Layer-3-Kontrollprotokoll**, das – im Gegensatz zu IP (Datenübertragung) – für **Fehlermeldungen und Informationsaustausch** definiert ist. + +**Wichtige Eigenschaften:** + +- ICMP verwendet IP für die Kommunikation. +- Definiert im Standard **IETF RFC 792**. +- ICMP ist **verbindungslos**. +- Bei Verlust von ICMP-Paketen erfolgt **kein automatischer Neuversand**. + +**ICMP-Header (32 Bit):** + +|Feld|Größe|Beschreibung| +|---|---|---| +|Typ|8 Bit|Art der Anfrage/Antwort| +|Code|8 Bit|Details, z. B. genaue Art des Fehlers| +|CRC/Checksumme|16 Bit|Prüfsumme über den ICMP-Header| +|Unused|32 Bit|Abhängig von Typ und Code als Datenbereich genutzt| +|IP Header + 64 Bit Data|variabel|Anfang des ursprünglichen IP-Pakets| + +### 5.2 ICMPv4 Meldungstypen (Folie 61) + +**Fehlermeldungen:** + +- Empfänger nicht erreichbar (Destination Unreachable) +- Wegumleitung (Redirect) +- Ressourcen verbraucht (Resource Expired) +- Zeitablauf (Time Exceeded) +- Parameterproblem (Parameters Problem) + +**Informationsmeldungen:** + +- Echo-Anforderung / -Antwort (Echo Request / Reply) +- Information +- Zeitmessung (Timestamp) +- Adressmaske + +### 5.3 ICMPv4 – Typ- und Code-Feld (Folie 64) + +**Echo Reply (Typ 0) und Echo Request (Typ 8):** + +- Wird vom **ping-Kommando** verwendet. + +**Destination Unreachable (Typ 3) mit verschiedenen Codes:** + +|Code|Bedeutung| +|---|---| +|0|Network unreachable| +|1|Host unreachable| +|2|Protocol unreachable| +|3|Port unreachable| +|9|Destination network administratively prohibited| + +### 5.4 ICMP Echo Request/Reply – Ping (Folie 65) + +- Der **Sender** überträgt eine ICMP-Echo-Request-Nachricht. +- Der **Empfänger** sendet die Daten als Echo-Reply genauso zurück. +- Dies ist die **einfachste Form der Verbindungsprüfung**. +- Im Fehlerfall werden ICMP-Fehlerpakete zurückgesendet. + +### 5.5 ICMP-Fehlermeldungen im Detail + +**Network Unreachable (Folie 66):** + +- **Symptom:** Ein ganzes Subnetz ist nicht erreichbar. +- **Mögliche Ursachen:** Leitung ausgefallen, Routingprotokoll gestört (z. B. OSPF), Subnetz existiert nicht, Routingtabelle fehlerhaft, kein Default-Router, Ausfall eines Routers. + +**Destination Unreachable / Host Unreachable (Folie 67):** + +- **Symptom:** Subnetz ist erreichbar, aber das Endgerät nicht. +- **Mögliche Ursachen:** Endgerät ausgeschaltet, Kabelverbindung/WLAN defekt, falsche IP-Adresse konfiguriert, Switch ausgefallen. + +**Port Unreachable (Folien 68–69):** + +- **Symptom:** Ein Dienst bzw. eine Applikation erreicht das Endgerät nicht, obwohl das Endgerät per ping/traceroute vom Router aus erreichbar ist. +- **Mögliche Ursachen:** Firewall in der Wegstrecke blockiert den Port, Dienst auf dem Endgerät nicht mehr aktiv, falscher Eintrag der Dienst-Portnummer-Zuordnung. + +**Time Exceeded (Folie 70):** + +- Tritt auf, wenn ein Router das **TTL-Feld auf 0** setzt (Paket wird verworfen) oder wenn ein Endsystem ein **fragmentiertes Paket nicht innerhalb einer bestimmten Zeit** wieder zusammensetzen kann. + +### 5.6 ICMP Timestamp (Folie 71) + +ICMP Timestamp ermöglicht eine **Laufzeitprüfung** zwischen zwei Systemen: + +- Der **Sender** überträgt seine Absendezeit in Millisekunden nach Mitternacht. +- Der **Empfänger** trägt die Empfangszeit ein und fügt die Absendezeit für den Rückweg hinzu (eliminiert die interne Verzögerung des Empfängers). + +### 5.7 ICMP in der Praxis – Traceroute (Folien 72–73) + +**Traceroute** nutzt die ICMP-Time-Exceeded-Meldungen zur **Routenverfolgung**: + +1. Paket mit **TTL = 1** senden → erster Router reduziert TTL auf 0, verwirft das Paket und sendet „Time Exceeded" zurück → IP des ersten Routers bekannt. +2. Paket mit **TTL = 2** senden → zweiter Router meldet Time Exceeded → IP des zweiten Routers bekannt. +3. Dieser Prozess wird fortgesetzt, bis das Ziel erreicht wird. + +**Praxisbeispiel (Folie 73):** + +``` +C:\Users\gabriele>tracert google.com +Tracing route to google.com [216.58.206.46] over a maximum of 30 hops: + 1 1 ms 2 ms 1 ms firewall-eantcoffice.eantc.de [192.168.121.1] + 2 4 ms 3 ms * 217.110.43.165 + 3 11 ms 11 ms 11 ms 193.114.169.141 + 4 * * * Request timed out. + 5 10 ms 14 ms 12 ms 108.170.236.175 + 6 11 ms 11 ms 12 ms 192.178.74.163 + 7 12 ms 11 ms 11 ms lcfraa-aa-in-f14.1e100.net [216.58.206.46] +Trace complete +``` + +Hop 4 zeigt „Request timed out" – dies bedeutet, dass der Router an dieser Stelle keine ICMP-Antworten zurücksendet (z. B. Firewall-Einstellung), aber das Routing trotzdem funktioniert. + +--- + +## 6. Layer 3 – Routing-Protokolle (Folien 74–92) + +### 6.1 Wegewahl im Netz (Folie 75) + +Es gibt zwei grundsätzliche Routing-Ansätze: + +- **Statisches Routing:** Der Administrator konfiguriert die Wege manuell. +- **Dynamisches Routing:** Router erkunden selbstständig mögliche Wege und wählen den besten aus. + +### 6.2 Private und reservierte Adressräume (Folie 76) + +**Private Adressbereiche (RFC 1918)** – werden im Internet nicht geroutet: + +|Bereich|CIDR|Adressumfang| +|---|---|---| +|10.0.0.0/8|Klasse A|10.0.0.0 bis 10.255.255.255| +|172.16.0.0/12|Klasse B|172.16.0.0 bis 172.31.255.255| +|192.168.0.0/16|Klasse C|192.168.0.0 bis 192.168.255.255| + +**Reservierte Adressbereiche (RFC 5735)** – nicht routbar: + +|Bereich|RFC|Verwendung| +|---|---|---| +|0.0.0.0/8|RFC 1122|„Dieses Netzwerk"| +|127.0.0.0/8|RFC 1122|Loopback| +|169.254.0.0/16|RFC 3927|Link-Local (APIPA)| +|192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24|RFC 5737|Dokumentation/Beispiele| +|192.18.0.0/15|RFC 2544|Benchmarking| +|224.0.0.0/4|RFC 3171|Multicast| +|240.0.0.0/4|RFC 1112|Reserviert für zukünftige Verwendung| + +### 6.3 Anforderungen an Routing-Protokolle (Folien 77–78) + +Ein gutes Routing-Protokoll sollte folgende Anforderungen erfüllen: + +- **Optimale Wegewahl:** Entscheidung über eine Metrik für den besten Weg. +- **Einfachheit:** Möglichst geringe Anforderungen an Informationsmenge und Prozessorleistung. +- **Robustheit:** Korrekter Umgang mit unerwarteten Situationen und Implementierungsfehlern. +- **Geringer Ressourcenbedarf:** Soll auch auf einfachen Geräten funktionieren, möglichst geringer zusätzlicher Netzwerkverkehr. +- **Schnelligkeit (Konvergenz):** Schnelle Einigung aller Router auf eine optimale Route nach Topologieänderungen. +- **Flexibilität:** Anpassung an unterschiedliche Netzwerkgegebenheiten. + +### 6.4 Metrik (Folie 79) + +Die **Metrik** ist der Maßstab, nach dem ein Routing-Protokoll den besten Weg auswählt. Mögliche Metrik-Parameter sind: + +- Knotenzahl (Hop Count) +- „Kosten" (administrativ definiert) +- Bandbreite +- Verfügbarkeit +- Latenzzeit (Verzögerung) +- Fehlerrate +- Auslastung + +Verschiedene Routing-Protokolle verwenden unterschiedliche Kombinationen dieser Parameter. + +### 6.5 Eigenschaften von Routing-Protokollen (Folien 80, 82) + +**Einweg oder Mehrweg:** + +- **Lastverteilung** über mehrere Wege möglich. +- Gleichverteilung oder Nutzung unterschiedlicher Wege. + +**Distance Vector oder Link State:** + +- **Distance Vector** = wie ein Straßenschild (kennt nur Richtung und Entfernung zum Ziel). +- **Link State** = wie eine Straßenkarte (kennt die gesamte Topologie). + +**Interdomain oder Intradomain:** + +- **Interior Gateway Protocol (IGP):** Wegewahl _innerhalb_ eines Autonomen Systems (z. B. RIP, OSPF). +- **Exterior Gateway Protocol (EGP):** Wegewahl _zwischen_ autonomen Systemen (z. B. BGP). + +**Flach oder hierarchisch:** + +- Abbildung der Organisationsstruktur möglich (z. B. OSPF mit Areas). + +**Wegewahl am Eingang oder im Router:** + +- **Source Routing:** Wegewahl am Eingang des Netzes. +- **Hop-by-Hop:** Jeder Router entscheidet individuell über den nächsten Hop. + +### 6.6 Autonome Systeme (Folie 81) + +Ein **Autonomes System (AS)** ist eine Ansammlung von Netzwerken unter **einheitlicher administrativer Kontrolle**. AS-Nummern werden von der **IANA (Internet Assigned Numbers Authority)** vergeben. Private AS-Nummern reichen von 64.512 bis 65.534. + +Innerhalb eines AS kommen **IGPs** (z. B. RIP, IGRP, OSPF) zum Einsatz. Zwischen autonomen Systemen wird **BGP** als EGP verwendet. + +### 6.7 Routing-Protokoll-Beispiele (Folie 83) + +|Protokoll|Typ|Bereich|Standard|Metrik|Besonderheiten| +|---|---|---|---|---|---| +|**RIP**|Distance Vector|IGP|RFC|Hop-Count|Classful, langsam| +|**IGRP / EIGRP**|Distance Vector|IGP|Proprietär (Cisco)|Verzögerung, Bandbreite, Verlässlichkeit, Auslastung|Classful, Load Balancing| +|**OSPF**|Link-State|IGP|RFC|Bandbreite (Kosten)|Classless, hierarchisch, Load Balancing, schnell| +|**IS-IS**|Link-State|IGP|ISO|Ähnlich OSPF|Arbeitet auf Schicht 2| +|**BGP**|Path Vector|EGP|RFC|Attribute|Classless, langsam (Konvergenz), WAN| + +### 6.8 OSPF – Open Shortest Path First (Folien 84–92) + +#### 6.8.1 Grundlagen (Folie 85) + +- **OPEN** bedeutet die freie Verfügbarkeit der Spezifikation (IETF RFC 2328). +- **SHORTEST PATH FIRST** bezieht sich auf den **Dijkstra-Algorithmus** zur optimalen Wegefindung. +- OSPF ermöglicht den **automatischen Abgleich von Routing-Tabellen** und beschränkt sich auf bestimmte Gebiete (Areas). +- OSPF ist ein **IGP (Interior Gateway Protocol)**. +- OSPF registriert und informiert über die **Betriebszustände aller Ports/Links** innerhalb eines Gebietes → daher **Link-State-Protokoll**. + +#### 6.8.2 SPF-Algorithmus (Folie 86) + +- Jeder Router hat eine **identische Link State Database (LSDB)**. +- Metrik = **Pfadkosten**, berechnet aus der Bandbreite: je höher die Bandbreite, desto kleiner die Kosten. +- OSPF nutzt **Multicasts** an 224.0.0.5 (alle OSPF-Router) und 224.0.0.6 (Designated Router). +- Verwendet **IP-Protokoll 89**. +- **Load Balancing** über Pfade mit identischen Kosten (Equal-Cost Multi-Path). +- Router senden **Link State Advertisements (LSA)**, wenn ein Interface gestartet wird. +- Neue LSAs werden auch bei **Topologiewechseln** oder nach Ablauf von **30 Minuten** generiert. + +Der SPF-Algorithmus-Ablauf: Link-State Packets → Topological Database → SPF Algorithm → Shortest Path First Tree → Routing Table. + +#### 6.8.3 Designated Router (DR) (Folie 87) + +- In jedem Multiaccess-Netzwerksegment werden ein **DR (Designated Router)** und ein **BDR (Backup Designated Router)** gewählt. +- Die Wahl basiert auf **Priorität** und **Router-ID** – die höchsten Werte gewinnen (DR und BDR). +- Die **Router-ID** ist die Adresse des Loopback-Interfaces. Die **Priorität** ist standardmäßig 1 und kann konfiguriert werden. +- Alle anderen Router (**DRother**) unterhalten Nachbarschaften **nur mit DR und BDR** – nicht untereinander. +- **Topologie-Änderungen** werden vom DR an die anderen Router im Segment weitergegeben. + +#### 6.8.4 OSPF-Nachbarschaften (Folie 88) + +Der Aufbau einer OSPF-Nachbarschaft durchläuft folgende Zustände: + +1. **Init (Two-Way):** Router entdecken sich über Hello-Pakete. DR und BDR werden gewählt. +2. **Exstart:** Master-Slave-Beziehung wird ausgehandelt. Der Router mit der höheren IP wird Master. Die erste Sequenznummer wird gebildet. +3. **Exchange:** Übertragen der LSDB-Inhalte (Database Description Packets) zwischen den Routern. +4. **Loading:** Senden von Link State Requests (LSR), bis die LSDB-Inhalte auf beiden Seiten identisch sind. +5. **Full:** Alle Informationen sind übertragen – die Nachbarschaft ist vollständig etabliert. + +Hello-Pakete werden alle **10–30 Sekunden** ausgetauscht, um die Nachbarschaft aufrechtzuerhalten. + +#### 6.8.5 OSPF Areas (Folien 89–90) + +OSPF nutzt ein **hierarchisches Design** mit Areas, um die Skalierbarkeit zu verbessern: + +- **Areas verbergen Topologien** vor anderen Areas → geringerer Overhead und weniger Belastung durch kleinere LSDBs. +- **Area 0 (Backbone):** Zentrale Area, mit der alle anderen Areas verbunden sein müssen. +- **Internal Router (IR):** Kennt nur die Topologie seiner eigenen Area. +- **Area Border Router (ABR):** Kennt die Topologien aller mit ihm verbundenen Areas und vermittelt zwischen ihnen (Summary Routes). +- **Autonomous System Border Router (ASBR):** Kann Routing-Informationen aus anderen Routing-Protokollen (z. B. RIP, BGP) in das OSPF-AS integrieren (Redistribution). + +#### 6.8.6 OSPF Virtual Links (Folie 91) + +Virtual Links lösen spezifische Designprobleme: + +- Ermöglichen die **Aufsplittung der Area 0 (Backbone)**, wenn diese physisch nicht zusammenhängend ist. +- Area-Backbone-Anbindungen können **indirekt** realisiert werden (z. B. Area 1 über Area 2 an den Backbone anbinden). +- Bieten **Redundanz** für den Backbone. + +#### 6.8.7 OSPF LSA-Klassen (Folie 92) + +|LSA-Typ|Erzeuger|Inhalt|Reichweite| +|---|---|---|---| +|**Router-LSA**|Alle Router|Zustand der Router-Interfaces in einer Area|Innerhalb der Area (verlässt sie nicht)| +|**Network-LSA**|DR (Designated Router)|Listen der Router im gleichen Netzwerk|Innerhalb der Area (Intra-Area-Routing)| +|**Summary-LSA**|ABR (Area Border Router)|Routen aus der eigenen Area in andere Areas|In alle assoziierten Areas (Inter-Area-Routing)| + +--- + +## Lernhinweise und Prüfungsrelevante Merkregeln + +### Subnetting-Merkregeln: + +- **Netzwerkadressen** sind immer **gerade** Zahlen. +- **Broadcastadressen** sind immer **ungerade** Zahlen. +- Die **erste nutzbare IP** ist immer **ungerade** (Netzadresse + 1). +- Die **letzte nutzbare IP** ist immer **gerade** (Broadcastadresse − 1). +- Nutzbare Hosts = **2^n − 2** (n = Anzahl der Host-Bits). +- Netzadresse = IP **AND** Subnetzmaske. +- Broadcastadresse = Netzadresse mit allen Host-Bits auf 1. + +### Wichtige Protokoll-Zuordnungen: + +- **ARP:** Layer 2/3 – löst IP → MAC auf (Request = Broadcast, Reply = Unicast). +- **ICMP:** Layer 3 – Fehlermeldungen und Diagnose (ping, traceroute). +- **OSPF:** Layer 3 – Link-State IGP, Dijkstra-Algorithmus, IP-Protokoll 89. +- **BGP:** Layer 3 – Path-Vector EGP, zwischen autonomen Systemen. + +### IEEE-Standards: + +- **802.1q:** VLAN-Tagging (4 Byte Tag, 12-Bit VLAN-ID, max. 4095 VLANs). +- **802.1p:** QoS-Priorisierung auf Layer 2 (3-Bit PCP, 8 Prioritätsstufen). \ No newline at end of file diff --git a/Netzwerke/zusammenfassungen/nw4 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw4 - zusammenfassung.md new file mode 100644 index 0000000..2855412 --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw4 - zusammenfassung.md @@ -0,0 +1,794 @@ +# IT2221 – Netzwerktechnik: Vorlesung 4 +**Dozentin:** Gabriele Schrenk | **Datum:** 13.03.2026 | **Hochschule:** HWR Berlin (EANTC) + +--- +## Inhaltsübersicht + +1. [OSPF Areas & Route Summarization](#1-ospf-areas--route-summarization) +2. [Zusammenfassen von Routen (IPv4)](#2-zusammenfassen-von-routen-ipv4) +3. [IPv6 – Grundlagen & Motivation](#3-ipv6--grundlagen--motivation) +4. [IPv6-Header](#4-ipv6-header) +5. [IPv6-Adressierung](#5-ipv6-adressierung) +6. [IPv6-Adresstypen](#6-ipv6-adresstypen) +7. [ICMPv6 & Neighbor Discovery](#7-icmpv6--neighbor-discovery) +8. [Migration von IPv4 zu IPv6](#8-migration-von-ipv4-zu-ipv6) +9. [Layer 7 – DHCP](#9-layer-7--dhcp) +10. [Weitverkehrsnetze (WAN)](#10-weitverkehrsnetze-wan) +11. [PPPoE & DSL](#11-pppoe--dsl) + +--- + +## 1. OSPF Areas & Route Summarization +### OSPF Areas + +OSPF (Open Shortest Path First) nutzt **Areas**, um große Netzwerke hierarchisch zu strukturieren. + +- **Areas verbergen Topologien** vor anderen Areas → reduziert Overhead +- **Kleinere LSDBs** (Link-State Databases) → weniger Belastung auf den Routern +- Jede Area hat eine eigene Topologie-Datenbank; nur zusammengefasste Routen werden über Area-Grenzen hinweg ausgetauscht + +**Wichtige Router-Rollen:** + +|Router-Typ|Abkürzung|Funktion| +|---|---|---| +|Area Border Router|**ABR**|Vermittelt zwischen verschiedenen OSPF Areas. Gehört zu mindestens zwei Areas (eine davon ist immer Area 0 / Backbone).| +|Autonomous System Border Router|**ASBR**|Empfängt Routing-Informationen aus **anderen Routing-Protokollen** (z. B. BGP, RIP) und leitet sie ins OSPF-Netz ein.| + +Die **Backbone Area** (Area 0, 0.0.0.0) ist das Zentrum: Alle anderen Areas müssen direkt oder über virtuelle Links mit ihr verbunden sein. + +### ABR/ASBR Route Summarization +ABR und ASBR können Netzwerkadressen und deren Kosten **zusammenfassen** (Route Summarization / Route Aggregation). + +**Vorteile der Zusammenfassung:** + +- Möglichst **wenige Routen** in der Routing-Tabelle +- **Spart Ressourcen** (CPU, RAM) auf Routern ein +- **Schnellere Konvergenz** – Änderungen in einem Subnetz führen nicht zu Updates in der gesamten Routing-Tabelle +- **Verbergen von Netzdetails** – interne Topologie bleibt hinter der Zusammenfassung versteckt +- **Unempfindlichkeit** gegen Zustandsänderungen einzelner Routen + +**Zwei Arten der Zusammenfassung:** + +1. **Inter-area route summarization** – Zusammenlegen von Netzwerkadressen, die innerhalb eines Autonomous Systems (AS) liegen. Wird auf ABRs konfiguriert. +2. **External route summarization** – Netzwerkadressen, die von außen in ein AS integriert wurden (z. B. über Redistribution), werden zusammengelegt. Wird auf ASBRs konfiguriert. + +--- + +## 2. Zusammenfassen von Routen (IPv4) + +### Algorithmus + +1. **Netze in Binärdarstellung umwandeln** +2. **Anzahl der identischen Bits** (von links nach rechts) bestimmen → das wird die neue Präfixlänge +3. **Prüfen**, ob nur die gewünschten Netze in der Zusammenfassung enthalten sind +4. Falls ungewünschte Netze mit eingeschlossen würden → **weitere Bits hinzufügen**, bis nur die gewünschten Netze abgedeckt sind +5. **Restliche Netze** separat behandeln und den Prozess von vorne beginnen + +> **Wichtig:** Die zusammengefassten Netze müssen logisch zum **gleichen Next Hop / gleichen Interface** führen! + +### Beispiel 1: Einfache Zusammenfassung + +Gegeben: 172.16.0.0/24 bis 172.16.3.0/24 + +``` +172.16.0.0: 1010 1100.0001 0000.0000 00|00.0000 0000 +172.16.1.0: 1010 1100.0001 0000.0000 00|01.0000 0000 +172.16.2.0: 1010 1100.0001 0000.0000 00|10.0000 0000 +172.16.3.0: 1010 1100.0001 0000.0000 00|11.0000 0000 + ↑ + Erste 22 Bits identisch +``` + +**Ergebnis:** `172.16.0.0/22` – Die ersten 22 Bits sind bei allen vier Netzen gleich, die letzten 2 Bits im dritten Oktett variieren (00, 01, 10, 11 = genau 4 Netze). + +### Beispiel 2: Nicht-triviale Zusammenfassung + +Gegeben: 192.168.0.0/24 bis 192.168.9.0/24 + +Hier ist eine **einzelne Zusammenfassung nicht möglich**, ohne ungewünschte Netze (192.168.10.0 bis 192.168.15.0) einzuschließen. + +``` +192.168.0.0: ...0000 0|000.0000 0000 ─┐ + ... ├─ Erste 21 Bits identisch +192.168.7.0: ...0000 0|111.0000 0000 ─┘ + → Zusammenfassung: 192.168.0.0/21 + +192.168.8.0: ...0000 100|0.0000 0000 ─┐ +192.168.9.0: ...0000 100|1.0000 0000 ─┘ Erste 23 Bits identisch + → Zusammenfassung: 192.168.8.0/23 +``` + +**Ergebnis:** Zwei Zusammenfassungen nötig: + +- `192.168.0.0/21` (deckt .0 bis .7 ab) +- `192.168.8.0/23` (deckt .8 und .9 ab) + +### Beispielaufgabe aus der Vorlesung + +**Gegeben:** + +- 192.168.160.0/24 +- 192.168.161.0/24 +- 192.168.162.0/23 +- 192.168.164.0/22 + +**Lösung:** + +``` +192.168.160.0: ...1010 0|000.0000 0000 +192.168.161.0: ...1010 0|001.0000 0000 +192.168.162.0: ...1010 0|010.0000 0000 +192.168.164.0: ...1010 0|100.0000 0000 +``` + +Alle Netze liegen im Bereich 160–167 (drittes Oktett Bits: 1010 0xxx). Die ersten 21 Bits sind identisch. + +**Ergebnis:** `192.168.160.0/21` + +### Gruppenaufgabe + +**Gegeben:** + +- 172.30.31.0/24 +- 172.30.32.0/24 +- 172.30.33.0/24 +- 172.30.34.0/23 +- 172.30.36.0/23 +- 172.30.38.0/24 + +**Lösung (Schritt für Schritt):** + +172.30.31.0 hat das dritte Oktett `0001 1111` – das passt nicht in eine Gruppe mit den anderen (die alle `0010 xxxx` haben), weil eine Zusammenfassung zu viele ungewünschte Netze einschließen würde. + +``` +172.30.31.0: ...0001 1111.0000 0000 → Einzeln: 172.30.31.0/24 + +172.30.32.0: ...0010 00|00.0000 0000 ─┐ +172.30.33.0: ...0010 00|01.0000 0000 ├─ 22 Bits identisch +172.30.34.0: ...0010 00|10.0000 0000 ─┘ + → Zusammenfassung: 172.30.32.0/22 + +172.30.36.0: ...0010 01|00.0000 0000 → 172.30.36.0/23 +172.30.38.0: ...0010 01|10.0000 0000 → 172.30.38.0/24 +``` + +**Ergebnis:** 4 Zusammenfassungen: + +- `172.30.31.0/24` +- `172.30.32.0/22` +- `172.30.36.0/23` +- `172.30.38.0/24` + +### Hilfstabelle: Bit-Wertigkeiten im Oktett + +|2⁷|2⁶|2⁵|2⁴|2³|2²|2¹|2⁰| +|---|---|---|---|---|---|---|---| +|128|64|32|16|8|4|2|1| + +--- + +## 3. IPv6 – Grundlagen & Motivation + +### Warum IPv6? + +- **IPv4-Adressraum zu klein:** 2³² = ca. 4,3 Milliarden Adressen – bei über 8 Milliarden Menschen und einem Vielfachen an Geräten nicht ausreichend +- **IPv4-Adressen ungleich verteilt** auf der Welt (historisch bedingte Vergabe) +- **IPv6-Adressraum:** 2¹²⁸ = ca. 3,4 × 10³⁸ Adressen – praktisch unerschöpflich + +### Merkmale von IPv6 + +- Spezifiziert im **Dezember 1995** von der IETF in **RFC 1883** (aktuell RFC 8200) +- Weiterentwicklung von IPv4 mit folgenden Verbesserungen: + - **Vereinfachtes Protokollformat** (keine Header-Checksumme mehr) + - **Dienstgüte (QoS)** – Flow Label im Header + - **Sicherheitsmechanismen** – IPSec war ursprünglich verpflichtend + - **Erweitertes Routing** – Extension Headers statt fester Felder +- **Koexistenz:** IPv6 existiert parallel mit IPv4 (Dual Stack) +- **128-Bit-Adressen** ermöglichen: + - Größeren Adressraum + - Bildung mehrerer Hierarchiestufen + - Verschiedene Adresstypen (Unicast, Multicast, Anycast) + - Neue Diensteadressierung +- **DNS bleibt gültig** (AAAA-Records für IPv6) +- **Autokonfiguration** der Endgeräte (SLAAC) + +### Eigenschaften des IPv6-Headers + +- **Stark vereinfachter Protokollkopf** – keine Checksumme mehr (Prüfung wird von Layer 2 und 4 übernommen) +- Enthält nur **grundlegende Informationen** zur Weiterleitung +- **Feste Headerlänge von 40 Byte** (nicht 48 wie auf der Folie angegeben – die 48 Byte schließen möglicherweise Padding ein) ermöglicht schnelles Routing +- Trotz **vierfacher Adresslänge** (16 Byte statt 4 Byte) nur **doppelte Headerlänge** gegenüber IPv4 (20 Byte) +- **Verschlüsselung** möglich (IPSec) +- **Quality of Service** über Traffic Class und Flow Label +- **Aktuell (2024):** ca. 30–60% der Netze weltweit auf IPv6 migriert + +--- + +## 4. IPv6-Header + +### Aufbau des Basis-Headers (40 Byte fest) + +``` ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +|Version| Traffic Class | Flow Label | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Payload Length | Next Header | Hop Limit | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| | ++ Source Address (128 Bit) + +| | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| | ++ Destination Address (128 Bit) + +| | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +``` + +|Feld|Bits|Beschreibung| +|---|---|---| +|**Version**|4|Immer `6` für IPv6| +|**Traffic Class**|8|Enthält DSCP (Differentiated Services Code Point) und ECN (Explicit Congestion Notification) für QoS| +|**Flow Label**|20|Identifiziert einen Datenfluss (z. B. eine TCP-Verbindung oder einen Stream). Ermöglicht Routing-Entscheidungen nur anhand des Flow Labels.| +|**Payload Length**|16|Länge des Rests des Pakets **nach dem Header** in Byte| +|**Next Header**|8|Gibt an, welches Protokoll bzw. welcher Extension Header als nächstes folgt (z. B. 6 = TCP, 17 = UDP, 43 = Routing Header)| +|**Hop Limit**|8|Entspricht der TTL aus IPv4 – wird bei jedem Router um 1 heruntergezählt, Paket wird bei Wert 0 verworfen| +|**Source Address**|128|Quelladresse| +|**Destination Address**|128|Zieladresse| + +### Extension Headers (Erweiterungsköpfe) + +IPv6 verwendet eine **verkettete Liste von Headern** statt fester Felder. Jeder Extension Header enthält ein „Next Header"-Feld, das auf den nächsten Header zeigt. + +|Extension Header|Next Header Wert|Beschreibung| +|---|---|---| +|Hop-by-Hop Options|0|Optionen, die von **jedem** Gerät auf dem Pfad geprüft werden| +|Routing|43|Routenvorgabe (z. B. SRv6 Segment Routing Header, Typ 4)| +|Fragment|44|Parameter für Fragmentierung (nur beim Sender, nicht auf dem Pfad!)| +|Authentication Header (AH)|51|Authentizität und Integrität des Pakets| +|ESP (Encapsulating Security Payload)|50|Verschlüsselte Datenübertragung| +|Destination Options|60|Optionen, die nur vom **Ziel** geprüft werden| +|Mobility|135|Mobile IPv6| +|Host Identity Protocol|139|HIPv2| +|Shim6 Protocol|140|Multihoming| + +**Beispiel der Verkettung:** + +- IPv6 Header (Next Header = 43) → Routing Header (Next Header = 60) → Destination Options (Next Header = 6) → TCP Header → Payload + +### IPv6 im Ethernet-Frame + +- **IPv6** nutzt den Ethernet Protocol ID (EtherType): **0x86DD** +- **IPv4** nutzt den Ethernet Protocol ID (EtherType): **0x0800** + +``` +| Dest MAC | Source MAC | 0x86DD | IPv6 Header and Payload | +| Dest MAC | Source MAC | 0x0800 | IPv4 Header and Payload | +``` + +--- + +## 5. IPv6-Adressierung + +### Darstellungsregeln + +IPv6-Adressen sind **128 Bit** lang und werden in **hexadezimaler Notation** dargestellt: + +- **8 Blöcke** à 4 Hex-Zeichen (= 16 Bit pro Block) +- Blöcke getrennt durch **Doppelpunkt** `:` +- **Führende Nullen** innerhalb eines Blocks dürfen weggelassen werden +- **Aufeinanderfolgende Nullblöcke** können durch `::` zusammengefasst werden (**maximal 1× pro Adresse!**) + +**Beispiel:** + +``` +Vollständig: 2001:0000:0001:0002:0000:0000:0000:ABCD +Gekürzt: 2001:0:1:2:0:0:0:ABCD +Maximal: 2001:0:1:2::ABCD (3 Nullblöcke durch :: ersetzt) +``` + +### Adressstruktur + +Eine IPv6-Adresse besteht aus zwei Hälften: + +``` +|←────────── 64 Bit ──────────→|←────────── 64 Bit ──────────→| +| Netz-Präfix | Interface ID | +``` + +### IPv6 Subnetting + +- Funktioniert wie bei IPv4, nur mit 128 Bit Adresslänge und Hex-Schreibweise +- CIDR-Notation wird verwendet: z. B. `2001:0db8:85a3::/64` +- Subnetting bleibt auch bei IPv6 relevant + +### Routenzusammenfassung bei IPv6 + +**Beispiel:** Zusammenfassung von drei /64-Netzen: + +``` +2001:0db8:85a3:0001::/64 → ...0000 0000 0001 (Hex: 0001) +2001:0db8:85a3:0002::/64 → ...0000 0000 0010 (Hex: 0002) +2001:0db8:85a3:0003::/64 → ...0000 0000 0011 (Hex: 0003) +``` + +Die ersten **62 Bits** sind identisch (die letzten 2 Bits des 4. Blocks variieren: 01, 10, 11). + +**Ergebnis:** `2001:0db8:85a3:0000::/62` + +**Vorteile:** + +- Effizientere Nutzung des Adressraums +- Weniger Routing-Tabellen-Einträge +- Bessere Routing-Effizienz +- Vereinfachtes Netzwerkmanagement + +### Adressierungsschema + +- IPv6-Adresse mit allen Bits auf 1: `FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF` +- IPv4-Adresse mit allen Bits auf 1: `255.255.255.255` = `FFFF:FFFF` (nur 32 Bit) + +--- + +## 6. IPv6-Adresstypen + +### Spezielle Adressen + +|Adresse|Beschreibung| +|---|---| +|`::1` (= 0:0:0:0:0:0:0:1)|**Loopback** – Entspricht 127.0.0.1 bei IPv4| +|`::` (= 0:0:0:0:0:0:0:0)|**Unspecified** – Wird vor der Adresszuweisung verwendet, darf nicht als Zieladresse genutzt werden| +|`::/0`|**Default Route** – Entspricht 0.0.0.0/0 bei IPv4| + +### Interface Identifiers (EUI-64) + +Der Host-Teil einer IPv6-Adresse (die letzten 64 Bit) kann automatisch aus der **MAC-Adresse** generiert werden: + +1. MAC-Adresse (48 Bit) wird in **zwei 3-Byte-Blöcke** geteilt +2. Zwischen beiden Blöcken wird **FFFE** eingeschoben (→ 64 Bit) +3. Das **Universal/Local Bit** (2. Bit des ersten Bytes) wird invertiert + +**Beispiel:** + +``` +MAC: 00:90:27:17:FC:0F +Teilen: 00:90:27 | 17:FC:0F +FFFE: 00:90:27:FF:FE:17:FC:0F +U/L-Bit: 02:90:27:FF:FE:17:FC:0F (Bit 2 von 00 → 02) +``` + +**Privacy Extension:** Zufällig generierte Interface IDs statt EUI-64 zum Schutz der Privatsphäre (verhindert Tracking über die MAC-Adresse). + +### Unicast-Adresstypen + +#### Global Aggregatable Unicast Adressen (2000::/3) + +Für die **weltweite Kommunikation** im Internet. Über verschiedene Netzwerke hinweg routbar. + +``` +|←── 48 Bit ──→|←16 Bit→|←────────── 64 Bit ──────────→| +| Global Prefix | Subnet | Interface ID | +| (vom ISP) | ID | | +``` + +- **Global Prefix** (48 Bit): Von der IANA → RIR → ISP zugewiesen +- **Subnet ID** (16 Bit): Vom Netzwerkadministrator vergeben → bis zu 65.536 Subnetze +- **Interface ID** (64 Bit): Identifiziert das Interface (EUI-64 oder zufällig) + +#### Link-Local Unicast Adressen (FE80::/10) + +Für die **lokale Kommunikation** innerhalb eines Netzwerksegments. + +``` +|←────────── 64 Bit ──────────→|←────────── 64 Bit ──────────→| +| FE80:0000:0000:0000 | Interface ID | +``` + +- Prefix ist immer **FE80::/64** +- Werden **nicht geroutet** – bleiben im lokalen Netz +- Werden für die **Autokonfiguration** und das Neighbor Discovery Protocol verwendet +- Jedes IPv6-fähige Interface hat automatisch eine Link-Local-Adresse + +#### Vergleichstabelle + +|Merkmal|Global Aggregatable Unicast|Link-Local Unicast| +|---|---|---| +|**Präfix**|2000::/3|fe80::/10| +|**Verwendung**|Kommunikation im Internet|Kommunikation im LAN| +|**Routing**|Ja, weltweit routbar|Nein, nicht routbar| +|**Zuweisung**|Von ISPs zugewiesen|Automatisch, lokal| +|**Beispiel**|2001:0db8:85a3::8a2e:0370:7334|fe80::1a2b:3c4d:5e6f| + +IPv6-Adressen werden von der **IANA** (Internet Assigned Numbers Authority) oder regionalen Stellen (RIPE NCC für Europa) zugewiesen. + +### Anycast Adressen + +- Syntaktisch eine **globale Unicast-Adresse**, die aber **mehrfach vergeben** wird +- Router leitet Verkehr zur **nächstgelegenen Instanz** (nach Routing-Metrik) +- Anwendung: z. B. DNS-Root-Server, CDN-Knoten + +### Multicast Adressen (FF00::/8) + +Ersetzt IPv4-Broadcast (den es in IPv6 **nicht mehr gibt**). + +``` +|←8 Bit→|←4 Bit→|←4 Bit→|←────── 112 Bit ──────→| +| FF | Flags | Scope | Group ID | +``` + +**Flags:** + +- R = 0/1: Kein/Eingebetteter Rendezvous Point +- P = 0/1: Nicht/Basierend auf Unicast-Präfix +- T = 0/1: Permanent (IANA-zugewiesen) / Temporär (lokal zugewiesen) + +**Scope:** + +|Wert|Scope| +|---|---| +|1|Node| +|2|Link| +|3|Subnet| +|4|Admin| +|5|Site| +|8|Organization| +|E|Global| + +### Nicht mehr gebräuchliche Adresstypen + +- **IPv4-kompatible IPv6-Adresse** (`0:::/96`) – veraltet +- **Site-local Adressen** (`FC00::/7`) – durch Unique Local Addresses (ULA) ersetzt + +--- + +## 7. ICMPv6 & Neighbor Discovery + +### ICMPv4 vs. ICMPv6 + +ICMPv6 (RFC 4443) übernimmt deutlich **mehr Aufgaben** als ICMPv4 (RFC 792): + +|Funktion|ICMPv4|ICMPv6| +|---|---|---| +|Connectivity Checks (Ping)|✓|✓| +|Informational/Error Messaging|✓|✓| +|Fragmentation Needed Notification|✓|✓| +|Address Assignment (SLAAC)|✗|✓| +|Address Resolution (ersetzt ARP)|✗|✓| +|Router Discovery|✗|✓| +|Multicast Group Management|✗|✓| +|Mobile IPv6 Support|✗|✓| + +### Neighbor Discovery Protocol (NDP) – Neue ICMPv6-Nachrichten + +|Nachricht|ICMP Code|Sender|Ziel|Zweck| +|---|---|---|---|---| +|**Router Solicitation (RS)**|133|Nodes|Alle Router (ff02::2)|Router auffordern, ein RA zu senden| +|**Router Advertisement (RA)**|134|Router|Sender des RS oder alle Hosts (ff02::1)|Default Router, Präfixe, Konfigurationsparameter bekanntgeben| +|**Neighbor Solicitation (NS)**|135|Node|Solicited Node Multicast / Target Node|Link-Layer-Adresse des Ziels erfragen (= ARP-Ersatz)| +|**Neighbor Advertisement (NA)**|136|Node|Anfragender Node|Antwort auf NS mit eigener Link-Layer-Adresse| +|**Redirect**|137|Router|–|Host über besseren First Hop informieren| + +### Automatische Adressvergabe (SLAAC) + +**Stateless Address Autoconfiguration** – Hosts konfigurieren sich selbst ohne DHCP-Server. + +**Router Discovery Prozess:** + +1. **Host sendet RS** (Router Solicitation, Typ 133) an Multicast-Adresse `ff02::2` (alle Router) +2. **Router antwortet mit RA** (Router Advertisement, Typ 134) an `ff02::1` (alle Hosts) mit: + - Netzwerkpräfix (z. B. `2001:0db8:abcd::/64`) + - Präfix-Lebensdauer (z. B. 3600 Sekunden) + - Flags für DHCPv6-Nutzung + - Informationen ob SLAAC oder DHCPv6 verwendet werden soll +3. **Host generiert seine Adresse** aus Netzwerkpräfix + Interface ID (EUI-64 oder zufällig) + +**Flags im Router Advertisement:** + +- **A-Flag** (Autonomous): ON = Host darf SLAAC verwenden +- **M-Flag** (Managed): OFF = Kein DHCPv6 für Adressen nötig + +Router senden regelmäßig RA-Nachrichten; Hosts können jederzeit RS senden, um aktuelle Informationen zu erhalten. + +### Duplicate Address Detection (DAD) + +Bevor ein Host seine neu generierte Adresse verwendet, prüft er per **DAD** (RFC 4862), ob die Adresse bereits im Netz existiert: + +1. Host empfängt RA mit Präfix +2. Host generiert vorläufige Adresse (Präfix + Interface ID) +3. Host sendet **NS** an die Solicited-Node-Multicast-Adresse der vorläufigen Adresse +4. Wenn **keine Antwort** kommt → Adresse ist eindeutig → wird übernommen +5. Wenn **NA** empfangen wird → Adresse ist bereits vergeben → neue Interface ID generieren + +### ARP-Ersatz in IPv6 + +IPv6 hat **kein ARP** mehr. Stattdessen wird **Neighbor Solicitation / Neighbor Advertisement** verwendet: + +1. **Host A** will die MAC-Adresse von **Host B** wissen +2. Host A sendet **NS** (Typ 135) an die Solicited-Node-Multicast-Adresse von Host B + - Enthält: eigene Link-Local-Adresse, Frage nach Host Bs Link-Layer-Adresse +3. **Host B** antwortet mit **NA** (Typ 136) per Unicast an Host A + - Enthält: eigene Link-Local-Adresse und MAC-Adresse + +--- + +## 8. Migration von IPv4 zu IPv6 + +### Dual Stack + +- Server, Router und Hosts betreiben **unabhängige Stacks** für IPv4 und IPv6 +- Falls die Gegenseite IPv6 unterstützt → Kommunikation über IPv6 +- Anwendungen müssen IPv6 unterstützen +- **Bevorzugte Methode** – natives IPv6 + +### Tunneling-Verfahren + +Verbindung von **IPv6-Inseln** über ein IPv4-Transportnetz. + +|Verfahren|Beschreibung|Status| +|---|---|---| +|**Manueller Tunnel (6in4)**|IPv6-Pakete werden in IPv4-Pakete gekapselt. Manuell konfiguriert.|Empfohlen wenn Tunnel nötig| +|**6-to-4**|IPv6-Prefix `2002::/16` + IPv4-Adresse des Edge-Routers. Automatisch.|Übergangslösung| +|**6rd**|Weiterentwicklung von 6-to-4, kontrolliert vom ISP. Teile der Kunden-IPv4-Adresse werden in den IPv6-Präfix eingebaut.|Übergangslösung, Ziel: natives IPv6| +|**Teredo**|IPv6-Pakete werden in IPv4-UDP-Pakete verpackt. Funktioniert auch hinter NAT.|Wird abgelöst| +|**ISATAP**|Intra-Site Automatic Tunnel Addressing Protocol|Veraltet| + +**Empfehlung:** Besser natives IPv6 (Dual Stack). Wenn Tunnel nötig, dann manuell mit 6in4 oder 6rd. + +--- + +## 9. Layer 7 – DHCP + +### DHCP (IPv4) – Dynamic Host Configuration Protocol + +Automatische Vergabe von IP-Adressen und Netzwerkparametern. + +#### DORA-Prozess (Discover → Offer → Request → Acknowledge) + +|Schritt|Nachricht|Richtung|Typ|Beschreibung| +|---|---|---|---|---| +|1|**DHCP Discover**|Client → Broadcast|0.0.0.0 → 255.255.255.255|Client sucht DHCP-Server. Enthält MAC-Adresse des Clients.| +|2|**DHCP Offer**|Server → Broadcast|Server → 255.255.255.255|Server bietet eine IP-Adresse an.| +|3|**DHCP Request**|Client → Broadcast|0.0.0.0 → 255.255.255.255|Client akzeptiert das Angebot. Enthält Server Identifier in den DHCP-Optionen.| +|4|**DHCP ACK**|Server → Unicast||Server bestätigt die zugewiesene IP-Adresse.| + +#### Fehlersituationen + +|Nachricht|Beschreibung| +|---|---| +|**DHCP-Decline**|Client macht ARP-Request für angebotene Adresse → wird beantwortet → Adresse bereits in Benutzung → Client lehnt ab| +|**DHCP-NACK**|Server hat die angefragte IP bereits vergeben, angefragte Optionen nicht verfügbar, oder Server nicht für die Adresse zuständig| +|**DHCP-Release**|Client benötigt die IP-Adresse nicht mehr (z. B. `ipconfig /release` unter Windows)| +|**DHCP-Inform**|Client hat bereits eine IP, fragt aber zusätzliche Parameter ab| + +#### DHCP Lease-Erneuerung + +|Zeitpunkt|Verhalten| +|---|---| +|**Nach 50% der Leasezeit**|Client sendet **DHCP Request per Unicast** an den bekannten Server. Server antwortet mit DHCP ACK (= neue Lease) oder antwortet nicht (Lease kann bis zum Ende genutzt werden).| +|**Nach 7/8 der Leasezeit**|Client sendet **DHCP Request per Broadcast** an alle Server. Verhalten wie bei 50%.| +|**Nach Ablauf der Leasezeit**|IP-Adresse wird freigegeben. Client sendet erneut **DHCP Discover**.| + +#### DHCP-Optionen (mögliche Parameter) + +- IP-Adresse, Netzmaske, Default-Gateway +- Name-Server (DNS), Time-Server +- WINS, Proxy-Server +- Bootimages, Bootserver +- u. v. m. + +#### DHCP Relay + +- DHCP arbeitet über **Broadcast** → funktioniert nur im lokalen Subnetz +- Ohne Relay bräuchte man **pro Subnetz einen DHCP-Server** +- Ein **Router als DHCP Relay Agent** kann DHCP-Pakete in andere Subnetze weiterleiten +- DHCP-Pakete bekommen zusätzliche Optionen: + - **DHCP Relay-Agent** Information + - **Option 82** (Switchport-Information) + +**Ablauf mit Relay:** + +``` +Client (Port 68) ──→ Relay (Port 67 & 68) ──→ Server (Port 67) + DHCP Discover → DHCP Discover → + ← DHCP Offer ← DHCP Offer + DHCP Request → DHCP Request → + ← DHCP Acknowledge ← DHCP Acknowledge +``` + +--- + +## 10. Weitverkehrsnetze (WAN) + +### Überblick + +- **WANs verbinden LANs** über große Entfernungen +- Die Bereitstellung hängt von den **Benutzeranforderungen** ab +- WANs werden auf den **drei unteren OSI-Schichten** (Layer 1–3) betrieben + +### WAN-Übergangspunkt (Kunde ↔ Service Provider) + +|Komponente|Beschreibung| +|---|---| +|**CPE** (Customer Premises Equipment)|Geräte beim Kunden (Router, Modem)| +|**Hausanschluss**|Physische Verbindung ins Gebäude| +|**Teilnehmeranschluss**|Letzte Meile zum Provider| +|**Netzabschluss SP**|Übergabepunkt zum Provider-Netz| +|**Trunk-Leitungen und Switches**|Backbone des Providers| + +### WAN-Verbindungsarten + +``` + WAN + / \ + Dediziert Switching + | / \ + Mietleitungen Leitungs- Paketvermittelt + (Synchron E1, vermittelt + über Ethernet) (ISDN/DSL) (Ethernet, IP) +``` + +### Layer-1-Zugangstechnologien + +**Heutige Technologien (IP-basiert, paketvermittelt):** + +- Glasfaseranschlüsse (FTTH, FTTB) +- Kupferkabel (ehemaliges Telefonnetz, aktuell DSL) +- Kabel-Internet über DOCSIS (Coaxialkabel, ursprünglich für TV) +- Satelliten +- LTE/5G Mobilfunk + +**Frühere Technologien:** + +- Plesiochrone Digitale Hierarchie (PDH) +- Synchrone Digitale Hierarchie (SDH) +- Frame Relay +- Asynchronous Transfer Mode (ATM) + +### WAN-Protokolle (Paketvermittelt) + +|Protokoll|Beschreibung| +|---|---| +|**MPLS** (Multiprotocol Label Switching)|Label-basiertes Forwarding für Unternehmen und SPs. Ermöglicht effiziente Datenübertragung und QoS.| +|**Segment Routing** (SR-MPLS und SRv6)|Vereinfachte Netzwerkverwaltung – intermediate Router brauchen keine Pfadinfos. Ingress Router legt den Weg als Liste von Segmenten fest (im IPv6 als Routing Extension Header / SRH, bei MPLS als Label Stack). Form von Source Routing.| +|**Carrier Ethernet**|Ethernet-Protokolle für Hochgeschwindigkeitsverbindungen zwischen Standorten. Von Carriern/SPs bereitgestellt.| +|**SD-WAN**|Software-Defined WAN – dynamische Verwaltung von Netzwerkverbindungen über verschiedene Transportmittel (MPLS, LTE, Internet).| +|**PPPoE**|Point-to-Point Protocol over Ethernet – nutzt DSL als Zugangstechnologie zum WAN des SPs.| + +--- + +## 11. PPPoE & DSL + +### PPPoE (Point-to-Point Protocol over Ethernet) + +PPPoE ermöglicht die Übertragung unterschiedlicher Protokolle (z. B. IP) über eine Leitung (Modem/xDSL). Es ist standardisiert in **RFC 2516** und bietet: + +- Kontrollierten Verbindungsaufbau über **LCP** (Link Control Protocol) +- **Authentifizierung** (für Abrechnung beim Provider) +- **Autokonfiguration** + +### PPPoE-Verbindungsphasen + +``` + ┌─────────────────────────────────────────────────┐ + │ │ + ▼ │ + ┌──────┐ Physik. Verbindung ┌──────┐ │ + │ Down │ ───────────────────→ │ Auth │ │ + └──────┘ └──┬───┘ │ + ▲ │ │ + │ Anmeldung gescheitert │ Anmeldung │ + │ │ erfolgreich │ + │ ▼ │ + │ ┌──────────┐ │ + │ │ Network │ │ + │ │ Config │ │ + │ └────┬─────┘ │ + │ │ Austausch │ + │ │ erfolgreich │ + │ ▼ │ + │ Abbauwunsch/Fehler ┌─────────────┐ │ + └────────────────────── │ Operational │ ─────────┘ + └─────────────┘ +``` + +### Phase 1: Discovery & Verbindungsaufbau + +1. **PADI** (PPPoE Active Discovery Initiation) – Client sendet Broadcast, sucht PPPoE-Server +2. **PADO** (PPPoE Active Discovery Offer) – Server antwortet mit Angebot und Infos über sich +3. **PADR** (PPPoE Active Discovery Request) – Client wählt einen Server und sendet Anfrage +4. **PADS** (PPPoE Active Discovery Session Confirm) – Server bestätigt und weist **Session-ID** zu + +### Phase 2: Authentifizierung + +Nach erfolgreichem Verbindungsaufbau wird ein PPPoE-Sitzungstunnel aufgebaut. Alle Daten werden in PPP-Pakete eingekapselt. + +**PAP (Password Authentication Protocol):** + +- **Einfaches, unverschlüsseltes** Verfahren (unsicher!) +- **2-Way Handshake:** Client sendet LoginID + Passwort → Server akzeptiert oder verwirft +- Passwort wird **im Klartext** übertragen +- **Nicht mehr verwendet** für Anschlüsse zum SP + +**CHAP (Challenge Handshake Authentication Protocol):** + +- **Verschlüsseltes**, sichereres Verfahren +- **3-Way Handshake:** + 1. Server sendet eine **zufällige Challenge** an den Client + 2. Client kombiniert Challenge mit seinem Passwort und sendet einen **Hash-Wert** zurück (SHA-1, SHA-256 oder SHA-384) + 3. Server führt **dieselbe Berechnung** durch und vergleicht die Ergebnisse +- **Keine Übertragung von Passwörtern** über die Leitung +- Authentifizierung durch lokalen Router oder externen Authentifizierungsserver + +### Phase 3: Netzkonfiguration + +Nach erfolgreicher Authentifizierung werden Netzwerkparameter ausgetauscht: + +- IP-Adresse, Subnetzmaske, Standard-Gateway +- DNS-Server-Adressen +- MTU (Maximum Transmission Unit für Ethernet) +- Session-ID +- QoS-Parameter + +### Phase 4: Operational (Betrieb) + +- **Session Timer / Idle Timer** zur Verwaltung der Sitzung +- **Keepalive-Nachrichten** – bei Ausbleiben wird Session ungültig markiert +- **Timeouts** – Session-ID wird nach Timer-Ablauf für ungültig erklärt (Ressourcen freigeben) +- **Fehlerüberprüfung** – Server kann erneute Authentifizierung anfordern + +### DSL (Digital Subscriber Line) + +Bereitstellung von Internet über **herkömmliche Telefonleitungen** (Kupfer). + +**Aufbau:** + +``` +Kunde/Teilnehmer │ Vermittlungsstelle + │ +Telefon ─── NTBA ──┐ │ ┌── Digitale Vermittlung ── Telefonnetz + ├─ TAL ┤ │ +PC ─── DSL-Router ──┘ │ ├── DSLAM ── BRAS ── Internet + │ │ + Splitter│ Splitter +``` + +- **TAL** = Teilnehmeranschlussleitung (letzte Meile, Kupfer) +- **DSLAM** = Digital Subscriber Line Access Multiplexer – sammelt und aggregiert Daten der Teilnehmer +- **BRAS/BNG** = Broadband Remote Access Server / Broadband Network Gateway – terminiert PPPoE + +### DSL-Varianten + +|Variante|Typ|Max. Datenrate|Besonderheit| +|---|---|---|---| +|**ADSL**|Asymmetrisch|Bis 8 Mbit/s|Download > Upload| +|**ADSL2+**|Asymmetrisch|Bis 24 Mbit/s|Zusätzliche Frequenzbänder| +|**SDSL**|Symmetrisch|2,36 Mbit/s|Upload = Download| +|**VDSL**|Asymmetrisch|Bis 100 Mbit/s|Optimiert für kurze Entfernungen| +|**VDSL2-Vectoring**|Hybrid|Bis 250 Mbit/s|Kupfer letzte Meile + Glasfaser zum ISP. Crosstalk-Kompensation.| + +Höhere Raten als VDSL2-Vectoring sind nur über **FTTH** (Fiber to the Home) oder **Kabelinternet** (DOCSIS) möglich. + +### Abschaltung von DSL in Deutschland + +- **Ziel:** Glasfaserausbau komplett bis **2030** +- DSL-Abschaltung bei einzelnen Service Providern kann **ab 2026** beginnen +- **Bundesnetzagentur** reguliert den Telekommunikationsmarkt +- Stand Juni 2025: **42,9%** aller Haushalte verfügen über einen Glasfaseranschluss (FTTB/FTTH) +- **Gigabitversorgung** (1000 Mbit/s) über alle Technologien hinweg: **knapp 79%** + +--- + +## Zusammenfassung der Kernthemen + +|Thema|Kernaussage| +|---|---| +|**OSPF Areas**|Hierarchische Strukturierung reduziert Routing-Overhead. ABR/ASBR fassen Routen zusammen.| +|**Route Summarization**|Binärvergleich der Netzadressen → gemeinsame Bits = neues Präfix. Spart Ressourcen, beschleunigt Konvergenz.| +|**IPv6 Motivation**|128-Bit-Adressen, vereinfachter Header, Autokonfiguration, integrierte Sicherheit.| +|**IPv6 Header**|40 Byte fest, Extension Headers für Erweiterungen. Next Header verkettet die Header.| +|**IPv6 Adresstypen**|Global Unicast (2000::/3), Link-Local (fe80::/10), Multicast (ff00::/8), Anycast. Kein Broadcast!| +|**NDP/ICMPv6**|Ersetzt ARP (NS/NA), ermöglicht Router Discovery (RS/RA), SLAAC und DAD.| +|**IPv4→IPv6 Migration**|Dual Stack bevorzugt. Tunnel (6in4, 6rd) als Übergangslösung.| +|**DHCP**|DORA-Prozess, Lease-Erneuerung bei 50% und 7/8, Relay für subnetzübergreifende Vergabe.| +|**WAN**|Dediziert vs. Switching (leitungs-/paketvermittelt). MPLS, Segment Routing, Carrier Ethernet, SD-WAN.| +|**PPPoE**|Discovery → Auth (PAP/CHAP) → Network Config → Operational. Verbindungsprotokoll für DSL.| +|**DSL**|ADSL, VDSL, Vectoring. DSLAM aggregiert Teilnehmer. Ablösung durch Glasfaser bis 2030.| diff --git a/Netzwerke/zusammenfassungen/nw5 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw5 - zusammenfassung.md new file mode 100644 index 0000000..44f6b68 --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw5 - zusammenfassung.md @@ -0,0 +1,752 @@ +# Netzwerktechnik – Vorlesung 5: Layer 4 (TCP/UDP), Layer 3 (NAT), Layer 7 (DNS) + +**Modul:** IT2221 – Netwerktechnik +**Dozentin:** Gabriele Schrenk (e_schrenk@doz.hwr-berlin.de) +**Datum:** 20.03.2026 + +----- +## LAYER 4 – Transport Layer (Transportschicht) + +### Wiederholung TCP/IP Referenzmodell – Schicht 4 + +Schicht 4 (Transport) ist zuständig für die Verbindung zwischen Endsystemen. Die Dateneinheit auf dieser Schicht heißt **Segment**. Die Transportschicht stellt Dienstgüte (Quality of Service) und Zuverlässigkeit sicher. + +Das OSI-Modell von oben nach unten: Application → Presentation → Session → **Transport** → Network → Data Link → Physical. + +----- + +### TCP – Transmission Control Protocol + +TCP ist Teil der Protokollfamilie TCP/IP und ermöglicht **Ende-zu-Ende-Kommunikation**. Der Datenstrom wird auf verschiedene Anwendungen aufgeteilt. Daten werden mit einem TCP-Header versehen und anschließend an das IP-Protokoll übergeben. Datenpakete werden beim Sender sortiert und an adressierte Anwendungen (identifiziert über **Portnummern**) geschickt. + +#### Wichtigste Eigenschaften von TCP + +- **Verbindungsmanagement:** TCP ist verbindungsorientiert und stellt die richtige Reihenfolge der Daten sicher. +- **Flusskontrolle (Flow Control):** Schützt gegen Pufferüberlauf beim Empfänger. +- **Zeitüberwachung (Timer):** Überwacht, ob Bestätigungen rechtzeitig eintreffen. +- **Fehlerbehandlung (Retransmission):** Verlorene oder fehlerhafte Pakete werden durch Neuübertragung korrigiert. + +----- + +### Aufbau des TCP-Headers + +Der TCP-Header besteht aus folgenden Feldern: + +|Feld |Beschreibung | +|--------------------------|---------------------------------------------------------------------| +|**Quell-Port / Ziel-Port**|Identifizieren die sendende und empfangende Anwendung | +|**Sequenz-Nummer** |Nummer des ersten Bytes im aktuellen Segment | +|**Acknowledgement-Nummer**|Nummer des nächsten erwarteten Datenpakets | +|**Data-Offset** |Anzahl der 32-bit-Blöcke im TCP-Header (entspricht der Header Length)| +|**Flags** |SYN, ACK, FIN, RST, URG, PSH, ECE, CWR | +|**Window-Größe** |Größe des Empfangs-Puffers (für Flusskontrolle) | +|**Check-Summe** |Prüfsumme zur Fehlererkennung | +|**Urgent-Pointer** |Zeigt auf das Ende dringender Daten (schnelle Zustellung) | +|**Options** |Optionale Felder wie Max. Segment Size (MSS), Window Scale, Timestamp| + +Aufbau als Tabellenstruktur: + +``` +| Quell-Port | Ziel-Port | +| Sequenz-Nummer | +| Acknowledgement-Nummer | +| Data-Offset | Reserviert | Flags | Window | +| Check-Summe | Urgent-Pointer | +| Option / Füllbits | +| Daten... | +``` + +----- + +### TCP – Portnummern + +Ports werden von der **Internet Assigned Numbers Authority (IANA)** für alle Transportprotokolle vergeben. Es gibt drei Bereiche: + +|Bereich |Portnummern|Beschreibung | +|-------------------------------|-----------|-------------------------------------------| +|**Well-Known Ports** |0–1023 |Standardisierte, allgemein bekannte Dienste| +|**Registered Ports** |1024–49151 |Registrierte Dienste und Anwendungen | +|**Dynamically Allocated Ports**|49152–65535|Dynamisch zugewiesene (ephemere) Ports | + +#### Beispiele für TCP-Ports + +|Port|Protokoll|Anwendung | +|----|---------|--------------------------------------------| +|21 |FTP |Dateitransfer | +|22 |SSH |Secure Shell Service | +|23 |Telnet |Konsole | +|25 |SMTP |Simple Mail Transfer Protocol | +|80 |HTTP |Hypertext Transfer Protocol (World Wide Web)| +|110 |POP3 |Post Office Protocol v3 für E-Mail | +|123 |NTP |Dienst zur Zeitsynchronisierung | +|179 |BGP |Border Gateway Protocol | +|220 |IMAP3 |Internet Message Access Protocol für E-Mail | +|443 |HTTPS |HTTP Secure | + +----- + +### TCP – Acknowledgement-Mechanismus + +TCP verwendet Sequenz- und Acknowledgement-Nummern zur zuverlässigen Datenübertragung. + +**Ablauf-Beispiel:** + +1. Sender schickt Paket mit Seq=10 (Source-Port 1028, Dest-Port 23, Ack=1). +2. Empfänger empfängt Paket #10 und antwortet mit Ack=11 (Source-Port 23, Dest-Port 1028, Seq=1, Ack=11). Die Ack-Nummer 11 bedeutet: „Ich erwarte als nächstes Paket #11.” +3. Sender sendet nächstes Paket mit Seq=11 (Ack=2). + +Die **Acknowledgement-Nummer** gibt immer die Sequenznummer des **nächsten erwarteten** Pakets an. + +----- + +### TCP – Verbindungsaufbau (Three-Way-Handshake) + +Der TCP-Verbindungsaufbau erfolgt in drei Schritten: + +**Schritt 1:** Client (Host A) sendet ein **SYN**-Paket an den Server (Host B). + +- `seq=100, ctl=SYN` + +**Schritt 2:** Server empfängt das SYN und antwortet mit **SYN+ACK**. + +- `seq=300, ack=101, ctl=SYN,ACK` +- Der Server bestätigt den Empfang (ACK) und schickt gleichzeitig seinen eigenen Verbindungswunsch (SYN). Die ack=101 bestätigt, dass seq=100 empfangen wurde und als nächstes seq=101 erwartet wird. + +**Schritt 3:** Client bestätigt mit **ACK**. Die Verbindung ist hergestellt. + +- `seq=101, ack=301, ctl=ACK` + +Zusammenfassung: Client sendet SYN → Server antwortet SYN+ACK → Client bestätigt ACK → Datenaustausch möglich. + +----- + +### TCP – Verbindungsabbau (4-Way-Handshake) + +Der Verbindungsabbau ist dem Aufbau ähnlich, aber umgekehrt und benötigt **vier Schritte**: + +**Schritt 1:** Host A sendet **FIN** (Verbindungsabbauwunsch). + +- `seq=101, ctl=FIN` + +**Schritt 2:** Host B empfängt FIN und bestätigt mit **ACK**. + +- `seq=300, ack=101, ctl=ACK` + +**Schritt 3:** Host B sendet seinerseits **FIN** (eigener Abbauwunsch). + +- `seq=301, ack=101, ctl=FIN` + +**Schritt 4:** Host A bestätigt mit **ACK**. Die Verbindung ist beendet. + +- `seq=102, ack=302, ctl=ACK` + +----- + +### TCP – Sliding Window + +#### Motivation + +- TCP muss die Menge an gleichzeitig übertragenen Bytes verarbeiten. +- Es gibt Methoden zur Bestätigung der Pakete und Flusskontrolle. +- Bei **Paketverlust** wird ab dem verlorenen Paket erneut übertragen (erkannt durch ausbleibende ACKs oder Timeout) → Garantie, dass alle Pakete ankommen. +- Pakete werden in der richtigen Reihenfolge an die Anwendungsschicht übergeben und müssen daher zwischengepuffert werden → Risiko eines **Pufferüberlaufs**. + +#### Sliding Window Mechanismus + +- Das Sliding Window regelt die **Senderate** in Bezug auf den Buffer des Empfängers. +- Der TCP-Stack hat unterschiedlich viel Speicher. +- Wird Verlust festgestellt, wird der Sender informiert. +- Der Sender **reduziert** daraufhin die Anzahl der zu sendenden Pakete pro Zeiteinheit. + +#### Fenster-Größe = 1 (Stop-and-Wait) + +Bei Fenstergröße 1 wird jeweils nur ein Paket gesendet und auf dessen ACK gewartet, bevor das nächste Paket gesendet wird. Bei Paketverlust: der **Retransmission-Timer** läuft ab und das Paket wird erneut gesendet. + +**Beispiel mit Paketverlust (Fenstergröße 1):** + +- Sender sendet Paket 1 → Empfänger bestätigt mit ACK 2. +- Sender sendet Paket 2 → Paket geht verloren. +- Retransmission-Timer läuft ab → Sender sendet Paket 2 erneut. +- Empfänger empfängt Paket 2 → Sendet ACK 3. + +**Variante:** Das ACK geht verloren statt des Datenpakets. Der Sender sendet Paket 2 erneut, der Empfänger empfängt es doppelt (verwirft das Duplikat dank Sequenznummer) und sendet erneut ACK 3. + +#### Fenster-Größe = 3 + +Mit einer größeren Fenstergröße können **mehrere Pakete** gleichzeitig gesendet werden, ohne auf einzelne ACKs zu warten. + +- Das Fenster (Sliding Window) liegt über den zu sendenden Paketen. +- Alle Pakete innerhalb des Fensters werden verschickt. +- Beispiel mit Fenstergröße 3: Die ersten 3 Pakete werden verschickt. Paket 4 geht erst raus, wenn das ACK für Paket 1 eingetroffen ist. +- Pakete, für die kein ACK vorliegt, werden **nochmals verschickt**. + +**Beispiel mit Paketverlust (Fenstergröße 3):** + +- Sender sendet Pakete 1, 2, 3. +- Paket 2 geht verloren. Empfänger empfängt 1 und 3, sendet ACK 2 (fordert Paket 2 erneut an). +- Nach Empfang von ACK 2 sendet der Sender erneut Pakete 2, 3, 4. +- Empfänger empfängt 2, 3, 4 → Sendet ACK 5. + +**Beispiel mit ACK-Verlust (Fenstergröße 3):** + +- Sender sendet Pakete 1, 2, 3 → Empfänger empfängt alle, sendet ACK 4. +- ACK 4 geht verloren → Retransmission-Timer läuft ab. +- Sender sendet Paket 1 erneut → Empfänger empfängt 1 erneut, sendet ACK 4. +- Sender empfängt ACK 4 → Sendet Paket 4. + +#### Gruppenaufgaben + +**Aufgabe 1:** Sender sendet drei Pakete (seq=100, 101, 102; alle mit ack=5). Alle drei kommen beim Empfänger an. +**Lösung:** Empfänger antwortet mit `seq=5, ack=103, ctl=ACK` (erwartet als nächstes Paket 103). + +**Aufgabe 2:** Sender sendet drei Pakete (seq=100, 101, 102; alle mit ack=5). Paket 101 geht verloren (nur 100 und 102 kommen an). +**Lösung:** Empfänger antwortet mit `seq=5, ack=101, ctl=ACK` (fordert Paket 101 erneut an, da es fehlt). + +----- + +### TCP – Flusskontrolle + +- Pakete und Meldungen werden mit **Sequenznummern** versehen. +- Mögliche Übertragungsprobleme: doppelte Datenpakete, doppelte Quittierungen. +- Durch Nummern ist Reihenfolge und Zuordnung bekannt. +- Es folgen erst wieder Datenpakete, wenn das erste ACK kommt. +- Die **Fenstergröße wird während der Übertragung angepasst** durch: + - **Slow Start:** Exponentielles Wachstum der Fenstergröße bis zum Threshold. + - **Fast Retransmit:** Sofortige Neuübertragung ohne Warten auf den Timer, wenn **3 doppelte ACKs** empfangen werden. + - **Additive Erhöhung (Congestion Avoidance):** Lineares Wachstum der Fenstergröße nach dem Threshold für faire und effiziente Zuteilung der Bandbreite. + +#### CWND (Congestion Window) zur Vermeidung von Überlast + +Das CWND beschreibt die Menge der unbestätigten Pakete. Der Verlauf über die Zeit: + +1. **Slow-Start-Phase:** CWND wächst exponentiell (Verdopplung pro RTT). +2. Ab dem **Threshold** wechselt es in die **Congestion Avoidance** Phase: CWND wächst linear. +3. Bei **Fast Retransmit** (3 doppelte ACKs): CWND wird halbiert, neuer Threshold wird gesetzt, dann wieder lineares Wachstum. + +----- + +### UDP – User Datagram Protocol + +#### Eigenschaften von UDP + +- **Kein** Verbindungs-Aufbau / -Management (verbindungslos). +- **Ungesicherter Dienst** (keine Garantie für Zustellung). +- Verzichtet auf den bei TCP notwendigen Overhead. +- Für **Multicast** und **Broadcast** nutzbar. + +#### UDP – Funktionsweise + +UDP hat im Vergleich zu TCP die gleichen grundlegenden Funktionen (Port-Zuordnung, Datenweiterleitung), aber **keine**: + +- Kontrollfunktion +- Sicherstellung von Datenempfang +- Nummerierung der Datenpakete + +UDP ist **schlanker und einfacher** zu verarbeiten. Daten werden direkt an die Anwendungen weitergeleitet. Die Anwendung trägt selbst die Verantwortung für die Sicherstellung der Übertragung, zum Beispiel durch einen **Jitterbuffer**, der Laufzeitvarianzen ausgleicht. + +Typische Einsatzgebiete: DNS-Anfragen, Echtzeit Audio-/Video-Streaming, VPN. + +#### UDP-Header + +Der UDP-Header ist mit nur **8 Byte** sehr schlank: + +|Feld |Größe |Beschreibung | +|-----------|------|---------------------------------------| +|Quell-Port |2 Byte|Source Port | +|Ziel-Port |2 Byte|Destination Port | +|Länge |2 Byte|Gesamtlänge von Header und Datenbereich| +|Check-Summe|2 Byte|CRC zur Fehlererkennung | + +Danach folgen die Daten. + +#### Beispiele für UDP-Ports + +|Port|Protokoll|Anwendung | +|----|---------|--------------------------------------------| +|53 |DNS |Domain Name Server | +|67 |DHCP |Dynamic Host Configuration Protocol (Server)| +|68 |DHCP |Dynamic Host Configuration Protocol (Client)| +|69 |TFTP |Trivial File Transfer Protocol | +|161 |SNMP |Simple Network Management Protocol | + +----- + +### SCTP – Stream Control Transmission Protocol + +SCTP wurde im Jahr 2000 von der IETF als Transportprotokoll standardisiert. Eigenschaften: + +- **Zuverlässig und verbindungsorientiert** (wie TCP). +- Unterstützt das Konzept von **Assoziationen** (logische Verbindungen). +- **Multistreaming:** Mehrere Datenströme gleichzeitig über eine einzige Assoziation möglich. +- **Multihoming:** Unterstützt mehrere IP-Adressen pro Endpunkt für Ausfallsicherheit. +- Dienstgüte ähnlich wie TCP (Fluss-/Überlastkontrolle). + +Einsatzgebiete: + +- Signalübertragung zwischen RAN und EPC in **LTE**. +- Transportprotokoll für das **Diameter-Protokoll** (AAA: Authentifizierung, Autorisierung, Abrechnung) in LTE. +- Control Plane Protokoll im **5G Core Netz**. +- Robuste **IoT-Anwendungen** (Internet of Things). + +----- + +## LAYER 3 – Network Layer (Vermittlungsschicht) – NAT + +### Konzept von NAT in IPv4 + +**NAT (Network Address Translation)** wird in IPv4-Netzwerken verwendet, um die Anzahl benötigter öffentlicher IP-Adressen zu **minimieren** und gleichzeitig **Sicherheit** und **Flexibilität** des Netzwerks zu erhöhen. + +NAT ermöglicht, dass mehrere Systeme in einem privaten Netzwerk über eine **einzige öffentliche IP-Adresse** auf das Internet zugreifen. + +Hauptfunktionen: + +- **Adressübersetzung:** Private IP-Adressen der internen Systeme werden in eine öffentliche IP-Adresse übersetzt. +- **Verstecken der internen Struktur:** Interne IP-Adressen sind von außen nicht sichtbar → erhöht die Sicherheit. +- **Verwaltung von IP-Adressen:** Organisationen können ihre internen Netzwerke unabhängig von den öffentlichen IP-Adressen verwalten. + +----- + +### Arten von NAT + +|NAT-Typ |Beschreibung | +|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------| +|**Static NAT** |Feste 1:1-Zuordnung zwischen einer privaten und einer öffentlichen IP-Adresse | +|**Dynamic NAT** |Zuordnung von mehreren privaten IP-Adressen zu einer Gruppe (Pool) von öffentlichen IP-Adressen | +|**PAT (Port Address Translation) / NAT Overload**|Mehrere private IP-Adressen teilen sich **eine einzige** öffentliche IP-Adresse, unterschieden über Portnummern| + +----- + +### Prozess der NAT-Umsetzung (PAT-Beispiel) + +Szenario: Internes Netzwerk mit PC1 (192.168.1.2), PC2 (192.168.1.3), PC3 (192.168.1.4). Router hat die öffentliche IP-Adresse 203.0.113.5 und verwendet PAT. + +**Ausgehender Verkehr (PC1 → Webserver 93.184.216.34):** + +1. PC1 sendet ein Paket an 93.184.216.34. Das Paket hat Quell-IP 192.168.1.2. +2. Der Router empfängt das Paket und erkennt die private Quelladresse. +3. Er ändert die Quell-IP-Adresse auf seine öffentliche Adresse **203.0.113.5** und weist eine eindeutige L4-Portnummer zu (z.B. **10001**). +4. Das Paket wird mit der neuen Quelladresse 203.0.113.5:10001 ins Internet gesendet. + +**Eingehender Verkehr (Antwort vom Webserver):** + +1. Der Webserver antwortet an 203.0.113.5:10001. +2. Der Router empfängt die Antwort und schaut in seiner **NAT-Tabelle** nach. +3. Er übersetzt die Zieladresse zurück zu 192.168.1.2, indem er die Portnummer 10001 verwendet, um den richtigen internen PC zu identifizieren. + +PC2 und PC3 erhalten eigene Portnummern (z.B. 10002, 10003). Der Router verwendet die **gleiche** öffentliche IP-Adresse, aber **verschiedene Ports** für die Zuordnung. + +----- + +### Zuweisung der Portnummer im Detail + +- Die Portnummer wird vom **Router** während des NAT-Prozesses zugewiesen, wenn ein internes System eine Verbindung zu einem externen Server initiiert. +- Der Router führt eine Übersetzung der **Quell-IP-Adresse** und der **Quell-Portnummer** durch. +- Ein Eintrag in einer **NAT-Tabelle** wird erstellt, der die Zuordnung von interner IP:Port zu externer IP:Port speichert. +- Portnummern werden auf der **Transport-Schicht (Schicht 4)** des OSI-Modells zugewiesen und sind im **Transport-Header** (TCP oder UDP) des IP-Pakets kodiert. + +**Konkretes Beispiel:** + +- PC mit IP 192.168.1.2 und Quellport 50000 möchte zu Webserver 93.184.216.34 (Port 80 HTTP). +- IP-Paket enthält: IP-Header (Quell-IP 192.168.1.2, Ziel-IP 93.184.216.34) + TCP-Header (Quellport 50000, Zielport 80). +- Router ändert Quell-IP auf 203.0.113.5 und weist neuen Quellport 10001 zu. +- NAT-Tabelle: 192.168.1.2:50000 ↔ 203.0.113.5:10001. +- Paket wird gesendet mit Quell-IP 203.0.113.5, Quellport 10001. Die **Zielportnummer bleibt unverändert** (80). + +----- + +### Sicherheitskonzept hinter NAT + +#### 1. Verstecken interner IP-Adressen + +- NAT verbirgt die internen IP-Adressen der Systeme (**Anonymität**). +- Alle Systeme greifen mit der öffentlichen IP-Adresse des Routers auf das Internet zu. +- Angreifer können nicht direkt auf interne Systeme zugreifen, da die IP-Adressen nicht bekannt sind. +- Für mehrere Systeme (PCs, Smartphones etc.) sieht ein externer Server nur die öffentliche IP-Adresse des Routers. +- Interne Adressen (z.B. 192.168.1.2, 192.168.1.3) sind für den externen Server **unsichtbar**. + +#### 2. Einschränkung eingehender Verbindungen + +- NAT erlaubt standardmäßig **keine eingehenden Verbindungen** von externen Quellen. +- Nur **intern initiierte** Verbindungen erhalten eine Rückantwort. +- Ein Angreifer kann keine Verbindung nach intern herstellen, **außer** eine spezifische **Portweiterleitung** oder Regel wurde konfiguriert. +- Ein Webserver im Internet kann seine Antwort nur an die öffentliche IP-Adresse des Routers senden. + +#### 3. Port Address Translation (PAT) + +- Bei PAT (NAT Overload) nutzen alle Systeme dieselbe öffentliche IP-Adresse mit **verschiedenen Portnummern**. +- Erhöht die Sicherheit durch **Verringerung der Angriffsvektoren**. +- Ein Angreifer, der eine Verbindung zu 203.0.113.5 versucht, hat keine Information darüber, welches interne Gerät auf welchem Port aktiv ist. + +#### 4. Einfachheit der Konfiguration + +- NAT-Implementierungen bieten oft eine **eingebaute Firewall-Funktionalität**. +- Der NAT-Router blockiert automatisch unerwünschte eingehende Verbindungen. +- Viele Angriffsarten (z.B. Port-Scanning-Versuche) werden erschwert. + +**Wichtig:** NAT ist **kein vollständiger Ersatz** für Sicherheitslösungen wie Firewalls oder Intrusion Detection Systems, sondern nur eine **weitere Ergänzung** der Sicherheitsarchitektur. + +----- + +### NAT in IPv6 + +Bei IPv6 wird die Notwendigkeit für NAT oft in Frage gestellt, da IPv6 einen nahezu **unbegrenzten Adressraum** bietet. NAT bleibt jedoch in bestimmten Szenarien relevant. Die relevanten Konzepte sind **NAT64** und **NPTv6**. + +#### NAT64 + +NAT64 ermöglicht **IPv6-Clients den Zugriff auf IPv4-Ressourcen**. + +Funktionsweise: + +1. Ein IPv6-Client möchte auf einen IPv4-Webserver zugreifen (z.B. 203.0.113.10). +2. Der NAT64-Router übersetzt die Ziel-IPv4-Adresse in ein IPv6-Format. Die IPv4-Adresse 203.0.113.10 wird in das Well-Known IPv6-Präfix **64:ff9b::** eingebettet (Ergebnis z.B. 64:ff9b::cb00:710a). +3. Der Webserver sendet die Antwort zurück an die IPv4-Adresse des NAT64-Routers. +4. Der NAT64-Router übersetzt die Antwort von IPv4 zurück zu IPv6 und leitet sie an den Client weiter. + +Vorteile von NAT64: + +- **Interoperabilität:** IPv6-Clients erhalten Zugriff auf IPv4-Ressourcen. +- **Keine Änderungen an IPv4-Servern** nötig. +- **Erleichtert den Übergang** von IPv4 zu IPv6, da bestehende IPv4-Dienste weiterhin nutzbar bleiben. + +#### NPTv6 (Network Prefix Translation) + +NPTv6 ist eine Art NAT, die **nur das Präfix** einer IPv6-Adresse ändert (der Interface-Identifier bleibt gleich). + +Anwendungsfall: Ein Netzwerk wechselt den ISP. Der neue ISP vergibt ein neues IPv6-Präfix (z.B. 2001:0db8:1234::/48 statt des alten 2001:0db8:abcd::/48). Der NPTv6-Router wird so konfiguriert, dass er eingehende/ausgehende Pakete mit dem alten Präfix in das neue Präfix übersetzt. + +Beispiel: Quelladresse 2001:0db8:abcd:0001::1 wird zu 2001:0db8:1234:0001::1 übersetzt. + +Vorteile von NPTv6: + +- **Einfache Migration:** Internes Adressschema kann trotz ISP- oder Präfix-Wechsel beibehalten werden. +- **Minimale Änderungen:** Keine Neukonfiguration aller internen Geräte nötig. +- **Transparente Übersetzung:** Geschieht transparent für die internen Geräte, keine Änderungen an Anwendungen oder Diensten. + +#### Warum NAT auch bei IPv6 noch relevant ist + +- **Transition IPv4→IPv6:** In der Übergangsphase existieren noch viele IPv4-Ressourcen → NAT64 nötig. +- **Sicherheitsaspekte:** NAT verbirgt die interne Netzwerkstruktur. Auch wenn IPv6 Sicherheit durch IPsec bietet, möchten Organisationen möglicherweise zusätzliche Schutzmaßnahmen. +- **Routenmanagement:** NPTv6 ermöglicht präfixbasierte Strategien, die Routing und Netzwerkinfrastruktur vereinfachen. +- **Flexibles Adressmanagement:** Organisationen können Adressierungssysteme anpassen, ohne interne Strukturen zu beeinträchtigen → NPTv6. +- **Legacy-Systeme:** Viele bestehende Systeme sind noch auf IPv4 konfiguriert → NAT64 ermöglicht den gleichzeitigen Betrieb. + +----- + +## LAYER 7 – Application Layer (Anwendungsschicht) – DNS + +### Domain Name Service (DNS) – Grundlagen + +DNS ist ein **hierarchisches System** zur Namensauflösung. Es wandelt **Domainnamen** (z.B. www.example.com) in **IP-Adressen** (z.B. 192.0.2.1) um. Der Zweck ist die Verwendung leicht merkbarer Domainnamen statt numerischer IP-Adressen, was eine benutzerfreundliche Navigation im Internet ermöglicht. + +Zwei Kernkomponenten: + +- **Name-Server:** Software/Server zum Beantworten von DNS-Anfragen. Pro Zone gibt es einen primären Server. +- **Resolver:** Software zum Auflösen von Rechnernamen. Ergebnisse werden im Cache gespeichert (Caching). + +----- + +### DNS-Struktur (Hierarchien) + +Das DNS ist hierarchisch aufgebaut: + +- **Root-Domain:** Höchste Ebene, dargestellt als Punkt (.). Umfasst alle TLDs. Der Root-Server ist der Ausgangspunkt für alle DNS-Abfragen. +- **Top-Level-Domains (TLD):** z.B. .com, .net, .edu, .org, .gov, .de. Umfassen verschiedene Kategorien von Domains. +- **Second-Level-Domains:** z.B. example.com. Typischerweise der Name einer Organisation oder eines Unternehmens. +- **Subdomains:** z.B. www.example.com, mail.example.com. Befinden sich unter der Second-Level-Domain und dienen zur Strukturierung von Inhalten. + +``` +Root-Domain (.) +├── Top-Level-Domain (TLD) +│ ├── .com +│ ├── .org +│ └── .net +└── Second-Level-Domain + ├── example.com + └── test.org + └── sub.test.org +``` + +----- + +### FQDN – Fully Qualified Domain Name + +- Besteht aus **Hostname** und **Domain-Name**. +- Domain-Name besteht aus Subdomain(s) und Toplevel-Domain. +- Trennung durch Punkte, der absolute Pfad endet mit einem **Punkt**. +- Format: `Hostname.Subdomain.Toplevel-Domain.` → Beispiel: `mail.example.com.` +- **Maximale Länge:** 255 Zeichen. +- Jede **Subdomain** ist 1 bis 63 Zeichen lang. +- **Protokoll:** UDP-Port 53 für normale Anfragen, TCP-Port 53 für Zonentransfer. + +----- + +### Root-DNS-Server + +- Es gibt **13 Gruppen** von Root-DNS-Servern weltweit verteilt, bezeichnet mit Buchstaben **A bis M** (z.B. a.root-servers.net, b.root-servers.net usw.). +- Diese Root-Server sind **nicht speziell** für .com zuständig, sondern sind die erste Anlaufstelle für alle TLD-Anfragen. +- Aktuell bestehen die 13 Gruppen aus **1.907 Instanzen**, verwaltet von **12 Organisationen**. +- Die Verwaltung wird von der **ICANN** (Internet Corporation for Assigned Names and Numbers) koordiniert – einer gemeinnützigen Organisation, zuständig für die Koordination von IP-Adressen und Domainnamen. +- Website: root-servers.org +- **RIPE** (Réseaux IP Européens): 1989 gegründeter gemeinnütziger Verein als Forum zur technischen Koordination des Internets. **RIPE NCC** (RIPE Network Coordination Centre) hat seinen Sitz in Amsterdam. + +----- + +### DNS-Record-Typen + +#### A-Record (Address Record) + +- Verknüpft einen Domainnamen mit einer **IPv4-Adresse**. +- Eintrag: `example.com. IN A 192.0.2.1` +- Wenn jemand example.com eingibt, wird er zur IP-Adresse 192.0.2.1 geleitet. + +#### AAAA-Record (IPv6 Address Record) + +- Verknüpft einen Domainnamen mit einer **IPv6-Adresse**. +- Eintrag: `example.com. IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334` + +#### CNAME-Record (Canonical Name Record) + +- Erstellt einen **Alias** für einen anderen Domainnamen. +- Eintrag: `www.example.com. IN CNAME example.com.` +- Zugriff auf www.example.com wird auf example.com umgeleitet. Alle Anfragen werden an die IP-Adresse von example.com weitergeleitet. + +#### MX-Record (Mail Exchange Record) + +- Gibt den **Mailserver** für die Domain an. +- Eintrag: `example.com. IN MX 10 mail.example.com.` +- E-Mails an example.com werden an mail.example.com weitergeleitet. +- Die Zahl (10) gibt die **Priorität** an: niedrigere Zahlen = höhere Priorität. + +#### NS-Record (Name Server Record) + +- Zeigt, welche DNS-Server **autoritativ** für die Domain sind. +- Eintrag: `example.com. IN NS ns1.exampledns.com.` + +#### PTR-Record (Pointer Record) + +- Auflösung einer **IP-Adresse zu einem Domainnamen** (Reverse DNS). +- Eintrag: `1.2.0.192.in-addr.arpa. IN PTR example.com.` +- IP-Adresse 192.0.2.1 wird auf example.com aufgelöst. + +#### SOA-Record (Start of Authority Record) + +- Enthält **administrative Informationen** über die Domain, einschließlich des primären DNS-Servers und der Kontaktinformationen. +- Eintrag: `example.com. IN SOA ns1.exampledns.com. hostmaster.example.com. (2023010101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL)` + +Felder des SOA-Records: + +- **Name:** Domainname +- **TTL bei Antwort:** Wie lange Informationen gespeichert werden +- **Zonen-Klasse (IN):** Steht für Internet +- **Primärer Server:** Domain Name des primären DNS-Servers (Master) +- **Verantwortlicher:** E-Mail-Adresse des Administrators (mit `.` statt `@`) +- **Seriennummer:** Nummer der Zonendatei, anhand derer Secondary-Server erkennen, ob eine Aktualisierung nötig ist +- **Refresh-Zeit:** Zeit in Sekunden, die ein Secondary Server wartet, bevor er erneut die Seriennummer abfragt (typisch 1–12h) +- **Retry-Zeit:** Erneuter Versuch, wenn Refresh nicht erfolgreich war +- **Expire-Zeit:** Gültigkeitsdauer in Sekunden. Nach Ablauf gibt der Secondary keine Antworten mehr +- **TTL bei keiner Antwort (Minimum):** Dauer der Speicherung von „Domain existiert nicht”-Antworten. Verhindert Überlastungen + +Beispiel SOA-Record für google.com (abfragbar mit `nslookup –type=SOA google.com`): + +``` +google.com. 21599 IN SOA ns1.google.com. dns-admin.google.com. + 2023032701 ; serial + 7200 ; refresh (2 hours) + 1800 ; retry (30 minutes) + 604800 ; expire (1 week) + 60 ; minimum (1 minute) +``` + +----- + +### DNS-Server und Resolver + +#### Aufgaben eines DNS-Servers + +- Hostet die DNS-**Zonendateien**. +- Ist **autoritativ** für bestimmte Domains. +- Liefert Informationen über Domainnamen und deren zugehörige IP-Adressen. + +#### Aufgaben eines DNS-Resolvers + +- Ist **nicht autoritativ**, bearbeitet Anfragen von Clients. +- Liefert IP-Adressen an den Client. +- Fungiert als **Vermittler** zwischen dem Client und den DNS-Servern. + +#### DNS-Resolver Installation + +- Kann ein öffentlicher DNS-Resolver eines ISPs sein. +- Kann ein separater, lokaler Server in einem Unternehmensnetzwerk sein. +- Cloud Provider bieten DNS-Resolver als Teil ihres Services an. + +----- + +### DNS-Namensauflösung – Zwei Methoden + +#### 1. Rekursive Anfrage (Verantwortung beim DNS-Resolver) + +Der Resolver übernimmt die **komplette Auflösung** im Auftrag des Clients: + +1. Benutzer fragt im Browser nach www.example.com → Client fragt den lokalen DNS-Resolver. +2. Resolver prüft seinen **Cache**. Falls vorhanden: IP-Adresse direkt zurückgeben. +3. Falls nicht im Cache: Resolver fragt einen **Root-DNS-Server** → dieser gibt den TLD-Server für .com zurück. +4. Resolver fragt den **TLD-Server** → dieser gibt den autoritativen DNS-Server für example.com zurück. +5. Resolver fragt den **autoritativen DNS-Server** → dieser gibt die IP-Adresse zurück. +6. Resolver gibt die IP-Adresse an den Client und **speichert sie im Cache**. + +#### 2. Iterative Anfrage (Anfrage an andere Server) + +Der Resolver fragt nur **einmal** den bekannten DNS-Server. Hat der Server die Antwort nicht, gibt er entweder die IP-Adresse eines anderen Servers zurück oder einen Fehler. + +Ablauf: + +1. Client-Anfrage geht ein, Resolver prüft den Cache. +2. Sendet Abfrage an den **Root-DNS-Server**. +3. Root-Server liefert die Adresse des **TLD-Servers** (nicht die finale Antwort). +4. Resolver muss dann **separat** den TLD-Server anfragen. +5. Falls der TLD-Server die Antwort nicht hat, verweist er auf den autoritativen Server → Resolver stellt **erneute Anfrage**. +6. IP-Adresse wird an den Client geliefert, nachdem alle Anfragen durchgeführt sind. + +**Vergleich:** + +- **Rekursiv** wird verwendet, wenn eine vollständige Auflösung gewünscht ist → Standardkonfiguration der meisten DNS-Resolver der ISPs. +- **Iterativ** wird in bestimmten Architekturen verwendet, mit eventuellen Vorteilen bei Ressourcennutzung, Kontrolle, Sicherheit und Performance. + +----- + +### DNS – Root Zone Management + +Die **IANA** (Internet Assigned Numbers Authority) ist verantwortlich für das Management der DNS Root Zone. Sie weist Operators zu Top-Level Domains zu und verwaltet die administrativen Details → **Root Zone Database**. + +IANA-Whois-Service zeigt Informationen zu TLDs: + +- **.com** (USA): Registriert 1985, Organisation: VeriSign Global Registry Services, Reston VA. +- **.cn** (China): Registriert 1990, Organisation: China Internet Network Information Center (CNNIC), Beijing. +- **.de** (Deutschland): Registriert 1986, Organisation: DENIC eG, Frankfurt am Main. + +----- + +### DNS-Zone + +- Eine Zone ist der **Teil des Domain-Baumes**, für den ein Server zuständig ist. +- Ein Server kann **primäre und sekundäre** Zonen verwalten. +- Daten werden in der **primären Zone** gepflegt. +- Übertragung an Secondary DNS-Server erfolgt über **Zonentransfer** (Backup-Server). + +**Zwei Mechanismen für Zonentransfer:** + +1. **Benachrichtigung durch Master (Push):** Der Master (Primary) unterrichtet die Slaves (Secondaries) über Änderungen. Der Slave fordert dann die geänderten Daten oder die komplette Zone an. +2. **Daten werden vom Slave angefordert (Pull):** Der Secondary DNS-Server fordert regelmäßig den **SOA-Record** an und vergleicht die **Seriennummer**. Falls die Seriennummer des Secondary kleiner ist als die des Servers → Zonentransfer wird eingeleitet. + +----- + +### DNS – Reverse Lookup + +Reverse Lookup ist die Umsetzung einer **IP-Adresse in einen Namen** (umgekehrte Richtung zur normalen Namensauflösung). + +- Zone: `in-addr.arpa.` für IPv4, `ip6.arpa.` für IPv6. +- IP-Oktette werden **von rechts nach links** aufgelöst. + - IP: 134.30.15.41 → Reverse: `41.15.30.134.in-addr.arpa.` +- Jedes Oktett der IP-Adresse bildet eine **Ebene** in der DNS-Hierarchie. +- Adressen können in höheren Ebenen eingetragen sein. +- Feinere Unterteilungen als **/24** sind nicht möglich. + +----- + +### Dynamisches DNS (DDNS ≠ DynDNS) + +#### Dynamische Client-Konfiguration + +- Name wird vom DHCP-Server zugeordnet. +- Client behält seinen Namen und nimmt nur die IP vom DHCP-Server. + +#### DynDNS + +- Konstante Aktualisierung der IP-Adresse für ein Domainame +- Aktualisierung über **Web-Interface** oder **Client-Software**. +- Die letzte Zuordnung bleibt bestehen. +- Verwendet **sehr kurze TTL**, damit Änderungen schnell wirksam werden. + +#### DDNS + +- Aktualisierung **direkt beim Name-Server** (standardisiertes DNS-Update-Protokoll). +- Aktualisierungen werden an andere Server der Zone **weitergereicht**. +- Erfordert **Authentifizierung**. + +----- + +### DNS – Service Record (SRV) + +SRV-Records ermöglichen es, **Dienste dynamisch zu lokalisieren**. Sie sind ein spezieller Typ von DNS-Eintrag, der Informationen über Dienste bereitstellt. Clients können den Standort eines bestimmten Dienstes (z.B. VoIP, Instant Messaging) finden, ohne im Voraus zu wissen, auf welchem Server der Dienst läuft. + +#### Struktur eines SRV-Records + +|Feld |Beschreibung | +|------------|---------------------------------------------------------------| +|**Service** |Name des Dienstes (z.B. `_sip` für SIP) | +|**Protocol**|Verwendetes Protokoll (z.B. `_tcp`, `_udp`) | +|**Name** |Domainname, für den der SRV-Record gilt | +|**Priority**|Priorität des Dienstes (niedrigere Werte = höhere Priorität) | +|**Weight** |Gewicht für Lastenausgleich zwischen Servern gleicher Priorität| +|**Port** |Port, über den der Dienst erreichbar ist | +|**Target** |Zielhost, der den Dienst bereitstellt | + +#### Beispiel: SRV-Record für VoIP über UDP + +``` +_sip._udp.example.com. 3600 IN SRV 10 60 5060 sipserver.example.com. +``` + +Erklärung der Felder: + +- `_sip._udp`: SIP-Dienst über UDP-Protokoll. Der Unterstrich `_` kennzeichnet einen speziellen Dienst. +- `example.com.`: Domain, die den VoIP-Dienst bereitstellt. +- `3600`: TTL in Sekunden (1 Stunde). +- `IN`: Klasse Internet. +- `SRV`: Record-Typ. +- `10`: Priorität (höhere Priorität als z.B. ein Eintrag mit 20). +- `60`: Gewicht für Lastverteilung (höherer Wert = höhere Wahrscheinlichkeit, ausgewählt zu werden). +- `5060`: Port für SIP über UDP. +- `sipserver.example.com.`: Hostname des SIP-Servers. + +SRV-Records sind besonders nützlich für VoIP-Dienste, da sie Clients ermöglichen, dynamisch den richtigen Server zu finden. + +----- + +### Sicherheitsaspekte von DNS + +#### 1. DNS Spoofing (Cache Poisoning) + +- **Angriff:** Angreifer sendet **gefälschte DNS-Antworten** an einen DNS-Resolver, um dessen Cache zu manipulieren. +- **Auswirkung:** Benutzer werden auf gefälschte oder schadhafte Websites umgeleitet. +- **Schutzmaßnahmen:** + - **DNSSEC** (Domain Name System Security Extensions): Fügt **digitale Signaturen** zu DNS-Daten hinzu, um deren Authentizität zu überprüfen. Stellt sicher, dass die Daten nicht manipuliert wurden. + +#### 2. DDoS-Angriffe (Distributed Denial of Service) + +- **Angriff:** DNS-Server werden mit einer großen Anzahl von Anfragen **überflutet**. Richtige Anfragen erhalten keinen Zugriff auf den Dienst. +- **Schutzmaßnahmen:** + - **Lastverteilung** auf mehrere Server (Minimierung der Auswirkung). + - **Rate-Limiting:** Begrenzt die erlaubte Anzahl der Anfragen einer IP-Adresse in einem bestimmten Zeitraum. + - Spezialisierte **DDoS-Schutzlösungen** (z.B. Cloudflare, Akamai, AWS Shield), die Traffic in Echtzeit analysieren und Angriffe abwehren. + +#### 3. DNS-Tunneling + +- **Angriff:** Angreifer installiert Malware, die **Daten über DNS-Anfragen und -Antworten** sendet. Daten werden in kleinen DNS-Paketen übertragen (Datenexfiltration oder Command-and-Control-Kommunikation). +- **Schutzmaßnahmen:** + - Überwachung des DNS-Verkehrs auf **ungewöhnliche Muster**. + - Mittels **Firewall-Regeln** DNS-Anfragen auf autorisierte Server begrenzen. + +#### 4. Man-in-the-Middle-Angriffe + +- **Angriff:** Abfangen der Kommunikation zwischen Client und DNS-Server. **Manipulation** der DNS-Anfragen oder Weiterleiten auf schädliche Webseiten. +- **Schutzmaßnahmen:** + - Verwendung von **DNSSEC** stellt sicher, dass DNS-Antworten authentisch sind. + - **Verschlüsselung** der DNS-Kommunikation durch DNS-over-HTTPS (DoH) oder DNS-over-TLS (DoT). + +#### 5. Phishing über DNS + +- **Angriff:** Nutzung gefälschter DNS-Einträge (z.B. A-Record oder SRV-Record), um Benutzer auf **bösartige Websites** umzuleiten (z.B. gefälschte Bank-Website). Benutzer werden dazu gebracht, Anmeldedaten einzugeben. +- **Schutzmaßnahmen:** + - **Bewusstsein und Schulung:** Benutzer sollten über die Risiken von Phishing informiert und geschult werden, um verdächtige Links zu erkennen. + - **DNS-Filtering:** Technologien, die den Zugriff auf bekannte bösartige Domains blockieren. \ No newline at end of file diff --git a/Netzwerke/zusammenfassungen/nw6 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw6 - zusammenfassung.md new file mode 100644 index 0000000..3bd11d0 --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw6 - zusammenfassung.md @@ -0,0 +1,658 @@ +# IT2221 – Netzwerktechnik: Vorlesung 6 + +## Zusammenfassung: Troubleshooting, BGP, MPLS & Ausfallsicherheit + +--- +## 1. Troubleshooting +### 1.1 Troubleshooting-Methodik (7 Schritte) + +|Schritt|Beschreibung|Beispiel| +|---|---|---| +|1|**Problem definieren**|„Was funktioniert nicht?" – PC bekommt keine IP| +|2|**Informationen sammeln**|Show-Befehle ausführen, Logs prüfen| +|3|**Daten analysieren**|Routingtabellen, Nachbarzustände auswerten| +|4|**Hypothese formulieren**|Welche OSI-Schicht ist betroffen?| +|5|**Hypothese testen**|Paketmitschnitte (PCAPs), gezielte Pings| +|6|**Korrektur planen/implementieren**|Konfiguration ändern| +|7|**Überprüfen, testen, dokumentieren**|Funktioniert es jetzt? Änderung festhalten| + +### 1.2 Grundlegende Werkzeuge + +**Statusinformationen auf Routern/Switches:** + +- `show ip route` – Routing-Tabelle anzeigen +- `show ip interface` / `show interface` – Interface-Status und IP-Konfiguration +- `show ip ospf neighbor` / `show ip ospf database` – OSPF-Nachbarschaften und Link-State-Datenbank +- `show dhcp server leases` – Vergebene DHCP-Adressen + +**Netzwerk-Diagnose-Tools:** + +- **Ping** – Erreichbarkeit testen (ICMP Echo Request/Reply) +- **Traceroute** – Pfad zum Ziel Hop für Hop nachverfolgen +- **Packet Capture (PCAP)** – Paketmitschnitte zur detaillierten Analyse (z. B. mit Wireshark) + +### 1.3 Troubleshooting-Szenarien aus dem Labor + +**Szenario 1: PC München bekommt keine IP-Adresse** + +- **Fehler A – Helper-Adresse auf falschem Interface:** Der Router München hat die `ip helper-address` auf dem falschen Interface konfiguriert. DHCP-Discover-Pakete kommen zwar vom Switch an, werden aber nicht Richtung Nürnberg (wo der DHCP-Server erreichbar ist) weitergeleitet. +- **Fehler B – Helper-Adresse verweist auf falsche IP:** Die `ip helper-address` zeigt auf eine falsche Ziel-IP. Das Relayed-Discover-Paket erreicht den DHCP-Server nicht, weil die Ziel-IP nicht stimmt → kein DHCP-Offer kommt zurück. + +**Szenario 2: PC München kann PC Düsseldorf nicht erreichen** + +- **Fehler A – OSPF-Area Mismatch:** München und Nürnberg haben unterschiedliche OSPF-Area-IDs auf ihrem gemeinsamen Link konfiguriert → keine OSPF-Nachbarschaft → keine Routen werden ausgetauscht. Erkennbar in den OSPF-Hello-Paketen, wo die Area-ID nicht übereinstimmt. +- **Fehler B – Fehlende OSPF-Aktivierung auf einem Interface:** Auf dem Interface Richtung Magdeburg wurde OSPF nicht aktiviert (`network`-Statement fehlt) → keine OSPF-Hello-Pakete auf diesem Link → Magdeburg/Düsseldorf sind nicht erreichbar. + +**Szenario 3: Magdeburg und Düsseldorf bauen keine OSPF-Nachbarschaft auf** + +- **Fehler A – Hello/Dead Timer Mismatch:** Beide Router senden OSPF-Hellos, aber mit unterschiedlichen Timer-Werten (z. B. Hello 10s vs. 30s). OSPF verlangt identische Hello- und Dead-Timer auf beiden Seiten eines Links → keine Nachbarschaft. +- **Fehler B – Falsche Subnetzmaske auf dem Link:** Die Router haben unterschiedliche Subnetzmasken auf dem gemeinsamen Link konfiguriert. OSPF prüft im Hello-Paket, ob die Subnetzmaske übereinstimmt → Mismatch → keine Nachbarschaft. + +### 1.4 Troubleshooting-Ansätze (aus Referenzdokument) + +**Bottom-Up (L1 → L7):** Für Totalausfälle oder neue Netze. Von der physischen Schicht nach oben arbeiten – erst Kabel, dann IP, dann Routing-Protokolle. + +**Top-Down (L7 → L1):** Wenn bestimmte Dienste ausfallen, aber andere funktionieren. Z. B. Webseite geht nicht, aber Teams läuft → L1–L3 sind okay, Problem liegt höher (DNS? Firewall? Port 443 blockiert?). + +**Divide and Conquer:** Erfahrener Ansatz. Man springt direkt auf Layer 3 (Ping/Traceroute). Ping geht? → Fehler liegt auf L4–L7. Ping geht nicht? → Fehler liegt auf L1–L2. + +### 1.5 Wichtige Troubleshooting-Befehle (Zusammenfassung) + +**Endgeräte (Windows):** + +- `ipconfig /all` – IP, Subnetzmaske, Gateway, DNS +- `tracert ` – Pfadverfolgung +- `arp -a` – ARP-Cache +- `route print` – Lokale Routing-Tabelle +- `nslookup ` – DNS-Test + +**Endgeräte (Linux):** + +- `ip a` – Interface-Status und IPs +- `traceroute ` oder `mtr ` – Pfadverfolgung +- `ip neigh` – ARP-Tabelle +- `ip route` – Routing-Tabelle +- `dig ` – DNS-Abfrage + +**Cisco Router/Switch – Interfaces (L1/L2):** + +- `show ip interface brief` – Übersicht aller Interfaces mit Status (Up/Down) +- `show interfaces ` – Detailinfos inkl. Fehler (CRC, Drops, Duplex) +- `show lldp neighbors` / `show cdp neighbors` – Direkt verbundene Nachbarn +- `show mac address-table` – MAC-Adressen an Switchports +- `show spanning-tree` – STP-Status (blockierte Ports?) + +**Cisco Router – Routing (L3):** + +- `show ip route` – Komplette Routing-Tabelle (O = OSPF, B = BGP, C = Connected, S* = Default) +- `show ip route ` – Welches Interface wird für ein bestimmtes Ziel benutzt? +- `ping source ` – Ping mit definierter Quell-IP (simuliert Traffic aus einem bestimmten Netz) +- `show ip arp` – ARP-Tabelle des Routers +- `show ip dhcp binding` – Vergebene DHCP-Leases +- `show ip nat translations` – Aktive NAT-Übersetzungen + +**OSPF-spezifisch:** + +- `show ip ospf neighbor` – Nachbarn und Status (muss FULL oder 2WAY sein; EXSTART/INIT/DOWN = Fehler) +- `show ip ospf interface brief` – Auf welchen Interfaces läuft OSPF, in welcher Area? +- `show ip route ospf` – Nur OSPF-gelernte Routen +- `show ip ospf database` – LSA-Datenbank +- `clear ip ospf process` – OSPF-Prozess neu starten (Achtung: kurze Unterbrechung) + +**BGP-spezifisch:** + +- `show ip bgp summary` – BGP-Nachbarn und Status (Zahl = Up; Idle/Active = Fehler) +- `show ip bgp` – BGP-Tabelle (`*>` = Valid and Best) +- `show ip bgp neighbors advertised-routes` – Was sende ich dem Nachbarn? +- `show ip bgp neighbors received-routes` – Was empfange ich vom Nachbarn? +- `clear ip bgp * soft` – Route Refresh ohne Session-Abbruch + +--- + +## 2. Border Gateway Protocol (BGP) + +### 2.1 Internet in Zahlen (Stand 20.03.2026, Vergleichswerte 2024) + +|Metrik|2026|2024| +|---|---|---| +|Anzahl Prefixes (Netze)|1.064.462|947.805| +|Routing-Tabellen-Einträge|600.307|530.557| +|Autonome Systeme|78.423|75.746| +|Größtes AS (Prefixes)|16.509 (Amazon-02, US)|–| +|Größter Adressraum|227.731.200 /32 – AS749 DNIC (US DoD)|–| + +Ein **Prefix** ist ein IP-Adressbereich, den ein AS über BGP ankündigt. Tagesaktuelle Zahlen: https://www.cidr-report.org + +### 2.2 Grundlagen + +BGP ist **das** Routing-Protokoll des Internets. Es verbindet Autonome Systeme (AS) miteinander. + +**Kernmerkmale:** + +- Standardisiert in **IETF RFC 4271** (Januar 2006) +- **Path-Vector-Protokoll** – Router kennen den vollständigen AS-Pfad zu jedem Ziel, nicht nur den nächsten Hop +- Kommuniziert über **TCP Port 179** (Anwendungsschicht, nutzt Transportschicht) +- Überträgt **Netzmasken** (Classless – CIDR) +- Nachbarschaften müssen **manuell konfiguriert** werden (kein Auto-Discovery wie bei OSPF) +- **Kein Load Balancing** – BGP wählt immer genau einen besten Pfad +- Routen müssen **stabil** sein (Flapping wird bestraft) +- **Authentifizierung** der Nachbarn ist möglich (MD5) +- Ein Router gehört immer zu **genau einem AS** + +### 2.3 Path-Vector-Protokoll + +Im Gegensatz zu Distance-Vector (z. B. RIP) oder Link-State (z. B. OSPF) speichert BGP den **kompletten Pfad** (Folge von AS-Nummern) zu jedem Ziel. + +**Vorteile:** + +- **Schleifenerkennung:** Wenn ein Router seine eigene AS-Nummer im AS_PATH eines empfangenen Updates sieht, verwirft er die Route sofort. +- **Routingtabelle klein halten:** Pro Interface wird nur der kürzeste Pfad weitergegeben. + +### 2.4 BGP-Nachrichtentypen (RFC 4271) + +|Typ|Name|Funktion| +|---|---|---| +|1|**OPEN**|Erste Nachricht nach TCP-Verbindungsaufbau. Enthält AS-Nummer, Hold-Timer, Router-ID. Antwort ist ein KEEPALIVE.| +|2|**UPDATE**|Enthält die eigentlichen Routing-Informationen. Kann neue Routen ankündigen und veraltete zurückziehen. Ermöglicht Sicht auf die gesamte AS-Topologie und Erkennung von Routing-Schleifen.| +|3|**NOTIFICATION**|Meldet Fehlersituationen (z. B. Timer Expiry, ungültige Nachrichten). Führt zum **Abbruch** der BGP-Verbindung.| +|4|**KEEPALIVE**|Periodische Nachrichten zum Erhalt der Verbindung. Wird regelmäßig gesendet, damit der Nachbar weiß, dass die Session noch aktiv ist.| + +### 2.5 BGP-Wegewahl: Pfadauswahl über Attribute + +BGP wählt den besten Pfad in einem **9-stufigen Verfahren**. Die drei wichtigsten Attribute: + +**LOCAL_PREF (Local Preference):** + +- Bestimmt den bevorzugten Ausgangsweg aus dem eigenen AS +- **Höchster Wert gewinnt** +- Wird nur innerhalb eines AS (iBGP) ausgetauscht +- Beispiel: Zwei Uplinks zu verschiedenen Providern → LOCAL_PREF 200 auf dem bevorzugten, 100 auf dem Backup + +**AS_PATH:** + +- Liste aller AS-Nummern, die ein Update durchlaufen hat +- **Kürzester Pfad (wenigste AS-Hops) gewinnt** +- Manipulation möglich durch **AS-Path-Prepending**: Eigene AS-Nummer mehrfach anhängen, um einen Pfad länger (und damit unattraktiver) erscheinen zu lassen +- Dient gleichzeitig der Schleifenvermeidung + +**Multi_Exit_Disc (MED – Multi Exit Discriminator):** + +- Wird benutzt, wenn es **mehrere Verbindungen zum selben Nachbar-AS** gibt +- Teilt dem Nachbar-AS mit, über welchen Eingang Traffic bevorzugt empfangen werden soll +- **Niedrigster Wert gewinnt** + +### 2.6 BGP-Wegewahl: Vollständige Reihenfolge + +|Prio|Kriterium|Auswahl| +|---|---|---| +|1|**LOCAL_PREF**|Höchster Wert| +|2|Lokal erzeugte Routen|Eigene Routen bevorzugt| +|3|**AS_PATH**|Kürzester Pfad| +|4|**ORIGIN**|IGP (i) vor EGP (e) vor Incomplete (?)| +|5|**MED**|Niedrigster Wert| +|6|**eBGP vor iBGP**|Extern gelernte Routen bevorzugt| +|7|Kürzester IGP-Weg zum Nachbarn|Nächstliegender BGP-Nachbar| +|8|Kleinste Router-ID|Tiebreaker| +|9|Kleinste Nachbar-IP|Letzter Tiebreaker| + +**Konvergenzzeit:** BGP benötigt **mehrere Minuten** zur Konvergenz (deutlich langsamer als OSPF). BGP trägt immer nur **eine Route pro Netz** in die allgemeine Routing-Tabelle ein. + +### 2.7 Verbindung zwischen Providern: Transit und Peering + +**Transit:** + +- Übermittlung von Daten zwischen einem AS und dem Internet **gegen Bezahlung** +- Der Transit-Provider leitet Traffic an alle Ziele im Internet weiter +- Typisch: Kleiner Provider kauft Transit bei größerem Provider + +**Peering:** + +- Vereinbarung zum **gegenseitigen Datenaustausch** zwischen zwei AS und deren angeschlossenen Netzen +- In der Regel **ohne Bezahlung** (Settlement-free Peering) +- **Privates Peering:** Direkte Verbindung zwischen zwei AS +- **Öffentliches Peering:** Über einen Internet Exchange Point (IXP, z. B. DE-CIX in Frankfurt) + +### 2.8 Provider-Hierarchie (ISP-Tiers) + +|Tier|Beispiele|Reichweite|Verbindungsart| +|---|---|---|---| +|**Tier 1**|Deutsche Telekom, AT&T, Orange, NTT|International/landesweit|**Nur Peering** (kaufen keinen Transit)| +|**Tier 2**|Vodafone, Swisscom, 1&1, DFN|Landesweit|**Peering und Transit**| +|**Tier 3**|wilhelm.tel, M-Net, EWE TEL|Regional/lokal|**Hauptsächlich Transit**, selten Peering| + +### 2.9 BGP-Anbindung an Provider + +**Single Homed:** + +- Eine Verbindung zu einem Provider +- Optionen: Statische Routen oder BGP (bei häufigen Änderungen im eigenen Netz) +- **Private AS-Nummer** ausreichend (64512–65534) + +**Dual Homed:** + +- **Mehrere Verbindungen** zu **einem** Provider (Redundanz) +- BGP oder statische Routen +- **Private AS-Nummer** ausreichend + +**(Dual) Multi Homed:** + +- Verbindungen zu **mehreren Providern** +- **BGP-Routing erforderlich** (um optimale Pfadwahl zwischen den Providern zu ermöglichen) +- **Öffentliche AS-Nummer** erforderlich (wird bei einer RIR wie RIPE beantragt) + +### 2.10 iBGP vs. eBGP + +|Eigenschaft|iBGP|eBGP| +|---|---|---| +|Definition|Beide Nachbarn im **gleichen** AS|Beide Nachbarn in **unterschiedlichen** AS| +|Verbindung|Nicht direkt verbunden nötig, Erreichbarkeit über **IGP** (OSPF/IS-IS)|Nachbarn sind **direkt verbunden**| +|Einsatz|Innerhalb eines ISP-Netzes|Zwischen verschiedenen ISPs| + +**Problem bei iBGP:** Alle BGP-Router innerhalb eines AS müssen eine **Vollvermaschung** (Full Mesh) aufbauen. Bei n Routern sind das **n × (n-1) / 2** Sessions. Das skaliert schlecht. + +### 2.11 iBGP Route-Reflector + +**Problem:** Vollvermaschung bei vielen BGP-Routern (z. B. 100 Router → 4.950 Sessions). + +**Lösung:** Ein Router wird zum **Route-Reflector (RR)** bestimmt. Alle anderen Router (Route-Reflector Clients) bauen nur eine Nachbarschaft zum RR auf. Der RR leitet empfangene BGP-Updates an alle Clients weiter. + +- Reduziert die Anzahl der Sessions auf **n - 1** +- Beispiel: 4 Router → statt 6 Sessions (Full Mesh) nur 3 Sessions (Stern-Topologie mit RR) + +### 2.12 Administrative Distanz + +Die Administrative Distanz (AD) bestimmt, welches Routing-Protokoll bevorzugt wird, wenn **mehrere Protokolle Routen zum gleichen Ziel** anbieten. Niedrigerer Wert = höheres Vertrauen. + +|Quelle|AD| +|---|---| +|Connected Interface|0| +|Static Route|1| +|EIGRP Summary|5| +|**External BGP**|**20**| +|Internal EIGRP|90| +|IGRP|100| +|**OSPF**|**110**| +|IS-IS|115| +|RIP|120| +|EGP|140| +|External EIGRP|170| +|**Internal BGP**|**200**| +|Unknown|255| + +**Wichtig:** eBGP (AD 20) wird gegenüber OSPF (AD 110) bevorzugt. iBGP (AD 200) verliert aber gegen OSPF – das verhindert Routing-Schleifen innerhalb eines AS. + +Die AD hat **lokale Bedeutung** und wird nicht in Routing-Updates übertragen. Eine Umrechnung zwischen den Metriken verschiedener Protokolle ist nicht möglich. + +### 2.13 Redistribution (Umverteilung) + +Redistribution verbindet verschiedene Routing-Protokolle miteinander, z. B. OSPF-Routen nach BGP weiterleiten und umgekehrt. + +- Befehl: `redistribute ` (z. B. `redistribute connected`, `redistribute ospf`) +- **Beide Richtungen müssen konfiguriert werden!** Nur OSPF → BGP ohne BGP → OSPF bedeutet, dass der Rückweg fehlt. +- Findet typischerweise auf dem **ASBR** (Autonomous System Boundary Router) statt + +--- + +## 3. MPLS (Multiprotocol Label Switching) + +### 3.1 Überblick und Einsatz + +MPLS wird primär in **Service-Provider-Netzen** (Carrier-Netze) eingesetzt. Endkunden (Unternehmen, Privathaushalte) sehen in der Regel keinen MPLS-Verkehr. + +**Hauptfunktion:** MPLS bietet Mechanismen für Ethernet- und IP-basierte **Virtual Private Networks (VPNs)** auf Layer 2 und Layer 3. Damit können Provider über eine gemeinsame Infrastruktur isolierte Kundennetze bereitstellen. + +### 3.2 Grundkonzept: Labels statt IP-Lookup + +Bei klassischem IP-Routing muss **jeder Router** für jedes Paket einen Longest-Prefix-Match in der Routing-Tabelle durchführen. MPLS ersetzt diesen aufwändigen Vorgang durch ein **Label-basiertes Switching:** + +1. Die Routing-Entscheidung wird **einmalig am Eintrittspunkt** (Ingress-Router/LER) getroffen +2. Dort wird dem Paket ein **Label** zugewiesen +3. Alle weiteren Router im MPLS-Netz (LSR) leiten das Paket nur noch anhand des Labels weiter – **kein IP-Lookup mehr nötig** +4. Am Austrittspunkt (Egress-Router/LER) wird das Label wieder entfernt + +### 3.3 MPLS-Terminologie + +|Begriff|Bedeutung| +|---|---| +|**LSR** (Label Switch Router)|Router im MPLS-Kern, der Pakete anhand von Labels weiterleitet| +|**LER** (Label Edge Router)|Router am Rand des MPLS-Netzes (Ingress = Eingang, Egress = Ausgang)| +|**LSP** (Label Switched Path)|Der vordefinierte Pfad, den gelabelte Pakete durch das MPLS-Netz nehmen| +|**FEC** (Forwarding Equivalence Class)|Gruppe von Paketen, die identisch behandelt werden (z. B. alle Pakete zum selben Zielpräfix)| +|**CE** (Customer Edge)|Kundenrouter am Rand des Kundennetzes| +|**PE** (Provider Edge)|Provider-Router am Rand des Provider-Netzes (= LER)| +|**P** (Provider)|Router im Kern des Provider-Netzes (= LSR)| + +### 3.4 MPLS im OSI-/TCP-IP-Modell + +Das MPLS-Label (der sog. **MPLS Shim Header**) wird **zwischen Layer 2 (Data Link) und Layer 3 (Network)** eingefügt. MPLS wird deshalb oft als „Layer 2.5"-Protokoll bezeichnet. + +Die Signalisierung der Labels erfolgt über verschiedene Protokolle auf unterschiedlichen Schichten (LDP auf L7/TCP, RSVP-TE auf L3/IP, BGP auf L7/TCP). + +### 3.5 IP vs. MPLS – Gegenüberstellung + +|Ebene|IP|MPLS| +|---|---|---| +|**Data Plane**|Routing-Tabelle, Longest-Prefix-Match für jedes Paket|Label Push, Swap, Pop – kein IP-Lookup im Kern| +|**Control Plane**|Routing-Protokolle (OSPF, BGP)|Erweiterte Routing-Protokolle (OSPF-TE, IS-IS-TE), Label-Verteilungsprotokolle (LDP, RSVP-TE), Discovery-Protokolle (BGP)| + +MPLS ist in diversen IETF-RFCs standardisiert: https://datatracker.ietf.org/wg/mpls/documents/ + +### 3.6 MPLS Label Format (RFC 3032) + +Das MPLS-Label ist **32 Bit** lang und besteht aus 4 Feldern: + +``` +|<-------------- 32 Bits ----------------->| +| Label Value (20 Bit) | TC (3 Bit) | S (1 Bit) | TTL (8 Bit) | +``` + +**Label Value (20 Bit):** Der eigentliche Label-Wert. Ermöglicht 2²⁰ = 1.048.576 verschiedene Labels. + +**TC – Traffic Class (3 Bit):** Ehemals „EXP" (Experimental). Wird für MPLS DiffServ (Quality of Service) genutzt, um die Class of Service (CoS) oder Drop Precedence zu speichern. Wenn DiffServ deaktiviert ist, hat das Feld keine Bedeutung. + +**S – Bottom of Stack (1 Bit):** Zeigt an, ob dies das **letzte (unterste) Label** im Label Stack ist. S = 1 → letztes Label. S = 0 → weitere Labels folgen darunter. + +**TTL – Time To Live (8 Bit):** Verhindert Endlosschleifen, wird wie beim IP-TTL bei jedem Hop dekrementiert. + +### 3.7 Reservierte Label-Werte + +|Wert|Bezeichnung|Funktion| +|---|---|---| +|0|**Explicit Null (IPv4)**|Signalisiert, dass nach dem Label ein IPv4-Header folgt. Muss am Penultimate Hop entfernt werden.| +|1|**Router Alert**|Paket wird an die lokale Software-Instanz des Routers übergeben| +|2|**Explicit Null (IPv6)**|Wie Label 0, aber für IPv6-Header| +|3|**Implicit Null**|Signalisiert dem vorletzten Router, das Label zu entfernen (Penultimate Hop Popping)| +|4–15|Reserviert|Für zukünftige Nutzung (RFC 3032), davon 13 = GAL (RFC 5586), 14 = OAM Alert (RFC 3429)| +|16–2²⁰|**Normal Labels**|Normaler Label-Swap-Betrieb| + +### 3.8 MPLS Label Stack + +Ein MPLS-Paket kann **mehrere Labels übereinander gestapelt** tragen (Label Stack). Das ermöglicht LSP-Hierarchien (z. B. Transport-Label + VPN-Label). + +**Beispiel eines Label Stacks:** + +``` +Top Label: Label = 40, TC = 000, S = 0, TTL = 22 +Intermediate Label: Label = 3343, TC = 000, S = 0, TTL = 60 +Bottom Label: Label = 202, TC = 000, S = 1, TTL = 64 ← S-Bit = 1! + [IP-Paket] +``` + +Regeln: + +- Alle Labels außer dem letzten haben **S = 0** +- Nur das unterste Label hat **S = 1** +- Der LSR prüft das S-Bit, bevor er ein Label entfernt + +### 3.9 Label-Operationen + +|Operation|Wo|Beschreibung| +|---|---|---| +|**Push**|Ingress LER|Label wird auf das Paket aufgesetzt (Paket betritt MPLS-Netz)| +|**Swap**|LSR (Kern)|Eingehendes Label wird durch ausgehendes Label ersetzt| +|**Pop**|Egress LER|Label wird entfernt, darunter liegt das IP-Paket (oder nächstes Label)| + +### 3.10 MPLS Forwarding Matrix (Label Switching) + +Jeder LSR pflegt eine **MPLS Forwarding Matrix** mit den Spalten: FEC, In Label, Out Label, Next Hop, Action. + +**Ingress LER (Push):** Kein Incoming Label, nur Outgoing Label. + +|FEC|In Label|Out Label|Next Hop|Action| +|---|---|---|---|---| +|10.1.1/24|–|20|LSR2|Push| + +**Transit LSR (Swap):** Incoming und Outgoing Label. + +|FEC|In Label|Out Label|Next Hop|Action| +|---|---|---|---|---| +|10.1.1/24|50|40|LSR4|Swap| + +**Egress LER (Pop):** Incoming Label, kein Outgoing Label. + +|FEC|In Label|Out Label|Next Hop|Action| +|---|---|---|---|---| +|10.1.1/24|40|–|CE2|Pop/Route| + +### 3.11 Label-Zuweisung und -Verteilung + +**Bidirektionale Kommunikation:** Für jede Richtung wird ein **separater LSP** aufgebaut. Der Hinweg (Forwarding Path) wird vom Ingress-LER angefragt, der Rückweg (Reverse Path) vom gegenüberliegenden LER. Hin- und Rückweg können **unterschiedliche Pfade** nehmen. + +**Ablauf der Label-Verteilung (Beispiel):** + +1. CE2 kündigt neues Netz 10.1.1/24 an → LSR4 (Egress) erstellt FEC A +2. LSR4 bindet Label 40 an FEC A und verteilt dieses Binding an seine Nachbarn (LSR3, LSR5) +3. Jeder Downstream-LSR lernt das Binding, erstellt sein eigenes lokales Label und verteilt es weiter (LSR5: Label 50, LSR3: Label 30) +4. Prozess setzt sich fort bis zum Ingress-LER (LSR1), der das Netz 10.1.1/24 nun über den kompletten LSP erreichen kann + +### 3.12 Signalisierungsprotokolle + +MPLS benötigt Signalisierungsprotokolle, um Labels zu verteilen und LSPs aufzubauen. Es gibt drei Hauptprotokolle: + +#### 3.12.1 LDP (Label Distribution Protocol) + +- **Einsatz:** Einfache MPLS-Topologien ohne Traffic Engineering oder QoS-Anforderungen. Am weitesten verbreitet für grundlegende Label-Verteilung. +- **OSI-Schicht:** Layer 7 (Anwendungsschicht), nutzt **TCP Port 646** +- **Nachbarschaftserkennung:** Über **Hello-Nachrichten** (UDP, Multicast). Nach Erkennung wird eine TCP-Sitzung aufgebaut. +- **Zuverlässige Übertragung:** Über TCP gesichert +- **Eine Sitzung pro Nachbar**, kein kontinuierlicher Austausch von Statusinformationen + +**Zwei Betriebsmodi:** + +|Modus|Beschreibung| +|---|---| +|**L-LDP (Link-LDP)**|Sitzung zwischen **direkt benachbarten** Routern (gleicher L2/L3-Link)| +|**T-LDP (Targeted-LDP)**|Sitzung zwischen **nicht direkt benachbarten** Routern (mehrere IP-Hops dazwischen). Sitzung wird über IP-Routing aufgebaut, nicht über physische Verbindung.| + +**Label-Verteilung über LDP:** + +1. LSR A sendet **Label Request** an LSR B +2. LSR B sendet **Label Mapping** (z. B. Label 37) zurück an LSR A +3. Prozess wiederholt sich Hop für Hop bis zum Egress + +**Label Mapping enthält:** Label-Wert, FEC (Forwarding Equivalence Class) und Next Hop. + +**LSP-Aufbau:** Topology-Driven – LSPs basieren auf der Netzwerk-Topologie. + +#### 3.12.2 RSVP-TE (Resource Reservation Protocol – Traffic Engineering) + +- **Einsatz:** Netzwerke mit **Traffic Engineering** und **QoS-Anforderungen**. Große Unternehmens- und SP-Netze. Ermöglicht Reservierung von Ressourcen (Bandbreite) für Echtzeitanwendungen. +- **OSI-Schicht:** Layer 3 (Network), wird über **IP übertragen (Protokollnummer 46)** +- **Standardisiert:** RSVP in RFC 2205/2209 (1997), RSVP-TE-Erweiterungen in RFC 3209 +- Signalisierungsnachrichten werden **regelmäßig erneut gesendet**, um Reservierungen aktiv zu halten (Soft State) +- Da RSVP-TE die Traffic-Zuordnung zu einem LSP lokal am Ingress-LSR vornimmt, spricht man bei RSVP-TE-LSPs von **„Tunneln"** + +**Pfadaufbau mit RSVP-TE:** + +1. **PATH-Nachricht:** Vom Ingress-LSR zum Egress-LSR. Fordert Erstellung eines LSP mit bestimmten QoS-Parametern an. Kann eine **explizite Route (ERO)** vorgeben. +2. **RESV-Nachricht:** Vom Egress zurück zum Ingress (Hop für Hop). Bestätigt erfolgreiche Ressourcenreservierung. Enthält das zugewiesene Label. Der LSP ist aktiv, wenn der Ingress-LSR ein gültiges RESV erhält. + +**LSP-Aufbau:** Data-Driven – LSPs werden dynamisch basierend auf aktuellen Datenströmen angepasst. + +#### 3.12.3 MP-BGP (Multiprotocol BGP) + +- **Einsatz:** MPLS-L3-VPNs, Inter-Domain-Routing zwischen autonomen Systemen. Skaliert über große Netze. +- **OSI-Schicht:** Layer 7 (Anwendungsschicht), nutzt **TCP Port 179** +- Erweiterung des BGP-Protokolls für **IPv4, IPv6 und MPLS** +- **Nachbarschaftsbildung:** Über TCP-Handshake – **keine Hello-Pakete** (anders als OSPF/LDP) +- Tauscht **VPN-Labels** und Kundenstandort-Routen über das MPLS-Netz aus + +**Wichtige Attribute und Elemente:** + +|Element|Beschreibung| +|---|---| +|**AFI** (Address Family Identifier, 16 Bit)|1 = IPv4, 2 = IPv6, 25 = MPLS (VPNs)| +|**SAFI** (Subsequent AFI, 8 Bit)|1 = Unicast, 128 = VPNv4, 132 = VPNv6| +|**VPN-Label**|Label in den Update-Nachrichten für MPLS-VPNs| +|**Route Distinguisher (RD)**|Wird als Präfix zu IP-Adressen hinzugefügt, um Eindeutigkeit in verschiedenen VPNs sicherzustellen| + +### 3.13 Vergleich der Signalisierungsprotokolle + +|Eigenschaft|LDP|RSVP-TE|MP-BGP| +|---|---|---|---| +|**Haupteinsatz**|Einfache Label-Verteilung|Traffic Engineering, QoS|MPLS-VPNs, Inter-Domain| +|**Transport**|TCP Port 646|IP Protokoll 46|TCP Port 179| +|**OSI-Schicht**|Layer 7|Layer 3|Layer 7| +|**Nachbarerkennung**|Hello-Nachrichten (UDP)|Über IGP|TCP-Handshake| +|**QoS-Unterstützung**|Nein|Ja (Ressourcenreservierung)|Indirekt (über VPN-Zuordnung)| +|**LSP-Aufbau**|Topology-Driven|Data-Driven|VPN-spezifisch| + +### 3.14 Layer 2/3 Services – MPLS-Signalisierung + +Für Kunden-VPN-Services werden **zwei Signalisierungsprotokolle** eingesetzt: + +- **Targeted-LDP (T-LDP)** – für L2-VPNs (Pseudowires) +- **Multiprotocol-BGP (MP-BGP)** – für L3-VPNs (IP-VPNs) + +Beide sind in der Forwarding Plane identisch (gleiche Label-Operationen) und **unabhängig** von der Signalisierung des darunterliegenden Transport-LSPs (der z. B. über RSVP-TE aufgebaut sein kann). + +Die Signalisierungssession besteht zwischen den **LERs/PEs** (Provider Edge Routern) – die Transit-Router (P-Router/LSRs) im Kern sind nicht beteiligt. + +--- + +## 4. Ausfallsicherheit in Netzen + +### 4.1 Grundprinzipien + +Drei Säulen der Ausfallsicherheit: + +1. **Fehlererkennung** – Ausfall schnell bemerken +2. **Schnelle Konvergenz** – Routing-Protokolle müssen schnell reagieren +3. **Umschalten auf alternative Wege** – Backup-Pfade müssen vorbereitet sein + +Schlüsseltechnologien: **BFD** (Bidirectional Forwarding Detection) und **FRR** (Fast Reroute). + +### 4.2 BFD (Bidirectional Forwarding Detection) + +BFD ist ein **protokollunabhängiges** Netzwerkprotokoll zur **schnellen Erkennung von Verbindungsausfällen**. Es arbeitet deutlich schneller als die eingebauten Mechanismen von OSPF oder BGP. + +**Standardisiert in:** + +- **RFC 5880** – Grundlegende BFD-Mechanismen und Protokolle (August 2010) +- **RFC 5881** – BFD für IPv4 und IPv6 (August 2010) + +**OSI-Einordnung:** + +- **Layer 4 (Transport):** BFD nutzt **UDP Port 3784** für Hello-Pakete +- **Layer 3 (Netzwerk):** BFD interagiert mit IP-Adressen und Routing-Protokollen + +**Funktionsweise:** + +1. **Heartbeat-Mechanismus:** BFD sendet regelmäßig Hello-Pakete mit sehr kurzen Intervallen (typisch **50 ms**) +2. **Timeout-Mechanismus:** Wenn innerhalb des konfigurierten Timeouts keine BFD-Nachricht empfangen wird, gilt die Verbindung als ausgefallen +3. **Schnelle Reaktion:** Ermöglicht sofortige Aktivierung alternativer Pfade + +**Zustandsmaschine:** + +|Zustand|Bedeutung| +|---|---| +|**Down**|Verbindung ist nicht aktiv oder nicht erreichbar| +|**Init**|Verbindung hat gerade begonnen, Nachrichten auszutauschen| +|**Up**|Verbindung ist aktiv und funktionsfähig| + +Nach einem Timeout wechselt der Zustand auf **Down**. + +**Fehlermeldung und Reaktion:** + +- BFD **benachrichtigt die Routing-Protokolle** (OSPF, BGP), damit diese Routen aktualisieren oder entfernen +- Bei vorhandener Redundanz: **Automatische Umschaltung** auf Backup-LSP oder alternativen Pfad +- Benutzer bemerken idealerweise **keine Unterbrechung** + +**BFD in L2- und L3-MPLS:** + +|Kontext|Funktion| +|---|---| +|**L2 MPLS**|Überwacht Verbindung zwischen PE-Routern und CE. Schnelle Erkennung ermöglicht sofortige Nutzung alternativer Pfade.| +|**L3 MPLS**|Überwacht IP-basierte Dienste und Verbindungen zwischen Routern mit OSPF/BGP. Beschleunigt die Konvergenz der Routing-Protokolle.| + +**BFD-Anwendungsfälle:** + +- **IP Routing Protocols:** Schnellerer Trigger für Rerouting als die IGPs selbst liefern können +- **Multi-Hop BFD:** Überwachung von nicht direkt verbundenen Systemen +- **MPLS LSP und Pseudowire:** Health Monitoring, Trigger für Umschaltung auf Backup-LSP (MPLS FRR) oder Backup-Pseudowire + +### 4.3 MPLS Fast Reroute (FRR) + +FRR schützt **Transport-LSPs** gegen Verbindungs- oder Knotenausfälle und ermöglicht eine Umschaltung im **unter 50 ms-Bereich** (vergleichbar mit SDH-Netzen). + +**Voraussetzungen:** + +- Traffic-Engineering-Erweiterungen (TE) für IGPs: **OSPF-TE (RFC 3630)** oder **IS-IS-TE (RFC 5305)** – verteilen zusätzliche Verbindungsinformationen (z. B. verfügbare Bandbreite) +- **RSVP-TE (RFC 3209)** für die LSP-Signalisierung mit Label-Informationen +- **CSPF** (Constrained Shortest Path First) für die Pfadberechnung unter Berücksichtigung von Constraints + +**RSVP-TE-Erweiterungen für FRR:** + +Zwei **neue Objekte:** + +|Objekt|Funktion| +|---|---| +|**FAST_REROUTE**|In der PATH-Nachricht. Steuert den Backup-Pfad: Prioritäten, Sitzungsattribute, Bandbreite. Ermöglicht Anforderung von Link- oder Node-Protection.| +|**DETOUR**|Für One-to-One-Backups. Identifiziert den Detour-LSP mit dem Knotenpaar {PLR, MP}.| + +Zwei **erweiterte Objekte:** + +|Objekt|Funktion| +|---|---| +|**SESSION_ATTRIBUTE**|Gibt gewünschte Bandbreite und Schutzart an| +|**RRO** (Record Route Object)|Informationen über LSPs am Ausfallpunkt und Aufbau neuer End-to-End-LSPs| + +**PLR** = Point of Local Repair (Router, der den Ausfall erkennt und umschaltet) **MP** = Merge Point (Router, an dem der Backup-Pfad wieder auf den ursprünglichen Pfad trifft) + +### 4.4 FRR Protection Types + +#### One-to-One Backup + +Jeder geschützte LSP-Pfad verfügt über einen **eigenen, individuellen Backup-LSP** (Detour). + +- **Link Protection:** Backup-Pfad umgeht den ausgefallenen Link +- **Node Protection:** Backup-Pfad umgeht den ausgefallenen Knoten (Router) komplett + +Vorteil: Granulare Kontrolle pro LSP. Nachteil: Mehr Signalisierungsaufwand. + +#### Facility Backup + +Alle geschützten LSPs, die das **gleiche Netzwerksegment** durchlaufen, teilen sich **denselben Bypass-Tunnel**. + +- **Link Protection:** Ein gemeinsamer Bypass-Tunnel umgeht den ausgefallenen Link für alle betroffenen LSPs +- **Node Protection:** Ein gemeinsamer Bypass-Tunnel umgeht den ausgefallenen Knoten + +Vorteil: Effizienter, weniger Bypass-Tunnel nötig. Nachteil: Weniger granulare Kontrolle. + +### 4.5 FRR Recovery Methods + +|Methode|Ablauf| +|---|---| +|**Local Repair**|1. PLR erkennt Ausfall und schaltet auf Backup-LSP um. 2. Traffic nutzt weiterhin denselben End-to-End-LSP-Pfad (über den lokalen Umweg). Kein Re-Setup des gesamten LSP.| +|**Global Repair**|1. Zuerst Local Repair (sofortige Umschaltung). 2. PLR sendet **PATH ERROR** an den Ingress-LSR. 3. Ingress-LSR berechnet und signalisiert einen **neuen optimalen End-to-End-LSP**. Der lokale Umweg wird dann durch den neuen optimalen Pfad ersetzt.| + +### 4.6 Funktionale Komponenten von FRR (Übersicht) + +``` +MPLS-TE Fast Reroute besteht aus: + +├── Path Signaling: RSVP-TE (RFC 3209) +├── IGP (TE-Erweiterungen): +│ ├── IS-IS TE (RFC 5305) +│ └── OSPF TE (RFC 3630) +├── Path Calculation: CSPF (Constrained SPF) +├── Failure Detection: +│ ├── Loss of Signal (L1) +│ └── BFD (L3/L4) +├── Protection Types: +│ ├── One-to-One Backup +│ └── Facility Backup +└── Revertive Behavior: + ├── Local Revertive (zurück zum lokalen Pfad) + └── Global Revertive (neuer optimaler E2E-Pfad) +``` + +--- + +## Prüfungsrelevante Kernpunkte + +1. **Troubleshooting:** 7-Schritte-Methodik, Bottom-Up/Top-Down/Divide-and-Conquer, wichtigste Show-Befehle je Schicht +2. **BGP:** Path-Vector, TCP Port 179, 4 Nachrichtentypen (OPEN, UPDATE, NOTIFICATION, KEEPALIVE), 9-stufige Wegewahl (LOCAL_PREF → AS_PATH → MED), Transit vs. Peering, Tier 1/2/3, iBGP vs. eBGP, Route-Reflector, Administrative Distanz +3. **MPLS:** Label-Format (32 Bit: Label/TC/S/TTL), Push/Swap/Pop, FEC, LSP, reservierte Labels (0–3), Label Stack mit S-Bit, Forwarding Matrix +4. **MPLS-Signalisierung:** LDP (TCP 646, L7), RSVP-TE (IP Prot. 46, L3, PATH/RESV), MP-BGP (TCP 179, L7, AFI/SAFI/RD), Link-LDP vs. Targeted-LDP +5. **Ausfallsicherheit:** BFD (UDP 3784, Zustände Down/Init/Up, Heartbeat 50ms), FRR (unter 50ms Umschaltung), One-to-One vs. Facility Backup, Link vs. Node Protection, Local vs. Global Repair \ No newline at end of file diff --git a/Netzwerke/zusammenfassungen/nw7 - zusammenfassung.md b/Netzwerke/zusammenfassungen/nw7 - zusammenfassung.md new file mode 100644 index 0000000..a2bb8f6 --- /dev/null +++ b/Netzwerke/zusammenfassungen/nw7 - zusammenfassung.md @@ -0,0 +1,404 @@ +# IT2221 Netzwerktechnik – Vorlesung 7: MPLS VPNs & Segment Routing + +> **Dozentin:** Gabriele Schrenk | **Datum:** 01.04.2026 +> **Klausur:** Mo., 4. Mai 2026, 14:00–16:00 Uhr, Räume 6B.369 und 6B.371 + +--- + +## 0. Fehlerszenarien nächste Woche Labor +- PC bekommt keine IP Adresse +- PC erreicht einen bestimmten anderen PC nicht +- Mögliche Fehler: + - OSPF-Nachbarschaft/Routing + - BGP Redistribution + - Interfaces falsch eingestellt (MTU Size, Adressen....) + - Und verschiedene andere Fehler + +Troubleshooting_Netz + +## 1. Troubleshooting Methodology + +Strukturiertes Vorgehen bei Netzwerkproblemen (z.B. PC bekommt keine IP, PC erreicht anderes Gerät nicht): + +1. **Problem definieren** – Was genau funktioniert nicht? +2. **Informationen sammeln** – `show`-Befehle ausführen +3. **Daten analysieren** – Routingtabellen, Nachbarzustände prüfen +4. **Hypothese formulieren** – Welche OSI-Schicht ist betroffen? +5. **Hypothese testen** – Paketmitschnitte (PCAPs) auswerten +6. **Korrektur implementieren** +7. **Überprüfen & dokumentieren** + +Typische Fehlerquellen im Labor: OSPF-Nachbarschaft, BGP-Redistribution, falsche MTU/Adressen an Interfaces. + +--- + +## 2. VPNs über MPLS – Grundidee + +**Ziel:** Mehrere Unternehmensstandorte über einen gemeinsamen Provider-Backbone verbinden, dabei aber voneinander isoliert halten. + +**Anforderungen (Wunschliste):** +- Nutzung des bestehenden SP-Backbones +- Überlappende Adressräume erlaubt (verschiedene Kunden dürfen gleiche IPs nutzen) +- Datentrennung zwischen VPNs +- Skalierung, QoS, einfache Verwaltung + +--- + +## 3. VPN-Klassifizierung (RFC 4026 – PPVPN) + +``` +PPVPN +├── Layer 2 +│ ├── P2P → VPWS (Virtual Private Wire Service) +│ └── M2M → VPLS (Virtual Private LAN Service) +└── Layer 3 + ├── PE-based + │ ├── BGP/MPLS IP VPNs + │ └── Virtual Router + └── CE-based + └── IPsec +``` + +--- + +## 4. Grundbegriffe: AC, Pseudowire, Tunnel LSP + +### Attachment Circuit (AC) + +Physischer oder logischer Anschluss zwischen Kundengerät (**CE**) und Provider-Edge-Router (**PE**). Kann sein: Ethernet-Port, VLAN, PPP, MPLS LSP, etc. + +``` +[CE-Gerät] ---AC--- [PE-Gerät] --- Service Provider Network +``` + +### Pseudowire (PW) + +Ein virtueller „Draht" durch das Provider-Netz, der L2-Daten von einem AC zu einem anderen transportiert. + +- Nur den beiden **Endpunkt-PEs** bekannt +- Wird über einen **Tunnel (LSP)** transportiert, der allen Routern (LSRs) dazwischen bekannt ist +- Pro Richtung ein unidirektionaler Tunnel → ein PW = 2 LSPs + +### Tunnel LSP – Label Stacking + +Mehrere Pseudowires zwischen zwei PEs werden in einem Tunnel aggregiert: + +- **Äußeres Label** = Tunnel LSP (für P-Router sichtbar, sorgt für Transport) +- **Inneres Label** = Pseudowire LSP (nur PEs kennen es) + +> P-Router schauen **nur auf das äußere Label** und leiten entsprechend weiter – sie kennen die VPN-Details nicht. + +--- + +## 5. Layer-2-Dienste: VPWS und VPLS + +### VPWS – Virtual Private Wire Service + +- **Point-to-Point**: genau ein AC ↔ genau ein PW +- Transparente L2-Verbindung zwischen zwei Standorten +- MPLS definiert Labelverteilung und Kapselung +- Einsatz von **LDP (Targeted Mode)** oder **MP-BGP** zur Signalisierung + +**Forwarding-Beispiel (VPWS):** + +Ein PE empfängt einen VLAN1-Frame vom Kunden. Er schlägt in seiner FEC-Tabelle nach und findet: `VLAN1 → Out-Label 24, Next-Hop 1.1.1.1`. Zusätzlich drückt er ein Transport-Label (z.B. 16) obendrauf. Der Transit-Router (LSR) sieht nur das Transport-Label und leitet weiter. Der Egress-PE entfernt das äußere Label, erkennt anhand des inneren Labels (24) die Ziel-Schnittstelle und sendet den Frame an den Kunden. + +**VPWS Protection – Auslöser für Umschaltung auf Standby-PW:** + +- Manueller Eingriff (Precedence-Wert ändern) +- Statusänderung des PW +- Ausfall des aktiven PW +- Benachrichtigung vom Remote-Peer (via T-LDP Notification Message) + +--- + +### VPLS – Virtual Private LAN Service + +- **Multipoint-to-Multipoint**: mehrere Standorte agieren wie in einem gemeinsamen Ethernet-LAN +- Jeder PE enthält ein **Switch-Modul** mit einem emulierten LAN (MAC-Learning, Flooding) +- Standorte tauschen Ethernet-Frames direkt aus, als wären sie physisch im selben LAN + +**Architektur:** + +``` +[Kunde CE] --AC--> [PE: VPLS Forwarder + Emulated LAN Interface] + <------ VPLS PW ------> + [PE] --AC--> [Kunde CE] +``` + +**Skalierungsproblem:** Bei N Standorten braucht man **N*(N-1)/2 Pseudowires** (Vollvermaschung). Bei vielen Standorten entstehen viele States und viel Broadcast-Traffic. + +**Lösung: Hierarchisches VPLS (H-VPLS)** + +PE-Router werden in zwei Ebenen aufgeteilt: + +| Ebene | Gerät | Aufgabe | +|-------|-------|---------| +| Kern | **Hub-PE** | Vollvermaschung zwischen Hubs | +| Rand | **Spoke-PE / MTU-s** | Aggregiert Kundenports zu einer einzigen Spoke-PW zum Hub | + +- Neue Verbindung nur zwischen Spoke und Hub, kein direktes Mesh zwischen allen Spokes +- **Vorteile:** Weniger PWs, weniger Broadcast-Replikation, bessere Skalierbarkeit + +**Multi-Tenant Unit (MTU-s):** Gerät (Router, Switch oder Gateway), das viele Kundenports aggregiert und eine einzige Spoke-PW zum nächsten PE aufbaut. + +**Dual Homed MTUs:** MTU ist an zwei PEs angebunden → Redundanz bei Ausfall einer Verbindung. + +**VPLS Auto-Discovery (RFC 4761):** PE-Router erkennen automatisch andere PEs derselben VPLS-Domäne via MP-BGP, ohne manuelle Konfiguration jedes einzelnen Pseudowires. + +**VPLS Protection:** Backup-LSPs werden über T-LDP aufgebaut; Überwachung via BFD (Bidirectional Forwarding Detection). + +**VPLS und MTU-Größen:** + +| Pakettyp | L2 MTU | +|----------|--------| +| Normales MPLS-Paket | 1504 | +| Ethernet over VPLS | 1508 | +| VLAN over VPLS | 1526 | + +> VPLS fügt zusätzliche Header ein (MPLS-Label + VPLS-Label), was die MTU erhöht. Alle Geräte im Pfad müssen diese größeren Frames unterstützen. + +--- + +## 6. Layer-3-VPNs: BGP/MPLS IP VPNs (RFC 4364) + +### Motivation + +- Kunden nutzen **private IP-Adressen** (RFC 1918) → können sich überschneiden +- Provider übernimmt das Routing → Kunde muss sich nicht darum kümmern +- MPLS-Backbone ist für den Kunden **transparent** + +### Beteiligte Geräte + +| Gerät | Aufgabe | +|-------|---------| +| **CE** (Customer Edge) | Kundenrouter, kennt nur seine eigene Seite | +| **PE** (Provider Edge) | Kennt VPN-Routen; verwaltet VRFs; stellt MPLS-Pfade auf | +| **P** (Provider Core) | Reine Transitknoten; kennen keine VPNs, nur MPLS-Labels | + +### VRF – VPN Routing and Forwarding Table + +Jeder PE führt **separate Routing-Tabellen pro Kunde** (VRF). Diese werden via **MP-BGP** zwischen den PEs ausgetauscht. + +**Problem:** BGP kann normalerweise nur eine Route pro IP-Präfix installieren – aber verschiedene Kunden können dieselben Adressen haben. + +**Lösung: Route Distinguisher (RD)** + +--- + +### Route Distinguisher (RD) + +Ein **8-Byte-Präfix**, der jeder VPN-Route vorangestellt wird, um sie global eindeutig zu machen: + +``` +[Type 2B] [Administrator 2-4B] [Assigned Number 2-4B] + [IPv4-Adresse 8B] = 12 Bytes +``` + +**Beispiele:** + +``` +RD: 65000:101 (AS-Nummer : zugewiesene Nummer) +RD: 10.0.0.1:1001 (IP-Adresse : zugewiesene Nummer) +RD: 1000000:10 +``` + +**Ergebnis:** Aus `192.168.1.10` wird die **VPNv4-Adresse** `65000:1:192.168.1.10` → global eindeutig, kein Konflikt trotz Adressüberlappung. + +> **Wichtig:** Der RD macht Adressen nur **eindeutig**. Er steuert *nicht*, welche Routen wohin verteilt werden – das macht der Route Target. + +--- + +### Route Target (RT) + +Ein **BGP Extended Community Attribut** (RFC 4360), das steuert, welche Routen in welches VRF importiert/exportiert werden. + +Jede VRF hat: +- **Export Target**: welcher RT wird angefügt, wenn eine Route exportiert wird +- **Import Target**: welche eingehenden Routen werden in diese VRF installiert + +**Ablauf – 3-Schritt-Beispiel:** + +**Schritt 1 – Export:** + +PE an VPN1-Site1 empfängt eine IPv4-Route vom CE. Er konvertiert sie zu VPN-IPv4 und hängt RT1 und RT4 an (laut Export-Policy: `VRF VPN1 Export = RT1, RT4`). Die Route wird an alle PEs verteilt. + +**Schritt 2 – Import rechts:** + +Der rechte PE empfängt die Route mit RT1 und RT4 und vergleicht sie mit seinen VRF-Import-Listen: + +| VRF | Import-Liste | RT1 Match? | RT4 Match? | Ergebnis | +|-----|-------------|------------|------------|----------| +| VPN1 | RT1, RT4 | ✓ | ✓ | Route installiert → weiter zu Sites 4, 5 | +| VPN2 | RT1, RT2 | ✓ | – | Route installiert → weiter zu Site 3 | + +**Schritt 3 – Import links:** + +Der linke PE vergleicht ebenfalls: + +| VRF | Import-Liste | Ergebnis | +|-----|-------------|----------| +| VPN2 | RT1, RT2 | RT1 matcht → Route zu Site 2 | +| VPN3 | RT3 | kein Match → Route ignoriert | + +> **Merkhilfe:** RD = macht Adressen **eindeutig**. RT = steuert **Routenverteilung** (wer darf was sehen). + +--- + +### Site of Origin (SoO) + +Optionales Attribut, das die CE-PE-Verbindung identifiziert. Verhindert **Routing-Schleifen** bei Multi-Homed CEs (CE an mehrere PEs angebunden). + +--- + +### Datenweiterleitnung: Label Stacking + +``` +CE1 ---> PE1 ---> P1 ---> P2 ---> PE2 ---> CE2 +``` + +**Schritt 1 – PE1 (Ingress):** +Empfängt normales IP-Paket von CE1, sucht in der VRF (Longest Prefix Match), findet iBGP-Next-Hop PE2 und drückt **zwei Labels** auf das Paket: + +``` +[ Transport-Label | VPN-Label | IP-Paket ] +``` + +- **VPN-Label** (innen): identifiziert die Ziel-VRF bei PE2 +- **Transport-Label** (außen): für den Weg durch den Core zu PE2 + +**Schritt 2 – P-Router:** +Leiten nur anhand des **Transport-Labels** weiter – kein VPN-Wissen nötig. + +**Schritt 3 – PE2 (Egress):** +Entfernt das Transport-Label, liest das VPN-Label, findet die richtige VRF, leitet das IP-Paket an CE2 weiter. + +### Penultimate Hop Popping (PHP) + +**Optimierung:** Der **vorletzte Router (P2)** entfernt bereits das Transport-Label, sodass PE2 nur noch das VPN-Label sieht und nur **einen einzigen Lookup** machen muss statt zwei. PE2 hat dies vorher via LDP beim vorherigen Hop angefordert. + +``` +PE1 P1 P2 PE2 +[TL|VL|IP] --> [TL|VL|IP] --> [VL|IP] --> [IP] + ^ PHP: TL wird hier entfernt +``` + +--- + +### Inter-AS VPN + +Wenn VPN-Standorte über mehrere Autonomous Systems (verschiedene Provider) verbunden sind: + +| Option | Beschreibung | Label-Austausch | +|--------|-------------|-----------------| +| **A** | ASBRs führen VRFs; behandeln sich gegenseitig als CE | Kein Label-Austausch zwischen ASBRs | +| **B** | ASBRs tauschen VPN-Routen via MP-eBGP aus | MP-eBGP + Label zwischen ASBRs | +| **C** | Nur PE-Loopback-Adressen und Label-Bindings via eBGP; PEs kommunizieren direkt | eBGP + Label für Transport; MP-iBGP PE ↔ ASBR | + +--- + +### BGP/MPLS L3 VPN – Vor- und Nachteile + +| Vorteile | Nachteile | +|----------|-----------| +| Skalierbare VPN-Architektur | Komplex für Provider zu betreiben | +| SP oder Kunde kann VPN verwalten | Kunde hat keine vollständige WAN-Routing-Kontrolle | +| Vereinfachtes WAN-Routing für Kunden | Nur IP-Verkehr unterstützt | +| QoS/SLA pro VPN möglich (mit MPLS TE) | BGP konvergiert langsam (Abhilfe: BFD) | +| Hohe Verfügbarkeit via MPLS FRR | | + +--- + +## 7. Segment Routing (SR) + +### Grundprinzip: Source Routing + +Beim klassischen MPLS berechnet jeder Router Hop-by-Hop den Weg. Bei **Segment Routing** legt der **Ingress-Router** (erster Router) den gesamten Pfad fest und codiert ihn als **geordnete Liste von Segmenten** im Paket. + +**Segment:** Eine Anweisung für den Router, z.B. „Sende zu Knoten X über den kürzesten Pfad". Segmente werden als **SIDs (Segment Identifiers)** dargestellt. + +SR ist **Data Plane Agnostic**: funktioniert über MPLS oder IPv6, kombiniert mit IGP (IS-IS, OSPF) oder BGP. + +--- + +### Vergleich Classic MPLS vs. Segment Routing + +| | Classic MPLS | Segment Routing | +|--|--|--| +| **Pfadaufbau** | LDP / RSVP-TE (separates Protokoll) | IGP/BGP (integriert) | +| **Control Plane** | Komplex (IGP + LDP + RSVP-TE) | Vereinfacht (nur IGP/BGP) | +| **State im Core** | Pro LSP/Flow | Nur am Ingress | +| **Traffic Engineering** | Manuelle TE-LSPs via RSVP-TE | Automatisch über Segmentlisten | + +--- + +### IGP Segment-Typen + +#### Node/Prefix SID (global) + +- **Global gültig** in der gesamten SR-Domäne – jeder Router versteht dieselbe SID gleich +- Pakete werden zum Zielknoten über den **kürzesten IGP-Pfad** weitergeleitet (normales SPF-Routing) +- Wird als **Index** angekündigt → tatsächliches Label = SRGB-Basiswert + Index + +``` +Beispiel: + SRGB = 16000–23999 + Node-SID Index = 41 + → Verwendetes MPLS-Label = 16041 +``` + +#### Adjacency SID (lokal) + +- Nur auf dem **vergebenden Knoten lokal gültig** – andere Router verwenden diese SID nicht +- Leitet das Paket **explizit über eine bestimmte Nachbarverbindung** weiter (echtes Source Routing) +- Wird als **absoluter Wert** angekündigt (kein Index, direkt das Label) + +``` +Beispiel: + Adjacency SID = 9107 + → Paket wird zwingend über genau diesen Link weitergeleitet +``` + +--- + +### SR Vorteile + +**Control Plane Vereinfachung:** +- Weniger Protokolle, weniger Abhängigkeiten +- Automatischer Traffic-Schutz ohne per-Flow-Signalisierung + +**Traffic Engineering:** +- Kein manuelles Konfigurieren von TE-LSPs nötig +- Pfade werden automatisch berechnet oder von einem Controller (z.B. via PCEP) vorgegeben +- Kein State pro Flow im Kernnetz + +**Software-Defined Networking:** +- Hybrider Ansatz zwischen zentralisierter und verteilter Control Plane +- Controller kann Pfade/Policies über Southbound-Schnittstellen (z.B. PCEP) vorgeben +- Keine komplette Neukonstruktion des Netzes nötig + +--- + +### IETF Standards für Segment Routing + +| Standard | Beschreibung | +|----------|-------------| +| RFC 8402 | SR Architektur | +| RFC 9256 | SR Use Cases | +| RFC 8660 | SR über MPLS (SR-MPLS) | +| RFC 9886 | SR über IPv6 (SRv6) | + +Relevante IETF Working Groups: SPRING, PCE, IDR, 6MAN + +--- + +## Prüfungsinfo + +| | | +|--|--| +| **Termin** | Mo., 4. Mai 2026, 14:00–16:00 Uhr | +| **Räume** | 6B.369 (inkl. Nachteilsausgleich) und 6B.371 | +| **Betreuer** | Schrenk und Albaradie | +| **Format** | Klausur (keine praktische Prüfung, außer IT25-Jahrgang) | +| **IT25** | Kombinierte Prüfung: Klausur (K) + Laborausarbeitung (L) | \ No newline at end of file diff --git "a/Projektmanagement/Referat \"Kanban\".md" "b/Projektmanagement/Referat \"Kanban\".md" new file mode 100644 index 0000000..31dde15 --- /dev/null +++ "b/Projektmanagement/Referat \"Kanban\".md" @@ -0,0 +1,7 @@ +# Referat Notes "Kanban" + +- Freies Sprechen: Point and Speak +- Nicht zur Präsi drehen +- Offene Handflächen zur Zuhörerschaft +- Am besten ohne Notizen +- Anwendungsbeispiele zu Kanban \ No newline at end of file diff --git a/Skriptsprachen/.DS_Store b/Skriptsprachen/.DS_Store new file mode 100644 index 0000000..05e1414 Binary files /dev/null and b/Skriptsprachen/.DS_Store differ diff --git a/Skriptsprachen/test_exam.pdf b/Skriptsprachen/test_exam.pdf new file mode 100644 index 0000000..4d76e21 Binary files /dev/null and b/Skriptsprachen/test_exam.pdf differ diff --git a/Skriptsprachen/Übung.pdf b/Skriptsprachen/Übung.pdf new file mode 100644 index 0000000..7d6d009 Binary files /dev/null and b/Skriptsprachen/Übung.pdf differ diff --git a/Skriptsprachen/Übung2.pdf b/Skriptsprachen/Übung2.pdf new file mode 100644 index 0000000..e4b6dfa Binary files /dev/null and b/Skriptsprachen/Übung2.pdf differ diff --git a/Software Engineering II/Entwurf von UI.md b/Software Engineering II/Entwurf von UI.md new file mode 100644 index 0000000..6e1f0a2 --- /dev/null +++ b/Software Engineering II/Entwurf von UI.md @@ -0,0 +1,29 @@ +### Bewertung von Oberflächen + +##### Faktoren beim Entwurf menübasierter Oberfläche: +(Beispiel: Geldautomaten einer Bank) + +| Faktor | Eingabebestätigung | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| **Beschreibung** | Beim Ausführen einer Tätigkeit soll nochmal ein Fenster für das Bestätigen der Aktion durch den Benutzer stattfinden. | +| **Geschätzte Wichtigkeit** | Hoch (ungewollte Aktionen sollen nicht passieren) | + +| Faktor | Minimalismus | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Beschreibung** | Die Oberfläche soll so minimalistisch wie möglich sein, damit der Benutzer alle Aktionen, die er ausführen will auch schnellstmöglich ausführen will. Überladung würde nur überfordern. | +| **Geschätzte Wichtigkeit** | Mittel | + +| Faktor | Audio-Visuelles Feedback | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Beschreibung** | Sowohl audiotechnisch als auch visuell soll bei Eingaben ein Feedback in entsprechender Form ausgegeben werden. Zum Beispiel: Ton bei Tastendruck | +| **Geschätzte Wichtigkeit** | Hoch | + +| Faktor | Barrierefreiheit | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| **Beschreibung** | Behinderte Personen sollen beim Abheben ihres Geldes keine Einschränkungen haben, z.B. eine Sprachausgabe für blinde Personen. | +| **Geschätzte Wichtigkeit** | Hoch | + +| Faktor | Hilfe-Button für Notfälle | +| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| **Beschreibung** | Bei schwierigen Situationen sollen Kunden die Möglichkeit haben durch einen Button den Kundensupport zu erreichen und erste Hilfe zu erhalten. | +| **Geschätzte Wichtigkeit** | Hoch | diff --git a/Software-Engineering/.DS_Store b/Software-Engineering/.DS_Store new file mode 100644 index 0000000..140368c Binary files /dev/null and b/Software-Engineering/.DS_Store differ diff --git a/Software-Engineering/GrowGreen_2_Paper.pdf b/Software-Engineering/GrowGreen_2_Paper.pdf new file mode 100644 index 0000000..dcd320c Binary files /dev/null and b/Software-Engineering/GrowGreen_2_Paper.pdf differ diff --git a/Software-Engineering/Main_Screen_Maja_Vorgaben.pdf b/Software-Engineering/Main_Screen_Maja_Vorgaben.pdf new file mode 100644 index 0000000..e3ede2f Binary files /dev/null and b/Software-Engineering/Main_Screen_Maja_Vorgaben.pdf differ diff --git a/Software-Engineering/Projektstruktur.excalidraw b/Software-Engineering/Projektstruktur.excalidraw new file mode 100644 index 0000000..1be2526 --- /dev/null +++ b/Software-Engineering/Projektstruktur.excalidraw @@ -0,0 +1,5748 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "text", + "version": 447, + "versionNonce": 2110348906, + "index": "aw", + "isDeleted": false, + "id": "-o28VB1RnsWwmUsGWPv4n", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 675.4369271401316, + "y": -369.9275529415858, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 145.87991333007812, + "height": 37.800000000000004, + "seed": 1092809015, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763516598, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "GrowGreen", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "GrowGreen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 288, + "versionNonce": 2057699626, + "index": "ax", + "isDeleted": false, + "id": "GOgYWsJqMKWtfglBG0S-2", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 649.4842332664231, + "y": -391.58532666004373, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 202.45778200566315, + "height": 83.20182822150537, + "seed": 943567447, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "8qNOjR_d8cIxQJkkiwynu", + "type": "arrow" + }, + { + "id": "aLf88Vg0L04HQji3WaEWA", + "type": "arrow" + }, + { + "id": "OFMDSVaLmTHtl24hz2UK0", + "type": "arrow" + }, + { + "id": "XihGYRdbd3cGqBv8_w60f", + "type": "arrow" + } + ], + "updated": 1724763516598, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 145, + "versionNonce": 1956846006, + "index": "b00", + "isDeleted": false, + "id": "xCFexJmC7efY1OrpBXpwQ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -27.96562464220574, + "y": -139.14851046672726, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 141.8599395751953, + "height": 37.800000000000004, + "seed": 1017335671, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762422645, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Oberfläche", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Oberfläche", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 132, + "versionNonce": 1169730614, + "index": "b01", + "isDeleted": false, + "id": "QU8m0vfqf2iHrdz5Y-Ljd", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -56.45249622917129, + "y": -164.1090589331788, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 202.45778200566315, + "height": 83.20182822150537, + "seed": 412633239, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "R1lIC4Uvj4_Bwulm3n47R", + "type": "arrow" + }, + { + "id": "U7CHLr5htyht_vIqQC0Fx", + "type": "arrow" + }, + { + "id": "8qNOjR_d8cIxQJkkiwynu", + "type": "arrow" + }, + { + "id": "aLf88Vg0L04HQji3WaEWA", + "type": "arrow" + }, + { + "id": "X2L4XyZYj8TYmKXHQZM2C", + "type": "arrow" + }, + { + "id": "O-26v593yK9ptNyhHwOn4", + "type": "arrow" + }, + { + "id": "nqO-ZPm4PDDGfNYayE1uv", + "type": "arrow" + } + ], + "updated": 1724762825644, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 80, + "versionNonce": 1481338422, + "index": "b08", + "isDeleted": false, + "id": "1LYkPkXQNUuOJ0dvpvBfP", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 470.6021716191249, + "y": -171.00463697188246, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 790710583, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "rVPaBICRWTn1ZtiiPsc9-", + "type": "text" + }, + { + "id": "aLf88Vg0L04HQji3WaEWA", + "type": "arrow" + }, + { + "id": "OFMDSVaLmTHtl24hz2UK0", + "type": "arrow" + } + ], + "updated": 1724762402329, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 23, + "versionNonce": 2053525314, + "index": "b08V", + "isDeleted": false, + "id": "rVPaBICRWTn1ZtiiPsc9-", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 495.4308320007932, + "y": -141.83664438901812, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 189.86793041229248, + "height": 37.800000000000004, + "seed": 156308857, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762238876, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Pflanzenfakten", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1LYkPkXQNUuOJ0dvpvBfP", + "originalText": "Pflanzenfakten", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 333, + "versionNonce": 2123864670, + "index": "b0B", + "isDeleted": false, + "id": "mEWRp6pl8-yUcBuxED-kI", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 531.720138949023, + "y": -28.806721358341235, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 385914169, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "lSy_Blm8Ksi6VWm9IJVIk", + "type": "text" + } + ], + "updated": 1724762288355, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 283, + "versionNonce": 1001430686, + "index": "b0C", + "isDeleted": false, + "id": "lSy_Blm8Ksi6VWm9IJVIk", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 606.9690860730058, + "y": -8.600557901095687, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 75.99196910858154, + "height": 37.800000000000004, + "seed": 1619756569, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762288355, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Name", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "mEWRp6pl8-yUcBuxED-kI", + "originalText": "Name", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 258, + "versionNonce": 1106458462, + "index": "b0F", + "isDeleted": false, + "id": "rQrgA7FmY01fmzWdyk9BE", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 532.7508703330409, + "y": 96.28753875900998, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 1350642615, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "JvpVkUKioerB9k8YKRelJ", + "type": "text" + } + ], + "updated": 1724762364861, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 222, + "versionNonce": 730897310, + "index": "b0G", + "isDeleted": false, + "id": "JvpVkUKioerB9k8YKRelJ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 560.4418509863053, + "y": 116.49370221625553, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 171.1079020500183, + "height": 37.800000000000004, + "seed": 1693490391, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762364861, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Gießfrequenz", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "rQrgA7FmY01fmzWdyk9BE", + "originalText": "Gießfrequenz", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 378, + "versionNonce": 1236035806, + "index": "b0H", + "isDeleted": false, + "id": "dvHLUvzWzb7Pwz6052D8-", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 531.7002718443, + "y": 218.69451733446283, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 58948503, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "QBYTglCTxSjc_Y1kiB5R8", + "type": "text" + } + ], + "updated": 1724762385889, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 351, + "versionNonce": 405249310, + "index": "b0I", + "isDeleted": false, + "id": "QBYTglCTxSjc_Y1kiB5R8", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 588.5252329505788, + "y": 238.90068079170837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 112.83994114398956, + "height": 37.800000000000004, + "seed": 1188950199, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762385889, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Standort", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "dvHLUvzWzb7Pwz6052D8-", + "originalText": "Standort", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 528, + "versionNonce": 46285314, + "index": "b0L", + "isDeleted": false, + "id": "xTGwiFEI4fg_O57rU9jmx", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 531.8218037157158, + "y": 352.6575319003688, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 1543617527, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "ro4W3leIkuFwGC93AZaxb", + "type": "text" + } + ], + "updated": 1724762399131, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 508, + "versionNonce": 1257157058, + "index": "b0M", + "isDeleted": false, + "id": "ro4W3leIkuFwGC93AZaxb", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 605.5307515931013, + "y": 372.86369535761435, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 79.07196760177612, + "height": 37.800000000000004, + "seed": 175449367, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762399131, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Größe", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xTGwiFEI4fg_O57rU9jmx", + "originalText": "Größe", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 342, + "versionNonce": 1560248682, + "index": "b0N", + "isDeleted": false, + "id": "vndsq92e1A0Xmt6CNtJg8", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 943.5745758306698, + "y": -169.4810954806611, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 1374019057, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "ZkQE1V89oLZw4tgau8HPC", + "type": "text" + }, + { + "id": "OFMDSVaLmTHtl24hz2UK0", + "type": "arrow" + }, + { + "id": "p-hyLwp5-n4_0tPX7Gzhk", + "type": "arrow" + }, + { + "id": "JufNoZKtlpp6eNK8lDSzy", + "type": "arrow" + } + ], + "updated": 1724762645935, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 327, + "versionNonce": 1923742897, + "index": "b0O", + "isDeleted": false, + "id": "ZkQE1V89oLZw4tgau8HPC", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 998.263249697293, + "y": -140.31310289779677, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 130.1479034423828, + "height": 37.800000000000004, + "seed": 1916205009, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762536286, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Minispiele", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "vndsq92e1A0Xmt6CNtJg8", + "originalText": "Minispiele", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 403, + "versionNonce": 779107126, + "index": "b0P", + "isDeleted": false, + "id": "r1r9aznra1GSBA8F4mXFR", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 31.03229511239863, + "y": 882.1161382954857, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 1942397879, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "IgVodJJKYvdmb_6feLuc_", + "type": "text" + }, + { + "id": "X2L4XyZYj8TYmKXHQZM2C", + "type": "arrow" + }, + { + "id": "WLq27kvz0Ste3OiswDPxn", + "type": "arrow" + }, + { + "id": "bw3SEvlt9MV0QAgHmZ1Jp", + "type": "arrow" + } + ], + "updated": 1724763321662, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 363, + "versionNonce": 1450140790, + "index": "b0Q", + "isDeleted": false, + "id": "IgVodJJKYvdmb_6feLuc_", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 52.10558729312902, + "y": 911.2841308783501, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 197.3786668141683, + "height": 37.800000000000004, + "seed": 1892095191, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321662, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Laden Interface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "r1r9aznra1GSBA8F4mXFR", + "originalText": "Laden Interface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 431, + "versionNonce": 2123790710, + "index": "b0R", + "isDeleted": false, + "id": "FzK1iPVLQMYwpk-Z1U5WU", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 35.45720918897871, + "y": 1128.0649689789907, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 2124908217, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "yxyOhGoTBTu8rsGA1GueG", + "type": "text" + }, + { + "id": "nqO-ZPm4PDDGfNYayE1uv", + "type": "arrow" + }, + { + "id": "WLq27kvz0Ste3OiswDPxn", + "type": "arrow" + }, + { + "id": "pS0Xl7-95fzix_i3hJG6j", + "type": "arrow" + }, + { + "id": "p_u7rslMJcPHw6ujq3Rgz", + "type": "arrow" + }, + { + "id": "D5QpHUHE52PuCwObIQ9SE", + "type": "arrow" + } + ], + "updated": 1724763321662, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 404, + "versionNonce": 1001642678, + "index": "b0S", + "isDeleted": false, + "id": "yxyOhGoTBTu8rsGA1GueG", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 57.289882632170475, + "y": 1157.232961561855, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 195.8599042892456, + "height": 37.800000000000004, + "seed": 1767393177, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321662, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Home Interface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "FzK1iPVLQMYwpk-Z1U5WU", + "originalText": "Home Interface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 547, + "versionNonce": 389420313, + "index": "b0U", + "isDeleted": false, + "id": "PV-Xj0t4em5NNSLw6785Y", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 91.3942810061094, + "y": 419.01663076093485, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 181.6767931381222, + "height": 47.800000000000004, + "seed": 2101131825, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "QGVqWVYjYpVBks8nasRU0", + "type": "text" + }, + { + "id": "vu7R7gFncL4Z1NPhZ2-R3", + "type": "arrow" + } + ], + "updated": 1724763134656, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 569, + "versionNonce": 1640368633, + "index": "b0V", + "isDeleted": false, + "id": "QGVqWVYjYpVBks8nasRU0", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 143.84269344431112, + "y": 424.01663076093485, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 76.77996826171875, + "height": 37.800000000000004, + "seed": 2129153041, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763134656, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Name", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "PV-Xj0t4em5NNSLw6785Y", + "originalText": "Name", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 344, + "versionNonce": 514378038, + "index": "b0W", + "isDeleted": false, + "id": "R1lIC4Uvj4_Bwulm3n47R", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -31.07004607890616, + "y": -75.90723071167344, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 56.42838707013607, + "height": 74.25097017992583, + "seed": 575120374, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172722, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": 0.7492568584046314, + "gap": 5, + "fixedPoint": [ + 0.1253715707976843, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "JDu2mm0pDBrx2XMjjHZ9J", + "focus": 0.00418410041841025, + "gap": 5, + "fixedPoint": [ + -0.024310300081616273, + 0.4979079497907949 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 74.25097017992583 + ], + [ + 56.42838707013607, + 74.25097017992583 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 457, + "versionNonce": 1227125686, + "index": "b0WV", + "isDeleted": false, + "id": "U7CHLr5htyht_vIqQC0Fx", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -31.505106955891904, + "y": -75.90723071167344, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 58.19663374122712, + "height": 146.28742166627126, + "seed": 94175210, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172722, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": 0.7535546519759704, + "gap": 5, + "fixedPoint": [ + 0.1232226740120148, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "V5CwbNIZRQWtiItk3POYw", + "focus": 0.0023255813953488797, + "gap": 4.999999999999943, + "fixedPoint": [ + -0.01950570989336299, + 0.4988372093023256 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 146.28742166627126 + ], + [ + 58.19663374122712, + 146.28742166627126 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 403, + "versionNonce": 1899644022, + "index": "b0X", + "isDeleted": false, + "id": "j9DRT4gJDcPgHEgkOw4ku", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 19.27124327575268, + "y": 149.91105890465815, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 1132898745, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "Vrk0zbeVzkFrNzLdUyatO", + "type": "text" + }, + { + "id": "O-26v593yK9ptNyhHwOn4", + "type": "arrow" + }, + { + "id": "7LCpeDFW-LG4Co_DgwTtX", + "type": "arrow" + }, + { + "id": "xZIoeTIiVt-q115-AUU6s", + "type": "arrow" + }, + { + "id": "vu7R7gFncL4Z1NPhZ2-R3", + "type": "arrow" + }, + { + "id": "ND7FDvFD5hupkN4N5oiIZ", + "type": "arrow" + }, + { + "id": "APQ-F3sprAL_APPnWh3U3", + "type": "arrow" + }, + { + "id": "I5FdNyVMe-IKYrclnhpd8", + "type": "arrow" + }, + { + "id": "NHMK4wYchJBlg4gwdFshB", + "type": "arrow" + } + ], + "updated": 1724763295846, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 372, + "versionNonce": 1404923609, + "index": "b0Y", + "isDeleted": false, + "id": "Vrk0zbeVzkFrNzLdUyatO", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 78.73386962650669, + "y": 160.17905148752249, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 120.5999984741211, + "height": 75.60000000000001, + "seed": 744163993, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763121718, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Minispiel \nInterface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "j9DRT4gJDcPgHEgkOw4ku", + "originalText": "Minispiel Interface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 353, + "versionNonce": 1537792566, + "index": "b0c", + "isDeleted": false, + "id": "_sQGig8PgZlsxrdDUS_SQ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1006.9068688793316, + "y": -26.248723314029917, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 37949311, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "yAIXlj-0tr-WvZZuR42eS", + "type": "text" + }, + { + "id": "kzvCCfK5pTTx8hqLuQsQB", + "type": "arrow" + }, + { + "id": "dk-gwuoZAhDx948kjwAyT", + "type": "arrow" + }, + { + "id": "eY32GnMPpbihAIe8G4oE_", + "type": "arrow" + } + ], + "updated": 1724762630284, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 311, + "versionNonce": 885539422, + "index": "b0d", + "isDeleted": false, + "id": "yAIXlj-0tr-WvZZuR42eS", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1074.1758202757753, + "y": -6.042559856784365, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 91.95196056365967, + "height": 37.800000000000004, + "seed": 1800587167, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762472362, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Plantle", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "_sQGig8PgZlsxrdDUS_SQ", + "originalText": "Plantle", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 590, + "versionNonce": 2068094905, + "index": "b0h", + "isDeleted": false, + "id": "MrNRtEQ3tXSkps04U2JVk", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 85.85802567014548, + "y": 293.6761008784393, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 181.6767931381222, + "height": 47.800000000000004, + "seed": 1222305207, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "191gyEccRRBOxZXaT4ta5", + "type": "text" + }, + { + "id": "7LCpeDFW-LG4Co_DgwTtX", + "type": "arrow" + } + ], + "updated": 1724763134656, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 625, + "versionNonce": 1693073561, + "index": "b0i", + "isDeleted": false, + "id": "191gyEccRRBOxZXaT4ta5", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 120.13644941654042, + "y": 298.6761008784393, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 113.11994564533234, + "height": 37.800000000000004, + "seed": 1577260759, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763134656, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Auswahl", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "MrNRtEQ3tXSkps04U2JVk", + "originalText": "Auswahl", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 396, + "versionNonce": 477592170, + "index": "b0n", + "isDeleted": false, + "id": "DlcSpY0t-bEfMNzCUU7rz", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1019.4371307417966, + "y": 337.73729816528214, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 476642463, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "5C3BOevlzx7niImdrJdVA" + }, + { + "id": "JufNoZKtlpp6eNK8lDSzy", + "type": "arrow" + }, + { + "id": "i5mJP0e_07DJ_uuzPYA6K", + "type": "arrow" + }, + { + "id": "oUfoFMNFqLkawVeOykgcR", + "type": "arrow" + }, + { + "id": "gxE41qroXCFrB5WJHD43W", + "type": "arrow" + } + ], + "updated": 1724762949832, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 372, + "versionNonce": 955394858, + "index": "b0o", + "isDeleted": false, + "id": "5C3BOevlzx7niImdrJdVA", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1057.6821005670429, + "y": 357.9434616225277, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 149.9999237060547, + "height": 37.800000000000004, + "seed": 1618874559, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762655742, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Plant Crush", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "DlcSpY0t-bEfMNzCUU7rz", + "originalText": "Plant Crush", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 585, + "versionNonce": 1921223466, + "index": "b0p", + "isDeleted": false, + "id": "kWxf7N1o9tT0-UIRaDblb", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1025.406850567006, + "y": 724.8807615035482, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 78.2123269144911, + "seed": 170585553, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "mznfoHQi5vWqk9Hp97N63" + }, + { + "id": "p-hyLwp5-n4_0tPX7Gzhk", + "type": "arrow" + }, + { + "id": "PyRDa6nkpPGXFBJ22jOJN", + "type": "arrow" + }, + { + "id": "Yhx6jySs54fA8bF3HePAK", + "type": "arrow" + }, + { + "id": "_cd1tXsZTVVwrCrrvLxvb", + "type": "arrow" + } + ], + "updated": 1724762972732, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 547, + "versionNonce": 115607377, + "index": "b0q", + "isDeleted": false, + "id": "mznfoHQi5vWqk9Hp97N63", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1085.239810199381, + "y": 745.0869249607938, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 106.82394409179688, + "height": 37.800000000000004, + "seed": 588188593, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762852920, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Memory", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kWxf7N1o9tT0-UIRaDblb", + "originalText": "Memory", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 528, + "versionNonce": 194477622, + "index": "b0x", + "isDeleted": false, + "id": "O-26v593yK9ptNyhHwOn4", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -29.946855633855535, + "y": -75.90723071167344, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 44.218098909608216, + "height": 273.7862821991959, + "seed": 1599986455, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172722, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": 0.7381613061969202, + "gap": 5, + "fixedPoint": [ + 0.1309193469015399, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.0020803864406784382, + "gap": 5, + "fixedPoint": [ + -0.02087462585034013, + 0.49895980677966073 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 273.7862821991959 + ], + [ + 44.218098909608216, + 273.7862821991959 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 174, + "versionNonce": 1731745054, + "index": "b0y", + "isDeleted": false, + "id": "zx0OcBo8YTY1g1_WUAcnd", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 491.53293869479353, + "y": -74.99840884064915, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.31118832885278, + "height": 88.95931656008625, + "seed": 1822727618, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762346568, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 88.95931656008625 + ], + [ + 36.31118832885278, + 88.95931656008625 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 368, + "versionNonce": 1346712170, + "index": "b0z", + "isDeleted": false, + "id": "wwEQe0g6ROPNV1DzskHx-", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1089.5713100533235, + "y": 165.2696882519101, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 1567972543, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "lkstIcrLz_nQnnNUhQMfc", + "type": "text" + }, + { + "id": "dk-gwuoZAhDx948kjwAyT", + "type": "arrow" + } + ], + "updated": 1724762617297, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 392, + "versionNonce": 345532127, + "index": "b10", + "isDeleted": false, + "id": "lkstIcrLz_nQnnNUhQMfc", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1119.9202837848197, + "y": 170.3696882519101, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 165.7919158935547, + "height": 37.800000000000004, + "seed": 1565093087, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762605237, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Pflanzenliste", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wwEQe0g6ROPNV1DzskHx-", + "originalText": "Pflanzenliste", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 294, + "versionNonce": 1980086046, + "index": "b11", + "isDeleted": false, + "id": "hWxTjzcxS0SoECZtUE3N5", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 492.1994641570824, + "y": -73.69286828353346, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.38814366072114, + "height": 214.82520437294303, + "seed": 1497929054, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762473955, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 214.82520437294303 + ], + [ + 36.38814366072114, + 214.82520437294303 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 618, + "versionNonce": 75738713, + "index": "b12", + "isDeleted": false, + "id": "L-tmlkPyaY48XGWi90mJq", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 91.76067978516255, + "y": 483.60422647323503, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 181.6767931381222, + "height": 47.800000000000004, + "seed": 1064640089, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "y_qewsx4ZcTC9WfsJpQFB", + "type": "text" + }, + { + "id": "ND7FDvFD5hupkN4N5oiIZ", + "type": "arrow" + } + ], + "updated": 1724763134657, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 647, + "versionNonce": 479099705, + "index": "b13", + "isDeleted": false, + "id": "y_qewsx4ZcTC9WfsJpQFB", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 139.71709545822756, + "y": 488.60422647323503, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 85.76396179199219, + "height": 37.800000000000004, + "seed": 1473375033, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763134657, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "\"Logo\"", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "L-tmlkPyaY48XGWi90mJq", + "originalText": "\"Logo\"", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 623, + "versionNonce": 1561444601, + "index": "b14", + "isDeleted": false, + "id": "ZG97mLdZGt4tC1G4ZjST1", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 88.60178624236801, + "y": 357.4228337816849, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 253.9574787532801, + "height": 47.800000000000004, + "seed": 2081256215, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "keFdAVZlWsoeFlWKVPnUX", + "type": "text" + }, + { + "id": "xZIoeTIiVt-q115-AUU6s", + "type": "arrow" + } + ], + "updated": 1724763134657, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 685, + "versionNonce": 1795242457, + "index": "b15", + "isDeleted": false, + "id": "keFdAVZlWsoeFlWKVPnUX", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 101.8425953211565, + "y": 362.4228337816849, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 227.47586059570312, + "height": 37.800000000000004, + "seed": 440203319, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763134657, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Kurzbeschreibung", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ZG97mLdZGt4tC1G4ZjST1", + "originalText": "Kurzbeschreibung", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 317, + "versionNonce": 1891135518, + "index": "b18", + "isDeleted": false, + "id": "sR1pParIS648fyB3RaiTe", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 491.9645328836713, + "y": -72.23301353566794, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 35.35474069273948, + "height": 329.66449089286135, + "seed": 2033871518, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762482625, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 329.66449089286135 + ], + [ + 35.35474069273948, + 329.66449089286135 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 447, + "versionNonce": 1673033194, + "index": "b19", + "isDeleted": false, + "id": "DsW7-aVAjpTDP-hB_kOkM", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1088.2160026696088, + "y": 92.28087176770498, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 1741576465, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "Po5ysnT2MmJDWrqvOxJfc", + "type": "text" + }, + { + "id": "eY32GnMPpbihAIe8G4oE_", + "type": "arrow" + } + ], + "updated": 1724762633219, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 495, + "versionNonce": 1840843825, + "index": "b1A", + "isDeleted": false, + "id": "Po5ysnT2MmJDWrqvOxJfc", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1132.2009703586245, + "y": 97.38087176770497, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 138.51992797851562, + "height": 37.800000000000004, + "seed": 664997617, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762608217, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Kategorien", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "DsW7-aVAjpTDP-hB_kOkM", + "originalText": "Kategorien", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 517, + "versionNonce": 247874026, + "index": "b1B", + "isDeleted": false, + "id": "8qNOjR_d8cIxQJkkiwynu", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 750.6131242692546, + "y": -303.38349843853837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 721.2005360589714, + "height": 134.27443950535957, + "seed": 2003130026, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763516687, + "link": null, + "locked": false, + "startBinding": { + "elementId": "GOgYWsJqMKWtfglBG0S-2", + "focus": 0.000987860273972547, + "gap": 5, + "fixedPoint": [ + 0.4995060698630137, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": -0.15177294160959665, + "gap": 5, + "fixedPoint": [ + 0.4241135291952017, + -0.060094833333333396 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 67.13721975267978 + ], + [ + -721.2005360589714, + 67.13721975267978 + ], + [ + -721.2005360589714, + 134.27443950535957 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 511, + "versionNonce": 825914538, + "index": "b1C", + "isDeleted": false, + "id": "aLf88Vg0L04HQji3WaEWA", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 750.6131242692546, + "y": -303.38349843853837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 160.3483270623152, + "height": 127.3788614666559, + "seed": 108056042, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763516687, + "link": null, + "locked": false, + "startBinding": { + "elementId": "GOgYWsJqMKWtfglBG0S-2", + "focus": 0.0009878602739725472, + "gap": 5, + "fixedPoint": [ + 0.4995060698630137, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "1LYkPkXQNUuOJ0dvpvBfP", + "focus": -0.0008349850340137951, + "gap": 4.999999999999993, + "fixedPoint": [ + 0.49958250748299315, + -0.05200966101694913 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 63.68943073332795 + ], + [ + -160.3483270623152, + 63.68943073332795 + ], + [ + -160.3483270623152, + 127.3788614666559 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 309, + "versionNonce": 1486503710, + "index": "b1D", + "isDeleted": false, + "id": "C0LQ4m5GkvB_nD7SjEUkj", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 491.50410432284554, + "y": 67.31508275148838, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 35.35474069273948, + "height": 329.66449089286135, + "seed": 791236574, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762395193, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 329.66449089286135 + ], + [ + 35.35474069273948, + 329.66449089286135 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 734, + "versionNonce": 1142574954, + "index": "b1E", + "isDeleted": false, + "id": "OFMDSVaLmTHtl24hz2UK0", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 750.6131242692546, + "y": -303.38349843853837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 312.6240771492297, + "height": 128.90240295787726, + "seed": 327861942, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763516687, + "link": null, + "locked": false, + "startBinding": { + "elementId": "GOgYWsJqMKWtfglBG0S-2", + "focus": 0.000987860273972828, + "gap": 5, + "fixedPoint": [ + 0.4995060698630136, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "vndsq92e1A0Xmt6CNtJg8", + "focus": -0.0008349850340128459, + "gap": 4.999999999999993, + "fixedPoint": [ + 0.49958250748299315, + -0.05200966101694913 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 64.45120147893863 + ], + [ + 312.6240771492297, + 64.45120147893863 + ], + [ + 312.6240771492297, + 128.90240295787726 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 254, + "versionNonce": 2139588446, + "index": "b1F", + "isDeleted": false, + "id": "i1S8ILvOf78x8y7LGT9C9", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 969.3831739413663, + "y": -71.7346013400821, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.31118832885278, + "height": 88.95931656008625, + "seed": 522290974, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762469374, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 88.95931656008625 + ], + [ + 36.31118832885278, + 88.95931656008625 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 433, + "versionNonce": 1613129974, + "index": "b1G", + "isDeleted": false, + "id": "1Pz_WZEPx4vPRyaeq-Xty", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 107.63070560178289, + "y": 1243.6699426587156, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 218.88521055456272, + "height": 47.800000000000004, + "seed": 1599323513, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "wmWW6ilgvWO9Vq9rB8CFJ" + }, + { + "id": "pS0Xl7-95fzix_i3hJG6j", + "type": "arrow" + }, + { + "id": "p_u7rslMJcPHw6ujq3Rgz", + "type": "arrow" + } + ], + "updated": 1724763321663, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 288, + "versionNonce": 1419369014, + "index": "b1GV", + "isDeleted": false, + "id": "wmWW6ilgvWO9Vq9rB8CFJ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 119.85735323746269, + "y": 1248.6699426587156, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 194.43191528320312, + "height": 37.800000000000004, + "seed": 918056665, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321663, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "meine Pflanzen", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1Pz_WZEPx4vPRyaeq-Xty", + "originalText": "meine Pflanzen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 399, + "versionNonce": 2062260202, + "index": "b1H", + "isDeleted": false, + "id": "Qi53vDJGKj0pIyzNNxjyj", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1085.5053879021798, + "y": 241.3646839763138, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 879451665, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "fDXOr6G26UQ6qd1mAuT0L", + "type": "text" + }, + { + "id": "kzvCCfK5pTTx8hqLuQsQB", + "type": "arrow" + } + ], + "updated": 1724762604275, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 454, + "versionNonce": 949883601, + "index": "b1I", + "isDeleted": false, + "id": "fDXOr6G26UQ6qd1mAuT0L", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1146.7803488773284, + "y": 246.4646839763138, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 103.93994140625, + "height": 37.800000000000004, + "seed": 1146582001, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762577275, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Eingabe", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Qi53vDJGKj0pIyzNNxjyj", + "originalText": "Eingabe", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 931, + "versionNonce": 271411254, + "index": "b1K", + "isDeleted": false, + "id": "p-hyLwp5-n4_0tPX7Gzhk", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 970.5009723539106, + "y": -68.34511031493241, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 49.90587821309532, + "height": 832.2320352757262, + "seed": 352845406, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172723, + "link": null, + "locked": false, + "startBinding": { + "elementId": "vndsq92e1A0Xmt6CNtJg8", + "focus": 0.7751686188317789, + "gap": 4.999999999999993, + "fixedPoint": [ + 0.11241569058411013, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "kWxf7N1o9tT0-UIRaDblb", + "focus": 0.002557141666667249, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4987214291666663 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 832.2320352757262 + ], + [ + 49.90587821309532, + 832.2320352757262 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 710, + "versionNonce": 1355105462, + "index": "b1N", + "isDeleted": false, + "id": "Kz-O25yDWT3MaThQtf93w", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 105.13952346149097, + "y": 997.4216730311916, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 181.6767931381222, + "height": 47.800000000000004, + "seed": 491911607, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "2QDeCgWI77bSiFol30Gqa", + "type": "text" + }, + { + "id": "WLq27kvz0Ste3OiswDPxn", + "type": "arrow" + } + ], + "updated": 1724763321663, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 752, + "versionNonce": 1281834486, + "index": "b1O", + "isDeleted": false, + "id": "2QDeCgWI77bSiFol30Gqa", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 151.18993327518103, + "y": 1002.4216730311916, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 89.57597351074219, + "height": 37.800000000000004, + "seed": 980921047, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321663, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Kaufen", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Kz-O25yDWT3MaThQtf93w", + "originalText": "Kaufen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 739, + "versionNonce": 1541191798, + "index": "b1P", + "isDeleted": false, + "id": "lK0ZNxpOiGU3ZpEK5CdGL", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 106.25411369485539, + "y": 1063.7331206537492, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 181.67679313812232, + "height": 47.80000000000003, + "seed": 15951385, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "66HjrxdwuUghh2QQZs3r2", + "type": "text" + }, + { + "id": "bw3SEvlt9MV0QAgHmZ1Jp", + "type": "arrow" + } + ], + "updated": 1724763321663, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 799, + "versionNonce": 869939638, + "index": "b1Q", + "isDeleted": false, + "id": "66HjrxdwuUghh2QQZs3r2", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 133.16853718042046, + "y": 1068.7331206537492, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 127.84794616699219, + "height": 37.800000000000026, + "seed": 699480825, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321663, + "link": null, + "locked": false, + "fontSize": 28.000000000000018, + "fontFamily": 6, + "text": "Verkaufen", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "lK0ZNxpOiGU3ZpEK5CdGL", + "originalText": "Verkaufen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 731, + "versionNonce": 1542222250, + "index": "b1R", + "isDeleted": false, + "id": "JufNoZKtlpp6eNK8lDSzy", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 968.7372350778376, + "y": -68.34511031493241, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 45.69989566395907, + "height": 445.0885719374601, + "seed": 761367326, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763178143, + "link": null, + "locked": false, + "startBinding": { + "elementId": "vndsq92e1A0Xmt6CNtJg8", + "focus": 0.7898955611263078, + "gap": 4.999999999999993, + "fixedPoint": [ + 0.10505221943684567, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "DlcSpY0t-bEfMNzCUU7rz", + "focus": 0.0025571416666672494, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4987214291666663 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 445.0885719374601 + ], + [ + 45.69989566395907, + 445.0885719374601 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 605, + "versionNonce": 916016298, + "index": "b1S", + "isDeleted": false, + "id": "kzvCCfK5pTTx8hqLuQsQB", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1035.8668538870913, + "y": 56.963603600461184, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 44.63853401508845, + "height": 208.30108037585262, + "seed": 1890920255, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763178143, + "link": null, + "locked": false, + "startBinding": { + "elementId": "_sQGig8PgZlsxrdDUS_SQ", + "focus": 0.7442712483589602, + "gap": 5, + "fixedPoint": [ + 0.12786437582052002, + 1.0639285416666666 + ] + }, + "endBinding": { + "elementId": "Qi53vDJGKj0pIyzNNxjyj", + "focus": 0.004166666666667614, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 208.30108037585262 + ], + [ + 44.63853401508845, + 208.30108037585262 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 635, + "versionNonce": 1525368758, + "index": "b1T", + "isDeleted": false, + "id": "dk-gwuoZAhDx948kjwAyT", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1036.419482131715, + "y": 56.963603600461184, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 48.1518279216084, + "height": 132.20608465144892, + "seed": 561863658, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172725, + "link": null, + "locked": false, + "startBinding": { + "elementId": "_sQGig8PgZlsxrdDUS_SQ", + "focus": 0.7393913103658518, + "gap": 5, + "fixedPoint": [ + 0.13030434481707412, + 1.0639285416666666 + ] + }, + "endBinding": { + "elementId": "wwEQe0g6ROPNV1DzskHx-", + "focus": 0.0041666666666676155, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 132.20608465144892 + ], + [ + 48.1518279216084, + 132.20608465144892 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 713, + "versionNonce": 280580662, + "index": "b1U", + "isDeleted": false, + "id": "eY32GnMPpbihAIe8G4oE_", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1036.4095135209234, + "y": 56.96360360046117, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.80648914868539, + "height": 59.217268167243816, + "seed": 1904908790, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172725, + "link": null, + "locked": false, + "startBinding": { + "elementId": "_sQGig8PgZlsxrdDUS_SQ", + "focus": 0.7394793373587067, + "gap": 4.999999999999986, + "fixedPoint": [ + 0.13026033132064663, + 1.0639285416666668 + ] + }, + "endBinding": { + "elementId": "DsW7-aVAjpTDP-hB_kOkM", + "focus": 0.004166666666666431, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666668 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 59.217268167243816 + ], + [ + 46.80648914868539, + 59.217268167243816 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 791, + "versionNonce": 1539293674, + "index": "b1V", + "isDeleted": false, + "id": "heHppwI4rOM8vklJBBTlf", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1088.1265816914906, + "y": 456.86849365117496, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 1787708767, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "gvET7fossfm12yldYATS4", + "type": "text" + }, + { + "id": "i5mJP0e_07DJ_uuzPYA6K", + "type": "arrow" + } + ], + "updated": 1724762935805, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 858, + "versionNonce": 587461802, + "index": "b1W", + "isDeleted": false, + "id": "gvET7fossfm12yldYATS4", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1157.171531680311, + "y": 461.968493651175, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 88.39996337890625, + "height": 37.800000000000004, + "seed": 1954300287, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762935805, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Farben", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "heHppwI4rOM8vklJBBTlf", + "originalText": "Farben", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 621, + "versionNonce": 1708982634, + "index": "b1Y", + "isDeleted": false, + "id": "JDu2mm0pDBrx2XMjjHZ9J", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 30.35834099122991, + "y": -25.456260531747603, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.6741374320203, + "height": 47.800000000000004, + "seed": 2124143161, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "qwrmKCTXlPQRmuKBeWBrP", + "type": "text" + }, + { + "id": "R1lIC4Uvj4_Bwulm3n47R", + "type": "arrow" + } + ], + "updated": 1724762726489, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 675, + "versionNonce": 1547486551, + "index": "b1Z", + "isDeleted": false, + "id": "qwrmKCTXlPQRmuKBeWBrP", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 40.50345414083381, + "y": -20.456260531747603, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.3839111328125, + "height": 37.800000000000004, + "seed": 511060761, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762719077, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Münzenanzahl", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "JDu2mm0pDBrx2XMjjHZ9J", + "originalText": "Münzenanzahl", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 660, + "versionNonce": 1935911031, + "index": "b1a", + "isDeleted": false, + "id": "V5CwbNIZRQWtiItk3POYw", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 31.691526785335157, + "y": 46.535772349946654, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 256.3351976080274, + "height": 47.800000000000004, + "seed": 340512089, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "4Ke9Wz39bCGmBxxlqhKcF", + "type": "text" + }, + { + "id": "U7CHLr5htyht_vIqQC0Fx", + "type": "arrow" + } + ], + "updated": 1724762747129, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 733, + "versionNonce": 669352343, + "index": "b1b", + "isDeleted": false, + "id": "4Ke9Wz39bCGmBxxlqhKcF", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 45.44919822118479, + "y": 51.535772349946654, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 228.81985473632812, + "height": 37.800000000000004, + "seed": 1543158329, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762747129, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Erfahrungspunkte", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "V5CwbNIZRQWtiItk3POYw", + "originalText": "Erfahrungspunkte", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 572, + "versionNonce": 895925430, + "index": "b1c", + "isDeleted": false, + "id": "7LCpeDFW-LG4Co_DgwTtX", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 47.22939119207315, + "y": 251.04704407038685, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 35, + "height": 66.4290568080524, + "seed": 937985014, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172725, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7665536491113375, + "gap": 5, + "fixedPoint": [ + 0.11672317544433126, + 1.0520096610169494 + ] + }, + "endBinding": { + "elementId": "MrNRtEQ3tXSkps04U2JVk", + "focus": 0.004184100418413371, + "gap": 5, + "fixedPoint": [ + -0.027521401680613566, + 0.497907949790794 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 23.31452840402619 + ], + [ + -1.3713655219276717, + 23.31452840402619 + ], + [ + -1.3713655219276717, + 66.4290568080524 + ], + [ + 33.62863447807233, + 66.4290568080524 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 601, + "versionNonce": 1620805430, + "index": "b1f", + "isDeleted": false, + "id": "xZIoeTIiVt-q115-AUU6s", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 46.25406304092215, + "y": 251.04704407038685, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 37.34772320144586, + "height": 124.41023878723018, + "seed": 655300394, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172725, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.77469749320597, + "gap": 5, + "fixedPoint": [ + 0.11265125339701502, + 1.0520096610169494 + ] + }, + "endBinding": { + "elementId": "ZG97mLdZGt4tC1G4ZjST1", + "focus": 0.24542054075597977, + "gap": 5, + "fixedPoint": [ + -0.01968833532505457, + 0.37728972962201074 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 124.41023878723018 + ], + [ + 37.34772320144586, + 124.41023878723018 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 652, + "versionNonce": 1610592694, + "index": "b1g", + "isDeleted": false, + "id": "vu7R7gFncL4Z1NPhZ2-R3", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 46.1312569632299, + "y": 251.04704407038685, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 40.26302404287949, + "height": 191.76958669054795, + "seed": 759319466, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172726, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7757229055755597, + "gap": 5, + "fixedPoint": [ + 0.11213854721222034, + 1.0520096610169494 + ] + }, + "endBinding": { + "elementId": "PV-Xj0t4em5NNSLw6785Y", + "focus": 0.004184100418410993, + "gap": 5, + "fixedPoint": [ + -0.027521401680613566, + 0.497907949790794 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 191.76958669054795 + ], + [ + 40.26302404287949, + 191.76958669054795 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 685, + "versionNonce": 926628918, + "index": "b1h", + "isDeleted": false, + "id": "ND7FDvFD5hupkN4N5oiIZ", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 47.618349974886115, + "y": 251.04704407038685, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 39.142329810276436, + "height": 256.35718240284814, + "seed": 1030018602, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172726, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7633059014863679, + "gap": 5, + "fixedPoint": [ + 0.11834704925681613, + 1.0520096610169494 + ] + }, + "endBinding": { + "elementId": "L-tmlkPyaY48XGWi90mJq", + "focus": 0.004184100418410994, + "gap": 5, + "fixedPoint": [ + -0.027521401680613566, + 0.497907949790794 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 256.35718240284814 + ], + [ + 39.142329810276436, + 256.35718240284814 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 684, + "versionNonce": 1446252470, + "index": "b1i", + "isDeleted": false, + "id": "OTOyP0Z7HzkHx8g_xe8mf", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1088.1265816914893, + "y": 515.1467111509039, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 440911057, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "MvFQmI85xWRgRd4qq5dpq", + "type": "text" + }, + { + "id": "oUfoFMNFqLkawVeOykgcR", + "type": "arrow" + } + ], + "updated": 1724762946346, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 755, + "versionNonce": 1327660266, + "index": "b1j", + "isDeleted": false, + "id": "MvFQmI85xWRgRd4qq5dpq", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1138.027549746716, + "y": 520.2467111509039, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 126.68792724609375, + "height": 37.800000000000004, + "seed": 1735983793, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762935806, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Spielbrett", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "OTOyP0Z7HzkHx8g_xe8mf", + "originalText": "Spielbrett", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 667, + "versionNonce": 245883318, + "index": "b1k", + "isDeleted": false, + "id": "X2L4XyZYj8TYmKXHQZM2C", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -30.403422750456613, + "y": -75.90723071167344, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 56.43571786285524, + "height": 1005.9913615900234, + "seed": 260104298, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322228, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": 0.7426715513658445, + "gap": 5, + "fixedPoint": [ + 0.12866422431707777, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "r1r9aznra1GSBA8F4mXFR", + "focus": 0.0020803864406784382, + "gap": 5, + "fixedPoint": [ + -0.02087462585034013, + 0.49895980677966073 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1005.9913615900234 + ], + [ + 56.43571786285524, + 1005.9913615900234 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 607, + "versionNonce": 764861098, + "index": "b1l", + "isDeleted": false, + "id": "b_y8WPu_eBGlnCjKhGtc5", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1089.481889075204, + "y": 574.7802360343471, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 2088423967, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "mmEjLSllZHjuCvgfJq6ly", + "type": "text" + }, + { + "id": "gxE41qroXCFrB5WJHD43W", + "type": "arrow" + } + ], + "updated": 1724762949836, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 687, + "versionNonce": 551799402, + "index": "b1m", + "isDeleted": false, + "id": "mmEjLSllZHjuCvgfJq6ly", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1103.578879164122, + "y": 579.8802360343471, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 198.29588317871094, + "height": 37.800000000000004, + "seed": 1522087487, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762935806, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Spielfunktionen", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "b_y8WPu_eBGlnCjKhGtc5", + "originalText": "Spielfunktionen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 722, + "versionNonce": 461927798, + "index": "b1n", + "isDeleted": false, + "id": "nqO-ZPm4PDDGfNYayE1uv", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -29.91678699255958, + "y": -75.90723071167344, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 60.37399618153829, + "height": 1251.9401922735285, + "seed": 226430902, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322228, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QU8m0vfqf2iHrdz5Y-Ljd", + "focus": 0.7378642700346342, + "gap": 5, + "fixedPoint": [ + 0.1310678649826829, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "FzK1iPVLQMYwpk-Z1U5WU", + "focus": 0.0020803864406784374, + "gap": 5, + "fixedPoint": [ + -0.02087462585034013, + 0.49895980677966073 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1251.9401922735285 + ], + [ + 60.37399618153829, + 1251.9401922735285 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 1040, + "versionNonce": 1950550122, + "index": "b1q", + "isDeleted": false, + "id": "WLq27kvz0Ste3OiswDPxn", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 61.78138852828536, + "y": 983.2521234612144, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 38.358134933205605, + "height": 37.96954956997706, + "seed": 809020726, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322230, + "link": null, + "locked": false, + "startBinding": { + "elementId": "r1r9aznra1GSBA8F4mXFR", + "focus": 0.7432496718824831, + "gap": 5, + "fixedPoint": [ + 0.12837516405875854, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "Kz-O25yDWT3MaThQtf93w", + "focus": 0.004184100418415749, + "gap": 5, + "fixedPoint": [ + -0.027521401680613566, + 0.4979079497907916 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 37.96954956997706 + ], + [ + 38.358134933205605, + 37.96954956997706 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 485, + "versionNonce": 739492918, + "index": "b1qV", + "isDeleted": false, + "id": "vVy5YeIyPL3R3oTFTd3i4", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 110.15221560968507, + "y": 1384.628568241851, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 218.88521055456272, + "height": 47.800000000000004, + "seed": 714736697, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "eZLtYYGbxpPx15dzuWEYI" + }, + { + "id": "D5QpHUHE52PuCwObIQ9SE", + "type": "arrow" + } + ], + "updated": 1724763321663, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 355, + "versionNonce": 1220136310, + "index": "b1r", + "isDeleted": false, + "id": "eZLtYYGbxpPx15dzuWEYI", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 119.5028714240758, + "y": 1389.628568241851, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 200.18389892578125, + "height": 37.800000000000004, + "seed": 1025447193, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321663, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "locked Bereiche", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "vVy5YeIyPL3R3oTFTd3i4", + "originalText": "locked Bereiche", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 1070, + "versionNonce": 1358394858, + "index": "b1s", + "isDeleted": false, + "id": "bw3SEvlt9MV0QAgHmZ1Jp", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 61.34684167994324, + "y": 983.2521234612144, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 39.90727201491215, + "height": 104.28099719253476, + "seed": 1946875766, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322230, + "link": null, + "locked": false, + "startBinding": { + "elementId": "r1r9aznra1GSBA8F4mXFR", + "focus": 0.7468780730319176, + "gap": 5, + "fixedPoint": [ + 0.12656096348404128, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "lK0ZNxpOiGU3ZpEK5CdGL", + "focus": 0.004184100418415746, + "gap": 5, + "fixedPoint": [ + -0.02752140168061355, + 0.49790794979079367 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 104.28099719253476 + ], + [ + 39.90727201491215, + 104.28099719253476 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 522, + "versionNonce": 2037475318, + "index": "b1u", + "isDeleted": false, + "id": "5XgEi3EZb7cklviGWDAWn", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 107.81815560566997, + "y": 1314.6067681214145, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 218.88521055456272, + "height": 47.800000000000004, + "seed": 1148549721, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "LKzvmzhpPlHzogs5UMve3" + }, + { + "id": "p_u7rslMJcPHw6ujq3Rgz", + "type": "arrow" + } + ], + "updated": 1724763321664, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 397, + "versionNonce": 707590454, + "index": "b1v", + "isDeleted": false, + "id": "LKzvmzhpPlHzogs5UMve3", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 119.96881447181852, + "y": 1319.6067681214145, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 194.58389282226562, + "height": 37.800000000000004, + "seed": 342279993, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763321664, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "meine Bereiche", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "5XgEi3EZb7cklviGWDAWn", + "originalText": "meine Bereiche", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 1123, + "versionNonce": 1787724650, + "index": "b1w", + "isDeleted": false, + "id": "pS0Xl7-95fzix_i3hJG6j", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 66.12984003335978, + "y": 1229.2009541447194, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.50086556842311, + "height": 38.26898851399619, + "seed": 1230442922, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322230, + "link": null, + "locked": false, + "startBinding": { + "elementId": "FzK1iPVLQMYwpk-Z1U5WU", + "focus": 0.7438881229111772, + "gap": 4.999999999999886, + "fixedPoint": [ + 0.12805593854441144, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "1Pz_WZEPx4vPRyaeq-Xty", + "focus": 0.004184100418415749, + "gap": 5, + "fixedPoint": [ + -0.02284302346116538, + 0.497907949790794 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 38.26898851399619 + ], + [ + 36.50086556842311, + 38.26898851399619 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 1164, + "versionNonce": 551563498, + "index": "b1x", + "isDeleted": false, + "id": "p_u7rslMJcPHw6ujq3Rgz", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 67.1763196236246, + "y": 1229.2009541447194, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 35.64183598204538, + "height": 109.20581397669525, + "seed": 1041887722, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322230, + "link": null, + "locked": false, + "startBinding": { + "elementId": "FzK1iPVLQMYwpk-Z1U5WU", + "focus": 0.7351501749484591, + "gap": 4.999999999999886, + "fixedPoint": [ + 0.13242491252577046, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "5XgEi3EZb7cklviGWDAWn", + "focus": 0.004184100418406236, + "gap": 5, + "fixedPoint": [ + -0.02284302346116538, + 0.4979079497907987 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 109.20581397669525 + ], + [ + 35.64183598204538, + 109.20581397669525 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 538, + "versionNonce": 982716982, + "index": "b1y", + "isDeleted": false, + "id": "DJc_KrjDV00Jxpc1llVQy", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1094.9925395881824, + "y": 829.5680885084615, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 26875839, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "PDc6V-NoEJ8mQ__k9lICg", + "type": "text" + }, + { + "id": "PyRDa6nkpPGXFBJ22jOJN", + "type": "arrow" + } + ], + "updated": 1724762961005, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 600, + "versionNonce": 237217297, + "index": "b1z", + "isDeleted": false, + "id": "PDc6V-NoEJ8mQ__k9lICg", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1171.2194811541513, + "y": 834.6680885084616, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 74.03598022460938, + "height": 37.800000000000004, + "seed": 857655263, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762913959, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Paare", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "DJc_KrjDV00Jxpc1llVQy", + "originalText": "Paare", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 1204, + "versionNonce": 1036287594, + "index": "b20", + "isDeleted": false, + "id": "D5QpHUHE52PuCwObIQ9SE", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 68.19771630570135, + "y": 1229.2009541447194, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.954499303983724, + "height": 179.2276140971319, + "seed": 116746410, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763322230, + "link": null, + "locked": false, + "startBinding": { + "elementId": "FzK1iPVLQMYwpk-Z1U5WU", + "focus": 0.7266216655152068, + "gap": 4.999999999999886, + "fixedPoint": [ + 0.1366891672423967, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "vVy5YeIyPL3R3oTFTd3i4", + "focus": 0.004184100418406236, + "gap": 5, + "fixedPoint": [ + -0.02284302346116538, + 0.4979079497907987 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 179.2276140971319 + ], + [ + 36.954499303983724, + 179.2276140971319 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 519, + "versionNonce": 691405686, + "index": "b21", + "isDeleted": false, + "id": "kfuq_E44DiHAAq69dF47E", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1094.9925395881824, + "y": 894.6228429267634, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 781060511, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "kr-QoFQkCw3xfeblCzV3J", + "type": "text" + }, + { + "id": "Yhx6jySs54fA8bF3HePAK", + "type": "arrow" + } + ], + "updated": 1724762966023, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 586, + "versionNonce": 2085361105, + "index": "b22", + "isDeleted": false, + "id": "kr-QoFQkCw3xfeblCzV3J", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1144.893507643409, + "y": 899.7228429267634, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 126.68792724609375, + "height": 37.800000000000004, + "seed": 1685683647, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762913959, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Spielbrett", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kfuq_E44DiHAAq69dF47E", + "originalText": "Spielbrett", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 543, + "versionNonce": 1271636842, + "index": "b23", + "isDeleted": false, + "id": "1K7dAVCxa1ykZd5n0WWE9", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1094.992539588182, + "y": 967.8094416473533, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 919984095, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "khrFQBl4j0ZBApsXwrUal", + "type": "text" + }, + { + "id": "_cd1tXsZTVVwrCrrvLxvb", + "type": "arrow" + } + ], + "updated": 1724762972732, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 616, + "versionNonce": 325817745, + "index": "b24", + "isDeleted": false, + "id": "khrFQBl4j0ZBApsXwrUal", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1109.0895296771, + "y": 972.9094416473533, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 198.29588317871094, + "height": 37.800000000000004, + "seed": 657294335, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762913959, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Spielfunktionen", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1K7dAVCxa1ykZd5n0WWE9", + "originalText": "Spielfunktionen", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 675, + "versionNonce": 42806041, + "index": "b25", + "isDeleted": false, + "id": "6g0qLYIhCuM69Xf6T58no", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -458.7009895280118, + "y": -166.91517822634265, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.6741374320203, + "height": 47.800000000000004, + "seed": 1134171129, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "lWC7xBRHiD3f0dFcyR39e", + "type": "text" + } + ], + "updated": 1724762912408, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 733, + "versionNonce": 1036673017, + "index": "b26", + "isDeleted": false, + "id": "lWC7xBRHiD3f0dFcyR39e", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -386.3359056752829, + "y": -161.91517822634265, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 60.9439697265625, + "height": 37.800000000000004, + "seed": 587672793, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762912408, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "User", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "6g0qLYIhCuM69Xf6T58no", + "originalText": "User", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 699, + "versionNonce": 269450199, + "index": "b27", + "isDeleted": false, + "id": "eYsTRT-s2jmVbVm5Lly_T", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -440.02850949589515, + "y": -94.55931810189068, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.6741374320203, + "height": 48, + "seed": 572701559, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "pOPZIEJf9ZA9AYQFKyb78", + "type": "text" + } + ], + "updated": 1724762921159, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 762, + "versionNonce": 425156313, + "index": "b28", + "isDeleted": false, + "id": "pOPZIEJf9ZA9AYQFKyb78", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -375.5814249107444, + "y": -89.45931810189069, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 76.77996826171875, + "height": 37.800000000000004, + "seed": 1934242967, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762922075, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Name", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "eYsTRT-s2jmVbVm5Lly_T", + "originalText": "Name", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 747, + "versionNonce": 337781354, + "index": "b29", + "isDeleted": false, + "id": "i5mJP0e_07DJ_uuzPYA6K", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1046.2498114709006, + "y": 420.9496250797732, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 36.87677022059006, + "height": 59.81886857140171, + "seed": 1301850090, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763178208, + "link": null, + "locked": false, + "startBinding": { + "elementId": "DlcSpY0t-bEfMNzCUU7rz", + "focus": 0.7632328411369598, + "gap": 5, + "fixedPoint": [ + 0.1183835794315201, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "heHppwI4rOM8vklJBBTlf", + "focus": 0.004166666666667614, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 59.81886857140171 + ], + [ + 36.87677022059006, + 59.81886857140171 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 699, + "versionNonce": 1661756569, + "index": "b2A", + "isDeleted": false, + "id": "sf-d4MxqYTtE946FXQkUJ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -435.3603894878658, + "y": -17.535337969409312, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.6741374320203, + "height": 47.800000000000004, + "seed": 2081699191, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "h1cgfJYFYL-RPEsVOrbl6", + "type": "text" + } + ], + "updated": 1724762967601, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 763, + "versionNonce": 220621177, + "index": "b2B", + "isDeleted": false, + "id": "h1cgfJYFYL-RPEsVOrbl6", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -369.0612998978322, + "y": -12.535337969409312, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 73.07595825195312, + "height": 37.800000000000004, + "seed": 1157394071, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762967601, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Email", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "sf-d4MxqYTtE946FXQkUJ", + "originalText": "Email", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 778, + "versionNonce": 56102890, + "index": "b2C", + "isDeleted": false, + "id": "oUfoFMNFqLkawVeOykgcR", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1045.284242763749, + "y": 420.9496250797732, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 37.84233892774023, + "height": 118.09708607113066, + "seed": 1953342442, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763178209, + "link": null, + "locked": false, + "startBinding": { + "elementId": "DlcSpY0t-bEfMNzCUU7rz", + "focus": 0.7717592157202807, + "gap": 5, + "fixedPoint": [ + 0.1141203921398597, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "OTOyP0Z7HzkHx8g_xe8mf", + "focus": 0.004166666666667615, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 118.09708607113066 + ], + [ + 37.84233892774023, + 118.09708607113066 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 804, + "versionNonce": 487628138, + "index": "b2D", + "isDeleted": false, + "id": "gxE41qroXCFrB5WJHD43W", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1044.7354169158227, + "y": 420.9496250797732, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 39.746472159381256, + "height": 177.73061095457388, + "seed": 1525614954, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763178209, + "link": null, + "locked": false, + "startBinding": { + "elementId": "DlcSpY0t-bEfMNzCUU7rz", + "focus": 0.7766055769639391, + "gap": 5, + "fixedPoint": [ + 0.11169721151803057, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "b_y8WPu_eBGlnCjKhGtc5", + "focus": 0.004166666666667614, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 177.73061095457388 + ], + [ + 39.746472159381256, + 177.73061095457388 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 817, + "versionNonce": 1476456374, + "index": "b2E", + "isDeleted": false, + "id": "PyRDa6nkpPGXFBJ22jOJN", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1048.0929493059239, + "y": 808.0930884180393, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 41.89959028225849, + "height": 45.37500009042219, + "seed": 1702188010, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172728, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kWxf7N1o9tT0-UIRaDblb", + "focus": 0.7996722819934348, + "gap": 5, + "fixedPoint": [ + 0.10016385900328274, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "DJc_KrjDV00Jxpc1llVQy", + "focus": 0.004166666666667613, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 45.37500009042219 + ], + [ + 41.89959028225849, + 45.37500009042219 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 840, + "versionNonce": 847575606, + "index": "b2H", + "isDeleted": false, + "id": "Yhx6jySs54fA8bF3HePAK", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1048.0264559647462, + "y": 808.0930884180393, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 41.966083623436134, + "height": 110.42975450872405, + "seed": 1387183850, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172728, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kWxf7N1o9tT0-UIRaDblb", + "focus": 0.8002594459414563, + "gap": 5, + "fixedPoint": [ + 0.09987027702927195, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "kfuq_E44DiHAAq69dF47E", + "focus": 0.004166666666667614, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 110.42975450872405 + ], + [ + 41.966083623436134, + 110.42975450872405 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 725, + "versionNonce": 1277255737, + "index": "b2I", + "isDeleted": false, + "id": "CA26A9QS08juCJ0jO6m2G", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -428.35820947582187, + "y": 50.15240214701359, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 205.6741374320203, + "height": 47.800000000000004, + "seed": 1513643481, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "Op1715ZP1R_VvCo062l2M", + "type": "text" + } + ], + "updated": 1724762972266, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 799, + "versionNonce": 1118921113, + "index": "b2J", + "isDeleted": false, + "id": "Op1715ZP1R_VvCo062l2M", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -381.33911866508515, + "y": 55.15240214701359, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 111.63595581054688, + "height": 37.800000000000004, + "seed": 1191262905, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762976697, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Social ID", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CA26A9QS08juCJ0jO6m2G", + "originalText": "Social ID", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 880, + "versionNonce": 1181246646, + "index": "b2K", + "isDeleted": false, + "id": "_cd1tXsZTVVwrCrrvLxvb", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1049.3727840495367, + "y": 808.0930884180393, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 40.61975553864522, + "height": 183.61635322931397, + "seed": 1258440694, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763172729, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kWxf7N1o9tT0-UIRaDblb", + "focus": 0.7883708071755701, + "gap": 5, + "fixedPoint": [ + 0.10581459641221505, + 1.0639285416666664 + ] + }, + "endBinding": { + "elementId": "1K7dAVCxa1ykZd5n0WWE9", + "focus": 0.004166666666667615, + "gap": 5, + "fixedPoint": [ + -0.02207604316546763, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 183.61635322931397 + ], + [ + 40.61975553864522, + 183.61635322931397 + ] + ], + "elbowed": true + }, + { + "type": "rectangle", + "version": 779, + "versionNonce": 1228910617, + "index": "b2L", + "isDeleted": false, + "id": "JTVeAsunBNQw9qX0Iy-4t", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -433.02632948385116, + "y": 122.50826227146567, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 243.01909749625372, + "height": 47.80000000000001, + "seed": 469949239, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "ZvUZ2bmNkbALc06AIv6mM", + "type": "text" + } + ], + "updated": 1724762999065, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 844, + "versionNonce": 1977894137, + "index": "b2M", + "isDeleted": false, + "id": "ZvUZ2bmNkbALc06AIv6mM", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -414.85671603845867, + "y": 127.50826227146567, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 206.67987060546875, + "height": 37.800000000000004, + "seed": 1133534295, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724762999065, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Geburtsurkunde", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "JTVeAsunBNQw9qX0Iy-4t", + "originalText": "Geburtsurkunde", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 801, + "versionNonce": 1440465783, + "index": "b2N", + "isDeleted": false, + "id": "u2lNg5azeqx1W4lHVIpDJ", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -433.02632948385116, + "y": 192.5300623919031, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 243.01909749625372, + "height": 47.80000000000001, + "seed": 224315735, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "geFbt4ueMMu0V_-JG7NYj", + "type": "text" + } + ], + "updated": 1724763002905, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 871, + "versionNonce": 358075001, + "index": "b2O", + "isDeleted": false, + "id": "geFbt4ueMMu0V_-JG7NYj", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -345.3547705428532, + "y": 197.5300623919031, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 67.67597961425781, + "height": 37.800000000000004, + "seed": 461997687, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763005286, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "IBAN", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "u2lNg5azeqx1W4lHVIpDJ", + "originalText": "IBAN", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 113, + "versionNonce": 635373366, + "index": "b2P", + "isDeleted": false, + "id": "WWwPN_UvQQDylPPNvgUo2", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1435.9685968881272, + "y": -177.07881078511946, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 239.5252511756291, + "height": 96.13598516572871, + "seed": 2134255863, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "4Ur0AwI4WjPz3uEn6xbKS", + "type": "text" + }, + { + "id": "XihGYRdbd3cGqBv8_w60f", + "type": "arrow" + } + ], + "updated": 1724763468973, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 63, + "versionNonce": 1459063481, + "index": "b2Q", + "isDeleted": false, + "id": "4Ur0AwI4WjPz3uEn6xbKS", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1520.7112410916643, + "y": -147.91081820225511, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 70.03996276855469, + "height": 37.800000000000004, + "seed": 110359063, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763023165, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Logik", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "WWwPN_UvQQDylPPNvgUo2", + "originalText": "Logik", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 765, + "versionNonce": 1911094769, + "index": "b2R", + "isDeleted": false, + "id": "kNvlcGIX653BPJrwGbIHw", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -428.8075558145112, + "y": 295.67697932489875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 349.3367201057707, + "height": 86, + "seed": 1291964735, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "I_FnqszlOeX9JbVXDYOyn", + "type": "text" + } + ], + "updated": 1724763033098, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 881, + "versionNonce": 1691752401, + "index": "b2S", + "isDeleted": false, + "id": "I_FnqszlOeX9JbVXDYOyn", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": -400.8910878514696, + "y": 319.7769793248988, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 293.5037841796875, + "height": 37.800000000000004, + "seed": 2085835103, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763033098, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Durchschnittsverdienst", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kNvlcGIX653BPJrwGbIHw", + "originalText": "Durchschnittsverdienst", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 1314, + "versionNonce": 1738757110, + "index": "b2T", + "isDeleted": false, + "id": "rpyutHs6BegVB9OngLQDR", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 94.74246092212309, + "y": 552.9418556208062, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 478625009, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "JK3iN0KHvFeyAimLrPenV", + "type": "text" + }, + { + "id": "APQ-F3sprAL_APPnWh3U3", + "type": "arrow" + } + ], + "updated": 1724763280148, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1447, + "versionNonce": 318058218, + "index": "b2U", + "isDeleted": false, + "id": "JK3iN0KHvFeyAimLrPenV", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 102.38344972930292, + "y": 558.0418556208062, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 211.2078857421875, + "height": 37.800000000000004, + "seed": 1062500049, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763235008, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Plantle Interface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "rpyutHs6BegVB9OngLQDR", + "originalText": "Plantle Interface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 1024, + "versionNonce": 55365686, + "index": "b2V", + "isDeleted": false, + "id": "7dw6EYzFJKphtD-S8Oo_s", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 96.95711817435415, + "y": 640.4180980368171, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 86, + "seed": 1142833535, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "CpycweJGbqlAJFOSKGDdl", + "type": "text" + }, + { + "id": "APQ-F3sprAL_APPnWh3U3", + "type": "arrow" + }, + { + "id": "I5FdNyVMe-IKYrclnhpd8", + "type": "arrow" + }, + { + "id": "NHMK4wYchJBlg4gwdFshB", + "type": "arrow" + } + ], + "updated": 1724763295847, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1120, + "versionNonce": 1950240438, + "index": "b2W", + "isDeleted": false, + "id": "CpycweJGbqlAJFOSKGDdl", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 132.04009306551836, + "y": 645.6180980368172, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 156.32391357421875, + "height": 75.60000000000001, + "seed": 1861728671, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763262194, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Plant Crush \nInterface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "7dw6EYzFJKphtD-S8Oo_s", + "originalText": "Plant Crush Interface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "rectangle", + "version": 1011, + "versionNonce": 237680490, + "index": "b2X", + "isDeleted": false, + "id": "v6pFziSXet_R14ptidIgY", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 98.33392908669214, + "y": 768.3786921451757, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 226.48986335654715, + "height": 48, + "seed": 2078927615, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "rEINy0W8Doh5dI678StDF", + "type": "text" + }, + { + "id": "NHMK4wYchJBlg4gwdFshB", + "type": "arrow" + } + ], + "updated": 1724763298861, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1093, + "versionNonce": 556488310, + "index": "b2Y", + "isDeleted": false, + "id": "rEINy0W8Doh5dI678StDF", + "fillStyle": "solid", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 104.67291594074698, + "y": 773.4786921451757, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 213.8118896484375, + "height": 37.800000000000004, + "seed": 1385313055, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763265593, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 6, + "text": "Memory Inteface", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "v6pFziSXet_R14ptidIgY", + "originalText": "Memory Inteface", + "autoResize": true, + "lineHeight": 1.35 + }, + { + "type": "arrow", + "version": 774, + "versionNonce": 1535856246, + "index": "b2Z", + "isDeleted": false, + "id": "APQ-F3sprAL_APPnWh3U3", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 45.94947943173318, + "y": 251.04704407038687, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 43.792981490389906, + "height": 325.79481155041935, + "seed": 2060020598, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763280148, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7772407207587563, + "gap": 5.000000000000028, + "fixedPoint": [ + 0.11137963962062185, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "rpyutHs6BegVB9OngLQDR", + "focus": 0.0041666666666676155, + "gap": 5, + "fixedPoint": [ + -0.02207604316546738, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 325.79481155041935 + ], + [ + 43.792981490389906, + 325.79481155041935 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 854, + "versionNonce": 955568874, + "index": "b2a", + "isDeleted": false, + "id": "I5FdNyVMe-IKYrclnhpd8", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 46.16548504914499, + "y": 251.04704407038687, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 45.79163312520916, + "height": 432.27105396643026, + "seed": 1034710698, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763290175, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7754371061807392, + "gap": 5.000000000000028, + "fixedPoint": [ + 0.1122814469096305, + 1.052009661016949 + ] + }, + "endBinding": { + "elementId": "7dw6EYzFJKphtD-S8Oo_s", + "focus": 0.0023255813953493667, + "gap": 5, + "fixedPoint": [ + -0.02207604316546738, + 0.49883720930232534 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 432.27105396643026 + ], + [ + 45.79163312520916, + 432.27105396643026 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 951, + "versionNonce": 1446080246, + "index": "b2b", + "isDeleted": false, + "id": "NHMK4wYchJBlg4gwdFshB", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 47.89347306466426, + "y": 251.04704407038687, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 45.440456022027874, + "height": 541.2316480747888, + "seed": 630923766, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763301751, + "link": null, + "locked": false, + "startBinding": { + "elementId": "j9DRT4gJDcPgHEgkOw4ku", + "focus": 0.7610086648616045, + "gap": 5, + "fixedPoint": [ + 0.11949566756919781, + 1.0520096610169494 + ] + }, + "endBinding": { + "elementId": "v6pFziSXet_R14ptidIgY", + "focus": 0.004166666666667614, + "gap": 5, + "fixedPoint": [ + -0.02207604316546738, + 0.4979166666666662 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 541.2316480747888 + ], + [ + 45.440456022027874, + 541.2316480747888 + ] + ], + "elbowed": true + }, + { + "type": "arrow", + "version": 794, + "versionNonce": 196137514, + "index": "b2c", + "isDeleted": false, + "id": "XihGYRdbd3cGqBv8_w60f", + "fillStyle": "cross-hatch", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 750.6131242692546, + "y": -303.38349843853837, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 805.0180982066871, + "height": 121.30468765341891, + "seed": 995783542, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1724763516688, + "link": null, + "locked": false, + "startBinding": { + "elementId": "GOgYWsJqMKWtfglBG0S-2", + "focus": 0.000987860273972828, + "gap": 5, + "fixedPoint": [ + 0.4995060698630136, + 1.0600948333333333 + ] + }, + "endBinding": { + "elementId": "WWwPN_UvQQDylPPNvgUo2", + "focus": -0.0008349850340128459, + "gap": 4.999999999999993, + "fixedPoint": [ + 0.49958250748299315, + -0.05200966101694913 + ] + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 60.652343826709455 + ], + [ + 805.0180982066871, + 60.652343826709455 + ], + [ + 805.0180982066871, + 121.30468765341891 + ] + ], + "elbowed": true + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/Software-Engineering/Projektziele(table).tgn b/Software-Engineering/Projektziele(table).tgn new file mode 100644 index 0000000..284452b --- /dev/null +++ b/Software-Engineering/Projektziele(table).tgn @@ -0,0 +1 @@ +{"rows_views":[[{"style":{"borders":"ltrb","font_style":{"bold":true},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"ltrb","font_style":{"bold":true},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"ltrb","font_style":{"bold":true},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"ltrb","font_style":{"bold":true},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"ltrb","font_style":{"bold":true},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}],[{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}},{"style":{"borders":"","font_style":{},"text_color":"","bg_color":"","halign":"center","valign":"top","padding":{"top":10,"bottom":10,"left":5,"right":5},"border_color":""}}]],"model":{"rows":[[{"value":"Nr.","cspan":1,"rspan":1,"markup":[1,3]},{"value":"Klassifizierung","cspan":1,"rspan":1,"markup":[2,15]},{"value":"Beschreibung","cspan":1,"rspan":1,"markup":[1,12]},{"value":"Messkriterium","cspan":1,"rspan":1,"markup":[1,13]},{"value":"Priorität","cspan":1,"rspan":1,"markup":[1,9]}],[{"value":"1","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Hauptszene","cspan":1,"rspan":1,"markup":[1,10]},{"value":"Hintergrund und Logik zu Spielerbewegung sowie\nPflanzenplazierlogik wurde implementiert.","cspan":1,"rspan":1,"markup":[1,88]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"2","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Titelmenü (Startmenü des Spiels)","cspan":1,"rspan":1,"markup":[1,32]},{"value":"Zugehörige Menüpunkte zum Starten, Laden eines \nSpiels, zur Charakterauswahl und zu den Einstellungen \nwurden erstellt, dessen Logik implementiert und getestet.","cspan":1,"rspan":1,"markup":[1,160]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"3","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Shopszene","cspan":1,"rspan":1,"markup":[1,9]},{"value":"Logik zum Kaufen und Verkaufen von Pflanzen, Kauf von\nPflanzensamen und Shopinterface wurde implementiert \nund getestet.","cspan":1,"rspan":1,"markup":[1,120]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"4","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Weltszene","cspan":1,"rspan":1,"markup":[1,9]},{"value":"Szene sammt Szenenwechsellogik und -animation wurde \nimplementiert und getestet.","cspan":1,"rspan":1,"markup":[1,80]},{"value":"Kann","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"5","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Implementierung der Pflanzenlogik bezüglich\nBewässerung und Pflanzenwachstum","cspan":1,"rspan":1,"markup":[1,76]},{"value":"Realistische Funktionalität wurde nach der Implementierung\ngetestet.","cspan":1,"rspan":1,"markup":[1,68]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"6","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Backend in Form einer Datenbank \nzur Speicherung aller Spieler- und Pflanzendaten","cspan":1,"rspan":1,"markup":[1,81]},{"value":"Spieler und Pflanzendaten werden korrekt gespeichert und \nausgelesen, Debuggingtools dienen zum Testen der Werte.","cspan":1,"rspan":1,"markup":[1,113]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"7","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Bereitstellung von Github Actions zum automatisierten \nKompilieren des Papers sowie des Spiels \nals ausführbare Datei","cspan":1,"rspan":1,"markup":[1,117]},{"value":"Testweises Kompilieren der aktuellen Stände von Paper\nund Spielprojekt auf Github","cspan":1,"rspan":1,"markup":[1,81]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"8","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Texturen für Pflanzen, Töpfe und\nweitere Assets des Spiels","cspan":1,"rspan":1,"markup":[1,58]},{"value":"Speicherung aller benötigten Assets auf Github mit \nentsprechender Verfügbarkeit in der Spielengine","cspan":1,"rspan":1,"markup":[1,99]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"9","cspan":1,"rspan":1,"markup":[1,1]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Logoerstellung","cspan":1,"rspan":1,"markup":[1,14]},{"value":"Nutzung eines fertigen Logos in allen Facetten des Spiel\nmit der Zufriedenheit aller Gruppenmitglieder","cspan":1,"rspan":1,"markup":[1,102]},{"value":"Soll","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"10","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Hauptziel","cspan":1,"rspan":1,"markup":[1,9]},{"value":"Fertigstellung des Papers","cspan":1,"rspan":1,"markup":[1,25]},{"value":"Alle Kapitel wurden fertig gestellt mit zusätzlicher \nUnterzeichnung der ehrenwörtlichen Erklärung aller\nGruppenmitglieder.","cspan":1,"rspan":1,"markup":[1,123]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"11","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Termin","cspan":1,"rspan":1,"markup":[1,6]},{"value":"Fertigstellung der Spieleentwicklung","cspan":1,"rspan":1,"markup":[1,36]},{"value":"Das Spiel wird am 29.10.2024 um 23:59 Uhr fertig\ngestellt in seiner Entwicklung.","cspan":1,"rspan":1,"markup":[1,80]},{"value":"Kann","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"12","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Termin","cspan":1,"rspan":1,"markup":[1,6]},{"value":"Endpräsentation","cspan":1,"rspan":1,"markup":[1,15]},{"value":"Vorstellung des Projekts bei der Endpräsentation mit \nzusätzlicher Abgabe der Folien bei Moodle \nbis zum 29.10.2024 um 23:59 Uhr","cspan":1,"rspan":1,"markup":[1,128]},{"value":"Muss","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"13","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Termin","cspan":1,"rspan":1,"markup":[1,6]},{"value":"Abschluss des Projektes","cspan":1,"rspan":1,"markup":[1,23]},{"value":"Pünktliche Abgabe des Source-Codes und der \nEndpäsentation auf Moodle am 29.10.2024 \num 23:59 Uhr und des Papers am 05.11.2024 \num 23:59 Uhr","cspan":1,"rspan":1,"markup":[1,140]},{"value":"Soll","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"14","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Sehr gute Bewertung des Projekts","cspan":1,"rspan":1,"markup":[1,32]},{"value":"Gewünschte Bewertung vom Stakeholder wird erreicht","cspan":1,"rspan":1,"markup":[1,50]},{"value":"Soll","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"15","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Lerneffekt bei Nutzern des Spiels zum Wissen über\nPflanzen und Ökosysteme","cspan":1,"rspan":1,"markup":[1,73]},{"value":"Feedback von Nutzern des Spiels","cspan":1,"rspan":1,"markup":[1,31]},{"value":"Soll","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"16","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Sozial","cspan":1,"rspan":1,"markup":[1,6]},{"value":"Entwicklung von Gewohnheiten bei der Pflanzenpflege\nder Haus- oder Gartenpflanzen des Nutzers","cspan":1,"rspan":1,"markup":[1,93]},{"value":"Feedback von Nutzern des Spiels","cspan":1,"rspan":1,"markup":[1,31]},{"value":"Soll","cspan":1,"rspan":1,"markup":[1,4]}],[{"value":"17","cspan":1,"rspan":1,"markup":[1,2]},{"value":"Leistung","cspan":1,"rspan":1,"markup":[1,8]},{"value":"Nutzer haben Spaß am Spielen von Grow Green","cspan":1,"rspan":1,"markup":[1,43]},{"value":"Feedback von Nutzern des Spiels","cspan":1,"rspan":1,"markup":[4,31]},{"value":"Kann","cspan":1,"rspan":1,"markup":[1,4]}]]},"theme":null,"fixed_layout":false,"markup":{"instances":[{},{"style":{"fontWeight":"","fontStyle":"","textDecoration":"","color":"","backgroundColor":""}},{"style":{"fontWeight":"","textDecoration":"","color":"","backgroundColor":""}},null,{"style":{"fontWeight":"400","fontStyle":"normal","textDecoration":"","color":"","backgroundColor":""}},null]},"options":{"table_caption":"","table_label":"tab:my-table"}} \ No newline at end of file diff --git a/Software-Engineering/Softwareengineering Paper von Philip Algosim.pdf b/Software-Engineering/Softwareengineering Paper von Philip Algosim.pdf new file mode 100644 index 0000000..455fdac Binary files /dev/null and b/Software-Engineering/Softwareengineering Paper von Philip Algosim.pdf differ diff --git a/Software-Engineering/Steckbrief.xlsx b/Software-Engineering/Steckbrief.xlsx new file mode 100644 index 0000000..0d95bf8 Binary files /dev/null and b/Software-Engineering/Steckbrief.xlsx differ diff --git a/Software-Engineering/greenhouse.png b/Software-Engineering/greenhouse.png new file mode 100644 index 0000000..e68b9ba Binary files /dev/null and b/Software-Engineering/greenhouse.png differ diff --git a/Studienarbeit I/.DS_Store b/Studienarbeit I/.DS_Store new file mode 100644 index 0000000..49fd9c7 Binary files /dev/null and b/Studienarbeit I/.DS_Store differ diff --git a/Studienarbeit I/Inhalte für Kapitel.md b/Studienarbeit I/Inhalte für Kapitel.md new file mode 100644 index 0000000..44b4fc1 --- /dev/null +++ b/Studienarbeit I/Inhalte für Kapitel.md @@ -0,0 +1,75 @@ +# Inhalte für Kapitel + +### 1. Einleitung (250 Wörter) ✅ +- grobe Einführung ins Thema +- Ziel der Arbeit darlegen +- folgende Kapitel erwähnen + +### 2. Problemstellung (500 Wörter) ✅ +Teilabschnitte in Absätzen erklären ohne Überschriften +#### 1. Was ist das eigentliche Problem? (~150 Wörter) +- Leser-Schreiber-Problem +- Datenkorruption durch unkoordinierte Schreibvorgänge +- Performance-Einbußen durch zu restriktive Synchronisation +#### 2. Warum ist das relevant/schwierig? (~150 Wörter) +- Timing-Probleme sind schwer vorhersagbar +- Debugging von Synchronisationsfehlern ist aufwendig +#### 3. Was fehlt bisher? (~100 Wörter) +- Keine intuitive Visualisierung solcher Synchronisationsprobleme +- Schwer verständlich für Lernende/Entwickler, da das Problem schon gelöst ist +- Abstrakte Konzepte bleiben theoretisch +#### 4. Konkrete Anforderungen (~100 Wörter) +- Entwicklung einer Anwendung, die diese Probleme **sichtbar macht** +- Desktop-Anwendung mit zwei kommunizierenden Instanzen +- Praktisches Verständnis fördern +**Problemstellung = "Hier sind die konkreten Schwierigkeiten, die existieren, und das will ich dagegen tun."** + +### 3. Theoretisch Grundlagen (1000 Wörter) ✅ +- Leser-Schreiber-Problem (400 Wörter) + - Problemdefinition + - Klassische Varianten + - Theoretische Lösungsansätze +- ISO/OSI Modell (270 Wörter) + - Relevante Schichten für Ihr Projekt + - Fokus auf Transport- und Anwendungsschicht +- TCP (280 Wörter) + - Ist Anforderung fürs Projekt + - Verbindungsaufbau/-abbau + - Zuverlässige Datenübertragung + - Relevanz für Ihr Problem + +### 4. Entwurf (1000 Wörter)✅ +Grundsätzlich nur Struktur, kein Code genau erklären! +#### 4.1 Systemarchitektur (300 Wörter)✅ +- Gesamtübersicht des Systems +- Komponentendiagramm +#### 4.2 Frontend (330 Wörter)✅ +- Struktureller Aufbau vom Frontend +- Verwendete Technologien/Bibliotheken +- Diagramm für Aufbau +- Abläufe grob erklären für UI Aufbau +- Visualisierungskonzept +#### 4.3 Backend (400 Wörter) +- Struktureller Aufbau vom Backend +- Synchronisationsstrategie +- Diagramm für Aufbau +- Abläufe grob erklären für Serveraufbau mit Portlistening + +### 5. Algorithmen (1300 Wörter)✅ +Unter anderem Go-Bibliotheken erklären bzw. Abwägung zwischen Go-Bibliotheken! + +### 6. Diskussion von Ergebnissen (500 Wörter) ✅ +- Auf konkrete Ergebnisse in der Software eingehen wie die aktuelle Lösung des Verbindungshandlings z.B. +- Vergleich verschiedener Lösungsansätze +- Limitationen der aktuellen Implementierung +- Skalierbarkeit + +### Fazit (380 Wörter) ✅ +- Zusammenfassung der Ergebnisse +- Erreichte Ziele vs. ursprüngliche Anforderungen +- Abschluss mit kleiner Reflexion des Projekts +- Anregungen/Ideen für die Zukunft +- Möglichkeiten für Studienprojekt II + +### Anhang +- Längere Codesnippets zum Verweisen \ No newline at end of file diff --git a/Studienarbeit I/Studienarbeit_I___Network_Interaction_in_Go.zip b/Studienarbeit I/Studienarbeit_I___Network_Interaction_in_Go.zip new file mode 100644 index 0000000..8f9e3f2 Binary files /dev/null and b/Studienarbeit I/Studienarbeit_I___Network_Interaction_in_Go.zip differ diff --git a/Studienarbeit I/TAG DER INFORMATIK Poster - Network Interaction in GoLang (Alexander Betke, Theo Leuthardt).pdf b/Studienarbeit I/TAG DER INFORMATIK Poster - Network Interaction in GoLang (Alexander Betke, Theo Leuthardt).pdf new file mode 100644 index 0000000..1c0672f Binary files /dev/null and b/Studienarbeit I/TAG DER INFORMATIK Poster - Network Interaction in GoLang (Alexander Betke, Theo Leuthardt).pdf differ diff --git a/Studienarbeit II/.DS_Store b/Studienarbeit II/.DS_Store new file mode 100644 index 0000000..78bab4b Binary files /dev/null and b/Studienarbeit II/.DS_Store differ diff --git a/Studienarbeit II/Inhalte.md b/Studienarbeit II/Inhalte.md new file mode 100644 index 0000000..bcb9ca1 --- /dev/null +++ b/Studienarbeit II/Inhalte.md @@ -0,0 +1,28 @@ +--- +share_link: https://share.note.sx/kce43il1#4EXkK8s6Yf+GsV46leOCXZUiTeIrCIxRNvupy6vOwU8 +share_updated: 2025-12-09T13:51:04+01:00 +--- + +# Inhaltswünsche von Zimmi + +- Funktionale und Nichtfunktionale Anforderungen +- Literaturarbeit +- Grafiken/Struktogramme zu Aufbau und Kommunikation der Modelle, Aufbau des Architektur Stacks, TCP Protokoll Struktur (**Entwurfskapitel**) +- Screenshots der Anwendung in Light Mode (**Algorithmenkapitel** oder **Anhang**) + +# Inhaltsverzeichnis + +1. **Abstract** +2. **Einleitung** +3. **Problemstellung** +4. **Anforderungsanalyse** + 1. Funktionale + 2. Nichtfunktionale +5. **Theoretische Grundlagen** (Erklärung aller notwendigen Prinzipien für die Entwicklung der Erweiterung, z.B. tiefere theoretische  Erklärung des Findens von anderen Instanzen im lokalen Netzwerk) +6. **Entwurf** (Referenzen zu Anforderungen) + 1. Strukturelle Veränderungen im Backend + 2. Strukturelle Veränderungen im Frontend +7. **Algorithmen** (Referenzen zu Anforderungen) + 1. Pro konkreter Codeänderung ein Unterabschnitt +8. **Diskussion** (Vergleich Vorher/Nachher nach der Erweiterung der Software in Aspekten wie der Nutzerfreundlichkeit und der Nutzbarkeit der Software) +9. **Fazit** \ No newline at end of file diff --git a/Studienarbeit II/Studienarbeit_2_Leuthardt_Betke.pdf b/Studienarbeit II/Studienarbeit_2_Leuthardt_Betke.pdf new file mode 100644 index 0000000..65d3809 Binary files /dev/null and b/Studienarbeit II/Studienarbeit_2_Leuthardt_Betke.pdf differ diff --git a/Studienarbeit II/Vortragsnotizen.md b/Studienarbeit II/Vortragsnotizen.md new file mode 100644 index 0000000..787ce92 --- /dev/null +++ b/Studienarbeit II/Vortragsnotizen.md @@ -0,0 +1,46 @@ +# Vortragsnotizen: + +## 1. Status Quo (auch Randbedingungen) +### Technologien +- Golang als Programmiersprache (unverändert) +- Goland als IDE (in Studienprojekt I) +- VSCode (Editor mit Extension wegen besserer WSL Kompatibität) +- Fyne als Frontend-Go-Library (unverändert) +- Überlegung: Frontend-Framework als Frontend mit REST-API Kommunikation (React, Angular, Vue) + - mehr Aufwand der nur die Inconvinience von Fyne lösen würde + - Probleme mit Wails für Web-Framework-Desktop Apps + - somit mehr Aufwand als funktionale Veränderungen + - deshalb bei Fyne bleiben mit Kommunikation über Signal Channel + +- TCP/IP als Protokoll weiterhin +- Testing: Zwei Szenarien: + - Zwei Computer (inconvinient) + - Zwei Instanzen auf dem selben Computer oder zwei VMs haben sich eher bewährt wegen Zeiteffizienz + +### Funktionalitäten +- Bisher bauen wir auf einer Software auf mit: + - Netzwerk: Lokale automatische TCP-Verbindungen + - TCP-Paketversand automatisch in drei verschiedenen Verzögerungen + - Pakete werden visualisiert über Balkendiagramme + - Verbindungsstatus LED für den User + - Dark Mode für Barriefreiheit, wie reduzierte Augenbelastung und bessere Lesbarkeit + - Fenster kann im Vollbild genutzt werden mit automatischer Skalierung der UI-Elemente + - Cross-Platform kompatibel, Auslieferung für Windows, Linux und MacOS + +## Frontend-Erweiterungen +### Peer-Discovery +- Vorher: Nutzer kann nicht sehen mit welchem anderen Peer er verbunden ist, nur dass er überhaupt verbunden ist oder nicht +- Snapdrop UI nicht realisiert weil: + - Fyne arbeitet mit statischen Layouts und nativen Widgets + - Radar-Zeichnung im Canvas zu komplex zur Erhaltung der Wartbarkeit des Code + - Stattdessen Stärke von Fyne: Grid-Layout + - Für Snapdrop Frontend-Austausch durch Web-Framework nötig leider (besser lösbar darin) + +- **Button Grid** für verfügbare Instanzen, blau/weiß oder blau/schwarz für hohen kontrast +- Grid wird vom Backend alle 100ms aktualisiert +- **Responsiveness im Button Grid Container** : + - Schmales Fenster: Nur zwei Buttons nebeneinander + - Breites Fenster: Vier Buttons nebeneinander, +- Vorher: User klickt auf Button -> verbindet sich -> kann nur disconnecten indem er das Programm schließt +- Disconnect Button im verbunden Zustand +- Keine Peers werden angezeigt, weil die aktuelle Instanz schon verbunden ist \ No newline at end of file diff --git a/Studienarbeit II/Workspace fürs Schreiben.md b/Studienarbeit II/Workspace fürs Schreiben.md new file mode 100644 index 0000000..111d780 --- /dev/null +++ b/Studienarbeit II/Workspace fürs Schreiben.md @@ -0,0 +1,13 @@ +# Workspace Struktur + +studienarbeit/ +├── network-interaction/ +├── network-interaction-deepwiki/ +├── studienarbeit-i/ +└── studienarbeit-ii/ + +**Github-Repo Network-Interaction**: https://github.com/theoleuthardt/network-interaction +**Github-Repo Studienarbeit II**: https://github.com/theoleuthardt/studienarbeit-ii +**Deepwiki**: https://deepwiki.com/theoleuthardt/network-interaction/ +**DeepwikiToMarkdown**: https://github.com/zxmfke/deepwiki-md-chrome-extension + diff --git a/Studienarbeit II/deepwiki.zip b/Studienarbeit II/deepwiki.zip new file mode 100644 index 0000000..35e8b93 Binary files /dev/null and b/Studienarbeit II/deepwiki.zip differ diff --git a/Studienarbeit II/evaluation_studienarbeit_i.md b/Studienarbeit II/evaluation_studienarbeit_i.md new file mode 100644 index 0000000..0d99629 --- /dev/null +++ b/Studienarbeit II/evaluation_studienarbeit_i.md @@ -0,0 +1,101 @@ +# Evaluation +Diese Evaluation der Studienarbeit I ist in numerierte Teilbewertungskriterien unterteilt. +Jedes Kriterium hat Inhalte, die bewertet werden, einen Bewertungstext und eine Punktzahl. + +## 1. Theoretische Betrachtungen +### Inhalte des Bewertungskriteriums +- Literaturarbeit +- Kritische Diskussion voriger Arbeiten +- Nachvollzierbarkeit der Aussagen +- Entscheidungskriterien +- Argumentationsweise + +### Bewertung +Literaturarbeit ist vorhanden. Die vorigen Arbeiten werden ausführlich besprochen (Punkt 3.1). Argumentationsweise ist +logisch, die Entscheidungskriterien sind nachvollziehbar. + +### Punktzahl +20 von 20 + +## 2. Praktische Ausführung +### Inhalte des Bewertungskriteriums +- Analyse, Entwurf, Konzept +- Dis kussion von Realisierungsansätzen +- Evaluierung, Testen +- Praktische Anwendung fachlichen Wissens +- Auswahl und Einsatz von Hilfsmitteln + +### Bewertung +Die Anforderungsanalyse scheint spärlich zu sein: Im Punkt 2.3. sind neben den Anforderungen vielmehr die algorithmische +Vorgehensweise besprochen. Im Punkt 6 tauchen plötzlich "die Limits und Skalierbarkeit der Software" auf, die nicht unter +Anforderungen aufgelistet sind. Es wäre ratsam, die Anforderungen in funktionale und nicht-funktionale zu unterteilen und +strukturiert (z.B. als Tabelle) darzustellen [-2]. Die Anforderung bezüglich Sprache Go findet man dort auch nicht explizit, +obwohl in anderen Teile ist sie präsent. Die Programme sind strukturiert geschrieben. Fazit und Ausblick sind vorhanden. +Die im Studium erworbenen Kenntnisse sind fachlich umgesetzt. + +### Punktzahl +23 von 25 + +## 3. Eigeninitiative, Einsatz und Arbeitsstil +### Inhalte des Bewertungskriteriums +- Eigene Ideen, Selbstständigkeit +- Krit ikfähigkeit +- Arbeitsstil +- Arbeitsorganisation + +### Bewertung +Die Erarbeitung erfolgte selbstständig. Organisierte und strukturierte Arbeitsweise ist gut erkennbar. + +### Punktzahl +5 von 5 + +## 4. Inhalt der Dokumentation +### Inhalte des Bewertungskriteriums +- Fachlicher Gehalt +- Darstellung der Zielrichtung +- Definition der Randbedingungen +- Herausarbeiten der Schwerpunkte +- Diskussion der Ergebnisse + +### Bewertung +Ziele sind im Punkt 2 zu erkennen. Forschungsansatz und Vorgehensweise sind wohl durchdacht. Die Randbedingungen sind +leider nicht vorhanden, aber lassen sich teilweise im Text erkennen. Die Schwerpunkte sind passend erarbeitet und vorgestellt. +Es fehlen aber die im Punkt 2.3 versprochenen grafischen Darstellungen der funktionierenden Anwendung [-2]. Ergebnisse +sind kritisch evaluiert und diskutiert. + +### Punktzahl +18 von 20 + +## 5. Form der Dokumentation +### Inhalte des Bewertungskriteriums +- Gliederung, Übersichtlichkeit +- Stil, Grammatik +- Verweise, Zitierungen +- Literaturverzeichnis, Literaturquellen + +### Bewertung +Die Gliederung ist gut strukturiert und bildet den Inhalt der Arbeit ab. Die Auslegung wird passend mit Bildern, +Source-Code und Tabellen begleitet. Stil und Grammatik sind für eine wissenschaftliche Arbeit geeignet. Literaturverzeichnis +enthält gute Referenzen. Umfang der schriftlichen Arbeit ist kurz (22 Seiten) [-2]. + +### Punktzahl +8 von 10 + +## 6. Referat +### Inhalte des Bewertungskriteriums +- Einführung ins Thema, Sachgehalt +- Aufbau, Bezüge, roter Faden +- Timing, Umgang mit Medien +- Vorbereitung, Kompetenz, Vortragsstil +- Folien (Lesbarkeit/Aufteilung/Quellen) + +### Bewertung +Das Referat stellt das Thema umfassend dar. Der rote Faden ist nachvollziehbar. Aus der Präsentation wird klar, dass +die grundlegenden Ziele, Anforderungen und die Methodik, es umzusetzen, vorstellbar für den Autor sind. Timing ist optimal, +Vortragsstil ist kompetent. Die Folien sind gut lesbar, die Literaturquellen sind vorhanden. + +### Punktzahl +20 von 20 + +## Gesamtpunktzahl +94 von 100 \ No newline at end of file diff --git a/Studienarbeit II/presentation_notes.md b/Studienarbeit II/presentation_notes.md new file mode 100644 index 0000000..787ce92 --- /dev/null +++ b/Studienarbeit II/presentation_notes.md @@ -0,0 +1,46 @@ +# Vortragsnotizen: + +## 1. Status Quo (auch Randbedingungen) +### Technologien +- Golang als Programmiersprache (unverändert) +- Goland als IDE (in Studienprojekt I) +- VSCode (Editor mit Extension wegen besserer WSL Kompatibität) +- Fyne als Frontend-Go-Library (unverändert) +- Überlegung: Frontend-Framework als Frontend mit REST-API Kommunikation (React, Angular, Vue) + - mehr Aufwand der nur die Inconvinience von Fyne lösen würde + - Probleme mit Wails für Web-Framework-Desktop Apps + - somit mehr Aufwand als funktionale Veränderungen + - deshalb bei Fyne bleiben mit Kommunikation über Signal Channel + +- TCP/IP als Protokoll weiterhin +- Testing: Zwei Szenarien: + - Zwei Computer (inconvinient) + - Zwei Instanzen auf dem selben Computer oder zwei VMs haben sich eher bewährt wegen Zeiteffizienz + +### Funktionalitäten +- Bisher bauen wir auf einer Software auf mit: + - Netzwerk: Lokale automatische TCP-Verbindungen + - TCP-Paketversand automatisch in drei verschiedenen Verzögerungen + - Pakete werden visualisiert über Balkendiagramme + - Verbindungsstatus LED für den User + - Dark Mode für Barriefreiheit, wie reduzierte Augenbelastung und bessere Lesbarkeit + - Fenster kann im Vollbild genutzt werden mit automatischer Skalierung der UI-Elemente + - Cross-Platform kompatibel, Auslieferung für Windows, Linux und MacOS + +## Frontend-Erweiterungen +### Peer-Discovery +- Vorher: Nutzer kann nicht sehen mit welchem anderen Peer er verbunden ist, nur dass er überhaupt verbunden ist oder nicht +- Snapdrop UI nicht realisiert weil: + - Fyne arbeitet mit statischen Layouts und nativen Widgets + - Radar-Zeichnung im Canvas zu komplex zur Erhaltung der Wartbarkeit des Code + - Stattdessen Stärke von Fyne: Grid-Layout + - Für Snapdrop Frontend-Austausch durch Web-Framework nötig leider (besser lösbar darin) + +- **Button Grid** für verfügbare Instanzen, blau/weiß oder blau/schwarz für hohen kontrast +- Grid wird vom Backend alle 100ms aktualisiert +- **Responsiveness im Button Grid Container** : + - Schmales Fenster: Nur zwei Buttons nebeneinander + - Breites Fenster: Vier Buttons nebeneinander, +- Vorher: User klickt auf Button -> verbindet sich -> kann nur disconnecten indem er das Programm schließt +- Disconnect Button im verbunden Zustand +- Keine Peers werden angezeigt, weil die aktuelle Instanz schon verbunden ist \ No newline at end of file diff --git a/Studienarbeit II/studienarbeit-ii.zip b/Studienarbeit II/studienarbeit-ii.zip new file mode 100644 index 0000000..3b28999 Binary files /dev/null and b/Studienarbeit II/studienarbeit-ii.zip differ diff --git a/_Templates/Vorlesung-Template.md b/_Templates/Vorlesung-Template.md new file mode 100644 index 0000000..e876a97 --- /dev/null +++ b/_Templates/Vorlesung-Template.md @@ -0,0 +1,53 @@ +# VL{{NR}} — {{THEMA}} + +> **Modul:** {{MODUL}} +> **Datum:** {{DATUM}} +> **Folien:** {{ANZAHL}} Seiten + +--- + +## Kernkonzepte + +> Die wichtigsten Konzepte dieser Vorlesung auf einen Blick. + +### 1. {{Konzept}} + +- ... + +### 2. {{Konzept}} + +- ... + +--- + +## Zusammenfassung + +> Ausführliche Zusammenfassung der Vorlesungsinhalte. + +... + +--- + +## Wichtige Begriffe + +| Begriff | Definition | +|---|---| +| ... | ... | + +--- + +## Prüfungsrelevanz + +> Was davon ist besonders klausurrelevant? + +- ... + +--- + +## Offene Fragen + +- [ ] ... + +--- + +> *Zusammenfassung erstellt mit Claude · {{DATUM}}* diff --git a/ptb2/PTB2_Sichtvermerk_kr_troegmar.pdf b/ptb2/PTB2_Sichtvermerk_kr_troegmar.pdf new file mode 100644 index 0000000..7d9b65a Binary files /dev/null and b/ptb2/PTB2_Sichtvermerk_kr_troegmar.pdf differ diff --git a/ptb3 seminar/Bewertung+Theo+Leuthardt.pdf b/ptb3 seminar/Bewertung+Theo+Leuthardt.pdf new file mode 100644 index 0000000..65c7f8d Binary files /dev/null and b/ptb3 seminar/Bewertung+Theo+Leuthardt.pdf differ diff --git a/ptb3 seminar/ERM_aktuell.png b/ptb3 seminar/ERM_aktuell.png new file mode 100644 index 0000000..b5ed884 Binary files /dev/null and b/ptb3 seminar/ERM_aktuell.png differ diff --git a/ptb3 seminar/ERM_neu.png b/ptb3 seminar/ERM_neu.png new file mode 100644 index 0000000..c0ab971 Binary files /dev/null and b/ptb3 seminar/ERM_neu.png differ diff --git a/ptb3 seminar/Java.png b/ptb3 seminar/Java.png new file mode 100644 index 0000000..4be53c3 Binary files /dev/null and b/ptb3 seminar/Java.png differ diff --git a/ptb3 seminar/PP_Vorlage.pptx b/ptb3 seminar/PP_Vorlage.pptx new file mode 100644 index 0000000..3924cec Binary files /dev/null and b/ptb3 seminar/PP_Vorlage.pptx differ diff --git a/ptb3 seminar/PT2_PP.pptx b/ptb3 seminar/PT2_PP.pptx new file mode 100644 index 0000000..eeede72 Binary files /dev/null and b/ptb3 seminar/PT2_PP.pptx differ diff --git a/ptb3 seminar/PTB_III_Sichtvermerk.pdf b/ptb3 seminar/PTB_III_Sichtvermerk.pdf new file mode 100644 index 0000000..909528e Binary files /dev/null and b/ptb3 seminar/PTB_III_Sichtvermerk.pdf differ diff --git a/ptb3 seminar/Projektstruktur.png b/ptb3 seminar/Projektstruktur.png new file mode 100644 index 0000000..6c781e6 Binary files /dev/null and b/ptb3 seminar/Projektstruktur.png differ diff --git a/ptb3 seminar/ausweisapp2.jpg b/ptb3 seminar/ausweisapp2.jpg new file mode 100644 index 0000000..4ff7412 Binary files /dev/null and b/ptb3 seminar/ausweisapp2.jpg differ diff --git a/ptb3 seminar/confluence.svg b/ptb3 seminar/confluence.svg new file mode 100644 index 0000000..22249e1 --- /dev/null +++ b/ptb3 seminar/confluence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ptb3 seminar/erm.png b/ptb3 seminar/erm.png new file mode 100644 index 0000000..1c86753 Binary files /dev/null and b/ptb3 seminar/erm.png differ diff --git a/ptb3 seminar/erm_nobg.png b/ptb3 seminar/erm_nobg.png new file mode 100644 index 0000000..22ff749 Binary files /dev/null and b/ptb3 seminar/erm_nobg.png differ diff --git a/ptb3 seminar/gitlab.svg b/ptb3 seminar/gitlab.svg new file mode 100644 index 0000000..5fbbedd --- /dev/null +++ b/ptb3 seminar/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ptb3 seminar/jpa.webp b/ptb3 seminar/jpa.webp new file mode 100644 index 0000000..390ff2b Binary files /dev/null and b/ptb3 seminar/jpa.webp differ diff --git a/ptb3 seminar/personalausweis.jpg b/ptb3 seminar/personalausweis.jpg new file mode 100644 index 0000000..e585781 Binary files /dev/null and b/ptb3 seminar/personalausweis.jpg differ